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",
"MT_ITEMCAPSULE_PART", "MT_ITEMCAPSULE_PART",
"MT_MAGICIANBOX", "MT_MAGICIANBOX",
"MT_MAGICIANBOX_SIDE",
"MT_SIGNSPARKLE", "MT_SIGNSPARKLE",

View file

@ -22394,7 +22394,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_MAGICIANBOX { // MT_MAGICIANBOX
-1, // doomednum -1, // doomednum
S_MAGICIANBOX, // spawnstate S_MAGICIANBOX, // spawnstate
1000, // spawnhealth 1000, // spawnhealth
@ -22411,40 +22411,13 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
26*FRACUNIT, // radius 20*FRACUNIT, // radius
26*FRACUNIT, // height 20*FRACUNIT, // height
0, // display offset 0, // display offset
100, // mass 100, // mass
0, // damage 0, // damage
sfx_None, // activesound 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 S_NULL // raisestate
}, },

View file

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

View file

@ -7610,6 +7610,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
} }
break; break;
case MT_MAGICIANBOX: case MT_MAGICIANBOX:
{
fixed_t destx, desty, fakeangle; fixed_t destx, desty, fakeangle;
INT32 j; INT32 j;
@ -7636,6 +7637,14 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
{ {
mobj->target->renderflags &= ~RF_DONTDRAW; 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? if (mobj->cusval) // Are we the side selected to play a sound?
{ {
S_StartSound(mobj, sfx_kc2e); S_StartSound(mobj, sfx_kc2e);
@ -7673,6 +7682,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
dust->color = color; dust->color = color;
dust->colorized = true; dust->colorized = true;
} }
return true;
} }
else else
{ {
@ -7697,8 +7707,17 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
destx += FixedMul(mobj->radius*2, FINECOSINE(FixedAngle(fakeangle*FRACUNIT) >> ANGLETOFINESHIFT)); destx += FixedMul(mobj->radius*2, FINECOSINE(FixedAngle(fakeangle*FRACUNIT) >> ANGLETOFINESHIFT));
desty += FixedMul(mobj->radius*2, FINESINE(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; break;
}
case MT_LIGHTNINGSHIELD: case MT_LIGHTNINGSHIELD:
{ {
fixed_t destx, desty; fixed_t destx, desty;

View file

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

View file

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