From bc4832aa40d20838e92286f4b10f632cc6152de8 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Wed, 30 Jan 2019 14:14:24 -0500 Subject: [PATCH 01/10] Slower orbit, always have 1 orbit item deploy behind you, and higher gravity for Orbinaut/Jawz --- src/info.c | 4 ++-- src/k_kart.c | 6 +++--- src/p_mobj.c | 9 ++++++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/info.c b/src/info.c index ea9eac9d..ccdfa3cf 100644 --- a/src/info.c +++ b/src/info.c @@ -15449,7 +15449,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_ORBINAUT_SHIELDDEAD, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound - 10*FRACUNIT, // speed + 4*FRACUNIT, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset @@ -15530,7 +15530,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_JAWZ_DEAD1, // deathstate S_JAWZ_DEAD2, // xdeathstate sfx_None, // deathsound - 10*FRACUNIT, // speed + 4*FRACUNIT, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset diff --git a/src/k_kart.c b/src/k_kart.c index dbc9b740..9d3a12c5 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3646,7 +3646,7 @@ static void K_MoveHeldObjects(player_t *player) cur->angle += FixedAngle(cur->info->speed); if (cur->extravalue1 < radius) - cur->extravalue1 += FixedMul(P_AproxDistance(cur->extravalue1, radius), FRACUNIT/12); + cur->extravalue1 += P_AproxDistance(cur->extravalue1, radius) / 12; if (cur->extravalue1 > radius) cur->extravalue1 = radius; @@ -5109,7 +5109,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++) { - newangle = FixedAngle(((360/player->kartstuff[k_itemamount])*moloop)*FRACUNIT) + ANGLE_90; + newangle = (player->mo->angle + ANGLE_157h) + FixedAngle(((360 / player->kartstuff[k_itemamount]) * moloop) << FRACBITS) + ANGLE_90; mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_ORBINAUT_SHIELD); if (!mo) { @@ -5150,7 +5150,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++) { - newangle = FixedAngle(((360/player->kartstuff[k_itemamount])*moloop)*FRACUNIT) + ANGLE_90; + newangle = (player->mo->angle + ANGLE_157h) + FixedAngle(((360 / player->kartstuff[k_itemamount]) * moloop) << FRACBITS) + ANGLE_90; mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_JAWZ_SHIELD); if (!mo) { diff --git a/src/p_mobj.c b/src/p_mobj.c index d380b97a..ed53f647 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1354,7 +1354,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) if (wasflip == !(mo->eflags & MFE_VERTICALFLIP)) // note!! == ! is not equivalent to != here - turns numeric into bool this way P_PlayerFlip(mo); if (mo->player->kartstuff[k_pogospring]) - gravityadd = FixedMul(gravityadd, 5*FRACUNIT/2); + gravityadd = (5*gravityadd)/2; } else { @@ -1404,11 +1404,14 @@ fixed_t P_GetMobjGravity(mobj_t *mo) break; case MT_BANANA: case MT_EGGMANITEM: + case MT_ORBINAUT: + case MT_JAWZ: + case MT_JAWZ_DUD: case MT_SSMINE: - gravityadd = FixedMul(gravityadd, 5*FRACUNIT/2); + gravityadd = (5*gravityadd)/2; break; case MT_SINK: - gravityadd = FixedMul(gravityadd, 5*FRACUNIT); // Double gravity + gravityadd = (5*gravityadd); // Double gravity break; case MT_SIGN: gravityadd /= 8; From a81546177d9c1906707ecd4dc0d9921d96676d9d Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Wed, 30 Jan 2019 14:24:04 -0500 Subject: [PATCH 02/10] Speed updates based on number of orbiting items --- src/k_kart.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 9d3a12c5..a9e1f9be 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3626,6 +3626,7 @@ static void K_MoveHeldObjects(player_t *player) case MT_JAWZ_SHIELD: { mobj_t *cur = player->mo->hnext; + fixed_t speed = ((8 - min(4, player->kartstuff[k_itemamount])) * cur->info->speed) / 7; player->kartstuff[k_bananadrag] = 0; // Just to make sure @@ -3643,7 +3644,7 @@ static void K_MoveHeldObjects(player_t *player) cur->color = player->skincolor; cur->angle -= ANGLE_90; - cur->angle += FixedAngle(cur->info->speed); + cur->angle += FixedAngle(speed); if (cur->extravalue1 < radius) cur->extravalue1 += P_AproxDistance(cur->extravalue1, radius) / 12; From 9d51ef8e82848b93f750a8f93c53425ed9cce28c Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Wed, 30 Jan 2019 14:42:24 -0500 Subject: [PATCH 03/10] Play hit confirm sound for shields --- src/p_map.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index 051a1e6f..41e5a455 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -752,9 +752,7 @@ static boolean PIT_CheckThing(mobj_t *thing) // Player Damage P_DamageMobj(thing, tmthing, tmthing->target, 1); K_KartBouncing(thing, tmthing, false, false); - - if (tmthing->type == MT_ORBINAUT || tmthing->type == MT_JAWZ || tmthing->type == MT_JAWZ_DUD) - S_StartSound(thing, sfx_s3k7b); + S_StartSound(thing, sfx_s3k7b); // This Item Damage if (tmthing->eflags & MFE_VERTICALFLIP) @@ -1035,9 +1033,7 @@ static boolean PIT_CheckThing(mobj_t *thing) // Player Damage P_DamageMobj(tmthing, thing, thing->target, 1); K_KartBouncing(tmthing, thing, false, false); - - if (thing->type == MT_ORBINAUT || thing->type == MT_JAWZ || thing->type == MT_JAWZ_DUD) - S_StartSound(tmthing, sfx_s3k7b); + S_StartSound(tmthing, sfx_s3k7b); // Other Item Damage if (thing->eflags & MFE_VERTICALFLIP) From a3cd1310171ac68472b23a636c669902445eabfc Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Wed, 30 Jan 2019 15:02:24 -0500 Subject: [PATCH 04/10] Don't bump while flashing --- src/k_kart.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index a9e1f9be..d09e3b60 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1068,6 +1068,21 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid) || (mobj2->player && mobj2->player->kartstuff[k_respawn])) return; + // Don't bump if you're flashing + if (mobj1->player && mobj1->player->powers[pw_flashing] > 0 + && mobj1->player->powers[pw_flashing] < K_GetKartFlashing(mobj1->player)-1) + { + mobj1->player->powers[pw_flashing]++; + return; + } + + if (mobj2->player && mobj2->player->powers[pw_flashing] > 0 + && mobj2->player->powers[pw_flashing] < K_GetKartFlashing(mobj2->player)-1) + { + mobj2->player->powers[pw_flashing]++; + return; + } + // Don't bump if you've recently bumped if (mobj1->player && mobj1->player->kartstuff[k_justbumped]) { From 3cb468aec8ba403be14c445736a680ebc159b3bb Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Wed, 30 Jan 2019 15:39:29 -0500 Subject: [PATCH 05/10] Add delay to Jawz target switching, set Jawz target when fired --- src/d_player.h | 3 ++- src/dehacked.c | 3 ++- src/k_kart.c | 28 +++++++++++++++++++++++++--- src/p_enemy.c | 4 ++-- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 27fdef8d..5ce9066b 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -348,10 +348,11 @@ typedef enum k_wanted, // Timer for determining WANTED status, lowers when hitting people, prevents the game turning into Camp Lazlo k_yougotem, // "You Got Em" gfx when hitting someone as a karma player via a method that gets you back in the game instantly - // v1.0.2 vars + // v1.0.2+ vars k_itemblink, // Item flashing after roulette, prevents Hyudoro stealing AND serves as a mashing indicator k_itemblinkmode, // Type of flashing: 0 = white (normal), 1 = red (mashing), 2 = rainbow (enhanced items) k_getsparks, // Disable drift sparks at low speed, JUST enough to give acceleration the actual headstart above speed + k_jawztargetdelay, // Delay for Jawz target switching, to make it less twitchy NUMKARTSTUFF } kartstufftype_t; diff --git a/src/dehacked.c b/src/dehacked.c index 0ad67ff0..b03530a4 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -8333,7 +8333,8 @@ static const char *const KARTSTUFF_LIST[] = { "ITEMBLINK", "ITEMBLINKMODE", - "GETSPARKS" + "GETSPARKS", + "JAWZTARGETDELAY" }; static const char *const HUDITEMS_LIST[] = { diff --git a/src/k_kart.c b/src/k_kart.c index d09e3b60..f2490c9b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2517,7 +2517,17 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I break; case MT_JAWZ: if (source && source->player) + { + INT32 lasttarg = source->player->kartstuff[k_lastjawztarget]; th->cvmem = source->player->skincolor; + if ((lasttarg >= 0 && lasttarg < MAXPLAYERS) + && playeringame[lasttarg] + && !players[lasttarg].spectator + && players[lasttarg].mo) + { + P_SetTarget(&th->tracer, players[lasttarg].mo); + } + } else th->cvmem = SKINCOLOR_KETCHUP; /* FALLTHRU */ @@ -4454,12 +4464,22 @@ void K_KartPlayerAfterThink(player_t *player) // Jawz reticule (seeking) if (player->kartstuff[k_itemtype] == KITEM_JAWZ && player->kartstuff[k_itemheld]) { - player_t *targ = K_FindJawzTarget(player->mo, player); + INT32 lasttarg = player->kartstuff[k_lastjawztarget]; + player_t *targ; mobj_t *ret; - if (!targ) + if (player->kartstuff[k_jawztargetdelay] && playeringame[lasttarg] && !players[lasttarg].spectator) + { + targ = &players[lasttarg]; + player->kartstuff[k_jawztargetdelay]--; + } + else + targ = K_FindJawzTarget(player->mo, player); + + if (!targ || !targ->mo || P_MobjWasRemoved(targ->mo)) { player->kartstuff[k_lastjawztarget] = -1; + player->kartstuff[k_jawztargetdelay] = 0; return; } @@ -4469,7 +4489,7 @@ void K_KartPlayerAfterThink(player_t *player) ret->tics = 1; ret->color = player->skincolor; - if (targ-players != player->kartstuff[k_lastjawztarget]) + if (targ-players != lasttarg) { if (P_IsLocalPlayer(player) || P_IsLocalPlayer(targ)) S_StartSound(NULL, sfx_s3k89); @@ -4477,11 +4497,13 @@ void K_KartPlayerAfterThink(player_t *player) S_StartSound(targ->mo, sfx_s3k89); player->kartstuff[k_lastjawztarget] = targ-players; + player->kartstuff[k_jawztargetdelay] = 5; } } else { player->kartstuff[k_lastjawztarget] = -1; + player->kartstuff[k_jawztargetdelay] = 0; } } diff --git a/src/p_enemy.c b/src/p_enemy.c index 8a6d7597..9d3aa951 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8264,8 +8264,8 @@ void A_JawzChase(mobj_t *actor) if (actor->tracer) { - if (G_RaceGametype()) // Stop looking after first target in race - actor->extravalue1 = 1; + /*if (G_RaceGametype()) // Stop looking after first target in race + actor->extravalue1 = 1;*/ if (actor->tracer->health) { From f3644505bebfe07041ddd19495f37c51a0457e04 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Wed, 30 Jan 2019 15:41:15 -0500 Subject: [PATCH 06/10] Increase target cone for Race --- src/k_kart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index f2490c9b..426ce2f6 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3932,7 +3932,7 @@ player_t *K_FindJawzTarget(mobj_t *actor, player_t *source) if (thisang > ANGLE_180) thisang = InvAngle(thisang); - if (thisang > ANGLE_45) // Don't go for people who are behind you + if (thisang > (G_RaceGametype() ? ANGLE_67h : ANGLE_45)) // Don't go for people who are behind you continue; // Jawz only go after the person directly ahead of you in race... sort of literally now! From 9984f0e217e632d3fcb6eb6e29e4fc9a753b880c Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Wed, 30 Jan 2019 15:43:45 -0500 Subject: [PATCH 07/10] Reorganize these checks --- src/k_kart.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 426ce2f6..9a8adb22 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3932,13 +3932,14 @@ player_t *K_FindJawzTarget(mobj_t *actor, player_t *source) if (thisang > ANGLE_180) thisang = InvAngle(thisang); - if (thisang > (G_RaceGametype() ? ANGLE_67h : ANGLE_45)) // Don't go for people who are behind you - continue; - // Jawz only go after the person directly ahead of you in race... sort of literally now! if (G_RaceGametype()) { - if (player->kartstuff[k_position] >= source->kartstuff[k_position]) // Don't pay attention to people behind you + // Don't go for people who are behind you + if (thisang > ANGLE_67h) + continue; + // Don't pay attention to people who aren't above your position + if (player->kartstuff[k_position] >= source->kartstuff[k_position]) continue; if ((best == -1) || (player->kartstuff[k_position] > best)) { @@ -3951,6 +3952,11 @@ player_t *K_FindJawzTarget(mobj_t *actor, player_t *source) fixed_t thisdist; fixed_t thisavg; + // Don't go for people who are behind you + if (thisang > ANGLE_45) + continue; + + // Don't pay attention to dead players if (player->kartstuff[k_bumper] <= 0) continue; From 34b027e8ba7457f595b685c695572a48f180e347 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Wed, 30 Jan 2019 15:57:46 -0500 Subject: [PATCH 08/10] Shift around flashing bump stuff --- src/k_kart.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 9a8adb22..850b703a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1068,19 +1068,24 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid) || (mobj2->player && mobj2->player->kartstuff[k_respawn])) return; - // Don't bump if you're flashing - if (mobj1->player && mobj1->player->powers[pw_flashing] > 0 - && mobj1->player->powers[pw_flashing] < K_GetKartFlashing(mobj1->player)-1) - { - mobj1->player->powers[pw_flashing]++; - return; - } + { // Don't bump if you're flashing + INT32 flash; - if (mobj2->player && mobj2->player->powers[pw_flashing] > 0 - && mobj2->player->powers[pw_flashing] < K_GetKartFlashing(mobj2->player)-1) - { - mobj2->player->powers[pw_flashing]++; - return; + flash = K_GetKartFlashing(mobj1->player); + if (mobj1->player && mobj1->player->powers[pw_flashing] > 0 && mobj1->player->powers[pw_flashing] < flash) + { + if (mobj1->player->powers[pw_flashing] < flash-1) + mobj1->player->powers[pw_flashing]++; + return; + } + + flash = K_GetKartFlashing(mobj2->player); + if (mobj2->player && mobj2->player->powers[pw_flashing] > 0 && mobj2->player->powers[pw_flashing] < flash) + { + if (mobj2->player->powers[pw_flashing] < flash-1) + mobj2->player->powers[pw_flashing]++; + return; + } } // Don't bump if you've recently bumped From 6a14d79cf01d2961f5d600d48857492e57fd8373 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sat, 2 Feb 2019 00:58:51 -0500 Subject: [PATCH 09/10] Offroad spark fix & sink --- src/k_kart.c | 10 ++++------ src/p_mobj.c | 4 +--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 850b703a..aa6a0cc3 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1637,10 +1637,8 @@ static void K_GetKartBoostPower(player_t *player) && player->kartstuff[k_offroad] >= 0) boostpower = FixedDiv(boostpower, player->kartstuff[k_offroad] + FRACUNIT); - if (player->kartstuff[k_itemtype] == KITEM_KITCHENSINK) - boostpower = max((TICRATE/2), (5*TICRATE)-(player->kartstuff[k_bananadrag]/2))*boostpower/(5*TICRATE); - else if (player->kartstuff[k_bananadrag] > TICRATE) - boostpower = 4*boostpower/5; + if (player->kartstuff[k_bananadrag] > TICRATE) + boostpower = (4*boostpower)/5; // Banana drag/offroad dust if (boostpower < FRACUNIT @@ -4716,9 +4714,9 @@ static void K_KartDrift(player_t *player, boolean onground) } // Disable drift-sparks until you're going fast enough - if (player->kartstuff[k_getsparks] == 0) + if (player->kartstuff[k_getsparks] == 0 || player->kartstuff[k_offroad]) driftadditive = 0; - if (player->speed > minspeed*2 && !player->kartstuff[k_offroad]) + if (player->speed > minspeed*2) player->kartstuff[k_getsparks] = 1; // This spawns the drift sparks diff --git a/src/p_mobj.c b/src/p_mobj.c index ed53f647..746fc1af 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1408,10 +1408,8 @@ fixed_t P_GetMobjGravity(mobj_t *mo) case MT_JAWZ: case MT_JAWZ_DUD: case MT_SSMINE: - gravityadd = (5*gravityadd)/2; - break; case MT_SINK: - gravityadd = (5*gravityadd); // Double gravity + gravityadd = (5*gravityadd)/2; break; case MT_SIGN: gravityadd /= 8; From d9f16d2aaf4249a30b0771a05051f2aecf39473c Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sat, 2 Feb 2019 01:43:32 -0500 Subject: [PATCH 10/10] Offroad code cleanup --- src/k_kart.c | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index aa6a0cc3..5a45d5ff 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1239,9 +1239,8 @@ static UINT8 K_CheckOffroadCollide(mobj_t *mo, sector_t *sec) for (i = 2; i < 5; i++) { if ((sec2 && GETSECSPECIAL(sec2->special, 1) == i) - || (P_IsObjectOnRealGround(mo, sec) - && GETSECSPECIAL(sec->special, 1) == i)) - return i; + || (P_IsObjectOnRealGround(mo, sec) && GETSECSPECIAL(sec->special, 1) == i)) + return i-1; } return 0; @@ -1258,19 +1257,9 @@ static void K_UpdateOffroad(player_t *player) fixed_t offroad; sector_t *nextsector = R_PointInSubsector( player->mo->x + player->mo->momx*2, player->mo->y + player->mo->momy*2)->sector; + UINT8 offroadstrength = K_CheckOffroadCollide(player->mo, nextsector); - fixed_t offroadstrength = 0; - - if (K_CheckOffroadCollide(player->mo, nextsector) == 2) // Weak Offroad - offroadstrength = 1; - else if (K_CheckOffroadCollide(player->mo, nextsector) == 3) // Mid Offroad - offroadstrength = 2; - else if (K_CheckOffroadCollide(player->mo, nextsector) == 4) // Strong Offroad - offroadstrength = 3; - - // If you are offroad, a timer starts. Depending on your weight value, the timer increments differently. - //if ((nextsector->special & 256) && nextsector->special != 768 - // && nextsector->special != 1024 && nextsector->special != 4864) + // If you are in offroad, a timer starts. if (offroadstrength) { if (K_CheckOffroadCollide(player->mo, player->mo->subsector->sector) && player->kartstuff[k_offroad] == 0) @@ -1278,7 +1267,7 @@ static void K_UpdateOffroad(player_t *player) if (player->kartstuff[k_offroad] > 0) { - offroad = (FRACUNIT * offroadstrength) / (TICRATE/2); + offroad = (offroadstrength << FRACBITS) / (TICRATE/2); //if (player->kartstuff[k_growshrinktimer] > 1) // grow slows down half as fast // offroad /= 2; @@ -1286,8 +1275,8 @@ static void K_UpdateOffroad(player_t *player) player->kartstuff[k_offroad] += offroad; } - if (player->kartstuff[k_offroad] > FRACUNIT*offroadstrength) - player->kartstuff[k_offroad] = FRACUNIT*offroadstrength; + if (player->kartstuff[k_offroad] > (offroadstrength << FRACBITS)) + player->kartstuff[k_offroad] = (offroadstrength << FRACBITS); } else player->kartstuff[k_offroad] = 0;