mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-23 03:12:38 +00:00
Hardcoded train cameo
This commit is contained in:
parent
ca4ab06abf
commit
6df14492a5
7 changed files with 184 additions and 0 deletions
|
@ -2396,6 +2396,8 @@ static actionpointer_t actionpointers[] =
|
|||
{{A_DustDevilThink}, "A_DUSTDEVILTHINK"},
|
||||
{{A_TNTExplode}, "A_TNTEXPLODE"},
|
||||
{{A_DebrisRandom}, "A_DEBRISRANDOM"},
|
||||
{{A_TrainCameo}, "A_TRAINCAMEO"},
|
||||
{{A_TrainCameo2}, "A_TRAINCAMEO2"},
|
||||
{{NULL}, "NONE"},
|
||||
|
||||
// This NULL entry must be the last in the list
|
||||
|
@ -5734,6 +5736,14 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_ARIDDUST2",
|
||||
"S_ARIDDUST3",
|
||||
|
||||
// Train cameo
|
||||
"S_TRAINCAMEOSPAWNER_1",
|
||||
"S_TRAINCAMEOSPAWNER_2",
|
||||
"S_TRAINCAMEOSPAWNER_3",
|
||||
"S_TRAINCAMEOSPAWNER_4",
|
||||
"S_TRAINCAMEOSPAWNER_5",
|
||||
"S_TRAINPUFFMAKER",
|
||||
|
||||
// Flame jet
|
||||
"S_FLAMEJETSTND",
|
||||
"S_FLAMEJETSTART",
|
||||
|
@ -7430,6 +7440,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_DUSTDEVIL",
|
||||
"MT_DUSTLAYER",
|
||||
"MT_ARIDDUST",
|
||||
"MT_TRAINCAMEOSPAWNER",
|
||||
"MT_TRAINSEG",
|
||||
|
||||
// Red Volcano Scenery
|
||||
"MT_FLAMEJET",
|
||||
|
|
|
@ -356,6 +356,8 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_REMT
|
||||
&lspr[NOLIGHT], // SPR_TAZD
|
||||
&lspr[NOLIGHT], // SPR_ADST
|
||||
&lspr[NOLIGHT], // SPR_TRAE
|
||||
&lspr[NOLIGHT], // SPR_TRAI
|
||||
|
||||
// Red Volcano Scenery
|
||||
&lspr[REDBALL_L], // SPR_FLME
|
||||
|
|
64
src/info.c
64
src/info.c
|
@ -251,6 +251,8 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"REMT", // TNT proximity shell
|
||||
"TAZD", // Dust devil
|
||||
"ADST", // Arid dust
|
||||
"TRAE", // Train cameo locomotive
|
||||
"TRAI", // Train cameo wagon
|
||||
|
||||
// Red Volcano Scenery
|
||||
"FLME", // Flame jet
|
||||
|
@ -2373,6 +2375,14 @@ state_t states[NUMSTATES] =
|
|||
{SPR_ADST, 3|FF_ANIMATE, 24, {NULL}, 3, 8, S_NULL}, // S_ARIDDUST2
|
||||
{SPR_ADST, 6|FF_ANIMATE, 24, {NULL}, 3, 8, S_NULL}, // S_ARIDDUST3
|
||||
|
||||
// Train cameo
|
||||
{SPR_NULL, 0, -1, {NULL}, 0, 0, S_TRAINCAMEOSPAWNER_2}, // S_TRAINCAMEOSPAWNER_1
|
||||
{SPR_NULL, 0, 14, {A_TrainCameo}, 20, 18, S_TRAINCAMEOSPAWNER_3}, // S_TRAINCAMEOSPAWNER_2
|
||||
{SPR_NULL, 0, 1, {A_Repeat}, 1, 0, S_TRAINCAMEOSPAWNER_4}, // S_TRAINCAMEOSPAWNER_3
|
||||
{SPR_NULL, 0, 18, {A_TrainCameo2}, 20, 44, S_TRAINCAMEOSPAWNER_5}, // S_TRAINCAMEOSPAWNER_4
|
||||
{SPR_NULL, 0, 1, {A_Repeat}, 5, S_TRAINCAMEOSPAWNER_4, S_NULL}, // S_TRAINCAMEOSPAWNER_5
|
||||
{SPR_NULL, 0, 2, {A_SmokeTrailer}, MT_SMOKE, 0, S_TRAINPUFFMAKER}, // S_TRAINPUFFMAKER
|
||||
|
||||
// Flame jet
|
||||
{SPR_NULL, 0, 2*TICRATE, {NULL}, 0, 0, S_FLAMEJETSTART}, // S_FLAMEJETSTND
|
||||
{SPR_NULL, 0, 3*TICRATE, {A_ToggleFlameJet}, 0, 0, S_FLAMEJETSTOP}, // S_FLAMEJETSTART
|
||||
|
@ -11638,6 +11648,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_TRAINCAMEOSPAWNER
|
||||
1222, // doomednum
|
||||
S_TRAINCAMEOSPAWNER_1, // 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
|
||||
28*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOCLIP, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_TRAINSEG
|
||||
-1, // doomednum
|
||||
S_INVISIBLE, // 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
|
||||
FRACUNIT, // radius
|
||||
FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY|MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_FLAMEJET
|
||||
1300, // doomednum
|
||||
S_FLAMEJETSTND, // spawnstate
|
||||
|
|
15
src/info.h
15
src/info.h
|
@ -254,6 +254,9 @@ void A_Boss5BombExplode();
|
|||
void A_DustDevilThink();
|
||||
void A_TNTExplode();
|
||||
void A_DebrisRandom();
|
||||
void A_TrainCameo();
|
||||
void A_TrainCameo2();
|
||||
|
||||
|
||||
// ratio of states to sprites to mobj types is roughly 6 : 1 : 1
|
||||
#define NUMMOBJFREESLOTS 256
|
||||
|
@ -485,6 +488,8 @@ typedef enum sprite
|
|||
SPR_REMT, // TNT proximity shell
|
||||
SPR_TAZD, // Dust devil
|
||||
SPR_ADST, // Arid dust
|
||||
SPR_TRAE, // Train cameo locomotive
|
||||
SPR_TRAI, // Train cameo wagon
|
||||
|
||||
// Red Volcano Scenery
|
||||
SPR_FLME, // Flame jet
|
||||
|
@ -2487,6 +2492,14 @@ typedef enum state
|
|||
S_ARIDDUST2,
|
||||
S_ARIDDUST3,
|
||||
|
||||
// Train cameo
|
||||
S_TRAINCAMEOSPAWNER_1,
|
||||
S_TRAINCAMEOSPAWNER_2,
|
||||
S_TRAINCAMEOSPAWNER_3,
|
||||
S_TRAINCAMEOSPAWNER_4,
|
||||
S_TRAINCAMEOSPAWNER_5,
|
||||
S_TRAINPUFFMAKER,
|
||||
|
||||
// Flame jet
|
||||
S_FLAMEJETSTND,
|
||||
S_FLAMEJETSTART,
|
||||
|
@ -4203,6 +4216,8 @@ typedef enum mobj_type
|
|||
MT_DUSTDEVIL,
|
||||
MT_DUSTLAYER,
|
||||
MT_ARIDDUST,
|
||||
MT_TRAINCAMEOSPAWNER,
|
||||
MT_TRAINSEG,
|
||||
|
||||
// Red Volcano Scenery
|
||||
MT_FLAMEJET,
|
||||
|
|
|
@ -283,6 +283,8 @@ void A_Boss5BombExplode(mobj_t *actor);
|
|||
void A_DustDevilThink(mobj_t *actor);
|
||||
void A_TNTExplode(mobj_t *actor);
|
||||
void A_DebrisRandom(mobj_t *actor);
|
||||
void A_TrainCameo(mobj_t *actor);
|
||||
void A_TrainCameo2(mobj_t *actor);
|
||||
//for p_enemy.c
|
||||
|
||||
//
|
||||
|
@ -12803,5 +12805,92 @@ void A_DebrisRandom(mobj_t *actor)
|
|||
var2 = 359;
|
||||
A_ChangeAngleAbsolute(actor);
|
||||
P_Thrust(actor, actor->angle, FRACUNIT * 2);
|
||||
}
|
||||
|
||||
static mobj_t *P_TrainSeg(mobj_t *src, fixed_t x, fixed_t y, fixed_t z, angle_t ang, spritenum_t spr, UINT32 frame)
|
||||
{
|
||||
mobj_t *s = P_SpawnMobj(x, y, z, MT_TRAINSEG);
|
||||
s->fuse = 16*TICRATE;
|
||||
s->sprite = spr;
|
||||
s->frame = frame|FF_PAPERSPRITE;
|
||||
s->angle = ang;
|
||||
P_Thrust(s, src->angle, 7*FRACUNIT);
|
||||
return s;
|
||||
}
|
||||
|
||||
// Function: A_TrainCameo
|
||||
//
|
||||
// Description: Sets up train cameo locomotive.
|
||||
//
|
||||
// var1 = Train width.
|
||||
// var2 = Train length.
|
||||
//
|
||||
void A_TrainCameo(mobj_t *actor)
|
||||
{
|
||||
INT32 locvar1 = var1;
|
||||
INT32 locvar2 = var2;
|
||||
fixed_t x = actor->x;
|
||||
fixed_t y = actor->y;
|
||||
fixed_t z = actor->z;
|
||||
angle_t ang = actor->angle;
|
||||
mobj_t *m;
|
||||
spritenum_t spr = SPR_TRAE;
|
||||
fixed_t span = locvar1*FRACUNIT;
|
||||
fixed_t len = locvar2*FRACUNIT;
|
||||
|
||||
#ifdef HAVE_BLUA
|
||||
if (LUA_CallAction("A_TrainCameo", actor))
|
||||
return;
|
||||
#endif
|
||||
|
||||
//Spawn sides.
|
||||
P_TrainSeg(actor, x, y + span, z, ang, spr, 0);
|
||||
P_TrainSeg(actor, x, y - span, z, ang, spr, 0);
|
||||
|
||||
//Center.
|
||||
P_TrainSeg(actor, x, y, z, ang, spr, 1);
|
||||
|
||||
//Front and back.
|
||||
P_TrainSeg(actor, x + len, y, z, ang + ANGLE_90, spr, 2);
|
||||
P_TrainSeg(actor, x - len, y, z, ang + ANGLE_90, spr, 2);
|
||||
|
||||
//Smoke spawner.
|
||||
m = P_TrainSeg(actor, x - (20 * FRACUNIT), y, z + (30 * FRACUNIT), ang + ANGLE_90, spr, 0);
|
||||
P_SetMobjState(m, S_TRAINPUFFMAKER);
|
||||
}
|
||||
|
||||
// Function: A_TrainCameo2
|
||||
//
|
||||
// Description: Sets up train cameo wagon.
|
||||
//
|
||||
// var1 = Train width.
|
||||
// var2 = Train length.
|
||||
//
|
||||
void A_TrainCameo2(mobj_t *actor)
|
||||
{
|
||||
INT32 locvar1 = var1;
|
||||
INT32 locvar2 = var2;
|
||||
fixed_t x = actor->x;
|
||||
fixed_t y = actor->y;
|
||||
fixed_t z = actor->z;
|
||||
angle_t ang = actor->angle;
|
||||
spritenum_t spr = SPR_TRAI;
|
||||
fixed_t span = locvar1*FRACUNIT;
|
||||
fixed_t len = locvar2*FRACUNIT;
|
||||
|
||||
#ifdef HAVE_BLUA
|
||||
if (LUA_CallAction("A_TrainCameo2", actor))
|
||||
return;
|
||||
#endif
|
||||
|
||||
//Spawn sides.
|
||||
P_TrainSeg(actor, x, y + span, z, ang, spr, 0);
|
||||
P_TrainSeg(actor, x, y - span, z, ang, spr, 0);
|
||||
|
||||
//Center.
|
||||
P_TrainSeg(actor, x, y, z, ang, spr, 1);
|
||||
|
||||
//Front and back.
|
||||
P_TrainSeg(actor, x + len, y, z, ang + ANGLE_90, spr, 2);
|
||||
P_TrainSeg(actor, x - len, y, z, ang + ANGLE_90, spr, 2);
|
||||
}
|
|
@ -196,6 +196,7 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"corkp", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cork fired"},
|
||||
{"corkh", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cork hit"},
|
||||
{"bowl", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bowling"},
|
||||
{"chuchu", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Train horn"},
|
||||
|
||||
// Menu, interface
|
||||
{"chchng", false, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Score"},
|
||||
|
|
|
@ -262,6 +262,7 @@ typedef enum
|
|||
sfx_corkp,
|
||||
sfx_corkh,
|
||||
sfx_bowl,
|
||||
sfx_chuchu,
|
||||
|
||||
// Menu, interface
|
||||
sfx_chchng,
|
||||
|
|
Loading…
Reference in a new issue