Modify GFX code to use modified SRB2 shield graphics instead

This commit is contained in:
NepDisk 2024-09-20 14:45:49 -04:00
parent d08280f38d
commit 58e7a3e47e
5 changed files with 40 additions and 307 deletions

View file

@ -339,7 +339,6 @@ actionpointer_t actionpointers[] =
{{A_MayonakaArrow}, "A_MAYONAKAARROW"},
{{A_MementosTPParticles}, "A_MEMENTOSTPPARTICLES"},
{{A_ReaperThinker}, "A_REAPERTHINKER"},
{{A_FlameShieldPaper}, "A_FLAMESHIELDPAPER"},
{{A_InvincSparkleRotate}, "A_INVINCSPARKLEROTATE"},
{{NULL}, "NONE"},
@ -3717,30 +3716,7 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
"S_FLAMESHIELD16",
"S_FLAMESHIELD17",
"S_FLAMESHIELD18",
"S_FLAMESHIELDDASH1",
"S_FLAMESHIELDDASH2",
"S_FLAMESHIELDDASH3",
"S_FLAMESHIELDDASH4",
"S_FLAMESHIELDDASH5",
"S_FLAMESHIELDDASH6",
"S_FLAMESHIELDDASH7",
"S_FLAMESHIELDDASH8",
"S_FLAMESHIELDDASH9",
"S_FLAMESHIELDDASH10",
"S_FLAMESHIELDDASH11",
"S_FLAMESHIELDDASH12",
"S_FLAMESHIELDDASH2_UNDERLAY",
"S_FLAMESHIELDDASH5_UNDERLAY",
"S_FLAMESHIELDDASH8_UNDERLAY",
"S_FLAMESHIELDDASH11_UNDERLAY",
"S_FLAMESHIELDPAPER",
"S_FLAMESHIELDLINE1",
"S_FLAMESHIELDLINE2",
"S_FLAMESHIELDLINE3",
"S_FLAMESHIELDFLASH",
"S_FLAMESHIELDDASH",
// The legend
"S_SINK",
@ -5257,8 +5233,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
"MT_LIGHTNINGSHIELD", // Shields
"MT_BUBBLESHIELD",
"MT_FLAMESHIELD",
"MT_FLAMESHIELDUNDERLAY",
"MT_FLAMESHIELDPAPER",
"MT_BUBBLESHIELDTRAP",
"MT_SINK", // Kitchen Sink Stuff

View file

@ -4261,30 +4261,7 @@ state_t states[NUMSTATES] =
{SPR_FLMS, FF_FULLBRIGHT|16, 2, {NULL}, 0, 0, S_FLAMESHIELD17}, // S_FLAMESHIELD16
{SPR_FLMS, FF_FULLBRIGHT|8, 2, {NULL}, 0, 0, S_FLAMESHIELD18}, // S_FLAMESHIELD17
{SPR_FLMS, FF_FULLBRIGHT|17, 2, {NULL}, 0, 0, S_FLAMESHIELD1}, // S_FLAMESHIELD18
{SPR_FLMD, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH2}, // S_FLAMESHIELDDASH1
{SPR_FLMD, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH3}, // S_FLAMESHIELDDASH2
{SPR_FLMD, FF_FULLBRIGHT, 1, {A_FlameShieldPaper}, 0, 2, S_FLAMESHIELDDASH4}, // S_FLAMESHIELDDASH3
{SPR_FLMD, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH5}, // S_FLAMESHIELDDASH4
{SPR_FLMD, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH6}, // S_FLAMESHIELDDASH5
{SPR_FLMD, FF_FULLBRIGHT, 1, {A_FlameShieldPaper}, 1, 3, S_FLAMESHIELDDASH7}, // S_FLAMESHIELDDASH6
{SPR_FLMD, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH8}, // S_FLAMESHIELDDASH7
{SPR_FLMD, FF_FULLBRIGHT|7, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH9}, // S_FLAMESHIELDDASH8
{SPR_FLMD, FF_FULLBRIGHT, 1, {A_FlameShieldPaper}, 2, 0, S_FLAMESHIELDDASH10}, // S_FLAMESHIELDDASH9
{SPR_FLMD, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH11}, // S_FLAMESHIELDDASH10
{SPR_FLMD, FF_FULLBRIGHT|8, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH12}, // S_FLAMESHIELDDASH11
{SPR_FLMD, FF_FULLBRIGHT, 1, {A_FlameShieldPaper}, 3, 1, S_FLAMESHIELDDASH1}, // S_FLAMESHIELDDASH12
{SPR_FLMD, FF_FULLBRIGHT|9, 2, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDDASH2_UNDERLAY
{SPR_FLMD, FF_FULLBRIGHT|10, 2, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDDASH5_UNDERLAY
{SPR_FLMD, FF_FULLBRIGHT|11, 2, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDDASH8_UNDERLAY
{SPR_FLMD, FF_FULLBRIGHT|12, 2, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDDASH11_UNDERLAY
{SPR_FLMP, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDPAPER
{SPR_FLML, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 7, {NULL}, 6, 1, S_NULL}, // S_FLAMESHIELDLINE1
{SPR_FLML, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE|7, 7, {NULL}, 6, 1, S_NULL}, // S_FLAMESHIELDLINE2
{SPR_FLML, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE|14, 7, {NULL}, 6, 1, S_NULL}, // S_FLAMESHIELDLINE3
{SPR_FLMF, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDFLASH
{SPR_FLMS, FF_FULLBRIGHT|18, -1, {NULL}, 0, 0, S_FLAMESHIELDDASH}, // S_FLAMESHIELDDASH
{SPR_SINK, 0, 1, {A_SmokeTrailer}, MT_SINKTRAIL, 0, S_SINK}, // S_SINK
{SPR_SINK, 0|FF_TRANS80|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_SINK_SHIELD}, // S_SINK_SHIELD
@ -23331,60 +23308,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_FLAMESHIELDUNDERLAY
-1, // doomednum
S_FLAMESHIELDDASH2_UNDERLAY, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // 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<<FRACBITS, // radius
16<<FRACBITS, // height
-1, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
{ // MT_FLAMESHIELDPAPER
-1, // doomednum
S_FLAMESHIELDPAPER, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // 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<<FRACBITS, // radius
16<<FRACBITS, // height
1, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
{ // MT_BUBBLESHIELDTRAP
-1, // doomednum
S_BUBBLESHIELDTRAP1, // spawnstate

View file

@ -291,7 +291,6 @@ enum actionnum
A_MAYONAKAARROW,
A_MEMENTOSTPPARTICLES,
A_REAPERTHINKER,
A_FLAMESHIELDPAPER,
A_INVINCSPARKLEROTATE,
NUMACTIONS
};
@ -567,7 +566,6 @@ void A_RoamingShadowThinker();
void A_MayonakaArrow();
void A_ReaperThinker();
void A_MementosTPParticles();
void A_FlameShieldPaper();
void A_InvincSparkleRotate();
void A_DeathSpin();
@ -4694,30 +4692,7 @@ typedef enum state
S_FLAMESHIELD16,
S_FLAMESHIELD17,
S_FLAMESHIELD18,
S_FLAMESHIELDDASH1,
S_FLAMESHIELDDASH2,
S_FLAMESHIELDDASH3,
S_FLAMESHIELDDASH4,
S_FLAMESHIELDDASH5,
S_FLAMESHIELDDASH6,
S_FLAMESHIELDDASH7,
S_FLAMESHIELDDASH8,
S_FLAMESHIELDDASH9,
S_FLAMESHIELDDASH10,
S_FLAMESHIELDDASH11,
S_FLAMESHIELDDASH12,
S_FLAMESHIELDDASH2_UNDERLAY,
S_FLAMESHIELDDASH5_UNDERLAY,
S_FLAMESHIELDDASH8_UNDERLAY,
S_FLAMESHIELDDASH11_UNDERLAY,
S_FLAMESHIELDPAPER,
S_FLAMESHIELDLINE1,
S_FLAMESHIELDLINE2,
S_FLAMESHIELDLINE3,
S_FLAMESHIELDFLASH,
S_FLAMESHIELDDASH,
// The legend
S_SINK,
@ -6274,8 +6249,6 @@ typedef enum mobj_type
MT_LIGHTNINGSHIELD, // Shields
MT_BUBBLESHIELD,
MT_FLAMESHIELD,
MT_FLAMESHIELDUNDERLAY,
MT_FLAMESHIELDPAPER,
MT_BUBBLESHIELDTRAP,
MT_SINK, // Kitchen Sink Stuff

View file

@ -327,7 +327,6 @@ void A_RoamingShadowThinker(mobj_t *actor);
void A_MayonakaArrow(mobj_t *actor);
void A_ReaperThinker(mobj_t *actor);
void A_MementosTPParticles(mobj_t *actor);
void A_FlameShieldPaper(mobj_t *actor);
void A_InvincSparkleRotate(mobj_t *actor);
void A_DeathSpin(mobj_t *actor);
@ -14155,50 +14154,6 @@ void A_ReaperThinker(mobj_t *actor)
}
}
void A_FlameShieldPaper(mobj_t *actor)
{
INT32 framea = 0;
INT32 frameb = 0;
INT32 locvar1 = var1;
INT32 locvar2 = var2;
UINT8 i;
if (LUA_CallAction(A_FLAMESHIELDPAPER, actor))
return;
framea = (locvar1 & FF_FRAMEMASK);
frameb = (locvar2 & FF_FRAMEMASK);
for (i = 0; i < 2; i++)
{
INT32 perpendicular = ((i & 1) ? -ANGLE_90 : ANGLE_90);
fixed_t newx = actor->x + P_ReturnThrustX(NULL, actor->angle + perpendicular, 8*actor->scale);
fixed_t newy = actor->y + P_ReturnThrustY(NULL, actor->angle + perpendicular, 8*actor->scale);
mobj_t *paper = P_SpawnMobj(newx, newy, actor->z, MT_FLAMESHIELDPAPER);
P_SetTarget(&paper->target, actor);
P_SetScale(paper, actor->scale);
paper->destscale = actor->destscale;
P_SetMobjState(paper, S_FLAMESHIELDPAPER);
paper->frame &= ~FF_FRAMEMASK;
paper->angle = actor->angle + ANGLE_45;
if (i & 1)
{
paper->angle -= ANGLE_90;
paper->frame |= frameb;
}
else
{
paper->frame |= framea;
}
paper->extravalue1 = i;
}
}
void A_InvincSparkleRotate(mobj_t *actor)
{
fixed_t sx, sy, sz; // Teleport dests.

View file

@ -7399,30 +7399,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
}
}
break;
case MT_FLAMESHIELDPAPER:
if (!mobj->target || P_MobjWasRemoved(mobj->target))
{
P_RemoveMobj(mobj);
return false;
}
mobj->z = mobj->target->z;
K_MatchGenericExtraFlags(mobj, mobj->target);
{
INT32 perpendicular = ((mobj->extravalue1 & 1) ? -ANGLE_90 : ANGLE_90);
fixed_t newx = mobj->target->x + P_ReturnThrustX(NULL, mobj->target->angle + perpendicular, 8*mobj->target->scale);
fixed_t newy = mobj->target->y + P_ReturnThrustY(NULL, mobj->target->angle + perpendicular, 8*mobj->target->scale);
P_MoveOrigin(mobj, newx, newy, mobj->target->z);
if (mobj->extravalue1 & 1)
mobj->angle = mobj->target->angle - ANGLE_45;
else
mobj->angle = mobj->target->angle + ANGLE_45;
}
break;
case MT_LIGHTNINGSHIELD:
{
@ -7591,121 +7567,53 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
break;
}
case MT_FLAMESHIELD:
{
fixed_t destx, desty;
statenum_t curstate;
statenum_t underlayst = S_NULL;
INT32 flamemax = 0;
if (!mobj->target || !mobj->target->health || !mobj->target->player
|| mobj->target->player->curshield != KSHIELD_FLAME)
{
P_RemoveMobj(mobj);
return false;
}
flamemax = mobj->target->player->flamelength * flameseg;
P_SetScale(mobj, (mobj->destscale = (5*mobj->target->scale)>>2));
curstate = ((mobj->tics == 1) ? (mobj->state->nextstate) : ((statenum_t)(mobj->state-states)));
if (mobj->target->player->flamedash)
{
if (!(curstate >= S_FLAMESHIELDDASH1 && curstate <= S_FLAMESHIELDDASH12))
P_SetMobjState(mobj, S_FLAMESHIELDDASH1);
if (curstate == S_FLAMESHIELDDASH2)
underlayst = S_FLAMESHIELDDASH2_UNDERLAY;
else if (curstate == S_FLAMESHIELDDASH5)
underlayst = S_FLAMESHIELDDASH5_UNDERLAY;
else if (curstate == S_FLAMESHIELDDASH8)
underlayst = S_FLAMESHIELDDASH8_UNDERLAY;
else if (curstate == S_FLAMESHIELDDASH11)
underlayst = S_FLAMESHIELDDASH11_UNDERLAY;
if (leveltime & 1)
fixed_t destx, desty;
statenum_t curstate;
if (!mobj->target || !mobj->target->health || !mobj->target->player
|| mobj->target->player->curshield != KSHIELD_FLAME)
{
UINT8 i;
UINT8 nl = 2;
if (mobj->target->player->flamedash > mobj->extravalue1)
nl = 3;
for (i = 0; i < nl; i++)
{
mobj_t *fast = P_SpawnMobj(mobj->x + (P_RandomRange(-36,36) * mobj->scale),
mobj->y + (P_RandomRange(-36,36) * mobj->scale),
mobj->z + (mobj->height/2) + (P_RandomRange(-20,20) * mobj->scale),
MT_FASTLINE);
fast->angle = mobj->angle;
fast->momx = 3*mobj->target->momx/4;
fast->momy = 3*mobj->target->momy/4;
fast->momz = 3*P_GetMobjZMovement(mobj->target)/4;
K_MatchGenericExtraFlags(fast, mobj);
P_SetMobjState(fast, S_FLAMESHIELDLINE1 + i);
}
P_RemoveMobj(mobj);
return false;
}
}
else
{
if (curstate >= S_FLAMESHIELDDASH1 && curstate <= S_FLAMESHIELDDASH12)
P_SetMobjState(mobj, S_FLAMESHIELD1);
}
mobj->extravalue1 = mobj->target->player->flamedash;
if (mobj->target->player->flamemeter > flamemax)
{
mobj_t *flash = P_SpawnMobj(mobj->x + mobj->target->momx, mobj->y + mobj->target->momy, mobj->z + mobj->target->momz, MT_THOK);
P_SetMobjState(flash, S_FLAMESHIELDFLASH);
if (leveltime & 1)
P_SetScale(mobj, (mobj->destscale = (5*mobj->target->scale)>>2));
curstate = ((mobj->tics == 1) ? (mobj->state->nextstate) : ((statenum_t)(mobj->state-states)));
if (mobj->target->player->flamedash)
{
flash->frame |= 2 + ((leveltime / 2) % 4);
if (curstate != S_FLAMESHIELDDASH)
P_SetMobjState(mobj, S_FLAMESHIELDDASH);
mobj->renderflags ^= RF_DONTDRAW;
}
else
{
flash->frame |= ((leveltime / 2) % 2);
if (curstate == S_FLAMESHIELDDASH)
P_SetMobjState(mobj, S_FLAMESHIELD1);
mobj->renderflags &= ~RF_DONTDRAW;
}
if (!splitscreen /*&& rendermode != render_soft*/)
{
angle_t viewingangle;
if (players[displayplayers[0]].awayviewtics)
viewingangle = R_PointToAngle2(mobj->target->x, mobj->target->y, players[displayplayers[0]].awayviewmobj->x, players[displayplayers[0]].awayviewmobj->y);
else if (!camera[0].chase && players[displayplayers[0]].mo)
viewingangle = R_PointToAngle2(mobj->target->x, mobj->target->y, players[displayplayers[0]].mo->x, players[displayplayers[0]].mo->y);
else
viewingangle = R_PointToAngle2(mobj->target->x, mobj->target->y, camera[0].x, camera[0].y);
if (curstate >= S_FLAMESHIELD1 && curstate < S_FLAMESHIELDDASH && ((curstate-S_FLAMESHIELD1) & 1))
viewingangle += ANGLE_180;
destx = mobj->target->x + P_ReturnThrustX(mobj->target, viewingangle, mobj->scale>>4);
desty = mobj->target->y + P_ReturnThrustY(mobj->target, viewingangle, mobj->scale>>4);
}
}
if (!splitscreen /*&& rendermode != render_soft*/)
{
angle_t viewingangle;
if (players[displayplayers[0]].awayviewtics)
viewingangle = R_PointToAngle2(mobj->target->x, mobj->target->y, players[displayplayers[0]].awayviewmobj->x, players[displayplayers[0]].awayviewmobj->y);
else if (!camera[0].chase && players[displayplayers[0]].mo)
viewingangle = R_PointToAngle2(mobj->target->x, mobj->target->y, players[displayplayers[0]].mo->x, players[displayplayers[0]].mo->y);
else
viewingangle = R_PointToAngle2(mobj->target->x, mobj->target->y, camera[0].x, camera[0].y);
if (curstate >= S_FLAMESHIELD1 && curstate < S_FLAMESHIELDDASH1 && ((curstate-S_FLAMESHIELD1) & 1))
viewingangle += ANGLE_180;
destx = mobj->target->x + P_ReturnThrustX(mobj->target, viewingangle, mobj->scale>>4);
desty = mobj->target->y + P_ReturnThrustY(mobj->target, viewingangle, mobj->scale>>4);
{
destx = mobj->target->x;
desty = mobj->target->y;
}
P_MoveOrigin(mobj, destx, desty, mobj->target->z);
mobj->angle = mobj->target->angle;
break;
}
else
{
destx = mobj->target->x;
desty = mobj->target->y;
}
P_MoveOrigin(mobj, destx, desty, mobj->target->z);
mobj->angle = K_MomentumAngle(mobj->target);
if (underlayst != S_NULL)
{
mobj_t *underlay = P_SpawnMobj(mobj->target->x, mobj->target->y, mobj->target->z, MT_FLAMESHIELDUNDERLAY);
underlay->angle = mobj->angle;
P_SetMobjState(underlay, underlayst);
}
break;
}
case MT_ROCKETSNEAKER:
if (!mobj->target || !mobj->target->health)
{