From ffae34c5fd0977938bf46b673397b17c58bc99e7 Mon Sep 17 00:00:00 2001
From: Braden Obrzut <admin@maniacsvault.net>
Date: Mon, 30 Sep 2013 20:02:05 -0400
Subject: [PATCH 1/7] - Changed the new default alignment keyword for drawimage
 from topleft to none in order to allow a potential topleft without image
 offsets.

---
 src/g_shared/sbarinfo_commands.cpp | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/g_shared/sbarinfo_commands.cpp b/src/g_shared/sbarinfo_commands.cpp
index d5ee06d11..449079ab5 100644
--- a/src/g_shared/sbarinfo_commands.cpp
+++ b/src/g_shared/sbarinfo_commands.cpp
@@ -173,13 +173,18 @@ class CommandDrawImage : public SBarInfoCommandFlowControl
 			GetCoordinates(sc, fullScreenOffsets, imgx, imgy);
 			if(sc.CheckToken(','))
 			{
-				sc.MustGetToken(TK_Identifier);
-				if(sc.Compare("center"))
-					offset = CENTER;
-				else if(sc.Compare("centerbottom"))
-					offset = static_cast<Offset> (HMIDDLE|BOTTOM);
-				else if(!sc.Compare("lefttop")) //That's already set
-					sc.ScriptError("'%s' is not a valid alignment.", sc.String);
+				// Use none instead of topleft in case we decide we want to use
+				// alignments to remove the offset from images.
+				if(!sc.CheckToken(TK_None))
+				{
+					sc.MustGetToken(TK_Identifier);
+					if(sc.Compare("center"))
+						offset = CENTER;
+					else if(sc.Compare("centerbottom"))
+						offset = static_cast<Offset> (HMIDDLE|BOTTOM);
+					else
+						sc.ScriptError("'%s' is not a valid alignment.", sc.String);
+				}
 			}
 			if(sc.CheckToken(','))
 			{

From f386d6b1e3c2311e664dc6385c018ad39eb67edd Mon Sep 17 00:00:00 2001
From: Braden Obrzut <admin@maniacsvault.net>
Date: Sun, 6 Oct 2013 14:37:51 -0400
Subject: [PATCH 2/7] - Embed the proper manifest file and group soure files
 when building Visual Studio projects with CMake.  (The groups probably also
 apply to other project types as well.)

---
 src/CMakeLists.txt | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4223598f5..4a05c8278 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -999,4 +999,35 @@ endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" S
 
 if( MSVC )
 	set_target_properties(zdoom PROPERTIES LINK_FLAGS "/MANIFEST:NO")
+	add_custom_command(TARGET zdoom POST_BUILD
+		COMMAND "mt.exe" -manifest \"${CMAKE_CURRENT_SOURCE_DIR}\\win32\\zdoom.exe.manifest\" -outputresource:\"$(TargetDir)$(TargetFileName)\"\;\#2
+		COMMENT "Adding manifest..."
+	)
 endif( MSVC )
+
+source_group("Audio Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/.+")
+source_group("Audio Files\\OPL Synth" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/oplsynth/.+")
+source_group("Audio Files\\OPL Synth\\DOSBox" FILES oplsynth/dosbox/opl.h oplsynth/dosbox/opl.cpp)
+source_group("Audio Files\\Timidity\\Headers" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/timidity/.+\\.h$")
+source_group("Audio Files\\Timidity\\Source" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/timidity/.+\\.cpp$")
+source_group("Decorate++" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/thingdef/.+")
+source_group("FraggleScript" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/fragglescript/.+")
+source_group("Games\\Doom Game" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/g_doom/.+")
+source_group("Games\\Heretic Game" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/g_heretic/.+")
+source_group("Games\\Hexen Game" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/g_hexen/.+")
+source_group("Games\\Raven Shared" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/g_raven/.+")
+source_group("Games\\Strife Game" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/g_strife/.+")
+source_group("Intermission" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/intermission/.+")
+source_group("Menu" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/menu/.+")
+source_group("Render Core\\Render Headers" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/r_.+\\.h$")
+source_group("Render Core\\Render Sources" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/r_.+\\.cpp$")
+source_group("Render Data\\Resource Headers" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/r_data/.+\\.h$")
+source_group("Render Data\\Resource Sources" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/r_data/.+\\.cpp$")
+source_group("Render Data\\Textures" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/.+")
+source_group("Render Interface" FILES r_defs.h r_renderer.h r_sky.cpp r_sky.h r_state.h r_utility.cpp r_utility.h)
+source_group("Resource Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/resourcefiles/.+")
+source_group("SFML" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sfmt/.+")
+source_group("Shared Game" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/g_shared/.+")
+source_group("Versioning" FILES version.h win32/zdoom.rc)
+source_group("Win32 Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/win32/.+")
+source_group("Xlat" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/xlat/.+")

From c4d2a021b0cbf421158414555a48a8f8240e9609 Mon Sep 17 00:00:00 2001
From: Christoph Oelckers <coelckers@zdoom.fake>
Date: Mon, 7 Oct 2013 11:53:58 +0200
Subject: [PATCH 3/7] - fixed: AInventory::BecomePickup must not restore the
 MF_COUNTITEM flag when transforming the inventory item into a pickup again.

---
 src/g_shared/a_pickups.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/g_shared/a_pickups.cpp b/src/g_shared/a_pickups.cpp
index bba5cfdc7..3ebcedb40 100644
--- a/src/g_shared/a_pickups.cpp
+++ b/src/g_shared/a_pickups.cpp
@@ -785,7 +785,7 @@ void AInventory::BecomePickup ()
 		LinkToWorld ();
 		P_FindFloorCeiling (this);
 	}
-	flags = GetDefault()->flags | MF_DROPPED;
+	flags = (GetDefault()->flags | MF_DROPPED) & ~MF_COUNTITEM;
 	renderflags &= ~RF_INVISIBLE;
 	SetState (SpawnState);
 }

From 4ced90756acc631ee0285bc510c953ab662ccde6 Mon Sep 17 00:00:00 2001
From: Braden Obrzut <admin@maniacsvault.net>
Date: Tue, 8 Oct 2013 15:35:50 -0400
Subject: [PATCH 4/7] - Let CMake know about noncompiled cpp files so they can
 appear in project files. - Fixed: Somehow when I added a way to disable
 generator expressions I inverted the meaning of NO_GENERATOR_EXPRESSIONS.

---
 CMakeLists.txt     |   6 +-
 src/CMakeLists.txt | 182 ++++++++++++++++++++++++++++++++++++---------
 2 files changed, 150 insertions(+), 38 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0858ecab5..087535b69 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,16 +19,16 @@ function( add_pk3 PK3_NAME PK3_DIR )
 		set( PK3_TARGET "pk3" )
 	endif( ${PK3_TARGET} STREQUAL "zdoom_pk3" )
 
-	if( NO_GENERATOR_EXPRESSIONS )
+	if( NOT NO_GENERATOR_EXPRESSIONS )
 		add_custom_command( OUTPUT ${ZDOOM_OUTPUT_DIR}/${PK3_NAME}
 			COMMAND ${ZIPDIR_EXE} -udf ${ZDOOM_OUTPUT_DIR}/${PK3_NAME} ${PK3_DIR}
 			COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ZDOOM_OUTPUT_DIR}/${PK3_NAME} $<TARGET_FILE_DIR:zdoom>
 			DEPENDS zipdir ${PK3_DIR} )
-	else( NO_GENERATOR_EXPRESSIONS )
+	else( NOT NO_GENERATOR_EXPRESSIONS )
 		add_custom_command( OUTPUT ${ZDOOM_OUTPUT_DIR}/${PK3_NAME}
 			COMMAND ${ZIPDIR_EXE} -udf ${ZDOOM_OUTPUT_DIR}/${PK3_NAME} ${PK3_DIR}
 			DEPENDS zipdir ${PK3_DIR} )
-	endif( NO_GENERATOR_EXPRESSIONS )
+	endif( NOT NO_GENERATOR_EXPRESSIONS )
 
 	add_custom_target( ${PK3_TARGET} ALL
 		DEPENDS ${ZDOOM_OUTPUT_DIR}/${PK3_NAME} )
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4a05c8278..708e562c4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -511,29 +511,46 @@ if( FLUIDSYNTH_FOUND )
 endif( FLUIDSYNTH_FOUND )
 
 # Start defining source files for ZDoom
-
+set( PLAT_WIN32_SOURCES
+	win32/eaxedit.cpp
+	win32/fb_d3d9.cpp
+	win32/fb_d3d9_wipe.cpp
+	win32/fb_ddraw.cpp
+	win32/hardware.cpp
+	win32/helperthread.cpp
+	win32/i_cd.cpp
+	win32/i_crash.cpp
+	win32/i_input.cpp
+	win32/i_keyboard.cpp
+	win32/i_mouse.cpp
+	win32/i_dijoy.cpp
+	win32/i_rawps2.cpp
+	win32/i_xinput.cpp
+	win32/i_main.cpp
+	win32/i_movie.cpp
+	win32/i_system.cpp
+	win32/st_start.cpp
+	win32/win32video.cpp )
+set( PLAT_SDL_SOURCES
+	sdl/crashcatcher.c
+	sdl/hardware.cpp
+	sdl/i_cd.cpp
+	sdl/i_input.cpp
+	sdl/i_joystick.cpp
+	sdl/i_main.cpp
+	sdl/i_movie.cpp
+	sdl/i_system.cpp
+	sdl/sdlvideo.cpp
+	sdl/st_start.cpp )
+set( PLAT_MAC_SOURCES
+	sdl/SDLMain.m
+	sdl/iwadpicker_cocoa.mm
+	sdl/i_system_cocoa.mm )
 if( WIN32 )
 	set( SYSTEM_SOURCES_DIR win32 )
-	set( SYSTEM_SOURCES
-		win32/eaxedit.cpp
-		win32/fb_d3d9.cpp
-		win32/fb_d3d9_wipe.cpp
-		win32/fb_ddraw.cpp
-		win32/hardware.cpp
-		win32/helperthread.cpp
-		win32/i_cd.cpp
-		win32/i_crash.cpp
-		win32/i_input.cpp
-		win32/i_keyboard.cpp
-		win32/i_mouse.cpp
-		win32/i_dijoy.cpp
-		win32/i_rawps2.cpp
-		win32/i_xinput.cpp
-		win32/i_main.cpp
-		win32/i_movie.cpp
-		win32/i_system.cpp
-		win32/st_start.cpp
-		win32/win32video.cpp )
+	set( SYSTEM_SOURCES ${PLAT_WIN32_SOURCES} )
+	set( OTHER_SYSTEM_SOURCES ${PLAT_SDL_SOURCES} ${PLAT_MAC_SOURCES} )
+	
 	if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
 		# CMake is not set up to compile and link rc files with GCC. :(
 		add_custom_command( OUTPUT zdoom-rc.o
@@ -545,19 +562,12 @@ if( WIN32 )
 	endif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" )
 else( WIN32 )
 	set( SYSTEM_SOURCES_DIR sdl )
-	set( SYSTEM_SOURCES
-		sdl/crashcatcher.c
-		sdl/hardware.cpp
-		sdl/i_cd.cpp
-		sdl/i_input.cpp
-		sdl/i_joystick.cpp
-		sdl/i_main.cpp
-		sdl/i_movie.cpp
-		sdl/i_system.cpp
-		sdl/sdlvideo.cpp
-		sdl/st_start.cpp )
+	set( SYSTEM_SOURCES ${PLAT_SDL_SOURCES} )
 	if( APPLE )
-		set( SYSTEM_SOURCES ${SYSTEM_SOURCES} sdl/SDLMain.m sdl/iwadpicker_cocoa.mm sdl/i_system_cocoa.mm )
+		set( SYSTEM_SOURCES ${SYSTEM_SOURCES} ${PLAT_MAC_SOURCES} )
+		set( OTHER_SYSTEM_SOURCES ${PLAT_WIN32_SOURCES} )
+	else( APPLE )
+		set( OTHER_SYSTEM_SOURCES ${PLAT_WIN32_SOURCES} ${PLAT_MAC_SOURCES} )
 	endif( APPLE )
 endif( WIN32 )
 
@@ -627,8 +637,10 @@ file( GLOB HEADER_FILES
 	intermission/*.h
 	menu/*.h
 	oplsynth/*.h
+	oplsynth/dosbox/*.h
 	r_data/*.h
 	resourcefiles/*.h
+	sdl/*.h
 	sfmt/*.h
 	sound/*.h
 	textures/*.h
@@ -637,8 +649,103 @@ file( GLOB HEADER_FILES
 	*.h
 )
 
+# These files will be flagged as "headers" so that they appear in project files
+# without being compiled.
+set( NOT_COMPILED_SOURCE_FILES
+	${OTHER_SYSTEM_SOURCES}
+	sc_man_scanner.h
+	sc_man_scanner.re
+	g_doom/a_arachnotron.cpp
+	g_doom/a_archvile.cpp
+	g_doom/a_bossbrain.cpp
+	g_doom/a_bruiser.cpp
+	g_doom/a_cacodemon.cpp
+	g_doom/a_cyberdemon.cpp
+	g_doom/a_demon.cpp
+	g_doom/a_doomimp.cpp
+	g_doom/a_doomweaps.cpp
+	g_doom/a_fatso.cpp
+	g_doom/a_keen.cpp
+	g_doom/a_lostsoul.cpp
+	g_doom/a_painelemental.cpp
+	g_doom/a_possessed.cpp
+	g_doom/a_revenant.cpp
+	g_doom/a_scriptedmarine.cpp
+	g_doom/a_spidermaster.cpp
+	g_heretic/a_chicken.cpp
+	g_heretic/a_dsparil.cpp
+	g_heretic/a_hereticartifacts.cpp
+	g_heretic/a_hereticimp.cpp
+	g_heretic/a_hereticweaps.cpp
+	g_heretic/a_ironlich.cpp
+	g_heretic/a_knight.cpp
+	g_heretic/a_wizard.cpp
+	g_hexen/a_bats.cpp
+	g_hexen/a_bishop.cpp
+	g_hexen/a_blastradius.cpp
+	g_hexen/a_boostarmor.cpp
+	g_hexen/a_centaur.cpp
+	g_hexen/a_clericflame.cpp
+	g_hexen/a_clericholy.cpp
+	g_hexen/a_clericmace.cpp
+	g_hexen/a_clericstaff.cpp
+	g_hexen/a_dragon.cpp
+	g_hexen/a_fighteraxe.cpp
+	g_hexen/a_fighterhammer.cpp
+	g_hexen/a_fighterplayer.cpp
+	g_hexen/a_fighterquietus.cpp
+	g_hexen/a_firedemon.cpp
+	g_hexen/a_flechette.cpp
+	g_hexen/a_fog.cpp
+	g_hexen/a_healingradius.cpp
+	g_hexen/a_heresiarch.cpp
+	g_hexen/a_hexenspecialdecs.cpp
+	g_hexen/a_iceguy.cpp
+	g_hexen/a_korax.cpp
+	g_hexen/a_magecone.cpp
+	g_hexen/a_magelightning.cpp
+	g_hexen/a_magestaff.cpp
+	g_hexen/a_pig.cpp
+	g_hexen/a_serpent.cpp
+	g_hexen/a_spike.cpp
+	g_hexen/a_summon.cpp
+	g_hexen/a_teleportother.cpp
+	g_hexen/a_wraith.cpp
+	g_strife/a_acolyte.cpp
+	g_strife/a_alienspectres.cpp
+	g_strife/a_coin.cpp
+	g_strife/a_crusader.cpp
+	g_strife/a_entityboss.cpp
+	g_strife/a_inquisitor.cpp
+	g_strife/a_oracle.cpp
+	g_strife/a_programmer.cpp
+	g_strife/a_reaver.cpp
+	g_strife/a_rebels.cpp
+	g_strife/a_sentinel.cpp
+	g_strife/a_stalker.cpp
+	g_strife/a_strifeitems.cpp
+	g_strife/a_strifeweapons.cpp
+	g_strife/a_templar.cpp
+	g_strife/a_thingstoblowup.cpp
+	g_shared/sbarinfo_commands.cpp
+	xlat/xlat_parser.y
+	xlat_parser.c
+	xlat_parser.h
+
+	# We could have the ASM macro add these files, but it wouldn't add all
+	# platforms.
+	asm_ia32/a.asm
+	asm_ia32/misc.asm
+	asm_ia32/tmap.asm
+	asm_ia32/tmap2.asm
+	asm_ia32/tmap3.asm
+	asm_x86_64/tmap3.asm
+	asm_x86_64/tmap3.s
+)
+
 add_executable( zdoom WIN32
 	${HEADER_FILES}
+	${NOT_COMPILED_SOURCE_FILES}
 	autostart.cpp
 	${ASM_SOURCES}
 	${SYSTEM_SOURCES}
@@ -948,6 +1055,7 @@ add_executable( zdoom WIN32
 
 set_source_files_properties( xlat/parse_xlat.cpp PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/xlat_parser.c" )
 set_source_files_properties( sc_man.cpp PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/sc_man_scanner.h" )
+set_source_files_properties( ${NOT_COMPILED_SOURCE_FILES} PROPERTIES HEADER_FILE_ONLY TRUE )
 
 if(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
 	# [BL] Solaris requires these to be explicitly linked.
@@ -1005,9 +1113,11 @@ if( MSVC )
 	)
 endif( MSVC )
 
+source_group("Assembly Files\\ia32" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/asm_ia32/.+")
+source_group("Assembly Files\\x86_64" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/asm_x86_64/.+")
 source_group("Audio Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sound/.+")
 source_group("Audio Files\\OPL Synth" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/oplsynth/.+")
-source_group("Audio Files\\OPL Synth\\DOSBox" FILES oplsynth/dosbox/opl.h oplsynth/dosbox/opl.cpp)
+source_group("Audio Files\\OPL Synth\\DOSBox" FILES oplsynth/dosbox/opl.cpp oplsynth/dosbox/opl.h)
 source_group("Audio Files\\Timidity\\Headers" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/timidity/.+\\.h$")
 source_group("Audio Files\\Timidity\\Source" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/timidity/.+\\.cpp$")
 source_group("Decorate++" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/thingdef/.+")
@@ -1026,8 +1136,10 @@ source_group("Render Data\\Resource Sources" REGULAR_EXPRESSION "^${CMAKE_CURREN
 source_group("Render Data\\Textures" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/textures/.+")
 source_group("Render Interface" FILES r_defs.h r_renderer.h r_sky.cpp r_sky.h r_state.h r_utility.cpp r_utility.h)
 source_group("Resource Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/resourcefiles/.+")
+source_group("SDL Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sdl/.+")
 source_group("SFML" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/sfmt/.+")
 source_group("Shared Game" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/g_shared/.+")
 source_group("Versioning" FILES version.h win32/zdoom.rc)
 source_group("Win32 Files" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/win32/.+")
-source_group("Xlat" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/xlat/.+")
+source_group("Xlat" REGULAR_EXPRESSION "^${CMAKE_CURRENT_SOURCE_DIR}/xlat/.+" FILES ${CMAKE_CURRENT_BINARY_DIR}/xlat_parser.c ${CMAKE_CURRENT_BINARY_DIR}/xlat_parser.h)
+source_group("Source Files" FILES ${CMAKE_CURRENT_BINARY_DIR}/sc_man_scanner.h sc_man_scanner.re)

From d558cf51a9819723969b18d715a9162982c8a7ca Mon Sep 17 00:00:00 2001
From: Randy Heit <rheit@zdoom.fake>
Date: Tue, 8 Oct 2013 19:59:46 -0500
Subject: [PATCH 5/7] - Fixed: ABackpackItem::CreateTossable did not check for
 failure from the supermethod.

---
 src/g_shared/a_pickups.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/g_shared/a_pickups.cpp b/src/g_shared/a_pickups.cpp
index 3ebcedb40..cc559ea94 100644
--- a/src/g_shared/a_pickups.cpp
+++ b/src/g_shared/a_pickups.cpp
@@ -1792,7 +1792,10 @@ bool ABackpackItem::HandlePickup (AInventory *item)
 AInventory *ABackpackItem::CreateTossable ()
 {
 	ABackpackItem *pack = static_cast<ABackpackItem *>(Super::CreateTossable());
-	pack->bDepleted = true;
+	if (pack != NULL)
+	{
+		pack->bDepleted = true;
+	}
 	return pack;
 }
 

From 3c376aa342994971e0e3f578476e8085d346cdf1 Mon Sep 17 00:00:00 2001
From: Randy Heit <rheit@zdoom.fake>
Date: Tue, 8 Oct 2013 20:18:35 -0500
Subject: [PATCH 6/7] Move C_ExecCmdLineParams() call slightly later in the
 startup process.

- Fixed: You could not set any CVARINFO-defined cvars from the command line
  because command line console commands were executed before wads were
  even loaded. Off the top of my head, I can't think of anything that would\
  break by having them get executed after wads are loaded.
---
 src/d_main.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/d_main.cpp b/src/d_main.cpp
index ae1c5144d..507938519 100644
--- a/src/d_main.cpp
+++ b/src/d_main.cpp
@@ -2281,8 +2281,6 @@ void D_DoomMain (void)
 		execFiles = Args->GatherFiles ("-exec");
 		D_MultiExec (execFiles, true);
 
-		C_ExecCmdLineParams ();		// [RH] do all +set commands on the command line
-
 		CopyFiles(allwads, pwads);
 
 		// Since this function will never leave we must delete this array here manually.
@@ -2298,6 +2296,8 @@ void D_DoomMain (void)
 		// Now that wads are loaded, define mod-specific cvars.
 		ParseCVarInfo();
 
+		C_ExecCmdLineParams ();		// [RH] do all +set commands on the command line
+
 		// [RH] Initialize localizable strings.
 		GStrings.LoadStrings (false);
 

From 0c9c624e8cfeeff5fbd78fb1641749d34e08bff9 Mon Sep 17 00:00:00 2001
From: Randy Heit <rheit@zdoom.fake>
Date: Tue, 8 Oct 2013 21:32:26 -0500
Subject: [PATCH 7/7] Do not follow NextThinker links in DestroyThinkersInList

- Fixed: DThinker::Destroy(Most)ThinkersInList() were unreliable when
  destroyed thinkers destroyed more thinkers in the same list.
  Specifically, if the thinker it destroyed caused the very next thinker
  in the list to also be destroyed, it would get lost in the thinker list
  and end up with a NULL node. So just keep iterating through the first
  thinker in the list until there are none left. Since destroying a
  thinker causes it to remove itself from its list, the first thinker will
  always be changing as long as there's something to destroy.
---
 src/dthinker.cpp | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/src/dthinker.cpp b/src/dthinker.cpp
index 15206dabd..5405051e7 100644
--- a/src/dthinker.cpp
+++ b/src/dthinker.cpp
@@ -357,12 +357,10 @@ void DThinker::DestroyThinkersInList (FThinkerList &list)
 {
 	if (list.Sentinel != NULL)
 	{
-		DThinker *node = list.Sentinel->NextThinker;
-		while (node != list.Sentinel)
+		for (DThinker *node = list.Sentinel->NextThinker; node != list.Sentinel; node = list.Sentinel->NextThinker)
 		{
-			DThinker *next = node->NextThinker;
+			assert(node != NULL);
 			node->Destroy();
-			node = next;
 		}
 		list.Sentinel->Destroy();
 		list.Sentinel = NULL;
@@ -380,9 +378,8 @@ void DThinker::DestroyMostThinkersInList (FThinkerList &list, int stat)
 	  // it from the list. G_FinishTravel() will find it later from
 	  // a players[].mo link and destroy it then, after copying various
 	  // information to a new player.
-		for (DThinker *probe = list.Sentinel->NextThinker, *next; probe != list.Sentinel; probe = next)
+		for (DThinker *probe = list.Sentinel->NextThinker; probe != list.Sentinel; probe = list.Sentinel->NextThinker)
 		{
-			next = probe->NextThinker;
 			if (!probe->IsKindOf(RUNTIME_CLASS(APlayerPawn)) ||		// <- should not happen
 				static_cast<AActor *>(probe)->player == NULL ||
 				static_cast<AActor *>(probe)->player->mo != probe)