Ironman: animation fixes, don't transform in POSITION

This commit is contained in:
AJ Martinez 2022-10-31 15:45:07 -07:00
parent 8fe89c3dcd
commit 2a46af5a44
7 changed files with 42 additions and 41 deletions

View file

@ -5282,7 +5282,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
"MT_ITEMCAPSULE",
"MT_ITEMCAPSULE_PART",
"MT_MAGICIANBOX",
"MT_MAGICIANBOX_SIDE",
"MT_SIGNSPARKLE",

View file

@ -22394,7 +22394,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_MAGICIANBOX
{ // MT_MAGICIANBOX
-1, // doomednum
S_MAGICIANBOX, // spawnstate
1000, // spawnhealth
@ -22411,43 +22411,16 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
26*FRACUNIT, // radius
26*FRACUNIT, // height
20*FRACUNIT, // radius
20*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_NOGRAVITY|MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT, // flags
MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT, // flags
S_NULL // raisestate
},
{ // MT_MAGICIANBOX_SIDE
-1, // doomednum
S_MAGICIANBOX, // 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
26*FRACUNIT, // radius
14*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_SCENERY|MF_NOGRAVITY|MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT, // flags
S_NULL // raisestate
},
{ // MT_SIGNSPARKLE
-1, // doomednum
S_SIGNSPARK1, // spawnstate

View file

@ -6330,7 +6330,6 @@ typedef enum mobj_type
MT_ITEMCAPSULE,
MT_ITEMCAPSULE_PART,
MT_MAGICIANBOX,
MT_MAGICIANBOX_SIDE,
MT_SIGNSPARKLE,

View file

@ -7610,6 +7610,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
}
break;
case MT_MAGICIANBOX:
{
fixed_t destx, desty, fakeangle;
INT32 j;
@ -7635,6 +7636,14 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
else if (mobj->extravalue2 == TICRATE/3 && mobj->target)
{
mobj->target->renderflags &= ~RF_DONTDRAW;
mobj->momx = mobj->target->momx;
mobj->momy = mobj->target->momy;
mobj->momz = mobj->target->momz;
P_Thrust(mobj, mobj->angle + ANGLE_90, 32*mapobjectscale);
mobj->flags &= ~MF_NOGRAVITY;
mobj->momz += 10*mapobjectscale;
if (mobj->cusval) // Are we the side selected to play a sound?
{
@ -7673,6 +7682,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
dust->color = color;
dust->colorized = true;
}
return true;
}
else
{
@ -7697,8 +7707,17 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
destx += FixedMul(mobj->radius*2, FINECOSINE(FixedAngle(fakeangle*FRACUNIT) >> ANGLETOFINESHIFT));
desty += FixedMul(mobj->radius*2, FINESINE(FixedAngle(fakeangle*FRACUNIT) >> ANGLETOFINESHIFT));
P_MoveOrigin(mobj, destx, desty, mobj->target->z);
if (mobj->flags2 & MF2_AMBUSH)
{
P_SetOrigin(mobj, destx, desty, mobj->target->z);
mobj->flags2 &= ~MF2_AMBUSH;
}
else
{
P_MoveOrigin(mobj, destx, desty, mobj->target->z);
}
break;
}
case MT_LIGHTNINGSHIELD:
{
fixed_t destx, desty;

View file

@ -4177,7 +4177,8 @@ void P_PlayerThink(player_t *player)
}
else
{
SetRandomFakePlayerSkin(player);
// "Don't halfass" - Oni
// SetRandomFakePlayerSkin(player, false);
}
}
}

View file

@ -348,7 +348,7 @@ void SetFakePlayerSkin(player_t* player, INT32 skinnum)
}
// Loudly rerandomize
void SetRandomFakePlayerSkin(player_t* player)
void SetRandomFakePlayerSkin(player_t* player, boolean fast)
{
INT32 i;
do {
@ -364,15 +364,25 @@ void SetRandomFakePlayerSkin(player_t* player)
mobj_t *parent = player->mo;
fixed_t rad = FixedDiv(FixedHypot(parent->radius, parent->radius), parent->scale);
fixed_t baseangle = P_RandomRange(PR_DECORATION, 0, 359);
INT32 j, k;
for (k = 0; k < 4; k++)
{
mobj_t *box = P_SpawnMobjFromMobj(parent, 0, 0, 0, MT_MAGICIANBOX);
box->target = parent;
box->angle = ANGLE_90 * k;
box->extravalue1 = 1; // Rotation rate
box->extravalue2 = 3*TICRATE/2; // Lifetime
box->angle = FixedAngle((baseangle + k*90) * FRACUNIT);
box->flags2 |= MF2_AMBUSH;
if (fast)
{
box->extravalue1 = 25; // Rotation rate
box->extravalue2 = 3*TICRATE/4; // Lifetime
}
else
{
box->extravalue1 = 1;
box->extravalue2 = 3*TICRATE/2;
}
if (k == 0)
box->cusval = 1; // Should play sounds when disappearing
else

View file

@ -82,7 +82,7 @@ void R_InitSkins(void);
void SetPlayerSkin(INT32 playernum,const char *skinname);
void SetPlayerSkinByNum(INT32 playernum,INT32 skinnum); // Tails 03-16-2002
void SetFakePlayerSkin(player_t* player, INT32 skinnum);
void SetRandomFakePlayerSkin(player_t* player);
void SetRandomFakePlayerSkin(player_t* player, boolean fast);
boolean R_SkinUsable(INT32 playernum, INT32 skinnum);
UINT32 R_GetSkinAvailabilities(void);
INT32 R_SkinAvailable(const char *name);