WIP: Make Capsules just display papersprite so gfx aren't needed for capsules
This commit is contained in:
parent
d8aaf8552c
commit
db340ffd59
5 changed files with 3 additions and 147 deletions
|
|
@ -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",
|
||||
|
|
|
|||
11
src/info.c
11
src/info.c
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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!
|
||||
|
|
|
|||
77
src/p_mobj.c
77
src/p_mobj.c
|
|
@ -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
|
||||
|
||||
//
|
||||
|
|
|
|||
Loading…
Reference in a new issue