mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
WIP: refactor bailcharge into own MT and fix effects
still needs gameplay tuning
This commit is contained in:
parent
d297577d8b
commit
a57273a2aa
8 changed files with 73 additions and 15 deletions
|
|
@ -1575,7 +1575,7 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_BLOCKBODY",
|
"S_BLOCKBODY",
|
||||||
|
|
||||||
"S_BAIL",
|
"S_BAIL",
|
||||||
"S_TECHCHARGE",
|
"S_BAILCHARGE",
|
||||||
|
|
||||||
"S_AMPRING",
|
"S_AMPRING",
|
||||||
"S_AMPBODY",
|
"S_AMPBODY",
|
||||||
|
|
@ -3568,6 +3568,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
||||||
"MT_BLOCKBODY",
|
"MT_BLOCKBODY",
|
||||||
|
|
||||||
"MT_BAIL",
|
"MT_BAIL",
|
||||||
|
"MT_BAILCHARGE",
|
||||||
|
|
||||||
"MT_AMPRING",
|
"MT_AMPRING",
|
||||||
"MT_AMPBODY",
|
"MT_AMPBODY",
|
||||||
|
|
|
||||||
29
src/info.c
29
src/info.c
|
|
@ -2164,7 +2164,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_GBDY, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_BLOCKBODY
|
{SPR_GBDY, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_BLOCKBODY
|
||||||
|
|
||||||
{SPR_BAIL, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 8, 1, S_NULL}, // S_BAIL
|
{SPR_BAIL, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 8, 1, S_NULL}, // S_BAIL
|
||||||
{SPR_TECH, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 41, 1, S_NULL}, // S_TECHCHARGE
|
{SPR_TECH, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 41, 1, S_NULL}, // S_BAILCHARGE
|
||||||
|
|
||||||
{SPR_AMPB, FF_FULLBRIGHT|FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_AMPRING
|
{SPR_AMPB, FF_FULLBRIGHT|FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_AMPRING
|
||||||
{SPR_AMPC, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_AMPBODY
|
{SPR_AMPC, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_AMPBODY
|
||||||
|
|
@ -13778,6 +13778,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_BAILCHARGE
|
||||||
|
-1, // doomednum
|
||||||
|
S_BAILCHARGE, // 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
|
||||||
|
67*FRACUNIT, // radius
|
||||||
|
67*FRACUNIT, // height
|
||||||
|
1, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_AMPRING
|
{ // MT_AMPRING
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_AMPRING, // spawnstate
|
S_AMPRING, // spawnstate
|
||||||
|
|
|
||||||
|
|
@ -2633,7 +2633,7 @@ typedef enum state
|
||||||
S_BLOCKBODY,
|
S_BLOCKBODY,
|
||||||
|
|
||||||
S_BAIL,
|
S_BAIL,
|
||||||
S_TECHCHARGE,
|
S_BAILCHARGE,
|
||||||
|
|
||||||
S_AMPRING,
|
S_AMPRING,
|
||||||
S_AMPBODY,
|
S_AMPBODY,
|
||||||
|
|
@ -4653,6 +4653,7 @@ typedef enum mobj_type
|
||||||
MT_BLOCKBODY,
|
MT_BLOCKBODY,
|
||||||
|
|
||||||
MT_BAIL,
|
MT_BAIL,
|
||||||
|
MT_BAILCHARGE,
|
||||||
|
|
||||||
MT_AMPRING,
|
MT_AMPRING,
|
||||||
MT_AMPBODY,
|
MT_AMPBODY,
|
||||||
|
|
|
||||||
|
|
@ -13924,9 +13924,10 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
if ((player->cmd.buttons & BT_VOTE) && ((player->itemtype && player->itemamount) || (player->rings > 0) || player->superring > 0 || player->pickuprings > 0 || player->itemRoulette.active))
|
if ((player->cmd.buttons & BT_VOTE) && ((player->itemtype && player->itemamount) || (player->rings > 0) || player->superring > 0 || player->pickuprings > 0 || player->itemRoulette.active))
|
||||||
{
|
{
|
||||||
player->bailcharge++;
|
player->bailcharge++;
|
||||||
if (player->bailcharge == 1)
|
if (P_PlayerInPain(player) && player->bailcharge == 1)
|
||||||
{
|
{
|
||||||
// Hi Ashnal
|
mobj_t *bail = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, MT_BAILCHARGE);
|
||||||
|
P_SetTarget(&bail->target, player->mo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -13934,13 +13935,13 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
player->bailcharge = 0;
|
player->bailcharge = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!P_PlayerInPain(player) && player->bailcharge >= BAIL_MAXCHARGE) || player->bailcharge)
|
if ((!P_PlayerInPain(player) && player->bailcharge) || player->bailcharge >= BAIL_MAXCHARGE)
|
||||||
{
|
{
|
||||||
CONS_Printf("rl %d it %d ia %d ri %d sr %d pr %d\n", player->itemRoulette.active, player->itemtype, player->itemamount, player->rings > 0, player->superring > 0, player->pickuprings > 0);
|
CONS_Printf("rl %d it %d ia %d ri %d sr %d pr %d\n", player->itemRoulette.active, player->itemtype, player->itemamount, player->rings > 0, player->superring > 0, player->pickuprings > 0);
|
||||||
|
|
||||||
player->bailcharge = 0;
|
player->bailcharge = 0;
|
||||||
|
|
||||||
mobj_t * bail = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, MT_BAIL);
|
mobj_t *bail = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, MT_BAIL);
|
||||||
P_SetTarget(&bail->target, player->mo);
|
P_SetTarget(&bail->target, player->mo);
|
||||||
|
|
||||||
UINT32 debtrings = 20;
|
UINT32 debtrings = 20;
|
||||||
|
|
|
||||||
|
|
@ -44,8 +44,7 @@ Make sure this matches the actual number of states
|
||||||
#define INSTAWHIP_TETHERBLOCK (TICRATE*4)
|
#define INSTAWHIP_TETHERBLOCK (TICRATE*4)
|
||||||
#define PUNISHWINDOW (7*TICRATE/10)
|
#define PUNISHWINDOW (7*TICRATE/10)
|
||||||
|
|
||||||
#define BAIL_MAXCHARGE (9) // tics to bail when not in painstate
|
#define BAIL_MAXCHARGE (42) // tics to bail when not in painstate
|
||||||
#define BAIL_PAINMAXCHARGE (42) // tics to bail when in painstate
|
|
||||||
#define BAIL_DROP (FRACUNIT/2)
|
#define BAIL_DROP (FRACUNIT/2)
|
||||||
#define BAIL_BOOST (FRACUNIT)
|
#define BAIL_BOOST (FRACUNIT)
|
||||||
#define BAIL_DROPFREQUENCY (3)
|
#define BAIL_DROPFREQUENCY (3)
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,7 @@ void Obj_ChargeExtraThink(mobj_t *extra);
|
||||||
|
|
||||||
/* Bail VFX */
|
/* Bail VFX */
|
||||||
void Obj_BailThink(mobj_t *aura);
|
void Obj_BailThink(mobj_t *aura);
|
||||||
|
void Obj_BailChargeThink(mobj_t *aura);
|
||||||
|
|
||||||
/* Ring Shooter */
|
/* Ring Shooter */
|
||||||
boolean Obj_RingShooterThinker(mobj_t *mo);
|
boolean Obj_RingShooterThinker(mobj_t *mo);
|
||||||
|
|
|
||||||
|
|
@ -32,12 +32,6 @@ void Obj_BailThink (mobj_t *aura)
|
||||||
mobj_t *mo = aura->target;
|
mobj_t *mo = aura->target;
|
||||||
player_t *player = mo->player;
|
player_t *player = mo->player;
|
||||||
|
|
||||||
if (P_PlayerInPain(player) && aura->state != &states[S_TECHCHARGE])
|
|
||||||
{
|
|
||||||
P_SetMobjState(aura, S_TECHCHARGE);
|
|
||||||
player->bailcharge = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Follow player
|
// Follow player
|
||||||
aura->flags &= ~(MF_NOCLIPTHING);
|
aura->flags &= ~(MF_NOCLIPTHING);
|
||||||
P_MoveOrigin(aura, mo->x, mo->y, mo->z + mo->height/2);
|
P_MoveOrigin(aura, mo->x, mo->y, mo->z + mo->height/2);
|
||||||
|
|
@ -51,3 +45,32 @@ void Obj_BailThink (mobj_t *aura)
|
||||||
P_SetScale(aura, baseScale);
|
P_SetScale(aura, baseScale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Obj_BailChargeThink (mobj_t *aura)
|
||||||
|
{
|
||||||
|
if (P_MobjWasRemoved(aura->target)
|
||||||
|
|| aura->target->health == 0
|
||||||
|
|| aura->target->destscale <= 1 // sealed star fall out
|
||||||
|
|| !aura->target->player
|
||||||
|
|| !aura->target->player->bailcharge)
|
||||||
|
{
|
||||||
|
P_RemoveMobj(aura);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mobj_t *mo = aura->target;
|
||||||
|
player_t *player = mo->player;
|
||||||
|
|
||||||
|
// Follow player
|
||||||
|
aura->flags &= ~(MF_NOCLIPTHING);
|
||||||
|
P_MoveOrigin(aura, mo->x, mo->y, mo->z + mo->height/2);
|
||||||
|
aura->flags |= MF_NOCLIPTHING;
|
||||||
|
// aura->color = mo->color;
|
||||||
|
|
||||||
|
// aura->renderflags &= ~RF_DONTDRAW;
|
||||||
|
|
||||||
|
fixed_t baseScale = 12*mo->scale/10;
|
||||||
|
|
||||||
|
P_SetScale(aura, baseScale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8928,6 +8928,11 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
Obj_BailThink(mobj);
|
Obj_BailThink(mobj);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case MT_BAILCHARGE:
|
||||||
|
{
|
||||||
|
Obj_BailChargeThink(mobj);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case MT_AMPRING:
|
case MT_AMPRING:
|
||||||
{
|
{
|
||||||
Obj_AmpRingThink(mobj);
|
Obj_AmpRingThink(mobj);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue