Scale player to Drone's scale on Nightserize, and reset scale on De-Nightserize

* Also correct player's position to Z center of Drone hitbox on Nightserize
This commit is contained in:
mazmazz 2018-08-11 00:51:33 -04:00
parent 480c4f890d
commit d1a8e0baa0
2 changed files with 12 additions and 2 deletions

View file

@ -793,8 +793,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
P_SwitchSpheresBonusMode(false);
if (!(netgame || multiplayer) && !(player->powers[pw_carry] == CR_NIGHTSMODE))
P_SetTarget(&special->tracer, toucher);
P_NightserizePlayer(player, special->health); // Transform!
P_SetTarget(&player->drone, special); // Mark the player as 'center into the drone'
P_NightserizePlayer(player, special->health); // Transform!
if (!spec)
{
if (toucher->tracer) // Move the ideya over to the drone!

View file

@ -623,6 +623,10 @@ static void P_DeNightserizePlayer(player_t *player)
break;
}
if (player->mo->scale != player->oldscale)
player->mo->destscale = player->oldscale;
player->oldscale = 0;
// Restore from drowning music
P_RestoreMusic(player);
}
@ -640,7 +644,10 @@ void P_NightserizePlayer(player_t *player, INT32 nighttime)
return;
if (player->powers[pw_carry] != CR_NIGHTSMODE)
{
player->mo->height = P_GetPlayerHeight(player); // Just to make sure jumping into the drone doesn't result in a squashed hitbox.
player->oldscale = player->mo->scale;
}
player->pflags &= ~(PF_USEDOWN|PF_JUMPDOWN|PF_ATTACKDOWN|PF_STARTDASH|PF_GLIDING|PF_JUMPED|PF_NOJUMPDAMAGE|PF_THOKKED|PF_SHIELDABILITY|PF_SPINNING|PF_DRILLING);
player->homing = 0;
@ -765,6 +772,9 @@ void P_NightserizePlayer(player_t *player, INT32 nighttime)
player->texttimer = (UINT8)(110 - timeinmap);
}
if (player->drone && player->drone->scale != player->mo->scale)
player->mo->destscale = player->drone->scale;
player->powers[pw_carry] = CR_NIGHTSMODE;
}
@ -6105,7 +6115,7 @@ static void P_MoveNiGHTSToDrone(player_t *player)
if (!player->drone)
return;
player->mo->momx = player->mo->momy = player->mo->momz = 0;
P_TeleportMove(player->mo, player->drone->x, player->drone->y, player->drone->z);
P_TeleportMove(player->mo, player->drone->x, player->drone->y, player->drone->z + player->drone->height/2 - player->mo->height/2);
P_SetTarget(&player->drone, NULL);
}