mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-22 10:52:23 +00:00
Merge branch 'bossprovements' into 'master'
ACZ3 intro Closes #217 See merge request STJr/SRB2Internal!346
This commit is contained in:
commit
55a2f1ee1f
10 changed files with 462 additions and 53 deletions
|
@ -2432,6 +2432,7 @@ static actionpointer_t actionpointers[] =
|
|||
{{A_Boss5CheckFalling}, "A_BOSS5CHECKFALLING"},
|
||||
{{A_Boss5PinchShot}, "A_BOSS5PINCHSHOT"},
|
||||
{{A_Boss5MakeItRain}, "A_BOSS5MAKEITRAIN"},
|
||||
{{A_Boss5MakeJunk}, "A_BOSS5MAKEJUNK"},
|
||||
{{A_LookForBetter}, "A_LOOKFORBETTER"},
|
||||
{{A_Boss5BombExplode}, "A_BOSS5BOMBEXPLODE"},
|
||||
{{A_DustDevilThink}, "A_DUSTDEVILTHINK"},
|
||||
|
@ -4790,6 +4791,25 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_EGGROBOJET",
|
||||
|
||||
// Boss 5
|
||||
"S_FANG_SETUP",
|
||||
"S_FANG_INTRO0",
|
||||
"S_FANG_INTRO1",
|
||||
"S_FANG_INTRO2",
|
||||
"S_FANG_INTRO3",
|
||||
"S_FANG_INTRO4",
|
||||
"S_FANG_INTRO5",
|
||||
"S_FANG_INTRO6",
|
||||
"S_FANG_INTRO7",
|
||||
"S_FANG_INTRO8",
|
||||
"S_FANG_INTRO9",
|
||||
"S_FANG_INTRO10",
|
||||
"S_FANG_INTRO11",
|
||||
"S_FANG_INTRO12",
|
||||
"S_FANG_CLONE1",
|
||||
"S_FANG_CLONE2",
|
||||
"S_FANG_CLONE3",
|
||||
"S_FANG_CLONE4",
|
||||
"S_FANG_IDLE0",
|
||||
"S_FANG_IDLE1",
|
||||
"S_FANG_IDLE2",
|
||||
"S_FANG_IDLE3",
|
||||
|
@ -4861,6 +4881,26 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_FANG_FLEEBOUNCE2",
|
||||
"S_FANG_KO",
|
||||
|
||||
"S_BROKENROBOTRANDOM",
|
||||
"S_BROKENROBOTA",
|
||||
"S_BROKENROBOTB",
|
||||
"S_BROKENROBOTC",
|
||||
"S_BROKENROBOTD",
|
||||
"S_BROKENROBOTE",
|
||||
"S_BROKENROBOTF",
|
||||
|
||||
"S_ALART1",
|
||||
"S_ALART2",
|
||||
|
||||
"S_VWREF",
|
||||
"S_VWREB",
|
||||
|
||||
"S_PROJECTORLIGHT1",
|
||||
"S_PROJECTORLIGHT2",
|
||||
"S_PROJECTORLIGHT3",
|
||||
"S_PROJECTORLIGHT4",
|
||||
"S_PROJECTORLIGHT5",
|
||||
|
||||
"S_FBOMB1",
|
||||
"S_FBOMB2",
|
||||
"S_FBOMB_EXPL1",
|
||||
|
@ -7270,6 +7310,10 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
|
||||
// Boss 5
|
||||
"MT_FANG",
|
||||
"MT_BROKENROBOT",
|
||||
"MT_VWREF",
|
||||
"MT_VWREB",
|
||||
"MT_PROJECTORLIGHT",
|
||||
"MT_FBOMB",
|
||||
"MT_TNTDUST", // also used by barrel
|
||||
"MT_FSGNA",
|
||||
|
|
|
@ -205,11 +205,15 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_EGR1
|
||||
|
||||
// Boss 5 (Arid Canyon)
|
||||
&lspr[NOLIGHT], //SPR_FANG // replaces EGGQ
|
||||
&lspr[NOLIGHT], //SPR_FBOM
|
||||
&lspr[NOLIGHT], //SPR_FSGN
|
||||
&lspr[REDBALL_L], //SPR_BARX // bomb explosion (also used by barrel)
|
||||
&lspr[NOLIGHT], //SPR_BARD // bomb dust (also used by barrel)
|
||||
&lspr[NOLIGHT], // SPR_FANG // replaces EGGQ
|
||||
&lspr[NOLIGHT], // SPR_BRKN
|
||||
&lspr[NOLIGHT], // SPR_WHAT
|
||||
&lspr[INVINCIBLE_L], // SPR_VWRE
|
||||
&lspr[INVINCIBLE_L], // SPR_PROJ
|
||||
&lspr[NOLIGHT], // SPR_FBOM
|
||||
&lspr[NOLIGHT], // SPR_FSGN
|
||||
&lspr[REDBALL_L], // SPR_BARX // bomb explosion (also used by barrel)
|
||||
&lspr[NOLIGHT], // SPR_BARD // bomb dust (also used by barrel)
|
||||
|
||||
// Boss 6 (Red Volcano)
|
||||
&lspr[NOLIGHT], // SPR_EEGR
|
||||
|
|
192
src/info.c
192
src/info.c
|
@ -94,6 +94,10 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
|
||||
// Boss 5 (Arid Canyon)
|
||||
"FANG", // replaces EGGQ
|
||||
"BRKN", // broken robot chunk
|
||||
"WHAT", // alart
|
||||
"VWRE",
|
||||
"PROJ", // projector light
|
||||
"FBOM",
|
||||
"FSGN",
|
||||
"BARX", // bomb explosion (also used by barrel)
|
||||
|
@ -1354,6 +1358,28 @@ state_t states[NUMSTATES] =
|
|||
{SPR_EFIR, FF_FULLBRIGHT|2, -1, {NULL}, 0, 0, S_NULL}, // S_EGGROBOJET
|
||||
|
||||
// Boss 5
|
||||
{SPR_NULL, 0, 2, {A_CheckFlags2}, MF2_AMBUSH, S_FANG_IDLE0, S_FANG_INTRO0}, // S_FANG_SETUP
|
||||
|
||||
{SPR_NULL, 0, 2, {NULL}, 0, 0, S_FANG_INTRO1}, // S_FANG_INTRO0
|
||||
{SPR_NULL, 0, 2, {A_Boss5MakeJunk}, -S_FANG_CLONE1, 0, S_FANG_INTRO2}, // S_FANG_INTRO1
|
||||
{SPR_NULL, 0, 0, {A_Repeat}, 25, S_FANG_INTRO1, S_FANG_INTRO3}, // S_FANG_INTRO2
|
||||
{SPR_NULL, 0, 0, {A_Boss5MakeJunk}, 0, 1, S_FANG_INTRO4}, // S_FANG_INTRO3
|
||||
{SPR_FANG, 30, 1, {A_ZThrust}, 9, (1<<16)|1, S_FANG_INTRO5}, // S_FANG_INTRO4
|
||||
{SPR_FANG, 27, 1, {A_Boss5CheckOnGround}, S_FANG_INTRO9, 0, S_FANG_INTRO6}, // S_FANG_INTRO5
|
||||
{SPR_FANG, 28, 1, {A_Boss5CheckOnGround}, S_FANG_INTRO9, 0, S_FANG_INTRO7}, // S_FANG_INTRO6
|
||||
{SPR_FANG, 29, 1, {A_Boss5CheckOnGround}, S_FANG_INTRO9, 0, S_FANG_INTRO8}, // S_FANG_INTRO7
|
||||
{SPR_FANG, 30, 1, {A_Boss5CheckOnGround}, S_FANG_INTRO9, 0, S_FANG_INTRO5}, // S_FANG_INTRO8
|
||||
{SPR_FANG, 23|FF_ANIMATE, 50, {NULL}, 1, 4, S_FANG_INTRO10}, // S_FANG_INTRO9
|
||||
{SPR_FANG, 25, 5, {NULL}, 0, 0, S_FANG_INTRO11}, // S_FANG_INTRO10
|
||||
{SPR_FANG, 26, 2, {A_Boss5MakeJunk}, S_BROKENROBOTD, 2, S_FANG_INTRO12}, // S_FANG_INTRO11
|
||||
{SPR_FANG, 31|FF_ANIMATE, 50, {NULL}, 3, 4, S_FANG_IDLE1}, // S_FANG_INTRO12
|
||||
|
||||
{SPR_FANG, 11, 2, {A_Boss5MakeJunk}, 0, -1, S_FANG_CLONE2}, // S_FANG_CLONE1
|
||||
{SPR_FANG, 11, 0, {A_Repeat}, 49, S_FANG_CLONE1, S_FANG_CLONE3}, // S_FANG_INTRO2
|
||||
{SPR_FANG, 12, 0, {A_SetObjectFlags}, MF_NOGRAVITY, 1, S_FANG_CLONE4}, // S_FANG_CLONE3
|
||||
{SPR_FANG, 12, 1, {A_Boss5CheckOnGround}, S_FANG_IDLE0, 0, S_FANG_CLONE4}, // S_FANG_CLONE4
|
||||
|
||||
{SPR_FANG, 0, 0, {A_SetObjectFlags}, MF_NOCLIPTHING, 1, S_FANG_IDLE1}, // S_FANG_IDLE0
|
||||
{SPR_FANG, 2, 16, {A_Look}, 1, 0, S_FANG_IDLE2}, // S_FANG_IDLE1
|
||||
{SPR_FANG, 3, 16, {A_Look}, 1, 0, S_FANG_IDLE3}, // S_FANG_IDLE2
|
||||
{SPR_FANG, 3, 16, {A_Look}, 1, 0, S_FANG_IDLE4}, // S_FANG_IDLE3
|
||||
|
@ -1428,8 +1454,8 @@ state_t states[NUMSTATES] =
|
|||
{SPR_FANG, 21, 0, {A_DoNPCPain}, 0, 0, S_FANG_DIE2}, // S_FANG_DIE1
|
||||
{SPR_FANG, 21, 1, {A_Boss5CheckOnGround}, S_FANG_DIE3, 0, S_FANG_DIE2}, // S_FANG_DIE2
|
||||
|
||||
{SPR_FANG, 22, 0, {A_Scream}, 0, 0, S_FANG_DIE4}, // S_FANG_DIE3
|
||||
{SPR_FANG, 22, 104, {NULL}, 0, 0, S_FANG_DIE5}, // S_FANG_DIE4
|
||||
{SPR_FANG, 22, 0, {A_Scream}, 0, 0, S_FANG_DIE4}, // S_FANG_DIE3
|
||||
{SPR_FANG, 22, -1, {A_SetFuse}, 70, 0, S_FANG_DIE5}, // S_FANG_DIE4
|
||||
|
||||
{SPR_FANG, 11, 0, {A_PlaySound}, sfx_jump, 0, S_FANG_DIE6}, // S_FANG_DIE5
|
||||
{SPR_FANG, 11, 1, {A_ZThrust}, 6, (1<<16)|1, S_FANG_DIE7}, // S_FANG_DIE6
|
||||
|
@ -1443,6 +1469,26 @@ state_t states[NUMSTATES] =
|
|||
|
||||
{SPR_FANG, 17, 7*TICRATE, {NULL}, 0, 0, S_NULL}, // S_FANG_KO
|
||||
|
||||
{SPR_NULL, 0, -1, {A_RandomStateRange}, S_BROKENROBOTA, S_BROKENROBOTF, S_NULL}, // S_BROKENROBOTRANDOM
|
||||
{SPR_BRKN, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 3, 4, S_NULL}, // S_BROKENROBOTA
|
||||
{SPR_BRKN, 4|FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 3, 4, S_NULL}, // S_BROKENROBOTB
|
||||
{SPR_BRKN, 8|FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 3, 4, S_NULL}, // S_BROKENROBOTC
|
||||
{SPR_BRKN, 12|FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 3, 4, S_NULL}, // S_BROKENROBOTD
|
||||
{SPR_BRKN, 16|FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 3, 4, S_NULL}, // S_BROKENROBOTE
|
||||
{SPR_BRKN, 20|FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 3, 4, S_NULL}, // S_BROKENROBOTF
|
||||
|
||||
{SPR_WHAT, FF_ANIMATE|FF_FULLBRIGHT, 4, {NULL}, 1, 2, S_ALART2}, // S_ALART1
|
||||
{SPR_WHAT, 2|FF_ANIMATE|FF_FULLBRIGHT, -1, {NULL}, 1, 2, S_NULL}, // S_ALART2
|
||||
|
||||
{SPR_VWRE, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_VWREF
|
||||
{SPR_VWRE, 1|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_VWREB
|
||||
|
||||
{SPR_PROJ, FF_TRANS20|FF_FULLBRIGHT, 4, {NULL}, 0, 0, S_PROJECTORLIGHT2}, // S_PROJECTORLIGHT1
|
||||
{SPR_PROJ, 1|FF_TRANS40|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_PROJECTORLIGHT3}, // S_PROJECTORLIGHT2
|
||||
{SPR_PROJ, 2|FF_TRANS20|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_PROJECTORLIGHT4}, // S_PROJECTORLIGHT3
|
||||
{SPR_PROJ, 3|FF_TRANS40|FF_FULLBRIGHT, 2, {A_Repeat}, 39, S_PROJECTORLIGHT2, S_PROJECTORLIGHT5}, // S_PROJECTORLIGHT4
|
||||
{SPR_PROJ, 4|FF_TRANS60|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_PROJECTORLIGHT5
|
||||
|
||||
{SPR_FBOM, 0, 1, {A_GhostMe}, 0, 0, S_FBOMB2}, // S_FBOMB1
|
||||
{SPR_FBOM, 1, 1, {A_GhostMe}, 0, 0, S_FBOMB1}, // S_FBOMB2
|
||||
{SPR_BARX, 0|FF_FULLBRIGHT, 3, {A_SetObjectFlags}, MF_NOCLIP|MF_NOGRAVITY|MF_NOBLOCKMAP, 0, S_FBOMB_EXPL2}, // S_FBOMB_EXPL1
|
||||
|
@ -3822,21 +3868,21 @@ state_t states[NUMSTATES] =
|
|||
{SPR_NULL, 0, 1, {A_RockSpawn}, 0, 0, S_ROCKSPAWN}, // S_ROCKSPAWN
|
||||
|
||||
{SPR_ROIA, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEA
|
||||
{SPR_ROIB, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEB
|
||||
{SPR_ROIC, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEC
|
||||
{SPR_ROID, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLED
|
||||
{SPR_ROIE, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEE
|
||||
{SPR_ROIF, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEF
|
||||
{SPR_ROIG, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEG
|
||||
{SPR_ROIH, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEH
|
||||
{SPR_ROII, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEI
|
||||
{SPR_ROIJ, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEJ
|
||||
{SPR_ROIK, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEK
|
||||
{SPR_ROIL, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEL
|
||||
{SPR_ROIM, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEM
|
||||
{SPR_ROIN, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEN
|
||||
{SPR_ROIO, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEO
|
||||
{SPR_ROIP, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEP
|
||||
{SPR_ROIB, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEB
|
||||
{SPR_ROIC, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEC
|
||||
{SPR_ROID, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLED
|
||||
{SPR_ROIE, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEE
|
||||
{SPR_ROIF, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEF
|
||||
{SPR_ROIG, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEG
|
||||
{SPR_ROIH, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEH
|
||||
{SPR_ROII, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEI
|
||||
{SPR_ROIJ, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEJ
|
||||
{SPR_ROIK, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEK
|
||||
{SPR_ROIL, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEL
|
||||
{SPR_ROIM, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEM
|
||||
{SPR_ROIN, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEN
|
||||
{SPR_ROIO, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEO
|
||||
{SPR_ROIP, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 7, 2, S_NULL}, // S_ROCKCRUMBLEP
|
||||
|
||||
{SPR_BRIC, FF_ANIMATE, -1, {A_DebrisRandom}, 7, 2, S_NULL}, // S_BRICKDEBRIS
|
||||
|
||||
|
@ -5631,7 +5677,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
|
||||
{ // MT_FANG
|
||||
204, // doomednum
|
||||
S_FANG_IDLE1, // spawnstate
|
||||
S_FANG_SETUP, // spawnstate
|
||||
8, // spawnhealth
|
||||
S_FANG_PATHINGSTART1, // seestate
|
||||
sfx_None, // seesound
|
||||
|
@ -5652,10 +5698,118 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
0, // mass
|
||||
3, // damage
|
||||
sfx_boingf, // activesound
|
||||
MF_SPECIAL|MF_BOSS|MF_SHOOTABLE|MF_GRENADEBOUNCE, // flags
|
||||
MF_RUNSPAWNFUNC|MF_SPECIAL|MF_BOSS|MF_SHOOTABLE|MF_GRENADEBOUNCE|MF_NOCLIPTHING, // flags -- MF_NOCLIPTHING will be removed after intro event ends
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BROKENROBOT
|
||||
-1, // doomednum
|
||||
S_BROKENROBOTRANDOM, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_ambint, // seesound
|
||||
0, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
255, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
8*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
0, // display offset
|
||||
1000, // mass
|
||||
0, // damage
|
||||
sfx_crumbl, // activesound
|
||||
MF_RUNSPAWNFUNC|MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_VWREF
|
||||
-1, // doomednum
|
||||
S_VWREF, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
3, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
42*FRACUNIT, // radius
|
||||
12*FRACUNIT, // height
|
||||
1, // display offset
|
||||
1000, // mass
|
||||
8, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_VWREB
|
||||
-1, // doomednum
|
||||
S_VWREB, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
3, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
42*FRACUNIT, // radius
|
||||
12*FRACUNIT, // height
|
||||
-1, // display offset
|
||||
1000, // mass
|
||||
8, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_PROJECTORLIGHT
|
||||
-1, // doomednum
|
||||
S_PROJECTORLIGHT1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
3, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
42*FRACUNIT, // radius
|
||||
52*FRACUNIT, // height
|
||||
-1, // display offset
|
||||
1000, // mass
|
||||
8, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_FBOMB
|
||||
-1, // doomednum
|
||||
S_FBOMB1, // spawnstate
|
||||
|
|
48
src/info.h
48
src/info.h
|
@ -253,6 +253,7 @@ void A_Boss5CheckOnGround();
|
|||
void A_Boss5CheckFalling();
|
||||
void A_Boss5PinchShot();
|
||||
void A_Boss5MakeItRain();
|
||||
void A_Boss5MakeJunk();
|
||||
void A_LookForBetter();
|
||||
void A_Boss5BombExplode();
|
||||
void A_DustDevilThink();
|
||||
|
@ -341,6 +342,10 @@ typedef enum sprite
|
|||
|
||||
// Boss 5 (Arid Canyon)
|
||||
SPR_FANG, // replaces EGGQ
|
||||
SPR_BRKN,
|
||||
SPR_WHAT,
|
||||
SPR_VWRE,
|
||||
SPR_PROJ, // projector light
|
||||
SPR_FBOM,
|
||||
SPR_FSGN,
|
||||
SPR_BARX, // bomb explosion (also used by barrel)
|
||||
|
@ -1501,6 +1506,25 @@ typedef enum state
|
|||
S_EGGROBOJET,
|
||||
|
||||
// Boss 5
|
||||
S_FANG_SETUP,
|
||||
S_FANG_INTRO0,
|
||||
S_FANG_INTRO1,
|
||||
S_FANG_INTRO2,
|
||||
S_FANG_INTRO3,
|
||||
S_FANG_INTRO4,
|
||||
S_FANG_INTRO5,
|
||||
S_FANG_INTRO6,
|
||||
S_FANG_INTRO7,
|
||||
S_FANG_INTRO8,
|
||||
S_FANG_INTRO9,
|
||||
S_FANG_INTRO10,
|
||||
S_FANG_INTRO11,
|
||||
S_FANG_INTRO12,
|
||||
S_FANG_CLONE1,
|
||||
S_FANG_CLONE2,
|
||||
S_FANG_CLONE3,
|
||||
S_FANG_CLONE4,
|
||||
S_FANG_IDLE0,
|
||||
S_FANG_IDLE1,
|
||||
S_FANG_IDLE2,
|
||||
S_FANG_IDLE3,
|
||||
|
@ -1572,6 +1596,26 @@ typedef enum state
|
|||
S_FANG_FLEEBOUNCE2,
|
||||
S_FANG_KO,
|
||||
|
||||
S_BROKENROBOTRANDOM,
|
||||
S_BROKENROBOTA,
|
||||
S_BROKENROBOTB,
|
||||
S_BROKENROBOTC,
|
||||
S_BROKENROBOTD,
|
||||
S_BROKENROBOTE,
|
||||
S_BROKENROBOTF,
|
||||
|
||||
S_ALART1,
|
||||
S_ALART2,
|
||||
|
||||
S_VWREF,
|
||||
S_VWREB,
|
||||
|
||||
S_PROJECTORLIGHT1,
|
||||
S_PROJECTORLIGHT2,
|
||||
S_PROJECTORLIGHT3,
|
||||
S_PROJECTORLIGHT4,
|
||||
S_PROJECTORLIGHT5,
|
||||
|
||||
S_FBOMB1,
|
||||
S_FBOMB2,
|
||||
S_FBOMB_EXPL1,
|
||||
|
@ -4003,6 +4047,10 @@ typedef enum mobj_type
|
|||
|
||||
// Boss 5
|
||||
MT_FANG,
|
||||
MT_BROKENROBOT,
|
||||
MT_VWREF,
|
||||
MT_VWREB,
|
||||
MT_PROJECTORLIGHT,
|
||||
MT_FBOMB,
|
||||
MT_TNTDUST, // also used by barrel
|
||||
MT_FSGNA,
|
||||
|
|
136
src/p_enemy.c
136
src/p_enemy.c
|
@ -283,6 +283,7 @@ void A_Boss5CheckOnGround(mobj_t *actor);
|
|||
void A_Boss5CheckFalling(mobj_t *actor);
|
||||
void A_Boss5PinchShot(mobj_t *actor);
|
||||
void A_Boss5MakeItRain(mobj_t *actor);
|
||||
void A_Boss5MakeJunk(mobj_t *actor);
|
||||
void A_LookForBetter(mobj_t *actor);
|
||||
void A_Boss5BombExplode(mobj_t *actor);
|
||||
void A_DustDevilThink(mobj_t *actor);
|
||||
|
@ -3028,10 +3029,15 @@ void A_Boss1Laser(mobj_t *actor)
|
|||
if (!actor->target)
|
||||
return;
|
||||
|
||||
if ((upperend & 1) && (actor->extravalue2 > 1))
|
||||
actor->extravalue2--;
|
||||
if (actor->state->tics > 1)
|
||||
dur = actor->tics;
|
||||
else
|
||||
{
|
||||
if ((upperend & 1) && (actor->extravalue2 > 1))
|
||||
actor->extravalue2--;
|
||||
|
||||
dur = actor->extravalue2;
|
||||
dur = actor->extravalue2;
|
||||
}
|
||||
|
||||
switch (locvar2)
|
||||
{
|
||||
|
@ -3077,23 +3083,15 @@ void A_Boss1Laser(mobj_t *actor)
|
|||
actor->angle = R_PointToAngle2(x, y, actor->target->x, actor->target->y);
|
||||
if (mobjinfo[locvar1].seesound)
|
||||
S_StartSound(actor, mobjinfo[locvar1].seesound);
|
||||
if (!(actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH))
|
||||
{
|
||||
point = P_SpawnMobj(x + P_ReturnThrustX(actor, actor->angle, actor->radius), y + P_ReturnThrustY(actor, actor->angle, actor->radius), actor->z - actor->height / 2, MT_EGGMOBILE_TARGET);
|
||||
point->angle = actor->angle;
|
||||
point->fuse = dur+1;
|
||||
P_SetTarget(&point->target, actor->target);
|
||||
P_SetTarget(&actor->target, point);
|
||||
}
|
||||
}
|
||||
/* -- the following was relevant when the MT_EGGMOBILE_TARGET was allowed to move left and right from its path
|
||||
else if (actor->target && !(actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH))
|
||||
actor->angle = R_PointToAngle2(x, y, actor->target->x, actor->target->y);*/
|
||||
|
||||
/*if (actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH)
|
||||
angle = FixedAngle(FixedDiv(dur*160*FRACUNIT, actor->state->tics*FRACUNIT) + 10*FRACUNIT);
|
||||
else*/
|
||||
angle = R_PointToAngle2(z + (mobjinfo[locvar1].height>>1), 0, actor->target->z, R_PointToDist2(x, y, actor->target->x, actor->target->y));
|
||||
point = P_SpawnMobj(x + P_ReturnThrustX(actor, actor->angle, actor->radius), y + P_ReturnThrustY(actor, actor->angle, actor->radius), actor->z - actor->height / 2, MT_EGGMOBILE_TARGET);
|
||||
point->angle = actor->angle;
|
||||
point->fuse = dur+1;
|
||||
P_SetTarget(&point->target, actor->target);
|
||||
P_SetTarget(&actor->target, point);
|
||||
}
|
||||
|
||||
angle = R_PointToAngle2(z + (mobjinfo[locvar1].height>>1), 0, actor->target->z, R_PointToDist2(x, y, actor->target->x, actor->target->y));
|
||||
|
||||
point = P_SpawnMobj(x, y, z, locvar1);
|
||||
P_SetTarget(&point->target, actor);
|
||||
|
@ -4029,13 +4027,17 @@ bossjustdie:
|
|||
}
|
||||
case MT_FANG:
|
||||
{
|
||||
if (mo->flags2 & MF2_SLIDEPUSH)
|
||||
{
|
||||
P_RemoveMobj(mo);
|
||||
return;
|
||||
}
|
||||
if (mo->tracer)
|
||||
{
|
||||
var1 = var2 = 0;
|
||||
A_Boss5Jump(mo);
|
||||
mo->momx = ((16 - 1)*mo->momx)/16;
|
||||
mo->momy = ((16 - 1)*mo->momy)/16;
|
||||
if (!(mo->flags2 & MF2_AMBUSH))
|
||||
{
|
||||
const fixed_t time = FixedHypot(mo->tracer->x - mo->x, mo->tracer->y - mo->y)/FixedHypot(mo->momx, mo->momy);
|
||||
const fixed_t speed = 64*FRACUNIT;
|
||||
|
@ -13030,6 +13032,100 @@ void A_Boss5MakeItRain(mobj_t *actor)
|
|||
actor->extravalue2 = 0;
|
||||
}
|
||||
|
||||
// Function: A_Boss5MakeJunk
|
||||
//
|
||||
// Description: Make a mess.
|
||||
//
|
||||
// var1 = state # to set on MT_BROKENROBOT (if 0 do nothing, if -1 go to if colorized)
|
||||
// var2 = mode (-1 = spin, 0 = make 1, & 1 make 8, & 2 alart mode)
|
||||
//
|
||||
void A_Boss5MakeJunk(mobj_t *actor)
|
||||
{
|
||||
INT32 locvar1 = var1;
|
||||
INT32 locvar2 = var2;
|
||||
mobj_t *broked;
|
||||
angle_t ang;
|
||||
INT32 i = ((locvar2 & 1) ? 8 : 1);
|
||||
#ifdef HAVE_BLUA
|
||||
if (LUA_CallAction("A_Boss5MakeJunk", actor))
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (locvar1 < 0 && (actor->flags2 & MF2_SLIDEPUSH)) // this entire action is a hack, don't judge me
|
||||
{
|
||||
INT32 curextravalue2 = actor->extravalue2;
|
||||
P_SpawnMobjFromMobj(actor, 0, 0, 0, MT_PROJECTORLIGHT);
|
||||
actor->z += P_MobjFlip(actor)*actor->height;
|
||||
actor->flags |= MF_NOGRAVITY;
|
||||
S_StartSound(actor, sfx_vwre);
|
||||
actor->extravalue2 = 49;
|
||||
P_SetMobjState(actor, -locvar1);
|
||||
actor->extravalue2 = curextravalue2;
|
||||
actor->angle -= FixedAngle((49*45)<<FRACBITS);
|
||||
return;
|
||||
}
|
||||
|
||||
if (locvar2 == -1)
|
||||
{
|
||||
INT32 trans = (10*actor->extravalue2)/50;
|
||||
if (trans > 9)
|
||||
trans = 9;
|
||||
if (trans < 0)
|
||||
trans = 0;
|
||||
if (!(actor->extravalue2 & 1))
|
||||
{
|
||||
if (actor->extravalue2 > 10)
|
||||
{
|
||||
mobj_t *front = P_SpawnMobjFromMobj(actor, 0, 0, 0, MT_VWREF);
|
||||
broked = P_SpawnMobjFromMobj(front, 0, 0, 0, MT_VWREB);
|
||||
front->z = broked->z = front->z - broked->height;
|
||||
P_SetObjectMomZ(front, (4<<FRACBITS), false);
|
||||
broked->momz = front->momz;
|
||||
broked->fuse = front->fuse = (actor->height+(2*front->height))/front->momz;
|
||||
}
|
||||
if (!(actor->colorized = !actor->colorized))
|
||||
actor->frame |= FF_FULLBRIGHT;
|
||||
}
|
||||
actor->angle += ANGLE_45;
|
||||
actor->frame = (actor->frame & ~FF_TRANSMASK)|(trans<<FF_TRANSSHIFT);
|
||||
return;
|
||||
}
|
||||
|
||||
ang = FixedAngle((P_RandomKey(36)*10)<<FRACBITS);
|
||||
while (i--)
|
||||
{
|
||||
broked = P_SpawnMobjFromMobj(actor, 0, 0, FRACUNIT, MT_BROKENROBOT);
|
||||
if (locvar2 & 2)
|
||||
broked->fuse = TICRATE;
|
||||
else
|
||||
broked->fuse = (((locvar2 & 1) ? 4 : 2)*TICRATE)/3;
|
||||
broked->angle = ang;
|
||||
P_InstaThrust(broked, ang, ((locvar2 & 2) ? 8 : 5)*actor->scale);
|
||||
P_SetObjectMomZ(broked, (((locvar2) ? 4 : 0) + P_RandomRange(2, 5))<<FRACBITS, false);
|
||||
if (locvar1 > 0)
|
||||
P_SetMobjState(broked, locvar1);
|
||||
if (!P_MobjWasRemoved(broked))
|
||||
P_TeleportMove(broked, broked->x + broked->momx, broked->y + broked->momy, broked->z);
|
||||
ang += ANGLE_45;
|
||||
}
|
||||
|
||||
if (locvar2 & 2)
|
||||
{
|
||||
broked = P_SpawnMobjFromMobj(actor, 0, 0, 64<<FRACBITS, MT_GHOST);
|
||||
S_StartSound(broked, sfx_alart);
|
||||
broked->fuse = states[S_FANG_INTRO12].tics+10;
|
||||
P_SetMobjState(broked, S_ALART1);
|
||||
}
|
||||
else if (locvar2 & 1)
|
||||
{
|
||||
broked->z += broked->momz;
|
||||
S_StartSound(actor, sfx_s3kccs);
|
||||
actor->flags &= ~MF_NOCLIPTHING;
|
||||
}
|
||||
else
|
||||
S_StartSound(actor, sfx_s3kd3s);
|
||||
}
|
||||
|
||||
// Function: A_LookForBetter
|
||||
//
|
||||
// Description: A_Look, except it finds a better target in multiplayer, and doesn't lose the target in singleplayer.
|
||||
|
|
|
@ -746,7 +746,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
|||
return true;
|
||||
}
|
||||
|
||||
if (!(thing->flags & (MF_SOLID|MF_SPECIAL|MF_PAIN|MF_SHOOTABLE|MF_SPRING)))
|
||||
if ((thing->flags & MF_NOCLIPTHING) || !(thing->flags & (MF_SOLID|MF_SPECIAL|MF_PAIN|MF_SHOOTABLE|MF_SPRING)))
|
||||
return true;
|
||||
|
||||
// Don't collide with your buddies while NiGHTS-flying.
|
||||
|
|
63
src/p_mobj.c
63
src/p_mobj.c
|
@ -5078,6 +5078,24 @@ static void P_Boss5Thinker(mobj_t *mobj)
|
|||
{
|
||||
if (!mobj->health)
|
||||
{
|
||||
if (mobj->fuse)
|
||||
{
|
||||
if (mobj->flags2 & MF2_SLIDEPUSH)
|
||||
{
|
||||
INT32 trans = 10-((10*mobj->fuse)/70);
|
||||
if (trans > 9)
|
||||
trans = 9;
|
||||
if (trans < 0)
|
||||
trans = 0;
|
||||
mobj->frame = (mobj->frame & ~FF_TRANSMASK)|(trans<<FF_TRANSSHIFT);
|
||||
if (!(mobj->fuse & 1))
|
||||
{
|
||||
mobj->colorized = !mobj->colorized;
|
||||
mobj->frame ^= FF_FULLBRIGHT;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (mobj->state == &states[mobj->info->xdeathstate])
|
||||
mobj->momz -= (2*FRACUNIT)/3;
|
||||
else if (mobj->tracer && P_AproxDistance(mobj->tracer->x - mobj->x, mobj->tracer->y - mobj->y) < 2*mobj->radius)
|
||||
|
@ -7665,6 +7683,17 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
if (mobj->movedir)
|
||||
mobj->angle += mobj->movedir;
|
||||
break;
|
||||
case MT_VWREF:
|
||||
case MT_VWREB:
|
||||
{
|
||||
INT32 strength;
|
||||
++mobj->movedir;
|
||||
mobj->frame &= ~FF_TRANSMASK;
|
||||
strength = min(mobj->fuse, mobj->movedir)*3;
|
||||
if (strength < 10)
|
||||
mobj->frame |= ((10-strength)<<(FF_TRANSSHIFT));
|
||||
}
|
||||
/* FALLTHRU */
|
||||
default:
|
||||
if (mobj->fuse)
|
||||
{ // Scenery object fuse! Very basic!
|
||||
|
@ -9114,9 +9143,12 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
{
|
||||
if (mobj->state->action.acp1 == (actionf_p1)A_Boss1Laser)
|
||||
{
|
||||
/*var1 = mobj->state->var1;
|
||||
var2 = mobj->state->var2 & 65535;
|
||||
mobj->state->action.acp1(mobj);*/
|
||||
if (mobj->state->tics > 1)
|
||||
{
|
||||
var1 = mobj->state->var1;
|
||||
var2 = mobj->state->var2 & 65535;
|
||||
mobj->state->action.acp1(mobj);
|
||||
}
|
||||
}
|
||||
else if (leveltime & 1) // Fire mode
|
||||
{
|
||||
|
@ -9282,6 +9314,18 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s
|
|||
}
|
||||
P_RemoveMobj(mobj);
|
||||
return;
|
||||
case MT_FANG:
|
||||
if (mobj->flags2 & MF2_SLIDEPUSH)
|
||||
{
|
||||
var1 = 0;
|
||||
var2 = 0;
|
||||
A_BossDeath(mobj);
|
||||
return;
|
||||
}
|
||||
P_SetMobjState(mobj, mobj->state->nextstate);
|
||||
if (P_MobjWasRemoved(mobj))
|
||||
return;
|
||||
break;
|
||||
case MT_METALSONIC_BATTLE:
|
||||
break; // don't remove
|
||||
case MT_SPIKE:
|
||||
|
@ -9880,7 +9924,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
break;
|
||||
}
|
||||
|
||||
if (sc != -1)
|
||||
if (sc != -1 && !(mobj->flags2 & MF2_SLIDEPUSH))
|
||||
{
|
||||
UINT8 i;
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
|
@ -9892,6 +9936,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
{
|
||||
mobj->color = SKINCOLOR_SILVER;
|
||||
mobj->colorized = true;
|
||||
mobj->flags2 |= MF2_SLIDEPUSH;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -11238,6 +11283,16 @@ You should think about modifying the deathmatch starts to take full advantage of
|
|||
else
|
||||
mobj->health = FixedMul(ss->sector->ceilingheight-ss->sector->floorheight, 3*(FRACUNIT/4))>>FRACBITS;
|
||||
break;
|
||||
case MT_FANG:
|
||||
case MT_METALSONIC_RACE:
|
||||
case MT_METALSONIC_BATTLE:
|
||||
if (mthing->options & MTF_EXTRA)
|
||||
{
|
||||
mobj->color = SKINCOLOR_SILVER;
|
||||
mobj->colorized = true;
|
||||
mobj->flags2 |= MF2_SLIDEPUSH;
|
||||
}
|
||||
break;
|
||||
case MT_BALLOON:
|
||||
if (mthing->angle > 0)
|
||||
mobj->color = ((mthing->angle-1) % (MAXSKINCOLORS-1))+1;
|
||||
|
|
|
@ -8890,12 +8890,16 @@ mobj_t *P_LookForEnemies(player_t *player, boolean nonenemies, boolean bullet)
|
|||
continue;
|
||||
|
||||
mo = (mobj_t *)think;
|
||||
if (!((mo->flags & (MF_ENEMY|MF_BOSS|MF_MONITOR) && (mo->flags & MF_SHOOTABLE)) || (mo->flags & MF_SPRING)) == !(mo->flags2 & MF2_INVERTAIMABLE)) // allows if it has the flags desired XOR it has the invert aimable flag
|
||||
continue; // not a valid target
|
||||
|
||||
if (mo->flags & MF_NOCLIPTHING)
|
||||
continue;
|
||||
|
||||
if (mo->health <= 0) // dead
|
||||
continue;
|
||||
|
||||
if (!((mo->flags & (MF_ENEMY|MF_BOSS|MF_MONITOR) && (mo->flags & MF_SHOOTABLE)) || (mo->flags & MF_SPRING)) == !(mo->flags2 & MF2_INVERTAIMABLE)) // allows if it has the flags desired XOR it has the invert aimable flag
|
||||
continue; // not a valid target
|
||||
|
||||
if (mo == player->mo)
|
||||
continue;
|
||||
|
||||
|
|
|
@ -212,6 +212,8 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"boingf", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bouncing"},
|
||||
{"corkp", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cork fired"},
|
||||
{"corkh", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cork hit"},
|
||||
{"alart", false, 200, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Caught red handed!"},
|
||||
{"vwre", false, 200, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Clone fighter!"},
|
||||
{"bowl", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bowling"},
|
||||
{"chuchu", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Train horn"},
|
||||
{"bsnipe", false, 200, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Home-run smash"},
|
||||
|
@ -609,8 +611,8 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"s3kcal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Energy"}, // ditto
|
||||
{"s3kcbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous rumbling"},
|
||||
{"s3kcbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous rumbling"}, // ditto
|
||||
{"s3kccs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Collapsing"},
|
||||
{"s3kccl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Collapsing"}, // ditto
|
||||
{"s3kccs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bursting"},
|
||||
{"s3kccl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bursting"}, // ditto
|
||||
{"s3kcds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous rumbling"},
|
||||
{"s3kcdl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous rumbling"}, // ditto
|
||||
{"s3kces", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Wind tunnel"},
|
||||
|
|
|
@ -261,6 +261,8 @@ typedef enum
|
|||
sfx_boingf,
|
||||
sfx_corkp,
|
||||
sfx_corkh,
|
||||
sfx_alart,
|
||||
sfx_vwre,
|
||||
sfx_bowl,
|
||||
sfx_chuchu,
|
||||
sfx_bsnipe,
|
||||
|
|
Loading…
Reference in a new issue