From 83c4017993eb3597e13e854d402fcd4652c6c8a7 Mon Sep 17 00:00:00 2001 From: James Date: Mon, 21 Oct 2019 08:35:17 -0400 Subject: [PATCH 01/27] Another round of small color tweaks --- src/d_main.c | 2 +- src/dehacked.c | 6 +++--- src/doomdef.h | 6 +++--- src/g_game.c | 2 +- src/hu_stuff.c | 6 +++--- src/k_kart.c | 22 +++++++++++----------- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 597eea87c..b5d4245a3 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -525,7 +525,7 @@ static void D_Display(void) } if (demo.rewinding) - V_DrawFadeScreen(TC_RAINBOW, (leveltime & 0x20) ? SKINCOLOR_PASTEL : SKINCOLOR_MOONSLAM); + V_DrawFadeScreen(TC_RAINBOW, (leveltime & 0x20) ? SKINCOLOR_PASTEL : SKINCOLOR_MOONSET); // vid size change is now finished if it was on... vid.recalc = 0; diff --git a/src/dehacked.c b/src/dehacked.c index 5f9249d89..93ff13b73 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -8242,7 +8242,7 @@ static const char *COLOR_ENUMS[] = { // Rejigged for Kart. "SCARLET", // SKINCOLOR_SCARLET "KETCHUP", // SKINCOLOR_KETCHUP "DAWN", // SKINCOLOR_DAWN - "SUNSET", // SKINCOLOR_SUNSET + "SUNSLAM", // SKINCOLOR_SUNSLAM "CREAMSICLE", // SKINCOLOR_CREAMSICLE "ORANGE", // SKINCOLOR_ORANGE "ROSEWOOD", // SKINCOLOR_ROSEWOOD @@ -8302,9 +8302,9 @@ static const char *COLOR_ENUMS[] = { // Rejigged for Kart. "THISTLE", // SKINCOLOR_THISTLE "PURPLE", // SKINCOLOR_PURPLE "PASTEL", // SKINCOLOR_PASTEL - "MOONSLAM", // SKINCOLOR_MOONSLAM + "MOONSET", // SKINCOLOR_MOONSET "DUSK", // SKINCOLOR_DUSK - "BUBBLEGUM", // SKINCOLOR_BUBBLEGUM + "VIOLET", // SKINCOLOR_VIOLET "MAGENTA", // SKINCOLOR_MAGENTA "FUCHSIA", // SKINCOLOR_FUCHSIA "TOXIC", // SKINCOLOR_TOXIC diff --git a/src/doomdef.h b/src/doomdef.h index e1e9ab13d..bb21e3d0f 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -280,7 +280,7 @@ typedef enum SKINCOLOR_SCARLET, SKINCOLOR_KETCHUP, SKINCOLOR_DAWN, - SKINCOLOR_SUNSET, + SKINCOLOR_SUNSLAM, SKINCOLOR_CREAMSICLE, SKINCOLOR_ORANGE, SKINCOLOR_ROSEWOOD, @@ -340,9 +340,9 @@ typedef enum SKINCOLOR_THISTLE, SKINCOLOR_PURPLE, SKINCOLOR_PASTEL, - SKINCOLOR_MOONSLAM, + SKINCOLOR_MOONSET, SKINCOLOR_DUSK, - SKINCOLOR_BUBBLEGUM, + SKINCOLOR_VIOLET, SKINCOLOR_MAGENTA, SKINCOLOR_FUCHSIA, SKINCOLOR_TOXIC, diff --git a/src/g_game.c b/src/g_game.c index d5ed9af7d..7cdb57410 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -6926,7 +6926,7 @@ void G_LoadDemoInfo(menudemo_t *pdemo) (void)extrainfo_p; sprintf(pdemo->winnername, "transrights420"); pdemo->winnerskin = 1; - pdemo->winnercolor = SKINCOLOR_MOONSLAM; + pdemo->winnercolor = SKINCOLOR_MOONSET; pdemo->winnertime = 6666;*/ // Read standings! diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 6126f7bec..3ebf3ee29 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -812,7 +812,6 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum) case SKINCOLOR_PINK: case SKINCOLOR_ROSE: case SKINCOLOR_LEMONADE: - case SKINCOLOR_BUBBLEGUM: case SKINCOLOR_LILAC: case SKINCOLOR_TAFFY: cstart = "\x8d"; // V_PINKMAP @@ -828,7 +827,7 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum) cstart = "\x85"; // V_REDMAP break; case SKINCOLOR_DAWN: - case SKINCOLOR_SUNSET: + case SKINCOLOR_SUNSLAM: case SKINCOLOR_CREAMSICLE: case SKINCOLOR_ORANGE: case SKINCOLOR_ROSEWOOD: @@ -906,7 +905,8 @@ static void Got_Saycmd(UINT8 **p, INT32 playernum) break; case SKINCOLOR_MAGENTA: case SKINCOLOR_FUCHSIA: - case SKINCOLOR_MOONSLAM: + case SKINCOLOR_MOONSET: + case SKINCOLOR_VIOLET: cstart = "\x8c"; // V_MAGENTAMAP break; case SKINCOLOR_DUSK: diff --git a/src/k_kart.c b/src/k_kart.c index 230662d2a..335f3cfeb 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -71,7 +71,7 @@ const char *KartColor_Names[MAXSKINCOLORS] = "Scarlet", // SKINCOLOR_SCARLET "Ketchup", // SKINCOLOR_KETCHUP "Dawn", // SKINCOLOR_DAWN - "Sunset", // SKINCOLOR_SUNSET + "Sunslam", // SKINCOLOR_SUNSLAM "Creamsicle", // SKINCOLOR_CREAMSICLE "Orange", // SKINCOLOR_ORANGE "Rosewood", // SKINCOLOR_ROSEWOOD @@ -131,9 +131,9 @@ const char *KartColor_Names[MAXSKINCOLORS] = "Thistle", // SKINCOLOR_THISTLE "Purple", // SKINCOLOR_PURPLE "Pastel", // SKINCOLOR_PASTEL - "Moonslam", // SKINCOLOR_MOONSLAM + "Moonset", // SKINCOLOR_MOONSET "Dusk", // SKINCOLOR_DUSK - "Bubblegum", // SKINCOLOR_BUBBLEGUM + "Violet", // SKINCOLOR_VIOLET "Magenta", // SKINCOLOR_MAGENTA "Fuchsia", // SKINCOLOR_FUCHSIA "Toxic", // SKINCOLOR_TOXIC @@ -177,7 +177,7 @@ const UINT8 KartColor_Opposite[MAXSKINCOLORS*2] = SKINCOLOR_ALGAE,10, // SKINCOLOR_SCARLET SKINCOLOR_MUSTARD,10, // SKINCOLOR_KETCHUP SKINCOLOR_DUSK,8, // SKINCOLOR_DAWN - SKINCOLOR_MOONSLAM,8, // SKINCOLOR_SUNSET + SKINCOLOR_MOONSET,8, // SKINCOLOR_SUNSLAM SKINCOLOR_PERIWINKLE,8, // SKINCOLOR_CREAMSICLE SKINCOLOR_BLUE,8, // SKINCOLOR_ORANGE SKINCOLOR_BLUEBERRY,6, // SKINCOLOR_ROSEWOOD @@ -192,7 +192,7 @@ const UINT8 KartColor_Opposite[MAXSKINCOLORS*2] = SKINCOLOR_KETCHUP,8, // SKINCOLOR_MUSTARD SKINCOLOR_EMERALD,8, // SKINCOLOR_BANANA SKINCOLOR_TEAL,8, // SKINCOLOR_OLIVE - SKINCOLOR_BUBBLEGUM,8, // SKINCOLOR_CROCODILE + SKINCOLOR_VIOLET,8, // SKINCOLOR_CROCODILE SKINCOLOR_NAVY,6, // SKINCOLOR_PERIDOT SKINCOLOR_ROBOHOOD,8, // SKINCOLOR_VOMIT SKINCOLOR_LAVENDER,6, // SKINCOLOR_GARDEN @@ -237,9 +237,9 @@ const UINT8 KartColor_Opposite[MAXSKINCOLORS*2] = SKINCOLOR_AZURE,8, // SKINCOLOR_THISTLE SKINCOLOR_CARIBBEAN,10, // SKINCOLOR_PURPLE SKINCOLOR_FUCHSIA,11, // SKINCOLOR_PASTEL - SKINCOLOR_SUNSET,10, // SKINCOLOR_MOONSLAM + SKINCOLOR_SUNSLAM,10, // SKINCOLOR_MOONSET SKINCOLOR_DAWN,6, // SKINCOLOR_DUSK - SKINCOLOR_CROCODILE,8, // SKINCOLOR_BUBBLEGUM + SKINCOLOR_CROCODILE,8, // SKINCOLOR_VIOLET SKINCOLOR_TURTLE,8, // SKINCOLOR_MAGENTA SKINCOLOR_PASTEL,11, // SKINCOLOR_FUCHSIA SKINCOLOR_MAROON,8, // SKINCOLOR_TOXIC @@ -258,7 +258,7 @@ UINT8 colortranslations[MAXTRANSLATIONS][16] = { { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31}, // SKINCOLOR_GREY { 3, 5, 8, 11, 15, 17, 19, 21, 23, 24, 25, 26, 27, 29, 30, 31}, // SKINCOLOR_NICKEL { 4, 7, 11, 15, 20, 22, 24, 27, 28, 28, 28, 29, 29, 30, 30, 31}, // SKINCOLOR_BLACK - { 0, 1, 208, 208, 209, 210, 10, 14, 16, 18, 20, 22, 24, 26, 28, 31}, // SKINCOLOR_FAIRY + { 0, 0, 252, 252, 200, 201, 211, 14, 16, 18, 20, 22, 24, 26, 28, 31}, // SKINCOLOR_FAIRY { 0, 80, 80, 81, 82, 218, 240, 11, 13, 16, 18, 21, 23, 26, 28, 31}, // SKINCOLOR_POPCORN { 80, 88, 89, 98, 99, 91, 12, 14, 16, 18, 20, 22, 24, 26, 28, 31}, // SKINCOLOR_ARTICHOKE { 0, 128, 129, 130, 146, 170, 14, 15, 17, 19, 21, 23, 25, 27, 29, 31}, // SKINCOLOR_PIGEON @@ -281,7 +281,7 @@ UINT8 colortranslations[MAXTRANSLATIONS][16] = { { 48, 49, 50, 51, 53, 34, 36, 38, 184, 185, 168, 168, 169, 169, 254, 31}, // SKINCOLOR_SCARLET { 72, 73, 64, 51, 52, 54, 34, 36, 38, 40, 42, 43, 44, 71, 46, 47}, // SKINCOLOR_KETCHUP { 0, 208, 216, 209, 210, 211, 212, 57, 58, 59, 60, 61, 63, 71, 47, 31}, // SKINCOLOR_DAWN - { 82, 72, 73, 64, 51, 53, 55, 213, 214, 195, 195, 173, 174, 175, 253, 254}, // SKINCOLOR_SUNSET + { 82, 72, 73, 64, 51, 53, 55, 213, 214, 195, 195, 173, 174, 175, 253, 254}, // SKINCOLOR_SUNSLAM { 0, 0, 208, 208, 48, 49, 50, 52, 53, 54, 56, 57, 58, 60, 61, 63}, // SKINCOLOR_CREAMSICLE {208, 48, 49, 50, 51, 52, 53, 54, 55, 57, 59, 60, 62, 44, 71, 47}, // SKINCOLOR_ORANGE { 50, 52, 55, 56, 58, 59, 60, 61, 62, 63, 44, 45, 71, 46, 47, 30}, // SKINCOLOR_ROSEWOOD @@ -341,9 +341,9 @@ UINT8 colortranslations[MAXTRANSLATIONS][16] = { { 0, 0, 0, 252, 252, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 254}, // SKINCOLOR_THISTLE { 0, 252, 160, 161, 162, 163, 164, 165, 166, 167, 168, 168, 169, 169, 253, 254}, // SKINCOLOR_PURPLE { 0, 128, 128, 129, 129, 146, 170, 162, 163, 164, 165, 166, 167, 168, 169, 254}, // SKINCOLOR_PASTEL - { 0, 144, 145, 146, 170, 162, 163, 184, 184, 207, 207, 44, 45, 46, 47, 31}, // SKINCOLOR_MOONSLAM + { 0, 144, 145, 146, 170, 162, 163, 184, 184, 207, 207, 44, 45, 46, 47, 31}, // SKINCOLOR_MOONSET {252, 200, 201, 192, 193, 194, 172, 172, 173, 173, 174, 174, 175, 169, 253, 254}, // SKINCOLOR_DUSK - { 0, 252, 252, 200, 201, 181, 182, 183, 184, 166, 167, 168, 169, 253, 254, 31}, // SKINCOLOR_BUBBLEGUM + {176, 177, 178, 179, 180, 181, 182, 183, 184, 164, 165, 166, 167, 168, 169, 254}, // SKINCOLOR_VIOLET {176, 177, 178, 179, 180, 181, 182, 183, 184, 184, 185, 185, 186, 187, 30, 31}, // SKINCOLOR_MAGENTA {208, 209, 209, 32, 33, 182, 183, 184, 185, 185, 186, 186, 187, 253, 254, 31}, // SKINCOLOR_FUCHSIA { 0, 0, 88, 88, 89, 6, 8, 10, 193, 194, 195, 184, 185, 186, 187, 31}, // SKINCOLOR_TOXIC From 7174b707a178e9ec1a2abc57ac686e34fcae96c4 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 8 Mar 2020 00:39:21 -0500 Subject: [PATCH 02/27] Draw distance uses object scale --- src/hardware/hw_main.c | 4 ++-- src/r_main.c | 2 +- src/r_things.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 6ccaf1bc5..73e65cceb 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5357,7 +5357,7 @@ static void HWR_AddSprites(sector_t *sec) // Handle all things in sector. // If a limit exists, handle things a tiny bit different. - if ((limit_dist = (fixed_t)(/*(maptol & TOL_NIGHTS) ? cv_drawdist_nights.value : */cv_drawdist.value) << FRACBITS)) + if ((limit_dist = (fixed_t)(cv_drawdist.value) * mapobjectscale)) { for (thing = sec->thinglist; thing; thing = thing->snext) { @@ -5424,7 +5424,7 @@ static void HWR_AddSprites(sector_t *sec) #ifdef HWPRECIP // No to infinite precipitation draw distance. - if ((limit_dist = (fixed_t)cv_drawdist_precip.value << FRACBITS)) + if ((limit_dist = (fixed_t)(cv_drawdist_precip.value) * mapobjectscale)) { for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext) { diff --git a/src/r_main.c b/src/r_main.c index a4fa9d463..13fce289e 100644 --- a/src/r_main.c +++ b/src/r_main.c @@ -176,7 +176,7 @@ consvar_t cv_showhud = {"showhud", "Yes", CV_CALL, CV_YesNo, R_SetViewSize, 0, consvar_t cv_translucenthud = {"translucenthud", "10", CV_SAVE, translucenthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_translucency = {"translucency", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_drawdist = {"drawdist", "Infinite", CV_SAVE, drawdist_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_drawdist = {"drawdist", "8192", CV_SAVE, drawdist_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; //consvar_t cv_drawdist_nights = {"drawdist_nights", "2048", CV_SAVE, drawdist_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_drawdist_precip = {"drawdist_precip", "1024", CV_SAVE, drawdist_precip_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; //consvar_t cv_precipdensity = {"precipdensity", "Moderate", CV_SAVE, precipdensity_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; diff --git a/src/r_things.c b/src/r_things.c index 9ea8bb77b..4b7339c4e 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -2102,7 +2102,7 @@ void R_AddSprites(sector_t *sec, INT32 lightlevel) // Handle all things in sector. // If a limit exists, handle things a tiny bit different. - if ((limit_dist = (fixed_t)(/*(maptol & TOL_NIGHTS) ? cv_drawdist_nights.value : */cv_drawdist.value) << FRACBITS)) + if ((limit_dist = (fixed_t)(cv_drawdist.value) * mapobjectscale)) { for (thing = sec->thinglist; thing; thing = thing->snext) { @@ -2168,7 +2168,7 @@ void R_AddSprites(sector_t *sec, INT32 lightlevel) } // no, no infinite draw distance for precipitation. this option at zero is supposed to turn it off - if ((limit_dist = (fixed_t)cv_drawdist_precip.value << FRACBITS)) + if ((limit_dist = (fixed_t)(cv_drawdist_precip.value) * mapobjectscale)) { for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext) { From fecb2cdebdfae7c43df21208d794fa380ea7edb1 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 8 Mar 2020 00:48:56 -0500 Subject: [PATCH 03/27] Fix item lobbing in mobjscale maps This happened when I was trying to fix several mobjscale issues at once for v1 -- I either didn't notice the P_SetObjectMomZ, or didn't realize that this function already handles scale changes for you. --- 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 64320fb68..b3f4a848e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3658,7 +3658,7 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map if (mo) { angle_t fa = player->mo->angle>>ANGLETOFINESHIFT; - fixed_t HEIGHT = (20 + (dir*10))*mapobjectscale + (player->mo->momz*P_MobjFlip(player->mo)); + fixed_t HEIGHT = (20 + (dir*10))*FRACUNIT + (player->mo->momz*P_MobjFlip(player->mo)); P_SetObjectMomZ(mo, HEIGHT, false); mo->momx = player->mo->momx + FixedMul(FINECOSINE(fa), PROJSPEED*dir); From 8c1aec37137184074d753b5a570749d5b8830198 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 8 Mar 2020 01:12:53 -0500 Subject: [PATCH 04/27] Fix springs having weird launch speeds in mobjscale maps Same issue as lobbing -- scale being double-applied --- src/p_map.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index 9e34e04d9..5a9f4b8c3 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -118,8 +118,8 @@ boolean P_TeleportMove(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z) boolean P_DoSpring(mobj_t *spring, mobj_t *object) { //INT32 pflags; - const fixed_t hscale = mapobjectscale + (mapobjectscale - object->scale); - const fixed_t vscale = mapobjectscale + (object->scale - mapobjectscale); + const fixed_t hscale = FRACUNIT + (FRACUNIT - object->scale); + const fixed_t vscale = FRACUNIT + (object->scale - FRACUNIT); fixed_t vertispeed = spring->info->mass; fixed_t horizspeed = spring->info->damage; UINT8 starcolor = (spring->info->painchance % MAXTRANSLATIONS); From b4933bacb3ae58b096dae11d4afdb09288f33637 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 8 Mar 2020 01:37:48 -0500 Subject: [PATCH 05/27] Didn't work, let's try this objectSpeed was getting scaled with the spring's size, when only the spring's base speed should be scaled --- src/p_map.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index 5a9f4b8c3..a732dc551 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -118,8 +118,8 @@ boolean P_TeleportMove(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z) boolean P_DoSpring(mobj_t *spring, mobj_t *object) { //INT32 pflags; - const fixed_t hscale = FRACUNIT + (FRACUNIT - object->scale); - const fixed_t vscale = FRACUNIT + (object->scale - FRACUNIT); + const fixed_t hscale = mapobjectscale + (mapobjectscale - object->scale); + const fixed_t vscale = mapobjectscale + (object->scale - mapobjectscale); fixed_t vertispeed = spring->info->mass; fixed_t horizspeed = spring->info->damage; UINT8 starcolor = (spring->info->painchance % MAXTRANSLATIONS); @@ -195,7 +195,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) if (horizspeed) { angle_t finalAngle = spring->angle; - fixed_t finalSpeed = horizspeed; + fixed_t finalSpeed = FixedMul(horizspeed, FixedSqrt(FixedMul(hscale, spring->scale))); fixed_t objectSpeed; if (object->player) @@ -273,7 +273,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) // Horizontal speed is used as a minimum thrust, not a direct replacement finalSpeed = max(objectSpeed, finalSpeed); - P_InstaThrustEvenIn2D(object, finalAngle, FixedMul(finalSpeed, FixedSqrt(FixedMul(hscale, spring->scale)))); + P_InstaThrustEvenIn2D(object, finalAngle, finalSpeed); } // Re-solidify From 5d2f380a136ae6b979c229c7db623916b52bab0d Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 8 Mar 2020 17:33:07 -0400 Subject: [PATCH 06/27] Lightsnake scales (The comment about scale not working was actually just paper sprite projection mucking it up) --- src/k_kart.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index b3f4a848e..6542d3a98 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1937,8 +1937,8 @@ void K_RespawnChecker(player_t *player) fixed_t newx, newy, newz; newangle = FixedAngle(((360/8)*i)*FRACUNIT); - newx = player->mo->x + P_ReturnThrustX(player->mo, newangle, 31<mo->y + P_ReturnThrustY(player->mo, newangle, 31<mo->x + P_ReturnThrustX(player->mo, newangle, 31 * player->mo->scale); + newy = player->mo->y + P_ReturnThrustY(player->mo, newangle, 31 * player->mo->scale); if (player->mo->eflags & MFE_VERTICALFLIP) newz = player->mo->z + player->mo->height; else @@ -1951,8 +1951,8 @@ void K_RespawnChecker(player_t *player) mo->eflags |= MFE_VERTICALFLIP; P_SetTarget(&mo->target, player->mo); mo->angle = newangle+ANGLE_90; - mo->momz = (8<mo); - P_SetScale(mo, (mo->destscale = FRACUNIT)); + mo->momz = (8 * player->mo->scale) * P_MobjFlip(player->mo); + P_SetScale(mo, (mo->destscale = player->mo->scale)); } } } From c6f3ac651ed57758c045d4a0e1297fda045691bb Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sat, 14 Mar 2020 01:43:54 -0400 Subject: [PATCH 07/27] Switch red & blue sparks, add yellow sparks, add big spark sprites --- src/dehacked.c | 2 + src/info.c | 3 + src/info.h | 2 + src/k_kart.c | 191 ++++++++++++++++++++++++++++++++++--------------- src/p_mobj.c | 6 +- 5 files changed, 144 insertions(+), 60 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 8a8a159db..efb39dd7d 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6347,6 +6347,8 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DRIFTSPARK_B1", "S_DRIFTSPARK_C1", "S_DRIFTSPARK_C2", + "S_DRIFTSPARK_D1", + "S_DRIFTSPARK_D2", // Brake drift sparks "S_BRAKEDRIFT", diff --git a/src/info.c b/src/info.c index 275c70018..6803e8a33 100644 --- a/src/info.c +++ b/src/info.c @@ -2587,6 +2587,9 @@ state_t states[NUMSTATES] = {SPR_DRIF, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DRIFTSPARK_C2}, // S_DRIFTSPARK_C1 {SPR_DRIF, FF_FULLBRIGHT|FF_TRANS20, 1, {NULL}, 0, 0, S_DRIFTSPARK_A3}, // S_DRIFTSPARK_C2 (Loop back to A3) + {SPR_DRIF, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_DRIFTSPARK_D2}, // S_DRIFTSPARK_D1 + {SPR_DRIF, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_DRIFTSPARK_A2}, // S_DRIFTSPARK_D2 (Loop back to A2) + {SPR_BDRF, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 5, 2, S_BRAKEDRIFT}, // S_BRAKEDRIFT {SPR_DUST, 0, 3, {NULL}, 0, 0, S_DRIFTDUST2}, // S_DRIFTDUST1 diff --git a/src/info.h b/src/info.h index b6cc0e7ff..50887e93f 100644 --- a/src/info.h +++ b/src/info.h @@ -3236,6 +3236,8 @@ typedef enum state S_DRIFTSPARK_B1, S_DRIFTSPARK_C1, S_DRIFTSPARK_C2, + S_DRIFTSPARK_D1, + S_DRIFTSPARK_D2, // Brake drift sparks S_BRAKEDRIFT, diff --git a/src/k_kart.c b/src/k_kart.c index 64320fb68..3f57b3e83 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3151,13 +3151,17 @@ static void K_SpawnDriftSparks(player_t *player) if (!P_IsObjectOnGround(player->mo)) return; - if (!player->kartstuff[k_drift] || player->kartstuff[k_driftcharge] < K_GetKartDriftSparkValue(player)) + if (!player->kartstuff[k_drift] + || (player->kartstuff[k_driftcharge] < K_GetKartDriftSparkValue(player) && !(player->kartstuff[k_driftcharge] < 0))) return; travelangle = player->mo->angle-(ANGLE_45/5)*player->kartstuff[k_drift]; for (i = 0; i < 2; i++) { + SINT8 size = 1; + UINT8 trail = 0; + newx = player->mo->x + P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale)); newy = player->mo->y + P_ReturnThrustY(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale)); spark = P_SpawnMobj(newx, newy, player->mo->z, MT_DRIFTSPARK); @@ -3171,20 +3175,62 @@ static void K_SpawnDriftSparks(player_t *player) spark->momy = player->mo->momy/2; //spark->momz = player->mo->momz/2; - if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*4) + if (player->kartstuff[k_driftcharge] < 0) { - spark->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); + // Stage 0: Yellow + spark->color = SKINCOLOR_GOLD; + size = 0; + } + else if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*4) + { + // Stage 3: Rainbow + size = 2; + + if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*4)+(32*3)) + { + // transition + spark->color = SKINCOLOR_SILVER; + P_SetScale(spark, (spark->destscale = spark->scale*3/2)); + trail = 1; + } + else + { + spark->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); + spark->colorized = true; + trail = 2; + } } else if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*2) { - if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*2)+(24*3)) - spark->color = SKINCOLOR_RASPBERRY; // transition + // Stage 2: Blue + size = 2; + + if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*2)+(32*3)) + { + // transition + spark->color = SKINCOLOR_PURPLE; + P_SetScale(spark, (spark->destscale = spark->scale*3/2)); + } else - spark->color = SKINCOLOR_KETCHUP; + { + spark->color = SKINCOLOR_SAPPHIRE; + } } else { - spark->color = SKINCOLOR_SAPPHIRE; + // Stage 1: Red + size = 1; + + if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player))+(32*3)) + { + // transition + spark->color = SKINCOLOR_RASPBERRY; + P_SetScale(spark, (spark->destscale = spark->scale*2)); + } + else + { + spark->color = SKINCOLOR_KETCHUP; + } } if ((player->kartstuff[k_drift] > 0 && player->cmd.driftturn > 0) // Inward drifts @@ -3192,22 +3238,40 @@ static void K_SpawnDriftSparks(player_t *player) { if ((player->kartstuff[k_drift] < 0 && (i & 1)) || (player->kartstuff[k_drift] > 0 && !(i & 1))) - P_SetMobjState(spark, S_DRIFTSPARK_A1); + { + size++; + } else if ((player->kartstuff[k_drift] < 0 && !(i & 1)) || (player->kartstuff[k_drift] > 0 && (i & 1))) - P_SetMobjState(spark, S_DRIFTSPARK_C1); + { + size--; + } } else if ((player->kartstuff[k_drift] > 0 && player->cmd.driftturn < 0) // Outward drifts || (player->kartstuff[k_drift] < 0 && player->cmd.driftturn > 0)) { if ((player->kartstuff[k_drift] < 0 && (i & 1)) || (player->kartstuff[k_drift] > 0 && !(i & 1))) - P_SetMobjState(spark, S_DRIFTSPARK_C1); + { + size--; + } else if ((player->kartstuff[k_drift] < 0 && !(i & 1)) || (player->kartstuff[k_drift] > 0 && (i & 1))) - P_SetMobjState(spark, S_DRIFTSPARK_A1); + { + size++; + } } + if (size == 2) + P_SetMobjState(spark, S_DRIFTSPARK_A1); + else if (size < 1) + P_SetMobjState(spark, S_DRIFTSPARK_C1); + else if (size > 2) + P_SetMobjState(spark, S_DRIFTSPARK_D1); + + if (trail > 0) + spark->tics += trail; + K_MatchGenericExtraFlags(spark, player->mo); } } @@ -5721,42 +5785,40 @@ static void K_KartDrift(player_t *player, boolean onground) // Drift Release (Moved here so you can't "chain" drifts) if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5) // || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1)) - && player->kartstuff[k_driftcharge] < dsone && onground) { - player->kartstuff[k_driftcharge] = 0; - } - else if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5) - // || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1)) - && (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo) - && onground) - { - if (player->kartstuff[k_driftboost] < 20) - player->kartstuff[k_driftboost] = 20; - S_StartSound(player->mo, sfx_s23c); - //K_SpawnDashDustRelease(player); - player->kartstuff[k_driftcharge] = 0; - } - else if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5) - // || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1)) - && player->kartstuff[k_driftcharge] < dsthree - && onground) - { - if (player->kartstuff[k_driftboost] < 50) - player->kartstuff[k_driftboost] = 50; - S_StartSound(player->mo, sfx_s23c); - //K_SpawnDashDustRelease(player); - player->kartstuff[k_driftcharge] = 0; - } - else if ((player->kartstuff[k_drift] != -5 && player->kartstuff[k_drift] != 5) - // || (player->kartstuff[k_drift] >= 1 && player->kartstuff[k_turndir] != 1) || (player->kartstuff[k_drift] <= -1 && player->kartstuff[k_turndir] != -1)) - && player->kartstuff[k_driftcharge] >= dsthree - && onground) - { - if (player->kartstuff[k_driftboost] < 125) - player->kartstuff[k_driftboost] = 125; - S_StartSound(player->mo, sfx_s23c); - //K_SpawnDashDustRelease(player); + if (player->kartstuff[k_driftcharge] < 0 || player->kartstuff[k_driftcharge] >= dsone) + { + S_StartSound(player->mo, sfx_s23c); + //K_SpawnDashDustRelease(player); + + if (player->kartstuff[k_driftcharge] < 0) + { + // Stage 0: Yellow sparks + if (player->kartstuff[k_driftboost] < 15) + player->kartstuff[k_driftboost] = 15; + } + else if (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo) + { + // Stage 1: Red sparks + if (player->kartstuff[k_driftboost] < 20) + player->kartstuff[k_driftboost] = 20; + } + else if (player->kartstuff[k_driftcharge] < dsthree) + { + // Stage 2: Blue sparks + if (player->kartstuff[k_driftboost] < 50) + player->kartstuff[k_driftboost] = 50; + } + else if (player->kartstuff[k_driftcharge] >= dsthree) + { + // Stage 3: Rainbow sparks + if (player->kartstuff[k_driftboost] < 125) + player->kartstuff[k_driftboost] = 125; + } + } + + // Remove charge player->kartstuff[k_driftcharge] = 0; } @@ -5792,10 +5854,16 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftend] = 0; } - - // Incease/decrease the drift value to continue drifting in that direction - if (player->kartstuff[k_spinouttimer] == 0 && player->kartstuff[k_jmp] == 1 && onground && player->kartstuff[k_drift] != 0) + if (player->kartstuff[k_spinouttimer] > 0) { + // Stop drifting + player->kartstuff[k_drift] = player->kartstuff[k_driftcharge] = 0; + player->kartstuff[k_aizdriftstrat] = player->kartstuff[k_brakedrift] = 0; + player->kartstuff[k_getsparks] = 0; + } + else if (player->kartstuff[k_jmp] == 1 && onground && player->kartstuff[k_drift] != 0) + { + // Incease/decrease the drift value to continue drifting in that direction fixed_t driftadditive = 24; if (player->kartstuff[k_drift] >= 1) // Drifting to the left @@ -5828,11 +5896,26 @@ static void K_KartDrift(player_t *player, boolean onground) && !player->kartstuff[k_hyudorotimer] && !EITHERSNEAKER(player))) driftadditive = 0; - if (player->speed > minspeed*2) + + if (player->speed >= minspeed*2) + { player->kartstuff[k_getsparks] = 1; + if (player->kartstuff[k_driftcharge] <= -1) + player->kartstuff[k_driftcharge] = dsone; + } + else + { + player->kartstuff[k_getsparks] = 0; + driftadditive = 0; + + if (player->kartstuff[k_driftcharge] >= dsone) + player->kartstuff[k_driftcharge] = -1; + } + // This spawns the drift sparks - if (player->kartstuff[k_driftcharge] + driftadditive >= dsone) + if ((player->kartstuff[k_driftcharge] + driftadditive >= dsone) + || (player->kartstuff[k_driftcharge] < 0)) K_SpawnDriftSparks(player); // Sound whenever you get a different tier of sparks @@ -5849,14 +5932,6 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftend] = 0; } - // Stop drifting - if (player->kartstuff[k_spinouttimer] > 0 || player->speed < minspeed) - { - player->kartstuff[k_drift] = player->kartstuff[k_driftcharge] = 0; - player->kartstuff[k_aizdriftstrat] = player->kartstuff[k_brakedrift] = 0; - player->kartstuff[k_getsparks] = 0; - } - if ((!EITHERSNEAKER(player)) || (!player->cmd.driftturn) || (!player->kartstuff[k_aizdriftstrat]) diff --git a/src/p_mobj.c b/src/p_mobj.c index a532dddc5..1ae299749 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8378,9 +8378,11 @@ void P_MobjThinker(mobj_t *mobj) if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)*4) mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)*2) - mobj->color = SKINCOLOR_KETCHUP; - else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)) mobj->color = SKINCOLOR_SAPPHIRE; + else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)) + mobj->color = SKINCOLOR_KETCHUP; + else if (mobj->target->player->kartstuff[k_driftcharge] < 0) + mobj->color = SKINCOLOR_GOLD; else mobj->color = SKINCOLOR_SILVER; From f37b1268b420f91a055d861268970125e03bec3c Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sat, 14 Mar 2020 18:12:36 -0400 Subject: [PATCH 08/27] Slight adjustments to yellow spark nuances Instead of setting you to yellow sparks when before you could keep red sparks, it keeps your previous "state". When going below 20 speed when you have sparks, you no longer stop charging sparks, but you have to break above 20 speed once you have yellow sparks to get normal sparks again. --- src/k_kart.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 3f57b3e83..3f41e5ee8 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5897,20 +5897,23 @@ static void K_KartDrift(player_t *player, boolean onground) && !EITHERSNEAKER(player))) driftadditive = 0; - if (player->speed >= minspeed*2) + // Inbetween minspeed and minspeed*2, it'll keep your previous drift-spark state. + if (player->speed > minspeed*2) { player->kartstuff[k_getsparks] = 1; if (player->kartstuff[k_driftcharge] <= -1) - player->kartstuff[k_driftcharge] = dsone; + player->kartstuff[k_driftcharge] = dsone; // Back to red } - else + else if (player->speed <= minspeed) { player->kartstuff[k_getsparks] = 0; driftadditive = 0; if (player->kartstuff[k_driftcharge] >= dsone) - player->kartstuff[k_driftcharge] = -1; + player->kartstuff[k_driftcharge] = -1; // Set yellow sparks + else + player->kartstuff[k_driftcharge] = 0; // No sparks } // This spawns the drift sparks From 9dfbd918a4106b0c65df09d94233d08e4ba489a1 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sat, 14 Mar 2020 18:14:21 -0400 Subject: [PATCH 09/27] Don't forcefully remove drift when bumping walls --- src/p_map.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index 9e34e04d9..8c4bf8240 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -3667,8 +3667,6 @@ void P_BouncePlayerMove(mobj_t *mo) mmomx = mo->player->rmomx; mmomy = mo->player->rmomy; - mo->player->kartstuff[k_drift] = 0; - mo->player->kartstuff[k_driftcharge] = 0; mo->player->kartstuff[k_pogospring] = 0; // trace along the three leading corners From 219d4aebf2bacf13df78eb8006f3c2c375158e4f Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sat, 14 Mar 2020 18:31:53 -0400 Subject: [PATCH 10/27] Actually, might've reintroduced more lawnmower problems; let's play it safe --- 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 3f41e5ee8..c2fee8494 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5905,7 +5905,7 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftcharge] <= -1) player->kartstuff[k_driftcharge] = dsone; // Back to red } - else if (player->speed <= minspeed) + else { player->kartstuff[k_getsparks] = 0; driftadditive = 0; From ed9919d47c616de59beed51ed8000c3fb595f98d Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sat, 14 Mar 2020 18:38:01 -0400 Subject: [PATCH 11/27] Remove drift when hitting 0 speed Prevents silliness like this: https://cdn.discordapp.com/attachments/275750804227489794/688515983471804455/kart0027.gif --- 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 c2fee8494..3a7ccfb7d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5854,7 +5854,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftend] = 0; } - if (player->kartstuff[k_spinouttimer] > 0) + if (player->kartstuff[k_spinouttimer] > 0 || player->speed == 0) { // Stop drifting player->kartstuff[k_drift] = player->kartstuff[k_driftcharge] = 0; From f235a50d2ef8d2d3e97701ed8bc90cfe65046ac1 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sat, 14 Mar 2020 18:46:22 -0400 Subject: [PATCH 12/27] Blue sparks trail longer --- src/k_kart.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 3a7ccfb7d..37011eb4b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3185,25 +3185,25 @@ static void K_SpawnDriftSparks(player_t *player) { // Stage 3: Rainbow size = 2; + trail = 2; if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*4)+(32*3)) { // transition spark->color = SKINCOLOR_SILVER; P_SetScale(spark, (spark->destscale = spark->scale*3/2)); - trail = 1; } else { spark->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); spark->colorized = true; - trail = 2; } } else if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*2) { // Stage 2: Blue size = 2; + trail = 1; if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*2)+(32*3)) { From 69cc03a4343c42b1f4bbfd2d32910006e70a5e6d Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sat, 14 Mar 2020 19:01:34 -0400 Subject: [PATCH 13/27] This line broke yellow sparks entirely --- src/k_kart.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 37011eb4b..9792c5a3c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5912,8 +5912,6 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftcharge] >= dsone) player->kartstuff[k_driftcharge] = -1; // Set yellow sparks - else - player->kartstuff[k_driftcharge] = 0; // No sparks } // This spawns the drift sparks From 01885c516634f81efc598c3e137abae8684724f3 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 15 Mar 2020 20:52:41 -0400 Subject: [PATCH 14/27] Revert "Actually, might've reintroduced more lawnmower problems; let's play it safe" This reverts commit 219d4aebf2bacf13df78eb8006f3c2c375158e4f. --- 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 9792c5a3c..3a62be45a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5905,7 +5905,7 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftcharge] <= -1) player->kartstuff[k_driftcharge] = dsone; // Back to red } - else + else if (player->speed <= minspeed) { player->kartstuff[k_getsparks] = 0; driftadditive = 0; From 7d1c132ca2d758bf3352f713252b554b0508123d Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 15 Mar 2020 21:21:07 -0400 Subject: [PATCH 15/27] Fix drift spark camera when you go to yellow sparks --- src/p_user.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 8185667a0..c8b03267f 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7498,7 +7498,14 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (player->kartstuff[k_drift] != 0) { fixed_t panmax = (dist/5); - pan = FixedDiv(FixedMul(min((fixed_t)player->kartstuff[k_driftcharge], K_GetKartDriftSparkValue(player)), panmax), K_GetKartDriftSparkValue(player)); + INT32 driftval = K_GetKartDriftSparkValue(player); + INT32 dc = player->kartstuff[k_driftcharge]; + + if (dc > driftval || dc < 0) + dc = driftval; + + pan = FixedDiv(FixedMul((fixed_t)dc, panmax), driftval); + if (pan > panmax) pan = panmax; if (player->kartstuff[k_drift] < 0) From c4dd88bbaee7b4eaac593f044d03b7f3b29dd332 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 15 Mar 2020 21:59:22 -0400 Subject: [PATCH 16/27] Turn sparkles that warn you when you're about to hit a new drift spark! --- src/dehacked.c | 6 ++++++ src/info.c | 13 +++++++++---- src/info.h | 7 +++++++ src/k_kart.c | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 4 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index efb39dd7d..061eb9388 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6359,6 +6359,12 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DRIFTDUST3", "S_DRIFTDUST4", + // Drift Sparkles + "S_DRIFTWARNSPARK1", + "S_DRIFTWARNSPARK2", + "S_DRIFTWARNSPARK3", + "S_DRIFTWARNSPARK4", + // Fast lines "S_FASTLINE1", "S_FASTLINE2", diff --git a/src/info.c b/src/info.c index 6803e8a33..df8f31061 100644 --- a/src/info.c +++ b/src/info.c @@ -57,10 +57,10 @@ char sprnames[NUMSPRITES + 1][5] = "SRBL","SRBM","SRBN","SRBO", //SRB2kart Sprites "RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE","KINV","KINF", - "WIPD","DRIF","BDRF","DUST","RSHE","FITM","BANA","ORBN","JAWZ","SSMN", - "KRBM","BHOG","BHBM","SPBM","THNS","SINK","SITR","KBLN","DEZL","POKE", - "AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO","CRAB", - "BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB","ARRO","ITEM", + "WIPD","DRIF","BDRF","DUST","DRWS","RSHE","FITM","BANA","ORBN","JAWZ", + "SSMN","KRBM","BHOG","BHBM","SPBM","THNS","SINK","SITR","KBLN","DEZL", + "POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO", + "CRAB","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB","ARRO","ITEM", "ITMO","ITMI","ITMN","WANT","PBOM","HIT1","HIT2","HIT3","RETI","AIDU", "KSPK","LZI1","LZI2","KLIT","FZSM","FZBM","FPRT","SBUS","MARB","FUFO", "RUST","BLON","VAPE","HTZA","HTZB","SGVA","SGVB","SGVC","PGTR","PGF1", @@ -2597,6 +2597,11 @@ state_t states[NUMSTATES] = {SPR_DUST, FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTDUST4}, // S_DRIFTDUST3 {SPR_DUST, FF_TRANS20|3, 3, {NULL}, 0, 0, S_NULL}, // S_DRIFTDUST4 + {SPR_DRWS, FF_FULLBRIGHT|0, 3, {NULL}, 0, 0, S_DRIFTWARNSPARK2}, // S_DRIFTWARNSPARK1 + {SPR_DRWS, FF_FULLBRIGHT|1, 3, {NULL}, 0, 0, S_DRIFTWARNSPARK3}, // S_DRIFTWARNSPARK2 + {SPR_DRWS, FF_FULLBRIGHT|FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTWARNSPARK4}, // S_DRIFTWARNSPARK3 + {SPR_DRWS, FF_FULLBRIGHT|FF_TRANS20|3, 3, {NULL}, 0, 0, S_NULL}, // S_DRIFTWARNSPARK4 + {SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_FASTLINE2}, // S_FASTLINE1 {SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_FASTLINE3}, // S_FASTLINE2 {SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_FASTLINE4}, // S_FASTLINE3 diff --git a/src/info.h b/src/info.h index 50887e93f..78902d297 100644 --- a/src/info.h +++ b/src/info.h @@ -608,6 +608,7 @@ typedef enum sprite SPR_DRIF, // Drift Sparks SPR_BDRF, // Brake drift sparks SPR_DUST, // Drift Dust + SPR_DRWS, // Drift dust sparks // Kart Items SPR_RSHE, // Rocket sneaker @@ -3248,6 +3249,12 @@ typedef enum state S_DRIFTDUST3, S_DRIFTDUST4, + // Drift Sparkles + S_DRIFTWARNSPARK1, + S_DRIFTWARNSPARK2, + S_DRIFTWARNSPARK3, + S_DRIFTWARNSPARK4, + // Fast lines S_FASTLINE1, S_FASTLINE2, diff --git a/src/k_kart.c b/src/k_kart.c index 3a62be45a..3b30b1c3f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3587,6 +3587,47 @@ void K_DriftDustHandling(mobj_t *spawner) S_StartSound(spawner, sfx_screec); K_MatchGenericExtraFlags(dust, spawner); + + // Sparkle-y warning for when you're about to change drift sparks! + if (spawner->player && spawner->player->kartstuff[k_drift]) + { + INT32 driftval = K_GetKartDriftSparkValue(spawner->player); + INT32 warntime = driftval/3; + INT32 dc = spawner->player->kartstuff[k_driftcharge]; + UINT8 c = SKINCOLOR_NONE; + boolean rainbow = false; + + if (dc < 0) + { + c = SKINCOLOR_GOLD; + } + else if (dc >= (driftval - warntime)) + { + if (dc >= ((2*driftval) - warntime)) + { + if (dc >= ((4*driftval) - warntime)) + { + c = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); + rainbow = true; + } + else + { + c = SKINCOLOR_SAPPHIRE; + } + } + else + { + c = SKINCOLOR_KETCHUP; + } + } + + if (c != SKINCOLOR_NONE) + { + P_SetMobjState(dust, S_DRIFTWARNSPARK1); + dust->color = c; + dust->colorized = rainbow; + } + } } } From 3093a3078e744d34d13acd60f464fc550cf84b12 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 15 Mar 2020 22:05:43 -0400 Subject: [PATCH 17/27] Scale dust properly --- src/k_kart.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 3b30b1c3f..db1be60e2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3550,7 +3550,7 @@ void K_DriftDustHandling(mobj_t *spawner) { angle_t playerangle = spawner->angle; - if (spawner->player->speed < 5<player->speed < 5*spawner->scale) return; if (spawner->player->cmd.forwardmove < 0) @@ -3561,7 +3561,7 @@ void K_DriftDustHandling(mobj_t *spawner) } else { - if (P_AproxDistance(spawner->momx, spawner->momy) < 5<momx, spawner->momy) < 5*spawner->scale) return; anglediff = abs((signed)(spawner->angle - R_PointToAngle2(0, 0, spawner->momx, spawner->momy))); @@ -3572,12 +3572,12 @@ void K_DriftDustHandling(mobj_t *spawner) if (anglediff > ANG10*4) // Trying to turn further than 40 degrees { - fixed_t spawnx = P_RandomRange(-spawnrange, spawnrange)<scale; + fixed_t spawny = P_RandomRange(-spawnrange, spawnrange) * spawner->scale; INT32 speedrange = 2; mobj_t *dust = P_SpawnMobj(spawner->x + spawnx, spawner->y + spawny, spawner->z, MT_DRIFTDUST); - dust->momx = FixedMul(spawner->momx + (P_RandomRange(-speedrange, speedrange)<scale)/4); - dust->momy = FixedMul(spawner->momy + (P_RandomRange(-speedrange, speedrange)<scale)/4); + dust->momx = FixedMul(spawner->momx + (P_RandomRange(-speedrange, speedrange) * spawner->scale), 3*(spawner->scale)/4); + dust->momy = FixedMul(spawner->momy + (P_RandomRange(-speedrange, speedrange) * spawner->scale), 3*(spawner->scale)/4); dust->momz = P_MobjFlip(spawner) * (P_RandomRange(1, 4) * (spawner->scale)); P_SetScale(dust, spawner->scale/2); dust->destscale = spawner->scale * 3; From 4174d9a23ee6411e5e21c6acd27ff92062695882 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 15 Mar 2020 23:02:43 -0400 Subject: [PATCH 18/27] Add a function for retrieving drift spark color, to simplify a lot of code & add transition colors to everything --- src/k_kart.c | 178 ++++++++++++++++++++++++++++----------------------- src/k_kart.h | 1 + src/p_mobj.c | 11 +--- 3 files changed, 102 insertions(+), 88 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index db1be60e2..fb76fd947 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3133,6 +3133,59 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I return NULL; } +UINT8 K_DriftSparkColor(player_t *player, INT32 charge) +{ + INT32 ds = K_GetKartDriftSparkValue(player); + UINT8 color = SKINCOLOR_NONE; + + if (charge < 0) + { + // Stage 0: Yellow + color = SKINCOLOR_GOLD; + } + else if (charge >= ds*4) + { + // Stage 3: Rainbow + if (charge <= (ds*4)+(32*3)) + { + // transition + color = SKINCOLOR_SILVER; + } + else + { + color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); + } + } + else if (charge >= ds*2) + { + // Stage 2: Blue + if (charge <= (ds*2)+(32*3)) + { + // transition + color = SKINCOLOR_PURPLE; + } + else + { + color = SKINCOLOR_SAPPHIRE; + } + } + else if (charge >= ds) + { + // Stage 1: Red + if (charge <= (ds)+(32*3)) + { + // transition + color = SKINCOLOR_RASPBERRY; + } + else + { + color = SKINCOLOR_KETCHUP; + } + } + + return color; +} + static void K_SpawnDriftSparks(player_t *player) { fixed_t newx; @@ -3159,6 +3212,7 @@ static void K_SpawnDriftSparks(player_t *player) for (i = 0; i < 2; i++) { + INT32 ds = K_GetKartDriftSparkValue(player); SINT8 size = 1; UINT8 trail = 0; @@ -3175,62 +3229,51 @@ static void K_SpawnDriftSparks(player_t *player) spark->momy = player->mo->momy/2; //spark->momz = player->mo->momz/2; + spark->color = K_DriftSparkColor(player, player->kartstuff[k_driftcharge]); + if (player->kartstuff[k_driftcharge] < 0) { // Stage 0: Yellow - spark->color = SKINCOLOR_GOLD; size = 0; } - else if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*4) + else if (player->kartstuff[k_driftcharge] >= ds*4) { // Stage 3: Rainbow size = 2; trail = 2; - if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*4)+(32*3)) + if (player->kartstuff[k_driftcharge] <= (ds*4)+(32*3)) { // transition - spark->color = SKINCOLOR_SILVER; P_SetScale(spark, (spark->destscale = spark->scale*3/2)); } else { - spark->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); spark->colorized = true; } } - else if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*2) + else if (player->kartstuff[k_driftcharge] >= ds*2) { // Stage 2: Blue size = 2; trail = 1; - if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*2)+(32*3)) + if (player->kartstuff[k_driftcharge] <= (ds*2)+(32*3)) { // transition - spark->color = SKINCOLOR_PURPLE; P_SetScale(spark, (spark->destscale = spark->scale*3/2)); } - else - { - spark->color = SKINCOLOR_SAPPHIRE; - } } else { // Stage 1: Red size = 1; - if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player))+(32*3)) + if (player->kartstuff[k_driftcharge] <= (ds)+(32*3)) { // transition - spark->color = SKINCOLOR_RASPBERRY; P_SetScale(spark, (spark->destscale = spark->scale*2)); } - else - { - spark->color = SKINCOLOR_KETCHUP; - } } if ((player->kartstuff[k_drift] > 0 && player->cmd.driftturn > 0) // Inward drifts @@ -3597,28 +3640,16 @@ void K_DriftDustHandling(mobj_t *spawner) UINT8 c = SKINCOLOR_NONE; boolean rainbow = false; - if (dc < 0) + if (dc >= 0) { - c = SKINCOLOR_GOLD; + dc += warntime; } - else if (dc >= (driftval - warntime)) + + c = K_DriftSparkColor(spawner->player, dc); + + if (dc > (4*driftval)+(32*3)) { - if (dc >= ((2*driftval) - warntime)) - { - if (dc >= ((4*driftval) - warntime)) - { - c = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); - rainbow = true; - } - else - { - c = SKINCOLOR_SAPPHIRE; - } - } - else - { - c = SKINCOLOR_KETCHUP; - } + rainbow = true; } if (c != SKINCOLOR_NONE) @@ -9754,57 +9785,44 @@ static void K_drawKartFirstPerson(void) if (stplyr->mo) { - INT32 dsone = K_GetKartDriftSparkValue(stplyr); - INT32 dstwo = dsone*2; - INT32 dsthree = dstwo*2; + UINT8 driftcolor = K_DriftSparkColor(stplyr, stplyr->kartstuff[k_driftcharge]); + const angle_t ang = R_PointToAngle2(0, 0, stplyr->rmomx, stplyr->rmomy) - stplyr->frameangle; + // yes, the following is correct. no, you do not need to swap the x and y. + fixed_t xoffs = -P_ReturnThrustY(stplyr->mo, ang, (BASEVIDWIDTH<<(FRACBITS-2))/2); + fixed_t yoffs = -(P_ReturnThrustX(stplyr->mo, ang, 4*FRACUNIT) - 4*FRACUNIT); -#ifndef DONTLIKETOASTERSFPTWEAKS + if (splitscreen) + xoffs = FixedMul(xoffs, scale); + + xoffs -= (tn)*scale; + xoffs -= (dr)*scale; + + if (stplyr->frameangle == stplyr->mo->angle) { - const angle_t ang = R_PointToAngle2(0, 0, stplyr->rmomx, stplyr->rmomy) - stplyr->frameangle; - // yes, the following is correct. no, you do not need to swap the x and y. - fixed_t xoffs = -P_ReturnThrustY(stplyr->mo, ang, (BASEVIDWIDTH<<(FRACBITS-2))/2); - fixed_t yoffs = -(P_ReturnThrustX(stplyr->mo, ang, 4*FRACUNIT) - 4*FRACUNIT); + const fixed_t mag = FixedDiv(stplyr->speed, 10*stplyr->mo->scale); - if (splitscreen) - xoffs = FixedMul(xoffs, scale); - - xoffs -= (tn)*scale; - xoffs -= (dr)*scale; - - if (stplyr->frameangle == stplyr->mo->angle) + if (mag < FRACUNIT) { - const fixed_t mag = FixedDiv(stplyr->speed, 10*stplyr->mo->scale); - - if (mag < FRACUNIT) - { - xoffs = FixedMul(xoffs, mag); - if (!splitscreen) - yoffs = FixedMul(yoffs, mag); - } + xoffs = FixedMul(xoffs, mag); + if (!splitscreen) + yoffs = FixedMul(yoffs, mag); } - - if (stplyr->mo->momz > 0) // TO-DO: Draw more of the kart so we can remove this if! - yoffs += stplyr->mo->momz/3; - - if (encoremode) - x -= xoffs; - else - x += xoffs; - if (!splitscreen) - y += yoffs; } - // drift sparks! - if ((leveltime & 1) && (stplyr->kartstuff[k_driftcharge] >= dsthree)) - colmap = R_GetTranslationColormap(TC_RAINBOW, (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))), GTC_CACHE); - else if ((leveltime & 1) && (stplyr->kartstuff[k_driftcharge] >= dstwo)) - colmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_KETCHUP, GTC_CACHE); - else if ((leveltime & 1) && (stplyr->kartstuff[k_driftcharge] >= dsone)) - colmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_SAPPHIRE, GTC_CACHE); + if (stplyr->mo->momz > 0) // TO-DO: Draw more of the kart so we can remove this if! + yoffs += stplyr->mo->momz/3; + + if (encoremode) + x -= xoffs; else -#endif - // invincibility/grow/shrink! - if (stplyr->mo->colorized && stplyr->mo->color) + x += xoffs; + if (!splitscreen) + y += yoffs; + + + if ((leveltime & 1) && (driftcolor != SKINCOLOR_NONE)) // drift sparks! + colmap = R_GetTranslationColormap(TC_RAINBOW, driftcolor, GTC_CACHE); + else if (stplyr->mo->colorized && stplyr->mo->color) // invincibility/grow/shrink! colmap = R_GetTranslationColormap(TC_RAINBOW, stplyr->mo->color, GTC_CACHE); } diff --git a/src/k_kart.h b/src/k_kart.h index b91e8c8a1..119b3f9a7 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -40,6 +40,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source, mobj_t *inflictor); void K_StealBumper(player_t *player, player_t *victim, boolean force); void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source); void K_SpawnMineExplosion(mobj_t *source, UINT8 color); +UINT8 K_DriftSparkColor(player_t *player, INT32 charge); void K_SpawnBoostTrail(player_t *player); void K_SpawnSparkleTrail(mobj_t *mo); void K_SpawnWipeoutTrail(mobj_t *mo, boolean translucent); diff --git a/src/p_mobj.c b/src/p_mobj.c index 1ae299749..9f688e369 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8363,6 +8363,7 @@ void P_MobjThinker(mobj_t *mobj) } else { + UINT8 driftcolor = K_DriftSparkColor(mobj->target->player, mobj->target->player->kartstuff[k_driftcharge]); fixed_t newx, newy; angle_t travelangle; @@ -8375,14 +8376,8 @@ void P_MobjThinker(mobj_t *mobj) mobj->angle = travelangle - ((ANGLE_90/5)*mobj->target->player->kartstuff[k_drift]); P_SetScale(mobj, (mobj->destscale = mobj->target->scale)); - if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)*4) - mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); - else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)*2) - mobj->color = SKINCOLOR_SAPPHIRE; - else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)) - mobj->color = SKINCOLOR_KETCHUP; - else if (mobj->target->player->kartstuff[k_driftcharge] < 0) - mobj->color = SKINCOLOR_GOLD; + if (driftcolor != SKINCOLOR_NONE) + mobj->color = driftcolor; else mobj->color = SKINCOLOR_SILVER; From 4026344ad3e79babbc974e1813e931d6b8e4101a Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sun, 15 Mar 2020 23:21:46 -0400 Subject: [PATCH 19/27] Minor yellow-spark related cleanup Sound plays when you go to yellow sparks & back, and Red transition uses Tangerine instead of Raspberry --- src/k_kart.c | 33 ++++++++++++++++++++++++--------- src/sounds.c | 1 + src/sounds.h | 1 + 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index fb76fd947..ccace01f5 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3175,7 +3175,7 @@ UINT8 K_DriftSparkColor(player_t *player, INT32 charge) if (charge <= (ds)+(32*3)) { // transition - color = SKINCOLOR_RASPBERRY; + color = SKINCOLOR_TANGERINE; } else { @@ -3188,6 +3188,7 @@ UINT8 K_DriftSparkColor(player_t *player, INT32 charge) static void K_SpawnDriftSparks(player_t *player) { + INT32 ds = K_GetKartDriftSparkValue(player); fixed_t newx; fixed_t newy; mobj_t *spark; @@ -3205,14 +3206,13 @@ static void K_SpawnDriftSparks(player_t *player) return; if (!player->kartstuff[k_drift] - || (player->kartstuff[k_driftcharge] < K_GetKartDriftSparkValue(player) && !(player->kartstuff[k_driftcharge] < 0))) + || (player->kartstuff[k_driftcharge] < ds && !(player->kartstuff[k_driftcharge] < 0))) return; travelangle = player->mo->angle-(ANGLE_45/5)*player->kartstuff[k_drift]; for (i = 0; i < 2; i++) { - INT32 ds = K_GetKartDriftSparkValue(player); SINT8 size = 1; UINT8 trail = 0; @@ -5937,6 +5937,7 @@ static void K_KartDrift(player_t *player, boolean onground) { // Incease/decrease the drift value to continue drifting in that direction fixed_t driftadditive = 24; + boolean playsound = false; if (player->kartstuff[k_drift] >= 1) // Drifting to the left { @@ -5975,7 +5976,10 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_getsparks] = 1; if (player->kartstuff[k_driftcharge] <= -1) + { player->kartstuff[k_driftcharge] = dsone; // Back to red + playsound = true; + } } else if (player->speed <= minspeed) { @@ -5983,22 +5987,33 @@ static void K_KartDrift(player_t *player, boolean onground) driftadditive = 0; if (player->kartstuff[k_driftcharge] >= dsone) + { player->kartstuff[k_driftcharge] = -1; // Set yellow sparks + playsound = true; + } } // This spawns the drift sparks if ((player->kartstuff[k_driftcharge] + driftadditive >= dsone) || (player->kartstuff[k_driftcharge] < 0)) + { K_SpawnDriftSparks(player); + } + + if ((player->kartstuff[k_driftcharge] < dsone && player->kartstuff[k_driftcharge]+driftadditive >= dsone) + || (player->kartstuff[k_driftcharge] < dstwo && player->kartstuff[k_driftcharge]+driftadditive >= dstwo) + || (player->kartstuff[k_driftcharge] < dsthree && player->kartstuff[k_driftcharge]+driftadditive >= dsthree)) + { + playsound = true; + } // Sound whenever you get a different tier of sparks - if (P_IsDisplayPlayer(player) // UGHGHGH... - && ((player->kartstuff[k_driftcharge] < dsone && player->kartstuff[k_driftcharge]+driftadditive >= dsone) - || (player->kartstuff[k_driftcharge] < dstwo && player->kartstuff[k_driftcharge]+driftadditive >= dstwo) - || (player->kartstuff[k_driftcharge] < dsthree && player->kartstuff[k_driftcharge]+driftadditive >= dsthree))) + if (playsound && P_IsDisplayPlayer(player)) { - //S_StartSound(player->mo, sfx_s3ka2); - S_StartSoundAtVolume(player->mo, sfx_s3ka2, 192); // Ugh... + if (player->kartstuff[k_driftcharge] == -1) + S_StartSoundAtVolume(player->mo, sfx_sploss, 192); // Yellow spark sound + else + S_StartSoundAtVolume(player->mo, sfx_s3ka2, 192); } player->kartstuff[k_driftcharge] += driftadditive; diff --git a/src/sounds.c b/src/sounds.c index ef150d7a5..adae99df5 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -817,6 +817,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"toada", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Arid Sands Toad scream {"bhurry", false, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // v1.0.2 Battle overtime {"bsnipe", false, 96, 8, -1, NULL, 0, -1, -1, LUMPERROR}, // Banana sniping + {"sploss", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Down to yellow sparks {"itfree", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // :shitsfree: {"dbgsal", false, 255, 8, -1, NULL, 0, -1, -1, LUMPERROR}, // Debug notification diff --git a/src/sounds.h b/src/sounds.h index 8b9ca609e..e3a8560ca 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -892,6 +892,7 @@ typedef enum sfx_toada, sfx_bhurry, sfx_bsnipe, + sfx_sploss, sfx_itfree, sfx_dbgsal, From 48e69f7c91aee324fef8946d091c5c641616f774 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Mon, 16 Mar 2020 00:53:33 -0400 Subject: [PATCH 20/27] Air sparks, start on drift boosts --- src/dehacked.c | 7 ++- src/info.c | 34 +++++++++++++- src/info.h | 9 +++- src/k_kart.c | 121 +++++++++++++++++++++++++++++-------------------- src/p_mobj.c | 31 +++++++++++++ 5 files changed, 149 insertions(+), 53 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 061eb9388..0c5324551 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6381,7 +6381,11 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_FASTDUST6", "S_FASTDUST7", - // Thunder Shield Burst + // Drift boost effect + "S_DRIFTEXPLODE1", + "S_DRIFTEXPLODE2", + "S_DRIFTEXPLODE3", + "S_DRIFTEXPLODE4", // Sneaker boost effect "S_BOOSTFLAME", @@ -7742,6 +7746,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_FASTLINE", "MT_FASTDUST", + "MT_DRIFTEXPLODE", "MT_BOOSTFLAME", "MT_BOOSTSMOKE", "MT_SNEAKERTRAIL", diff --git a/src/info.c b/src/info.c index df8f31061..ef878fe16 100644 --- a/src/info.c +++ b/src/info.c @@ -70,7 +70,7 @@ char sprnames[NUMSPRITES + 1][5] = "DUCK","GTRE","CHES","CHIM","DRGN","LZMN","PGSS","ZTCH","MKMA","MKMP", "RTCH","BOWL","BOWH","BRRL","BRRR","HRSE","TOAH","BFRT","OFRT","RFRT", "PFRT","ASPK","HBST","HBSO","HBSF","WBLZ","WBLN","FWRK","MXCL","RGSP", - "DRAF","GRES","OTFG","XMS4","XMS5","VIEW" + "DRAF","GRES","OTFG","DBOS","XMS4","XMS5","VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -2616,6 +2616,11 @@ state_t states[NUMSTATES] = {SPR_DSHR, FF_PAPERSPRITE|5, 1, {NULL}, 0, 0, S_FASTDUST7}, // S_FASTDUST6 {SPR_DSHR, FF_PAPERSPRITE|6, 1, {NULL}, 0, 0, S_NULL}, // S_FASTDUST7 + {SPR_DBOS, FF_FULLBRIGHT, 2, {NULL}, 6, 1, S_DRIFTEXPLODE2}, // S_DRIFTEXPLODE1 + {SPR_DBOS, FF_FULLBRIGHT|1, 2, {NULL}, 6, 1, S_DRIFTEXPLODE3}, // S_DRIFTEXPLODE2 + {SPR_DBOS, FF_FULLBRIGHT|2, 2, {NULL}, 6, 1, S_DRIFTEXPLODE4}, // S_DRIFTEXPLODE3 + {SPR_DBOS, FF_FULLBRIGHT|3, 2, {NULL}, 6, 1, S_DRIFTEXPLODE1}, // S_DRIFTEXPLODE4 + {SPR_BOST, FF_FULLBRIGHT|FF_ANIMATE, TICRATE, {NULL}, 6, 1, S_BOOSTSMOKESPAWNER}, // S_BOOSTFLAME {SPR_NULL, 0, TICRATE/2, {NULL}, 0, 0, S_NULL}, // S_BOOSTSMOKESPAWNER @@ -15218,6 +15223,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_DRIFTEXPLODE + -1, // doomednum + S_DRIFTEXPLODE1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // 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 + 8, // speed + 32*FRACUNIT, // radius + 64*FRACUNIT, // height + 1, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags + S_NULL // raisestate + }, + { // MT_BOOSTFLAME -1, // doomednum S_BOOSTFLAME, // spawnstate diff --git a/src/info.h b/src/info.h index 78902d297..a20875c68 100644 --- a/src/info.h +++ b/src/info.h @@ -786,6 +786,8 @@ typedef enum sprite SPR_OTFG, + SPR_DBOS, // Drift boost flame + // Xmas-specific sprites that don't fit aboxe SPR_XMS4, SPR_XMS5, @@ -3271,7 +3273,11 @@ typedef enum state S_FASTDUST6, S_FASTDUST7, - // Magnet Burst + // Drift boost effect + S_DRIFTEXPLODE1, + S_DRIFTEXPLODE2, + S_DRIFTEXPLODE3, + S_DRIFTEXPLODE4, // Sneaker boost effect S_BOOSTFLAME, @@ -4664,6 +4670,7 @@ typedef enum mobj_type MT_FASTLINE, MT_FASTDUST, + MT_DRIFTEXPLODE, MT_BOOSTFLAME, MT_BOOSTSMOKE, MT_SNEAKERTRAIL, diff --git a/src/k_kart.c b/src/k_kart.c index ccace01f5..d32927c51 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3202,9 +3202,6 @@ static void K_SpawnDriftSparks(player_t *player) if (leveltime % 2 == 1) return; - if (!P_IsObjectOnGround(player->mo)) - return; - if (!player->kartstuff[k_drift] || (player->kartstuff[k_driftcharge] < ds && !(player->kartstuff[k_driftcharge] < 0))) return; @@ -5861,6 +5858,11 @@ static void K_KartDrift(player_t *player, boolean onground) { if (player->kartstuff[k_driftcharge] < 0 || player->kartstuff[k_driftcharge] >= dsone) { + //mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFTEXPLODE); + //P_SetTarget(&overlay->target, player->mo); + //P_SetScale(overlay, (overlay->destscale = player->mo->scale)); + //K_FlipFromObject(overlay, player->mo); + S_StartSound(player->mo, sfx_s23c); //K_SpawnDashDustRelease(player); @@ -5869,24 +5871,36 @@ static void K_KartDrift(player_t *player, boolean onground) // Stage 0: Yellow sparks if (player->kartstuff[k_driftboost] < 15) player->kartstuff[k_driftboost] = 15; + + //overlay->color = SKINCOLOR_GOLD; + //overlay->fuse = 8; } else if (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo) { // Stage 1: Red sparks if (player->kartstuff[k_driftboost] < 20) player->kartstuff[k_driftboost] = 20; + + //overlay->color = SKINCOLOR_KETCHUP; + //overlay->fuse = 16; } else if (player->kartstuff[k_driftcharge] < dsthree) { // Stage 2: Blue sparks if (player->kartstuff[k_driftboost] < 50) player->kartstuff[k_driftboost] = 50; + + //overlay->color = SKINCOLOR_SAPPHIRE; + //overlay->fuse = 32; } else if (player->kartstuff[k_driftcharge] >= dsthree) { // Stage 3: Rainbow sparks if (player->kartstuff[k_driftboost] < 125) player->kartstuff[k_driftboost] = 125; + + //overlay->color = SKINCOLOR_SILVER; + //overlay->fuse = 120; } } @@ -5933,64 +5947,71 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_aizdriftstrat] = player->kartstuff[k_brakedrift] = 0; player->kartstuff[k_getsparks] = 0; } - else if (player->kartstuff[k_jmp] == 1 && onground && player->kartstuff[k_drift] != 0) + else if (player->kartstuff[k_jmp] == 1 && player->kartstuff[k_drift] != 0) { // Incease/decrease the drift value to continue drifting in that direction fixed_t driftadditive = 24; boolean playsound = false; - if (player->kartstuff[k_drift] >= 1) // Drifting to the left + if (onground) { - player->kartstuff[k_drift]++; - if (player->kartstuff[k_drift] > 5) - player->kartstuff[k_drift] = 5; - - if (player->cmd.driftturn > 0) // Inward - driftadditive += abs(player->cmd.driftturn)/100; - if (player->cmd.driftturn < 0) // Outward - driftadditive -= abs(player->cmd.driftturn)/75; - } - else if (player->kartstuff[k_drift] <= -1) // Drifting to the right - { - player->kartstuff[k_drift]--; - if (player->kartstuff[k_drift] < -5) - player->kartstuff[k_drift] = -5; - - if (player->cmd.driftturn < 0) // Inward - driftadditive += abs(player->cmd.driftturn)/100; - if (player->cmd.driftturn > 0) // Outward - driftadditive -= abs(player->cmd.driftturn)/75; - } - - // Disable drift-sparks until you're going fast enough - if (player->kartstuff[k_getsparks] == 0 - || (player->kartstuff[k_offroad] - && !player->kartstuff[k_invincibilitytimer] - && !player->kartstuff[k_hyudorotimer] - && !EITHERSNEAKER(player))) - driftadditive = 0; - - // Inbetween minspeed and minspeed*2, it'll keep your previous drift-spark state. - if (player->speed > minspeed*2) - { - player->kartstuff[k_getsparks] = 1; - - if (player->kartstuff[k_driftcharge] <= -1) + if (player->kartstuff[k_drift] >= 1) // Drifting to the left { - player->kartstuff[k_driftcharge] = dsone; // Back to red - playsound = true; + player->kartstuff[k_drift]++; + if (player->kartstuff[k_drift] > 5) + player->kartstuff[k_drift] = 5; + + if (player->cmd.driftturn > 0) // Inward + driftadditive += abs(player->cmd.driftturn)/100; + if (player->cmd.driftturn < 0) // Outward + driftadditive -= abs(player->cmd.driftturn)/75; + } + else if (player->kartstuff[k_drift] <= -1) // Drifting to the right + { + player->kartstuff[k_drift]--; + if (player->kartstuff[k_drift] < -5) + player->kartstuff[k_drift] = -5; + + if (player->cmd.driftturn < 0) // Inward + driftadditive += abs(player->cmd.driftturn)/100; + if (player->cmd.driftturn > 0) // Outward + driftadditive -= abs(player->cmd.driftturn)/75; + } + + // Disable drift-sparks until you're going fast enough + if (player->kartstuff[k_getsparks] == 0 + || (player->kartstuff[k_offroad] + && !player->kartstuff[k_invincibilitytimer] + && !player->kartstuff[k_hyudorotimer] + && !EITHERSNEAKER(player))) + driftadditive = 0; + + // Inbetween minspeed and minspeed*2, it'll keep your previous drift-spark state. + if (player->speed > minspeed*2) + { + player->kartstuff[k_getsparks] = 1; + + if (player->kartstuff[k_driftcharge] <= -1) + { + player->kartstuff[k_driftcharge] = dsone; // Back to red + playsound = true; + } + } + else if (player->speed <= minspeed) + { + player->kartstuff[k_getsparks] = 0; + driftadditive = 0; + + if (player->kartstuff[k_driftcharge] >= dsone) + { + player->kartstuff[k_driftcharge] = -1; // Set yellow sparks + playsound = true; + } } } - else if (player->speed <= minspeed) + else { - player->kartstuff[k_getsparks] = 0; driftadditive = 0; - - if (player->kartstuff[k_driftcharge] >= dsone) - { - player->kartstuff[k_driftcharge] = -1; // Set yellow sparks - playsound = true; - } } // This spawns the drift sparks diff --git a/src/p_mobj.c b/src/p_mobj.c index 9f688e369..50bb4009a 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8289,6 +8289,37 @@ void P_MobjThinker(mobj_t *mobj) S_StartSound(mobj, sfx_s3k4e); mobj->health--; break; + case MT_DRIFTEXPLODE: + if (!mobj->target || !mobj->target->health) + { + P_RemoveMobj(mobj); + return; + } + + mobj->angle = mobj->target->angle; + P_TeleportMove(mobj, mobj->target->x + P_ReturnThrustX(mobj, mobj->angle+ANGLE_180, mobj->target->radius), + mobj->target->y + P_ReturnThrustY(mobj, mobj->angle+ANGLE_180, mobj->target->radius), mobj->target->z); + P_SetScale(mobj, mobj->target->scale); + mobj->flags2 ^= MF2_DONTDRAW; +#ifdef HWRENDER + mobj->modeltilt = mobj->target->modeltilt; +#endif + + { + player_t *p = NULL; + if (mobj->target->target && mobj->target->target->player) + p = mobj->target->target->player; + else if (mobj->target->player) + p = mobj->target->player; + + if (p) + { + if (p->kartstuff[k_driftboost] > mobj->movecount) + ; // reset animation + mobj->movecount = p->kartstuff[k_driftboost]; + } + } + break; case MT_BOOSTFLAME: if (!mobj->target || !mobj->target->health) { From fccc4d29375a465c1456e87ce20aff2f35d0f9be Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Mon, 16 Mar 2020 04:24:32 -0400 Subject: [PATCH 21/27] Slow down backwards spikeballs (again) --- src/k_kart.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 64320fb68..05be47651 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3603,11 +3603,11 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map if (dir == -1) { // Shoot backward - mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 - 0x06000000, 0, PROJSPEED/4); - K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 - 0x03000000, 0, PROJSPEED/4); - K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, PROJSPEED/4); - K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 + 0x03000000, 0, PROJSPEED/4); - K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 + 0x06000000, 0, PROJSPEED/4); + mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 - 0x06000000, 0, PROJSPEED/16); + K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 - 0x03000000, 0, PROJSPEED/16); + K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, PROJSPEED/16); + K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 + 0x03000000, 0, PROJSPEED/16); + K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 + 0x06000000, 0, PROJSPEED/16); } else { @@ -3624,7 +3624,7 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map if (dir == -1 && mapthing != MT_SPB) { // Shoot backward - mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, PROJSPEED/2); + mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, PROJSPEED/8); } else { From 9e3a37cdc73a493449621bfdfc5648123021cfb3 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Tue, 17 Mar 2020 18:49:16 -0400 Subject: [PATCH 22/27] Make Ballhog thrown more like normal missiles (For some reason, it used banana toss throwing speeds before) --- src/info.c | 2 +- src/k_kart.c | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/info.c b/src/info.c index 0ecc88fca..09516a75c 100644 --- a/src/info.c +++ b/src/info.c @@ -15982,7 +15982,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_BALLHOG_DEAD, // deathstate S_NULL, // xdeathstate sfx_hogbom, // deathsound - 64*FRACUNIT, // speed + 80*FRACUNIT, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset diff --git a/src/k_kart.c b/src/k_kart.c index 05be47651..13786dba5 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3554,10 +3554,18 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map return NULL; // Figure out projectile speed by game speed - if (missile && mapthing != MT_BALLHOG) // Trying to keep compatability... + if (missile) + { + // Use info->speed for missiles PROJSPEED = FixedMul(mobjinfo[mapthing].speed, FRACUNIT + ((gamespeed-1) * (FRACUNIT/4))); + } else + { + // Use pre-determined speed for tossing PROJSPEED = (82 + ((gamespeed-1) * 14)) * FRACUNIT; // Avg Speed is 41 in Normal + } + + // Scale to map size PROJSPEED = FixedMul(PROJSPEED, mapobjectscale); if (altthrow) @@ -3603,11 +3611,11 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map if (dir == -1) { // Shoot backward - mo = K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 - 0x06000000, 0, PROJSPEED/16); - K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 - 0x03000000, 0, PROJSPEED/16); - K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, PROJSPEED/16); - K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 + 0x03000000, 0, PROJSPEED/16); - K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180 + 0x06000000, 0, PROJSPEED/16); + mo = K_SpawnKartMissile(player->mo, mapthing, (player->mo->angle + ANGLE_180) - 0x06000000, 0, PROJSPEED/8); + K_SpawnKartMissile(player->mo, mapthing, (player->mo->angle + ANGLE_180) - 0x03000000, 0, PROJSPEED/8); + K_SpawnKartMissile(player->mo, mapthing, player->mo->angle + ANGLE_180, 0, PROJSPEED/8); + K_SpawnKartMissile(player->mo, mapthing, (player->mo->angle + ANGLE_180) + 0x03000000, 0, PROJSPEED/8); + K_SpawnKartMissile(player->mo, mapthing, (player->mo->angle + ANGLE_180) + 0x06000000, 0, PROJSPEED/8); } else { From 4b2b116481b81de7187693d1303ef12810e11457 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Tue, 17 Mar 2020 18:55:15 -0400 Subject: [PATCH 23/27] Try using GameSpeedScalar for thrown item scaling between game speeds, rather than arbritrary values In Hard mode: Spikeballs will be thrown slightly less with this code change, while Bananas will be thrown slightly farther. That said, the difference is so small that it's very likely not noticable, it just makes the code nicer looking & more consistent :P --- src/k_kart.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 13786dba5..319f7a77f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3557,12 +3557,12 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map if (missile) { // Use info->speed for missiles - PROJSPEED = FixedMul(mobjinfo[mapthing].speed, FRACUNIT + ((gamespeed-1) * (FRACUNIT/4))); + PROJSPEED = FixedMul(mobjinfo[mapthing].speed, K_GetKartGameSpeedScalar(gamespeed)); } else { // Use pre-determined speed for tossing - PROJSPEED = (82 + ((gamespeed-1) * 14)) * FRACUNIT; // Avg Speed is 41 in Normal + PROJSPEED = FixedMul(82 << FRACBITS, K_GetKartGameSpeedScalar(gamespeed)); } // Scale to map size From 40e01fb71cc10b14a89b24596d5041df45bc69c7 Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Thu, 19 Mar 2020 22:35:07 -0400 Subject: [PATCH 24/27] Increase thrust of destroyed items Roughly matches what it was supposed to look like before gravity was increased --- src/p_map.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index 9e34e04d9..9b574f315 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -810,7 +810,7 @@ static boolean PIT_CheckThing(mobj_t *thing) S_StartSound(tmthing, tmthing->info->deathsound); P_KillMobj(tmthing, thing, thing); - P_SetObjectMomZ(tmthing, 8*FRACUNIT, false); + P_SetObjectMomZ(tmthing, 12*FRACUNIT, false); P_InstaThrust(tmthing, R_PointToAngle2(thing->x, thing->y, tmthing->x, tmthing->y)+ANGLE_90, 16*FRACUNIT); } else if (thing->type == MT_ORBINAUT || thing->type == MT_JAWZ || thing->type == MT_JAWZ_DUD @@ -827,7 +827,7 @@ static boolean PIT_CheckThing(mobj_t *thing) S_StartSound(thing, thing->info->deathsound); P_KillMobj(thing, tmthing, tmthing); - P_SetObjectMomZ(thing, 8*FRACUNIT, false); + P_SetObjectMomZ(thing, 12*FRACUNIT, false); P_InstaThrust(thing, R_PointToAngle2(tmthing->x, tmthing->y, thing->x, thing->y)+ANGLE_90, 16*FRACUNIT); P_SpawnMobj(thing->x/2 + tmthing->x/2, thing->y/2 + tmthing->y/2, thing->z/2 + tmthing->z/2, MT_ITEMCLASH); @@ -841,7 +841,7 @@ static boolean PIT_CheckThing(mobj_t *thing) S_StartSound(tmthing, tmthing->info->deathsound); P_KillMobj(tmthing, thing, thing); - P_SetObjectMomZ(tmthing, 8*FRACUNIT, false); + P_SetObjectMomZ(tmthing, 12*FRACUNIT, false); P_InstaThrust(tmthing, R_PointToAngle2(thing->x, thing->y, tmthing->x, tmthing->y)+ANGLE_90, 16*FRACUNIT); } else if (thing->type == MT_SSMINE_SHIELD || thing->type == MT_SSMINE) @@ -855,7 +855,7 @@ static boolean PIT_CheckThing(mobj_t *thing) S_StartSound(tmthing, tmthing->info->deathsound); P_KillMobj(tmthing, thing, thing); - P_SetObjectMomZ(tmthing, 8*FRACUNIT, false); + P_SetObjectMomZ(tmthing, 12*FRACUNIT, false); P_InstaThrust(tmthing, R_PointToAngle2(thing->x, thing->y, tmthing->x, tmthing->y)+ANGLE_90, 16*FRACUNIT); // Bomb death @@ -975,7 +975,7 @@ static boolean PIT_CheckThing(mobj_t *thing) S_StartSound(tmthing, tmthing->info->deathsound); P_KillMobj(tmthing, thing, thing); - P_SetObjectMomZ(tmthing, 8*FRACUNIT, false); + P_SetObjectMomZ(tmthing, 12*FRACUNIT, false); P_InstaThrust(tmthing, R_PointToAngle2(thing->x, thing->y, tmthing->x, tmthing->y)+ANGLE_90, 16*FRACUNIT); } else if (thing->type == MT_BANANA || thing->type == MT_BANANA_SHIELD @@ -992,7 +992,7 @@ static boolean PIT_CheckThing(mobj_t *thing) S_StartSound(thing, thing->info->deathsound); P_KillMobj(thing, tmthing, tmthing); - P_SetObjectMomZ(thing, 8*FRACUNIT, false); + P_SetObjectMomZ(thing, 12*FRACUNIT, false); P_InstaThrust(thing, R_PointToAngle2(tmthing->x, tmthing->y, thing->x, thing->y)+ANGLE_90, 16*FRACUNIT); P_SpawnMobj(thing->x/2 + tmthing->x/2, thing->y/2 + tmthing->y/2, thing->z/2 + tmthing->z/2, MT_ITEMCLASH); @@ -1006,7 +1006,7 @@ static boolean PIT_CheckThing(mobj_t *thing) S_StartSound(tmthing, tmthing->info->deathsound); P_KillMobj(tmthing, thing, thing); - P_SetObjectMomZ(tmthing, 8*FRACUNIT, false); + P_SetObjectMomZ(tmthing, 12*FRACUNIT, false); P_InstaThrust(tmthing, R_PointToAngle2(thing->x, thing->y, tmthing->x, tmthing->y)+ANGLE_90, 16*FRACUNIT); } @@ -1052,7 +1052,7 @@ static boolean PIT_CheckThing(mobj_t *thing) S_StartSound(thing, thing->info->deathsound); P_KillMobj(thing, tmthing, tmthing); - P_SetObjectMomZ(thing, 8*FRACUNIT, false); + P_SetObjectMomZ(thing, 12*FRACUNIT, false); P_InstaThrust(thing, R_PointToAngle2(tmthing->x, tmthing->y, thing->x, thing->y)+ANGLE_90, 16*FRACUNIT); } @@ -1103,7 +1103,7 @@ static boolean PIT_CheckThing(mobj_t *thing) S_StartSound(thing, thing->info->deathsound); P_KillMobj(thing, tmthing, tmthing); - P_SetObjectMomZ(thing, 8*FRACUNIT, false); + P_SetObjectMomZ(thing, 12*FRACUNIT, false); P_InstaThrust(thing, R_PointToAngle2(tmthing->x, tmthing->y, thing->x, thing->y)+ANGLE_90, 16*FRACUNIT); } else if (thing->type == MT_BANANA_SHIELD || thing->type == MT_BANANA @@ -1131,7 +1131,7 @@ static boolean PIT_CheckThing(mobj_t *thing) S_StartSound(thing, thing->info->deathsound); P_KillMobj(thing, tmthing, tmthing); - P_SetObjectMomZ(thing, 8*FRACUNIT, false); + P_SetObjectMomZ(thing, 12*FRACUNIT, false); P_InstaThrust(thing, R_PointToAngle2(tmthing->x, tmthing->y, thing->x, thing->y)+ANGLE_90, 16*FRACUNIT); } else if (thing->type == MT_SSMINE_SHIELD || thing->type == MT_SSMINE) From 46049dba408c003cdad5a6682dddafff3acb55db Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Thu, 19 Mar 2020 22:52:11 -0400 Subject: [PATCH 25/27] Fix drift spark weirdness in mobjscale maps --- src/k_kart.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index d32927c51..1346a09fd 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3573,7 +3573,7 @@ void K_SpawnDraftDust(mobj_t *mo) void K_DriftDustHandling(mobj_t *spawner) { angle_t anglediff; - const INT16 spawnrange = spawner->radius>>FRACBITS; + const INT16 spawnrange = spawner->radius >> FRACBITS; if (!P_IsObjectOnGround(spawner) || leveltime % 2 != 0) return; @@ -3612,8 +3612,8 @@ void K_DriftDustHandling(mobj_t *spawner) if (anglediff > ANG10*4) // Trying to turn further than 40 degrees { - fixed_t spawnx = P_RandomRange(-spawnrange, spawnrange) * spawner->scale; - fixed_t spawny = P_RandomRange(-spawnrange, spawnrange) * spawner->scale; + fixed_t spawnx = P_RandomRange(-spawnrange, spawnrange) << FRACBITS; + fixed_t spawny = P_RandomRange(-spawnrange, spawnrange) << FRACBITS; INT32 speedrange = 2; mobj_t *dust = P_SpawnMobj(spawner->x + spawnx, spawner->y + spawny, spawner->z, MT_DRIFTDUST); dust->momx = FixedMul(spawner->momx + (P_RandomRange(-speedrange, speedrange) * spawner->scale), 3*(spawner->scale)/4); From 1dd95f5e3b0accdb416f8dff5babf04b9ad4758d Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 21 Mar 2020 12:53:33 -0700 Subject: [PATCH 26/27] gr_shearing doesn't exist in master! --- src/p_user.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index d07b71390..031a607c1 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7503,7 +7503,11 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall } pitch = thiscam->pitch + (angle_t)FixedMul(pitch - thiscam->pitch, camspeed/4); - if (rendermode == render_opengl && !cv_grshearing.value) + if (rendermode == render_opengl +#ifdef GL_SHADERS/* just so we can't possibly forget about it */ + && !cv_grshearing.value +#endif + ) distxy = FixedMul(dist, FINECOSINE((pitch>>ANGLETOFINESHIFT) & FINEMASK)); else distxy = dist; From 668f80a8ea1a7aa7d3aabb3367fad91e51ef22ed Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Sat, 21 Mar 2020 18:47:44 -0400 Subject: [PATCH 27/27] Properly scale... --- src/k_kart.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 1346a09fd..6cdbfa547 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3616,8 +3616,8 @@ void K_DriftDustHandling(mobj_t *spawner) fixed_t spawny = P_RandomRange(-spawnrange, spawnrange) << FRACBITS; INT32 speedrange = 2; mobj_t *dust = P_SpawnMobj(spawner->x + spawnx, spawner->y + spawny, spawner->z, MT_DRIFTDUST); - dust->momx = FixedMul(spawner->momx + (P_RandomRange(-speedrange, speedrange) * spawner->scale), 3*(spawner->scale)/4); - dust->momy = FixedMul(spawner->momy + (P_RandomRange(-speedrange, speedrange) * spawner->scale), 3*(spawner->scale)/4); + dust->momx = FixedMul(spawner->momx + (P_RandomRange(-speedrange, speedrange) * spawner->scale), 3*FRACUNIT/4); + dust->momy = FixedMul(spawner->momy + (P_RandomRange(-speedrange, speedrange) * spawner->scale), 3*FRACUNIT/4); dust->momz = P_MobjFlip(spawner) * (P_RandomRange(1, 4) * (spawner->scale)); P_SetScale(dust, spawner->scale/2); dust->destscale = spawner->scale * 3;