From 265a607b58103ee11d793e514918226c0eacceb6 Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Thu, 31 Dec 2015 08:38:23 -0800 Subject: [PATCH 01/13] rewrite of monitors to accomodate repeat use monitors. It's a lot nicer in general, honestly. I think a couple bugs with custom monitors respawning got fixed in the process. Note that a monitorgfx.wad is needed if you want to see things besides s for monitors, due to graphic changes. --- src/dehacked.c | 391 ++++---- src/hardware/hw_light.c | 43 +- src/info.c | 2056 +++++++++++++++++++++++---------------- src/info.h | 436 +++++---- src/p_enemy.c | 313 +++--- src/p_inter.c | 7 +- src/p_local.h | 2 + src/p_map.c | 2 +- src/p_mobj.c | 205 ++-- src/p_user.c | 2 +- src/sounds.c | 1 + src/sounds.h | 1 + 12 files changed, 2009 insertions(+), 1450 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 0ba054f07..d0f582385 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1628,6 +1628,9 @@ static actionpointer_t actionpointers[] = {{A_Pain}, "A_PAIN"}, {{A_Fall}, "A_FALL"}, {{A_MonitorPop}, "A_MONITORPOP"}, + {{A_BigMonitorPop}, "A_BIGMONITORPOP"}, + {{A_BigMonitorRestore}, "A_BIGMONITORRESTORE"}, + {{A_BigMonitorSparkle}, "A_BIGMONITORSPARKLE"}, {{A_Look}, "A_LOOK"}, {{A_Chase}, "A_CHASE"}, {{A_FaceStabChase}, "A_FACESTABCHASE"}, @@ -4855,170 +4858,169 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_CANNONLAUNCHER2", "S_CANNONLAUNCHER3", - // Super Ring Box - "S_SUPERRINGBOX", - "S_SUPERRINGBOX1", - "S_SUPERRINGBOX2", - "S_SUPERRINGBOX3", - "S_SUPERRINGBOX4", - "S_SUPERRINGBOX5", - "S_SUPERRINGBOX6", + // Monitor Miscellany + "S_BOXSPARKLE1", + "S_BOXSPARKLE2", + "S_BOXSPARKLE3", - // Red Team Ring Box - "S_REDRINGBOX", - "S_REDRINGBOX1", + "S_BOX_FLICKER", + "S_BOX_POP1", + "S_BOX_POP2", - // Blue Team Ring Box - "S_BLUERINGBOX", - "S_BLUERINGBOX1", + "S_BIGBOX_FLICKER", + "S_BIGBOX_OFF1", + "S_BIGBOX_OFF2", + "S_BIGBOX_OFF3", + "S_BIGBOX_OFF4", + "S_BIGBOX_OFF5", + "S_BIGBOX_OFF6", + "S_BIGBOX_OFF7", - // Super Sneakers Box - "S_SHTV", - "S_SHTV1", - "S_SHTV2", - "S_SHTV3", - "S_SHTV4", - "S_SHTV5", - "S_SHTV6", + // Monitor States (one per box) + "S_MYSTERY_BOX", + "S_RING_BOX", + "S_PITY_BOX", + "S_ATTRACT_BOX", + "S_FORCE_BOX", + "S_ARMAGEDDON_BOX", + "S_WHIRLWIND_BOX", + "S_ELEMENTAL_BOX", + "S_SNEAKERS_BOX", + "S_INVULN_BOX", + "S_1UP_BOX", + "S_EGGMAN_BOX", + "S_MIXUP_BOX", + "S_GRAVITY_BOX", + "S_RECYCLER_BOX", + "S_SCORE1K_BOX", + "S_SCORE10K_BOX", - // Invincibility Box - "S_PINV", - "S_PINV1", - "S_PINV2", - "S_PINV3", - "S_PINV4", - "S_PINV5", - "S_PINV6", + // Repeat Monitor States (one per box) + "S_MYSTERY_BIGBOX", + "S_RING_BIGBOX", + "S_PITY_BIGBOX", + "S_ATTRACT_BIGBOX", + "S_FORCE_BIGBOX", + "S_ARMAGEDDON_BIGBOX", + "S_WHIRLWIND_BIGBOX", + "S_ELEMENTAL_BIGBOX", + "S_SNEAKERS_BIGBOX", + "S_INVULN_BIGBOX", + "S_1UP_BIGBOX", + "S_EGGMAN_BIGBOX", + "S_MIXUP_BIGBOX", + "S_GRAVITY_BIGBOX", + "S_RECYCLER_BIGBOX", + "S_SCORE1K_BIGBOX", + "S_SCORE10K_BIGBOX", - // 1-Up Box - "S_PRUP", - "S_PRUP1", - "S_PRUP2", - "S_PRUP3", - "S_PRUP4", - "S_PRUP5", - "S_PRUP6", + // Team Ring Boxes (these are special) + "S_RING_REDBOX1", + "S_RING_REDBOX2", + "S_REDBOX_POP1", + "S_REDBOX_POP2", - // Ring Shield Box - "S_YLTV", - "S_YLTV1", - "S_YLTV2", - "S_YLTV3", - "S_YLTV4", - "S_YLTV5", - "S_YLTV6", + "S_RING_BLUEBOX1", + "S_RING_BLUEBOX2", + "S_BLUEBOX_POP1", + "S_BLUEBOX_POP2", - // Force Shield Box - "S_BLTV1", - "S_BLTV2", - "S_BLTV3", - "S_BLTV4", - "S_BLTV5", - "S_BLTV6", - "S_BLTV7", + // Box Icons -- 5 states each, one for each part of the twirl + "S_RING_ICON1", + "S_RING_ICON2", + "S_RING_ICON3", + "S_RING_ICON4", + "S_RING_ICON5", - // Bomb Shield Box - "S_BKTV1", - "S_BKTV2", - "S_BKTV3", - "S_BKTV4", - "S_BKTV5", - "S_BKTV6", - "S_BKTV7", + "S_PITY_ICON1", + "S_PITY_ICON2", + "S_PITY_ICON3", + "S_PITY_ICON4", + "S_PITY_ICON5", - // Jump Shield Box - "S_WHTV1", - "S_WHTV2", - "S_WHTV3", - "S_WHTV4", - "S_WHTV5", - "S_WHTV6", - "S_WHTV7", + "S_ATTRACT_ICON1", + "S_ATTRACT_ICON2", + "S_ATTRACT_ICON3", + "S_ATTRACT_ICON4", + "S_ATTRACT_ICON5", - // Water Shield Box - "S_GRTV", - "S_GRTV1", - "S_GRTV2", - "S_GRTV3", - "S_GRTV4", - "S_GRTV5", - "S_GRTV6", + "S_FORCE_ICON1", + "S_FORCE_ICON2", + "S_FORCE_ICON3", + "S_FORCE_ICON4", + "S_FORCE_ICON5", - // Pity Shield Box - "S_PITV1", - "S_PITV2", - "S_PITV3", - "S_PITV4", - "S_PITV5", - "S_PITV6", - "S_PITV7", + "S_ARMAGEDDON_ICON1", + "S_ARMAGEDDON_ICON2", + "S_ARMAGEDDON_ICON3", + "S_ARMAGEDDON_ICON4", + "S_ARMAGEDDON_ICON5", - // Eggman Box - "S_EGGTV1", - "S_EGGTV2", - "S_EGGTV3", - "S_EGGTV4", - "S_EGGTV5", - "S_EGGTV6", - "S_EGGTV7", + "S_WHIRLWIND_ICON1", + "S_WHIRLWIND_ICON2", + "S_WHIRLWIND_ICON3", + "S_WHIRLWIND_ICON4", + "S_WHIRLWIND_ICON5", - // Teleport Box - "S_MIXUPBOX1", - "S_MIXUPBOX2", - "S_MIXUPBOX3", - "S_MIXUPBOX4", - "S_MIXUPBOX5", - "S_MIXUPBOX6", - "S_MIXUPBOX7", + "S_ELEMENTAL_ICON1", + "S_ELEMENTAL_ICON2", + "S_ELEMENTAL_ICON3", + "S_ELEMENTAL_ICON4", + "S_ELEMENTAL_ICON5", - // Recycler Box - "S_RECYCLETV1", - "S_RECYCLETV2", - "S_RECYCLETV3", - "S_RECYCLETV4", - "S_RECYCLETV5", - "S_RECYCLETV6", - "S_RECYCLETV7", + "S_SNEAKERS_ICON1", + "S_SNEAKERS_ICON2", + "S_SNEAKERS_ICON3", + "S_SNEAKERS_ICON4", + "S_SNEAKERS_ICON5", - // Question Box - "S_RANDOMBOX1", - "S_RANDOMBOX2", - "S_RANDOMBOX3", + "S_INVULN_ICON1", + "S_INVULN_ICON2", + "S_INVULN_ICON3", + "S_INVULN_ICON4", + "S_INVULN_ICON5", - // Gravity Boots Box - "S_GBTV1", - "S_GBTV2", - "S_GBTV3", - "S_GBTV4", - "S_GBTV5", - "S_GBTV6", - "S_GBTV7", + "S_1UP_ICON1", + "S_1UP_ICON2", + "S_1UP_ICON3", + "S_1UP_ICON4", + "S_1UP_ICON5", - // Score boxes - "S_SCORETVA1", - "S_SCORETVA2", - "S_SCORETVA3", - "S_SCORETVA4", - "S_SCORETVA5", - "S_SCORETVA6", - "S_SCORETVA7", - "S_SCORETVB1", - "S_SCORETVB2", - "S_SCORETVB3", - "S_SCORETVB4", - "S_SCORETVB5", - "S_SCORETVB6", - "S_SCORETVB7", + "S_EGGMAN_ICON1", + "S_EGGMAN_ICON2", + "S_EGGMAN_ICON3", + "S_EGGMAN_ICON4", + "S_EGGMAN_ICON5", - // Monitor Explosion - "S_MONITOREXPLOSION1", - "S_MONITOREXPLOSION2", + "S_MIXUP_ICON1", + "S_MIXUP_ICON2", + "S_MIXUP_ICON3", + "S_MIXUP_ICON4", + "S_MIXUP_ICON5", - "S_REDMONITOREXPLOSION1", - "S_REDMONITOREXPLOSION2", + "S_GRAVITY_ICON1", + "S_GRAVITY_ICON2", + "S_GRAVITY_ICON3", + "S_GRAVITY_ICON4", + "S_GRAVITY_ICON5", - "S_BLUEMONITOREXPLOSION1", - "S_BLUEMONITOREXPLOSION2", + "S_RECYCLER_ICON1", + "S_RECYCLER_ICON2", + "S_RECYCLER_ICON3", + "S_RECYCLER_ICON4", + "S_RECYCLER_ICON5", + + "S_SCORE1K_ICON1", + "S_SCORE1K_ICON2", + "S_SCORE1K_ICON3", + "S_SCORE1K_ICON4", + "S_SCORE1K_ICON5", + + "S_SCORE10K_ICON1", + "S_SCORE10K_ICON2", + "S_SCORE10K_ICON3", + "S_SCORE10K_ICON4", + "S_SCORE10K_ICON5", "S_ROCKET", @@ -6760,47 +6762,68 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_BIGAIRMINE", "MT_CANNONLAUNCHER", - // Monitor Boxes - "MT_SUPERRINGBOX", - "MT_REDRINGBOX", - "MT_BLUERINGBOX", - "MT_SNEAKERTV", - "MT_INV", - "MT_PRUP", // 1up Box - "MT_YELLOWTV", // Attract shield TV - "MT_BLUETV", // Force shield TV - "MT_BLACKTV", // Bomb shield TV - "MT_WHITETV", // Jump shield TV - "MT_GREENTV", // Elemental shield TV - "MT_PITYTV", // Pity shield TV - "MT_EGGMANBOX", - "MT_MIXUPBOX", - "MT_RECYCLETV", - "MT_RECYCLEICO", - "MT_QUESTIONBOX", - "MT_GRAVITYBOX", - "MT_SCORETVSMALL", - "MT_SCORETVLARGE", - // Monitor miscellany - "MT_MONITOREXPLOSION", - "MT_REDMONITOREXPLOSION", - "MT_BLUEMONITOREXPLOSION", - "MT_RINGICO", - "MT_SHOESICO", - "MT_INVCICO", - "MT_1UPICO", - "MT_YSHIELDICO", - "MT_BSHIELDICO", - "MT_KSHIELDICO", - "MT_WSHIELDICO", - "MT_GSHIELDICO", - "MT_PITYSHIELDICO", - "MT_EGGMANICO", - "MT_MIXUPICO", - "MT_GRAVITYICO", - "MT_SCOREICOSMALL", - "MT_SCOREICOLARGE", + "MT_BOXSPARKLE", + + // Monitor boxes -- regular + "MT_RING_BOX", + "MT_PITY_BOX", + "MT_ATTRACT_BOX", + "MT_FORCE_BOX", + "MT_ARMAGEDDON_BOX", + "MT_WHIRLWIND_BOX", + "MT_ELEMENTAL_BOX", + "MT_SNEAKERS_BOX", + "MT_INVULN_BOX", + "MT_1UP_BOX", + "MT_EGGMAN_BOX", + "MT_MIXUP_BOX", + "MT_MYSTERY_BOX", + "MT_GRAVITY_BOX", + "MT_RECYCLER_BOX", + "MT_SCORE1K_BOX", + "MT_SCORE10K_BOX", + + // Monitor boxes -- repeating (big) boxes + "MT_RING_BIGBOX", + "MT_PITY_BIGBOX", + "MT_ATTRACT_BIGBOX", + "MT_FORCE_BIGBOX", + "MT_ARMAGEDDON_BIGBOX", + "MT_WHIRLWIND_BIGBOX", + "MT_ELEMENTAL_BIGBOX", + "MT_SNEAKERS_BIGBOX", + "MT_INVULN_BIGBOX", + "MT_1UP_BIGBOX", + "MT_EGGMAN_BIGBOX", + "MT_MIXUP_BIGBOX", + "MT_MYSTERY_BIGBOX", + "MT_GRAVITY_BIGBOX", + "MT_RECYCLER_BIGBOX", + "MT_SCORE1K_BIGBOX", + "MT_SCORE10K_BIGBOX", + + // Monitor boxes -- special + "MT_RING_REDBOX", + "MT_RING_BLUEBOX", + + // Monitor icons + "MT_RING_ICON", + "MT_PITY_ICON", + "MT_ATTRACT_ICON", + "MT_FORCE_ICON", + "MT_ARMAGEDDON_ICON", + "MT_WHIRLWIND_ICON", + "MT_ELEMENTAL_ICON", + "MT_SNEAKERS_ICON", + "MT_INVULN_ICON", + "MT_1UP_ICON", + "MT_EGGMAN_ICON", + "MT_MIXUP_ICON", + "MT_GRAVITY_ICON", + "MT_RECYCLER_ICON", + "MT_SCORE1K_ICON", + "MT_SCORE10K_ICON", // Projectiles "MT_ROCKET", diff --git a/src/hardware/hw_light.c b/src/hardware/hw_light.c index fb369387f..094495f91 100644 --- a/src/hardware/hw_light.c +++ b/src/hardware/hw_light.c @@ -247,27 +247,30 @@ light_t *t_lspr[NUMSPRITES] = &lspr[NOLIGHT], // SPR_BMNE // Monitor Boxes - &lspr[NOLIGHT], // SPR_SRBX - &lspr[NOLIGHT], // SPR_RRBX - &lspr[NOLIGHT], // SPR_BRBX - &lspr[NOLIGHT], // SPR_SHTV - &lspr[NOLIGHT], // SPR_PINV - &lspr[NOLIGHT], // SPR_YLTV - &lspr[NOLIGHT], // SPR_BLTV - &lspr[NOLIGHT], // SPR_BKTV - &lspr[NOLIGHT], // SPR_WHTV - &lspr[NOLIGHT], // SPR_GRTV - &lspr[NOLIGHT], // SPR_ELTV - &lspr[NOLIGHT], // SPR_EGGB - &lspr[NOLIGHT], // SPR_MIXU - &lspr[NOLIGHT], // SPR_RECY - &lspr[NOLIGHT], // SPR_QUES - &lspr[NOLIGHT], // SPR_GBTV - &lspr[NOLIGHT], // SPR_PRUP - &lspr[NOLIGHT], // SPR_PTTV + &lspr[NOLIGHT], // SPR_MSTV + &lspr[NOLIGHT], // SPR_XLTV - // Monitor Miscellany - &lspr[NOLIGHT], // SPR_MTEX + &lspr[NOLIGHT], // SPR_TRRI + &lspr[NOLIGHT], // SPR_TBRI + + &lspr[NOLIGHT], // SPR_TVRI + &lspr[NOLIGHT], // SPR_TVPI + &lspr[NOLIGHT], // SPR_TVAT + &lspr[NOLIGHT], // SPR_TVFO + &lspr[NOLIGHT], // SPR_TVAR + &lspr[NOLIGHT], // SPR_TVWW + &lspr[NOLIGHT], // SPR_TVEL + &lspr[NOLIGHT], // SPR_TVSS + &lspr[NOLIGHT], // SPR_TVIV + &lspr[NOLIGHT], // SPR_TV1U + &lspr[NOLIGHT], // SPR_TV1P + &lspr[NOLIGHT], // SPR_TVEG + &lspr[NOLIGHT], // SPR_TVMX + &lspr[NOLIGHT], // SPR_TVMY + &lspr[NOLIGHT], // SPR_TVGV + &lspr[NOLIGHT], // SPR_TVRC + &lspr[NOLIGHT], // SPR_TV1K + &lspr[NOLIGHT], // SPR_TVTK // Projectiles &lspr[NOLIGHT], // SPR_MISL diff --git a/src/info.c b/src/info.c index 8d7c249ad..d00ecc5dc 100644 --- a/src/info.c +++ b/src/info.c @@ -34,26 +34,26 @@ char sprnames[NUMSPRITES + 1][5] = "FAKE","EGGP","EFIR","EGGQ","EGGR","BRAK","BGOO","BMSL","EGGT","RCKT", "ELEC","TARG","NPLM","MNPL","METL","MSCF","MSCB","RING","TRNG","EMMY", "TOKE","RFLG","BFLG","NWNG","EMBM","CEMG","EMER","FANS","BUBL","SIGN", - "STEM","SPIK","SFLM","USPK","STPT","BMNE","SRBX","RRBX","BRBX","SHTV", - "PINV","YLTV","BLTV","BKTV","WHTV","GRTV","ELTV","EGGB","MIXU","RECY", - "QUES","GBTV","PRUP","PTTV","MTEX","MISL","TORP","ENRG","MINE","JBUL", - "TRLS","CBLL","AROW","CFIR","FWR1","FWR2","FWR3","FWR4","BUS1","BUS2", - "THZP","ALRM","GARG","SEWE","DRIP","CRL1","CRL2","CRL3","BCRY","CHAN", - "FLAM","ESTA","SMCH","BMCH","SMCE","BMCE","BTBL","STBL","CACT","FLME", - "DFLM","XMS1","XMS2","XMS3","BSZ1","BSZ2","BSZ3","BSZ4","BSZ5","BSZ6", - "BSZ7","BSZ8","STLG","DBAL","RCRY","ARMA","ARMF","ARMB","WIND","MAGN", - "ELEM","FORC","PITY","IVSP","SSPK","GOAL","BIRD","BUNY","MOUS","CHIC", - "COWZ","RBRD","SPRY","SPRR","SPRB","YSPR","RSPR","RAIN","SNO1","SPLH", - "SPLA","SMOK","BUBP","BUBO","BUBN","BUBM","POPP","TFOG","SEED","PRTL", - "SCOR","DRWN","TTAG","GFLG","RRNG","RNGB","RNGR","RNGI","RNGA","RNGE", - "RNGS","RNGG","PIKB","PIKR","PIKA","PIKE","PIKS","PIKG","TAUT","TGRE", - "TSCR","COIN","CPRK","GOOM","BGOM","FFWR","FBLL","SHLL","PUMA","HAMM", - "KOOP","BFLM","MAXE","MUS1","MUS2","TOAD","NDRN","SUPE","SUPZ","NDRL", - "NSPK","NBMP","HOOP","NSCR","NPRU","CAPS","SUPT","SPRK","BOM1","BOM2", - "BOM3","BOM4","ROIA","ROIB","ROIC","ROID","ROIE","ROIF","ROIG","ROIH", - "ROII","ROIJ","ROIK","ROIL","ROIM","ROIN","ROIO","ROIP","BBAL","GWLG", - "GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI", - "SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO", + "STEM","SPIK","SFLM","USPK","STPT","BMNE","MSTV","XLTV","TRRI","TBRI", + "TVRI","TVPI","TVAT","TVFO","TVAR","TVWW","TVEL","TVSS","TVIV","TV1U", + "TV1P","TVEG","TVMX","TVMY","TVGV","TVRC","TV1K","TVTK","MISL","TORP", + "ENRG","MINE","JBUL","TRLS","CBLL","AROW","CFIR","FWR1","FWR2","FWR3", + "FWR4","BUS1","BUS2","THZP","ALRM","GARG","SEWE","DRIP","CRL1","CRL2", + "CRL3","BCRY","CHAN","FLAM","ESTA","SMCH","BMCH","SMCE","BMCE","BTBL", + "STBL","CACT","FLME","DFLM","XMS1","XMS2","XMS3","BSZ1","BSZ2","BSZ3", + "BSZ4","BSZ5","BSZ6","BSZ7","BSZ8","STLG","DBAL","RCRY","ARMA","ARMF", + "ARMB","WIND","MAGN","ELEM","FORC","PITY","IVSP","SSPK","GOAL","BIRD", + "BUNY","MOUS","CHIC","COWZ","RBRD","SPRY","SPRR","SPRB","YSPR","RSPR", + "RAIN","SNO1","SPLH","SPLA","SMOK","BUBP","BUBO","BUBN","BUBM","POPP", + "TFOG","SEED","PRTL","SCOR","DRWN","TTAG","GFLG","RRNG","RNGB","RNGR", + "RNGI","RNGA","RNGE","RNGS","RNGG","PIKB","PIKR","PIKA","PIKE","PIKS", + "PIKG","TAUT","TGRE","TSCR","COIN","CPRK","GOOM","BGOM","FFWR","FBLL", + "SHLL","PUMA","HAMM","KOOP","BFLM","MAXE","MUS1","MUS2","TOAD","NDRN", + "SUPE","SUPZ","NDRL","NSPK","NBMP","HOOP","NSCR","NPRU","CAPS","SUPT", + "SPRK","BOM1","BOM2","BOM3","BOM4","ROIA","ROIB","ROIC","ROID","ROIE", + "ROIF","ROIG","ROIH","ROII","ROIJ","ROIK","ROIL","ROIM","ROIN","ROIO", + "ROIP","BBAL","GWLG","GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF", + "SRBG","SRBH","SRBI","SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO", }; char spr2names[NUMPLAYERSPRITES][5] = @@ -1239,172 +1239,171 @@ state_t states[NUMSTATES] = {SPR_NULL, 0, 1, {A_LobShot}, MT_CANNONBALL, 4*TICRATE, S_CANNONLAUNCHER3}, // S_CANNONLAUNCHER2 {SPR_NULL, 0, 2, {A_SetRandomTics}, TICRATE/2, 3*TICRATE, S_CANNONLAUNCHER1}, // S_CANNONLAUNCHER3 - // Super Ring Box - {SPR_SRBX, 0, 2, {NULL}, 0, 0, S_SUPERRINGBOX1}, // S_SUPERRINGBOX - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_SUPERRINGBOX}, // S_SUPERRINGBOX1 - {SPR_SRBX, 1, 4, {A_MonitorPop}, 0, 0, S_SUPERRINGBOX3}, // S_SUPERRINGBOX2 - {SPR_YLTV, 2, 4, {NULL}, 0, 0, S_SUPERRINGBOX4}, // S_SUPERRINGBOX3 - {SPR_YLTV, 3, 4, {NULL}, 0, 0, S_SUPERRINGBOX5}, // S_SUPERRINGBOX4 - {SPR_YLTV, 4, 4, {NULL}, 0, 0, S_SUPERRINGBOX6}, // S_SUPERRINGBOX5 - {SPR_SRBX, 1, 18, {A_RingBox}, 0, 0, S_NULL}, // S_SUPERRINGBOX6 + // Monitor Miscellany + {SPR_NSPK, FF_TRANS40, 20, {NULL}, 0, 0, S_BOXSPARKLE2}, // S_BOXSPARKLE1 + {SPR_NSPK, FF_TRANS60, 10, {NULL}, 0, 0, S_BOXSPARKLE3}, // S_BOXSPARKLE2 + {SPR_NSPK, FF_TRANS80, 5, {NULL}, 0, 0, S_NULL}, // S_BOXSPARKLE3 - // Red Team Ring Box - {SPR_RRBX, 0, 2, {NULL}, 0, 0, S_REDRINGBOX1}, // S_REDRINGBOX - {SPR_RRBX, 1, 1, {NULL}, 0, 0, S_REDRINGBOX}, // S_REDRINGBOX1 + {SPR_MSTV, 0, 1, {NULL}, 0, 0, S_SPAWNSTATE}, // S_BOX_FLICKER + {SPR_MSTV, 0, 4, {A_MonitorPop}, 0, 0, S_BOX_POP2}, // S_BOX_POP1 + {SPR_MSTV, 1, -1, {NULL}, 0, 0, S_NULL}, // S_BOX_POP2 - // Blue Team Ring Box - {SPR_BRBX, 0, 2, {NULL}, 0, 0, S_BLUERINGBOX1}, // S_BLUERINGBOX - {SPR_BRBX, 1, 1, {NULL}, 0, 0, S_BLUERINGBOX}, // S_BLUERINGBOX1 + {SPR_XLTV, 0, 1, {NULL}, 0, 0, S_SPAWNSTATE}, // S_BIGBOX_FLICKER + {SPR_XLTV, 1, 89, {A_BigMonitorPop}, 0, 0, S_BIGBOX_OFF2}, // S_BIGBOX_OFF1 + {SPR_XLTV, 2, 4, {A_PlayAttackSound}, 0, 0, S_BIGBOX_OFF3}, // S_BIGBOX_OFF2 + {SPR_XLTV, 3, 4, {NULL}, 0, 0, S_BIGBOX_OFF4}, // S_BIGBOX_OFF3 + {SPR_XLTV, 4, 4, {NULL}, 0, 0, S_BIGBOX_OFF5}, // S_BIGBOX_OFF4 + {SPR_XLTV, 5, 2, {NULL}, 0, 0, S_BIGBOX_OFF6}, // S_BIGBOX_OFF5 + {SPR_XLTV, 6, 2, {NULL}, 0, 0, S_BIGBOX_OFF7}, // S_BIGBOX_OFF6 + {SPR_XLTV, 6, 0, {A_BigMonitorRestore}, 0, 0, S_SPAWNSTATE}, // S_BIGBOX_OFF7 - // Super Sneakers Box - {SPR_SHTV, 0, 2, {NULL}, 0, 0, S_SHTV1}, // S_SHTV - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_SHTV}, // S_SHTV1 - {SPR_SHTV, 1, 4, {A_MonitorPop}, 0, 0, S_SHTV3}, // S_SHTV2 - {SPR_YLTV, 2, 4, {NULL}, 0, 0, S_SHTV4}, // S_SHTV3 - {SPR_YLTV, 3, 4, {NULL}, 0, 0, S_SHTV5}, // S_SHTV4 - {SPR_YLTV, 4, 4, {NULL}, 0, 0, S_SHTV6}, // S_SHTV5 - {SPR_SHTV, 1, 18, {A_SuperSneakers}, 0, 0, S_NULL}, // S_SHTV6 + // Monitor States (one per box) + {SPR_TVMY, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_MYSTERY_BOX + {SPR_TVRI, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_RING_BOX + {SPR_TVPI, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_PITY_BOX + {SPR_TVAT, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_ATTRACT_BOX + {SPR_TVFO, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_FORCE_BOX + {SPR_TVAR, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_ARMAGEDDON_BOX + {SPR_TVWW, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_WHIRLWIND_BOX + {SPR_TVEL, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_ELEMENTAL_BOX + {SPR_TVSS, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_SNEAKERS_BOX + {SPR_TVIV, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_INVULN_BOX + {SPR_TV1P, 0, 2, {A_1upThinker}, 0, 0, S_BOX_FLICKER}, // S_1UP_BOX + {SPR_TVEG, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_EGGMAN_BOX + {SPR_TVMX, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_MIXUP_BOX + {SPR_TVGV, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_GRAVITY_BOX + {SPR_TVRC, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_RECYCLER_BOX + {SPR_TV1K, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_SCORE1K_BOX + {SPR_TVTK, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_SCORE10K_BOX - // Invincibility Box - {SPR_PINV, 0, 2, {NULL}, 0, 0, S_PINV1}, // S_PINV - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_PINV}, // S_PINV1 - {SPR_PINV, 1, 4, {A_MonitorPop}, 0, 0, S_PINV3}, // S_PINV2 - {SPR_PINV, 2, 4, {NULL}, 0, 0, S_PINV4}, // S_PINV3 - {SPR_PINV, 3, 4, {NULL}, 0, 0, S_PINV5}, // S_PINV4 - {SPR_PINV, 4, 4, {NULL}, 0, 0, S_PINV6}, // S_PINV5 - {SPR_PINV, 1, 18, {A_Invincibility}, 0, 0, S_NULL}, // S_PINV6 + // Repeat Monitor States (one per box) + {SPR_TVMY, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_MYSTERY_BIGBOX + {SPR_TVRI, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_RING_BIGBOX + {SPR_TVPI, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_PITY_BIGBOX + {SPR_TVAT, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_ATTRACT_BIGBOX + {SPR_TVFO, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_FORCE_BIGBOX + {SPR_TVAR, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_ARMAGEDDON_BIGBOX + {SPR_TVWW, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_WHIRLWIND_BIGBOX + {SPR_TVEL, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_ELEMENTAL_BIGBOX + {SPR_TVSS, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_SNEAKERS_BIGBOX + {SPR_TVIV, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_INVULN_BIGBOX + {SPR_TV1P, 1, 2, {A_DualAction}, S_MYSTERY_BIGBOX, S_1UP_BOX, S_BIGBOX_FLICKER}, // S_1UP_BIGBOX + {SPR_TVEG, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_EGGMAN_BIGBOX + {SPR_TVMX, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_MIXUP_BIGBOX + {SPR_TVGV, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_GRAVITY_BIGBOX + {SPR_TVRC, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_RECYCLER_BIGBOX + {SPR_TV1K, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_SCORE1K_BIGBOX + {SPR_TVTK, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_SCORE10K_BIGBOX - // 1up Box - {SPR_PRUP, 2, 2, {A_1upThinker}, 0, 0, S_PRUP1}, // S_PRUP - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_PRUP}, // S_PRUP1 - {SPR_PRUP, 3, 4, {A_MonitorPop}, 0, 0, S_PRUP3}, // S_PRUP2 - {SPR_PINV, 2, 4, {NULL}, 0, 0, S_PRUP4}, // S_PRUP3 - {SPR_PINV, 3, 4, {NULL}, 0, 0, S_PRUP5}, // S_PRUP4 - {SPR_PINV, 4, 4, {NULL}, 0, 0, S_PRUP6}, // S_PRUP5 - {SPR_PRUP, 3, 18, {A_ExtraLife}, 0, 0, S_NULL}, // S_PRUP6 + // Team Ring Boxes (these are special) + {SPR_TRRI, 0, 2, {NULL}, 0, 0, S_RING_REDBOX2}, // S_RING_REDBOX1 + {SPR_TRRI, 1, 1, {NULL}, 0, 0, S_RING_REDBOX1}, // S_RING_REDBOX2 + {SPR_TRRI, 1, 4, {A_MonitorPop}, 0, 0, S_REDBOX_POP2}, // S_REDBOX_POP1 + {SPR_TRRI, 2, -1, {NULL}, 0, 0, S_NULL}, // S_REDBOX_POP2 - // Ring Shield Box - {SPR_YLTV, 0, 2, {NULL}, 0, 0, S_YLTV1}, // S_YLTV - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_YLTV}, // S_YLTV1 - {SPR_YLTV, 1, 4, {A_MonitorPop}, 0, 0, S_YLTV3}, // S_YLTV2 - {SPR_YLTV, 2, 4, {NULL}, 0, 0, S_YLTV4}, // S_YLTV3 - {SPR_YLTV, 3, 4, {NULL}, 0, 0, S_YLTV5}, // S_YLTV4 - {SPR_YLTV, 4, 4, {NULL}, 0, 0, S_YLTV6}, // S_YLTV5 - {SPR_YLTV, 1, 18, {A_RingShield},0, 0, S_NULL}, // S_YLTV6 + {SPR_TBRI, 0, 2, {NULL}, 0, 0, S_RING_BLUEBOX2}, // S_RING_BLUEBOX1 + {SPR_TBRI, 1, 1, {NULL}, 0, 0, S_RING_BLUEBOX1}, // S_RING_BLUEBOX2 + {SPR_TBRI, 1, 4, {A_MonitorPop}, 0, 0, S_BLUEBOX_POP2}, // S_BLUEBOX_POP1 + {SPR_TBRI, 2, -1, {NULL}, 0, 0, S_NULL}, // S_BLUEBOX_POP2 - // Force Shield Box - {SPR_BLTV, 0, 2, {NULL}, 0, 0, S_BLTV2}, // S_BLTV1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_BLTV1}, // S_BLTV2 - {SPR_BLTV, 1, 4, {A_MonitorPop}, 0, 0, S_BLTV4}, // S_BLTV3 - {SPR_BLTV, 2, 4, {NULL}, 0, 0, S_BLTV5}, // S_BLTV4 - {SPR_BLTV, 3, 4, {NULL}, 0, 0, S_BLTV6}, // S_BLTV5 - {SPR_BLTV, 4, 4, {NULL}, 0, 0, S_BLTV7}, // S_BLTV6 - {SPR_BLTV, 1, 18, {A_ForceShield}, 0, 0, S_NULL}, // S_BLTV7 + // Box Icons -- 5 states each, one for each part of the twirl + {SPR_TVRI, 2, 4, {NULL}, 0, 0, S_RING_ICON2}, // S_RING_ICON1 + {SPR_TVRI, 3, 4, {NULL}, 0, 0, S_RING_ICON3}, // S_RING_ICON2 + {SPR_TVRI, 4, 4, {NULL}, 0, 0, S_RING_ICON4}, // S_RING_ICON3 + {SPR_TVRI, 5, 4, {NULL}, 0, 0, S_RING_ICON5}, // S_RING_ICON4 + {SPR_TVRI, 2, 18, {A_RingBox}, 0, 0, S_NULL}, // S_RING_ICON5 - // Bomb Shield Box - {SPR_BKTV, 0, 2, {NULL}, 0, 0, S_BKTV2}, // S_BKTV1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_BKTV1}, // S_BKTV2 - {SPR_BKTV, 1, 4, {A_MonitorPop}, 0, 0, S_BKTV4}, // S_BKTV3 - {SPR_BKTV, 2, 4, {NULL}, 0, 0, S_BKTV5}, // S_BKTV4 - {SPR_BKTV, 3, 4, {NULL}, 0, 0, S_BKTV6}, // S_BKTV5 - {SPR_BKTV, 4, 4, {NULL}, 0, 0, S_BKTV7}, // S_BKTV6 - {SPR_BKTV, 1, 18, {A_BombShield}, 0, 0, S_NULL}, // S_BKTV7 + {SPR_TVPI, 2, 4, {NULL}, 0, 0, S_PITY_ICON2}, // S_PITY_ICON1 + {SPR_TVPI, 3, 4, {NULL}, 0, 0, S_PITY_ICON3}, // S_PITY_ICON2 + {SPR_TVPI, 4, 4, {NULL}, 0, 0, S_PITY_ICON4}, // S_PITY_ICON3 + {SPR_TVPI, 5, 4, {NULL}, 0, 0, S_PITY_ICON5}, // S_PITY_ICON4 + {SPR_TVPI, 2, 18, {A_PityShield}, 0, 0, S_NULL}, // S_PITY_ICON5 - // Jump Shield Box - {SPR_WHTV, 0, 2, {NULL}, 0, 0, S_WHTV2}, // S_WHTV1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_WHTV1}, // S_WHTV2 - {SPR_WHTV, 1, 4, {A_MonitorPop}, 0, 0, S_WHTV4}, // S_WHTV3 - {SPR_WHTV, 2, 4, {NULL}, 0, 0, S_WHTV5}, // S_WHTV4 - {SPR_WHTV, 3, 4, {NULL}, 0, 0, S_WHTV6}, // S_WHTV5 - {SPR_WHTV, 4, 4, {NULL}, 0, 0, S_WHTV7}, // S_WHTV6 - {SPR_WHTV, 1, 18, {A_JumpShield}, 0, 0, S_NULL}, // S_WHTV7 + {SPR_TVAT, 2, 4, {NULL}, 0, 0, S_ATTRACT_ICON2}, // S_ATTRACT_ICON1 + {SPR_TVAT, 3, 4, {NULL}, 0, 0, S_ATTRACT_ICON3}, // S_ATTRACT_ICON2 + {SPR_TVAT, 4, 4, {NULL}, 0, 0, S_ATTRACT_ICON4}, // S_ATTRACT_ICON3 + {SPR_TVAT, 5, 4, {NULL}, 0, 0, S_ATTRACT_ICON5}, // S_ATTRACT_ICON4 + {SPR_TVAT, 2, 18, {A_RingShield},0, 0, S_NULL}, // S_ATTRACT_ICON5 - // Elemental Shield Box - {SPR_ELTV, 0, 2, {NULL}, 0, 0, S_GRTV1}, // S_GRTV - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_GRTV}, // S_GRTV1 - {SPR_ELTV, 1, 4, {A_MonitorPop}, 0, 0, S_GRTV3}, // S_GRTV2 - {SPR_ELTV, 2, 4, {NULL}, 0, 0, S_GRTV4}, // S_GRTV3 - {SPR_ELTV, 3, 4, {NULL}, 0, 0, S_GRTV5}, // S_GRTV4 - {SPR_ELTV, 4, 4, {NULL}, 0, 0, S_GRTV6}, // S_GRTV5 - {SPR_ELTV, 1, 18, {A_WaterShield}, 0, 0, S_NULL}, // S_GRTV6 + {SPR_TVFO, 2, 4, {NULL}, 0, 0, S_FORCE_ICON2}, // S_FORCE_ICON1 + {SPR_TVFO, 3, 4, {NULL}, 0, 0, S_FORCE_ICON3}, // S_FORCE_ICON2 + {SPR_TVFO, 4, 4, {NULL}, 0, 0, S_FORCE_ICON4}, // S_FORCE_ICON3 + {SPR_TVFO, 5, 4, {NULL}, 0, 0, S_FORCE_ICON5}, // S_FORCE_ICON4 + {SPR_TVFO, 2, 18, {A_ForceShield}, 0, 0, S_NULL}, // S_FORCE_ICON5 - // Pity Shield Box - {SPR_GRTV, 0, 2, {NULL}, 0, 0, S_PITV2}, // S_PITV1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_PITV1}, // S_PITV2 - {SPR_GRTV, 1, 4, {A_MonitorPop}, 0, 0, S_PITV4}, // S_PITV3 - {SPR_GRTV, 2, 4, {NULL}, 0, 0, S_PITV5}, // S_PITV4 - {SPR_GRTV, 3, 4, {NULL}, 0, 0, S_PITV6}, // S_PITV5 - {SPR_GRTV, 4, 4, {NULL}, 0, 0, S_PITV7}, // S_PITV6 - {SPR_GRTV, 1, 18, {A_PityShield}, 0, 0, S_NULL}, // S_PITV7 + {SPR_TVAR, 2, 4, {NULL}, 0, 0, S_ARMAGEDDON_ICON2}, // S_ARMAGEDDON_ICON1 + {SPR_TVAR, 3, 4, {NULL}, 0, 0, S_ARMAGEDDON_ICON3}, // S_ARMAGEDDON_ICON2 + {SPR_TVAR, 4, 4, {NULL}, 0, 0, S_ARMAGEDDON_ICON4}, // S_ARMAGEDDON_ICON3 + {SPR_TVAR, 5, 4, {NULL}, 0, 0, S_ARMAGEDDON_ICON5}, // S_ARMAGEDDON_ICON4 + {SPR_TVAR, 2, 18, {A_BombShield}, 0, 0, S_NULL}, // S_ARMAGEDDON_ICON5 - // Eggman Box - {SPR_EGGB, 0, 2, {NULL}, 0, 0, S_EGGTV2}, // S_EGGTV1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_EGGTV1}, // S_EGGTV2 - {SPR_EGGB, 1, 4, {A_MonitorPop}, 0, 0, S_EGGTV4}, // S_EGGTV3 - {SPR_BKTV, 2, 4, {NULL}, 0, 0, S_EGGTV5}, // S_EGGTV4 - {SPR_BKTV, 3, 4, {NULL}, 0, 0, S_EGGTV6}, // S_EGGTV5 - {SPR_BKTV, 4, 4, {NULL}, 0, 0, S_EGGTV7}, // S_EGGTV6 - {SPR_EGGB, 1, 18, {A_EggmanBox}, 0, 0, S_NULL}, // S_EGGTV7 + {SPR_TVWW, 2, 4, {NULL}, 0, 0, S_WHIRLWIND_ICON2}, // S_WHIRLWIND_ICON1 + {SPR_TVWW, 3, 4, {NULL}, 0, 0, S_WHIRLWIND_ICON3}, // S_WHIRLWIND_ICON2 + {SPR_TVWW, 4, 4, {NULL}, 0, 0, S_WHIRLWIND_ICON4}, // S_WHIRLWIND_ICON3 + {SPR_TVWW, 5, 4, {NULL}, 0, 0, S_WHIRLWIND_ICON5}, // S_WHIRLWIND_ICON4 + {SPR_TVWW, 2, 18, {A_JumpShield}, 0, 0, S_NULL}, // S_WHIRLWIND_ICON5 - // Teleport Box - {SPR_MIXU, 0, 2, {NULL}, 0, 0, S_MIXUPBOX2}, // S_MIXUPBOX1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_MIXUPBOX1}, // S_MIXUPBOX2 - {SPR_MIXU, 1, 4, {A_MonitorPop}, 0, 0, S_MIXUPBOX4}, // S_MIXUPBOX3 - {SPR_WHTV, 2, 4, {NULL}, 0, 0, S_MIXUPBOX5}, // S_MIXUPBOX4 - {SPR_WHTV, 3, 4, {NULL}, 0, 0, S_MIXUPBOX6}, // S_MIXUPBOX5 - {SPR_WHTV, 4, 4, {NULL}, 0, 0, S_MIXUPBOX7}, // S_MIXUPBOX6 - {SPR_MIXU, 1, 18, {A_MixUp}, 0, 0, S_NULL}, // S_MIXUPBOX7 + {SPR_TVEL, 2, 4, {NULL}, 0, 0, S_ELEMENTAL_ICON2}, // S_ELEMENTAL_ICON1 + {SPR_TVEL, 3, 4, {NULL}, 0, 0, S_ELEMENTAL_ICON3}, // S_ELEMENTAL_ICON2 + {SPR_TVEL, 4, 4, {NULL}, 0, 0, S_ELEMENTAL_ICON4}, // S_ELEMENTAL_ICON3 + {SPR_TVEL, 5, 4, {NULL}, 0, 0, S_ELEMENTAL_ICON5}, // S_ELEMENTAL_ICON4 + {SPR_TVEL, 2, 18, {A_WaterShield}, 0, 0, S_NULL}, // S_ELEMENTAL_ICON5 - // Recycler Box - {SPR_RECY, 0, 2, {NULL}, 0, 0, S_RECYCLETV2}, // S_RECYCLETV1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_RECYCLETV1}, // S_RECYCLETV2 - {SPR_RECY, 1, 4, {A_MonitorPop}, 0, 0, S_RECYCLETV4}, // S_RECYCLETV3 - {SPR_GRTV, 2, 4, {NULL}, 0, 0, S_RECYCLETV5}, // S_RECYCLETV4 - {SPR_GRTV, 3, 4, {NULL}, 0, 0, S_RECYCLETV6}, // S_RECYCLETV5 - {SPR_GRTV, 4, 4, {NULL}, 0, 0, S_RECYCLETV7}, // S_RECYCLETV6 - {SPR_RECY, 1, 18, {A_RecyclePowers}, 0, 0, S_NULL}, // S_RECYCLETV7 + {SPR_TVSS, 2, 4, {NULL}, 0, 0, S_SNEAKERS_ICON2}, // S_SNEAKERS_ICON1 + {SPR_TVSS, 3, 4, {NULL}, 0, 0, S_SNEAKERS_ICON3}, // S_SNEAKERS_ICON2 + {SPR_TVSS, 4, 4, {NULL}, 0, 0, S_SNEAKERS_ICON4}, // S_SNEAKERS_ICON3 + {SPR_TVSS, 5, 4, {NULL}, 0, 0, S_SNEAKERS_ICON5}, // S_SNEAKERS_ICON4 + {SPR_TVSS, 2, 18, {A_SuperSneakers}, 0, 0, S_NULL}, // S_SNEAKERS_ICON5 - // Question Box - {SPR_QUES, 0, 2, {NULL}, 0, 0, S_RANDOMBOX2}, // S_RANDOMBOX1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_RANDOMBOX1}, // S_RANDOMBOX2 - {SPR_QUES, 0, 1, {A_MonitorPop}, 0, 0, S_NULL}, // S_RANDOMBOX3 + {SPR_TVIV, 2, 4, {NULL}, 0, 0, S_INVULN_ICON2}, // S_INVULN_ICON1 + {SPR_TVIV, 3, 4, {NULL}, 0, 0, S_INVULN_ICON3}, // S_INVULN_ICON2 + {SPR_TVIV, 4, 4, {NULL}, 0, 0, S_INVULN_ICON4}, // S_INVULN_ICON3 + {SPR_TVIV, 5, 4, {NULL}, 0, 0, S_INVULN_ICON5}, // S_INVULN_ICON4 + {SPR_TVIV, 2, 18, {A_Invincibility}, 0, 0, S_NULL}, // S_INVULN_ICON5 - // Gravity Boots Box - {SPR_GBTV, 0, 2, {NULL}, 0, 0, S_GBTV2}, // S_GBTV1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_GBTV1}, // S_GBTV2 - {SPR_GBTV, 1, 4, {A_MonitorPop}, 0, 0, S_GBTV4}, // S_GBTV3 - {SPR_BLTV, 2, 4, {NULL}, 0, 0, S_GBTV5}, // S_GBTV4 - {SPR_BLTV, 3, 4, {NULL}, 0, 0, S_GBTV6}, // S_GBTV5 - {SPR_BLTV, 4, 4, {NULL}, 0, 0, S_GBTV7}, // S_GBTV6 - {SPR_GBTV, 1, 18, {A_GravityBox}, 0, 0, S_NULL}, // S_GBTV7 + {SPR_TV1P, 2, 4, {NULL}, 0, 0, S_1UP_ICON2}, // S_1UP_ICON1 + {SPR_TV1U, 3, 4, {NULL}, 0, 0, S_1UP_ICON3}, // S_1UP_ICON2 + {SPR_TV1U, 4, 4, {NULL}, 0, 0, S_1UP_ICON4}, // S_1UP_ICON3 + {SPR_TV1U, 5, 4, {NULL}, 0, 0, S_1UP_ICON5}, // S_1UP_ICON4 + {SPR_TV1P, 2, 18, {A_ExtraLife}, 0, 0, S_NULL}, // S_1UP_ICON5 - // Score Box (1k) - {SPR_PTTV, 0, 2, {NULL}, 0, 0, S_SCORETVA2}, // S_SCORETVA1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_SCORETVA1}, // S_SCORETVA2 - {SPR_PTTV, 1, 4, {A_MonitorPop}, 0, 0, S_SCORETVA4}, // S_SCORETVA3 - {SPR_PTTV, 2, 4, {NULL}, 0, 0, S_SCORETVA5}, // S_SCORETVA4 - {SPR_PTTV, 3, 4, {NULL}, 0, 0, S_SCORETVA6}, // S_SCORETVA5 - {SPR_PTTV, 4, 4, {NULL}, 0, 0, S_SCORETVA7}, // S_SCORETVA6 - {SPR_PTTV, 1, 18, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORETVA7 + {SPR_TVEG, 2, 4, {NULL}, 0, 0, S_EGGMAN_ICON2}, // S_EGGMAN_ICON1 + {SPR_TVEG, 3, 4, {NULL}, 0, 0, S_EGGMAN_ICON3}, // S_EGGMAN_ICON2 + {SPR_TVEG, 4, 4, {NULL}, 0, 0, S_EGGMAN_ICON4}, // S_EGGMAN_ICON3 + {SPR_TVEG, 5, 4, {NULL}, 0, 0, S_EGGMAN_ICON5}, // S_EGGMAN_ICON4 + {SPR_TVEG, 2, 18, {A_EggmanBox}, 0, 0, S_NULL}, // S_EGGMAN_ICON5 - // Score Box (10k) - {SPR_PTTV, 5, 2, {NULL}, 0, 0, S_SCORETVB2}, // S_SCORETVB1 - {SPR_MTEX, 0, 1, {NULL}, 0, 0, S_SCORETVB1}, // S_SCORETVB2 - {SPR_PTTV, 6, 4, {A_MonitorPop}, 0, 0, S_SCORETVB4}, // S_SCORETVB3 - {SPR_PTTV, 7, 4, {NULL}, 0, 0, S_SCORETVB5}, // S_SCORETVB4 - {SPR_PTTV, 8, 4, {NULL}, 0, 0, S_SCORETVB6}, // S_SCORETVB5 - {SPR_PTTV, 9, 4, {NULL}, 0, 0, S_SCORETVB7}, // S_SCORETVB6 - {SPR_PTTV, 6, 18, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORETVB7 + {SPR_TVMX, 2, 4, {NULL}, 0, 0, S_MIXUP_ICON2}, // S_MIXUP_ICON1 + {SPR_TVMX, 3, 4, {NULL}, 0, 0, S_MIXUP_ICON3}, // S_MIXUP_ICON2 + {SPR_TVMX, 4, 4, {NULL}, 0, 0, S_MIXUP_ICON4}, // S_MIXUP_ICON3 + {SPR_TVMX, 5, 4, {NULL}, 0, 0, S_MIXUP_ICON5}, // S_MIXUP_ICON4 + {SPR_TVMX, 2, 18, {A_MixUp}, 0, 0, S_NULL}, // S_MIXUP_ICON5 - // Monitor Explosion - {SPR_MTEX, 0, 4, {NULL}, 0, 0, S_MONITOREXPLOSION2}, // S_MONITOREXPLOSION1 - {SPR_MTEX, 1, -1, {NULL}, 0, 0, S_NULL}, // S_MONITOREXPLOSION2 + {SPR_TVGV, 2, 4, {NULL}, 0, 0, S_GRAVITY_ICON2}, // S_GRAVITY_ICON1 + {SPR_TVGV, 3, 4, {NULL}, 0, 0, S_GRAVITY_ICON3}, // S_GRAVITY_ICON2 + {SPR_TVGV, 4, 4, {NULL}, 0, 0, S_GRAVITY_ICON4}, // S_GRAVITY_ICON3 + {SPR_TVGV, 5, 4, {NULL}, 0, 0, S_GRAVITY_ICON5}, // S_GRAVITY_ICON4 + {SPR_TVGV, 2, 18, {A_GravityBox}, 0, 0, S_NULL}, // S_GRAVITY_ICON5 - {SPR_RRBX, 1, 4, {NULL}, 0, 0, S_REDMONITOREXPLOSION2}, // S_REDMONITOREXPLOSION1 - {SPR_RRBX, 2, -1, {NULL}, 0, 0, S_NULL}, // S_REDMONITOREXPLOSION2 + {SPR_TVRC, 2, 4, {NULL}, 0, 0, S_RECYCLER_ICON2}, // S_RECYCLER_ICON1 + {SPR_TVRC, 3, 4, {NULL}, 0, 0, S_RECYCLER_ICON3}, // S_RECYCLER_ICON2 + {SPR_TVRC, 4, 4, {NULL}, 0, 0, S_RECYCLER_ICON4}, // S_RECYCLER_ICON3 + {SPR_TVRC, 5, 4, {NULL}, 0, 0, S_RECYCLER_ICON5}, // S_RECYCLER_ICON4 + {SPR_TVRC, 2, 18, {A_RecyclePowers}, 0, 0, S_NULL}, // S_RECYCLER_ICON5 - {SPR_BRBX, 1, 4, {NULL}, 0, 0, S_BLUEMONITOREXPLOSION2}, // S_BLUEMONITOREXPLOSION1 - {SPR_BRBX, 2, -1, {NULL}, 0, 0, S_NULL}, // S_BLUEMONITOREXPLOSION2 + {SPR_TV1K, 2, 4, {NULL}, 0, 0, S_SCORE1K_ICON2}, // S_SCORE1K_ICON1 + {SPR_TV1K, 3, 4, {NULL}, 0, 0, S_SCORE1K_ICON3}, // S_SCORE1K_ICON2 + {SPR_TV1K, 4, 4, {NULL}, 0, 0, S_SCORE1K_ICON4}, // S_SCORE1K_ICON3 + {SPR_TV1K, 5, 4, {NULL}, 0, 0, S_SCORE1K_ICON5}, // S_SCORE1K_ICON4 + {SPR_TV1K, 2, 18, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE1K_ICON5 + + {SPR_TVTK, 2, 4, {NULL}, 0, 0, S_SCORE10K_ICON2}, // S_SCORE10K_ICON1 + {SPR_TVTK, 3, 4, {NULL}, 0, 0, S_SCORE10K_ICON3}, // S_SCORE10K_ICON2 + {SPR_TVTK, 4, 4, {NULL}, 0, 0, S_SCORE10K_ICON4}, // S_SCORE10K_ICON3 + {SPR_TVTK, 5, 4, {NULL}, 0, 0, S_SCORE10K_ICON5}, // S_SCORE10K_ICON4 + {SPR_TVTK, 2, 18, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE10K_ICON5 + + // --- {SPR_MISL, FF_FULLBRIGHT, 1, {A_SmokeTrailer}, MT_SMOKE, 0, S_ROCKET}, // S_ROCKET @@ -6083,417 +6082,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_SUPERRINGBOX - 400, // doomednum - S_SUPERRINGBOX, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_SUPERRINGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_SUPERRINGBOX2,// deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_RINGICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_REDRINGBOX - 414, // doomednum - S_REDRINGBOX, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_REDRINGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_SUPERRINGBOX2,// deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_REDMONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_RINGICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_BLUERINGBOX - 415, // doomednum - S_BLUERINGBOX, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_BLUERINGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_SUPERRINGBOX2,// deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_BLUEMONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_RINGICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_SNEAKERTV - 407, // doomednum - S_SHTV, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_SHTV, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_SHTV2, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_SHOESICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_INV - 408, // doomednum - S_PINV, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_PINV, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_PINV2, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_INVCICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - // 1-up box - { // MT_PRUP - 409, // doomednum - S_PRUP, // spawnstate - 1, // spawnhealth - S_PLAY_BOX1, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_PRUP, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_PRUP2, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_1UPICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_RUNSPAWNFUNC, // flags - S_NULL // raisestate - }, - - { // MT_YELLOWTV - 402, // doomednum - S_YLTV, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_YLTV, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_YLTV2, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_YSHIELDICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_BLUETV - 403, // doomednum - S_BLTV1, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_BLTV1, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BLTV3, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_BSHIELDICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - // bomb shield box - { // MT_BLACKTV - 404, // doomednum - S_BKTV1, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_BKTV1, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BKTV3, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_KSHIELDICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - // jump shield box - { // MT_WHITETV - 405, // doomednum - S_WHTV1, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_WHTV1, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_WHTV3, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_WSHIELDICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_GREENTV - 406, // doomednum - S_GRTV, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_GRTV, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_GRTV2, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_GSHIELDICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_PITYTV - 401, // doomednum - S_PITV1, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_PITV1, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_PITV3, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_PITYSHIELDICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_EGGMANBOX - 410, // doomednum - S_EGGTV1, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_EGGTV1, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_EGGTV3, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_EGGMANICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_MIXUPBOX - 411, // doomednum - S_MIXUPBOX1, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_MIXUPBOX1, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_MIXUPBOX3, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_MIXUPICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_RECYCLETV - 416, // doomednum - S_RECYCLETV1, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_RECYCLETV1, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_RECYCLETV3, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_RECYCLEICO, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_RECYCLEICO + { // MT_BOXSPARKLE -1, // doomednum - S_RECYCLETV3, // spawnstate + S_BOXSPARKLE1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -6506,210 +6097,993 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // missilestate S_NULL, // deathstate S_NULL, // xdeathstate - sfx_None, // deathsound - 2*FRACUNIT, // speed - 8*FRACUNIT, // radius - 14*FRACUNIT, // height + sfx_pop, // deathsound + 3*FRACUNIT, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height 0, // display offset 100, // mass - 62*FRACUNIT, // damage + 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags + MF_NOGRAVITY|MF_SCENERY|MF_NOBLOCKMAP|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, - { // MT_QUESTIONBOX + { // MT_RING_BOX + 400, // doomednum + S_RING_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_RING_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_RING_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_PITY_BOX + 401, // doomednum + S_PITY_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_PITY_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_PITY_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_ATTRACT_BOX + 402, // doomednum + S_ATTRACT_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_ATTRACT_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_ATTRACT_ICON,// damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_FORCE_BOX + 403, // doomednum + S_FORCE_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_FORCE_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_FORCE_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_ARMAGEDDON_BOX + 404, // doomednum + S_ARMAGEDDON_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_ARMAGEDDON_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_ARMAGEDDON_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_WHIRLWIND_BOX + 405, // doomednum + S_WHIRLWIND_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_WHIRLWIND_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_WHIRLWIND_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_ELEMENTAL_BOX + 406, // doomednum + S_ELEMENTAL_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_ELEMENTAL_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_ELEMENTAL_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_SNEAKERS_BOX + 407, // doomednum + S_SNEAKERS_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_SNEAKERS_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_SNEAKERS_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_INVULN_BOX + 408, // doomednum + S_INVULN_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_INVULN_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_INVULN_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_1UP_BOX + 409, // doomednum + S_1UP_BOX, // spawnstate + 1, // spawnhealth + S_PLAY_BOX1, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_1UP_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_1UP_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_EGGMAN_BOX + 410, // doomednum + S_EGGMAN_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_EGGMAN_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_EGGMAN_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_MIXUP_BOX + 411, // doomednum + S_MIXUP_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_MIXUP_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_MIXUP_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_MYSTERY_BOX 412, // doomednum - S_RANDOMBOX1, // spawnstate + S_MYSTERY_BOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_None, // attacksound - S_RANDOMBOX1, // painstate + S_MYSTERY_BOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_RANDOMBOX3, // deathstate + S_BOX_POP1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed + 0, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset 100, // mass - 0, // damage + MT_UNKNOWN, // damage sfx_None, // activesound MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags S_NULL // raisestate }, - { // MT_GRAVITYBOX + { // MT_GRAVITY_BOX 413, // doomednum - S_GBTV1, // spawnstate + S_GRAVITY_BOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_None, // attacksound - S_GBTV1, // painstate + S_GRAVITY_BOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_GBTV3, // deathstate + S_BOX_POP1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed + 0, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset 100, // mass - MT_GRAVITYICO, // damage - sfx_cgot, // activesound + MT_GRAVITY_ICON, // damage + sfx_None, // activesound MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags S_NULL // raisestate }, - { // MT_SCORETVSMALL + { // MT_RECYCLER_BOX + 416, // doomednum + S_RECYCLER_BOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_RECYCLER_BOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 1, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_RECYCLER_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_SCORE1K_BOX 418, // doomednum - S_SCORETVA1, // spawnstate + S_SCORE1K_BOX, // spawnstate 1, // spawnhealth S_NULL, // seestate - sfx_token, // seesound + sfx_None, // seesound 8, // reactiontime sfx_None, // attacksound - S_SCORETVA1, // painstate + S_SCORE1K_BOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_SCORETVA3, // deathstate + S_BOX_POP1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed + 0, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset 100, // mass - MT_SCOREICOSMALL, // damage + MT_SCORE1K_ICON, // damage sfx_None, // activesound MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags S_NULL // raisestate }, - { // MT_SCORETVLARGE + { // MT_SCORE10K_BOX 419, // doomednum - S_SCORETVB1, // spawnstate + S_SCORE10K_BOX, // spawnstate 1, // spawnhealth S_NULL, // seestate - sfx_token, // seesound + sfx_None, // seesound 8, // reactiontime sfx_None, // attacksound - S_SCORETVB1, // painstate + S_SCORE10K_BOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_SCORETVB3, // deathstate + S_BOX_POP1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound - MT_MONITOREXPLOSION, // speed + 0, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset 100, // mass - MT_SCOREICOLARGE, // damage + MT_SCORE10K_ICON, // damage sfx_None, // activesound MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags S_NULL // raisestate }, - { // MT_MONITOREXPLOSION - -1, // doomednum - S_MONITOREXPLOSION1, // spawnstate - 0, // spawnhealth + { // MT_RING_BIGBOX + 430, // doomednum + S_RING_BIGBOX, // spawnstate + 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime - sfx_None, // attacksound - S_XPLD1, // painstate + sfx_monton, // attacksound + S_RING_BIGBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_NULL, // deathstate + S_BIGBOX_OFF1, // deathstate S_NULL, // xdeathstate - sfx_None, // deathsound + sfx_pop, // deathsound 0, // speed - 8*FRACUNIT, // radius - 8*FRACUNIT, // height + 16*FRACUNIT, // radius + 32*FRACUNIT, // height 0, // display offset - MT_EXPLODE, // mass - 0, // damage + 100, // mass + MT_RING_ICON, // damage sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags S_NULL // raisestate }, - { // MT_REDMONITOREXPLOSION - -1, // doomednum - S_REDMONITOREXPLOSION1, // spawnstate - 0, // spawnhealth + { // MT_PITY_BIGBOX + 431, // doomednum + S_PITY_BIGBOX, // spawnstate + 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime - sfx_None, // attacksound - S_XPLD1, // painstate + sfx_monton, // attacksound + S_PITY_BIGBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_NULL, // deathstate + S_BIGBOX_OFF1, // deathstate S_NULL, // xdeathstate - sfx_None, // deathsound + sfx_pop, // deathsound 0, // speed - 8*FRACUNIT, // radius - 8*FRACUNIT, // height + 16*FRACUNIT, // radius + 32*FRACUNIT, // height 0, // display offset - MT_EXPLODE, // mass - 0, // damage + 100, // mass + MT_PITY_ICON, // damage sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags S_NULL // raisestate }, - { // MT_BLUEMONITOREXPLOSION - -1, // doomednum - S_BLUEMONITOREXPLOSION1, // spawnstate - 0, // spawnhealth + { // MT_ATTRACT_BIGBOX + 432, // doomednum + S_ATTRACT_BIGBOX, // spawnstate + 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime - sfx_None, // attacksound - S_XPLD1, // painstate + sfx_monton, // attacksound + S_ATTRACT_BIGBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_NULL, // deathstate + S_BIGBOX_OFF1, // deathstate S_NULL, // xdeathstate - sfx_None, // deathsound + sfx_pop, // deathsound 0, // speed - 8*FRACUNIT, // radius - 8*FRACUNIT, // height + 16*FRACUNIT, // radius + 32*FRACUNIT, // height 0, // display offset - MT_EXPLODE, // mass - 0, // damage + 100, // mass + MT_ATTRACT_ICON,// damage sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags S_NULL // raisestate }, - { // MT_RINGICO + { // MT_FORCE_BIGBOX + 433, // doomednum + S_FORCE_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_FORCE_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_FORCE_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_ARMAGEDDON_BIGBOX + 434, // doomednum + S_ARMAGEDDON_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_ARMAGEDDON_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_ARMAGEDDON_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_WHIRLWIND_BIGBOX + 435, // doomednum + S_WHIRLWIND_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_WHIRLWIND_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_WHIRLWIND_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_ELEMENTAL_BIGBOX + 436, // doomednum + S_ELEMENTAL_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_ELEMENTAL_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_ELEMENTAL_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_SNEAKERS_BIGBOX + 437, // doomednum + S_SNEAKERS_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_SNEAKERS_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_SNEAKERS_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_INVULN_BIGBOX + 438, // doomednum + S_INVULN_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_INVULN_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_INVULN_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_1UP_BIGBOX + 439, // doomednum + S_1UP_BIGBOX, // spawnstate + 1, // spawnhealth + S_PLAY_BOX1, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_1UP_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_1UP_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_EGGMAN_BIGBOX + 440, // doomednum + S_EGGMAN_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_EGGMAN_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_EGGMAN_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_MIXUP_BIGBOX + 441, // doomednum + S_MIXUP_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_MIXUP_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_MIXUP_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_MYSTERY_BIGBOX + 442, // doomednum + S_MYSTERY_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_MYSTERY_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_UNKNOWN, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_GRAVITY_BIGBOX + 443, // doomednum + S_GRAVITY_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_GRAVITY_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_GRAVITY_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_RECYCLER_BIGBOX + 446, // doomednum + S_RECYCLER_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_RECYCLER_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_RECYCLER_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_SCORE1K_BIGBOX + 448, // doomednum + S_SCORE1K_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_SCORE1K_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_SCORE1K_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_SCORE10K_BIGBOX + 449, // doomednum + S_SCORE10K_BIGBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_SCORE10K_BIGBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BIGBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_SCORE10K_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_RING_REDBOX + 414, // doomednum + S_RING_REDBOX1, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_RING_REDBOX1, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_REDBOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_RING_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_RING_BLUEBOX + 415, // doomednum + S_RING_BLUEBOX1, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_RING_BLUEBOX1, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BLUEBOX_POP1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_RING_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + S_NULL // raisestate + }, + + { // MT_RING_ICON -1, // doomednum - S_SUPERRINGBOX2, // spawnstate + S_RING_ICON1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_itemup, // seesound @@ -6734,9 +7108,171 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_SHOESICO + { // MT_PITY_ICON -1, // doomednum - S_SHTV2, // spawnstate + S_PITY_ICON1, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_shield, // 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 + 2*FRACUNIT, // speed + 8*FRACUNIT, // radius + 14*FRACUNIT, // height + 0, // display offset + 100, // mass + 62*FRACUNIT, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags + S_NULL // raisestate + }, + + { // MT_ATTRACT_ICON + -1, // doomednum + S_ATTRACT_ICON1, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_shield, // 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 + 2*FRACUNIT, // speed + 8*FRACUNIT, // radius + 14*FRACUNIT, // height + 0, // display offset + 100, // mass + 62*FRACUNIT, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags + S_NULL // raisestate + }, + + { // MT_FORCE_ICON + -1, // doomednum + S_FORCE_ICON1, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_shield, // 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 + 2*FRACUNIT, // speed + 8*FRACUNIT, // radius + 14*FRACUNIT, // height + 0, // display offset + 100, // mass + 62*FRACUNIT, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags + S_NULL // raisestate + }, + + { // MT_ARMAGEDDON_ICON + -1, // doomednum + S_ARMAGEDDON_ICON1, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_shield, // 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 + 2*FRACUNIT, // speed + 8*FRACUNIT, // radius + 14*FRACUNIT, // height + 0, // display offset + 100, // mass + 62*FRACUNIT, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags + S_NULL // raisestate + }, + + { // MT_WHIRLWIND_ICON + -1, // doomednum + S_WHIRLWIND_ICON1, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_shield, // 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 + 2*FRACUNIT, // speed + 8*FRACUNIT, // radius + 14*FRACUNIT, // height + 0, // display offset + 100, // mass + 62*FRACUNIT, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags + S_NULL // raisestate + }, + + { // MT_ELEMENTAL_ICON + -1, // doomednum + S_ELEMENTAL_ICON1, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_shield, // 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 + 2*FRACUNIT, // speed + 8*FRACUNIT, // radius + 14*FRACUNIT, // height + 0, // display offset + 100, // mass + 62*FRACUNIT, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags + S_NULL // raisestate + }, + + { // MT_SNEAKERS_ICON + -1, // doomednum + S_SNEAKERS_ICON1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -6761,9 +7297,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_INVCICO + { // MT_INVULN_ICON -1, // doomednum - S_PINV2, // spawnstate + S_INVULN_ICON1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -6788,9 +7324,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_1UPICO + { // MT_1UP_ICON -1, // doomednum - S_PRUP2, // spawnstate + S_1UP_ICON1, // spawnstate 1, // spawnhealth S_PLAY_ICON1, // seestate sfx_None, // seesound @@ -6815,172 +7351,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_YSHIELDICO + { // MT_EGGMAN_ICON -1, // doomednum - S_YLTV2, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_shield, // 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 - 2*FRACUNIT, // speed - 8*FRACUNIT, // radius - 14*FRACUNIT, // height - 0, // display offset - 100, // mass - 62*FRACUNIT, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags - S_NULL // raisestate - }, - - { // MT_BSHIELDICO - -1, // doomednum - S_BLTV3, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_shield, // 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 - 2*FRACUNIT, // speed - 8*FRACUNIT, // radius - 14*FRACUNIT, // height - 0, // display offset - 100, // mass - 62*FRACUNIT, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags - S_NULL // raisestate - }, - - { // MT_KSHIELDICO - -1, // doomednum - S_BKTV3, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_shield, // 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 - 2*FRACUNIT, // speed - 8*FRACUNIT, // radius - 14*FRACUNIT, // height - 0, // display offset - 100, // mass - 62*FRACUNIT, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags - S_NULL // raisestate - }, - - { // MT_WSHIELDICO - -1, // doomednum - S_WHTV3, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_shield, // 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 - 2*FRACUNIT, // speed - 8*FRACUNIT, // radius - 14*FRACUNIT, // height - 0, // display offset - 100, // mass - 62*FRACUNIT, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags - S_NULL // raisestate - }, - - { // MT_GSHIELDICO - -1, // doomednum - S_GRTV2, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_shield, // 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 - 2*FRACUNIT, // speed - 8*FRACUNIT, // radius - 14*FRACUNIT, // height - 0, // display offset - 100, // mass - 62*FRACUNIT, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags - S_NULL // raisestate - }, - - - { // MT_PITYSHIELDICO - -1, // doomednum - S_PITV3, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_shield, // 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 - 2*FRACUNIT, // speed - 8*FRACUNIT, // radius - 14*FRACUNIT, // height - 0, // display offset - 100, // mass - 62*FRACUNIT, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags - S_NULL // raisestate - }, - - { // MT_EGGMANICO - -1, // doomednum - S_EGGTV3, // spawnstate + S_EGGMAN_ICON1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -7005,9 +7378,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_MIXUPICO + { // MT_MIXUP_ICON -1, // doomednum - S_MIXUPBOX3, // spawnstate + S_MIXUP_ICON1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -7032,9 +7405,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_GRAVITYICO + { // MT_GRAVITY_ICON -1, // doomednum - S_GBTV3, // spawnstate + S_GRAVITY_ICON1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -7059,9 +7432,36 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_SCOREICOSMALL + { // MT_RECYCLER_ICON -1, // doomednum - S_SCORETVA3, // spawnstate + S_RECYCLER_ICON1, // spawnstate + 1, // 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 + 2*FRACUNIT, // speed + 8*FRACUNIT, // radius + 14*FRACUNIT, // height + 0, // display offset + 100, // mass + 62*FRACUNIT, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY|MF_BOXICON, // flags + S_NULL // raisestate + }, + + { // MT_SCORE1K_ICON + -1, // doomednum + S_SCORE1K_ICON1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_token, // seesound @@ -7086,9 +7486,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_SCOREICOLARGE + { // MT_SCORE10K_ICON -1, // doomednum - S_SCORETVB3, // spawnstate + S_SCORE10K_ICON1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_token, // seesound diff --git a/src/info.h b/src/info.h index e313526b9..d031addf5 100644 --- a/src/info.h +++ b/src/info.h @@ -28,6 +28,9 @@ void A_Explode(); void A_Pain(); void A_Fall(); void A_MonitorPop(); +void A_BigMonitorPop(); +void A_BigMonitorRestore(); +void A_BigMonitorSparkle(); void A_Look(); void A_Chase(); void A_FaceStabChase(); @@ -324,27 +327,30 @@ typedef enum sprite SPR_BMNE, // Big floating mine // Monitor Boxes - SPR_SRBX, - SPR_RRBX, - SPR_BRBX, - SPR_SHTV, - SPR_PINV, - SPR_YLTV, - SPR_BLTV, // Force shield - SPR_BKTV, // Bomb shield TV - SPR_WHTV, // Jump shield TV - SPR_GRTV, // Pity shield TV - SPR_ELTV, // Elemental shield TV - SPR_EGGB, // Eggman box - SPR_MIXU, // Player mixing monitor - SPR_RECY, // Recycler (power mixing) monitor - SPR_QUES, // Random monitor - SPR_GBTV, // Gravity boots TV - SPR_PRUP, // 1up - SPR_PTTV, // Score TVs + SPR_MSTV, // MiSc TV sprites + SPR_XLTV, // eXtra Large TV sprites - // Monitor Miscellany - SPR_MTEX, // Exploding monitor + SPR_TRRI, // Red team: 10 RIngs + SPR_TBRI, // Blue team: 10 RIngs + + SPR_TVRI, // 10 RIng + SPR_TVPI, // PIty shield + SPR_TVAT, // ATtraction shield + SPR_TVFO, // FOrce shield + SPR_TVAR, // ARmageddon shield + SPR_TVWW, // WhirlWind shield + SPR_TVEL, // ELemental shield + SPR_TVSS, // Super Sneakers + SPR_TVIV, // InVincibility + SPR_TV1U, // 1Up + SPR_TV1P, // 1uP (textless) + SPR_TVEG, // EGgman + SPR_TVMX, // MiXup + SPR_TVMY, // MYstery + SPR_TVGV, // GraVity boots + SPR_TVRC, // ReCycler + SPR_TV1K, // 1,000 points (1 K) + SPR_TVTK, // 10,000 points (Ten K) // Projectiles SPR_MISL, @@ -1750,170 +1756,171 @@ typedef enum state S_CANNONLAUNCHER2, S_CANNONLAUNCHER3, - // Super Ring Box - S_SUPERRINGBOX, - S_SUPERRINGBOX1, - S_SUPERRINGBOX2, - S_SUPERRINGBOX3, - S_SUPERRINGBOX4, - S_SUPERRINGBOX5, - S_SUPERRINGBOX6, + // Monitor Miscellany + S_BOXSPARKLE1, + S_BOXSPARKLE2, + S_BOXSPARKLE3, - // Red Team Ring Box - S_REDRINGBOX, - S_REDRINGBOX1, + S_BOX_FLICKER, + S_BOX_POP1, + S_BOX_POP2, - // Blue Team Ring Box - S_BLUERINGBOX, - S_BLUERINGBOX1, + S_BIGBOX_FLICKER, + S_BIGBOX_OFF1, + S_BIGBOX_OFF2, + S_BIGBOX_OFF3, + S_BIGBOX_OFF4, + S_BIGBOX_OFF5, + S_BIGBOX_OFF6, + S_BIGBOX_OFF7, - // Super Sneakers Box - S_SHTV, - S_SHTV1, - S_SHTV2, - S_SHTV3, - S_SHTV4, - S_SHTV5, - S_SHTV6, + // Monitor States (one per box) + S_MYSTERY_BOX, + S_RING_BOX, + S_PITY_BOX, + S_ATTRACT_BOX, + S_FORCE_BOX, + S_ARMAGEDDON_BOX, + S_WHIRLWIND_BOX, + S_ELEMENTAL_BOX, + S_SNEAKERS_BOX, + S_INVULN_BOX, + S_1UP_BOX, + S_EGGMAN_BOX, + S_MIXUP_BOX, + S_GRAVITY_BOX, + S_RECYCLER_BOX, + S_SCORE1K_BOX, + S_SCORE10K_BOX, - // Invincibility Box - S_PINV, - S_PINV1, - S_PINV2, - S_PINV3, - S_PINV4, - S_PINV5, - S_PINV6, + // Repeat Monitor States (one per box) + S_MYSTERY_BIGBOX, + S_RING_BIGBOX, + S_PITY_BIGBOX, + S_ATTRACT_BIGBOX, + S_FORCE_BIGBOX, + S_ARMAGEDDON_BIGBOX, + S_WHIRLWIND_BIGBOX, + S_ELEMENTAL_BIGBOX, + S_SNEAKERS_BIGBOX, + S_INVULN_BIGBOX, + S_1UP_BIGBOX, + S_EGGMAN_BIGBOX, + S_MIXUP_BIGBOX, + S_GRAVITY_BIGBOX, + S_RECYCLER_BIGBOX, + S_SCORE1K_BIGBOX, + S_SCORE10K_BIGBOX, - // 1up Box - S_PRUP, - S_PRUP1, - S_PRUP2, - S_PRUP3, - S_PRUP4, - S_PRUP5, - S_PRUP6, + // Team Ring Boxes (these are special) + S_RING_REDBOX1, + S_RING_REDBOX2, + S_REDBOX_POP1, + S_REDBOX_POP2, - // Ring Shield Box - S_YLTV, - S_YLTV1, - S_YLTV2, - S_YLTV3, - S_YLTV4, - S_YLTV5, - S_YLTV6, + S_RING_BLUEBOX1, + S_RING_BLUEBOX2, + S_BLUEBOX_POP1, + S_BLUEBOX_POP2, - // Force Shield Box - S_BLTV1, - S_BLTV2, - S_BLTV3, - S_BLTV4, - S_BLTV5, - S_BLTV6, - S_BLTV7, + // Box Icons -- 5 states each, one for each part of the twirl + S_RING_ICON1, + S_RING_ICON2, + S_RING_ICON3, + S_RING_ICON4, + S_RING_ICON5, - // Bomb Shield Box - S_BKTV1, - S_BKTV2, - S_BKTV3, - S_BKTV4, - S_BKTV5, - S_BKTV6, - S_BKTV7, + S_PITY_ICON1, + S_PITY_ICON2, + S_PITY_ICON3, + S_PITY_ICON4, + S_PITY_ICON5, - // Jump Shield Box - S_WHTV1, - S_WHTV2, - S_WHTV3, - S_WHTV4, - S_WHTV5, - S_WHTV6, - S_WHTV7, + S_ATTRACT_ICON1, + S_ATTRACT_ICON2, + S_ATTRACT_ICON3, + S_ATTRACT_ICON4, + S_ATTRACT_ICON5, - // Water Shield Box - S_GRTV, - S_GRTV1, - S_GRTV2, - S_GRTV3, - S_GRTV4, - S_GRTV5, - S_GRTV6, + S_FORCE_ICON1, + S_FORCE_ICON2, + S_FORCE_ICON3, + S_FORCE_ICON4, + S_FORCE_ICON5, - // Pity Shield Box - S_PITV1, - S_PITV2, - S_PITV3, - S_PITV4, - S_PITV5, - S_PITV6, - S_PITV7, + S_ARMAGEDDON_ICON1, + S_ARMAGEDDON_ICON2, + S_ARMAGEDDON_ICON3, + S_ARMAGEDDON_ICON4, + S_ARMAGEDDON_ICON5, - // Eggman Box - S_EGGTV1, - S_EGGTV2, - S_EGGTV3, - S_EGGTV4, - S_EGGTV5, - S_EGGTV6, - S_EGGTV7, + S_WHIRLWIND_ICON1, + S_WHIRLWIND_ICON2, + S_WHIRLWIND_ICON3, + S_WHIRLWIND_ICON4, + S_WHIRLWIND_ICON5, - // Teleport Box - S_MIXUPBOX1, - S_MIXUPBOX2, - S_MIXUPBOX3, - S_MIXUPBOX4, - S_MIXUPBOX5, - S_MIXUPBOX6, - S_MIXUPBOX7, + S_ELEMENTAL_ICON1, + S_ELEMENTAL_ICON2, + S_ELEMENTAL_ICON3, + S_ELEMENTAL_ICON4, + S_ELEMENTAL_ICON5, - // Recycler Box - S_RECYCLETV1, - S_RECYCLETV2, - S_RECYCLETV3, - S_RECYCLETV4, - S_RECYCLETV5, - S_RECYCLETV6, - S_RECYCLETV7, + S_SNEAKERS_ICON1, + S_SNEAKERS_ICON2, + S_SNEAKERS_ICON3, + S_SNEAKERS_ICON4, + S_SNEAKERS_ICON5, - // Question Box - S_RANDOMBOX1, - S_RANDOMBOX2, - S_RANDOMBOX3, + S_INVULN_ICON1, + S_INVULN_ICON2, + S_INVULN_ICON3, + S_INVULN_ICON4, + S_INVULN_ICON5, - // Gravity Boots Box - S_GBTV1, - S_GBTV2, - S_GBTV3, - S_GBTV4, - S_GBTV5, - S_GBTV6, - S_GBTV7, + S_1UP_ICON1, + S_1UP_ICON2, + S_1UP_ICON3, + S_1UP_ICON4, + S_1UP_ICON5, - // Score boxes - S_SCORETVA1, - S_SCORETVA2, - S_SCORETVA3, - S_SCORETVA4, - S_SCORETVA5, - S_SCORETVA6, - S_SCORETVA7, - S_SCORETVB1, - S_SCORETVB2, - S_SCORETVB3, - S_SCORETVB4, - S_SCORETVB5, - S_SCORETVB6, - S_SCORETVB7, + S_EGGMAN_ICON1, + S_EGGMAN_ICON2, + S_EGGMAN_ICON3, + S_EGGMAN_ICON4, + S_EGGMAN_ICON5, - // Monitor Explosion - S_MONITOREXPLOSION1, - S_MONITOREXPLOSION2, + S_MIXUP_ICON1, + S_MIXUP_ICON2, + S_MIXUP_ICON3, + S_MIXUP_ICON4, + S_MIXUP_ICON5, - S_REDMONITOREXPLOSION1, - S_REDMONITOREXPLOSION2, + S_GRAVITY_ICON1, + S_GRAVITY_ICON2, + S_GRAVITY_ICON3, + S_GRAVITY_ICON4, + S_GRAVITY_ICON5, - S_BLUEMONITOREXPLOSION1, - S_BLUEMONITOREXPLOSION2, + S_RECYCLER_ICON1, + S_RECYCLER_ICON2, + S_RECYCLER_ICON3, + S_RECYCLER_ICON4, + S_RECYCLER_ICON5, + + S_SCORE1K_ICON1, + S_SCORE1K_ICON2, + S_SCORE1K_ICON3, + S_SCORE1K_ICON4, + S_SCORE1K_ICON5, + + S_SCORE10K_ICON1, + S_SCORE10K_ICON2, + S_SCORE10K_ICON3, + S_SCORE10K_ICON4, + S_SCORE10K_ICON5, + + // --- S_ROCKET, @@ -3673,47 +3680,68 @@ typedef enum mobj_type MT_BIGAIRMINE, MT_CANNONLAUNCHER, - // Monitor Boxes - MT_SUPERRINGBOX, - MT_REDRINGBOX, - MT_BLUERINGBOX, - MT_SNEAKERTV, - MT_INV, - MT_PRUP, // 1up Box - MT_YELLOWTV, - MT_BLUETV, - MT_BLACKTV, // Bomb shield TV - MT_WHITETV, // Jump shield TV - MT_GREENTV, - MT_PITYTV, // Pity Shield TV - MT_EGGMANBOX, - MT_MIXUPBOX, - MT_RECYCLETV, - MT_RECYCLEICO, - MT_QUESTIONBOX, - MT_GRAVITYBOX, - MT_SCORETVSMALL, - MT_SCORETVLARGE, - // Monitor miscellany - MT_MONITOREXPLOSION, - MT_REDMONITOREXPLOSION, - MT_BLUEMONITOREXPLOSION, - MT_RINGICO, - MT_SHOESICO, - MT_INVCICO, - MT_1UPICO, - MT_YSHIELDICO, - MT_BSHIELDICO, - MT_KSHIELDICO, - MT_WSHIELDICO, - MT_GSHIELDICO, - MT_PITYSHIELDICO, - MT_EGGMANICO, - MT_MIXUPICO, - MT_GRAVITYICO, - MT_SCOREICOSMALL, - MT_SCOREICOLARGE, + MT_BOXSPARKLE, + + // Monitor boxes -- regular + MT_RING_BOX, + MT_PITY_BOX, + MT_ATTRACT_BOX, + MT_FORCE_BOX, + MT_ARMAGEDDON_BOX, + MT_WHIRLWIND_BOX, + MT_ELEMENTAL_BOX, + MT_SNEAKERS_BOX, + MT_INVULN_BOX, + MT_1UP_BOX, + MT_EGGMAN_BOX, + MT_MIXUP_BOX, + MT_MYSTERY_BOX, + MT_GRAVITY_BOX, + MT_RECYCLER_BOX, + MT_SCORE1K_BOX, + MT_SCORE10K_BOX, + + // Monitor boxes -- repeating (big) boxes + MT_RING_BIGBOX, + MT_PITY_BIGBOX, + MT_ATTRACT_BIGBOX, + MT_FORCE_BIGBOX, + MT_ARMAGEDDON_BIGBOX, + MT_WHIRLWIND_BIGBOX, + MT_ELEMENTAL_BIGBOX, + MT_SNEAKERS_BIGBOX, + MT_INVULN_BIGBOX, + MT_1UP_BIGBOX, + MT_EGGMAN_BIGBOX, + MT_MIXUP_BIGBOX, + MT_MYSTERY_BIGBOX, + MT_GRAVITY_BIGBOX, + MT_RECYCLER_BIGBOX, + MT_SCORE1K_BIGBOX, + MT_SCORE10K_BIGBOX, + + // Monitor boxes -- special + MT_RING_REDBOX, + MT_RING_BLUEBOX, + + // Monitor icons + MT_RING_ICON, + MT_PITY_ICON, + MT_ATTRACT_ICON, + MT_FORCE_ICON, + MT_ARMAGEDDON_ICON, + MT_WHIRLWIND_ICON, + MT_ELEMENTAL_ICON, + MT_SNEAKERS_ICON, + MT_INVULN_ICON, + MT_1UP_ICON, + MT_EGGMAN_ICON, + MT_MIXUP_ICON, + MT_GRAVITY_ICON, + MT_RECYCLER_ICON, + MT_SCORE1K_ICON, + MT_SCORE10K_ICON, // Projectiles MT_ROCKET, diff --git a/src/p_enemy.c b/src/p_enemy.c index d5da92e38..d050972db 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -818,6 +818,32 @@ static int P_RecycleCompare(const void *p1, const void *p2) } #endif +// Handles random monitor weights via console. +static mobjtype_t P_DoRandomBoxChances(void) +{ + mobjtype_t spawnchance[256]; + INT32 numchoices = 0, i = 0; + +#define QUESTIONBOXCHANCES(type, cvar) \ +for (i = cvar.value; i; --i) spawnchance[numchoices++] = type + QUESTIONBOXCHANCES(MT_RING_ICON, cv_superring); + QUESTIONBOXCHANCES(MT_SNEAKERS_ICON, cv_supersneakers); + QUESTIONBOXCHANCES(MT_INVULN_ICON, cv_invincibility); + QUESTIONBOXCHANCES(MT_WHIRLWIND_ICON, cv_jumpshield); + QUESTIONBOXCHANCES(MT_ELEMENTAL_ICON, cv_watershield); + QUESTIONBOXCHANCES(MT_ATTRACT_ICON, cv_ringshield); + QUESTIONBOXCHANCES(MT_FORCE_ICON, cv_forceshield); + QUESTIONBOXCHANCES(MT_ARMAGEDDON_ICON, cv_bombshield); + QUESTIONBOXCHANCES(MT_1UP_ICON, cv_1up); + QUESTIONBOXCHANCES(MT_EGGMAN_ICON, cv_eggmanbox); + QUESTIONBOXCHANCES(MT_MIXUP_ICON, cv_teleporters); + QUESTIONBOXCHANCES(MT_RECYCLER_ICON, cv_recycler); +#undef QUESTIONBOXCHANCES + + if (numchoices == 0) return MT_NULL; + return spawnchance[P_RandomKey(numchoices)]; +} + // // ACTION ROUTINES // @@ -2515,7 +2541,7 @@ void A_1upThinker(mobj_t *actor) if (closestplayer == -1 || skins[players[closestplayer].skin].sprites[SPR2_LIFE].numframes == 0) { // Closest player not found (no players in game?? may be empty dedicated server!), or does not have correct sprite. - actor->frame = 0; + actor->sprite = SPR_TV1U; if (actor->tracer) { P_RemoveMobj(actor->tracer); actor->tracer = NULL; @@ -2543,139 +2569,194 @@ void A_1upThinker(mobj_t *actor) // void A_MonitorPop(mobj_t *actor) { - mobj_t *remains; - mobjtype_t explode; mobjtype_t item = 0; - mobjtype_t newbox; + mobj_t *newmobj; #ifdef HAVE_BLUA if (LUA_CallAction("A_MonitorPop", actor)) return; #endif - // de-solidify + // Spawn the "pop" explosion. + if (actor->info->deathsound) + S_StartSound(actor, actor->info->deathsound); + P_SpawnMobjFromMobj(actor, 0, 0, actor->height/4, MT_EXPLODE); + + // We're dead now. De-solidify. actor->health = 0; P_UnsetThingPosition(actor); actor->flags &= ~MF_SOLID; actor->flags |= MF_NOCLIP; P_SetThingPosition(actor); - // Monitor explosion - explode = mobjinfo[actor->info->speed].mass; - remains = P_SpawnMobj(actor->x, actor->y, - ((actor->eflags & MFE_VERTICALFLIP) ? (actor->z + 3*(actor->height/4) - FixedMul(mobjinfo[explode].height, actor->scale)) : (actor->z + actor->height/4)), explode); - if (actor->eflags & MFE_VERTICALFLIP) + if (actor->info->damage == MT_UNKNOWN) { - remains->eflags |= MFE_VERTICALFLIP; - remains->flags2 |= MF2_OBJECTFLIP; - } - remains->destscale = actor->destscale; - P_SetScale(remains, actor->scale); + // MT_UNKNOWN is random. Because it's unknown to us... get it? + item = P_DoRandomBoxChances(); - remains = P_SpawnMobj(actor->x, actor->y, - ((actor->eflags & MFE_VERTICALFLIP) ? (actor->z + actor->height - FixedMul(mobjinfo[actor->info->speed].height, actor->scale)) : actor->z), - actor->info->speed); - remains->type = actor->type; // Transfer type information - P_UnsetThingPosition(remains); - if (sector_list) - { - P_DelSeclist(sector_list); - sector_list = NULL; - } - P_SetThingPosition(remains); - remains->destscale = actor->destscale; - P_SetScale(remains, actor->scale); - remains->flags = actor->flags; // Transfer flags - remains->flags2 = actor->flags2; // Transfer flags2 - remains->fuse = actor->fuse; // Transfer respawn timer - remains->threshold = 68; - remains->skin = NULL; - - P_SetTarget(&tmthing, remains); - - if (actor->info->deathsound) - S_StartSound(remains, actor->info->deathsound); - - switch (actor->type) - { - case MT_QUESTIONBOX: // Random! + if (item == MT_NULL) { - mobjtype_t spawnchance[256]; - INT32 numchoices = 0, i = 0; - -#define QUESTIONBOXCHANCES(type, cvar) \ -for (i = cvar.value; i; --i) spawnchance[numchoices++] = type - - QUESTIONBOXCHANCES(MT_SUPERRINGBOX, cv_superring); - QUESTIONBOXCHANCES(MT_SNEAKERTV, cv_supersneakers); - QUESTIONBOXCHANCES(MT_INV, cv_invincibility); - QUESTIONBOXCHANCES(MT_WHITETV, cv_jumpshield); - QUESTIONBOXCHANCES(MT_GREENTV, cv_watershield); - QUESTIONBOXCHANCES(MT_YELLOWTV, cv_ringshield); - QUESTIONBOXCHANCES(MT_BLUETV, cv_forceshield); - QUESTIONBOXCHANCES(MT_BLACKTV, cv_bombshield); - QUESTIONBOXCHANCES(MT_PRUP, cv_1up); - QUESTIONBOXCHANCES(MT_EGGMANBOX, cv_eggmanbox); - QUESTIONBOXCHANCES(MT_MIXUPBOX, cv_teleporters); - QUESTIONBOXCHANCES(MT_RECYCLETV, cv_recycler); - -#undef QUESTIONBOXCHANCES - - if (numchoices == 0) - { - CONS_Alert(CONS_WARNING, M_GetText("All monitors turned off.\n")); - return; - } - - newbox = spawnchance[P_RandomKey(numchoices)]; - item = mobjinfo[newbox].damage; - - remains->flags &= ~MF_AMBUSH; - break; - } - default: - item = actor->info->damage; - break; - } - - if (item != 0) - { - mobj_t *newmobj; - - if (actor->eflags & MFE_VERTICALFLIP) - { - newmobj = P_SpawnMobj(actor->x, actor->y, actor->z + actor->height - FixedMul(13*FRACUNIT + mobjinfo[item].height, actor->scale), item); - newmobj->eflags |= MFE_VERTICALFLIP; - } - else - newmobj = P_SpawnMobj(actor->x, actor->y, actor->z + FixedMul(13*FRACUNIT, actor->scale), item); - - newmobj->destscale = actor->destscale; - P_SetScale(newmobj, actor->scale); - P_SetTarget(&newmobj->target, actor->target); // Transfer target - if (item == MT_1UPICO && newmobj->target->player) - { - if (actor->tracer) // Remove the old lives icon. - P_RemoveMobj(actor->tracer); - - if (!newmobj->target->skin || ((skin_t *)newmobj->target->skin)->sprites[SPR2_LIFE].numframes == 0) - newmobj->frame -= 2; // No lives icon for this player, use the default. - else - { // Spawn the lives icon. - remains = P_SpawnMobj(newmobj->x, newmobj->y, newmobj->z, MT_OVERLAY); - P_SetTarget(&remains->target, newmobj); - P_SetTarget(&newmobj->tracer, remains); - - remains->color = newmobj->target->player->mo->color; - remains->skin = &skins[newmobj->target->player->skin]; - P_SetMobjState(remains, newmobj->info->seestate); - } + CONS_Alert(CONS_WARNING, M_GetText("All monitors turned off.\n")); + return; } } else - CONS_Debug(DBG_GAMELOGIC, "Powerup item not defined in 'damage' field for A_MonitorPop\n"); + item = actor->info->damage; - P_RemoveMobj(actor); + if (item == 0) + { + CONS_Debug(DBG_GAMELOGIC, "Powerup item not defined in 'damage' field for A_MonitorPop\n"); + return; + } + + newmobj = P_SpawnMobjFromMobj(actor, 0, 0, 13*FRACUNIT, item); + P_SetTarget(&newmobj->target, actor->target); // Transfer target + + if (item == MT_1UP_ICON) + { + if (actor->tracer) // Remove the old lives icon. + P_RemoveMobj(actor->tracer); + + if (!newmobj->target + || !newmobj->target->player + || !newmobj->target->skin + || ((skin_t *)newmobj->target->skin)->sprites[SPR2_LIFE].numframes == 0) + newmobj->sprite = SPR_TV1U; // No lives icon for this player, use the default. + else + { // Spawn the lives icon. + mobj_t *livesico = P_SpawnMobjFromMobj(newmobj, 0, 0, 0, MT_OVERLAY); + P_SetTarget(&livesico->target, newmobj); + P_SetTarget(&newmobj->tracer, livesico); + + livesico->color = newmobj->target->player->mo->color; + livesico->skin = &skins[newmobj->target->player->skin]; + P_SetMobjState(livesico, newmobj->info->seestate); + } + } +} + +// Function: A_BigMonitorPop +// +// Description: Used by repeating monitors when they turn off. They don't really pop, but, you know... +// +// var1 = unused +// var2 = unused +// +void A_BigMonitorPop(mobj_t *actor) +{ + mobjtype_t item = 0; + mobj_t *newmobj; + +#ifdef HAVE_BLUA + if (LUA_CallAction("A_BigMonitorPop", actor)) + return; +#endif + + // Don't spawn the "pop" explosion, because the monitor isn't broken. + if (actor->info->deathsound) + S_StartSound(actor, actor->info->deathsound); + //P_SpawnMobjFromMobj(actor, 0, 0, actor.height/4, MT_EXPLODE); + + // Remove our flags for a bit. + // Players can now stand on top of us. + P_UnsetThingPosition(actor); + actor->flags &= ~(MF_MONITOR|MF_SHOOTABLE); + actor->flags2 |= MF2_STANDONME; + P_SetThingPosition(actor); + + // Don't count this box in statistics. Sorry. + if (actor->target && actor->target->player) + --actor->target->player->numboxes; + actor->fuse = 0; // Don't let the monitor code screw us up. + + if (actor->info->damage == MT_UNKNOWN) + { + // MT_UNKNOWN is random. Because it's unknown to us... get it? + item = P_DoRandomBoxChances(); + + if (item == MT_NULL) + { + CONS_Alert(CONS_WARNING, M_GetText("All monitors turned off.\n")); + return; + } + } + else + item = actor->info->damage; + + if (item == 0) + { + CONS_Debug(DBG_GAMELOGIC, "Powerup item not defined in 'damage' field for A_BigMonitorPop\n"); + return; + } + + // Note: the icon spawns 1 fracunit higher + newmobj = P_SpawnMobjFromMobj(actor, 0, 0, 14*FRACUNIT, item); + P_SetTarget(&newmobj->target, actor->target); // Transfer target + + if (item == MT_1UP_ICON) + { + if (actor->tracer) // Remove the old lives icon. + P_RemoveMobj(actor->tracer); + + if (!newmobj->target + || !newmobj->target->player + || !newmobj->target->skin + || ((skin_t *)newmobj->target->skin)->sprites[SPR2_LIFE].numframes == 0) + newmobj->sprite = SPR_TV1U; // No lives icon for this player, use the default. + else + { // Spawn the lives icon. + mobj_t *livesico = P_SpawnMobjFromMobj(newmobj, 0, 0, 0, MT_OVERLAY); + P_SetTarget(&livesico->target, newmobj); + P_SetTarget(&newmobj->tracer, livesico); + + livesico->color = newmobj->target->player->mo->color; + livesico->skin = &skins[newmobj->target->player->skin]; + P_SetMobjState(livesico, newmobj->info->seestate); + } + } +} + +// Function: A_BigMonitorRestore +// +// Description: A repeating monitor is coming back to life. Reset monitor flags, etc. +// +// var1 = unused +// var2 = unused +// +void A_BigMonitorRestore(mobj_t *actor) +{ +#ifdef HAVE_BLUA + if (LUA_CallAction("A_BigMonitorRestore", actor)) + return; +#endif + + actor->flags |= MF_MONITOR|MF_SHOOTABLE; + actor->flags2 &= ~MF2_STANDONME; + actor->health = 1; // Just in case. +} + +// Function: A_BigMonitorSparkle +// +// Description: Spawns the little sparkly effect around big monitors. Looks pretty, doesn't it? +// +// var1 = unused +// var2 = unused +// +void A_BigMonitorSparkle(mobj_t *actor) +{ + fixed_t i, ngangle, xofs, yofs; + +#ifdef HAVE_BLUA + if (LUA_CallAction("A_BigMonitorSparkle", actor)) + return; +#endif + + ngangle = FixedAngle(((leveltime * 21) % 360) << FRACBITS); + xofs = FINESINE((ngangle>>ANGLETOFINESHIFT) & FINEMASK) * (actor->radius>>FRACBITS); + yofs = FINECOSINE((ngangle>>ANGLETOFINESHIFT) & FINEMASK) * (actor->radius>>FRACBITS); + + for (i = FRACUNIT*2; i <= FRACUNIT*3; i += FRACUNIT/2) + P_SetObjectMomZ(P_SpawnMobjFromMobj(actor, xofs, yofs, 0, MT_BOXSPARKLE), i, false); } // Function: A_Explode @@ -3160,8 +3241,8 @@ void A_ExtraLife(mobj_t *actor) player = actor->target->player; - if (actor->type == MT_1UPICO && !actor->tracer) - actor->frame -= 2; // No lives icon for this player, use the default. + if (actor->type == MT_1UP_ICON && !actor->tracer) + actor->sprite = SPR_TV1U; // No lives icon for this player, use the default. if (ultimatemode) //I don't THINK so! { diff --git a/src/p_inter.c b/src/p_inter.c index f9dc3c342..9634e0744 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -1568,8 +1568,7 @@ static void P_HitDeathMessages(player_t *player, mobj_t *inflictor, mobj_t *sour } else switch (source->type) { - case MT_EGGMANICO: - case MT_EGGMANBOX: + case MT_EGGMAN_ICON: str = M_GetText("%s was %s by Eggman's nefarious TV magic.\n"); break; case MT_SPIKE: @@ -2766,10 +2765,10 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da if (!force) { // Special case for team ring boxes - if (target->type == MT_REDRINGBOX && !(source->player->ctfteam == 1)) + if (target->type == MT_RING_REDBOX && !(source->player->ctfteam == 1)) return false; - if (target->type == MT_BLUERINGBOX && !(source->player->ctfteam == 2)) + if (target->type == MT_RING_BLUEBOX && !(source->player->ctfteam == 2)) return false; } diff --git a/src/p_local.h b/src/p_local.h index 498bf0828..2f00b1d0b 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -238,6 +238,8 @@ boolean P_InsideANonSolidFFloor(mobj_t *mobj, ffloor_t *rover); boolean P_CheckDeathPitCollide(mobj_t *mo); boolean P_CheckSolidLava(mobj_t *mo, ffloor_t *rover); +mobj_t *P_SpawnMobjFromMobj(mobj_t *mobj, fixed_t xofs, fixed_t yofs, fixed_t zofs, mobjtype_t type); + mobj_t *P_SpawnMissile(mobj_t *source, mobj_t *dest, mobjtype_t type); mobj_t *P_SpawnXYZMissile(mobj_t *source, mobj_t *dest, mobjtype_t type, fixed_t x, fixed_t y, fixed_t z); mobj_t *P_SpawnPointMissile(mobj_t *source, fixed_t xa, fixed_t ya, fixed_t za, mobjtype_t type, fixed_t x, fixed_t y, fixed_t z); diff --git a/src/p_map.c b/src/p_map.c index 214048fb3..faa3d44c9 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -955,7 +955,7 @@ static boolean PIT_CheckThing(mobj_t *thing) // Monitors are not treated as solid to players who are jumping, spinning or gliding, // unless it's a CTF team monitor and you're on the wrong team else if (thing->flags & MF_MONITOR && tmthing->player && tmthing->player->pflags & (PF_JUMPED|PF_SPINNING|PF_GLIDING) - && !((thing->type == MT_REDRINGBOX && tmthing->player->ctfteam != 1) || (thing->type == MT_BLUERINGBOX && tmthing->player->ctfteam != 2))) + && !((thing->type == MT_RING_REDBOX && tmthing->player->ctfteam != 1) || (thing->type == MT_RING_BLUEBOX && tmthing->player->ctfteam != 2))) ; // z checking at last // Treat noclip things as non-solid! diff --git a/src/p_mobj.c b/src/p_mobj.c index 915c742e8..86ddee029 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7258,9 +7258,60 @@ void P_MobjThinker(mobj_t *mobj) mobj_t *flagmo, *newmobj; #ifdef HAVE_BLUA - if (!LUAh_MobjFuse(mobj) && !P_MobjWasRemoved(mobj)) + if (LUAh_MobjFuse(mobj) || P_MobjWasRemoved(mobj)) + ; + else #endif - switch (mobj->type) + if (mobj->info->flags & MF_MONITOR) + { + // Special case for ALL monitors. + // If a box's speed is nonzero, it's allowed to respawn as a WRM/SRM. + if (mobj->info->speed != 0 && (mobj->flags & MF_AMBUSH || mobj->flags2 & MF2_STRONGBOX)) + { + mobjtype_t spawnchance[64]; + INT32 numchoices = 0, i = 0; + +// This define should make it a lot easier to organize and change monitor weights +#define SETMONITORCHANCES(type, strongboxamt, weakboxamt) \ +for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) spawnchance[numchoices++] = type + + // Type SRM WRM + SETMONITORCHANCES(MT_SNEAKERS_BOX, 0, 10); // Super Sneakers + SETMONITORCHANCES(MT_INVULN_BOX, 2, 0); // Invincibility + SETMONITORCHANCES(MT_WHIRLWIND_BOX, 3, 8); // Whirlwind Shield + SETMONITORCHANCES(MT_ELEMENTAL_BOX, 3, 8); // Elemental Shield + SETMONITORCHANCES(MT_ATTRACT_BOX, 2, 0); // Attraction Shield + SETMONITORCHANCES(MT_FORCE_BOX, 3, 3); // Force Shield + SETMONITORCHANCES(MT_ARMAGEDDON_BOX, 2, 0); // Armageddon Shield + SETMONITORCHANCES(MT_MIXUP_BOX, 0, 1); // Teleporters + SETMONITORCHANCES(MT_RECYCLER_BOX, 0, 1); // Recycler + SETMONITORCHANCES(MT_1UP_BOX, 1, 1); // 1-Up + // ======================================= + // Total 16 32 + +#undef SETMONITORCHANCES + + i = P_RandomKey(numchoices); // Gotta love those random numbers! + newmobj = P_SpawnMobj(mobj->x, mobj->y, mobj->z, spawnchance[i]); + + // If the monitor respawns randomly, transfer the flag. + if (mobj->flags & MF_AMBUSH) + newmobj->flags |= MF_AMBUSH; + + // Transfer flags2 (strongbox, objectflip) + newmobj->flags2 = mobj->flags2; + } + else + { + newmobj = P_SpawnMobj(mobj->x, mobj->y, mobj->z, mobj->type); + + // Transfer flags2 (strongbox, objectflip) + newmobj->flags2 = mobj->flags2; + } + P_RemoveMobj(mobj); // make sure they disappear + return; + } + else switch (mobj->type) { // gargoyle and snowman handled in P_PushableThinker, not here case MT_THROWNGRENADE: @@ -7317,68 +7368,6 @@ void P_MobjThinker(mobj_t *mobj) } P_RemoveMobj(mobj); return; - case MT_YELLOWTV: // Ring shield box - case MT_BLUETV: // Force shield box - case MT_GREENTV: // Water shield box - case MT_BLACKTV: // Bomb shield box - case MT_WHITETV: // Jump shield box - case MT_SNEAKERTV: // Super Sneaker box - case MT_SUPERRINGBOX: // 10-Ring box - case MT_REDRINGBOX: // Red Team 10-Ring box - case MT_BLUERINGBOX: // Blue Team 10-Ring box - case MT_INV: // Invincibility box - case MT_MIXUPBOX: // Teleporter Mixup box - case MT_RECYCLETV: // Recycler box - case MT_SCORETVSMALL: - case MT_SCORETVLARGE: - case MT_PRUP: // 1up! - case MT_EGGMANBOX: // Eggman box - case MT_GRAVITYBOX: // Gravity box - case MT_QUESTIONBOX: - if ((mobj->flags & MF_AMBUSH || mobj->flags2 & MF2_STRONGBOX) && mobj->type != MT_QUESTIONBOX) - { - mobjtype_t spawnchance[64]; - INT32 numchoices = 0, i = 0; - -// This define should make it a lot easier to organize and change monitor weights -#define SETMONITORCHANCES(type, strongboxamt, weakboxamt) \ -for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) spawnchance[numchoices++] = type - - // Type SRM WRM - SETMONITORCHANCES(MT_SNEAKERTV, 0, 10); // Super Sneakers - SETMONITORCHANCES(MT_INV, 2, 0); // Invincibility - SETMONITORCHANCES(MT_WHITETV, 3, 8); // Whirlwind Shield - SETMONITORCHANCES(MT_GREENTV, 3, 8); // Elemental Shield - SETMONITORCHANCES(MT_YELLOWTV, 2, 0); // Attraction Shield - SETMONITORCHANCES(MT_BLUETV, 3, 3); // Force Shield - SETMONITORCHANCES(MT_BLACKTV, 2, 0); // Armageddon Shield - SETMONITORCHANCES(MT_MIXUPBOX, 0, 1); // Teleporters - SETMONITORCHANCES(MT_RECYCLETV, 0, 1); // Recycler - SETMONITORCHANCES(MT_PRUP, 1, 1); // 1-Up - // ====================================== - // Total 16 32 - -#undef SETMONITORCHANCES - - i = P_RandomKey(numchoices); // Gotta love those random numbers! - newmobj = P_SpawnMobj(mobj->x, mobj->y, mobj->z, spawnchance[i]); - - // If the monitor respawns randomly, transfer the flag. - if (mobj->flags & MF_AMBUSH) - newmobj->flags |= MF_AMBUSH; - - // Transfer flags2 (strongbox, objectflip) - newmobj->flags2 = mobj->flags2; - } - else - { - newmobj = P_SpawnMobj(mobj->x, mobj->y, mobj->z, mobj->type); - - // Transfer flags2 (strongbox, objectflip) - newmobj->flags2 = mobj->flags2; - } - P_RemoveMobj(mobj); // make sure they disappear - return; case MT_METALSONIC_BATTLE: break; // don't remove case MT_SPIKE: @@ -7395,6 +7384,7 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s default: P_SetMobjState(mobj, mobj->info->xdeathstate); // will remove the mobj if S_NULL. break; + // Looking for monitors? They moved to a special condition above. } if (P_MobjWasRemoved(mobj)) return; @@ -8805,9 +8795,9 @@ void P_SpawnMapThing(mapthing_t *mthing) if ((mobjinfo[i].flags & MF_MONITOR) && cv_competitionboxes.value) // not Normal { if (cv_competitionboxes.value == 1) // Random - i = MT_QUESTIONBOX; + i = MT_MYSTERY_BOX; else if (cv_competitionboxes.value == 2) // Teleports - i = MT_MIXUPBOX; + i = MT_MIXUP_BOX; else if (cv_competitionboxes.value == 3) // None return; // Don't spawn! } @@ -8819,12 +8809,12 @@ void P_SpawnMapThing(mapthing_t *mthing) if ((mobjinfo[i].flags & MF_MONITOR) && cv_matchboxes.value) // not Normal { if (cv_matchboxes.value == 1) // Random - i = MT_QUESTIONBOX; + i = MT_MYSTERY_BOX; else if (cv_matchboxes.value == 3) // Don't spawn return; else // cv_matchboxes.value == 2, Non-Random { - if (i == MT_QUESTIONBOX) + if (i == MT_MYSTERY_BOX) return; // don't spawn in Non-Random mthing->options &= ~(MTF_AMBUSH|MTF_OBJECTSPECIAL); // no random respawning! @@ -8836,8 +8826,8 @@ void P_SpawnMapThing(mapthing_t *mthing) { if (i == MT_BLUETEAMRING || i == MT_REDTEAMRING) i = MT_RING; - else if (i == MT_BLUERINGBOX || i == MT_REDRINGBOX) - i = MT_SUPERRINGBOX; + else if (i == MT_RING_BLUEBOX || i == MT_RING_REDBOX) + i = MT_RING_BOX; else if (i == MT_BLUEFLAG || i == MT_REDFLAG) return; // No flags in non-CTF modes! } @@ -8864,23 +8854,27 @@ void P_SpawnMapThing(mapthing_t *mthing) return; /// \todo // 1UPs -->> Score TVs - else if (i == MT_PRUP) // 1UP + else if (i == MT_1UP_BOX) // 1UP { // Either or, doesn't matter which. if (mthing->options & (MTF_AMBUSH|MTF_OBJECTSPECIAL)) - i = MT_SCORETVLARGE; // 10,000 + i = MT_SCORE10K_BOX; // 10,000 else - i = MT_SCORETVSMALL; // 1,000 + i = MT_SCORE1K_BOX; // 1,000 } } if (ultimatemode) { - if (i == MT_PITYTV || i == MT_GREENTV || i == MT_YELLOWTV || i == MT_BLUETV || i == MT_BLACKTV || i == MT_WHITETV) + if (i == MT_PITY_BOX || i == MT_ELEMENTAL_BOX || i == MT_ATTRACT_BOX + || i == MT_FORCE_BOX || i == MT_ARMAGEDDON_BOX || i == MT_WHIRLWIND_BOX) return; // No shields in Ultimate mode - if (i == MT_SUPERRINGBOX && !G_IsSpecialStage(gamemap)) + if (i == MT_RING_BOX && !G_IsSpecialStage(gamemap)) return; // No rings in Ultimate mode (except special stages) + + // Don't include the BIGBOXes (repeating monitors) here please. + // They're likely facets of the level's design and therefore required to progress. } if (i == MT_EMMY && (gametype != GT_COOP || ultimatemode || tokenbits == 30 || tokenlist & (1 << tokenbits++))) @@ -9306,8 +9300,10 @@ ML_NOCLIMB : Direction not controllable } //count 10 ring boxes into the number of rings equation too. - if (i == MT_SUPERRINGBOX) + if (i == MT_RING_BOX) nummaprings += 10; + if (i == MT_RING_BIGBOX) // Theoretically infinite + nummaprings += 10000; if (i == MT_BIGTUMBLEWEED || i == MT_LITTLETUMBLEWEED) { @@ -9385,16 +9381,11 @@ ML_NOCLIMB : Direction not controllable mobj->flags2 |= MF2_STANDONME; } - if (mobj->flags & MF_MONITOR) + if ((mobj->flags & MF_MONITOR) && mobj->info->speed != 0) { // flag for strong/weak random boxes - if (mthing->type == mobjinfo[MT_SUPERRINGBOX].doomednum || mthing->type == mobjinfo[MT_PRUP].doomednum || - mthing->type == mobjinfo[MT_SNEAKERTV].doomednum || mthing->type == mobjinfo[MT_INV].doomednum || - mthing->type == mobjinfo[MT_WHITETV].doomednum || mthing->type == mobjinfo[MT_GREENTV].doomednum || - mthing->type == mobjinfo[MT_YELLOWTV].doomednum || mthing->type == mobjinfo[MT_BLUETV].doomednum || - mthing->type == mobjinfo[MT_BLACKTV].doomednum || mthing->type == mobjinfo[MT_PITYTV].doomednum || - mthing->type == mobjinfo[MT_RECYCLETV].doomednum || mthing->type == mobjinfo[MT_MIXUPBOX].doomednum) - mobj->flags |= MF_AMBUSH; + // any monitor with nonzero speed is allowed to respawn like this + mobj->flags |= MF_AMBUSH; } else if (mthing->type != mobjinfo[MT_AXIS].doomednum && @@ -9407,14 +9398,12 @@ ML_NOCLIMB : Direction not controllable if (mthing->options & MTF_OBJECTSPECIAL) { - // flag for strong/weak random boxes - if (mthing->type == mobjinfo[MT_SUPERRINGBOX].doomednum || mthing->type == mobjinfo[MT_PRUP].doomednum || - mthing->type == mobjinfo[MT_SNEAKERTV].doomednum || mthing->type == mobjinfo[MT_INV].doomednum || - mthing->type == mobjinfo[MT_WHITETV].doomednum || mthing->type == mobjinfo[MT_GREENTV].doomednum || - mthing->type == mobjinfo[MT_YELLOWTV].doomednum || mthing->type == mobjinfo[MT_BLUETV].doomednum || - mthing->type == mobjinfo[MT_BLACKTV].doomednum || mthing->type == mobjinfo[MT_PITYTV].doomednum || - mthing->type == mobjinfo[MT_RECYCLETV].doomednum || mthing->type == mobjinfo[MT_MIXUPBOX].doomednum) - mobj->flags2 |= MF2_STRONGBOX; + if ((mobj->flags & MF_MONITOR) && mobj->info->speed != 0) + { + // flag for strong/weak random boxes + // any monitor with nonzero speed is allowed to respawn like this + mobj->flags2 |= MF2_STRONGBOX; + } // Requires you to be in bonus time to activate if (mobj->flags & MF_NIGHTSITEM) @@ -10411,3 +10400,35 @@ void P_FlashPal(player_t *pl, UINT16 type, UINT16 duration) pl->flashcount = duration; pl->flashpal = type; } + +// +// P_SpawnMobjFromMobj +// Spawns an object with offsets relative to the position of another object. +// Scale, gravity flip, etc. is taken into account automatically. +// +mobj_t *P_SpawnMobjFromMobj(mobj_t *mobj, fixed_t xofs, fixed_t yofs, fixed_t zofs, mobjtype_t type) +{ + mobj_t *newmobj; + + xofs = FixedMul(xofs, mobj->scale); + yofs = FixedMul(yofs, mobj->scale); + zofs = FixedMul(zofs, mobj->scale); + + newmobj = P_SpawnMobj(mobj->x + xofs, mobj->y + yofs, mobj->z + zofs, type); + if (!newmobj) + return NULL; + + if (mobj->eflags & MFE_VERTICALFLIP) + { + fixed_t elementheight = FixedMul(newmobj->info->height, mobj->scale); + + newmobj->eflags |= MFE_VERTICALFLIP; + newmobj->flags2 |= MF2_OBJECTFLIP; + newmobj->z = mobj->z + mobj->height - zofs - elementheight; + } + + newmobj->destscale = mobj->destscale; + P_SetScale(newmobj, mobj->scale); + return newmobj; +} + diff --git a/src/p_user.c b/src/p_user.c index 8854d8d64..d7ff8c27a 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -8651,7 +8651,7 @@ void P_DoPityCheck(player_t *player) if ((player->pity >= 3 || player->pity < 0) && player->powers[pw_shield] == SH_NONE) { if (player->pity > 0) - S_StartSound(player->mo, mobjinfo[MT_PITYSHIELDICO].seesound); + S_StartSound(player->mo, mobjinfo[MT_PITY_ICON].seesound); player->pity = 0; player->powers[pw_shield] = SH_PITY; diff --git a/src/sounds.c b/src/sounds.c index 1ec86e7bc..50bf6f29a 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -1220,6 +1220,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"lvpass", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"mindig", false, 8, 64, -1, NULL, 0, -1, -1, LUMPERROR}, {"mixup", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"monton", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"pogo" , false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"pop" , false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"rail1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, diff --git a/src/sounds.h b/src/sounds.h index c5851a346..8c2659ddb 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -1308,6 +1308,7 @@ typedef enum sfx_lvpass, sfx_mindig, sfx_mixup, + sfx_monton, sfx_pogo, sfx_pop, sfx_rail1, From 98f652aca6e0019c5c490fe45177d2eb28eb0ceb Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Thu, 31 Dec 2015 15:29:08 -0800 Subject: [PATCH 02/13] Big monitors are "Gold Monitors" now. The useless ones have been removed, too, and they should always spawn as what they should regardless of settings. By the way, graphics are at https://dl.dropboxusercontent.com/u/3518218/22/monitorgfx.wad --- src/dehacked.c | 76 +++++------ src/info.c | 350 +++++++++---------------------------------------- src/info.h | 76 +++++------ src/p_enemy.c | 20 +-- src/p_mobj.c | 31 +++-- 5 files changed, 148 insertions(+), 405 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index d0f582385..0aa577e3d 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1628,9 +1628,9 @@ static actionpointer_t actionpointers[] = {{A_Pain}, "A_PAIN"}, {{A_Fall}, "A_FALL"}, {{A_MonitorPop}, "A_MONITORPOP"}, - {{A_BigMonitorPop}, "A_BIGMONITORPOP"}, - {{A_BigMonitorRestore}, "A_BIGMONITORRESTORE"}, - {{A_BigMonitorSparkle}, "A_BIGMONITORSPARKLE"}, + {{A_GoldMonitorPop}, "A_GOLDMONITORPOP"}, + {{A_GoldMonitorRestore}, "A_GOLDMONITORRESTORE"}, + {{A_GoldMonitorSparkle}, "A_GOLDMONITORSPARKLE"}, {{A_Look}, "A_LOOK"}, {{A_Chase}, "A_CHASE"}, {{A_FaceStabChase}, "A_FACESTABCHASE"}, @@ -4867,14 +4867,14 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_BOX_POP1", "S_BOX_POP2", - "S_BIGBOX_FLICKER", - "S_BIGBOX_OFF1", - "S_BIGBOX_OFF2", - "S_BIGBOX_OFF3", - "S_BIGBOX_OFF4", - "S_BIGBOX_OFF5", - "S_BIGBOX_OFF6", - "S_BIGBOX_OFF7", + "S_GOLDBOX_FLICKER", + "S_GOLDBOX_OFF1", + "S_GOLDBOX_OFF2", + "S_GOLDBOX_OFF3", + "S_GOLDBOX_OFF4", + "S_GOLDBOX_OFF5", + "S_GOLDBOX_OFF6", + "S_GOLDBOX_OFF7", // Monitor States (one per box) "S_MYSTERY_BOX", @@ -4895,24 +4895,16 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_SCORE1K_BOX", "S_SCORE10K_BOX", - // Repeat Monitor States (one per box) - "S_MYSTERY_BIGBOX", - "S_RING_BIGBOX", - "S_PITY_BIGBOX", - "S_ATTRACT_BIGBOX", - "S_FORCE_BIGBOX", - "S_ARMAGEDDON_BIGBOX", - "S_WHIRLWIND_BIGBOX", - "S_ELEMENTAL_BIGBOX", - "S_SNEAKERS_BIGBOX", - "S_INVULN_BIGBOX", - "S_1UP_BIGBOX", - "S_EGGMAN_BIGBOX", - "S_MIXUP_BIGBOX", - "S_GRAVITY_BIGBOX", - "S_RECYCLER_BIGBOX", - "S_SCORE1K_BIGBOX", - "S_SCORE10K_BIGBOX", + // Gold Repeat Monitor States (one per box) + "S_PITY_GOLDBOX", + "S_ATTRACT_GOLDBOX", + "S_FORCE_GOLDBOX", + "S_ARMAGEDDON_GOLDBOX", + "S_WHIRLWIND_GOLDBOX", + "S_ELEMENTAL_GOLDBOX", + "S_SNEAKERS_GOLDBOX", + "S_INVULN_GOLDBOX", + "S_GRAVITY_GOLDBOX", // Team Ring Boxes (these are special) "S_RING_REDBOX1", @@ -6785,23 +6777,15 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_SCORE10K_BOX", // Monitor boxes -- repeating (big) boxes - "MT_RING_BIGBOX", - "MT_PITY_BIGBOX", - "MT_ATTRACT_BIGBOX", - "MT_FORCE_BIGBOX", - "MT_ARMAGEDDON_BIGBOX", - "MT_WHIRLWIND_BIGBOX", - "MT_ELEMENTAL_BIGBOX", - "MT_SNEAKERS_BIGBOX", - "MT_INVULN_BIGBOX", - "MT_1UP_BIGBOX", - "MT_EGGMAN_BIGBOX", - "MT_MIXUP_BIGBOX", - "MT_MYSTERY_BIGBOX", - "MT_GRAVITY_BIGBOX", - "MT_RECYCLER_BIGBOX", - "MT_SCORE1K_BIGBOX", - "MT_SCORE10K_BIGBOX", + "MT_PITY_GOLDBOX", + "MT_ATTRACT_GOLDBOX", + "MT_FORCE_GOLDBOX", + "MT_ARMAGEDDON_GOLDBOX", + "MT_WHIRLWIND_GOLDBOX", + "MT_ELEMENTAL_GOLDBOX", + "MT_SNEAKERS_GOLDBOX", + "MT_INVULN_GOLDBOX", + "MT_GRAVITY_GOLDBOX", // Monitor boxes -- special "MT_RING_REDBOX", diff --git a/src/info.c b/src/info.c index d00ecc5dc..af5126f3a 100644 --- a/src/info.c +++ b/src/info.c @@ -1248,14 +1248,14 @@ state_t states[NUMSTATES] = {SPR_MSTV, 0, 4, {A_MonitorPop}, 0, 0, S_BOX_POP2}, // S_BOX_POP1 {SPR_MSTV, 1, -1, {NULL}, 0, 0, S_NULL}, // S_BOX_POP2 - {SPR_XLTV, 0, 1, {NULL}, 0, 0, S_SPAWNSTATE}, // S_BIGBOX_FLICKER - {SPR_XLTV, 1, 89, {A_BigMonitorPop}, 0, 0, S_BIGBOX_OFF2}, // S_BIGBOX_OFF1 - {SPR_XLTV, 2, 4, {A_PlayAttackSound}, 0, 0, S_BIGBOX_OFF3}, // S_BIGBOX_OFF2 - {SPR_XLTV, 3, 4, {NULL}, 0, 0, S_BIGBOX_OFF4}, // S_BIGBOX_OFF3 - {SPR_XLTV, 4, 4, {NULL}, 0, 0, S_BIGBOX_OFF5}, // S_BIGBOX_OFF4 - {SPR_XLTV, 5, 2, {NULL}, 0, 0, S_BIGBOX_OFF6}, // S_BIGBOX_OFF5 - {SPR_XLTV, 6, 2, {NULL}, 0, 0, S_BIGBOX_OFF7}, // S_BIGBOX_OFF6 - {SPR_XLTV, 6, 0, {A_BigMonitorRestore}, 0, 0, S_SPAWNSTATE}, // S_BIGBOX_OFF7 + {SPR_XLTV, 0, 1, {NULL}, 0, 0, S_SPAWNSTATE}, // S_GOLDBOX_FLICKER + {SPR_XLTV, 1, 89, {A_GoldMonitorPop}, 0, 0, S_GOLDBOX_OFF2}, // S_GOLDBOX_OFF1 + {SPR_XLTV, 2, 4, {A_PlayAttackSound}, 0, 0, S_GOLDBOX_OFF3}, // S_GOLDBOX_OFF2 + {SPR_XLTV, 3, 4, {NULL}, 0, 0, S_GOLDBOX_OFF4}, // S_GOLDBOX_OFF3 + {SPR_XLTV, 4, 4, {NULL}, 0, 0, S_GOLDBOX_OFF5}, // S_GOLDBOX_OFF4 + {SPR_XLTV, 5, 2, {NULL}, 0, 0, S_GOLDBOX_OFF6}, // S_GOLDBOX_OFF5 + {SPR_XLTV, 6, 2, {NULL}, 0, 0, S_GOLDBOX_OFF7}, // S_GOLDBOX_OFF6 + {SPR_XLTV, 6, 0, {A_GoldMonitorRestore}, 0, 0, S_SPAWNSTATE}, // S_GOLDBOX_OFF7 // Monitor States (one per box) {SPR_TVMY, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_MYSTERY_BOX @@ -1276,24 +1276,16 @@ state_t states[NUMSTATES] = {SPR_TV1K, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_SCORE1K_BOX {SPR_TVTK, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_SCORE10K_BOX - // Repeat Monitor States (one per box) - {SPR_TVMY, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_MYSTERY_BIGBOX - {SPR_TVRI, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_RING_BIGBOX - {SPR_TVPI, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_PITY_BIGBOX - {SPR_TVAT, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_ATTRACT_BIGBOX - {SPR_TVFO, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_FORCE_BIGBOX - {SPR_TVAR, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_ARMAGEDDON_BIGBOX - {SPR_TVWW, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_WHIRLWIND_BIGBOX - {SPR_TVEL, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_ELEMENTAL_BIGBOX - {SPR_TVSS, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_SNEAKERS_BIGBOX - {SPR_TVIV, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_INVULN_BIGBOX - {SPR_TV1P, 1, 2, {A_DualAction}, S_MYSTERY_BIGBOX, S_1UP_BOX, S_BIGBOX_FLICKER}, // S_1UP_BIGBOX - {SPR_TVEG, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_EGGMAN_BIGBOX - {SPR_TVMX, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_MIXUP_BIGBOX - {SPR_TVGV, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_GRAVITY_BIGBOX - {SPR_TVRC, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_RECYCLER_BIGBOX - {SPR_TV1K, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_SCORE1K_BIGBOX - {SPR_TVTK, 1, 2, {A_BigMonitorSparkle}, 0, 0, S_BIGBOX_FLICKER}, // S_SCORE10K_BIGBOX + // Gold Repeat Monitor States (one per box) + {SPR_TVPI, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_PITY_GOLDBOX + {SPR_TVAT, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_ATTRACT_GOLDBOX + {SPR_TVFO, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_FORCE_GOLDBOX + {SPR_TVAR, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_ARMAGEDDON_GOLDBOX + {SPR_TVWW, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_WHIRLWIND_GOLDBOX + {SPR_TVEL, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_ELEMENTAL_GOLDBOX + {SPR_TVSS, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_SNEAKERS_GOLDBOX + {SPR_TVIV, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_INVULN_GOLDBOX + {SPR_TVGV, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_GRAVITY_GOLDBOX // Team Ring Boxes (these are special) {SPR_TRRI, 0, 2, {NULL}, 0, 0, S_RING_REDBOX2}, // S_RING_REDBOX1 @@ -6568,47 +6560,20 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_RING_BIGBOX - 430, // doomednum - S_RING_BIGBOX, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_monton, // attacksound - S_RING_BIGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_RING_ICON, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_PITY_BIGBOX + { // MT_PITY_GOLDBOX 431, // doomednum - S_PITY_BIGBOX, // spawnstate + S_PITY_GOLDBOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_monton, // attacksound - S_PITY_BIGBOX, // painstate + S_PITY_GOLDBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate + S_GOLDBOX_OFF1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound 0, // speed @@ -6618,24 +6583,24 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass MT_PITY_ICON, // damage sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags S_NULL // raisestate }, - { // MT_ATTRACT_BIGBOX + { // MT_ATTRACT_GOLDBOX 432, // doomednum - S_ATTRACT_BIGBOX, // spawnstate + S_ATTRACT_GOLDBOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_monton, // attacksound - S_ATTRACT_BIGBOX, // painstate + S_ATTRACT_GOLDBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate + S_GOLDBOX_OFF1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound 0, // speed @@ -6645,24 +6610,24 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass MT_ATTRACT_ICON,// damage sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags S_NULL // raisestate }, - { // MT_FORCE_BIGBOX + { // MT_FORCE_GOLDBOX 433, // doomednum - S_FORCE_BIGBOX, // spawnstate + S_FORCE_GOLDBOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_monton, // attacksound - S_FORCE_BIGBOX, // painstate + S_FORCE_GOLDBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate + S_GOLDBOX_OFF1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound 0, // speed @@ -6672,24 +6637,24 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass MT_FORCE_ICON, // damage sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags S_NULL // raisestate }, - { // MT_ARMAGEDDON_BIGBOX + { // MT_ARMAGEDDON_GOLDBOX 434, // doomednum - S_ARMAGEDDON_BIGBOX, // spawnstate + S_ARMAGEDDON_GOLDBOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_monton, // attacksound - S_ARMAGEDDON_BIGBOX, // painstate + S_ARMAGEDDON_GOLDBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate + S_GOLDBOX_OFF1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound 0, // speed @@ -6699,24 +6664,24 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass MT_ARMAGEDDON_ICON, // damage sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags S_NULL // raisestate }, - { // MT_WHIRLWIND_BIGBOX + { // MT_WHIRLWIND_GOLDBOX 435, // doomednum - S_WHIRLWIND_BIGBOX, // spawnstate + S_WHIRLWIND_GOLDBOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_monton, // attacksound - S_WHIRLWIND_BIGBOX, // painstate + S_WHIRLWIND_GOLDBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate + S_GOLDBOX_OFF1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound 0, // speed @@ -6726,24 +6691,24 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass MT_WHIRLWIND_ICON, // damage sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags S_NULL // raisestate }, - { // MT_ELEMENTAL_BIGBOX + { // MT_ELEMENTAL_GOLDBOX 436, // doomednum - S_ELEMENTAL_BIGBOX, // spawnstate + S_ELEMENTAL_GOLDBOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_monton, // attacksound - S_ELEMENTAL_BIGBOX, // painstate + S_ELEMENTAL_GOLDBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate + S_GOLDBOX_OFF1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound 0, // speed @@ -6753,24 +6718,24 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass MT_ELEMENTAL_ICON, // damage sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags S_NULL // raisestate }, - { // MT_SNEAKERS_BIGBOX + { // MT_SNEAKERS_GOLDBOX 437, // doomednum - S_SNEAKERS_BIGBOX, // spawnstate + S_SNEAKERS_GOLDBOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_monton, // attacksound - S_SNEAKERS_BIGBOX, // painstate + S_SNEAKERS_GOLDBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate + S_GOLDBOX_OFF1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound 0, // speed @@ -6780,24 +6745,24 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass MT_SNEAKERS_ICON, // damage sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags S_NULL // raisestate }, - { // MT_INVULN_BIGBOX + { // MT_INVULN_GOLDBOX 438, // doomednum - S_INVULN_BIGBOX, // spawnstate + S_INVULN_GOLDBOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_monton, // attacksound - S_INVULN_BIGBOX, // painstate + S_INVULN_GOLDBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate + S_GOLDBOX_OFF1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound 0, // speed @@ -6807,132 +6772,24 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass MT_INVULN_ICON, // damage sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags S_NULL // raisestate }, - { // MT_1UP_BIGBOX - 439, // doomednum - S_1UP_BIGBOX, // spawnstate - 1, // spawnhealth - S_PLAY_BOX1, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_monton, // attacksound - S_1UP_BIGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_1UP_ICON, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_EGGMAN_BIGBOX - 440, // doomednum - S_EGGMAN_BIGBOX, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_monton, // attacksound - S_EGGMAN_BIGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_EGGMAN_ICON, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_MIXUP_BIGBOX - 441, // doomednum - S_MIXUP_BIGBOX, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_monton, // attacksound - S_MIXUP_BIGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_MIXUP_ICON, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_MYSTERY_BIGBOX - 442, // doomednum - S_MYSTERY_BIGBOX, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_monton, // attacksound - S_MYSTERY_BIGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_UNKNOWN, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_GRAVITY_BIGBOX + { // MT_GRAVITY_GOLDBOX 443, // doomednum - S_GRAVITY_BIGBOX, // spawnstate + S_GRAVITY_GOLDBOX, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_None, // seesound 8, // reactiontime sfx_monton, // attacksound - S_GRAVITY_BIGBOX, // painstate + S_GRAVITY_GOLDBOX, // painstate 0, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate + S_GOLDBOX_OFF1, // deathstate S_NULL, // xdeathstate sfx_pop, // deathsound 0, // speed @@ -6942,88 +6799,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 100, // mass MT_GRAVITY_ICON, // damage sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_RECYCLER_BIGBOX - 446, // doomednum - S_RECYCLER_BIGBOX, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_monton, // attacksound - S_RECYCLER_BIGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_RECYCLER_ICON, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_SCORE1K_BIGBOX - 448, // doomednum - S_SCORE1K_BIGBOX, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_monton, // attacksound - S_SCORE1K_BIGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_SCORE1K_ICON, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags - S_NULL // raisestate - }, - - { // MT_SCORE10K_BIGBOX - 449, // doomednum - S_SCORE10K_BIGBOX, // spawnstate - 1, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_monton, // attacksound - S_SCORE10K_BIGBOX, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BIGBOX_OFF1, // deathstate - S_NULL, // xdeathstate - sfx_pop, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - MT_SCORE10K_ICON, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags + MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags S_NULL // raisestate }, diff --git a/src/info.h b/src/info.h index d031addf5..d68bf5abb 100644 --- a/src/info.h +++ b/src/info.h @@ -28,9 +28,9 @@ void A_Explode(); void A_Pain(); void A_Fall(); void A_MonitorPop(); -void A_BigMonitorPop(); -void A_BigMonitorRestore(); -void A_BigMonitorSparkle(); +void A_GoldMonitorPop(); +void A_GoldMonitorRestore(); +void A_GoldMonitorSparkle(); void A_Look(); void A_Chase(); void A_FaceStabChase(); @@ -1765,14 +1765,14 @@ typedef enum state S_BOX_POP1, S_BOX_POP2, - S_BIGBOX_FLICKER, - S_BIGBOX_OFF1, - S_BIGBOX_OFF2, - S_BIGBOX_OFF3, - S_BIGBOX_OFF4, - S_BIGBOX_OFF5, - S_BIGBOX_OFF6, - S_BIGBOX_OFF7, + S_GOLDBOX_FLICKER, + S_GOLDBOX_OFF1, + S_GOLDBOX_OFF2, + S_GOLDBOX_OFF3, + S_GOLDBOX_OFF4, + S_GOLDBOX_OFF5, + S_GOLDBOX_OFF6, + S_GOLDBOX_OFF7, // Monitor States (one per box) S_MYSTERY_BOX, @@ -1793,24 +1793,16 @@ typedef enum state S_SCORE1K_BOX, S_SCORE10K_BOX, - // Repeat Monitor States (one per box) - S_MYSTERY_BIGBOX, - S_RING_BIGBOX, - S_PITY_BIGBOX, - S_ATTRACT_BIGBOX, - S_FORCE_BIGBOX, - S_ARMAGEDDON_BIGBOX, - S_WHIRLWIND_BIGBOX, - S_ELEMENTAL_BIGBOX, - S_SNEAKERS_BIGBOX, - S_INVULN_BIGBOX, - S_1UP_BIGBOX, - S_EGGMAN_BIGBOX, - S_MIXUP_BIGBOX, - S_GRAVITY_BIGBOX, - S_RECYCLER_BIGBOX, - S_SCORE1K_BIGBOX, - S_SCORE10K_BIGBOX, + // Gold Repeat Monitor States (one per box) + S_PITY_GOLDBOX, + S_ATTRACT_GOLDBOX, + S_FORCE_GOLDBOX, + S_ARMAGEDDON_GOLDBOX, + S_WHIRLWIND_GOLDBOX, + S_ELEMENTAL_GOLDBOX, + S_SNEAKERS_GOLDBOX, + S_INVULN_GOLDBOX, + S_GRAVITY_GOLDBOX, // Team Ring Boxes (these are special) S_RING_REDBOX1, @@ -3703,23 +3695,15 @@ typedef enum mobj_type MT_SCORE10K_BOX, // Monitor boxes -- repeating (big) boxes - MT_RING_BIGBOX, - MT_PITY_BIGBOX, - MT_ATTRACT_BIGBOX, - MT_FORCE_BIGBOX, - MT_ARMAGEDDON_BIGBOX, - MT_WHIRLWIND_BIGBOX, - MT_ELEMENTAL_BIGBOX, - MT_SNEAKERS_BIGBOX, - MT_INVULN_BIGBOX, - MT_1UP_BIGBOX, - MT_EGGMAN_BIGBOX, - MT_MIXUP_BIGBOX, - MT_MYSTERY_BIGBOX, - MT_GRAVITY_BIGBOX, - MT_RECYCLER_BIGBOX, - MT_SCORE1K_BIGBOX, - MT_SCORE10K_BIGBOX, + MT_PITY_GOLDBOX, + MT_ATTRACT_GOLDBOX, + MT_FORCE_GOLDBOX, + MT_ARMAGEDDON_GOLDBOX, + MT_WHIRLWIND_GOLDBOX, + MT_ELEMENTAL_GOLDBOX, + MT_SNEAKERS_GOLDBOX, + MT_INVULN_GOLDBOX, + MT_GRAVITY_GOLDBOX, // Monitor boxes -- special MT_RING_REDBOX, diff --git a/src/p_enemy.c b/src/p_enemy.c index d050972db..4555695c9 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -2635,20 +2635,20 @@ void A_MonitorPop(mobj_t *actor) } } -// Function: A_BigMonitorPop +// Function: A_GoldMonitorPop // // Description: Used by repeating monitors when they turn off. They don't really pop, but, you know... // // var1 = unused // var2 = unused // -void A_BigMonitorPop(mobj_t *actor) +void A_GoldMonitorPop(mobj_t *actor) { mobjtype_t item = 0; mobj_t *newmobj; #ifdef HAVE_BLUA - if (LUA_CallAction("A_BigMonitorPop", actor)) + if (LUA_CallAction("A_GoldMonitorPop", actor)) return; #endif @@ -2685,7 +2685,7 @@ void A_BigMonitorPop(mobj_t *actor) if (item == 0) { - CONS_Debug(DBG_GAMELOGIC, "Powerup item not defined in 'damage' field for A_BigMonitorPop\n"); + CONS_Debug(DBG_GAMELOGIC, "Powerup item not defined in 'damage' field for A_GoldMonitorPop\n"); return; } @@ -2716,17 +2716,17 @@ void A_BigMonitorPop(mobj_t *actor) } } -// Function: A_BigMonitorRestore +// Function: A_GoldMonitorRestore // // Description: A repeating monitor is coming back to life. Reset monitor flags, etc. // // var1 = unused // var2 = unused // -void A_BigMonitorRestore(mobj_t *actor) +void A_GoldMonitorRestore(mobj_t *actor) { #ifdef HAVE_BLUA - if (LUA_CallAction("A_BigMonitorRestore", actor)) + if (LUA_CallAction("A_GoldMonitorRestore", actor)) return; #endif @@ -2735,19 +2735,19 @@ void A_BigMonitorRestore(mobj_t *actor) actor->health = 1; // Just in case. } -// Function: A_BigMonitorSparkle +// Function: A_GoldMonitorSparkle // // Description: Spawns the little sparkly effect around big monitors. Looks pretty, doesn't it? // // var1 = unused // var2 = unused // -void A_BigMonitorSparkle(mobj_t *actor) +void A_GoldMonitorSparkle(mobj_t *actor) { fixed_t i, ngangle, xofs, yofs; #ifdef HAVE_BLUA - if (LUA_CallAction("A_BigMonitorSparkle", actor)) + if (LUA_CallAction("A_GoldMonitorSparkle", actor)) return; #endif diff --git a/src/p_mobj.c b/src/p_mobj.c index 86ddee029..f5d5ecf56 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8789,36 +8789,37 @@ void P_SpawnMapThing(mapthing_t *mthing) if ((mobjinfo[i].flags & MF_ENEMY) || (mobjinfo[i].flags & MF_BOSS)) return; - // Set powerup boxes to user settings for competition. - if (gametype == GT_COMPETITION) + // Altering monitor spawns via cvars + // If MF_GRENADEBOUNCE is set in the monitor's info, + // skip this step. (Used for gold monitors) + // Yeah, this is a dirty hack. + if ((mobjinfo[i].flags & (MF_MONITOR|MF_GRENADEBOUNCE)) == MF_MONITOR) { - if ((mobjinfo[i].flags & MF_MONITOR) && cv_competitionboxes.value) // not Normal + if (gametype == GT_COMPETITION) { + // Set powerup boxes to user settings for competition. if (cv_competitionboxes.value == 1) // Random i = MT_MYSTERY_BOX; else if (cv_competitionboxes.value == 2) // Teleports i = MT_MIXUP_BOX; else if (cv_competitionboxes.value == 3) // None return; // Don't spawn! + // default case: normal } - } - - // Set powerup boxes to user settings for other netplay modes - else if (gametype != GT_COOP) - { - if ((mobjinfo[i].flags & MF_MONITOR) && cv_matchboxes.value) // not Normal + // Set powerup boxes to user settings for other netplay modes + else if (gametype != GT_COOP) { if (cv_matchboxes.value == 1) // Random i = MT_MYSTERY_BOX; - else if (cv_matchboxes.value == 3) // Don't spawn - return; - else // cv_matchboxes.value == 2, Non-Random + else if (cv_matchboxes.value == 2) // Non-Random { if (i == MT_MYSTERY_BOX) return; // don't spawn in Non-Random - mthing->options &= ~(MTF_AMBUSH|MTF_OBJECTSPECIAL); // no random respawning! } + else if (cv_matchboxes.value == 3) // Don't spawn + return; + // default case: normal } } @@ -8873,7 +8874,7 @@ void P_SpawnMapThing(mapthing_t *mthing) if (i == MT_RING_BOX && !G_IsSpecialStage(gamemap)) return; // No rings in Ultimate mode (except special stages) - // Don't include the BIGBOXes (repeating monitors) here please. + // Don't include the gold repeating boxes here please. // They're likely facets of the level's design and therefore required to progress. } @@ -9302,8 +9303,6 @@ ML_NOCLIMB : Direction not controllable //count 10 ring boxes into the number of rings equation too. if (i == MT_RING_BOX) nummaprings += 10; - if (i == MT_RING_BIGBOX) // Theoretically infinite - nummaprings += 10000; if (i == MT_BIGTUMBLEWEED || i == MT_LITTLETUMBLEWEED) { From 1f7e135ce587e68b29da7a8dcf3e2ce7b350911c Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Sun, 3 Jan 2016 19:11:27 -0800 Subject: [PATCH 03/13] Gold boxes are supposed to be 4 fracunits taller. To match their taller sprite. --- src/info.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/info.c b/src/info.c index af5126f3a..97a505399 100644 --- a/src/info.c +++ b/src/info.c @@ -6578,7 +6578,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_pop, // deathsound 0, // speed 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 36*FRACUNIT, // height 0, // display offset 100, // mass MT_PITY_ICON, // damage @@ -6605,7 +6605,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_pop, // deathsound 0, // speed 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 36*FRACUNIT, // height 0, // display offset 100, // mass MT_ATTRACT_ICON,// damage @@ -6632,7 +6632,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_pop, // deathsound 0, // speed 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 36*FRACUNIT, // height 0, // display offset 100, // mass MT_FORCE_ICON, // damage @@ -6659,7 +6659,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_pop, // deathsound 0, // speed 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 36*FRACUNIT, // height 0, // display offset 100, // mass MT_ARMAGEDDON_ICON, // damage @@ -6686,7 +6686,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_pop, // deathsound 0, // speed 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 36*FRACUNIT, // height 0, // display offset 100, // mass MT_WHIRLWIND_ICON, // damage @@ -6713,7 +6713,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_pop, // deathsound 0, // speed 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 36*FRACUNIT, // height 0, // display offset 100, // mass MT_ELEMENTAL_ICON, // damage @@ -6740,7 +6740,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_pop, // deathsound 0, // speed 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 36*FRACUNIT, // height 0, // display offset 100, // mass MT_SNEAKERS_ICON, // damage @@ -6767,7 +6767,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_pop, // deathsound 0, // speed 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 36*FRACUNIT, // height 0, // display offset 100, // mass MT_INVULN_ICON, // damage @@ -6794,7 +6794,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_pop, // deathsound 0, // speed 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 36*FRACUNIT, // height 0, // display offset 100, // mass MT_GRAVITY_ICON, // damage From c1340b6e6cbad04cc14b466475801415e3c9f64c Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Wed, 6 Jan 2016 03:07:08 -0800 Subject: [PATCH 04/13] Most minor 1up icon bug fixed. 1up icons were spawning their overlays off sync with each other so the face icon was showing up during static. Now they don't. (They'd do this in 2.1 too if you have a custom WAD added that doesn't have an overlay sprite, and you use it in multiplayer alongside a character that does.) --- src/info.c | 6 +++--- src/p_enemy.c | 26 +++++++++++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/info.c b/src/info.c index 97a505399..0d7a8b998 100644 --- a/src/info.c +++ b/src/info.c @@ -1268,7 +1268,7 @@ state_t states[NUMSTATES] = {SPR_TVEL, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_ELEMENTAL_BOX {SPR_TVSS, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_SNEAKERS_BOX {SPR_TVIV, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_INVULN_BOX - {SPR_TV1P, 0, 2, {A_1upThinker}, 0, 0, S_BOX_FLICKER}, // S_1UP_BOX + {SPR_TV1U, 0, 2, {A_1upThinker}, 0, 0, S_BOX_FLICKER}, // S_1UP_BOX {SPR_TVEG, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_EGGMAN_BOX {SPR_TVMX, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_MIXUP_BOX {SPR_TVGV, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_GRAVITY_BOX @@ -1353,11 +1353,11 @@ state_t states[NUMSTATES] = {SPR_TVIV, 5, 4, {NULL}, 0, 0, S_INVULN_ICON5}, // S_INVULN_ICON4 {SPR_TVIV, 2, 18, {A_Invincibility}, 0, 0, S_NULL}, // S_INVULN_ICON5 - {SPR_TV1P, 2, 4, {NULL}, 0, 0, S_1UP_ICON2}, // S_1UP_ICON1 + {SPR_TV1U, 2, 4, {NULL}, 0, 0, S_1UP_ICON2}, // S_1UP_ICON1 {SPR_TV1U, 3, 4, {NULL}, 0, 0, S_1UP_ICON3}, // S_1UP_ICON2 {SPR_TV1U, 4, 4, {NULL}, 0, 0, S_1UP_ICON4}, // S_1UP_ICON3 {SPR_TV1U, 5, 4, {NULL}, 0, 0, S_1UP_ICON5}, // S_1UP_ICON4 - {SPR_TV1P, 2, 18, {A_ExtraLife}, 0, 0, S_NULL}, // S_1UP_ICON5 + {SPR_TV1U, 2, 18, {A_ExtraLife}, 0, 0, S_NULL}, // S_1UP_ICON5 {SPR_TVEG, 2, 4, {NULL}, 0, 0, S_EGGMAN_ICON2}, // S_EGGMAN_ICON1 {SPR_TVEG, 3, 4, {NULL}, 0, 0, S_EGGMAN_ICON3}, // S_EGGMAN_ICON2 diff --git a/src/p_enemy.c b/src/p_enemy.c index ce957243c..7903e40cc 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -2541,7 +2541,6 @@ void A_1upThinker(mobj_t *actor) if (closestplayer == -1 || skins[players[closestplayer].skin].sprites[SPR2_LIFE].numframes == 0) { // Closest player not found (no players in game?? may be empty dedicated server!), or does not have correct sprite. - actor->sprite = SPR_TV1U; if (actor->tracer) { P_RemoveMobj(actor->tracer); actor->tracer = NULL; @@ -2549,11 +2548,19 @@ void A_1upThinker(mobj_t *actor) return; } + // We're using the overlay, so use the overlay 1up box (no text) + actor->sprite = SPR_TV1P; + if (!actor->tracer) { P_SetTarget(&actor->tracer, P_SpawnMobj(actor->x, actor->y, actor->z, MT_OVERLAY)); P_SetTarget(&actor->tracer->target, actor); P_SetMobjState(actor->tracer, actor->info->seestate); + + // The overlay is going to be one tic early turning off and on + // because it's going to get its thinker run the frame we spawned it. + // So make it take one tic longer if it just spawned. + ++actor->tracer->tics; } actor->tracer->color = players[closestplayer].mo->color; @@ -2621,7 +2628,7 @@ void A_MonitorPop(mobj_t *actor) || !newmobj->target->player || !newmobj->target->skin || ((skin_t *)newmobj->target->skin)->sprites[SPR2_LIFE].numframes == 0) - newmobj->sprite = SPR_TV1U; // No lives icon for this player, use the default. + {} // No lives icon for this player, use the default. else { // Spawn the lives icon. mobj_t *livesico = P_SpawnMobjFromMobj(newmobj, 0, 0, 0, MT_OVERLAY); @@ -2631,6 +2638,9 @@ void A_MonitorPop(mobj_t *actor) livesico->color = newmobj->target->player->mo->color; livesico->skin = &skins[newmobj->target->player->skin]; P_SetMobjState(livesico, newmobj->info->seestate); + + // We're using the overlay, so use the overlay 1up sprite (no text) + newmobj->sprite = SPR_TV1P; } } } @@ -2702,7 +2712,7 @@ void A_GoldMonitorPop(mobj_t *actor) || !newmobj->target->player || !newmobj->target->skin || ((skin_t *)newmobj->target->skin)->sprites[SPR2_LIFE].numframes == 0) - newmobj->sprite = SPR_TV1U; // No lives icon for this player, use the default. + {} // No lives icon for this player, use the default. else { // Spawn the lives icon. mobj_t *livesico = P_SpawnMobjFromMobj(newmobj, 0, 0, 0, MT_OVERLAY); @@ -2712,6 +2722,9 @@ void A_GoldMonitorPop(mobj_t *actor) livesico->color = newmobj->target->player->mo->color; livesico->skin = &skins[newmobj->target->player->skin]; P_SetMobjState(livesico, newmobj->info->seestate); + + // We're using the overlay, so use the overlay 1up sprite (no text) + newmobj->sprite = SPR_TV1P; } } } @@ -3241,8 +3254,11 @@ void A_ExtraLife(mobj_t *actor) player = actor->target->player; - if (actor->type == MT_1UP_ICON && !actor->tracer) - actor->sprite = SPR_TV1U; // No lives icon for this player, use the default. + if (actor->type == MT_1UP_ICON && actor->tracer) + { + // We're using the overlay, so use the overlay 1up sprite (no text) + actor->sprite = SPR_TV1P; + } if (ultimatemode) //I don't THINK so! { From fe5b8c58afb65c8545dfafce6d0109935f2af442 Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Sun, 31 Jul 2016 20:51:39 +0100 Subject: [PATCH 05/13] Add basic support for animated sky textures --- src/hardware/hw_main.c | 6 +++--- src/r_plane.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index a83960177..e3d9bc218 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5325,7 +5325,7 @@ static void HWR_DrawSkyBackground(player_t *player) // 0--1 (void)player; - HWR_GetTexture(skytexture); + HWR_GetTexture(texturetranslation[skytexture]); //Hurdler: the sky is the only texture who need 4.0f instead of 1.0 // because it's called just after clearing the screen @@ -5345,7 +5345,7 @@ static void HWR_DrawSkyBackground(player_t *player) angle = (dup_viewangle + gr_xtoviewangle[0]); - dimensionmultiply = ((float)textures[skytexture]->width/256.0f); + dimensionmultiply = ((float)textures[texturetranslation[skytexture]]->width/256.0f); v[0].sow = v[3].sow = ((float) angle / ((ANGLE_90-1)*dimensionmultiply)); v[2].sow = v[1].sow = (-1.0f/dimensionmultiply)+((float) angle / ((ANGLE_90-1)*dimensionmultiply)); @@ -5354,7 +5354,7 @@ static void HWR_DrawSkyBackground(player_t *player) angle = aimingangle; aspectratio = (float)vid.width/(float)vid.height; - dimensionmultiply = ((float)textures[skytexture]->height/(128.0f*aspectratio)); + dimensionmultiply = ((float)textures[texturetranslation[skytexture]]->height/(128.0f*aspectratio)); angleturn = (((float)ANGLE_45-1.0f)*aspectratio)*dimensionmultiply; // Middle of the sky should always be at angle 0 diff --git a/src/r_plane.c b/src/r_plane.c index 19007d88f..ad30f4247 100644 --- a/src/r_plane.c +++ b/src/r_plane.c @@ -711,7 +711,7 @@ void R_DrawPlanes(void) angle = (pl->viewangle + xtoviewangle[x])>>ANGLETOSKYSHIFT; dc_x = x; dc_source = - R_GetColumn(skytexture, + R_GetColumn(texturetranslation[skytexture], angle); wallcolfunc(); } From 2798bd5c163b239eb7dd2eed40944b067eb3bc94 Mon Sep 17 00:00:00 2001 From: ilag11111 Date: Sun, 11 Sep 2016 10:40:49 -0700 Subject: [PATCH 06/13] Ensure demo files will save to srb2home, where SRB2 already looks for them. --- src/g_game.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/g_game.c b/src/g_game.c index f891b0105..9ad8460d2 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -5579,7 +5579,10 @@ boolean G_CheckDemoStatus(void) WRITEUINT8(demo_p, DEMOMARKER); // add the demo end marker md5_buffer((char *)p+16, demo_p - (p+16), p); // make a checksum of everything after the checksum in the file. #endif - saved = FIL_WriteFile(demoname, demobuffer, demo_p - demobuffer); // finally output the file. + + char fulldemoname [128]; + sprintf(fulldemoname, "%s"PATHSEP"%s", srb2home, demoname); + saved = FIL_WriteFile(fulldemoname, demobuffer, demo_p - demobuffer); // finally output the file. free(demobuffer); demorecording = false; From 4abfe1e8f36f654b467f38b23debfcc8c156cbd0 Mon Sep 17 00:00:00 2001 From: ilag11111 Date: Sun, 11 Sep 2016 10:57:14 -0700 Subject: [PATCH 07/13] Fix MinGW/AppVeyor build. --- src/g_game.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/g_game.c b/src/g_game.c index 9ad8460d2..08c6be101 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -5529,6 +5529,7 @@ void G_StopDemo(void) boolean G_CheckDemoStatus(void) { boolean saved; + char fulldemoname[128]; //Demo name with srb2home path if(ghosts) // ... ... ... ghosts = NULL; // :) @@ -5580,7 +5581,6 @@ boolean G_CheckDemoStatus(void) md5_buffer((char *)p+16, demo_p - (p+16), p); // make a checksum of everything after the checksum in the file. #endif - char fulldemoname [128]; sprintf(fulldemoname, "%s"PATHSEP"%s", srb2home, demoname); saved = FIL_WriteFile(fulldemoname, demobuffer, demo_p - demobuffer); // finally output the file. free(demobuffer); From 3b503f133640bde612862ec23310be06f9685a50 Mon Sep 17 00:00:00 2001 From: ilag11111 Date: Sun, 11 Sep 2016 14:59:24 -0700 Subject: [PATCH 08/13] Use function va to avoid having to delcare a new variable. Thanks MonsterIestyn. --- src/g_game.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index 08c6be101..84db90132 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -5529,7 +5529,6 @@ void G_StopDemo(void) boolean G_CheckDemoStatus(void) { boolean saved; - char fulldemoname[128]; //Demo name with srb2home path if(ghosts) // ... ... ... ghosts = NULL; // :) @@ -5580,9 +5579,7 @@ boolean G_CheckDemoStatus(void) WRITEUINT8(demo_p, DEMOMARKER); // add the demo end marker md5_buffer((char *)p+16, demo_p - (p+16), p); // make a checksum of everything after the checksum in the file. #endif - - sprintf(fulldemoname, "%s"PATHSEP"%s", srb2home, demoname); - saved = FIL_WriteFile(fulldemoname, demobuffer, demo_p - demobuffer); // finally output the file. + saved = FIL_WriteFile(va(pandf, srb2home, demoname), demobuffer, demo_p - demobuffer); // finally output the file. free(demobuffer); demorecording = false; From 1d71dfa5a3c482de470baac8b025369336aea9ba Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Sun, 25 Sep 2016 20:55:08 -0700 Subject: [PATCH 09/13] animate icons using FF_ANIMATE (this also means they last one second again, and the powerup is given after 1/2 a second, things which were lost when the flip was added) --- src/dehacked.c | 50 +-------------------- src/info.c | 118 +++++++++++++++---------------------------------- src/info.h | 50 +-------------------- 3 files changed, 37 insertions(+), 181 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 8c6a0639c..c148719c7 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -4900,102 +4900,54 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_BLUEBOX_POP1", "S_BLUEBOX_POP2", - // Box Icons -- 5 states each, one for each part of the twirl + // Box Icons -- 2 states each, animation and action "S_RING_ICON1", "S_RING_ICON2", - "S_RING_ICON3", - "S_RING_ICON4", - "S_RING_ICON5", "S_PITY_ICON1", "S_PITY_ICON2", - "S_PITY_ICON3", - "S_PITY_ICON4", - "S_PITY_ICON5", "S_ATTRACT_ICON1", "S_ATTRACT_ICON2", - "S_ATTRACT_ICON3", - "S_ATTRACT_ICON4", - "S_ATTRACT_ICON5", "S_FORCE_ICON1", "S_FORCE_ICON2", - "S_FORCE_ICON3", - "S_FORCE_ICON4", - "S_FORCE_ICON5", "S_ARMAGEDDON_ICON1", "S_ARMAGEDDON_ICON2", - "S_ARMAGEDDON_ICON3", - "S_ARMAGEDDON_ICON4", - "S_ARMAGEDDON_ICON5", "S_WHIRLWIND_ICON1", "S_WHIRLWIND_ICON2", - "S_WHIRLWIND_ICON3", - "S_WHIRLWIND_ICON4", - "S_WHIRLWIND_ICON5", "S_ELEMENTAL_ICON1", "S_ELEMENTAL_ICON2", - "S_ELEMENTAL_ICON3", - "S_ELEMENTAL_ICON4", - "S_ELEMENTAL_ICON5", "S_SNEAKERS_ICON1", "S_SNEAKERS_ICON2", - "S_SNEAKERS_ICON3", - "S_SNEAKERS_ICON4", - "S_SNEAKERS_ICON5", "S_INVULN_ICON1", "S_INVULN_ICON2", - "S_INVULN_ICON3", - "S_INVULN_ICON4", - "S_INVULN_ICON5", "S_1UP_ICON1", "S_1UP_ICON2", - "S_1UP_ICON3", - "S_1UP_ICON4", - "S_1UP_ICON5", "S_EGGMAN_ICON1", "S_EGGMAN_ICON2", - "S_EGGMAN_ICON3", - "S_EGGMAN_ICON4", - "S_EGGMAN_ICON5", "S_MIXUP_ICON1", "S_MIXUP_ICON2", - "S_MIXUP_ICON3", - "S_MIXUP_ICON4", - "S_MIXUP_ICON5", "S_GRAVITY_ICON1", "S_GRAVITY_ICON2", - "S_GRAVITY_ICON3", - "S_GRAVITY_ICON4", - "S_GRAVITY_ICON5", "S_RECYCLER_ICON1", "S_RECYCLER_ICON2", - "S_RECYCLER_ICON3", - "S_RECYCLER_ICON4", - "S_RECYCLER_ICON5", "S_SCORE1K_ICON1", "S_SCORE1K_ICON2", - "S_SCORE1K_ICON3", - "S_SCORE1K_ICON4", - "S_SCORE1K_ICON5", "S_SCORE10K_ICON1", "S_SCORE10K_ICON2", - "S_SCORE10K_ICON3", - "S_SCORE10K_ICON4", - "S_SCORE10K_ICON5", "S_ROCKET", diff --git a/src/info.c b/src/info.c index bf69b0759..86e51fc9f 100644 --- a/src/info.c +++ b/src/info.c @@ -40,7 +40,7 @@ char sprnames[NUMSPRITES + 1][5] = "RING","TRNG","EMMY","TOKE","RFLG","BFLG","NWNG","EMBM","CEMG","EMER", "FANS","BUBL","SIGN","STEM","SPIK","SFLM","USPK","STPT","BMNE", - + "MSTV","XLTV","TRRI","TBRI","TVRI","TVPI","TVAT","TVFO","TVAR","TVWW", "TVEL","TVSS","TVIV","TV1U","TV1P","TVEG","TVMX","TVMY","TVGV","TVRC", "TV1K","TVTK", @@ -222,7 +222,7 @@ state_t states[NUMSTATES] = {SPR_NULL, 0, 1, {NULL}, 0, 0, S_PLAY_BOX1}, // S_PLAY_BOX2 {SPR_PLAY, SPR2_LIFE, 4, {NULL}, 0, 4, S_PLAY_ICON2}, // S_PLAY_ICON1 {SPR_NULL, 0, 12, {NULL}, 0, 0, S_PLAY_ICON3}, // S_PLAY_ICON2 - {SPR_PLAY, SPR2_LIFE, 18, {NULL}, 0, 4, S_NULL}, // S_PLAY_ICON3 + {SPR_PLAY, SPR2_LIFE, 19, {NULL}, 0, 4, S_NULL}, // S_PLAY_ICON3 // Level end sign (uses player sprite) {SPR_PLAY, SPR2_SIGN, 1, {NULL}, 0, 24, S_PLAY_SIGN}, // S_PLAY_SIGN @@ -1254,102 +1254,54 @@ state_t states[NUMSTATES] = {SPR_TBRI, 1, 4, {A_MonitorPop}, 0, 0, S_BLUEBOX_POP2}, // S_BLUEBOX_POP1 {SPR_TBRI, 2, -1, {NULL}, 0, 0, S_NULL}, // S_BLUEBOX_POP2 - // Box Icons -- 5 states each, one for each part of the twirl - {SPR_TVRI, 2, 4, {NULL}, 0, 0, S_RING_ICON2}, // S_RING_ICON1 - {SPR_TVRI, 3, 4, {NULL}, 0, 0, S_RING_ICON3}, // S_RING_ICON2 - {SPR_TVRI, 4, 4, {NULL}, 0, 0, S_RING_ICON4}, // S_RING_ICON3 - {SPR_TVRI, 5, 4, {NULL}, 0, 0, S_RING_ICON5}, // S_RING_ICON4 - {SPR_TVRI, 2, 18, {A_RingBox}, 0, 0, S_NULL}, // S_RING_ICON5 + // Box Icons -- 2 states each, animation and action + {SPR_TVRI, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_RING_ICON2}, // S_RING_ICON1 + {SPR_TVRI, 2, 17, {A_RingBox}, 0, 0, S_NULL}, // S_RING_ICON2 - {SPR_TVPI, 2, 4, {NULL}, 0, 0, S_PITY_ICON2}, // S_PITY_ICON1 - {SPR_TVPI, 3, 4, {NULL}, 0, 0, S_PITY_ICON3}, // S_PITY_ICON2 - {SPR_TVPI, 4, 4, {NULL}, 0, 0, S_PITY_ICON4}, // S_PITY_ICON3 - {SPR_TVPI, 5, 4, {NULL}, 0, 0, S_PITY_ICON5}, // S_PITY_ICON4 - {SPR_TVPI, 2, 18, {A_PityShield}, 0, 0, S_NULL}, // S_PITY_ICON5 + {SPR_TVPI, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_PITY_ICON2}, // S_PITY_ICON1 + {SPR_TVPI, 2, 17, {A_PityShield}, 0, 0, S_NULL}, // S_PITY_ICON2 - {SPR_TVAT, 2, 4, {NULL}, 0, 0, S_ATTRACT_ICON2}, // S_ATTRACT_ICON1 - {SPR_TVAT, 3, 4, {NULL}, 0, 0, S_ATTRACT_ICON3}, // S_ATTRACT_ICON2 - {SPR_TVAT, 4, 4, {NULL}, 0, 0, S_ATTRACT_ICON4}, // S_ATTRACT_ICON3 - {SPR_TVAT, 5, 4, {NULL}, 0, 0, S_ATTRACT_ICON5}, // S_ATTRACT_ICON4 - {SPR_TVAT, 2, 18, {A_RingShield},0, 0, S_NULL}, // S_ATTRACT_ICON5 + {SPR_TVAT, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_ATTRACT_ICON2}, // S_ATTRACT_ICON1 + {SPR_TVAT, 2, 17, {A_RingShield},0, 0, S_NULL}, // S_ATTRACT_ICON2 - {SPR_TVFO, 2, 4, {NULL}, 0, 0, S_FORCE_ICON2}, // S_FORCE_ICON1 - {SPR_TVFO, 3, 4, {NULL}, 0, 0, S_FORCE_ICON3}, // S_FORCE_ICON2 - {SPR_TVFO, 4, 4, {NULL}, 0, 0, S_FORCE_ICON4}, // S_FORCE_ICON3 - {SPR_TVFO, 5, 4, {NULL}, 0, 0, S_FORCE_ICON5}, // S_FORCE_ICON4 - {SPR_TVFO, 2, 18, {A_ForceShield}, 0, 0, S_NULL}, // S_FORCE_ICON5 + {SPR_TVFO, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_FORCE_ICON2}, // S_FORCE_ICON1 + {SPR_TVFO, 2, 17, {A_ForceShield}, 0, 0, S_NULL}, // S_FORCE_ICON2 - {SPR_TVAR, 2, 4, {NULL}, 0, 0, S_ARMAGEDDON_ICON2}, // S_ARMAGEDDON_ICON1 - {SPR_TVAR, 3, 4, {NULL}, 0, 0, S_ARMAGEDDON_ICON3}, // S_ARMAGEDDON_ICON2 - {SPR_TVAR, 4, 4, {NULL}, 0, 0, S_ARMAGEDDON_ICON4}, // S_ARMAGEDDON_ICON3 - {SPR_TVAR, 5, 4, {NULL}, 0, 0, S_ARMAGEDDON_ICON5}, // S_ARMAGEDDON_ICON4 - {SPR_TVAR, 2, 18, {A_BombShield}, 0, 0, S_NULL}, // S_ARMAGEDDON_ICON5 + {SPR_TVAR, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_ARMAGEDDON_ICON2}, // S_ARMAGEDDON_ICON1 + {SPR_TVAR, 2, 17, {A_BombShield}, 0, 0, S_NULL}, // S_ARMAGEDDON_ICON2 - {SPR_TVWW, 2, 4, {NULL}, 0, 0, S_WHIRLWIND_ICON2}, // S_WHIRLWIND_ICON1 - {SPR_TVWW, 3, 4, {NULL}, 0, 0, S_WHIRLWIND_ICON3}, // S_WHIRLWIND_ICON2 - {SPR_TVWW, 4, 4, {NULL}, 0, 0, S_WHIRLWIND_ICON4}, // S_WHIRLWIND_ICON3 - {SPR_TVWW, 5, 4, {NULL}, 0, 0, S_WHIRLWIND_ICON5}, // S_WHIRLWIND_ICON4 - {SPR_TVWW, 2, 18, {A_JumpShield}, 0, 0, S_NULL}, // S_WHIRLWIND_ICON5 + {SPR_TVWW, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_WHIRLWIND_ICON2}, // S_WHIRLWIND_ICON1 + {SPR_TVWW, 2, 17, {A_JumpShield}, 0, 0, S_NULL}, // S_WHIRLWIND_ICON2 - {SPR_TVEL, 2, 4, {NULL}, 0, 0, S_ELEMENTAL_ICON2}, // S_ELEMENTAL_ICON1 - {SPR_TVEL, 3, 4, {NULL}, 0, 0, S_ELEMENTAL_ICON3}, // S_ELEMENTAL_ICON2 - {SPR_TVEL, 4, 4, {NULL}, 0, 0, S_ELEMENTAL_ICON4}, // S_ELEMENTAL_ICON3 - {SPR_TVEL, 5, 4, {NULL}, 0, 0, S_ELEMENTAL_ICON5}, // S_ELEMENTAL_ICON4 - {SPR_TVEL, 2, 18, {A_WaterShield}, 0, 0, S_NULL}, // S_ELEMENTAL_ICON5 + {SPR_TVEL, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_ELEMENTAL_ICON2}, // S_ELEMENTAL_ICON1 + {SPR_TVEL, 2, 17, {A_WaterShield}, 0, 0, S_NULL}, // S_ELEMENTAL_ICON2 - {SPR_TVSS, 2, 4, {NULL}, 0, 0, S_SNEAKERS_ICON2}, // S_SNEAKERS_ICON1 - {SPR_TVSS, 3, 4, {NULL}, 0, 0, S_SNEAKERS_ICON3}, // S_SNEAKERS_ICON2 - {SPR_TVSS, 4, 4, {NULL}, 0, 0, S_SNEAKERS_ICON4}, // S_SNEAKERS_ICON3 - {SPR_TVSS, 5, 4, {NULL}, 0, 0, S_SNEAKERS_ICON5}, // S_SNEAKERS_ICON4 - {SPR_TVSS, 2, 18, {A_SuperSneakers}, 0, 0, S_NULL}, // S_SNEAKERS_ICON5 + {SPR_TVSS, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_SNEAKERS_ICON2}, // S_SNEAKERS_ICON1 + {SPR_TVSS, 2, 17, {A_SuperSneakers}, 0, 0, S_NULL}, // S_SNEAKERS_ICON2 - {SPR_TVIV, 2, 4, {NULL}, 0, 0, S_INVULN_ICON2}, // S_INVULN_ICON1 - {SPR_TVIV, 3, 4, {NULL}, 0, 0, S_INVULN_ICON3}, // S_INVULN_ICON2 - {SPR_TVIV, 4, 4, {NULL}, 0, 0, S_INVULN_ICON4}, // S_INVULN_ICON3 - {SPR_TVIV, 5, 4, {NULL}, 0, 0, S_INVULN_ICON5}, // S_INVULN_ICON4 - {SPR_TVIV, 2, 18, {A_Invincibility}, 0, 0, S_NULL}, // S_INVULN_ICON5 + {SPR_TVIV, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_INVULN_ICON2}, // S_INVULN_ICON1 + {SPR_TVIV, 2, 17, {A_Invincibility}, 0, 0, S_NULL}, // S_INVULN_ICON2 - {SPR_TV1U, 2, 4, {NULL}, 0, 0, S_1UP_ICON2}, // S_1UP_ICON1 - {SPR_TV1U, 3, 4, {NULL}, 0, 0, S_1UP_ICON3}, // S_1UP_ICON2 - {SPR_TV1U, 4, 4, {NULL}, 0, 0, S_1UP_ICON4}, // S_1UP_ICON3 - {SPR_TV1U, 5, 4, {NULL}, 0, 0, S_1UP_ICON5}, // S_1UP_ICON4 - {SPR_TV1U, 2, 18, {A_ExtraLife}, 0, 0, S_NULL}, // S_1UP_ICON5 + {SPR_TV1U, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_1UP_ICON2}, // S_1UP_ICON1 + {SPR_TV1U, 2, 17, {A_ExtraLife}, 0, 0, S_NULL}, // S_1UP_ICON2 - {SPR_TVEG, 2, 4, {NULL}, 0, 0, S_EGGMAN_ICON2}, // S_EGGMAN_ICON1 - {SPR_TVEG, 3, 4, {NULL}, 0, 0, S_EGGMAN_ICON3}, // S_EGGMAN_ICON2 - {SPR_TVEG, 4, 4, {NULL}, 0, 0, S_EGGMAN_ICON4}, // S_EGGMAN_ICON3 - {SPR_TVEG, 5, 4, {NULL}, 0, 0, S_EGGMAN_ICON5}, // S_EGGMAN_ICON4 - {SPR_TVEG, 2, 18, {A_EggmanBox}, 0, 0, S_NULL}, // S_EGGMAN_ICON5 + {SPR_TVEG, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_EGGMAN_ICON2}, // S_EGGMAN_ICON1 + {SPR_TVEG, 2, 17, {A_EggmanBox}, 0, 0, S_NULL}, // S_EGGMAN_ICON2 - {SPR_TVMX, 2, 4, {NULL}, 0, 0, S_MIXUP_ICON2}, // S_MIXUP_ICON1 - {SPR_TVMX, 3, 4, {NULL}, 0, 0, S_MIXUP_ICON3}, // S_MIXUP_ICON2 - {SPR_TVMX, 4, 4, {NULL}, 0, 0, S_MIXUP_ICON4}, // S_MIXUP_ICON3 - {SPR_TVMX, 5, 4, {NULL}, 0, 0, S_MIXUP_ICON5}, // S_MIXUP_ICON4 - {SPR_TVMX, 2, 18, {A_MixUp}, 0, 0, S_NULL}, // S_MIXUP_ICON5 + {SPR_TVMX, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_MIXUP_ICON2}, // S_MIXUP_ICON1 + {SPR_TVMX, 2, 17, {A_MixUp}, 0, 0, S_NULL}, // S_MIXUP_ICON2 - {SPR_TVGV, 2, 4, {NULL}, 0, 0, S_GRAVITY_ICON2}, // S_GRAVITY_ICON1 - {SPR_TVGV, 3, 4, {NULL}, 0, 0, S_GRAVITY_ICON3}, // S_GRAVITY_ICON2 - {SPR_TVGV, 4, 4, {NULL}, 0, 0, S_GRAVITY_ICON4}, // S_GRAVITY_ICON3 - {SPR_TVGV, 5, 4, {NULL}, 0, 0, S_GRAVITY_ICON5}, // S_GRAVITY_ICON4 - {SPR_TVGV, 2, 18, {A_GravityBox}, 0, 0, S_NULL}, // S_GRAVITY_ICON5 + {SPR_TVGV, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_GRAVITY_ICON2}, // S_GRAVITY_ICON1 + {SPR_TVGV, 2, 17, {A_GravityBox}, 0, 0, S_NULL}, // S_GRAVITY_ICON2 - {SPR_TVRC, 2, 4, {NULL}, 0, 0, S_RECYCLER_ICON2}, // S_RECYCLER_ICON1 - {SPR_TVRC, 3, 4, {NULL}, 0, 0, S_RECYCLER_ICON3}, // S_RECYCLER_ICON2 - {SPR_TVRC, 4, 4, {NULL}, 0, 0, S_RECYCLER_ICON4}, // S_RECYCLER_ICON3 - {SPR_TVRC, 5, 4, {NULL}, 0, 0, S_RECYCLER_ICON5}, // S_RECYCLER_ICON4 - {SPR_TVRC, 2, 18, {A_RecyclePowers}, 0, 0, S_NULL}, // S_RECYCLER_ICON5 + {SPR_TVRC, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_RECYCLER_ICON2}, // S_RECYCLER_ICON1 + {SPR_TVRC, 2, 17, {A_RecyclePowers}, 0, 0, S_NULL}, // S_RECYCLER_ICON2 - {SPR_TV1K, 2, 4, {NULL}, 0, 0, S_SCORE1K_ICON2}, // S_SCORE1K_ICON1 - {SPR_TV1K, 3, 4, {NULL}, 0, 0, S_SCORE1K_ICON3}, // S_SCORE1K_ICON2 - {SPR_TV1K, 4, 4, {NULL}, 0, 0, S_SCORE1K_ICON4}, // S_SCORE1K_ICON3 - {SPR_TV1K, 5, 4, {NULL}, 0, 0, S_SCORE1K_ICON5}, // S_SCORE1K_ICON4 - {SPR_TV1K, 2, 18, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE1K_ICON5 + {SPR_TV1K, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_SCORE1K_ICON2}, // S_SCORE1K_ICON1 + {SPR_TV1K, 2, 17, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE1K_ICON2 - {SPR_TVTK, 2, 4, {NULL}, 0, 0, S_SCORE10K_ICON2}, // S_SCORE10K_ICON1 - {SPR_TVTK, 3, 4, {NULL}, 0, 0, S_SCORE10K_ICON3}, // S_SCORE10K_ICON2 - {SPR_TVTK, 4, 4, {NULL}, 0, 0, S_SCORE10K_ICON4}, // S_SCORE10K_ICON3 - {SPR_TVTK, 5, 4, {NULL}, 0, 0, S_SCORE10K_ICON5}, // S_SCORE10K_ICON4 - {SPR_TVTK, 2, 18, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE10K_ICON5 + {SPR_TVTK, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_SCORE10K_ICON2}, // S_SCORE10K_ICON1 + {SPR_TVTK, 2, 17, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE10K_ICON2 // --- diff --git a/src/info.h b/src/info.h index 79d4a5495..5f1b8c29b 100644 --- a/src/info.h +++ b/src/info.h @@ -1745,102 +1745,54 @@ typedef enum state S_BLUEBOX_POP1, S_BLUEBOX_POP2, - // Box Icons -- 5 states each, one for each part of the twirl + // Box Icons -- 2 states each, animation and action S_RING_ICON1, S_RING_ICON2, - S_RING_ICON3, - S_RING_ICON4, - S_RING_ICON5, S_PITY_ICON1, S_PITY_ICON2, - S_PITY_ICON3, - S_PITY_ICON4, - S_PITY_ICON5, S_ATTRACT_ICON1, S_ATTRACT_ICON2, - S_ATTRACT_ICON3, - S_ATTRACT_ICON4, - S_ATTRACT_ICON5, S_FORCE_ICON1, S_FORCE_ICON2, - S_FORCE_ICON3, - S_FORCE_ICON4, - S_FORCE_ICON5, S_ARMAGEDDON_ICON1, S_ARMAGEDDON_ICON2, - S_ARMAGEDDON_ICON3, - S_ARMAGEDDON_ICON4, - S_ARMAGEDDON_ICON5, S_WHIRLWIND_ICON1, S_WHIRLWIND_ICON2, - S_WHIRLWIND_ICON3, - S_WHIRLWIND_ICON4, - S_WHIRLWIND_ICON5, S_ELEMENTAL_ICON1, S_ELEMENTAL_ICON2, - S_ELEMENTAL_ICON3, - S_ELEMENTAL_ICON4, - S_ELEMENTAL_ICON5, S_SNEAKERS_ICON1, S_SNEAKERS_ICON2, - S_SNEAKERS_ICON3, - S_SNEAKERS_ICON4, - S_SNEAKERS_ICON5, S_INVULN_ICON1, S_INVULN_ICON2, - S_INVULN_ICON3, - S_INVULN_ICON4, - S_INVULN_ICON5, S_1UP_ICON1, S_1UP_ICON2, - S_1UP_ICON3, - S_1UP_ICON4, - S_1UP_ICON5, S_EGGMAN_ICON1, S_EGGMAN_ICON2, - S_EGGMAN_ICON3, - S_EGGMAN_ICON4, - S_EGGMAN_ICON5, S_MIXUP_ICON1, S_MIXUP_ICON2, - S_MIXUP_ICON3, - S_MIXUP_ICON4, - S_MIXUP_ICON5, S_GRAVITY_ICON1, S_GRAVITY_ICON2, - S_GRAVITY_ICON3, - S_GRAVITY_ICON4, - S_GRAVITY_ICON5, S_RECYCLER_ICON1, S_RECYCLER_ICON2, - S_RECYCLER_ICON3, - S_RECYCLER_ICON4, - S_RECYCLER_ICON5, S_SCORE1K_ICON1, S_SCORE1K_ICON2, - S_SCORE1K_ICON3, - S_SCORE1K_ICON4, - S_SCORE1K_ICON5, S_SCORE10K_ICON1, S_SCORE10K_ICON2, - S_SCORE10K_ICON3, - S_SCORE10K_ICON4, - S_SCORE10K_ICON5, // --- From 92da1413945ec69a35af8c4152a837877da48b81 Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Thu, 29 Sep 2016 17:27:33 -0700 Subject: [PATCH 10/13] Yes, that stupid off-by-one due to spawning objects in the middle of thinkers being run still applies. --- src/info.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/info.c b/src/info.c index 86e51fc9f..d48ecfa79 100644 --- a/src/info.c +++ b/src/info.c @@ -222,7 +222,7 @@ state_t states[NUMSTATES] = {SPR_NULL, 0, 1, {NULL}, 0, 0, S_PLAY_BOX1}, // S_PLAY_BOX2 {SPR_PLAY, SPR2_LIFE, 4, {NULL}, 0, 4, S_PLAY_ICON2}, // S_PLAY_ICON1 {SPR_NULL, 0, 12, {NULL}, 0, 0, S_PLAY_ICON3}, // S_PLAY_ICON2 - {SPR_PLAY, SPR2_LIFE, 19, {NULL}, 0, 4, S_NULL}, // S_PLAY_ICON3 + {SPR_PLAY, SPR2_LIFE, 20, {NULL}, 0, 4, S_NULL}, // S_PLAY_ICON3 // Level end sign (uses player sprite) {SPR_PLAY, SPR2_SIGN, 1, {NULL}, 0, 24, S_PLAY_SIGN}, // S_PLAY_SIGN @@ -1256,52 +1256,52 @@ state_t states[NUMSTATES] = // Box Icons -- 2 states each, animation and action {SPR_TVRI, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_RING_ICON2}, // S_RING_ICON1 - {SPR_TVRI, 2, 17, {A_RingBox}, 0, 0, S_NULL}, // S_RING_ICON2 + {SPR_TVRI, 2, 18, {A_RingBox}, 0, 0, S_NULL}, // S_RING_ICON2 {SPR_TVPI, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_PITY_ICON2}, // S_PITY_ICON1 - {SPR_TVPI, 2, 17, {A_PityShield}, 0, 0, S_NULL}, // S_PITY_ICON2 + {SPR_TVPI, 2, 18, {A_PityShield}, 0, 0, S_NULL}, // S_PITY_ICON2 {SPR_TVAT, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_ATTRACT_ICON2}, // S_ATTRACT_ICON1 - {SPR_TVAT, 2, 17, {A_RingShield},0, 0, S_NULL}, // S_ATTRACT_ICON2 + {SPR_TVAT, 2, 18, {A_RingShield},0, 0, S_NULL}, // S_ATTRACT_ICON2 {SPR_TVFO, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_FORCE_ICON2}, // S_FORCE_ICON1 - {SPR_TVFO, 2, 17, {A_ForceShield}, 0, 0, S_NULL}, // S_FORCE_ICON2 + {SPR_TVFO, 2, 18, {A_ForceShield}, 0, 0, S_NULL}, // S_FORCE_ICON2 {SPR_TVAR, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_ARMAGEDDON_ICON2}, // S_ARMAGEDDON_ICON1 - {SPR_TVAR, 2, 17, {A_BombShield}, 0, 0, S_NULL}, // S_ARMAGEDDON_ICON2 + {SPR_TVAR, 2, 18, {A_BombShield}, 0, 0, S_NULL}, // S_ARMAGEDDON_ICON2 {SPR_TVWW, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_WHIRLWIND_ICON2}, // S_WHIRLWIND_ICON1 - {SPR_TVWW, 2, 17, {A_JumpShield}, 0, 0, S_NULL}, // S_WHIRLWIND_ICON2 + {SPR_TVWW, 2, 18, {A_JumpShield}, 0, 0, S_NULL}, // S_WHIRLWIND_ICON2 {SPR_TVEL, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_ELEMENTAL_ICON2}, // S_ELEMENTAL_ICON1 - {SPR_TVEL, 2, 17, {A_WaterShield}, 0, 0, S_NULL}, // S_ELEMENTAL_ICON2 + {SPR_TVEL, 2, 18, {A_WaterShield}, 0, 0, S_NULL}, // S_ELEMENTAL_ICON2 {SPR_TVSS, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_SNEAKERS_ICON2}, // S_SNEAKERS_ICON1 - {SPR_TVSS, 2, 17, {A_SuperSneakers}, 0, 0, S_NULL}, // S_SNEAKERS_ICON2 + {SPR_TVSS, 2, 18, {A_SuperSneakers}, 0, 0, S_NULL}, // S_SNEAKERS_ICON2 {SPR_TVIV, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_INVULN_ICON2}, // S_INVULN_ICON1 - {SPR_TVIV, 2, 17, {A_Invincibility}, 0, 0, S_NULL}, // S_INVULN_ICON2 + {SPR_TVIV, 2, 18, {A_Invincibility}, 0, 0, S_NULL}, // S_INVULN_ICON2 {SPR_TV1U, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_1UP_ICON2}, // S_1UP_ICON1 - {SPR_TV1U, 2, 17, {A_ExtraLife}, 0, 0, S_NULL}, // S_1UP_ICON2 + {SPR_TV1U, 2, 18, {A_ExtraLife}, 0, 0, S_NULL}, // S_1UP_ICON2 {SPR_TVEG, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_EGGMAN_ICON2}, // S_EGGMAN_ICON1 - {SPR_TVEG, 2, 17, {A_EggmanBox}, 0, 0, S_NULL}, // S_EGGMAN_ICON2 + {SPR_TVEG, 2, 18, {A_EggmanBox}, 0, 0, S_NULL}, // S_EGGMAN_ICON2 {SPR_TVMX, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_MIXUP_ICON2}, // S_MIXUP_ICON1 - {SPR_TVMX, 2, 17, {A_MixUp}, 0, 0, S_NULL}, // S_MIXUP_ICON2 + {SPR_TVMX, 2, 18, {A_MixUp}, 0, 0, S_NULL}, // S_MIXUP_ICON2 {SPR_TVGV, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_GRAVITY_ICON2}, // S_GRAVITY_ICON1 - {SPR_TVGV, 2, 17, {A_GravityBox}, 0, 0, S_NULL}, // S_GRAVITY_ICON2 + {SPR_TVGV, 2, 18, {A_GravityBox}, 0, 0, S_NULL}, // S_GRAVITY_ICON2 {SPR_TVRC, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_RECYCLER_ICON2}, // S_RECYCLER_ICON1 - {SPR_TVRC, 2, 17, {A_RecyclePowers}, 0, 0, S_NULL}, // S_RECYCLER_ICON2 + {SPR_TVRC, 2, 18, {A_RecyclePowers}, 0, 0, S_NULL}, // S_RECYCLER_ICON2 {SPR_TV1K, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_SCORE1K_ICON2}, // S_SCORE1K_ICON1 - {SPR_TV1K, 2, 17, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE1K_ICON2 + {SPR_TV1K, 2, 18, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE1K_ICON2 {SPR_TVTK, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_SCORE10K_ICON2}, // S_SCORE10K_ICON1 - {SPR_TVTK, 2, 17, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE10K_ICON2 + {SPR_TVTK, 2, 18, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE10K_ICON2 // --- From ae542e616a869a237b3bac156c02462b08552910 Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Thu, 29 Sep 2016 19:24:05 -0700 Subject: [PATCH 11/13] Fixed sprite conflict BS Also added the eggman goldbox back --- src/info.c | 397 ++++++++++++++++++++++++++++++++++++++++++++++++----- src/info.h | 2 + 2 files changed, 363 insertions(+), 36 deletions(-) diff --git a/src/info.c b/src/info.c index 1817483f5..884217611 100644 --- a/src/info.c +++ b/src/info.c @@ -25,63 +25,360 @@ #endif // Hey, moron! If you change this table, don't forget about the sprite enum in info.h and the sprite lights in hw_light.c! +// For the sake of constant merge conflicts, let's spread this out char sprnames[NUMSPRITES + 1][5] = { - "NULL","UNKN","THOK","PLAY", + "NULL", // invisible object + "UNKN", - "POSS","SPOS","FISH","BUZZ","RBUZ","JETB","JETW","JETG","CCOM","DETN", - "SKIM","TRET","TURR","SHRP","JJAW","SNLR","VLTR","PNTY","ARCH","CBFS", - "SPSH","ESHI","GSNP","MNUS","SSHL","UNID","BBUZ", + "THOK", // Thok! mobj + "PLAY", - "JETF","EGGM","EGGN","TNKA","TNKB","SPNK","GOOP","EGGO","PRPL","FAKE", - "EGGP","EFIR","EGGQ","EGGR","BRAK","BGOO","BMSL","EGGT","RCKT","ELEC", - "TARG","NPLM","MNPL","METL","MSCF","MSCB", + // Enemies + "POSS", + "SPOS", + "FISH", // Greenflower Fish + "BUZZ", // Buzz (Gold) + "RBUZ", // Buzz (Red) + "JETB", // Jetty-Syn Bomber + "JETW", // Jetty-Syn Water Bomber + "JETG", // Jetty-Syn Gunner + "CCOM", // Crawla Commander + "DETN", // Deton + "SKIM", // Skim mine dropper + "TRET", + "TURR", // Pop-Up Turret + "SHRP", // Sharp + "JJAW", // Jet Jaw + "SNLR", // Snailer + "VLTR", // Vulture + "PNTY", // Pointy + "ARCH", // Robo-Hood + "CBFS", // CastleBot FaceStabber (Egg Knight?) + "SPSH", // Egg Guard + "ESHI", // Egg Shield for Egg Guard + "GSNP", // Green Snapper + "MNUS", // Minus + "SSHL", // Spring Shell + "UNID", // Unidus + "BBUZ", // AquaBuzz, for Azure Temple - "RING","TRNG","EMMY","TOKE","RFLG","BFLG","NWNG","EMBM","CEMG","EMER", + // Generic Boss Items + "JETF", // Boss jet fumes - "FANS","BBLS","SIGN","STEM","SPIK","SFLM","USPK","STPT","BMNE", + // Boss 1 (Greenflower) + "EGGM", - "MSTV","XLTV","TRRI","TBRI","TVRI","TVPI","TVAT","TVFO","TVAR","TVWW", - "TVEL","TVSS","TVIV","TV1U","TV1P","TVEG","TVMX","TVMY","TVGV","TVRC", - "TV1K","TVTK", + // Boss 2 (Techno Hill) + "EGGN", // Boss 2 + "TNKA", // Boss 2 Tank 1 + "TNKB", // Boss 2 Tank 2 + "SPNK", // Boss 2 Spigot + "GOOP", // Boss 2 Goop - "MISL","TORP","ENRG","MINE","JBUL","TRLS","CBLL","AROW","CFIR", + // Boss 3 (Deep Sea) + "EGGO", // Boss 3 + "PRPL", // Boss 3 Propeller + "FAKE", // Boss 3 Fakemobile - "FWR1","FWR2","FWR3","FWR4","BUS1","BUS2","THZP","ALRM","GARG","SEWE", - "DRIP","CRL1","CRL2","CRL3","BCRY","CHAN","FLAM","ESTA","SMCH","BMCH", - "SMCE","BMCE","BTBL","STBL","CACT","FLME","DFLM","XMS1","XMS2","XMS3", - "BSZ1","BSZ2","BSZ3","BSZ4","BSZ5","BSZ6","BSZ7","BSZ8","STLG","DBAL", - "RCRY", + // Boss 4 (Castle Eggman) + "EGGP", + "EFIR", // Boss 4 jet flame - "ARMA","ARMF","ARMB","WIND","MAGN","ELEM","FORC","PITY","IVSP","SSPK", - "GOAL", + // Boss 5 (Arid Canyon) + "EGGQ", - "BIRD","BUNY","MOUS","CHIC","COWZ","RBRD", + // Boss 6 (Red Volcano) + "EGGR", - "SPRY","SPRR","SPRB","YSPR","RSPR","SSWY","SSWR","SSWB", + // Boss 7 (Dark City) + "BRAK", + "BGOO", // Goop + "BMSL", - "RAIN","SNO1","SPLH","SPLA","SMOK","BUBL","WZAP","TFOG","SEED","PRTL", + // Boss 8 (Egg Rock) + "EGGT", - "SCOR","DRWN","TTAG","GFLG", + // Cy-Brak-Demon; uses "BRAK" as well, but has some extras + "RCKT", // Rockets! + "ELEC", // Electricity! + "TARG", // Targeting reticules! + "NPLM", // Big napalm bombs! + "MNPL", // Mini napalm bombs! - "RRNG","RNGB","RNGR","RNGI","RNGA","RNGE","RNGS","RNGG","PIKB","PIKR", - "PIKA","PIKE","PIKS","PIKG","TAUT","TGRE","TSCR", + // Metal Sonic + "METL", + "MSCF", + "MSCB", - "COIN","CPRK","GOOM","BGOM","FFWR","FBLL","SHLL","PUMA","HAMM","KOOP", - "BFLM","MAXE","MUS1","MUS2","TOAD","NDRN", + // Collectible Items + "RING", + "TRNG", // Team Rings + "EMMY", // emerald test + "TOKE", // Special Stage Token + "RFLG", // Red CTF Flag + "BFLG", // Blue CTF Flag + "NWNG", // NiGHTS Wing collectable item. + "EMBM", // Emblem + "CEMG", // Chaos Emeralds + "EMER", // Emerald Hunt - "SUPE","SUPZ","NDRL","NSPK","NBMP","HOOP","NSCR","NPRU","CAPS","SUPT", - "SPRK", + // Interactive Objects + "FANS", + "BBLS", // water bubble source + "SIGN", // Level end sign + "STEM", // Steam riser + "SPIK", // Spike Ball + "SFLM", // Spin fire + "USPK", // Floor spike + "STPT", // Starpost + "BMNE", // Big floating mine - "BOM1","BOM2","BOM3","BOM4", + // Monitor Boxes + "MSTV", // MiSc TV sprites + "XLTV", // eXtra Large TV sprites - "ROIA","ROIB","ROIC","ROID","ROIE","ROIF","ROIG","ROIH","ROII","ROIJ", - "ROIK","ROIL","ROIM","ROIN","ROIO","ROIP", + "TRRI", // Red team: 10 RIngs + "TBRI", // Blue team: 10 RIngs - "BBAL","GWLG","GWLR", + "TVRI", // 10 RIng + "TVPI", // PIty shield + "TVAT", // ATtraction shield + "TVFO", // FOrce shield + "TVAR", // ARmageddon shield + "TVWW", // WhirlWind shield + "TVEL", // ELemental shield + "TVSS", // Super Sneakers + "TVIV", // InVincibility + "TV1U", // 1Up + "TV1P", // 1uP (textless) + "TVEG", // EGgman + "TVMX", // MiXup + "TVMY", // MYstery + "TVGV", // GraVity boots + "TVRC", // ReCycler + "TV1K", // 1,000 points (1 K) + "TVTK", // 10,000 points (Ten K) - "SRBA","SRBB","SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI","SRBJ", - "SRBK","SRBL","SRBM","SRBN","SRBO", + // Projectiles + "MISL", + "TORP", // Torpedo + "ENRG", // Energy ball + "MINE", // Skim mine + "JBUL", // Jetty-Syn Bullet + "TRLS", + "CBLL", // Cannonball + "AROW", // Arrow + "CFIR", // Colored fire of various sorts + + // Greenflower Scenery + "FWR1", + "FWR2", // GFZ Sunflower + "FWR3", // GFZ budding flower + "FWR4", + "BUS1", // GFZ Bush w/ berries + "BUS2", // GFZ Bush w/o berries + + // Techno Hill Scenery + "THZP", // Techno Hill Zone Plant + "ALRM", // THZ2 Alarm + + // Deep Sea Scenery + "GARG", // Deep Sea Gargoyle + "SEWE", // Deep Sea Seaweed + "DRIP", // Dripping water + "CRL1", // Coral 1 + "CRL2", // Coral 2 + "CRL3", // Coral 3 + "BCRY", // Blue Crystal + + // Castle Eggman Scenery + "CHAN", // CEZ Chain + "FLAM", // Flame + "ESTA", // Eggman esta una estatua! + "SMCH", // Small Mace Chain + "BMCH", // Big Mace Chain + "SMCE", // Small Mace + "BMCE", // Big Mace + + // Arid Canyon Scenery + "BTBL", // Big tumbleweed + "STBL", // Small tumbleweed + "CACT", // Cacti sprites + + // Red Volcano Scenery + "FLME", // Flame jet + "DFLM", // Blade's flame + + // Dark City Scenery + + // Egg Rock Scenery + + // Christmas Scenery + "XMS1", + "XMS2", + "XMS3", + + // Botanic Serenity Scenery + "BSZ1", // Tall flowers + "BSZ2", // Medium flowers + "BSZ3", // Small flowers + "BSZ4", // Tulip + "BSZ5", // Cluster of Tulips + "BSZ6", // Bush + "BSZ7", // Vine + "BSZ8", // Misc things + + // Misc Scenery + "STLG", // Stalagmites + "DBAL", // Disco + "RCRY", // ATZ Red Crystal (Target) + + // Powerup Indicators + "ARMA", // Armageddon Shield Orb + "ARMF", // Armageddon Shield Ring, Front + "ARMB", // Armageddon Shield Ring, Back + "WIND", // Whirlwind Shield Orb + "MAGN", // Attract Shield Orb + "ELEM", // Elemental Shield Orb and Fire + "FORC", // Force Shield Orb + "PITY", // Pity Shield Orb + "IVSP", // invincibility sparkles + "SSPK", // Super Sonic Spark + + "GOAL", // Special Stage goal (here because lol NiGHTS) + + // Freed Animals + "BIRD", // Birdie freed! + "BUNY", // Bunny freed! + "MOUS", // Mouse + "CHIC", // Chicken + "COWZ", // Cow + "RBRD", // Red Birdie in Bubble + + // Springs + "SPRY", // yellow spring + "SPRR", // red spring + "SPRB", // Blue springs + "YSPR", // Yellow Diagonal Spring + "RSPR", // Red Diagonal Spring + "SSWY", // Yellow Side Spring + "SSWR", // Red Side Spring + "SSWB", // Blue Side Spring + + // Environmental Effects + "RAIN", // Rain + "SNO1", // Snowflake + "SPLH", // Water Splish + "SPLA", // Water Splash + "SMOK", + "BUBL", // Bubble + "WZAP", + "TFOG", // Teleport Fog + "SEED", // Sonic CD flower seed + "PRTL", // Particle (for fans, etc.) + + // Game Indicators + "SCOR", // Score logo + "DRWN", // Drowning Timer + "TTAG", // Tag Sign + "GFLG", // Got Flag sign + + // Ring Weapons + "RRNG", // Red Ring + "RNGB", // Bounce Ring + "RNGR", // Rail Ring + "RNGI", // Infinity Ring + "RNGA", // Automatic Ring + "RNGE", // Explosion Ring + "RNGS", // Scatter Ring + "RNGG", // Grenade Ring + + "PIKB", // Bounce Ring Pickup + "PIKR", // Rail Ring Pickup + "PIKA", // Automatic Ring Pickup + "PIKE", // Explosion Ring Pickup + "PIKS", // Scatter Ring Pickup + "PIKG", // Grenade Ring Pickup + + "TAUT", // Thrown Automatic Ring + "TGRE", // Thrown Grenade Ring + "TSCR", // Thrown Scatter Ring + + // Mario-specific stuff + "COIN", + "CPRK", + "GOOM", + "BGOM", + "FFWR", + "FBLL", + "SHLL", + "PUMA", + "HAMM", + "KOOP", + "BFLM", + "MAXE", + "MUS1", + "MUS2", + "TOAD", + + // NiGHTS Stuff + "NDRN", // NiGHTS drone + "NSPK", // NiGHTS sparkle + "NBMP", // NiGHTS Bumper + "HOOP", // NiGHTS hoop sprite + "NSCR", // NiGHTS score sprite + "NPRU", // Nights Powerups + "CAPS", // Capsule thingy for NiGHTS + + // Debris + "SPRK", // spark + "BOM1", // Robot Explosion + "BOM2", // Boss Explosion 1 + "BOM3", // Boss Explosion 2 + "BOM4", // Underwater Explosion + + // Crumbly rocks + "ROIA", + "ROIB", + "ROIC", + "ROID", + "ROIE", + "ROIF", + "ROIG", + "ROIH", + "ROII", + "ROIJ", + "ROIK", + "ROIL", + "ROIM", + "ROIN", + "ROIO", + "ROIP", + + // Blue Spheres + "BBAL", + + // Gravity Well Objects + "GWLG", + "GWLR", + + // SRB1 Sprites + "SRBA", + "SRBB", + "SRBC", + "SRBD", + "SRBE", + "SRBF", + "SRBG", + "SRBH", + "SRBI", + "SRBJ", + "SRBK", + "SRBL", + "SRBM", + "SRBN", + "SRBO", }; char spr2names[NUMPLAYERSPRITES][5] = @@ -1336,6 +1633,7 @@ state_t states[NUMSTATES] = {SPR_TVEL, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_ELEMENTAL_GOLDBOX {SPR_TVSS, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_SNEAKERS_GOLDBOX {SPR_TVIV, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_INVULN_GOLDBOX + {SPR_TVEG, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_EGGMAN_GOLDBOX {SPR_TVGV, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_GRAVITY_GOLDBOX // Team Ring Boxes (these are special) @@ -6344,6 +6642,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_EGGMAN_GOLDBOX + 440, // doomednum + S_EGGMAN_GOLDBOX, // spawnstate + 1, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_monton, // attacksound + S_EGGMAN_GOLDBOX, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_GOLDBOX_OFF1, // deathstate + S_NULL, // xdeathstate + sfx_pop, // deathsound + 0, // speed + 16*FRACUNIT, // radius + 36*FRACUNIT, // height + 0, // display offset + 100, // mass + MT_EGGMAN_ICON, // damage + sfx_None, // activesound + MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags + S_NULL // raisestate + }, + { // MT_GRAVITY_GOLDBOX 443, // doomednum S_GRAVITY_GOLDBOX, // spawnstate diff --git a/src/info.h b/src/info.h index df4883435..8f9e473aa 100644 --- a/src/info.h +++ b/src/info.h @@ -1824,6 +1824,7 @@ typedef enum state S_ELEMENTAL_GOLDBOX, S_SNEAKERS_GOLDBOX, S_INVULN_GOLDBOX, + S_EGGMAN_GOLDBOX, S_GRAVITY_GOLDBOX, // Team Ring Boxes (these are special) @@ -3164,6 +3165,7 @@ typedef enum mobj_type MT_ELEMENTAL_GOLDBOX, MT_SNEAKERS_GOLDBOX, MT_INVULN_GOLDBOX, + MT_EGGMAN_GOLDBOX, MT_GRAVITY_GOLDBOX, // Monitor boxes -- special From 074cc9b96520999ae808a14c0688ab07e202a41f Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Thu, 29 Sep 2016 19:32:21 -0700 Subject: [PATCH 12/13] Dehacked, as usual --- src/dehacked.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/dehacked.c b/src/dehacked.c index 4d73ea41b..43391cde3 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -4918,6 +4918,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_ELEMENTAL_GOLDBOX", "S_SNEAKERS_GOLDBOX", "S_INVULN_GOLDBOX", + "S_EGGMAN_GOLDBOX", "S_GRAVITY_GOLDBOX", // Team Ring Boxes (these are special) @@ -6237,6 +6238,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_ELEMENTAL_GOLDBOX", "MT_SNEAKERS_GOLDBOX", "MT_INVULN_GOLDBOX", + "MT_EGGMAN_GOLDBOX", "MT_GRAVITY_GOLDBOX", // Monitor boxes -- special From 64e8c8581ec379adf402df121f0729050b0f2fe0 Mon Sep 17 00:00:00 2001 From: Inuyasha Date: Fri, 30 Sep 2016 05:04:08 -0700 Subject: [PATCH 13/13] add missing prototypes --- src/p_enemy.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/p_enemy.c b/src/p_enemy.c index 3b598fb8b..d43942d88 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -86,6 +86,9 @@ void A_Scream(mobj_t *actor); void A_Pain(mobj_t *actor); void A_1upThinker(mobj_t *actor); void A_MonitorPop(mobj_t *actor); +void A_GoldMonitorPop(mobj_t *actor); +void A_GoldMonitorRestore(mobj_t *actor); +void A_GoldMonitorSparkle(mobj_t *actor); void A_Explode(mobj_t *actor); void A_BossDeath(mobj_t *actor); void A_CustomPower(mobj_t *actor);