From ecf70c6eea947096037878cb7fad38c79284b55d Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 15 Jan 2024 23:53:52 -0800 Subject: [PATCH] Battle UFO: polish drops - Whip - Player gets power-up instantly, no paper item spawned - Items - Put a small delay on the drop appearing - Adjusted drop spawn position so it spawns right under the UFO --- src/k_powerup.cpp | 2 ++ src/objects/battle-ufo.cpp | 33 +++++++++++++++++++-------------- src/p_inter.c | 1 - 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/k_powerup.cpp b/src/k_powerup.cpp index 69bbddc36..5ec9f8a99 100644 --- a/src/k_powerup.cpp +++ b/src/k_powerup.cpp @@ -50,6 +50,8 @@ void K_GivePowerUp(player_t* player, kartitems_t powerup, tic_t time) Obj_SpawnPowerUpAura(player); } + player->flashing = 2*TICRATE; + switch (powerup) { case POWERUP_SMONITOR: diff --git a/src/objects/battle-ufo.cpp b/src/objects/battle-ufo.cpp index 5abb0cf91..76f29a5cb 100644 --- a/src/objects/battle-ufo.cpp +++ b/src/objects/battle-ufo.cpp @@ -12,6 +12,7 @@ #include "../p_local.h" #include "../k_battle.h" #include "../k_objects.h" +#include "../k_powerup.h" #include "../k_kart.h" #include "../k_hud.h" // K_AddMessage @@ -151,26 +152,30 @@ void Obj_BattleUFODeath(mobj_t *mobj, mobj_t *inflictor) { UFO* ufo = static_cast(mobj); const SINT8 flip = P_MobjFlip(ufo); + const kartitems_t pwrup = static_cast(P_RandomRange(PR_BATTLEUFO, FIRSTPOWERUP, LASTPOWERUP)); ufo->momz = -(8*mapobjectscale)/2; - mobj_t* drop = K_CreatePaperItem( - ufo->x, - ufo->y, - ufo->z + (flip), - 0, - flip, - P_RandomRange(PR_BATTLEUFO, FIRSTPOWERUP, LASTPOWERUP), - BATTLE_POWERUP_TIME - ); - - if (!P_MobjWasRemoved(inflictor) && inflictor->type == MT_INSTAWHIP) + if (!P_MobjWasRemoved(inflictor) && inflictor->type == MT_INSTAWHIP && + !P_MobjWasRemoved(inflictor->target) && inflictor->target->player) { - // Take momentum of player who whips - inflictor = inflictor->target; + // Just give it to the player, they earned it. + K_GivePowerUp(inflictor->target->player, pwrup, BATTLE_POWERUP_TIME); } + else + { + mobj_t *drop = K_CreatePaperItem( + ufo->x, + ufo->y, + ufo->z + ufo->sprzoff() + (flip), + 0, + flip, + pwrup, + BATTLE_POWERUP_TIME + ); - drop->momz = !P_MobjWasRemoved(inflictor) ? inflictor->momz : 0; + drop->hitlag = ufo->hitlag(); + } if (ufo->spawner()) { diff --git a/src/p_inter.c b/src/p_inter.c index b645d374f..5a11f7101 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -402,7 +402,6 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) return; K_GivePowerUp(player, special->threshold, special->movecount); - player->flashing = 2*TICRATE; } else {