Hardcoded the new Minus behavior
This commit is contained in:
parent
85eece29d3
commit
0e80d2ec5d
|
@ -4450,8 +4450,18 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_GSNAPPER4",
|
"S_GSNAPPER4",
|
||||||
|
|
||||||
// Minus
|
// Minus
|
||||||
|
"S_MINUS_INIT",
|
||||||
"S_MINUS_STND",
|
"S_MINUS_STND",
|
||||||
"S_MINUS_DIGGING",
|
"S_MINUS_DIGGING1",
|
||||||
|
"S_MINUS_DIGGING2",
|
||||||
|
"S_MINUS_DIGGING3",
|
||||||
|
"S_MINUS_DIGGING4",
|
||||||
|
"S_MINUS_BURST0",
|
||||||
|
"S_MINUS_BURST1",
|
||||||
|
"S_MINUS_BURST2",
|
||||||
|
"S_MINUS_BURST3",
|
||||||
|
"S_MINUS_BURST4",
|
||||||
|
"S_MINUS_BURST5",
|
||||||
"S_MINUS_POPUP",
|
"S_MINUS_POPUP",
|
||||||
"S_MINUS_UPWARD1",
|
"S_MINUS_UPWARD1",
|
||||||
"S_MINUS_UPWARD2",
|
"S_MINUS_UPWARD2",
|
||||||
|
@ -4470,6 +4480,15 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_MINUS_DOWNWARD7",
|
"S_MINUS_DOWNWARD7",
|
||||||
"S_MINUS_DOWNWARD8",
|
"S_MINUS_DOWNWARD8",
|
||||||
|
|
||||||
|
// Minus dirt
|
||||||
|
"S_MINUSDIRT1",
|
||||||
|
"S_MINUSDIRT2",
|
||||||
|
"S_MINUSDIRT3",
|
||||||
|
"S_MINUSDIRT4",
|
||||||
|
"S_MINUSDIRT5",
|
||||||
|
"S_MINUSDIRT6",
|
||||||
|
"S_MINUSDIRT7",
|
||||||
|
|
||||||
// Spring Shell
|
// Spring Shell
|
||||||
"S_SSHELL_STND",
|
"S_SSHELL_STND",
|
||||||
"S_SSHELL_RUN1",
|
"S_SSHELL_RUN1",
|
||||||
|
@ -7157,6 +7176,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_EGGSHIELD", // Egg Guard's shield
|
"MT_EGGSHIELD", // Egg Guard's shield
|
||||||
"MT_GSNAPPER", // Green Snapper
|
"MT_GSNAPPER", // Green Snapper
|
||||||
"MT_MINUS", // Minus
|
"MT_MINUS", // Minus
|
||||||
|
"MT_MINUSDIRT", // Minus dirt
|
||||||
"MT_SPRINGSHELL", // Spring Shell
|
"MT_SPRINGSHELL", // Spring Shell
|
||||||
"MT_YELLOWSHELL", // Spring Shell (yellow)
|
"MT_YELLOWSHELL", // Spring Shell (yellow)
|
||||||
"MT_UNIDUS", // Unidus
|
"MT_UNIDUS", // Unidus
|
||||||
|
|
|
@ -173,6 +173,7 @@ light_t *t_lspr[NUMSPRITES] =
|
||||||
&lspr[NOLIGHT], // SPR_ESHI
|
&lspr[NOLIGHT], // SPR_ESHI
|
||||||
&lspr[NOLIGHT], // SPR_GSNP
|
&lspr[NOLIGHT], // SPR_GSNP
|
||||||
&lspr[NOLIGHT], // SPR_MNUS
|
&lspr[NOLIGHT], // SPR_MNUS
|
||||||
|
&lspr[NOLIGHT], // SPR_MNUD
|
||||||
&lspr[NOLIGHT], // SPR_SSHL
|
&lspr[NOLIGHT], // SPR_SSHL
|
||||||
&lspr[NOLIGHT], // SPR_UNID
|
&lspr[NOLIGHT], // SPR_UNID
|
||||||
&lspr[NOLIGHT], // SPR_CANA
|
&lspr[NOLIGHT], // SPR_CANA
|
||||||
|
|
66
src/info.c
66
src/info.c
|
@ -61,6 +61,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"ESHI", // Egg Guard's shield
|
"ESHI", // Egg Guard's shield
|
||||||
"GSNP", // Green Snapper
|
"GSNP", // Green Snapper
|
||||||
"MNUS", // Minus
|
"MNUS", // Minus
|
||||||
|
"MNUD", // Minus dirt
|
||||||
"SSHL", // Spring Shell
|
"SSHL", // Spring Shell
|
||||||
"UNID", // Unidus
|
"UNID", // Unidus
|
||||||
"CANA", // Canarivore
|
"CANA", // Canarivore
|
||||||
|
@ -1060,8 +1061,18 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_GSNP, 3, 2, {A_Chase}, 0, 0, S_GSNAPPER1}, // S_GSNAPPER4
|
{SPR_GSNP, 3, 2, {A_Chase}, 0, 0, S_GSNAPPER1}, // S_GSNAPPER4
|
||||||
|
|
||||||
// Minus
|
// Minus
|
||||||
{SPR_NULL, 0, 1, {A_Look}, 0, 0, S_MINUS_STND}, // S_MINUS_STND
|
{SPR_MNUD, 0, 1, {NULL}, 0, 0, S_MINUS_STND}, // S_MINUS_INIT (required for objectplace to work)
|
||||||
{SPR_MNUS, 16, 1, {A_MinusDigging}, 0, 0, S_MINUS_DIGGING}, // S_MINUS_DIGGING
|
{SPR_NULL, 0, 10, {A_Look}, 0, 0, S_MINUS_STND}, // S_MINUS_STND
|
||||||
|
{SPR_NULL, 0, 1, {A_MinusDigging}, 1, 0, S_MINUS_DIGGING2}, // S_MINUS_DIGGING1
|
||||||
|
{SPR_NULL, 0, 1, {A_MinusDigging}, 0, 0, S_MINUS_DIGGING3}, // S_MINUS_DIGGING2
|
||||||
|
{SPR_NULL, 0, 1, {A_MinusDigging}, 0, 0, S_MINUS_DIGGING4}, // S_MINUS_DIGGING3
|
||||||
|
{SPR_NULL, 0, 1, {A_MinusDigging}, 0, 0, S_MINUS_DIGGING1}, // S_MINUS_DIGGING4
|
||||||
|
{SPR_NULL, 0, 25, {NULL}, 0, 0, S_MINUS_POPUP}, // S_MINUS_BURST0
|
||||||
|
{SPR_MNUD, FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUS_BURST2}, // S_MINUS_BURST1
|
||||||
|
{SPR_MNUD, 1|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUS_BURST3}, // S_MINUS_BURST2
|
||||||
|
{SPR_MNUD, 2|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUS_BURST4}, // S_MINUS_BURST3
|
||||||
|
{SPR_MNUD, 3|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUS_BURST5}, // S_MINUS_BURST4
|
||||||
|
{SPR_MNUD, 4|FF_ANIMATE, 5, {NULL}, 1, 2, S_MINUSDIRT2}, // S_MINUS_BURST5
|
||||||
{SPR_MNUS, 0, 1, {A_MinusPopup}, 0, 0, S_MINUS_UPWARD1}, // S_MINUS_POPUP
|
{SPR_MNUS, 0, 1, {A_MinusPopup}, 0, 0, S_MINUS_UPWARD1}, // S_MINUS_POPUP
|
||||||
{SPR_MNUS, 0, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD2}, // S_MINUS_UPWARD1
|
{SPR_MNUS, 0, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD2}, // S_MINUS_UPWARD1
|
||||||
{SPR_MNUS, 1, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD3}, // S_MINUS_UPWARD2
|
{SPR_MNUS, 1, 1, {A_MinusCheck}, 0, 0, S_MINUS_UPWARD3}, // S_MINUS_UPWARD2
|
||||||
|
@ -1080,6 +1091,14 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_MNUS, 14, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD8}, // S_MINUS_DOWNWARD7
|
{SPR_MNUS, 14, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD8}, // S_MINUS_DOWNWARD7
|
||||||
{SPR_MNUS, 15, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD1}, // S_MINUS_DOWNWARD8
|
{SPR_MNUS, 15, 1, {A_MinusCheck}, 0, 0, S_MINUS_DOWNWARD1}, // S_MINUS_DOWNWARD8
|
||||||
|
|
||||||
|
{SPR_MNUD, FF_ANIMATE, 6, {NULL}, 1, 5, S_MINUSDIRT2}, // S_MINUSDIRT1
|
||||||
|
{SPR_MNUD, 5, 8, {NULL}, 3, 5, S_MINUSDIRT3}, // S_MINUSDIRT2
|
||||||
|
{SPR_MNUD, 4, 8, {NULL}, 3, 5, S_MINUSDIRT4}, // S_MINUSDIRT3
|
||||||
|
{SPR_MNUD, 3, 8, {NULL}, 3, 5, S_MINUSDIRT5}, // S_MINUSDIRT4
|
||||||
|
{SPR_MNUD, 2, 8, {NULL}, 3, 5, S_MINUSDIRT6}, // S_MINUSDIRT5
|
||||||
|
{SPR_MNUD, 1, 8, {NULL}, 3, 5, S_MINUSDIRT7}, // S_MINUSDIRT6
|
||||||
|
{SPR_MNUD, 0, 8, {NULL}, 3, 5, S_NULL}, // S_MINUSDIRT7
|
||||||
|
|
||||||
// Spring Shell
|
// Spring Shell
|
||||||
{SPR_SSHL, 0, 4, {A_Look}, 0, 0, S_SSHELL_STND}, // S_SSHELL_STND
|
{SPR_SSHL, 0, 4, {A_Look}, 0, 0, S_SSHELL_STND}, // S_SSHELL_STND
|
||||||
{SPR_SSHL, 0, 4, {A_Chase}, 0, 0, S_SSHELL_RUN2}, // S_SSHELL_RUN1
|
{SPR_SSHL, 0, 4, {A_Chase}, 0, 0, S_SSHELL_RUN2}, // S_SSHELL_RUN1
|
||||||
|
@ -4687,29 +4706,56 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
|
|
||||||
{ // MT_MINUS
|
{ // MT_MINUS
|
||||||
121, // doomednum
|
121, // doomednum
|
||||||
S_MINUS_STND, // spawnstate
|
S_MINUS_INIT, // spawnstate
|
||||||
1, // spawnhealth
|
1, // spawnhealth
|
||||||
S_MINUS_DIGGING,// seestate
|
S_MINUS_DIGGING1,// seestate
|
||||||
sfx_None, // seesound
|
sfx_None, // seesound
|
||||||
32, // reactiontime
|
32, // reactiontime
|
||||||
sfx_s3k82, // attacksound
|
sfx_s3kccs, // attacksound
|
||||||
S_NULL, // painstate
|
S_NULL, // painstate
|
||||||
200, // painchance
|
200, // painchance
|
||||||
sfx_None, // painsound
|
sfx_None, // painsound
|
||||||
S_MINUS_DOWNWARD1,// meleestate
|
S_MINUS_BURST0, // meleestate
|
||||||
S_MINUS_POPUP, // missilestate
|
S_MINUS_POPUP, // missilestate
|
||||||
S_XPLD_FLICKY, // deathstate
|
S_XPLD_FLICKY, // deathstate
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_pop, // deathsound
|
sfx_pop, // deathsound
|
||||||
12, // speed
|
17, // speed
|
||||||
24*FRACUNIT, // radius
|
24*FRACUNIT, // radius
|
||||||
32*FRACUNIT, // height
|
32*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
100, // mass
|
100, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_mindig, // activesound
|
sfx_s3kd3s, // activesound
|
||||||
MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE, // flags
|
MF_ENEMY|MF_NOCLIPTHING, // flags
|
||||||
S_MINUS_UPWARD1 // raisestate
|
S_MINUS_BURST1 // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // MT_MINUSDIRT
|
||||||
|
-1, // doomednum
|
||||||
|
S_MINUSDIRT1, // spawnstate
|
||||||
|
1, // 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
|
||||||
|
8*FRACUNIT, // radius
|
||||||
|
8*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOCLIPTHING, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
{ // MT_SPRINGSHELL
|
{ // MT_SPRINGSHELL
|
||||||
|
|
23
src/info.h
23
src/info.h
|
@ -301,6 +301,7 @@ typedef enum sprite
|
||||||
SPR_ESHI, // Egg Guard's shield
|
SPR_ESHI, // Egg Guard's shield
|
||||||
SPR_GSNP, // Green Snapper
|
SPR_GSNP, // Green Snapper
|
||||||
SPR_MNUS, // Minus
|
SPR_MNUS, // Minus
|
||||||
|
SPR_MNUD, // Minus dirt
|
||||||
SPR_SSHL, // Spring Shell
|
SPR_SSHL, // Spring Shell
|
||||||
SPR_UNID, // Unidus
|
SPR_UNID, // Unidus
|
||||||
SPR_CANA, // Canarivore
|
SPR_CANA, // Canarivore
|
||||||
|
@ -1208,8 +1209,18 @@ typedef enum state
|
||||||
S_GSNAPPER4,
|
S_GSNAPPER4,
|
||||||
|
|
||||||
// Minus
|
// Minus
|
||||||
|
S_MINUS_INIT,
|
||||||
S_MINUS_STND,
|
S_MINUS_STND,
|
||||||
S_MINUS_DIGGING,
|
S_MINUS_DIGGING1,
|
||||||
|
S_MINUS_DIGGING2,
|
||||||
|
S_MINUS_DIGGING3,
|
||||||
|
S_MINUS_DIGGING4,
|
||||||
|
S_MINUS_BURST0,
|
||||||
|
S_MINUS_BURST1,
|
||||||
|
S_MINUS_BURST2,
|
||||||
|
S_MINUS_BURST3,
|
||||||
|
S_MINUS_BURST4,
|
||||||
|
S_MINUS_BURST5,
|
||||||
S_MINUS_POPUP,
|
S_MINUS_POPUP,
|
||||||
S_MINUS_UPWARD1,
|
S_MINUS_UPWARD1,
|
||||||
S_MINUS_UPWARD2,
|
S_MINUS_UPWARD2,
|
||||||
|
@ -1228,6 +1239,15 @@ typedef enum state
|
||||||
S_MINUS_DOWNWARD7,
|
S_MINUS_DOWNWARD7,
|
||||||
S_MINUS_DOWNWARD8,
|
S_MINUS_DOWNWARD8,
|
||||||
|
|
||||||
|
// Minus dirt
|
||||||
|
S_MINUSDIRT1,
|
||||||
|
S_MINUSDIRT2,
|
||||||
|
S_MINUSDIRT3,
|
||||||
|
S_MINUSDIRT4,
|
||||||
|
S_MINUSDIRT5,
|
||||||
|
S_MINUSDIRT6,
|
||||||
|
S_MINUSDIRT7,
|
||||||
|
|
||||||
// Spring Shell
|
// Spring Shell
|
||||||
S_SSHELL_STND,
|
S_SSHELL_STND,
|
||||||
S_SSHELL_RUN1,
|
S_SSHELL_RUN1,
|
||||||
|
@ -3935,6 +3955,7 @@ typedef enum mobj_type
|
||||||
MT_EGGSHIELD, // Egg Guard's shield
|
MT_EGGSHIELD, // Egg Guard's shield
|
||||||
MT_GSNAPPER, // Green Snapper
|
MT_GSNAPPER, // Green Snapper
|
||||||
MT_MINUS, // Minus
|
MT_MINUS, // Minus
|
||||||
|
MT_MINUSDIRT, // Minus dirt
|
||||||
MT_SPRINGSHELL, // Spring Shell
|
MT_SPRINGSHELL, // Spring Shell
|
||||||
MT_YELLOWSHELL, // Spring Shell (yellow)
|
MT_YELLOWSHELL, // Spring Shell (yellow)
|
||||||
MT_UNIDUS, // Unidus
|
MT_UNIDUS, // Unidus
|
||||||
|
|
149
src/p_enemy.c
149
src/p_enemy.c
|
@ -5143,56 +5143,110 @@ void A_ShootBullet(mobj_t *actor)
|
||||||
S_StartSound(actor, actor->info->attacksound);
|
S_StartSound(actor, actor->info->attacksound);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static mobj_t *minus;
|
||||||
|
|
||||||
|
static boolean PIT_MinusCarry(mobj_t *thing)
|
||||||
|
{
|
||||||
|
if (minus->type == thing->type)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!(thing->flags & MF_SHOOTABLE) || !(thing->flags & MF_ENEMY))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (P_AproxDistance(minus->x - thing->x, minus->y - thing->y) >= minus->radius * 3)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (abs(thing->z - minus->z) > minus->height)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
minus->tracer = thing;
|
||||||
|
minus->tracer->flags &= ~MF_PUSHABLE;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Function: A_MinusDigging
|
// Function: A_MinusDigging
|
||||||
//
|
//
|
||||||
// Description: Minus digging in the ground.
|
// Description: Minus digging in the ground.
|
||||||
//
|
//
|
||||||
// var1 = unused
|
// var1 = If 1, play digging sound.
|
||||||
// var2 = unused
|
// var2 = unused
|
||||||
//
|
//
|
||||||
void A_MinusDigging(mobj_t *actor)
|
void A_MinusDigging(mobj_t *actor)
|
||||||
{
|
{
|
||||||
|
INT32 locvar1 = var1;
|
||||||
|
INT32 rad = 32;
|
||||||
|
angle_t fa = (actor->angle >> ANGLETOFINESHIFT) & FINEMASK;
|
||||||
|
fixed_t dis = actor->info->speed*4;
|
||||||
|
fixed_t x = FINECOSINE(fa)*dis + actor->x + FRACUNIT*P_RandomRange(-rad, rad);
|
||||||
|
fixed_t y = FINESINE(fa)*dis + actor->y + FRACUNIT*P_RandomRange(-rad, rad);
|
||||||
|
fixed_t mz = (actor->eflags & MFE_VERTICALFLIP) ? actor->ceilingz : actor->floorz;
|
||||||
|
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (LUA_CallAction("A_MinusDigging", actor))
|
if (LUA_CallAction("A_MinusDigging", actor))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
actor->flags &= ~MF_SPECIAL;
|
|
||||||
actor->flags &= ~MF_SHOOTABLE;
|
|
||||||
|
|
||||||
if (!actor->target)
|
if (!actor->target)
|
||||||
{
|
{
|
||||||
A_Look(actor);
|
P_SetMobjState(actor, actor->info->spawnstate);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actor->reactiontime)
|
mobj_t *par = P_SpawnMobj(actor->x, actor->y, mz, MT_MINUSDIRT);
|
||||||
|
if (actor->eflags & MFE_VERTICALFLIP)
|
||||||
|
par->eflags |= MFE_VERTICALFLIP;
|
||||||
|
P_TryMove(par, x, y, false);
|
||||||
|
|
||||||
|
// If close enough, prepare to attack
|
||||||
|
if (P_AproxDistance(actor->x - actor->target->x, actor->y - actor->target->y) < actor->radius*2)
|
||||||
{
|
{
|
||||||
actor->reactiontime--;
|
P_SetMobjState(actor, actor->info->meleestate);
|
||||||
|
P_TryMove(actor, actor->target->x, actor->target->y, false);
|
||||||
|
S_StartSound(actor, actor->info->attacksound);
|
||||||
|
|
||||||
|
// Spawn growing dirt pile.
|
||||||
|
mobj_t *par = P_SpawnMobj(actor->x, actor->y, mz, MT_MINUSDIRT);
|
||||||
|
P_SetMobjState(par, actor->info->raisestate);
|
||||||
|
P_SetScale(par, actor->scale*2);
|
||||||
|
if (actor->eflags & MFE_VERTICALFLIP)
|
||||||
|
par->eflags |= MFE_VERTICALFLIP;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dirt trail
|
|
||||||
P_SpawnGhostMobj(actor);
|
|
||||||
|
|
||||||
actor->flags |= MF_NOCLIPTHING;
|
|
||||||
var1 = 3;
|
|
||||||
A_Chase(actor);
|
|
||||||
actor->flags &= ~MF_NOCLIPTHING;
|
|
||||||
|
|
||||||
// Play digging sound
|
// Play digging sound
|
||||||
if (!(leveltime & 15))
|
if (locvar1 == 1)
|
||||||
S_StartSound(actor, actor->info->activesound);
|
A_PlayActiveSound(actor);
|
||||||
|
|
||||||
// If we're close enough to our target, pop out of the ground
|
// Move
|
||||||
if (P_AproxDistance(actor->target->x-actor->x, actor->target->y-actor->y) < actor->radius
|
var1 = 3;
|
||||||
&& abs(actor->target->z - actor->z) < 2*actor->height)
|
A_Chase(actor);
|
||||||
P_SetMobjState(actor, actor->info->missilestate);
|
|
||||||
|
|
||||||
// Snap to ground
|
// Carry over shit, maybe
|
||||||
if (actor->eflags & MFE_VERTICALFLIP)
|
if (!actor->tracer)
|
||||||
actor->z = actor->ceilingz - actor->height;
|
{
|
||||||
|
fixed_t radius = 3*actor->radius;
|
||||||
|
fixed_t yh = (unsigned)(actor->y + radius - bmaporgy) >> MAPBLOCKSHIFT;
|
||||||
|
fixed_t yl = (unsigned)(actor->y - radius - bmaporgy) >> MAPBLOCKSHIFT;
|
||||||
|
fixed_t xh = (unsigned)(actor->x + radius - bmaporgx) >> MAPBLOCKSHIFT;
|
||||||
|
fixed_t xl = (unsigned)(actor->x - radius - bmaporgx) >> MAPBLOCKSHIFT;
|
||||||
|
fixed_t bx, by;
|
||||||
|
|
||||||
|
BMBOUNDFIX(xl, xh, yl, yh);
|
||||||
|
|
||||||
|
minus = actor;
|
||||||
|
|
||||||
|
for (bx = xl; bx <= xh; bx++)
|
||||||
|
for (by = yl; by <= yh; by++)
|
||||||
|
P_BlockThingsIterator(bx, by, PIT_MinusCarry);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
actor->z = actor->floorz;
|
{
|
||||||
|
if (P_TryMove(actor->tracer, actor->x, actor->y, false))
|
||||||
|
actor->tracer->z = mz;
|
||||||
|
else
|
||||||
|
actor->tracer = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function: A_MinusPopup
|
// Function: A_MinusPopup
|
||||||
|
@ -5204,45 +5258,56 @@ void A_MinusDigging(mobj_t *actor)
|
||||||
//
|
//
|
||||||
void A_MinusPopup(mobj_t *actor)
|
void A_MinusPopup(mobj_t *actor)
|
||||||
{
|
{
|
||||||
|
INT32 num = 6;
|
||||||
|
angle_t ani = FixedAngle(FRACUNIT*360/num);
|
||||||
|
INT32 i;
|
||||||
|
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (LUA_CallAction("A_MinusPopup", actor))
|
if (LUA_CallAction("A_MinusPopup", actor))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
P_SetObjectMomZ(actor, 10*FRACUNIT, false);
|
|
||||||
|
|
||||||
actor->flags |= MF_SPECIAL;
|
if (actor->eflags & MFE_VERTICALFLIP)
|
||||||
actor->flags |= MF_SHOOTABLE;
|
actor->momz = -10*FRACUNIT;
|
||||||
|
else
|
||||||
|
actor->momz = 10*FRACUNIT;
|
||||||
|
|
||||||
|
actor->flags |= MF_SPECIAL|MF_SHOOTABLE;
|
||||||
|
S_StartSound(actor, sfx_s3k82);
|
||||||
|
for (i = 1; i <= num; i++)
|
||||||
|
{
|
||||||
|
mobj_t *rock = P_SpawnMobj(actor->x, actor->y, actor->z + actor->height/4, MT_ROCKCRUMBLE1);
|
||||||
|
P_Thrust(rock, ani*i, FRACUNIT);
|
||||||
|
rock->momz = 3*FRACUNIT;
|
||||||
|
P_SetScale(rock, FRACUNIT/3);
|
||||||
|
}
|
||||||
|
P_RadiusAttack(actor, actor, 2*actor->radius, 0);
|
||||||
|
if (actor->tracer)
|
||||||
|
P_DamageMobj(actor->tracer, actor, actor, 1, 0);
|
||||||
|
|
||||||
// Sound for busting out of the ground.
|
|
||||||
S_StartSound(actor, actor->info->attacksound);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function: A_MinusCheck
|
// Function: A_MinusCheck
|
||||||
//
|
//
|
||||||
// Description: If the minus hits the floor, dig back into the ground.
|
// Description: If the minus hits the floor, dig back into the ground.
|
||||||
//
|
//
|
||||||
// var1 = unused
|
// var1 = State to switch to (if 0, use seestate).
|
||||||
// var2 = unused
|
// var2 = unused
|
||||||
//
|
//
|
||||||
void A_MinusCheck(mobj_t *actor)
|
void A_MinusCheck(mobj_t *actor)
|
||||||
{
|
{
|
||||||
|
INT32 locvar1 = var1;
|
||||||
|
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
if (LUA_CallAction("A_MinusCheck", actor))
|
if (LUA_CallAction("A_MinusCheck", actor))
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
if ((!(actor->eflags & MFE_VERTICALFLIP) && actor->z <= actor->floorz)
|
|
||||||
|| ((actor->eflags & MFE_VERTICALFLIP) && actor->z + actor->height >= actor->ceilingz))
|
|
||||||
{
|
|
||||||
actor->flags &= ~MF_SPECIAL;
|
|
||||||
actor->flags &= ~MF_SHOOTABLE;
|
|
||||||
actor->reactiontime = TICRATE;
|
|
||||||
P_SetMobjState(actor, actor->info->seestate);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 'Falling' animation
|
if (((actor->eflags & MFE_VERTICALFLIP) && actor->z + actor->height >= actor->ceilingz) || (!(actor->eflags & MFE_VERTICALFLIP) && actor->z <= actor->floorz))
|
||||||
if (P_MobjFlip(actor)*actor->momz < 0 && actor->state < &states[actor->info->meleestate])
|
{
|
||||||
P_SetMobjState(actor, actor->info->meleestate);
|
P_SetMobjState(actor, locvar1 ? locvar1 : actor->info->seestate);
|
||||||
|
actor->flags = actor->info->flags;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function: A_ChickenCheck
|
// Function: A_ChickenCheck
|
||||||
|
|
|
@ -456,7 +456,7 @@ sfxinfo_t S_sfx[NUMSFX] =
|
||||||
{"s3kcas", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Energy"},
|
{"s3kcas", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Energy"},
|
||||||
{"s3kcal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Energy"}, // ditto
|
{"s3kcal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Energy"}, // ditto
|
||||||
{"s3kcbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous rumbling"},
|
{"s3kcbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous rumbling"},
|
||||||
{"s3kcbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominuous rumbling"}, // ditto
|
{"s3kcbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous rumbling"}, // ditto
|
||||||
{"s3kccs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Collapsing"},
|
{"s3kccs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Collapsing"},
|
||||||
{"s3kccl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Collapsing"}, // ditto
|
{"s3kccl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Collapsing"}, // ditto
|
||||||
{"s3kcds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous rumbling"},
|
{"s3kcds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous rumbling"},
|
||||||
|
@ -471,8 +471,8 @@ sfxinfo_t S_sfx[NUMSFX] =
|
||||||
{"s3kd1l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // ditto
|
{"s3kd1l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // ditto
|
||||||
{"s3kd2s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Turning"},
|
{"s3kd2s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Turning"},
|
||||||
{"s3kd2l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Moving chain"}, // ditto
|
{"s3kd2l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Moving chain"}, // ditto
|
||||||
{"s3kd3s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""},
|
{"s3kd3s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Digging"},
|
||||||
{"s3kd3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // ditto
|
{"s3kd3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Digging"}, // ditto
|
||||||
{"s3kd4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Engine"},
|
{"s3kd4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Engine"},
|
||||||
{"s3kd4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Engine"}, // ditto
|
{"s3kd4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Engine"}, // ditto
|
||||||
{"s3kd5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling lava"},
|
{"s3kd5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling lava"},
|
||||||
|
|
Loading…
Reference in New Issue