diff --git a/src/deh_tables.c b/src/deh_tables.c
index 91163b20695b324cc83ac83a6b30a135ea0419e6..48ce34931802b9c81a3954ff34a4fc2f0ff704ca 100644
--- a/src/deh_tables.c
+++ b/src/deh_tables.c
@@ -3185,37 +3185,28 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
 
 	"S_RINGEXPLODE",
 
-	"S_COIN1",
-	"S_COIN2",
-	"S_COIN3",
+	// Mario-specific stuff
+	"S_COIN",
 	"S_COINSPARKLE1",
 	"S_COINSPARKLE2",
-	"S_COINSPARKLE3",
-	"S_COINSPARKLE4",
 	"S_GOOMBA1",
 	"S_GOOMBA1B",
 	"S_GOOMBA2",
 	"S_GOOMBA3",
 	"S_GOOMBA4",
 	"S_GOOMBA5",
-	"S_GOOMBA6",
-	"S_GOOMBA7",
-	"S_GOOMBA8",
-	"S_GOOMBA9",
 	"S_GOOMBA_DEAD",
+	"S_GOOMBA_DEAD2",
+	"S_GOOMBA_DEAD3",
 	"S_BLUEGOOMBA1",
 	"S_BLUEGOOMBA1B",
 	"S_BLUEGOOMBA2",
 	"S_BLUEGOOMBA3",
 	"S_BLUEGOOMBA4",
 	"S_BLUEGOOMBA5",
-	"S_BLUEGOOMBA6",
-	"S_BLUEGOOMBA7",
-	"S_BLUEGOOMBA8",
-	"S_BLUEGOOMBA9",
 	"S_BLUEGOOMBA_DEAD",
-
-	// Mario-specific stuff
+	"S_BLUEGOOMBA_DEAD2",
+	"S_BLUEGOOMBA_DEAD3",
 	"S_FIREFLOWER1",
 	"S_FIREFLOWER2",
 	"S_FIREFLOWER3",
@@ -3223,6 +3214,13 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
 	"S_FIREBALL",
 	"S_FIREBALLTRAIL1",
 	"S_FIREBALLTRAIL2",
+	"S_GREENKOOPASPAWN",
+	"S_GREENKOOPA1",
+	"S_GREENKOOPA2",
+	"S_GREENKOOPA3",
+	"S_GREENKOOPA4",
+	"S_GREENKOOPADEATH1",
+	"S_GREENKOOPADEATH2",
 	"S_SHELL",
 	"S_PUMA_START1",
 	"S_PUMA_START2",
@@ -3248,6 +3246,21 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
 	"S_MARIOBUSH1",
 	"S_MARIOBUSH2",
 	"S_TOAD",
+	"S_PTZSHROOM",
+	"S_PTZFLAG1",
+	"S_PTZFLAG2",
+	"S_PTZFLAG3",
+	"S_PTZFLAG4",
+	"S_PTZFLAG5",
+	"S_MARIOBUSH",
+	"S_BSBSHROOM",
+	"S_BLBSHROOM",
+	"S_BNWSHROOM",
+	"S_REDMFLOWER",
+	"S_BLUEMFLOWER",
+	"S_YELLOWMFLOWER",
+	"S_WHITEDANDELION",
+	"S_MAR64TREE",
 
 	// Nights-specific stuff
 	"S_NIGHTSDRONE_MAN1",
@@ -3550,6 +3563,11 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
 	"S_REDBRICKDEBRIS",
 	"S_BLUEBRICKDEBRIS",
 	"S_YELLOWBRICKDEBRIS",
+	"S_MARIOBRICKDEBRIS",
+	"S_MARIOBRICKDEBRISS",
+	"S_MARIOBRICKDEBRISB",
+	"S_MARIOBRICKDEBRISC",
+	"S_MARIOBRICKDEBRISM",
 
 	"S_NAMECHECK",
 };
@@ -4219,6 +4237,7 @@ const char *const MOBJTYPE_LIST[] = {  // array length left dynamic for sanity t
 	"MT_FIREFLOWER",
 	"MT_FIREBALL",
 	"MT_FIREBALLTRAIL",
+	"MT_GREENKOOPA",
 	"MT_SHELL",
 	"MT_PUMA",
 	"MT_PUMATRAIL",
@@ -4229,6 +4248,17 @@ const char *const MOBJTYPE_LIST[] = {  // array length left dynamic for sanity t
 	"MT_MARIOBUSH1",
 	"MT_MARIOBUSH2",
 	"MT_TOAD",
+	"MT_PTZSHROOM",
+	"MT_PTZFLAG",
+	"MT_BSBSHROOM",
+	"MT_BLBSHROOM",
+	"MT_BNWSHROOM",
+	"MT_MARIOBUSH",
+	"MT_REDMFLOWER",
+	"MT_BLUEMFLOWER",
+	"MT_YELLOWMFLOWER",
+	"MT_WHITEDANDELION",
+	"MT_MAR64TREE",
 
 	// NiGHTS Stuff
 	"MT_AXIS",
@@ -4326,6 +4356,11 @@ const char *const MOBJTYPE_LIST[] = {  // array length left dynamic for sanity t
 	"MT_REDBRICKDEBRIS",
 	"MT_BLUEBRICKDEBRIS",
 	"MT_YELLOWBRICKDEBRIS",
+	"MT_MARIOBRICKDEBRIS",
+	"MT_MARIOBRICKDEBRISS",
+	"MT_MARIOBRICKDEBRISB",
+	"MT_MARIOBRICKDEBRISC",
+	"MT_MARIOBRICKDEBRISM",
 
 	"MT_NAMECHECK",
 	"MT_RAY",
diff --git a/src/f_finale.c b/src/f_finale.c
index 2258d37734aef2f90dab9a49cb08b119673e8146..61c2ff5612d623e7c4f582c2ccda1015ab85209d 100644
--- a/src/f_finale.c
+++ b/src/f_finale.c
@@ -1104,7 +1104,6 @@ static const char *credits[] = {
 	"\"ChrispyPixels\"",
 	"Paul \"Boinciel\" Clempson",
 	"Sally \"TehRealSalt\" Cochenour",
-	"\"Dave Lite\"",
 	"Desmond \"Blade\" DesJardins",
 	"Sherman \"CoatRack\" DesJardins",
 	"\"DirkTheHusky\"",
@@ -1124,6 +1123,7 @@ static const char *credits[] = {
 	"\"MotorRoach\"",
 	"Phillip \"TelosTurntable\" Robinson",
 	"\"Scizor300\"",
+	"\"Skydusk\"",
 	"Wessel \"sphere\" Smit",
 	"David \"Instant Sonic\" Spencer Jr.",
 	"\"SSNTails\"",
@@ -1173,6 +1173,7 @@ static const char *credits[] = {
 	"\"Radicalicious\"",
 	"\"Revan\"",
 	"Anna \"QueenDelta\" Sandlin",
+	"\"Skydusk\"",
 	"Wessel \"sphere\" Smit",
 	"\"SSNTails\"",
 	"Aaron \"Othius\" Stojkov",
diff --git a/src/hardware/hw_light.c b/src/hardware/hw_light.c
index 2fefe3ed2b365e3b193120353f5ae77d71850e71..e118fff5139c8ecabb093e6d0fc788d10c056790 100644
--- a/src/hardware/hw_light.c
+++ b/src/hardware/hw_light.c
@@ -539,6 +539,7 @@ light_t *t_lspr[NUMSPRITES] =
 	&lspr[NOLIGHT],     // SPR_BGOM
 	&lspr[REDBALL_L],     // SPR_FFWR
 	&lspr[SMALLREDBALL_L], // SPR_FBLL
+	&lspr[NOLIGHT],		// SPR_MKOP
 	&lspr[NOLIGHT],     // SPR_SHLL
 	&lspr[REDBALL_L],   // SPR_PUMA
 	&lspr[NOLIGHT],     // SPR_HAMM
@@ -609,6 +610,22 @@ light_t *t_lspr[NUMSPRITES] =
 	&lspr[NOLIGHT], // SPR_BRIR
 	&lspr[NOLIGHT], // SPR_BRIB
 	&lspr[NOLIGHT], // SPR_BRIY
+	&lspr[NOLIGHT], // SPR_MBRI
+	&lspr[NOLIGHT], // SPR_MBRS
+	&lspr[NOLIGHT], // SPR_MBRB
+	&lspr[NOLIGHT], // SPR_MBRC
+	&lspr[NOLIGHT], // SPR_MTRI
+	&lspr[NOLIGHT], // SPR_MARS
+	&lspr[NOLIGHT], // SPR_MRFL
+	&lspr[NOLIGHT], // SPR_MAUH
+	&lspr[NOLIGHT], // SPR_MBSA
+	&lspr[NOLIGHT], // SPR_MBSB
+	&lspr[NOLIGHT], // SPR_MBSC
+	&lspr[NOLIGHT], // SPR_MFRE
+	&lspr[NOLIGHT], // SPR_MFYE
+	&lspr[NOLIGHT], // SPR_MFBE
+	&lspr[NOLIGHT], // SPR_MFWD
+	&lspr[NOLIGHT], // SPR_MUS3
 
 	// Gravity Well Objects
 	&lspr[NOLIGHT],     // SPR_GWLG
diff --git a/src/info.c b/src/info.c
index 842d8bceb0b06542b47fce006ec5001da66a4118..0008b4dae804aedd410479e8c50e142367dd4056 100644
--- a/src/info.c
+++ b/src/info.c
@@ -450,6 +450,7 @@ char sprnames[NUMSPRITES + 1][MAXSPRITENAME + 1] =
 	"BGOM",
 	"FFWR",
 	"FBLL",
+	"MKOP",
 	"SHLL",
 	"PUMA",
 	"HAMM",
@@ -459,6 +460,17 @@ char sprnames[NUMSPRITES + 1][MAXSPRITENAME + 1] =
 	"MUS1",
 	"MUS2",
 	"TOAD",
+	"MARS",
+	"MRFL",
+	"MAUH",
+	"MBSA",
+	"MBSB",
+	"MBSC",
+	"MFRE",
+	"MFYE",
+	"MFBE",
+	"MFWD",
+	"MUS3",
 
 	// NiGHTS Stuff
 	"NDRN", // NiGHTS drone
@@ -520,6 +532,11 @@ char sprnames[NUMSPRITES + 1][MAXSPRITENAME + 1] =
 	"BRIR", // CEZ3 colored bricks
 	"BRIB", // CEZ3 colored bricks
 	"BRIY", // CEZ3 colored bricks
+	"MBRI",
+	"MBRS",
+	"MBRB",
+	"MBRC",
+	"MTRI",
 
 	// Gravity Well Objects
 	"GWLG",
@@ -3599,41 +3616,33 @@ state_t states[NUMSTATES] =
 	{SPR_NULL, 0, 1, {A_RingExplode}, 0, 0, S_XPLD1, 0}, // S_RINGEXPLODE
 
 	// Coin
-	{SPR_COIN, FF_FULLBRIGHT,   5, {NULL}, 0, 0, S_COIN2, 0}, // S_COIN1
-	{SPR_COIN, FF_FULLBRIGHT|1, 5, {NULL}, 0, 0, S_COIN3, 0}, // S_COIN2
-	{SPR_COIN, FF_FULLBRIGHT|2, 5, {NULL}, 0, 0, S_COIN1, 0}, // S_COIN3
+	{SPR_COIN,  FF_ANIMATE,  32, {NULL}, 15, 2, S_COIN, 0}, // S_COIN
 
 	// Coin Sparkle
-	{SPR_CPRK, FF_FULLBRIGHT,   5, {NULL}, 0, 0, S_COINSPARKLE2, 0}, // S_COINSPARKLE1
-	{SPR_CPRK, FF_FULLBRIGHT|1, 5, {NULL}, 0, 0, S_COINSPARKLE3, 0}, // S_COINSPARKLE2
-	{SPR_CPRK, FF_FULLBRIGHT|2, 5, {NULL}, 0, 0, S_COINSPARKLE4, 0}, // S_COINSPARKLE3
-	{SPR_CPRK, FF_FULLBRIGHT|3, 5, {NULL}, 0, 0, S_NULL, 0},         // S_COINSPARKLE4
+	{SPR_CPRK, 1|FF_FULLBRIGHT|FF_TRANS30|FF_ADD, 2, {A_ForceStop}, 0, 0, S_COINSPARKLE2, 0}, // S_COINSPARKLE1
+	{SPR_CPRK, 2|FF_FULLBRIGHT|FF_ANIMATE|FF_TRANS30|FF_ADD, 20, {NULL}, 9, 2, S_NULL, 0}, // S_COINSPARKLE2
 
 	// Goomba
 	{SPR_GOOM, 0, 6, {A_Look}, 0, 0, S_GOOMBA1B, 0}, // S_GOOMBA1
 	{SPR_GOOM, 1, 6, {A_Look}, 0, 0, S_GOOMBA1, 0},  // S_GOOMBA1B
-	{SPR_GOOM, 0, 3, {A_Chase}, 0, 0, S_GOOMBA3, 0}, // S_GOOMBA2
-	{SPR_GOOM, 0, 3, {A_Chase}, 0, 0, S_GOOMBA4, 0}, // S_GOOMBA3
-	{SPR_GOOM, 1, 3, {A_Chase}, 0, 0, S_GOOMBA5, 0}, // S_GOOMBA4
-	{SPR_GOOM, 1, 3, {A_Chase}, 0, 0, S_GOOMBA6, 0}, // S_GOOMBA5
-	{SPR_GOOM, 0, 3, {A_Chase}, 0, 0, S_GOOMBA7, 0}, // S_GOOMBA6
-	{SPR_GOOM, 0, 3, {A_Chase}, 0, 0, S_GOOMBA8, 0}, // S_GOOMBA7
-	{SPR_GOOM, 1, 3, {A_Chase}, 0, 0, S_GOOMBA9, 0}, // S_GOOMBA8
-	{SPR_GOOM, 1, 3, {A_Chase}, 0, 0, S_GOOMBA2, 0}, // S_GOOMBA9
-	{SPR_GOOM, 2, 16, {A_Scream}, 0, 0, S_NULL, 0},  // S_GOOMBA_DEAD
+	{SPR_GOOM, 0, 6, {A_Chase}, 0, 0, S_GOOMBA3, 0}, // S_GOOMBA2
+	{SPR_GOOM, 1, 6, {A_Chase}, 0, 0, S_GOOMBA4, 0}, // S_GOOMBA3
+	{SPR_GOOM, 2, 6, {A_Chase}, 0, 0, S_GOOMBA5, 0}, // S_GOOMBA4
+	{SPR_GOOM, 3, 6, {A_Chase}, 0, 0, S_GOOMBA2, 0}, // S_GOOMBA5
+	{SPR_GOOM, 4, 8, {A_Scream}, 0, 0, S_GOOMBA_DEAD2, 0},  // S_GOOMBA_DEAD
+	{SPR_GOOM, 5, 4, {NULL}, 0, 0, S_GOOMBA_DEAD3, 0},  // S_GOOMBA_DEAD2
+	{SPR_GOOM, 4, 15, {NULL}, 0, 0, S_NULL, 0},  // S_GOOMBA_DEAD3
 
 	// Blue Goomba
 	{SPR_BGOM, 0, 6, {A_Look}, 0, 0, S_BLUEGOOMBA1B, 0}, // S_BLUEGOOMBA1
 	{SPR_BGOM, 1, 6, {A_Look}, 0, 0, S_BLUEGOOMBA1, 0},  // S_BLUEGOOMBA1B
-	{SPR_BGOM, 0, 3, {A_Chase}, 0, 0, S_BLUEGOOMBA3, 0}, // S_BLUEGOOMBA2
-	{SPR_BGOM, 0, 3, {A_Chase}, 0, 0, S_BLUEGOOMBA4, 0}, // S_BLUEGOOMBA3
-	{SPR_BGOM, 1, 3, {A_Chase}, 0, 0, S_BLUEGOOMBA5, 0}, // S_BLUEGOOMBA4
-	{SPR_BGOM, 1, 3, {A_Chase}, 0, 0, S_BLUEGOOMBA6, 0}, // S_BLUEGOOMBA5
-	{SPR_BGOM, 0, 3, {A_Chase}, 0, 0, S_BLUEGOOMBA7, 0}, // S_BLUEGOOMBA6
-	{SPR_BGOM, 0, 3, {A_Chase}, 0, 0, S_BLUEGOOMBA8, 0}, // S_BLUEGOOMBA7
-	{SPR_BGOM, 1, 3, {A_Chase}, 0, 0, S_BLUEGOOMBA9, 0}, // S_BLUEGOOMBA8
-	{SPR_BGOM, 1, 3, {A_Chase}, 0, 0, S_BLUEGOOMBA2, 0}, // S_BLUEGOOMBA9
-	{SPR_BGOM, 2, 16, {A_Scream}, 0, 0, S_NULL, 0},      // S_BLUEGOOMBA_DEAD
+	{SPR_BGOM, 0, 6, {A_Chase}, 0, 0, S_BLUEGOOMBA3, 0}, // S_BLUEGOOMBA2
+	{SPR_BGOM, 1, 6, {A_Chase}, 0, 0, S_BLUEGOOMBA4, 0}, // S_BLUEGOOMBA3
+	{SPR_BGOM, 2, 6, {A_Chase}, 0, 0, S_BLUEGOOMBA5, 0}, // S_BLUEGOOMBA4
+	{SPR_BGOM, 3, 6, {A_Chase}, 0, 0, S_BLUEGOOMBA2, 0}, // S_BLUEGOOMBA5
+	{SPR_BGOM, 4, 8, {A_Scream}, 0, 0, S_BLUEGOOMBA_DEAD2, 0},  // S_BLUEGOOMBA_DEAD
+	{SPR_BGOM, 5, 4, {NULL}, 0, 0, S_BLUEGOOMBA_DEAD3, 0},  // S_BLUEGOOMBA_DEAD2
+	{SPR_BGOM, 4, 15, {NULL}, 0, 0, S_NULL, 0},  // S_BLUEGOOMBA_DEAD3
 
 	// Fire Flower
 	{SPR_FFWR, 0, 3, {NULL}, 0, 0, S_FIREFLOWER2, 0}, // S_FIREFLOWER1
@@ -3646,7 +3655,16 @@ state_t states[NUMSTATES] =
 	{SPR_FBLL, 1|FF_FULLBRIGHT|FF_TRANS50, 1, {A_SetScale}, FRACUNIT*3/4, 0, S_FIREBALLTRAIL2, 0}, // S_FIREBALLTRAIL1
 	{SPR_FBLL, 1|FF_FULLBRIGHT|FF_TRANS50, 8, {A_SetScale}, FRACUNIT/6, 1, S_NULL, 0},             // S_FIREBALLTRAIL2
 
-	// Turtle Shell
+	// Green Koopa
+	{SPR_MKOP, 0, 1, {A_Look}, 0, 0, S_GREENKOOPASPAWN, 0}, // S_GREENKOOPASPAWN
+	{SPR_MKOP, 0, 5, {A_GuardChase}, 1, 0, S_GREENKOOPA2, 0}, // S_GREENKOOPA1
+	{SPR_MKOP, 1, 5, {A_GuardChase}, 1, 0, S_GREENKOOPA3, 0}, // S_GREENKOOPA2
+	{SPR_MKOP, 2, 5, {A_GuardChase}, 1, 0, S_GREENKOOPA4, 0}, // S_GREENKOOPA3
+	{SPR_MKOP, 3, 5, {A_GuardChase}, 1, 0, S_GREENKOOPA1, 0}, // S_GREENKOOPA4
+	{SPR_MKOP, 3, 1, {A_Scream}, 0, 0, S_GREENKOOPADEATH2, 0}, // S_GREENKOOPADEATH1
+	{SPR_MKOP, 3, 1, {A_SpawnObjectRelative}, 0|0, 0|MT_SHELL, S_NULL, 0}, // S_GREENKOOPADEATH2
+
+	// Koopa Shell
 	{SPR_SHLL, 0, -1, {NULL}, 0, 0, S_NULL, 0}, // S_SHELL
 
 	// Puma (Mario fireball)
@@ -3684,6 +3702,22 @@ state_t states[NUMSTATES] =
 	{SPR_MUS2, 0, -1, {NULL}, 0, 0, S_NULL, 0}, // S_MARIOBUSH2
 	{SPR_TOAD, 0, -1, {NULL}, 0, 0, S_NULL, 0}, // S_TOAD
 
+	{SPR_MARS, 0, -1, {NULL}, 0, 0, S_NULL, 0}, // S_PTZSHROOM
+	{SPR_MRFL, 0|FF_PAPERSPRITE, 4, {NULL}, 0, 0, S_PTZFLAG2, 0}, // S_PTZFLAG1
+	{SPR_MRFL, 1|FF_PAPERSPRITE, 4, {NULL}, 0, 0, S_PTZFLAG3, 0}, // S_PTZFLAG2
+	{SPR_MRFL, 2|FF_PAPERSPRITE, 4, {NULL}, 0, 0, S_PTZFLAG4, 0}, // S_PTZFLAG3
+	{SPR_MRFL, 3|FF_PAPERSPRITE, 4, {NULL}, 0, 0, S_PTZFLAG5, 0}, // S_PTZFLAG4
+	{SPR_MRFL, 4|FF_PAPERSPRITE, 4, {NULL}, 0, 0, S_PTZFLAG1, 0}, // S_PTZFLAG5
+	{SPR_MAUH, FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL, 0}, // S_MARIOBUSH
+	{SPR_MBSA, 0, -1, {NULL}, 0, 0, S_NULL, 0}, // S_BSBSHROOM
+	{SPR_MBSB, 0, -1, {NULL}, 0, 0, S_NULL, 0}, // S_BLBSHROOM
+	{SPR_MBSC, 0, -1, {NULL}, 0, 0, S_NULL, 0}, // S_BNWSHROOM
+	{SPR_MFRE, FF_ANIMATE, -1, {NULL}, 3, 4, S_NULL, 0}, // S_REDMFLOWER
+	{SPR_MFBE, FF_ANIMATE, -1, {NULL}, 3, 4, S_NULL, 0}, // S_BLUEMFLOWER
+	{SPR_MFYE, FF_ANIMATE, -1, {NULL}, 3, 4, S_NULL, 0}, // S_YELLOWMFLOWER
+	{SPR_MFWD, FF_ANIMATE, -1, {NULL}, 3, 6, S_NULL, 0}, // S_WHITEDANDELION
+	{SPR_MUS3, 0, -1, {NULL}, 0, 0, S_NULL, 0}, // S_MAR64TREE
+
 	// Nights Drone
 	{SPR_NDRN, 0, -1, {NULL}, 0, 0, S_NIGHTSDRONE_MAN2, 0}, // S_NIGHTSDRONE_MAN1
 	{SPR_NDRN, 0, -1, {NULL}, 0, 0, S_NIGHTSDRONE_MAN1, 0}, // S_NIGHTSDRONE_MAN2
@@ -3996,6 +4030,11 @@ state_t states[NUMSTATES] =
 	{SPR_BRIR, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 31, 1, S_NULL, 0}, // S_REDBRICKDEBRIS
 	{SPR_BRIB, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 31, 1, S_NULL, 0}, // S_BLUEBRICKDEBRIS
 	{SPR_BRIY, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 31, 1, S_NULL, 0}, // S_YELLOWBRICKDEBRIS
+	{SPR_MBRI, FF_ANIMATE, 50, {NULL}, 9, 2, S_NULL, 0}, // S_MARIOBRICKDEBRIS
+	{SPR_MBRS, FF_ANIMATE, 50, {NULL}, 9, 2, S_NULL, 0}, // S_MARIOBRICKDEBRISS
+	{SPR_MBRB, FF_ANIMATE, 50, {NULL}, 9, 2, S_NULL, 0}, // S_MARIOBRICKDEBRISB
+	{SPR_MBRC, FF_ANIMATE, 50, {NULL}, 9, 2, S_NULL, 0}, // S_MARIOBRICKDEBRISC
+	{SPR_MTRI, FF_ANIMATE, 50, {NULL}, 3, 4, S_NULL, 0}, // S_MARIOBRICKDEBRISM
 
 	{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL, 0}, // S_NAMECHECK
 
@@ -18887,7 +18926,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
 
 	{           // MT_COIN
 		1800,           // doomednum
-		S_COIN1,        // spawnstate
+		S_COIN,	        // spawnstate
 		1000,           // spawnhealth
 		S_NULL,         // seestate
 		sfx_None,       // seesound
@@ -18914,7 +18953,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
 
 	{           // MT_FLINGCOIN
 		-1,             // doomednum
-		S_COIN1,        // spawnstate
+		S_COIN,        	// spawnstate
 		1000,           // spawnhealth
 		S_NULL,         // seestate
 		sfx_None,       // seesound
@@ -19074,6 +19113,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
 		S_NULL               // raisestate
 	},
 
+	{           // MT_GREENKOOPA
+		1832,           	// doomednum
+		S_GREENKOOPASPAWN,  // spawnstate
+		1,              	// spawnhealth
+		S_GREENKOOPA1,      // seestate
+		sfx_None,      		// seesound
+		1,             		// reactiontime
+		sfx_None,      		// attacksound
+		S_NULL,         	// painstate
+		0,              	// painchance
+		sfx_None,       	// painsound
+		S_NULL,         	// meleestate
+		S_NULL,         	// missilestate
+		S_GREENKOOPADEATH1,	// deathstate
+		S_NULL,         	// xdeathstate
+		sfx_mario2,       	// deathsound
+		12,             	// speed
+		16*FRACUNIT,    	// radius
+		48*FRACUNIT,    	// height
+		0,              	// display offset
+		100,              	// mass
+		1,              	// damage
+		sfx_mario1,     	// activesound
+		MF_SPECIAL|MF_SHOOTABLE|MF_BOUNCE, // flags
+		S_NULL          	// raisestate
+	},
+
 	{           // MT_SHELL
 		1804,           // doomednum
 		S_SHELL,        // spawnstate
@@ -19343,6 +19409,303 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
 		S_NULL          // raisestate
 	},
 
+	{           // MT_PTZSHROOM
+		1811,           // doomednum
+		S_PTZSHROOM,    // spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		96*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_PTZFLAG
+		1812,           // doomednum
+		S_PTZFLAG1,     // spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		96*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_MARIOBUSH
+		1819,           // doomednum
+		S_MARIOBUSH,    // spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		96*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_BSBSHROOM
+		1820,           // doomednum
+		S_BSBSHROOM,    // spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		96*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_BLBSHROOM
+		1821,           // doomednum
+		S_BLBSHROOM,    // spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		96*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_BNWSHROOM
+		1822,           // doomednum
+		S_BNWSHROOM,    // spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		96*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_REDMFLOWER
+		1823,           // doomednum
+		S_REDMFLOWER,   // spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		96*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_BLUEMFLOWER
+		1842,           // doomednum
+		S_BLUEMFLOWER,  // spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		96*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_YELLOWMFLOWER
+		1824,           // doomednum
+		S_YELLOWMFLOWER,// spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		96*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_WHITEDANDELION
+		1840,           // doomednum
+		S_WHITEDANDELION,   // spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		96*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_MAR64TREE
+		1847,           // doomednum
+		S_MAR64TREE,   // spawnstate
+		1000,           // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		8,              // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		0,              // speed
+		16*FRACUNIT,    // radius
+		150*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_None,       // activesound
+		MF_NOCLIP|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
 	{           // MT_AXIS
 		1700,           // doomednum
 		S_INVISIBLE,    // spawnstate
@@ -21559,6 +21922,141 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
 		S_NULL          // raisestate
 	},
 
+	{           // MT_MARIOBRICKDEBRIS
+		-1,             // doomednum
+		S_MARIOBRICKDEBRIS,    // spawnstate
+		1,              // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		35,             // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		6,              // speed
+		16*FRACUNIT,    // radius
+		48*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_marioc,     // activesound
+		MF_NOCLIPHEIGHT|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_MARIOBRICKDEBRISS
+		-1,             // doomednum
+		S_MARIOBRICKDEBRISS,    // spawnstate
+		1,              // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		35,             // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		6,              // speed
+		16*FRACUNIT,    // radius
+		48*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_marioc,     // activesound
+		MF_NOCLIPHEIGHT|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_MARIOBRICKDEBRISB
+		-1,             // doomednum
+		S_MARIOBRICKDEBRISB,    // spawnstate
+		1,              // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		35,             // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		6,              // speed
+		16*FRACUNIT,    // radius
+		48*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_marioc,     // activesound
+		MF_NOCLIPHEIGHT|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_MARIOBRICKDEBRISC
+		-1,             // doomednum
+		S_MARIOBRICKDEBRISC,    // spawnstate
+		1,              // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		35,             // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		6,              // speed
+		16*FRACUNIT,    // radius
+		48*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_marioc,     // activesound
+		MF_NOCLIPHEIGHT|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
+	{           // MT_MARIOBRICKDEBRISM
+		-1,             // doomednum
+		S_MARIOBRICKDEBRISM,    // spawnstate
+		1,              // spawnhealth
+		S_NULL,         // seestate
+		sfx_None,       // seesound
+		35,             // reactiontime
+		sfx_None,       // attacksound
+		S_NULL,         // painstate
+		0,              // painchance
+		sfx_None,       // painsound
+		S_NULL,         // meleestate
+		S_NULL,         // missilestate
+		S_NULL,         // deathstate
+		S_NULL,         // xdeathstate
+		sfx_None,       // deathsound
+		6,              // speed
+		16*FRACUNIT,    // radius
+		48*FRACUNIT,    // height
+		0,              // display offset
+		100,            // mass
+		0,              // damage
+		sfx_marioc,     // activesound
+		MF_NOCLIPHEIGHT|MF_SCENERY, // flags
+		S_NULL          // raisestate
+	},
+
 	{           // MT_NAMECHECK
 		-1,             // doomednum
 		S_NAMECHECK,    // spawnstate
diff --git a/src/info.h b/src/info.h
index db846fc1cb6f3961aecc98f7877087dc70ea646c..be75e0024d0f0923bac56b7d2f3bbfe63238baf0 100644
--- a/src/info.h
+++ b/src/info.h
@@ -1001,6 +1001,7 @@ typedef enum sprite
 	SPR_BGOM,
 	SPR_FFWR,
 	SPR_FBLL,
+	SPR_MKOP,
 	SPR_SHLL,
 	SPR_PUMA,
 	SPR_HAMM,
@@ -1010,6 +1011,17 @@ typedef enum sprite
 	SPR_MUS1,
 	SPR_MUS2,
 	SPR_TOAD,
+	SPR_MARS,
+	SPR_MRFL,
+	SPR_MAUH,
+	SPR_MBSA,
+	SPR_MBSB,
+	SPR_MBSC,
+	SPR_MFRE,
+	SPR_MFYE,
+	SPR_MFBE,
+	SPR_MFWD,
+	SPR_MUS3,
 
 	// NiGHTS Stuff
 	SPR_NDRN, // NiGHTS drone
@@ -1071,6 +1083,11 @@ typedef enum sprite
 	SPR_BRIR, // CEZ3 colored bricks
 	SPR_BRIB,
 	SPR_BRIY,
+	SPR_MBRI,
+	SPR_MBRS,
+	SPR_MBRB,
+	SPR_MBRC,
+	SPR_MTRI,
 
 	// Gravity Well Objects
 	SPR_GWLG,
@@ -4003,37 +4020,28 @@ typedef enum state
 
 	S_RINGEXPLODE,
 
-	S_COIN1,
-	S_COIN2,
-	S_COIN3,
+	// Mario-specific stuff
+	S_COIN,
 	S_COINSPARKLE1,
 	S_COINSPARKLE2,
-	S_COINSPARKLE3,
-	S_COINSPARKLE4,
 	S_GOOMBA1,
 	S_GOOMBA1B,
 	S_GOOMBA2,
 	S_GOOMBA3,
 	S_GOOMBA4,
 	S_GOOMBA5,
-	S_GOOMBA6,
-	S_GOOMBA7,
-	S_GOOMBA8,
-	S_GOOMBA9,
 	S_GOOMBA_DEAD,
+	S_GOOMBA_DEAD2,
+	S_GOOMBA_DEAD3,
 	S_BLUEGOOMBA1,
 	S_BLUEGOOMBA1B,
 	S_BLUEGOOMBA2,
 	S_BLUEGOOMBA3,
 	S_BLUEGOOMBA4,
 	S_BLUEGOOMBA5,
-	S_BLUEGOOMBA6,
-	S_BLUEGOOMBA7,
-	S_BLUEGOOMBA8,
-	S_BLUEGOOMBA9,
 	S_BLUEGOOMBA_DEAD,
-
-	// Mario-specific stuff
+	S_BLUEGOOMBA_DEAD2,
+	S_BLUEGOOMBA_DEAD3,
 	S_FIREFLOWER1,
 	S_FIREFLOWER2,
 	S_FIREFLOWER3,
@@ -4041,6 +4049,13 @@ typedef enum state
 	S_FIREBALL,
 	S_FIREBALLTRAIL1,
 	S_FIREBALLTRAIL2,
+	S_GREENKOOPASPAWN,
+	S_GREENKOOPA1,
+	S_GREENKOOPA2,
+	S_GREENKOOPA3,
+	S_GREENKOOPA4,
+	S_GREENKOOPADEATH1,
+	S_GREENKOOPADEATH2,
 	S_SHELL,
 	S_PUMA_START1,
 	S_PUMA_START2,
@@ -4066,6 +4081,21 @@ typedef enum state
 	S_MARIOBUSH1,
 	S_MARIOBUSH2,
 	S_TOAD,
+	S_PTZSHROOM,
+	S_PTZFLAG1,
+	S_PTZFLAG2,
+	S_PTZFLAG3,
+	S_PTZFLAG4,
+	S_PTZFLAG5,
+	S_MARIOBUSH,
+	S_BSBSHROOM,
+	S_BLBSHROOM,
+	S_BNWSHROOM,
+	S_REDMFLOWER,
+	S_BLUEMFLOWER,
+	S_YELLOWMFLOWER,
+	S_WHITEDANDELION,
+	S_MAR64TREE,
 
 	// Nights-specific stuff
 	S_NIGHTSDRONE_MAN1,
@@ -4368,6 +4398,11 @@ typedef enum state
 	S_REDBRICKDEBRIS, // for CEZ3
 	S_BLUEBRICKDEBRIS, // for CEZ3
 	S_YELLOWBRICKDEBRIS, // for CEZ3
+	S_MARIOBRICKDEBRIS,
+	S_MARIOBRICKDEBRISS,
+	S_MARIOBRICKDEBRISB,
+	S_MARIOBRICKDEBRISC,
+	S_MARIOBRICKDEBRISM,
 
 	S_NAMECHECK,
 
@@ -5064,6 +5099,7 @@ typedef enum mobj_type
 	MT_FIREFLOWER,
 	MT_FIREBALL,
 	MT_FIREBALLTRAIL,
+	MT_GREENKOOPA,
 	MT_SHELL,
 	MT_PUMA,
 	MT_PUMATRAIL,
@@ -5074,6 +5110,17 @@ typedef enum mobj_type
 	MT_MARIOBUSH1,
 	MT_MARIOBUSH2,
 	MT_TOAD,
+	MT_PTZSHROOM,
+	MT_PTZFLAG,
+	MT_BSBSHROOM,
+	MT_BLBSHROOM,
+	MT_BNWSHROOM,
+	MT_MARIOBUSH,
+	MT_REDMFLOWER,
+	MT_BLUEMFLOWER,
+	MT_YELLOWMFLOWER,
+	MT_WHITEDANDELION,
+	MT_MAR64TREE,
 
 	// NiGHTS Stuff
 	MT_AXIS,
@@ -5171,6 +5218,11 @@ typedef enum mobj_type
 	MT_REDBRICKDEBRIS, // for CEZ3
 	MT_BLUEBRICKDEBRIS, // for CEZ3
 	MT_YELLOWBRICKDEBRIS, // for CEZ3
+	MT_MARIOBRICKDEBRIS,
+	MT_MARIOBRICKDEBRISS,
+	MT_MARIOBRICKDEBRISB,
+	MT_MARIOBRICKDEBRISC,
+	MT_MARIOBRICKDEBRISM,
 
 	MT_NAMECHECK,
 	MT_RAY, // General purpose mobj
diff --git a/src/p_enemy.c b/src/p_enemy.c
index 60cffebfc4b09dda07f6c84e65ff66a0869cb0aa..9ebd32069cb84ac3d50c487f595e660813f67f4d 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -7837,13 +7837,14 @@ void A_BuzzFly(mobj_t *actor)
 
 // Function: A_GuardChase
 //
-// Description: Modified A_Chase for Egg Guard
+// Description: Modified A_Chase for Egg Guard and Koopa Troopas
 //
-// var1 = unused
+// var1 = shield (0) or no shield (1)
 // var2 = unused
 //
 void A_GuardChase(mobj_t *actor)
 {
+	INT32 locvar1 = var1;
 	INT32 delta;
 
 	if (LUA_CallAction(A_GUARDCHASE, actor))
@@ -7852,11 +7853,11 @@ void A_GuardChase(mobj_t *actor)
 	if (actor->reactiontime)
 		actor->reactiontime--;
 
-	if (actor->threshold != 42) // In formation...
+	if (actor->threshold != 42 || locvar1 == 1) // In formation...
 	{
 		fixed_t speed;
 
-		if (!actor->tracer || !actor->tracer->health)
+		if ((!actor->tracer || !actor->tracer->health) && locvar1 == 0)
 		{
 			P_SetTarget(&actor->tracer, NULL);
 			actor->threshold = 42;
@@ -7945,7 +7946,7 @@ void A_GuardChase(mobj_t *actor)
 	// Now that we've moved, its time for our shield to move!
 	// Otherwise it'll never act as a proper overlay.
 	if (actor->tracer && actor->tracer->state
-	&& actor->tracer->state->action.acp1)
+	&& actor->tracer->state->action.acp1 && locvar1 == 0)
 	{
 		var1 = actor->tracer->state->var1, var2 = actor->tracer->state->var2;
 		actor->tracer->state->action.acp1(actor->tracer);
diff --git a/src/p_setup.c b/src/p_setup.c
index 93286219d1ac2df6312d5eed04c6b05dbb5b0b52..87bd391c64b6cd07cdabd5119d4b4fd0e965533a 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -5866,6 +5866,10 @@ static void P_ConvertBinaryLinedefTypes(void)
 			lines[i].args[0] = tag;
 			lines[i].args[1] = !!(lines[i].flags & ML_NOCLIMB);
 			break;
+		case 465: // Bounce Player (purely for backwards compatibility with new Pipe Towers)
+			lines[i].args[0] = (FixedHypot(lines[i].dx, lines[i].dy) / 8) >> FRACBITS;
+			lines[i].special = 430;
+			break;
 		case 466: //Set level failure state
 			lines[i].args[0] = !!(lines[i].flags & ML_NOCLIMB);
 			break;
diff --git a/src/p_spec.c b/src/p_spec.c
index d375d3e2f23e7c65ad990b7b66a76965894be06a..a9d1e8392e59b9b78cba9c30bcddd2abd71998ce 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -2702,6 +2702,18 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
 				EV_DoCrush(line->args[0], line, crushBothOnce);
 			break;
 
+		case 430: // Bounce Player
+			if (mo && mo->player)
+			{
+				P_SetObjectMomZ(mo, line->args[0]*FRACUNIT, false);
+				S_StartSound(NULL, sfx_s3k8a);
+				mo->player->pflags |= PF_JUMPED;
+				if (skins[mo->player->skin]->flags & SF_NOJUMPSPIN)
+					P_SetMobjState(mo, S_PLAY_SPRING);
+				else
+					P_SetMobjState(mo, S_PLAY_JUMP);
+			}
+			break;
 		case 432: // Enable/Disable 2D Mode
 			if (mo && mo->player)
 			{
diff --git a/src/sounds.c b/src/sounds.c
index 19b69dd2825748ae97493172a2571d970a1b4dec..75bccb396492e52f3920177ac44387b5e624d2da 100644
--- a/src/sounds.c
+++ b/src/sounds.c
@@ -284,6 +284,8 @@ sfxinfo_t S_sfx[NUMSFX] =
   {"mario8", false,  48, SF_X4AWAYSOUND,     -1, NULL, 0, -1, -1, LUMPERROR, "Hurt"},
   {"mario9",  true, 120, 0,                  -1, NULL, 0, -1, -1, LUMPERROR, "Emerging power-up"},
   {"marioa",  true, 192, 0,                  -1, NULL, 0, -1, -1, LUMPERROR, "One-up"},
+  {"mariob",  true, 127, 0,                  -1, NULL, 0, -1, -1, LUMPERROR, "Spring"},
+  {"marioc",  true, 127, 0,                  -1, NULL, 0, -1, -1, LUMPERROR, "Crumbling"},
   {"thwomp",  true, 127, SF_X4AWAYSOUND,     -1, NULL, 0, -1, -1, LUMPERROR, "Thwomp"},
 
   // Black Eggman
diff --git a/src/sounds.h b/src/sounds.h
index bf934276858a301a542492abd560f730a4f1077d..a01d192e60ca6df0e8a0b6ca208ee97f84f8aba2 100644
--- a/src/sounds.h
+++ b/src/sounds.h
@@ -332,6 +332,8 @@ typedef enum
 	sfx_mario8,
 	sfx_mario9,
 	sfx_marioa,
+	sfx_mariob,
+	sfx_marioc,
 	sfx_thwomp,
 
 	// Black Eggman