mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-05-10 19:01:50 +00:00
Hardcode Chaos Chute objects
This commit is contained in:
parent
56f549676a
commit
7a8bb8ec40
7 changed files with 172 additions and 32 deletions
|
|
@ -289,6 +289,7 @@ actionpointer_t actionpointers[] =
|
||||||
{{A_SSMineFlash}, "A_SSMINEFLASH"},
|
{{A_SSMineFlash}, "A_SSMINEFLASH"},
|
||||||
{{A_LandMineExplode}, "A_LANDMINEEXPLODE"},
|
{{A_LandMineExplode}, "A_LANDMINEEXPLODE"},
|
||||||
{{A_BallhogExplode}, "A_BALLHOGEXPLODE"},
|
{{A_BallhogExplode}, "A_BALLHOGEXPLODE"},
|
||||||
|
{{A_SpecialStageBombExplode},"A_SPECIALSTAGEBOMBEXPLODE"},
|
||||||
{{A_LightningFollowPlayer}, "A_LIGHTNINGFOLLOWPLAYER"},
|
{{A_LightningFollowPlayer}, "A_LIGHTNINGFOLLOWPLAYER"},
|
||||||
{{A_FZBoomFlash}, "A_FZBOOMFLASH"},
|
{{A_FZBoomFlash}, "A_FZBOOMFLASH"},
|
||||||
{{A_FZBoomSmoke}, "A_FZBOOMSMOKE"},
|
{{A_FZBoomSmoke}, "A_FZBOOMSMOKE"},
|
||||||
|
|
@ -4369,6 +4370,17 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_EERIEFOG4",
|
"S_EERIEFOG4",
|
||||||
"S_EERIEFOG5",
|
"S_EERIEFOG5",
|
||||||
|
|
||||||
|
// Chaos Chute
|
||||||
|
"S_SPECIALSTAGEARCH",
|
||||||
|
"S_SPECIALSTAGEBOMB",
|
||||||
|
"S_SPECIALSTAGEBOMB_DISARM",
|
||||||
|
"S_SPECIALSTAGEBOMB_EXPLODE",
|
||||||
|
"S_SPECIALSTAGEBOMB_DISAPPEAR",
|
||||||
|
"S_SPECIALSTAGEBOMB_FLICKER1",
|
||||||
|
"S_SPECIALSTAGEBOMB_FLICKER2",
|
||||||
|
"S_SPECIALSTAGEBOMB_FLICKERLOOP",
|
||||||
|
"S_SPECIALSTAGEBOMB_RESET",
|
||||||
|
|
||||||
// SMK ports
|
// SMK ports
|
||||||
"S_SMK_PIPE1", // Generic pipes
|
"S_SMK_PIPE1", // Generic pipes
|
||||||
"S_SMK_PIPE2",
|
"S_SMK_PIPE2",
|
||||||
|
|
@ -5727,6 +5739,10 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
||||||
"MT_EERIEFOG",
|
"MT_EERIEFOG",
|
||||||
"MT_EERIEFOGGEN",
|
"MT_EERIEFOGGEN",
|
||||||
|
|
||||||
|
// Chaos Chute
|
||||||
|
"MT_SPECIALSTAGEARCH",
|
||||||
|
"MT_SPECIALSTAGEBOMB",
|
||||||
|
|
||||||
// SMK ports
|
// SMK ports
|
||||||
"MT_SMK_PIPE",
|
"MT_SMK_PIPE",
|
||||||
"MT_SMK_MOLESPAWNER",
|
"MT_SMK_MOLESPAWNER",
|
||||||
|
|
|
||||||
69
src/info.c
69
src/info.c
|
|
@ -797,6 +797,10 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
// Eerie Grove
|
// Eerie Grove
|
||||||
"EGFG",
|
"EGFG",
|
||||||
|
|
||||||
|
// Chaos Chute
|
||||||
|
"SARC",
|
||||||
|
"SSBM",
|
||||||
|
|
||||||
// SMK ports
|
// SMK ports
|
||||||
"SMKP",
|
"SMKP",
|
||||||
"MTYM",
|
"MTYM",
|
||||||
|
|
@ -5088,6 +5092,17 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_EGFG, FF_TRANS90|FF_FULLBRIGHT|3, 7, {A_SetRandomTics}, 5, 9, S_EERIEFOG5}, // S_EERIEFOG4
|
{SPR_EGFG, FF_TRANS90|FF_FULLBRIGHT|3, 7, {A_SetRandomTics}, 5, 9, S_EERIEFOG5}, // S_EERIEFOG4
|
||||||
{SPR_EGFG, FF_TRANS90|FF_FULLBRIGHT|4, 7, {A_SetRandomTics}, 5, 9, S_EERIEFOG1}, // S_EERIEFOG5
|
{SPR_EGFG, FF_TRANS90|FF_FULLBRIGHT|4, 7, {A_SetRandomTics}, 5, 9, S_EERIEFOG1}, // S_EERIEFOG5
|
||||||
|
|
||||||
|
// Chaos Chute
|
||||||
|
{SPR_SARC, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_SPECIALSTAGEARCH
|
||||||
|
{SPR_SSBM, FF_GLOBALANIM|FF_ANIMATE|0, -1, {NULL}, 3, 3, S_NULL}, // S_SPECIALSTAGEBOMB
|
||||||
|
{SPR_SSBM, 0, 1, {A_SetObjectFlags}, MF_NOCLIPTHING, 2, S_SPECIALSTAGEBOMB_EXPLODE}, // S_SPECIALSTAGEBOMB_DISARM
|
||||||
|
{SPR_NULL, 0, 0, {A_SpecialStageBombExplode}, 0, 0, S_SPECIALSTAGEBOMB_DISAPPEAR}, // S_SPECIALSTAGEBOMB_EXPLODE
|
||||||
|
{SPR_NULL, 0, 28*TICRATE, {A_Pain}, 0, 0, S_SPECIALSTAGEBOMB_FLICKER1}, // S_SPECIALSTAGEBOMB_DISAPPEAR
|
||||||
|
{SPR_SSBM, FF_GLOBALANIM|FF_ANIMATE|0, 1, {NULL}, 3, 3, S_SPECIALSTAGEBOMB_FLICKER2}, // S_SPECIALSTAGEBOMB_FLICKER1
|
||||||
|
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_SPECIALSTAGEBOMB_FLICKERLOOP}, // S_SPECIALSTAGEBOMB_FLICKER2
|
||||||
|
{SPR_NULL, 0, 0, {A_Repeat}, TICRATE, S_SPECIALSTAGEBOMB_FLICKER1, S_SPECIALSTAGEBOMB_RESET}, // S_SPECIALSTAGEBOMB_FLICKERLOOP
|
||||||
|
{SPR_NULL, 0, 0, {A_SetObjectFlags}, MF_NOCLIPTHING, 1, S_SPECIALSTAGEBOMB}, // S_SPECIALSTAGEBOMB_RESET
|
||||||
|
|
||||||
// SMK ports
|
// SMK ports
|
||||||
{SPR_SMKP, 0, -1, {NULL}, 0, 0, S_SMK_PIPE1}, // S_SMK_PIPE1
|
{SPR_SMKP, 0, -1, {NULL}, 0, 0, S_SMK_PIPE1}, // S_SMK_PIPE1
|
||||||
{SPR_SMKP, 1, -1, {NULL}, 0, 0, S_SMK_PIPE2}, // S_SMK_PIPE2
|
{SPR_SMKP, 1, -1, {NULL}, 0, 0, S_SMK_PIPE2}, // S_SMK_PIPE2
|
||||||
|
|
@ -28300,6 +28315,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_SPECIALSTAGEARCH
|
||||||
|
3889, // doomednum
|
||||||
|
S_SPECIALSTAGEARCH, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
0, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
16*FRACUNIT, // radius
|
||||||
|
16*FRACUNIT, // height
|
||||||
|
0, // dispoffset
|
||||||
|
0, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_SCENERY|MF_NOGRAVITY, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // MT_SPECIALSTAGEBOMB
|
||||||
|
3890, // doomednum
|
||||||
|
S_SPECIALSTAGEBOMB, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
0, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_SPECIALSTAGEBOMB_DISARM, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_s24b, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
60*FRACUNIT, // radius
|
||||||
|
100*FRACUNIT, // height
|
||||||
|
0, // dispoffset
|
||||||
|
7, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_SPECIAL, // flags
|
||||||
|
S_SPECIALSTAGEBOMB_EXPLODE // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_SMK_PIPE
|
{ // MT_SMK_PIPE
|
||||||
3970, // doomednum
|
3970, // doomednum
|
||||||
S_SMK_PIPE1, // spawnstate
|
S_SMK_PIPE1, // spawnstate
|
||||||
|
|
|
||||||
21
src/info.h
21
src/info.h
|
|
@ -282,6 +282,7 @@ enum actionnum
|
||||||
A_SSMINEEXPLODE,
|
A_SSMINEEXPLODE,
|
||||||
A_LANDMINEEXPLODE,
|
A_LANDMINEEXPLODE,
|
||||||
A_BALLHOGEXPLODE,
|
A_BALLHOGEXPLODE,
|
||||||
|
A_SPECIALSTAGEBOMBEXPLODE,
|
||||||
A_LIGHTNINGFOLLOWPLAYER,
|
A_LIGHTNINGFOLLOWPLAYER,
|
||||||
A_FZBOOMFLASH,
|
A_FZBOOMFLASH,
|
||||||
A_FZBOOMSMOKE,
|
A_FZBOOMSMOKE,
|
||||||
|
|
@ -557,6 +558,7 @@ void A_SSMineFlash();
|
||||||
void A_LandMineExplode();
|
void A_LandMineExplode();
|
||||||
void A_LandMineExplode();
|
void A_LandMineExplode();
|
||||||
void A_BallhogExplode();
|
void A_BallhogExplode();
|
||||||
|
void A_SpecialStageBombExplode();
|
||||||
void A_LightningFollowPlayer();
|
void A_LightningFollowPlayer();
|
||||||
void A_FZBoomFlash();
|
void A_FZBoomFlash();
|
||||||
void A_FZBoomSmoke();
|
void A_FZBoomSmoke();
|
||||||
|
|
@ -1351,6 +1353,10 @@ typedef enum sprite
|
||||||
// Eerie Grove
|
// Eerie Grove
|
||||||
SPR_EGFG,
|
SPR_EGFG,
|
||||||
|
|
||||||
|
// Chaos Chute
|
||||||
|
SPR_SARC,
|
||||||
|
SPR_SSBM,
|
||||||
|
|
||||||
// SMK ports
|
// SMK ports
|
||||||
SPR_SMKP,
|
SPR_SMKP,
|
||||||
SPR_MTYM,
|
SPR_MTYM,
|
||||||
|
|
@ -5526,6 +5532,17 @@ typedef enum state
|
||||||
S_EERIEFOG4,
|
S_EERIEFOG4,
|
||||||
S_EERIEFOG5,
|
S_EERIEFOG5,
|
||||||
|
|
||||||
|
// Chaos Chute
|
||||||
|
S_SPECIALSTAGEARCH,
|
||||||
|
S_SPECIALSTAGEBOMB,
|
||||||
|
S_SPECIALSTAGEBOMB_DISARM,
|
||||||
|
S_SPECIALSTAGEBOMB_EXPLODE,
|
||||||
|
S_SPECIALSTAGEBOMB_DISAPPEAR,
|
||||||
|
S_SPECIALSTAGEBOMB_FLICKER1,
|
||||||
|
S_SPECIALSTAGEBOMB_FLICKER2,
|
||||||
|
S_SPECIALSTAGEBOMB_FLICKERLOOP,
|
||||||
|
S_SPECIALSTAGEBOMB_RESET,
|
||||||
|
|
||||||
// SMK ports
|
// SMK ports
|
||||||
S_SMK_PIPE1, // Generic pipes
|
S_SMK_PIPE1, // Generic pipes
|
||||||
S_SMK_PIPE2,
|
S_SMK_PIPE2,
|
||||||
|
|
@ -6919,6 +6936,10 @@ typedef enum mobj_type
|
||||||
MT_EERIEFOG,
|
MT_EERIEFOG,
|
||||||
MT_EERIEFOGGEN,
|
MT_EERIEFOGGEN,
|
||||||
|
|
||||||
|
// Chaos Chute
|
||||||
|
MT_SPECIALSTAGEARCH,
|
||||||
|
MT_SPECIALSTAGEBOMB,
|
||||||
|
|
||||||
// SMK ports
|
// SMK ports
|
||||||
MT_SMK_PIPE,
|
MT_SMK_PIPE,
|
||||||
MT_SMK_MOLESPAWNER,
|
MT_SMK_MOLESPAWNER,
|
||||||
|
|
|
||||||
34
src/k_kart.c
34
src/k_kart.c
|
|
@ -4524,7 +4524,7 @@ void K_MineFlashScreen(mobj_t *source)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spawns the purely visual explosion
|
// Spawns the purely visual explosion
|
||||||
void K_SpawnMineExplosion(mobj_t *source, UINT8 color, tic_t delay)
|
void K_SpawnMineExplosion(mobj_t *source, skincolornum_t color, tic_t delay)
|
||||||
{
|
{
|
||||||
INT32 i, radius, height;
|
INT32 i, radius, height;
|
||||||
mobj_t *smoldering = P_SpawnMobj(source->x, source->y, source->z, MT_SMOLDERING);
|
mobj_t *smoldering = P_SpawnMobj(source->x, source->y, source->z, MT_SMOLDERING);
|
||||||
|
|
@ -4612,6 +4612,38 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color, tic_t delay)
|
||||||
|
|
||||||
#undef MINEQUAKEDIST
|
#undef MINEQUAKEDIST
|
||||||
|
|
||||||
|
void K_SpawnLandMineExplosion(mobj_t *source, skincolornum_t color, tic_t delay)
|
||||||
|
{
|
||||||
|
mobj_t *smoldering;
|
||||||
|
mobj_t *expl;
|
||||||
|
UINT8 i;
|
||||||
|
|
||||||
|
// Spawn smoke remains:
|
||||||
|
smoldering = P_SpawnMobj(source->x, source->y, source->z, MT_SMOLDERING);
|
||||||
|
P_SetScale(smoldering, source->scale);
|
||||||
|
smoldering->tics = TICRATE*3;
|
||||||
|
smoldering->hitlag = delay;
|
||||||
|
|
||||||
|
// spawn a few physics explosions
|
||||||
|
for (i = 0; i < 15; i++)
|
||||||
|
{
|
||||||
|
expl = P_SpawnMobj(source->x, source->y, source->z + source->scale, MT_BOOMEXPLODE);
|
||||||
|
expl->color = color;
|
||||||
|
expl->tics = (i+1);
|
||||||
|
expl->hitlag = delay;
|
||||||
|
expl->renderflags |= RF_DONTDRAW;
|
||||||
|
|
||||||
|
//K_MatchGenericExtraFlags(expl, actor);
|
||||||
|
P_SetScale(expl, source->scale*4);
|
||||||
|
|
||||||
|
expl->momx = P_RandomRange(PR_EXPLOSION, -3, 3)*source->scale/2;
|
||||||
|
expl->momy = P_RandomRange(PR_EXPLOSION, -3, 3)*source->scale/2;
|
||||||
|
|
||||||
|
// 100/45 = 2.22 fu/t
|
||||||
|
expl->momz = ((i+1)*source->scale*5/2)*P_MobjFlip(expl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fixed_t K_ItemScaleForPlayer(player_t *player)
|
fixed_t K_ItemScaleForPlayer(player_t *player)
|
||||||
{
|
{
|
||||||
switch (player->itemscale)
|
switch (player->itemscale)
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,8 @@ void K_DebtStingPlayer(player_t *player, mobj_t *source);
|
||||||
void K_GiveBumpersToPlayer(player_t *player, player_t *victim, UINT8 amount);
|
void K_GiveBumpersToPlayer(player_t *player, player_t *victim, UINT8 amount);
|
||||||
void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount);
|
void K_TakeBumpersFromPlayer(player_t *player, player_t *victim, UINT8 amount);
|
||||||
void K_MineFlashScreen(mobj_t *source);
|
void K_MineFlashScreen(mobj_t *source);
|
||||||
void K_SpawnMineExplosion(mobj_t *source, UINT8 color, tic_t delay);
|
void K_SpawnMineExplosion(mobj_t *source, skincolornum_t color, tic_t delay);
|
||||||
|
void K_SpawnLandMineExplosion(mobj_t *source, skincolornum_t color, tic_t delay);
|
||||||
void K_RunFinishLineBeam(void);
|
void K_RunFinishLineBeam(void);
|
||||||
UINT16 K_DriftSparkColor(player_t *player, INT32 charge);
|
UINT16 K_DriftSparkColor(player_t *player, INT32 charge);
|
||||||
void K_SpawnBoostTrail(player_t *player);
|
void K_SpawnBoostTrail(player_t *player);
|
||||||
|
|
|
||||||
|
|
@ -318,6 +318,7 @@ void A_SSMineExplode(mobj_t *actor);
|
||||||
void A_SSMineFlash(mobj_t *actor);
|
void A_SSMineFlash(mobj_t *actor);
|
||||||
void A_LandMineExplode(mobj_t *actor);
|
void A_LandMineExplode(mobj_t *actor);
|
||||||
void A_BallhogExplode(mobj_t *actor);
|
void A_BallhogExplode(mobj_t *actor);
|
||||||
|
void A_SpecialStageBombExplode(mobj_t *actor);
|
||||||
void A_LightningFollowPlayer(mobj_t *actor);
|
void A_LightningFollowPlayer(mobj_t *actor);
|
||||||
void A_FZBoomFlash(mobj_t *actor);
|
void A_FZBoomFlash(mobj_t *actor);
|
||||||
void A_FZBoomSmoke(mobj_t *actor);
|
void A_FZBoomSmoke(mobj_t *actor);
|
||||||
|
|
@ -13068,12 +13069,7 @@ void A_SSMineFlash(mobj_t *actor)
|
||||||
|
|
||||||
void A_LandMineExplode(mobj_t *actor)
|
void A_LandMineExplode(mobj_t *actor)
|
||||||
{
|
{
|
||||||
|
skincolornum_t colour = SKINCOLOR_KETCHUP; // we spell words properly here
|
||||||
mobj_t *expl;
|
|
||||||
INT32 colour = SKINCOLOR_KETCHUP; // we spell words properly here
|
|
||||||
INT32 i;
|
|
||||||
mobj_t *smoldering;
|
|
||||||
|
|
||||||
tic_t delay = actor->reactiontime;
|
tic_t delay = actor->reactiontime;
|
||||||
|
|
||||||
if (LUA_CallAction(A_LANDMINEEXPLODE, actor))
|
if (LUA_CallAction(A_LANDMINEEXPLODE, actor))
|
||||||
|
|
@ -13090,33 +13086,10 @@ void A_LandMineExplode(mobj_t *actor)
|
||||||
if (actor->target && !P_MobjWasRemoved(actor->target))
|
if (actor->target && !P_MobjWasRemoved(actor->target))
|
||||||
colour = actor->target->color;
|
colour = actor->target->color;
|
||||||
|
|
||||||
// Spawn smoke remains:
|
K_SpawnLandMineExplosion(actor, colour, delay);
|
||||||
smoldering = P_SpawnMobj(actor->x, actor->y, actor->z, MT_SMOLDERING);
|
|
||||||
P_SetScale(smoldering, actor->scale);
|
|
||||||
smoldering->tics = TICRATE*3;
|
|
||||||
smoldering->hitlag = delay;
|
|
||||||
|
|
||||||
actor->fuse = actor->tics; // disappear when this state ends.
|
actor->fuse = actor->tics; // disappear when this state ends.
|
||||||
|
|
||||||
// spawn a few physics explosions
|
|
||||||
for (i = 0; i < 15; i++)
|
|
||||||
{
|
|
||||||
expl = P_SpawnMobj(actor->x, actor->y, actor->z + actor->scale, MT_BOOMEXPLODE);
|
|
||||||
expl->color = colour;
|
|
||||||
expl->tics = (i+1);
|
|
||||||
expl->hitlag = delay;
|
|
||||||
expl->renderflags |= RF_DONTDRAW;
|
|
||||||
|
|
||||||
//K_MatchGenericExtraFlags(expl, actor);
|
|
||||||
P_SetScale(expl, actor->scale*4);
|
|
||||||
|
|
||||||
expl->momx = P_RandomRange(PR_EXPLOSION, -3, 3)*actor->scale/2;
|
|
||||||
expl->momy = P_RandomRange(PR_EXPLOSION, -3, 3)*actor->scale/2;
|
|
||||||
|
|
||||||
// 100/45 = 2.22 fu/t
|
|
||||||
expl->momz = ((i+1)*actor->scale*5/2)*P_MobjFlip(expl);
|
|
||||||
}
|
|
||||||
|
|
||||||
Obj_SpawnBrolyKi(actor, delay);
|
Obj_SpawnBrolyKi(actor, delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -13134,6 +13107,14 @@ void A_BallhogExplode(mobj_t *actor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void A_SpecialStageBombExplode(mobj_t *actor)
|
||||||
|
{
|
||||||
|
if (LUA_CallAction(A_SPECIALSTAGEBOMBEXPLODE, actor))
|
||||||
|
return;
|
||||||
|
|
||||||
|
K_SpawnLandMineExplosion(actor, SKINCOLOR_KETCHUP, actor->hitlag);
|
||||||
|
}
|
||||||
|
|
||||||
// A_LightningFollowPlayer:
|
// A_LightningFollowPlayer:
|
||||||
// Dumb simple function that gives a mobj its target's momentums without updating its angle.
|
// Dumb simple function that gives a mobj its target's momentums without updating its angle.
|
||||||
void A_LightningFollowPlayer(mobj_t *actor)
|
void A_LightningFollowPlayer(mobj_t *actor)
|
||||||
|
|
|
||||||
|
|
@ -556,6 +556,26 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
P_SetTarget(&special->target, toucher);
|
P_SetTarget(&special->target, toucher);
|
||||||
S_StartSound(special, sfx_s1a2);
|
S_StartSound(special, sfx_s1a2);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case MT_SPECIALSTAGEBOMB:
|
||||||
|
// only attempt to damage the player if they're not invincible
|
||||||
|
if (!(player->invincibilitytimer > 0
|
||||||
|
|| K_IsBigger(toucher, special) == true
|
||||||
|
|| K_PlayerGuard(player) == true
|
||||||
|
|| player->hyudorotimer > 0))
|
||||||
|
{
|
||||||
|
if (P_DamageMobj(toucher, special, special, 1, DMG_STUMBLE))
|
||||||
|
{
|
||||||
|
P_SetMobjState(special, special->info->painstate);
|
||||||
|
special->eflags |= MFE_DAMAGEHITLAG;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if we didn't damage the player, just explode
|
||||||
|
P_SetMobjState(special, special->info->painstate);
|
||||||
|
P_SetMobjState(special, special->info->raisestate); // immediately explode visually
|
||||||
|
return;
|
||||||
|
|
||||||
case MT_CDUFO: // SRB2kart
|
case MT_CDUFO: // SRB2kart
|
||||||
if (special->fuse || !P_CanPickupItem(player, 1))
|
if (special->fuse || !P_CanPickupItem(player, 1))
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue