From 2a46af5a443661a98026f75eca136a8a2cc2310e Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Mon, 31 Oct 2022 15:45:07 -0700 Subject: [PATCH] Ironman: animation fixes, don't transform in POSITION --- src/deh_tables.c | 1 - src/info.c | 37 +++++-------------------------------- src/info.h | 1 - src/p_mobj.c | 21 ++++++++++++++++++++- src/p_user.c | 3 ++- src/r_skins.c | 18 ++++++++++++++---- src/r_skins.h | 2 +- 7 files changed, 42 insertions(+), 41 deletions(-) diff --git a/src/deh_tables.c b/src/deh_tables.c index bd908e8b3..3b6ad291f 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -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", diff --git a/src/info.c b/src/info.c index 0d8d3e462..b3d377532 100644 --- a/src/info.c +++ b/src/info.c @@ -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 diff --git a/src/info.h b/src/info.h index 05caa8010..f70925273 100644 --- a/src/info.h +++ b/src/info.h @@ -6330,7 +6330,6 @@ typedef enum mobj_type MT_ITEMCAPSULE, MT_ITEMCAPSULE_PART, MT_MAGICIANBOX, - MT_MAGICIANBOX_SIDE, MT_SIGNSPARKLE, diff --git a/src/p_mobj.c b/src/p_mobj.c index cf58bf6c9..d3f50c475 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -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; diff --git a/src/p_user.c b/src/p_user.c index f19211f9f..8d07207ed 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4177,7 +4177,8 @@ void P_PlayerThink(player_t *player) } else { - SetRandomFakePlayerSkin(player); + // "Don't halfass" - Oni + // SetRandomFakePlayerSkin(player, false); } } } diff --git a/src/r_skins.c b/src/r_skins.c index 92299a9d2..3c689ea22 100644 --- a/src/r_skins.c +++ b/src/r_skins.c @@ -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 diff --git a/src/r_skins.h b/src/r_skins.h index 66fdaf3a6..512e476f8 100644 --- a/src/r_skins.h +++ b/src/r_skins.h @@ -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);