WIP: Make Capsules just display papersprite so gfx aren't needed for capsules

This commit is contained in:
NepDisk 2024-09-20 19:58:41 -04:00
parent d8aaf8552c
commit db340ffd59
5 changed files with 3 additions and 147 deletions

View file

@ -3325,12 +3325,6 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
// Item capsules
"S_ITEMCAPSULE",
"S_ITEMCAPSULE_TOP_SIDE",
"S_ITEMCAPSULE_BOTTOM_SIDE_AIR",
"S_ITEMCAPSULE_BOTTOM_SIDE_GROUND",
//"S_ITEMCAPSULE_TOP",
//"S_ITEMCAPSULE_BOTTOM",
//"S_ITEMCAPSULE_INSIDE",
// Signpost sparkles
"S_SIGNSPARK1",

View file

@ -539,7 +539,6 @@ char sprnames[NUMSPRITES + 1][5] =
"KINB", // Darker invincibility sparkle trail
"KINF", // Invincibility flash
"INVI", // Invincibility speedlines
"ICAP", // Item capsules
"WIPD", // Wipeout dust trail
"DRIF", // Drift Sparks
@ -3888,13 +3887,7 @@ state_t states[NUMSTATES] =
{SPR_NULL, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMICON
{SPR_ICAP, FF_ADD|0, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMCAPSULE
{SPR_ICAP, FF_PAPERSPRITE|1, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMCAPSULE_TOP_SIDE
{SPR_ICAP, FF_VERTICALFLIP|FF_PAPERSPRITE|1, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMCAPSULE_BOTTOM_SIDE_AIR
{SPR_ICAP, FF_PAPERSPRITE|2, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMCAPSULE_BOTTOM_SIDE_GROUND
//{SPR_ICAP, FF_FLOORSPRITE|3, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMCAPSULE_TOP
//{SPR_ICAP, FF_FLOORSPRITE|4, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMCAPSULE_BOTTOM
//{SPR_ICAP, FF_FLOORSPRITE|5, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMCAPSULE_INSIDE
{SPR_NULL, FF_ADD|0, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMCAPSULE
{SPR_SGNS, FF_ADD|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_SIGNSPARK2}, // S_SIGNSPARK1
{SPR_SGNS, FF_ADD|FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_SIGNSPARK3}, // S_SIGNSPARK2
@ -22155,7 +22148,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL, // missilestate
S_INVISIBLE, // deathstate
S_NULL, // xdeathstate
sfx_itcaps, // deathsound
sfx_itpick, // deathsound
0, // speed
56*FRACUNIT, // radius
112*FRACUNIT, // height

View file

@ -1090,7 +1090,6 @@ typedef enum sprite
SPR_KINB, // Darker invincibility sparkle trail
SPR_KINF, // Invincibility flash
SPR_INVI, // Invincibility speedlines
SPR_ICAP, // Item capsules
SPR_WIPD, // Wipeout dust trail
SPR_DRIF, // Drift Sparks
@ -4299,12 +4298,6 @@ typedef enum state
// Item capsules
S_ITEMCAPSULE,
S_ITEMCAPSULE_TOP_SIDE,
S_ITEMCAPSULE_BOTTOM_SIDE_AIR,
S_ITEMCAPSULE_BOTTOM_SIDE_GROUND,
//S_ITEMCAPSULE_TOP,
//S_ITEMCAPSULE_BOTTOM,
//S_ITEMCAPSULE_INSIDE,
// Signpost sparkles
S_SIGNSPARK1,

View file

@ -1429,57 +1429,10 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
else
target->fuse = 40*TICRATE;
// burst effects
for (i = 0; i < 2; i++)
{
mobj_t *blast = P_SpawnMobjFromMobj(target, 0, 0, target->info->height >> 1, MT_BATTLEBUMPER_BLAST);
blast->angle = angle + i*ANGLE_90;
P_SetScale(blast, 2*blast->scale/3);
blast->destscale = 2*blast->scale;
}
// dust effects
for (i = 0; i < 10; i++)
{
mobj_t *puff = P_SpawnMobjFromMobj(
target,
P_RandomRange(-spacing, spacing) * FRACUNIT,
P_RandomRange(-spacing, spacing) * FRACUNIT,
P_RandomRange(0, 4*spacing) * FRACUNIT,
MT_SPINDUST
);
P_SetScale(puff, (puff->destscale *= 2));
puff->momz = puff->scale * P_MobjFlip(puff);
P_Thrust(puff, R_PointToAngle2(target->x, target->y, puff->x, puff->y), 3*puff->scale);
if (attacker)
{
puff->momx += attacker->momx;
puff->momy += attacker->momy;
puff->momz += attacker->momz;
}
}
// remove inside item
if (target->tracer && !P_MobjWasRemoved(target->tracer))
P_RemoveMobj(target->tracer);
// bust capsule caps
while (part && !P_MobjWasRemoved(part))
{
P_InstaThrust(part, part->angle + ANGLE_90, 6 * part->target->scale);
P_SetObjectMomZ(part, 6 * FRACUNIT, false);
part->fuse = TICRATE/2;
part->flags &= ~MF_NOGRAVITY;
if (attacker)
{
part->momx += attacker->momx;
part->momy += attacker->momy;
part->momz += attacker->momz;
}
part = part->hnext;
P_RemoveMobj(target->tracer);
}
// give the player an item!

View file

@ -4121,42 +4121,6 @@ static void P_RefreshItemCapsuleParts(mobj_t *mobj)
if (itemType < 1 || itemType >= NUMKARTITEMS)
itemType = KITEM_SAD;
// update invincibility properties
if (itemType == KITEM_INVINCIBILITY)
{
mobj->renderflags = (mobj->renderflags & ~RF_BRIGHTMASK) | RF_FULLBRIGHT;
mobj->colorized = true;
}
else
{
mobj->renderflags = (mobj->renderflags & ~RF_BRIGHTMASK) | RF_SEMIBRIGHT;
mobj->color = SKINCOLOR_NONE;
mobj->colorized = false;
}
// update cap colors
if (itemType == KITEM_SUPERRING)
{
color = SKINCOLOR_GOLD;
newRenderFlags |= RF_SEMIBRIGHT;
}
else if (mobj->spawnpoint && (mobj->spawnpoint->args[2] & TMICF_INVERTTIMEATTACK))
color = SKINCOLOR_SAPPHIRE;
else if (itemType == KITEM_SPB)
color = SKINCOLOR_JET;
else
color = SKINCOLOR_NONE;
colorized = (color != SKINCOLOR_NONE);
part = mobj;
while (!P_MobjWasRemoved(part->hnext))
{
part = part->hnext;
part->color = color;
part->colorized = colorized;
part->renderflags = (part->renderflags & ~RF_BRIGHTMASK) | newRenderFlags;
}
// update inside item frame
part = mobj->tracer;
if (P_MobjWasRemoved(part))
@ -4233,24 +4197,11 @@ static void P_RefreshItemCapsuleParts(mobj_t *mobj)
P_SetTarget(&part->tracer, NULL);
}
}
#define CAPSULESIDES 5
#define ANG_CAPSULE (UINT32_MAX / CAPSULESIDES)
#define ROTATIONSPEED (2*ANG2)
static void P_SpawnItemCapsuleParts(mobj_t *mobj)
{
UINT8 i;
mobj_t *part;
fixed_t buttScale = 0;
statenum_t buttState = S_ITEMCAPSULE_BOTTOM_SIDE_AIR;
angle_t spin = ANGLE_MAX - ROTATIONSPEED;
if (P_IsObjectOnGround(mobj))
{
buttScale = 13*FRACUNIT/10;
buttState = S_ITEMCAPSULE_BOTTOM_SIDE_GROUND;
spin = 0;
}
// inside item
part = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_ITEMCAPSULE_PART);
@ -4263,36 +4214,8 @@ static void P_SpawnItemCapsuleParts(mobj_t *mobj)
part->eflags &= ~MFE_VERTICALFLIP;
P_SetTarget(&mobj->tracer, part); // pointer to this item, so we can modify its sprite/frame
// capsule caps
part = mobj;
for (i = 0; i < CAPSULESIDES; i++)
{
// a bottom side
P_SetTarget(&part->hnext, P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_ITEMCAPSULE_PART));
P_SetTarget(&part->hnext->hprev, part);
part = part->hnext;
P_SetTarget(&part->target, mobj);
P_SetMobjState(part, buttState);
part->angle = i * ANG_CAPSULE;
part->movedir = spin; // rotation speed
part->movefactor = 0; // z offset
part->extravalue1 = buttScale; // relative scale
// a top side
P_SetTarget(&part->hnext, P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_ITEMCAPSULE_PART));
P_SetTarget(&part->hnext->hprev, part);
part = part->hnext;
P_SetTarget(&part->target, mobj);
P_SetMobjState(part, S_ITEMCAPSULE_TOP_SIDE);
part->angle = i * ANG_CAPSULE;
part->movedir = spin; // rotation speed
part->movefactor = mobj->info->height - part->info->height; // z offset
}
P_RefreshItemCapsuleParts(mobj);
}
#undef CAPSULESIDES
#undef ANG_CAPSULE
#undef ROTATIONSPEED
//