Sonic 3 shields implemented at a basic visual/functional level - no abilities yet.

This commit is contained in:
toasterbabe 2016-10-13 15:13:33 +01:00
parent 6e47a07a04
commit 3aa9d2a1b1
10 changed files with 779 additions and 62 deletions

View File

@ -186,12 +186,12 @@ typedef enum
SH_ATTRACT,
SH_ELEMENTAL,
SH_BOMB,
// Stupid useless unimplimented Sonic 3 shields
SH_BUBBLEWRAP,
SH_THUNDERCOIN,
SH_FLAMEAURA,
// Pity shield: the world's most basic shield ever, given to players who suck at Match
SH_PITY,
// Sonic 3 shields
SH_FLAMEAURA,
SH_BUBBLEWRAP,
SH_THUNDERCOIN,
// The fireflower used to be stackable with other shields. Not anymore.
SH_FIREFLOWER,
// The force shield uses the lower 8 bits to count how many extra hits are left.

View File

@ -1687,6 +1687,9 @@ static actionpointer_t actionpointers[] =
{{A_WaterShield}, "A_WATERSHIELD"},
{{A_ForceShield}, "A_FORCESHIELD"},
{{A_PityShield}, "A_PITYSHIELD"},
{{A_FlameShield}, "A_FLAMESHIELD"},
{{A_BubbleShield}, "A_BUBBLESHIELD"},
{{A_ThunderShield}, "A_THUNDERSHIELD"},
{{A_GravityBox}, "A_GRAVITYBOX"},
{{A_ScoreRise}, "A_SCORERISE"},
{{A_ParticleSpawn}, "A_PARTICLESPAWN"},
@ -4908,6 +4911,9 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_RECYCLER_BOX",
"S_SCORE1K_BOX",
"S_SCORE10K_BOX",
"S_FLAMEAURA_BOX",
"S_BUBBLEWRAP_BOX",
"S_THUNDERCOIN_BOX",
// Gold Repeat Monitor States (one per box)
"S_PITY_GOLDBOX",
@ -4920,6 +4926,9 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_INVULN_GOLDBOX",
"S_EGGMAN_GOLDBOX",
"S_GRAVITY_GOLDBOX",
"S_FLAMEAURA_GOLDBOX",
"S_BUBBLEWRAP_GOLDBOX",
"S_THUNDERCOIN_GOLDBOX",
// Team Ring Boxes (these are special)
"S_RING_REDBOX1",
@ -4981,6 +4990,15 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_SCORE10K_ICON1",
"S_SCORE10K_ICON2",
"S_FLAMEAURA_ICON1",
"S_FLAMEAURA_ICON2",
"S_BUBBLEWRAP_ICON1",
"S_BUBBLEWRAP_ICON2",
"S_THUNDERCOIN_ICON1",
"S_THUNDERCOIN_ICON2",
"S_ROCKET",
"S_LASER",
@ -5409,6 +5427,68 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_PITY9",
"S_PITY10",
"S_FIRS1",
"S_FIRS2",
"S_FIRS3",
"S_FIRS4",
"S_FIRS5",
"S_FIRS6",
"S_FIRS7",
"S_FIRS8",
"S_FIRS9",
"S_FIRSB1",
"S_FIRSB2",
"S_FIRSB3",
"S_FIRSB4",
"S_FIRSB5",
"S_FIRSB6",
"S_FIRSB7",
"S_FIRSB8",
"S_FIRSB9",
"S_BUBS1",
"S_BUBS2",
"S_BUBS3",
"S_BUBS4",
"S_BUBS5",
"S_BUBS6",
"S_BUBS7",
"S_BUBS8",
"S_BUBS9",
"S_BUBSB1",
"S_BUBSB2",
"S_ZAPS1",
"S_ZAPS2",
"S_ZAPS3",
"S_ZAPS4",
"S_ZAPS5",
"S_ZAPS6",
"S_ZAPS7",
"S_ZAPS8",
"S_ZAPS9",
"S_ZAPS10",
"S_ZAPS11",
"S_ZAPS12",
"S_ZAPS13", // blank frame
"S_ZAPS14",
"S_ZAPS15",
"S_ZAPS16",
"S_ZAPSB1", // blank frame
"S_ZAPSB2",
"S_ZAPSB3",
"S_ZAPSB4",
"S_ZAPSB5",
"S_ZAPSB6",
"S_ZAPSB7",
"S_ZAPSB8",
"S_ZAPSB9",
"S_ZAPSB10",
"S_ZAPSB11", // blank frame
// Invincibility Sparkles
"S_IVSP",
@ -6231,6 +6311,9 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_RECYCLER_BOX",
"MT_SCORE1K_BOX",
"MT_SCORE10K_BOX",
"MT_FLAMEAURA_BOX",
"MT_BUBBLEWRAP_BOX",
"MT_THUNDERCOIN_BOX",
// Monitor boxes -- repeating (big) boxes
"MT_PITY_GOLDBOX",
@ -6243,6 +6326,9 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_INVULN_GOLDBOX",
"MT_EGGMAN_GOLDBOX",
"MT_GRAVITY_GOLDBOX",
"MT_FLAMEAURA_GOLDBOX",
"MT_BUBBLEWRAP_GOLDBOX",
"MT_THUNDERCOIN_GOLDBOX",
// Monitor boxes -- special
"MT_RING_REDBOX",
@ -6265,6 +6351,9 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_RECYCLER_ICON",
"MT_SCORE1K_ICON",
"MT_SCORE10K_ICON",
"MT_FLAMEAURA_ICON",
"MT_BUBBLEWRAP_ICON",
"MT_THUNDERCOIN_ICON",
// Projectiles
"MT_ROCKET",
@ -6417,12 +6506,15 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_EGGSTATUE2",
// Powerup Indicators
"MT_GREENORB", // Elemental shield mobj
"MT_YELLOWORB", // Attract shield mobj
"MT_BLUEORB", // Force shield mobj
"MT_BLACKORB", // Armageddon shield mobj
"MT_WHITEORB", // Whirlwind shield mobj
"MT_PITYORB", // Pity shield mobj
"MT_ELEMENTAL_ORB", // Elemental shield mobj
"MT_ATTRACT_ORB", // Attract shield mobj
"MT_FORCE_ORB", // Force shield mobj
"MT_BOMB_ORB", // Armageddon shield mobj
"MT_JUMP_ORB", // Whirlwind shield mobj
"MT_PITY_ORB", // Pity shield mobj
"MT_FLAMEAURA_ORB", // Flame shield mobj
"MT_BUBBLEWRAP_ORB", // Bubble shield mobj
"MT_THUNDERCOIN_ORB", // Thunder shield mobj
"MT_IVSP", // invincibility sparkles
"MT_SUPERSPARK", // Super Sonic Spark

View File

@ -271,6 +271,9 @@ light_t *t_lspr[NUMSPRITES] =
&lspr[NOLIGHT], // SPR_TVRC
&lspr[NOLIGHT], // SPR_TV1K
&lspr[NOLIGHT], // SPR_TVTK
&lspr[NOLIGHT], // SPR_TVFL
&lspr[NOLIGHT], // SPR_TVBB
&lspr[NOLIGHT], // SPR_TVZP
// Projectiles
&lspr[NOLIGHT], // SPR_MISL
@ -359,6 +362,9 @@ light_t *t_lspr[NUMSPRITES] =
&lspr[NOLIGHT], // SPR_ELEM
&lspr[NOLIGHT], // SPR_FORC
&lspr[NOLIGHT], // SPR_PITY
&lspr[NOLIGHT], // SPR_FIRS
&lspr[NOLIGHT], // SPR_BUBS
&lspr[NOLIGHT], // SPR_ZAPS
&lspr[INVINCIBLE_L], // SPR_IVSP
&lspr[SUPERSPARK_L], // SPR_SSPK

View File

@ -159,6 +159,9 @@ char sprnames[NUMSPRITES + 1][5] =
"TVRC", // ReCycler
"TV1K", // 1,000 points (1 K)
"TVTK", // 10,000 points (Ten K)
"TVFL", // FLame shield
"TVBB", // BuBble shield
"TVZP", // Thunder shield (ZaP)
// Projectiles
"MISL",
@ -243,6 +246,9 @@ char sprnames[NUMSPRITES + 1][5] =
"ELEM", // Elemental Shield Orb and Fire
"FORC", // Force Shield Orb
"PITY", // Pity Shield Orb
"FIRS", // Flame Shield Orb
"BUBS", // Bubble Shield Orb
"ZAPS", // Thunder Shield Orb
"IVSP", // invincibility sparkles
"SSPK", // Super Sonic Spark
@ -1623,6 +1629,9 @@ state_t states[NUMSTATES] =
{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
{SPR_TVFL, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_FLAMEAURA_BOX
{SPR_TVBB, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_BUBBLEWRAP_BOX
{SPR_TVZP, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_THUNDERCOIN_BOX
// Gold Repeat Monitor States (one per box)
{SPR_TVPI, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_PITY_GOLDBOX
@ -1635,6 +1644,9 @@ state_t states[NUMSTATES] =
{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
{SPR_TVFL, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_FLAMEAURA_GOLDBOX
{SPR_TVBB, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_BUBBLEWRAP_GOLDBOX
{SPR_TVZP, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_THUNDERCOIN_GOLDBOX
// Team Ring Boxes (these are special)
{SPR_TRRI, 0, 2, {NULL}, 0, 0, S_RING_REDBOX2}, // S_RING_REDBOX1
@ -1696,6 +1708,15 @@ state_t states[NUMSTATES] =
{SPR_TVTK, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_SCORE10K_ICON2}, // S_SCORE10K_ICON1
{SPR_TVTK, 2, 18, {A_AwardScore}, 0, 0, S_NULL}, // S_SCORE10K_ICON2
{SPR_TVFL, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_FLAMEAURA_ICON2}, // S_FLAMEAURA_ICON1
{SPR_TVFL, 2, 18, {A_FlameShield}, 0, 0, S_NULL}, // S_FLAMEAURA_ICON2
{SPR_TVBB, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_BUBBLEWRAP_ICON2}, // S_BUBBLEWRAP_ICON1
{SPR_TVBB, 2, 18, {A_BubbleShield}, 0, 0, S_NULL}, // S_BUBBLERWAP_ICON2
{SPR_TVZP, FF_ANIMATE|2, 18, {NULL}, 3, 4, S_THUNDERCOIN_ICON2}, // S_THUNDERCOIN_ICON1
{SPR_TVZP, 2, 18, {A_ThunderShield}, 0, 0, S_NULL}, // S_THUNDERCOIN_ICON2
// ---
{SPR_MISL, FF_FULLBRIGHT, 1, {A_SmokeTrailer}, MT_SMOKE, 0, S_ROCKET}, // S_ROCKET
@ -2134,6 +2155,68 @@ state_t states[NUMSTATES] =
{SPR_PITY, FF_TRANS20 , 1, {NULL}, 0, 0, S_PITY10}, // S_PITY9
{SPR_PITY, FF_TRANS20|5, 1, {NULL}, 0, 0, S_PITY1 }, // S_PITY10
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40 , 2, {NULL}, 0, 0, S_FIRS2}, // S_FIRS1
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|1, 2, {NULL}, 0, 0, S_FIRS3}, // S_FIRS2
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|2, 2, {NULL}, 0, 0, S_FIRS4}, // S_FIRS3
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|3, 2, {NULL}, 0, 0, S_FIRS5}, // S_FIRS4
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|4, 2, {NULL}, 0, 0, S_FIRS6}, // S_FIRS5
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|5, 2, {NULL}, 0, 0, S_FIRS7}, // S_FIRS6
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|6, 2, {NULL}, 0, 0, S_FIRS8}, // S_FIRS7
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|7, 2, {NULL}, 0, 0, S_FIRS9}, // S_FIRS8
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|8, 2, {NULL}, 0, 0, S_FIRS1}, // S_FIRS9
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40| 9, 2, {NULL}, 0, 0, S_FIRSB2}, // S_FIRSB1
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|10, 2, {NULL}, 0, 0, S_FIRSB3}, // S_FIRSB2
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|11, 2, {NULL}, 0, 0, S_FIRSB4}, // S_FIRSB3
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|12, 2, {NULL}, 0, 0, S_FIRSB5}, // S_FIRSB4
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|13, 2, {NULL}, 0, 0, S_FIRSB6}, // S_FIRSB5
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|14, 2, {NULL}, 0, 0, S_FIRSB7}, // S_FIRSB6
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|15, 2, {NULL}, 0, 0, S_FIRSB8}, // S_FIRSB7
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|16, 2, {NULL}, 0, 0, S_FIRSB9}, // S_FIRSB8
{SPR_FIRS, FF_FULLBRIGHT|FF_TRANS40|17, 2, {NULL}, 0, 0, S_FIRSB1}, // S_FIRSB9
{SPR_BUBS, FF_TRANS30| 2, 2, {NULL}, 0, 0, S_BUBS2}, // S_BUBS1
{SPR_BUBS, FF_TRANS30| 3, 2, {NULL}, 0, 0, S_BUBS3}, // S_BUBS2
{SPR_BUBS, FF_TRANS30| 4, 2, {NULL}, 0, 0, S_BUBS4}, // S_BUBS3
{SPR_BUBS, FF_TRANS30| 5, 2, {NULL}, 0, 0, S_BUBS5}, // S_BUBS4
{SPR_BUBS, FF_TRANS30| 6, 2, {NULL}, 0, 0, S_BUBS6}, // S_BUBS5
{SPR_BUBS, FF_TRANS30| 7, 2, {NULL}, 0, 0, S_BUBS7}, // S_BUBS6
{SPR_BUBS, FF_TRANS30| 8, 2, {NULL}, 0, 0, S_BUBS8}, // S_BUBS7
{SPR_BUBS, FF_TRANS30| 9, 2, {NULL}, 0, 0, S_BUBS9}, // S_BUBS8
{SPR_BUBS, FF_TRANS30|10, 2, {NULL}, 0, 0, S_BUBS1}, // S_BUBS9
{SPR_BUBS, FF_TRANS30 , 2, {NULL}, 0, 0, S_BUBSB2}, // S_BUBSB1
{SPR_BUBS, FF_TRANS30|1, 2, {NULL}, 0, 0, S_BUBSB1}, // S_BUBSB2
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20 , 2, {NULL}, 0, 0, S_ZAPS2 }, // S_ZAPS1
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 1, 2, {NULL}, 0, 0, S_ZAPS3 }, // S_ZAPS2
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 2, 2, {NULL}, 0, 0, S_ZAPS4 }, // S_ZAPS3
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 3, 2, {NULL}, 0, 0, S_ZAPS5 }, // S_ZAPS4
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 4, 2, {NULL}, 0, 0, S_ZAPS6 }, // S_ZAPS5
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 5, 2, {NULL}, 0, 0, S_ZAPS7 }, // S_ZAPS6
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 6, 2, {NULL}, 0, 0, S_ZAPS8 }, // S_ZAPS7
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 7, 2, {NULL}, 0, 0, S_ZAPS9 }, // S_ZAPS8
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 8, 2, {NULL}, 0, 0, S_ZAPS10}, // S_ZAPS9
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 9, 2, {NULL}, 0, 0, S_ZAPS11}, // S_ZAPS10
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20|10, 2, {NULL}, 0, 0, S_ZAPS12}, // S_ZAPS11
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20|11, 2, {NULL}, 0, 0, S_ZAPS13}, // S_ZAPS12
{SPR_NULL, 0, 9*2, {NULL}, 0, 0, S_ZAPS14}, // S_ZAPS13
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 9, 2, {NULL}, 0, 0, S_ZAPS15}, // S_ZAPS14
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20|10, 2, {NULL}, 0, 0, S_ZAPS16}, // S_ZAPS15
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20|11, 2, {NULL}, 0, 0, S_ZAPS1 }, // S_ZAPS16
{SPR_NULL, 0, 12*2, {NULL}, 0, 0, S_ZAPSB2 }, // S_ZAPSB1
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 8, 2, {NULL}, 0, 0, S_ZAPSB3 }, // S_ZAPSB2
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 7, 2, {NULL}, 0, 0, S_ZAPSB4 }, // S_ZAPSB3
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 6, 2, {NULL}, 0, 0, S_ZAPSB5 }, // S_ZAPSB4
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 5, 2, {NULL}, 0, 0, S_ZAPSB6 }, // S_ZAPSB5
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 4, 2, {NULL}, 0, 0, S_ZAPSB7 }, // S_ZAPSB6
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 3, 2, {NULL}, 0, 0, S_ZAPSB8 }, // S_ZAPSB7
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 2, 2, {NULL}, 0, 0, S_ZAPSB9 }, // S_ZAPSB8
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20| 1, 2, {NULL}, 0, 0, S_ZAPSB10}, // S_ZAPSB9
{SPR_ZAPS, FF_FULLBRIGHT|FF_TRANS20 , 2, {NULL}, 0, 0, S_ZAPSB11}, // S_ZAPSB10
{SPR_NULL, 0, 15*2, {NULL}, 0, 0, S_ZAPSB2 }, // S_ZAPSB11
// Invincibility Sparkles
{SPR_IVSP, FF_ANIMATE, 32, {NULL}, 31, 1, S_NULL}, // S_IVSP
@ -6429,6 +6512,87 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_FLAMEAURA_BOX
420, // doomednum
S_FLAMEAURA_BOX, // spawnstate
1, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_FLAMEAURA_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_FLAMEAURA_ICON, // damage
sfx_None, // activesound
MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags
S_NULL // raisestate
},
{ // MT_BUBBLEWRAP_BOX
421, // doomednum
S_BUBBLEWRAP_BOX, // spawnstate
1, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_BUBBLEWRAP_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_BUBBLEWRAP_ICON, // damage
sfx_None, // activesound
MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags
S_NULL // raisestate
},
{ // MT_THUNDERCOIN_BOX
422, // doomednum
S_THUNDERCOIN_BOX, // spawnstate
1, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_THUNDERCOIN_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_THUNDERCOIN_ICON, // damage
sfx_None, // activesound
MF_SOLID|MF_SHOOTABLE|MF_MONITOR, // flags
S_NULL // raisestate
},
{ // MT_PITY_GOLDBOX
431, // doomednum
S_PITY_GOLDBOX, // spawnstate
@ -6699,6 +6863,87 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_FLAMEAURA_GOLDBOX
450, // doomednum
S_FLAMEAURA_GOLDBOX, // spawnstate
1, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_monton, // attacksound
S_FLAMEAURA_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_FLAMEAURA_ICON, // damage
sfx_None, // activesound
MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags
S_NULL // raisestate
},
{ // MT_BUBBLEWRAP_GOLDBOX
451, // doomednum
S_BUBBLEWRAP_GOLDBOX, // spawnstate
1, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_monton, // attacksound
S_BUBBLEWRAP_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_BUBBLEWRAP_ICON, // damage
sfx_None, // activesound
MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags
S_NULL // raisestate
},
{ // MT_THUNDERCOIN_GOLDBOX
452, // doomednum
S_THUNDERCOIN_GOLDBOX, // spawnstate
1, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_monton, // attacksound
S_THUNDERCOIN_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_THUNDERCOIN_ICON, // damage
sfx_None, // activesound
MF_SOLID|MF_SHOOTABLE|MF_MONITOR|MF_GRENADEBOUNCE, // flags
S_NULL // raisestate
},
{ // MT_RING_REDBOX
414, // doomednum
S_RING_REDBOX1, // spawnstate
@ -7185,6 +7430,87 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_FLAMEAURA_ICON
-1, // doomednum
S_FLAMEAURA_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_BUBBLEWRAP_ICON
-1, // doomednum
S_BUBBLEWRAP_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_THUNDERCOIN_ICON
-1, // doomednum
S_THUNDERCOIN_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_ROCKET
-1, // doomednum
S_ROCKET, // spawnstate
@ -10428,7 +10754,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_GREENORB
{ // MT_ELEMENTAL_ORB
-1, // doomednum
S_ELEM1, // spawnstate
1000, // spawnhealth
@ -10447,7 +10773,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
SH_ELEMENTAL, // speed
64*FRACUNIT, // radius
64*FRACUNIT, // height
1, // display offset
2, // display offset
16, // mass
0, // damage
sfx_None, // activesound
@ -10455,7 +10781,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_YELLOWORB
{ // MT_ATTRACT_ORB
-1, // doomednum
S_MAGN1, // spawnstate
1000, // spawnhealth
@ -10474,7 +10800,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
SH_ATTRACT, // speed
64*FRACUNIT, // radius
64*FRACUNIT, // height
1, // display offset
2, // display offset
16, // mass
0, // damage
sfx_None, // activesound
@ -10482,7 +10808,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_BLUEORB
{ // MT_FORCE_ORB
-1, // doomednum
S_FORC1, // spawnstate
1000, // spawnhealth
@ -10501,7 +10827,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
SH_FORCE, // speed
64*FRACUNIT, // radius
64*FRACUNIT, // height
1, // display offset
2, // display offset
16, // mass
0, // damage
sfx_None, // activesound
@ -10509,7 +10835,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_BLACKORB
{ // MT_BOMB_ORB
-1, // doomednum
S_ARMA1, // spawnstate
1000, // spawnhealth
@ -10528,7 +10854,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
SH_BOMB, // speed
64*FRACUNIT, // radius
64*FRACUNIT, // height
1, // display offset
2, // display offset
16, // mass
0, // damage
sfx_None, // activesound
@ -10536,7 +10862,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_WHITEORB
{ // MT_JUMP_ORB
-1, // doomednum
S_WIND1, // spawnstate
1000, // spawnhealth
@ -10555,7 +10881,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
SH_JUMP, // speed
64*FRACUNIT, // radius
64*FRACUNIT, // height
1, // display offset
2, // display offset
16, // mass
0, // damage
sfx_None, // activesound
@ -10563,7 +10889,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_PITYORB
{ // MT_PITY_ORB
-1, // doomednum
S_PITY1, // spawnstate
1000, // spawnhealth
@ -10582,7 +10908,88 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
SH_PITY, // speed
64*FRACUNIT, // radius
64*FRACUNIT, // height
1, // display offset
2, // display offset
16, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_FLAMEAURA_ORB
-1, // doomednum
S_FIRSB1, // spawnstate
1000, // spawnhealth
S_FIRS1, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
SKINCOLOR_NONE, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
SH_FLAMEAURA, // speed
64*FRACUNIT, // radius
64*FRACUNIT, // height
-2, // display offset
16, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_BUBBLEWRAP_ORB
-1, // doomednum
S_BUBSB1, // spawnstate
1000, // spawnhealth
S_BUBS1, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
SKINCOLOR_NONE, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
SH_BUBBLEWRAP, // speed
64*FRACUNIT, // radius
64*FRACUNIT, // height
-2, // display offset
16, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
S_NULL // raisestate
},
{ // MT_THUNDERCOIN_ORB
-1, // doomednum
S_ZAPSB1, // spawnstate
1000, // spawnhealth
S_ZAPS1, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
SKINCOLOR_NONE, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
SH_THUNDERCOIN, // speed
64*FRACUNIT, // radius
64*FRACUNIT, // height
-2, // display offset
16, // mass
0, // damage
sfx_None, // activesound
@ -10609,7 +11016,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
8, // speed
64*FRACUNIT, // radius
64*FRACUNIT, // height
2, // display offset
3, // display offset
16, // mass
0, // damage
sfx_None, // activesound

View File

@ -56,6 +56,9 @@ void A_BombShield(); // Obtained Bomb Shield
void A_WaterShield(); // Obtained Water Shield
void A_ForceShield(); // Obtained Force Shield
void A_PityShield(); // Obtained Pity Shield. We're... sorry.
void A_FlameShield(); // Obtained Flame Shield
void A_BubbleShield(); // Obtained Bubble Shield
void A_ThunderShield(); // Obtained Thunder Shield
void A_GravityBox();
void A_ScoreRise(); // Rise the score logo
void A_ParticleSpawn();
@ -351,6 +354,9 @@ typedef enum sprite
SPR_TVRC, // ReCycler
SPR_TV1K, // 1,000 points (1 K)
SPR_TVTK, // 10,000 points (Ten K)
SPR_TVFL, // FLame shield
SPR_TVBB, // BuBble shield
SPR_TVZP, // Thunder shield (ZaP)
// Projectiles
SPR_MISL,
@ -435,6 +441,9 @@ typedef enum sprite
SPR_ELEM, // Elemental Shield Orb and Fire
SPR_FORC, // Force Shield Orb
SPR_PITY, // Pity Shield Orb
SPR_FIRS, // Flame Shield Orb
SPR_BUBS, // Bubble Shield Orb
SPR_ZAPS, // Thunder Shield Orb
SPR_IVSP, // invincibility sparkles
SPR_SSPK, // Super Sonic Spark
@ -1814,6 +1823,9 @@ typedef enum state
S_RECYCLER_BOX,
S_SCORE1K_BOX,
S_SCORE10K_BOX,
S_FLAMEAURA_BOX,
S_BUBBLEWRAP_BOX,
S_THUNDERCOIN_BOX,
// Gold Repeat Monitor States (one per box)
S_PITY_GOLDBOX,
@ -1826,6 +1838,9 @@ typedef enum state
S_INVULN_GOLDBOX,
S_EGGMAN_GOLDBOX,
S_GRAVITY_GOLDBOX,
S_FLAMEAURA_GOLDBOX,
S_BUBBLEWRAP_GOLDBOX,
S_THUNDERCOIN_GOLDBOX,
// Team Ring Boxes (these are special)
S_RING_REDBOX1,
@ -1887,6 +1902,15 @@ typedef enum state
S_SCORE10K_ICON1,
S_SCORE10K_ICON2,
S_FLAMEAURA_ICON1,
S_FLAMEAURA_ICON2,
S_BUBBLEWRAP_ICON1,
S_BUBBLEWRAP_ICON2,
S_THUNDERCOIN_ICON1,
S_THUNDERCOIN_ICON2,
// ---
S_ROCKET,
@ -2317,6 +2341,68 @@ typedef enum state
S_PITY9,
S_PITY10,
S_FIRS1,
S_FIRS2,
S_FIRS3,
S_FIRS4,
S_FIRS5,
S_FIRS6,
S_FIRS7,
S_FIRS8,
S_FIRS9,
S_FIRSB1,
S_FIRSB2,
S_FIRSB3,
S_FIRSB4,
S_FIRSB5,
S_FIRSB6,
S_FIRSB7,
S_FIRSB8,
S_FIRSB9,
S_BUBS1,
S_BUBS2,
S_BUBS3,
S_BUBS4,
S_BUBS5,
S_BUBS6,
S_BUBS7,
S_BUBS8,
S_BUBS9,
S_BUBSB1,
S_BUBSB2,
S_ZAPS1,
S_ZAPS2,
S_ZAPS3,
S_ZAPS4,
S_ZAPS5,
S_ZAPS6,
S_ZAPS7,
S_ZAPS8,
S_ZAPS9,
S_ZAPS10,
S_ZAPS11,
S_ZAPS12,
S_ZAPS13, // blank frame
S_ZAPS14,
S_ZAPS15,
S_ZAPS16,
S_ZAPSB1, // blank frame
S_ZAPSB2,
S_ZAPSB3,
S_ZAPSB4,
S_ZAPSB5,
S_ZAPSB6,
S_ZAPSB7,
S_ZAPSB8,
S_ZAPSB9,
S_ZAPSB10,
S_ZAPSB11, // blank frame
// Invincibility Sparkles
S_IVSP,
@ -3158,6 +3244,9 @@ typedef enum mobj_type
MT_RECYCLER_BOX,
MT_SCORE1K_BOX,
MT_SCORE10K_BOX,
MT_FLAMEAURA_BOX,
MT_BUBBLEWRAP_BOX,
MT_THUNDERCOIN_BOX,
// Monitor boxes -- repeating (big) boxes
MT_PITY_GOLDBOX,
@ -3170,6 +3259,9 @@ typedef enum mobj_type
MT_INVULN_GOLDBOX,
MT_EGGMAN_GOLDBOX,
MT_GRAVITY_GOLDBOX,
MT_FLAMEAURA_GOLDBOX,
MT_BUBBLEWRAP_GOLDBOX,
MT_THUNDERCOIN_GOLDBOX,
// Monitor boxes -- special
MT_RING_REDBOX,
@ -3192,6 +3284,9 @@ typedef enum mobj_type
MT_RECYCLER_ICON,
MT_SCORE1K_ICON,
MT_SCORE10K_ICON,
MT_FLAMEAURA_ICON,
MT_BUBBLEWRAP_ICON,
MT_THUNDERCOIN_ICON,
// Projectiles
MT_ROCKET,
@ -3344,12 +3439,15 @@ typedef enum mobj_type
MT_EGGSTATUE2,
// Powerup Indicators
MT_GREENORB, // Elemental shield mobj
MT_YELLOWORB, // Attract shield mobj
MT_BLUEORB, // Force shield mobj
MT_BLACKORB, // Armageddon shield mobj
MT_WHITEORB, // Whirlwind shield mobj
MT_PITYORB, // Pity shield mobj
MT_ELEMENTAL_ORB, // Elemental shield mobj
MT_ATTRACT_ORB, // Attract shield mobj
MT_FORCE_ORB, // Force shield mobj
MT_BOMB_ORB, // Armageddon shield mobj
MT_JUMP_ORB, // Whirlwind shield mobj
MT_PITY_ORB, // Pity shield mobj
MT_FLAMEAURA_ORB, // Flame shield mobj
MT_BUBBLEWRAP_ORB, // Bubble shield mobj
MT_THUNDERCOIN_ORB, // Thunder shield mobj
MT_IVSP, // invincibility sparkles
MT_SUPERSPARK, // Super Sonic Spark

View File

@ -104,6 +104,9 @@ void A_BombShield(mobj_t *actor);
void A_WaterShield(mobj_t *actor);
void A_ForceShield(mobj_t *actor);
void A_PityShield(mobj_t *actor);
void A_FlameShield(mobj_t *actor);
void A_BubbleShield(mobj_t *actor);
void A_ThunderShield(mobj_t *actor);
void A_GravityBox(mobj_t *actor);
void A_ScoreRise(mobj_t *actor);
void A_ParticleSpawn(mobj_t *actor);
@ -3435,6 +3438,93 @@ void A_PityShield(mobj_t *actor)
S_StartSound(player->mo, sfx_itemup);
}
// Function: A_FlameShield
//
// Description: Awards the player a flame shield.
//
// var1 = unused
// var2 = unused
//
void A_FlameShield(mobj_t *actor)
{
player_t *player;
#ifdef HAVE_BLUA
if (LUA_CallAction("A_FlameShield", actor))
return;
#endif
if (!actor->target || !actor->target->player)
{
CONS_Debug(DBG_GAMELOGIC, "Powerup has no target.\n");
return;
}
player = actor->target->player;
if (P_SwitchShield(player, SH_FLAMEAURA))
S_StartSound(player->mo, actor->info->seesound);
else
S_StartSound(player->mo, sfx_itemup);
}
// Function: A_BubbleShield
//
// Description: Awards the player a bubble shield.
//
// var1 = unused
// var2 = unused
//
void A_BubbleShield(mobj_t *actor)
{
player_t *player;
#ifdef HAVE_BLUA
if (LUA_CallAction("A_BubbleShield", actor))
return;
#endif
if (!actor->target || !actor->target->player)
{
CONS_Debug(DBG_GAMELOGIC, "Powerup has no target.\n");
return;
}
player = actor->target->player;
if (P_SwitchShield(player, SH_BUBBLEWRAP))
S_StartSound(player->mo, actor->info->seesound);
else
S_StartSound(player->mo, sfx_itemup);
}
// Function: A_ThunderShield
//
// Description: Awards the player a thunder shield.
//
// var1 = unused
// var2 = unused
//
void A_ThunderShield(mobj_t *actor)
{
player_t *player;
#ifdef HAVE_BLUA
if (LUA_CallAction("A_ThunderShield", actor))
return;
#endif
if (!actor->target || !actor->target->player)
{
CONS_Debug(DBG_GAMELOGIC, "Powerup has no target.\n");
return;
}
player = actor->target->player;
if (P_SwitchShield(player, SH_THUNDERCOIN))
S_StartSound(player->mo, actor->info->seesound);
else
S_StartSound(player->mo, sfx_itemup);
}
// Function: A_GravityBox
//

View File

@ -1748,12 +1748,15 @@ static mobj_t *SearchMarioNode(msecnode_t *node)
case MT_GHOST:
case MT_OVERLAY:
case MT_EMERALDSPAWN:
case MT_GREENORB:
case MT_YELLOWORB:
case MT_BLUEORB:
case MT_BLACKORB:
case MT_WHITEORB:
case MT_PITYORB:
case MT_ELEMENTAL_ORB:
case MT_ATTRACT_ORB:
case MT_FORCE_ORB:
case MT_BOMB_ORB:
case MT_JUMP_ORB:
case MT_PITY_ORB:
case MT_FLAMEAURA_ORB:
case MT_BUBBLEWRAP_ORB:
case MT_THUNDERCOIN_ORB:
case MT_IVSP:
case MT_SUPERSPARK:
case MT_RAIN:

View File

@ -6764,7 +6764,7 @@ void P_MobjThinker(mobj_t *mobj)
}
else
P_AddOverlay(mobj);
if ((mobj->target->type == MT_GREENORB)
if ((mobj->target->type == MT_ELEMENTAL_ORB)
&& (mobj->target->target)
&& (mobj->target->target->player)
&& ((mobj->target->target->player->powers[pw_shield] & SH_NOSTACK) == SH_ELEMENTAL)
@ -6775,15 +6775,18 @@ void P_MobjThinker(mobj_t *mobj)
mobj->tics++;
}
break;
case MT_BLACKORB:
case MT_WHITEORB:
case MT_GREENORB:
case MT_BLUEORB:
case MT_PITYORB:
case MT_BOMB_ORB:
case MT_JUMP_ORB:
case MT_ELEMENTAL_ORB:
case MT_FORCE_ORB:
case MT_PITY_ORB:
case MT_FLAMEAURA_ORB:
case MT_BUBBLEWRAP_ORB:
case MT_THUNDERCOIN_ORB:
if (!P_AddShield(mobj))
return;
break;
case MT_YELLOWORB:
case MT_ATTRACT_ORB:
if (!P_AddShield(mobj))
return;
if ((mobj->target)

View File

@ -1348,23 +1348,32 @@ void P_SpawnShieldOrb(player_t *player)
#endif
if (player->powers[pw_shield] & SH_FORCE)
orbtype = MT_BLUEORB;
orbtype = MT_FORCE_ORB;
else switch (player->powers[pw_shield] & SH_NOSTACK)
{
case SH_JUMP:
orbtype = MT_WHITEORB;
orbtype = MT_JUMP_ORB;
break;
case SH_ATTRACT:
orbtype = MT_YELLOWORB;
orbtype = MT_ATTRACT_ORB;
break;
case SH_ELEMENTAL:
orbtype = MT_GREENORB;
orbtype = MT_ELEMENTAL_ORB;
break;
case SH_BOMB:
orbtype = MT_BLACKORB;
orbtype = MT_BOMB_ORB;
break;
case SH_PITY:
orbtype = MT_PITYORB;
orbtype = MT_PITY_ORB;
break;
case SH_FLAMEAURA:
orbtype = MT_FLAMEAURA_ORB;
break;
case SH_BUBBLEWRAP:
orbtype = MT_BUBBLEWRAP_ORB;
break;
case SH_THUNDERCOIN:
orbtype = MT_THUNDERCOIN_ORB;
break;
case SH_FIREFLOWER:
if (!(player->powers[pw_super] || (mariomode && player->powers[pw_invulnerability])))

View File

@ -99,6 +99,9 @@ static patch_t *ringshield;
static patch_t *watershield;
static patch_t *bombshield;
static patch_t *pityshield;
static patch_t *flameshield;
static patch_t *bubbleshield;
static patch_t *thundershield;
static patch_t *invincibility;
static patch_t *sneakers;
static patch_t *gravboots;
@ -288,15 +291,18 @@ void ST_LoadGraphics(void)
scatterring = W_CachePatchName("SCATIND", PU_HUDGFX);
grenadering = W_CachePatchName("GRENIND", PU_HUDGFX);
railring = W_CachePatchName("RAILIND", PU_HUDGFX);
jumpshield = W_CachePatchName("WHTVB0", PU_HUDGFX);
forceshield = W_CachePatchName("BLTVB0", PU_HUDGFX);
ringshield = W_CachePatchName("YLTVB0", PU_HUDGFX);
watershield = W_CachePatchName("ELTVB0", PU_HUDGFX);
bombshield = W_CachePatchName("BKTVB0", PU_HUDGFX);
pityshield = W_CachePatchName("GRTVB0", PU_HUDGFX);
invincibility = W_CachePatchName("PINVB0", PU_HUDGFX);
sneakers = W_CachePatchName("SHTVB0", PU_HUDGFX);
gravboots = W_CachePatchName("GBTVB0", PU_HUDGFX);
jumpshield = W_CachePatchName("TVWWC0", PU_HUDGFX);
forceshield = W_CachePatchName("TVFOC0", PU_HUDGFX);
ringshield = W_CachePatchName("TVATC0", PU_HUDGFX);
watershield = W_CachePatchName("TVELC0", PU_HUDGFX);
bombshield = W_CachePatchName("TVARC0", PU_HUDGFX);
pityshield = W_CachePatchName("TVPIC0", PU_HUDGFX);
flameshield = W_CachePatchName("TVFLC0", PU_HUDGFX);
bubbleshield = W_CachePatchName("TVBBC0", PU_HUDGFX);
thundershield = W_CachePatchName("TVZPC0", PU_HUDGFX);
invincibility = W_CachePatchName("TVIVC0", PU_HUDGFX);
sneakers = W_CachePatchName("TVSSC0", PU_HUDGFX);
gravboots = W_CachePatchName("TVGVC0", PU_HUDGFX);
tagico = W_CachePatchName("TAGICO", PU_HUDGFX);
rflagico = W_CachePatchName("RFLAGICO", PU_HUDGFX);
@ -805,11 +811,14 @@ static void ST_drawFirstPersonHUD(void)
}
else switch (player->powers[pw_shield] & SH_NOSTACK)
{
case SH_JUMP: p = jumpshield; break;
case SH_ELEMENTAL: p = watershield; break;
case SH_BOMB: p = bombshield; break;
case SH_ATTRACT: p = ringshield; break;
case SH_PITY: p = pityshield; break;
case SH_JUMP: p = jumpshield; break;
case SH_ELEMENTAL: p = watershield; break;
case SH_BOMB: p = bombshield; break;
case SH_ATTRACT: p = ringshield; break;
case SH_PITY: p = pityshield; break;
case SH_FLAMEAURA: p = flameshield; break;
case SH_BUBBLEWRAP: p = bubbleshield; break;
case SH_THUNDERCOIN: p = thundershield; break;
default: break;
}