* Add vwre vwre intro for Fang Clone Fighter battle. (Still skipped with presence of MTF_AMBUSH)
* https://cdn.discordapp.com/attachments/428262628893261828/626792815451701259/srb20006.gif * Add fadeout instead of slapstick for Fang Clone Fighter death. * Allow placed Fang and Metal Sonic objects to be marked as Clone Fighters always through presence of MTF_EXTRA.
This commit is contained in:
parent
313fed2a59
commit
ec1712064c
|
@ -4786,6 +4786,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
|
|
||||||
// Boss 5
|
// Boss 5
|
||||||
"S_FANG_SETUP",
|
"S_FANG_SETUP",
|
||||||
|
"S_FANG_INTRO0",
|
||||||
"S_FANG_INTRO1",
|
"S_FANG_INTRO1",
|
||||||
"S_FANG_INTRO2",
|
"S_FANG_INTRO2",
|
||||||
"S_FANG_INTRO3",
|
"S_FANG_INTRO3",
|
||||||
|
@ -4798,6 +4799,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_FANG_INTRO10",
|
"S_FANG_INTRO10",
|
||||||
"S_FANG_INTRO11",
|
"S_FANG_INTRO11",
|
||||||
"S_FANG_INTRO12",
|
"S_FANG_INTRO12",
|
||||||
|
"S_FANG_CLONE1",
|
||||||
|
"S_FANG_CLONE2",
|
||||||
|
"S_FANG_CLONE3",
|
||||||
|
"S_FANG_CLONE4",
|
||||||
"S_FANG_IDLE0",
|
"S_FANG_IDLE0",
|
||||||
"S_FANG_IDLE1",
|
"S_FANG_IDLE1",
|
||||||
"S_FANG_IDLE2",
|
"S_FANG_IDLE2",
|
||||||
|
@ -4881,6 +4886,15 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_ALART1",
|
"S_ALART1",
|
||||||
"S_ALART2",
|
"S_ALART2",
|
||||||
|
|
||||||
|
"S_VWREF",
|
||||||
|
"S_VWREB",
|
||||||
|
|
||||||
|
"S_PROJECTORLIGHT1",
|
||||||
|
"S_PROJECTORLIGHT2",
|
||||||
|
"S_PROJECTORLIGHT3",
|
||||||
|
"S_PROJECTORLIGHT4",
|
||||||
|
"S_PROJECTORLIGHT5",
|
||||||
|
|
||||||
"S_FBOMB1",
|
"S_FBOMB1",
|
||||||
"S_FBOMB2",
|
"S_FBOMB2",
|
||||||
"S_FBOMB_EXPL1",
|
"S_FBOMB_EXPL1",
|
||||||
|
@ -7291,6 +7305,9 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
// Boss 5
|
// Boss 5
|
||||||
"MT_FANG",
|
"MT_FANG",
|
||||||
"MT_BROKENROBOT",
|
"MT_BROKENROBOT",
|
||||||
|
"MT_VWREF",
|
||||||
|
"MT_VWREB",
|
||||||
|
"MT_PROJECTORLIGHT",
|
||||||
"MT_FBOMB",
|
"MT_FBOMB",
|
||||||
"MT_TNTDUST", // also used by barrel
|
"MT_TNTDUST", // also used by barrel
|
||||||
"MT_FSGNA",
|
"MT_FSGNA",
|
||||||
|
|
|
@ -204,13 +204,15 @@ light_t *t_lspr[NUMSPRITES] =
|
||||||
&lspr[NOLIGHT], // SPR_EGR1
|
&lspr[NOLIGHT], // SPR_EGR1
|
||||||
|
|
||||||
// Boss 5 (Arid Canyon)
|
// Boss 5 (Arid Canyon)
|
||||||
&lspr[NOLIGHT], //SPR_FANG // replaces EGGQ
|
&lspr[NOLIGHT], // SPR_FANG // replaces EGGQ
|
||||||
&lspr[NOLIGHT], //SPR_BRKN
|
&lspr[NOLIGHT], // SPR_BRKN
|
||||||
&lspr[NOLIGHT], //SPR_WHAT
|
&lspr[NOLIGHT], // SPR_WHAT
|
||||||
&lspr[NOLIGHT], //SPR_FBOM
|
&lspr[INVINCIBLE_L], // SPR_VWRE
|
||||||
&lspr[NOLIGHT], //SPR_FSGN
|
&lspr[INVINCIBLE_L], // SPR_PROJ
|
||||||
&lspr[REDBALL_L], //SPR_BARX // bomb explosion (also used by barrel)
|
&lspr[NOLIGHT], // SPR_FBOM
|
||||||
&lspr[NOLIGHT], //SPR_BARD // bomb dust (also used by barrel)
|
&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)
|
// Boss 6 (Red Volcano)
|
||||||
&lspr[NOLIGHT], // SPR_EEGR
|
&lspr[NOLIGHT], // SPR_EEGR
|
||||||
|
|
106
src/info.c
106
src/info.c
|
@ -95,6 +95,8 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"FANG", // replaces EGGQ
|
"FANG", // replaces EGGQ
|
||||||
"BRKN", // broken robot chunk
|
"BRKN", // broken robot chunk
|
||||||
"WHAT", // alart
|
"WHAT", // alart
|
||||||
|
"VWRE",
|
||||||
|
"PROJ", // projector light
|
||||||
"FBOM",
|
"FBOM",
|
||||||
"FSGN",
|
"FSGN",
|
||||||
"BARX", // bomb explosion (also used by barrel)
|
"BARX", // bomb explosion (also used by barrel)
|
||||||
|
@ -1350,9 +1352,10 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_EFIR, FF_FULLBRIGHT|2, -1, {NULL}, 0, 0, S_NULL}, // S_EGGROBOJET
|
{SPR_EFIR, FF_FULLBRIGHT|2, -1, {NULL}, 0, 0, S_NULL}, // S_EGGROBOJET
|
||||||
|
|
||||||
// Boss 5
|
// Boss 5
|
||||||
{SPR_NULL, 0, 2, {A_CheckFlags2}, MF2_AMBUSH, S_FANG_IDLE0, S_FANG_INTRO1}, // S_FANG_SETUP
|
{SPR_NULL, 0, 2, {A_CheckFlags2}, MF2_AMBUSH, S_FANG_IDLE0, S_FANG_INTRO0}, // S_FANG_SETUP
|
||||||
|
|
||||||
{SPR_NULL, 0, 2, {A_Boss5MakeJunk}, 0, 0, S_FANG_INTRO2}, // S_FANG_INTRO1
|
{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_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_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, 30, 1, {A_ZThrust}, 9, (1<<16)|1, S_FANG_INTRO5}, // S_FANG_INTRO4
|
||||||
|
@ -1365,6 +1368,11 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_FANG, 26, 2, {A_Boss5MakeJunk}, S_BROKENROBOTD, 2, S_FANG_INTRO12}, // S_FANG_INTRO11
|
{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, 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, 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, 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_IDLE3}, // S_FANG_IDLE2
|
||||||
|
@ -1440,8 +1448,8 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_FANG, 21, 0, {A_DoNPCPain}, 0, 0, S_FANG_DIE2}, // S_FANG_DIE1
|
{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, 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, 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, -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, 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
|
{SPR_FANG, 11, 1, {A_ZThrust}, 6, (1<<16)|1, S_FANG_DIE7}, // S_FANG_DIE6
|
||||||
|
@ -1466,6 +1474,15 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_WHAT, FF_ANIMATE|FF_FULLBRIGHT, 4, {NULL}, 1, 2, S_ALART2}, // S_ALART1
|
{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_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, 0, 1, {A_GhostMe}, 0, 0, S_FBOMB2}, // S_FBOMB1
|
||||||
{SPR_FBOM, 1, 1, {A_GhostMe}, 0, 0, S_FBOMB1}, // S_FBOMB2
|
{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
|
{SPR_BARX, 0|FF_FULLBRIGHT, 3, {A_SetObjectFlags}, MF_NOCLIP|MF_NOGRAVITY|MF_NOBLOCKMAP, 0, S_FBOMB_EXPL2}, // S_FBOMB_EXPL1
|
||||||
|
@ -5706,6 +5723,87 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
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
|
{ // MT_FBOMB
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_FBOMB1, // spawnstate
|
S_FBOMB1, // spawnstate
|
||||||
|
|
19
src/info.h
19
src/info.h
|
@ -342,6 +342,8 @@ typedef enum sprite
|
||||||
SPR_FANG, // replaces EGGQ
|
SPR_FANG, // replaces EGGQ
|
||||||
SPR_BRKN,
|
SPR_BRKN,
|
||||||
SPR_WHAT,
|
SPR_WHAT,
|
||||||
|
SPR_VWRE,
|
||||||
|
SPR_PROJ, // projector light
|
||||||
SPR_FBOM,
|
SPR_FBOM,
|
||||||
SPR_FSGN,
|
SPR_FSGN,
|
||||||
SPR_BARX, // bomb explosion (also used by barrel)
|
SPR_BARX, // bomb explosion (also used by barrel)
|
||||||
|
@ -1499,6 +1501,7 @@ typedef enum state
|
||||||
|
|
||||||
// Boss 5
|
// Boss 5
|
||||||
S_FANG_SETUP,
|
S_FANG_SETUP,
|
||||||
|
S_FANG_INTRO0,
|
||||||
S_FANG_INTRO1,
|
S_FANG_INTRO1,
|
||||||
S_FANG_INTRO2,
|
S_FANG_INTRO2,
|
||||||
S_FANG_INTRO3,
|
S_FANG_INTRO3,
|
||||||
|
@ -1511,6 +1514,10 @@ typedef enum state
|
||||||
S_FANG_INTRO10,
|
S_FANG_INTRO10,
|
||||||
S_FANG_INTRO11,
|
S_FANG_INTRO11,
|
||||||
S_FANG_INTRO12,
|
S_FANG_INTRO12,
|
||||||
|
S_FANG_CLONE1,
|
||||||
|
S_FANG_CLONE2,
|
||||||
|
S_FANG_CLONE3,
|
||||||
|
S_FANG_CLONE4,
|
||||||
S_FANG_IDLE0,
|
S_FANG_IDLE0,
|
||||||
S_FANG_IDLE1,
|
S_FANG_IDLE1,
|
||||||
S_FANG_IDLE2,
|
S_FANG_IDLE2,
|
||||||
|
@ -1594,6 +1601,15 @@ typedef enum state
|
||||||
S_ALART1,
|
S_ALART1,
|
||||||
S_ALART2,
|
S_ALART2,
|
||||||
|
|
||||||
|
S_VWREF,
|
||||||
|
S_VWREB,
|
||||||
|
|
||||||
|
S_PROJECTORLIGHT1,
|
||||||
|
S_PROJECTORLIGHT2,
|
||||||
|
S_PROJECTORLIGHT3,
|
||||||
|
S_PROJECTORLIGHT4,
|
||||||
|
S_PROJECTORLIGHT5,
|
||||||
|
|
||||||
S_FBOMB1,
|
S_FBOMB1,
|
||||||
S_FBOMB2,
|
S_FBOMB2,
|
||||||
S_FBOMB_EXPL1,
|
S_FBOMB_EXPL1,
|
||||||
|
@ -4026,6 +4042,9 @@ typedef enum mobj_type
|
||||||
// Boss 5
|
// Boss 5
|
||||||
MT_FANG,
|
MT_FANG,
|
||||||
MT_BROKENROBOT,
|
MT_BROKENROBOT,
|
||||||
|
MT_VWREF,
|
||||||
|
MT_VWREB,
|
||||||
|
MT_PROJECTORLIGHT,
|
||||||
MT_FBOMB,
|
MT_FBOMB,
|
||||||
MT_TNTDUST, // also used by barrel
|
MT_TNTDUST, // also used by barrel
|
||||||
MT_FSGNA,
|
MT_FSGNA,
|
||||||
|
|
|
@ -4026,13 +4026,17 @@ bossjustdie:
|
||||||
}
|
}
|
||||||
case MT_FANG:
|
case MT_FANG:
|
||||||
{
|
{
|
||||||
|
if (mo->flags2 & MF2_SLIDEPUSH)
|
||||||
|
{
|
||||||
|
P_RemoveMobj(mo);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (mo->tracer)
|
if (mo->tracer)
|
||||||
{
|
{
|
||||||
var1 = var2 = 0;
|
var1 = var2 = 0;
|
||||||
A_Boss5Jump(mo);
|
A_Boss5Jump(mo);
|
||||||
mo->momx = ((16 - 1)*mo->momx)/16;
|
mo->momx = ((16 - 1)*mo->momx)/16;
|
||||||
mo->momy = ((16 - 1)*mo->momy)/16;
|
mo->momy = ((16 - 1)*mo->momy)/16;
|
||||||
if (!(mo->spawnpoint && mo->spawnpoint->options & MTF_EXTRA))
|
|
||||||
{
|
{
|
||||||
const fixed_t time = FixedHypot(mo->tracer->x - mo->x, mo->tracer->y - mo->y)/FixedHypot(mo->momx, mo->momy);
|
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;
|
const fixed_t speed = 64*FRACUNIT;
|
||||||
|
@ -12980,8 +12984,8 @@ void A_Boss5MakeItRain(mobj_t *actor)
|
||||||
//
|
//
|
||||||
// Description: Make a mess.
|
// Description: Make a mess.
|
||||||
//
|
//
|
||||||
// var1 = state # to set on MT_BROKENROBOT (if 0 do nothing)
|
// var1 = state # to set on MT_BROKENROBOT (if 0 do nothing, if -1 go to if colorized)
|
||||||
// var2 = mode (0 = make 1, & 1 make 8, & 2 alart mode)
|
// var2 = mode (-1 = spin, 0 = make 1, & 1 make 8, & 2 alart mode)
|
||||||
//
|
//
|
||||||
void A_Boss5MakeJunk(mobj_t *actor)
|
void A_Boss5MakeJunk(mobj_t *actor)
|
||||||
{
|
{
|
||||||
|
@ -12995,8 +12999,45 @@ void A_Boss5MakeJunk(mobj_t *actor)
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (leveltime < 2)
|
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;
|
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);
|
ang = FixedAngle((P_RandomKey(36)*10)<<FRACBITS);
|
||||||
while (i--)
|
while (i--)
|
||||||
|
@ -13009,7 +13050,7 @@ void A_Boss5MakeJunk(mobj_t *actor)
|
||||||
broked->angle = ang;
|
broked->angle = ang;
|
||||||
P_InstaThrust(broked, ang, ((locvar2 & 2) ? 8 : 5)*actor->scale);
|
P_InstaThrust(broked, ang, ((locvar2 & 2) ? 8 : 5)*actor->scale);
|
||||||
P_SetObjectMomZ(broked, (((locvar2) ? 4 : 0) + P_RandomRange(2, 5))<<FRACBITS, false);
|
P_SetObjectMomZ(broked, (((locvar2) ? 4 : 0) + P_RandomRange(2, 5))<<FRACBITS, false);
|
||||||
if (locvar1 != 0)
|
if (locvar1 > 0)
|
||||||
P_SetMobjState(broked, locvar1);
|
P_SetMobjState(broked, locvar1);
|
||||||
if (!P_MobjWasRemoved(broked))
|
if (!P_MobjWasRemoved(broked))
|
||||||
P_TeleportMove(broked, broked->x + broked->momx, broked->y + broked->momy, broked->z);
|
P_TeleportMove(broked, broked->x + broked->momx, broked->y + broked->momy, broked->z);
|
||||||
|
|
54
src/p_mobj.c
54
src/p_mobj.c
|
@ -5063,6 +5063,24 @@ static void P_Boss5Thinker(mobj_t *mobj)
|
||||||
{
|
{
|
||||||
if (!mobj->health)
|
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])
|
if (mobj->state == &states[mobj->info->xdeathstate])
|
||||||
mobj->momz -= (2*FRACUNIT)/3;
|
mobj->momz -= (2*FRACUNIT)/3;
|
||||||
else if (mobj->tracer && P_AproxDistance(mobj->tracer->x - mobj->x, mobj->tracer->y - mobj->y) < 2*mobj->radius)
|
else if (mobj->tracer && P_AproxDistance(mobj->tracer->x - mobj->x, mobj->tracer->y - mobj->y) < 2*mobj->radius)
|
||||||
|
@ -7649,6 +7667,17 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
if (mobj->movedir)
|
if (mobj->movedir)
|
||||||
mobj->angle += mobj->movedir;
|
mobj->angle += mobj->movedir;
|
||||||
break;
|
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:
|
default:
|
||||||
if (mobj->fuse)
|
if (mobj->fuse)
|
||||||
{ // Scenery object fuse! Very basic!
|
{ // Scenery object fuse! Very basic!
|
||||||
|
@ -9269,6 +9298,18 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s
|
||||||
}
|
}
|
||||||
P_RemoveMobj(mobj);
|
P_RemoveMobj(mobj);
|
||||||
return;
|
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:
|
case MT_METALSONIC_BATTLE:
|
||||||
break; // don't remove
|
break; // don't remove
|
||||||
case MT_SPIKE:
|
case MT_SPIKE:
|
||||||
|
@ -9867,7 +9908,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sc != -1)
|
if (sc != -1 && !(mobj->flags2 & MF2_SLIDEPUSH))
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
@ -9879,6 +9920,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
||||||
{
|
{
|
||||||
mobj->color = SKINCOLOR_SILVER;
|
mobj->color = SKINCOLOR_SILVER;
|
||||||
mobj->colorized = true;
|
mobj->colorized = true;
|
||||||
|
mobj->flags2 |= MF2_SLIDEPUSH;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11225,6 +11267,16 @@ You should think about modifying the deathmatch starts to take full advantage of
|
||||||
else
|
else
|
||||||
mobj->health = FixedMul(ss->sector->ceilingheight-ss->sector->floorheight, 3*(FRACUNIT/4))>>FRACBITS;
|
mobj->health = FixedMul(ss->sector->ceilingheight-ss->sector->floorheight, 3*(FRACUNIT/4))>>FRACBITS;
|
||||||
break;
|
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:
|
case MT_BALLOON:
|
||||||
if (mthing->angle > 0)
|
if (mthing->angle > 0)
|
||||||
mobj->color = ((mthing->angle-1) % (MAXSKINCOLORS-1))+1;
|
mobj->color = ((mthing->angle-1) % (MAXSKINCOLORS-1))+1;
|
||||||
|
|
|
@ -213,6 +213,7 @@ sfxinfo_t S_sfx[NUMSFX] =
|
||||||
{"corkp", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cork fired"},
|
{"corkp", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cork fired"},
|
||||||
{"corkh", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cork hit"},
|
{"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!"},
|
{"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"},
|
{"bowl", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bowling"},
|
||||||
{"chuchu", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Train horn"},
|
{"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"},
|
{"bsnipe", false, 200, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Home-run smash"},
|
||||||
|
|
|
@ -262,6 +262,7 @@ typedef enum
|
||||||
sfx_corkp,
|
sfx_corkp,
|
||||||
sfx_corkh,
|
sfx_corkh,
|
||||||
sfx_alart,
|
sfx_alart,
|
||||||
|
sfx_vwre,
|
||||||
sfx_bowl,
|
sfx_bowl,
|
||||||
sfx_chuchu,
|
sfx_chuchu,
|
||||||
sfx_bsnipe,
|
sfx_bsnipe,
|
||||||
|
|
Loading…
Reference in New Issue