From 5a372a33181cb7d0ebad1e39a1c34ffd92135f1f Mon Sep 17 00:00:00 2001 From: NepDisk Date: Sun, 26 Oct 2025 19:16:16 -0400 Subject: [PATCH] Air Drop Dust --- src/d_main.cpp | 2 +- src/f_finale.c | 3 +++ src/info/mobjs.h | 2 ++ src/info/sprites.h | 2 ++ src/info/states.h | 3 +++ src/k_kart.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 6 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/d_main.cpp b/src/d_main.cpp index 556fdea2b..382ab5d39 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -94,7 +94,7 @@ #define ASSET_HASH_TEXTURES_KART 0xb4211b2f32b6a291 #define ASSET_HASH_CHARS_KART 0x1e68a3e01aa5c68b #define ASSET_HASH_MAPS_KART 0x38558ed00da41ce9 -#define ASSET_HASH_MAIN_PK3 0xcab6ffcea6c8aa3c +#define ASSET_HASH_MAIN_PK3 0xef2fc6f4dcbca626 #define ASSET_HASH_MAPPATCH_PK3 0x7d1f6b96dd119296 #define ASSET_HASH_BONUSCHARS_KART 0x60e6f13d822a7461 #ifdef USE_PATCH_FILE diff --git a/src/f_finale.c b/src/f_finale.c index 937796302..6fddafb38 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -949,6 +949,9 @@ const char *blancredits[] = { "\"WumboSpasm\"", "\"Miguelius256\"", "", + "\1New Misc Art", + "\"scizor300\"", + "", "\1Map Patches", "\"Sonic1983\" (PB)", "\"SinosTH\" (PB)", diff --git a/src/info/mobjs.h b/src/info/mobjs.h index 024a4cfea..4d1f31325 100644 --- a/src/info/mobjs.h +++ b/src/info/mobjs.h @@ -848,6 +848,8 @@ _(FOLLOWERBUBBLE_BACK) _(WATERTRAIL) _(WATERTRAILUNDERLAY) +_(AIRDROPDUST) + _(PAPERITEMSPOT) _(LOOPENDPOINT) diff --git a/src/info/sprites.h b/src/info/sprites.h index 508098164..89595c2a4 100644 --- a/src/info/sprites.h +++ b/src/info/sprites.h @@ -640,6 +640,8 @@ _(CHEZ) // follower: cheese _(BSSS) // Stacking effect +_(BKAD) // Airdrop Dust + _(TRCK) // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later diff --git a/src/info/states.h b/src/info/states.h index a4fda74b2..0423ca11b 100644 --- a/src/info/states.h +++ b/src/info/states.h @@ -3582,6 +3582,9 @@ _(EGOORB) _(WATERTRAILS) _(WATERTRAILSUNDERLAY) +_(AIRDROPDUST1) +_(AIRDROPDUST2) + _(SLIPSPARK1) _(SLIPSPARK2) _(SLIPSPARK3) diff --git a/src/k_kart.c b/src/k_kart.c index 2d6ab0cba..6e03e552d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1404,7 +1404,7 @@ static void K_SpawnStackingEffect(player_t *player) mobj_t *booststack = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BOOSTSTACK); booststack->flags2 |= MF2_DONTSYNC; // No desyncs pls! P_SetTarget(&booststack->target, player->mo); - P_SetScale(booststack, FixedMul(FRACUNIT + FixedMul(2*FRACUNIT - FRACUNIT, FixedDiv(min(player->numboosts,4)*FRACUNIT, 4*FRACUNIT)), mapobjectscale)); + P_SetScale(booststack, FixedMul(FRACUNIT + FixedMul(2*FRACUNIT - FRACUNIT, FixedDiv(min(player->numboosts,6)*FRACUNIT, 4*FRACUNIT)), mapobjectscale)); booststack->angle = player->mo->angle + ANGLE_90; booststack->color = player->mo->color; @@ -6810,6 +6810,48 @@ void K_AwardScaledPlayerRings(player_t *player, SINT8 mode) K_AwardPlayerRings(player, awardamount, (mode == ASR_SUPERRING) ? true : false); } +static void K_SpawnAirdropTrail(player_t *player) +{ + fixed_t newx, newy; + fixed_t tx, ty, tz; + mobj_t *dust; + angle_t travelangle; + INT32 i, j; + + I_Assert(player != NULL); + I_Assert(player->mo != NULL); + I_Assert(!P_MobjWasRemoved(player->mo)); + + if (player->drift != 0) + travelangle = player->mo->angle; + else + travelangle = K_MomentumAngle(player->mo); + + for (j = 0; j < CLAMP(player->airdroptime, 0, 3); j++) + { + for (i = 0; i < 2; i++) + { + tx = P_ReturnThrustX(player->mo, travelangle, FixedMul((-12*FRACUNIT)*(j), player->mo->scale)); + ty = P_ReturnThrustY(player->mo, travelangle, FixedMul((-12*FRACUNIT)*(j), player->mo->scale)); + tz = player->mo->momz * j; + + newx = player->mo->x + P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(24*FRACUNIT, player->mo->scale)) + tx; + newy = player->mo->y + P_ReturnThrustY(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(24*FRACUNIT, player->mo->scale)) + ty; + + dust = P_SpawnMobj(newx, newy, player->mo->z-(tz/4), MT_AIRDROPDUST); + + P_SetTarget(&dust->target, player->mo); + dust->angle = travelangle; + dust->fuse = 2*TICRATE; + dust->destscale = player->mo->scale; + P_SetScale(dust, player->mo->scale); + K_FlipFromObject(dust, player->mo); + + dust->momx = 8; + } + } +} + static void K_SpawnFallLines(player_t *player, boolean ringdrop) { fixed_t rand_x; @@ -6900,6 +6942,7 @@ static void K_AirDrop(player_t *player, ticcmd_t *cmd) } K_SpawnFallLines(player, player->ringdrop); + K_SpawnAirdropTrail(player); player->mo->momz -= FixedMul(gravity, mapobjectscale)*P_MobjFlip(player->mo); } }