From e72b2921fb59bdc3e56e7a3c14171461521eb85a Mon Sep 17 00:00:00 2001 From: ZTsukei Date: Thu, 11 May 2017 20:49:17 -0400 Subject: [PATCH] Can get items during spin-outs now Collision now correctly ignores boo and squish Collision now ignores star --- src/doomdef.h | 10 ++++---- src/k_kart.c | 65 +++++++++++++++++++++++++++++++++------------------ src/p_enemy.c | 14 +++++------ src/p_inter.c | 4 ++-- src/p_mobj.c | 17 ++++++++++++++ 5 files changed, 73 insertions(+), 37 deletions(-) diff --git a/src/doomdef.h b/src/doomdef.h index 38d570a4..95fe2cb0 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -143,16 +143,16 @@ extern FILE *logstream; #define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3 #ifdef DEVELOP #define VERSION 103 // Game version -#define SUBVERSION 13 // more precise version number +#define SUBVERSION 14 // more precise version number #define VERSIONSTRING "Development EXE" -#define VERSIONSTRINGW "v1.3.13" +#define VERSIONSTRINGW "v1.3.14" // most interface strings are ignored in development mode. // we use comprevision and compbranch instead. #else #define VERSION 103 // Game version -#define SUBVERSION 13 // more precise version number -#define VERSIONSTRING "DevEXE v1.3.13" -#define VERSIONSTRINGW L"v1.3.13" +#define SUBVERSION 14 // more precise version number +#define VERSIONSTRING "DevEXE v1.3.14" +#define VERSIONSTRINGW L"v1.3.14" // Hey! If you change this, add 1 to the MODVERSION below! // Otherwise we can't force updates! #endif diff --git a/src/k_kart.c b/src/k_kart.c index ea792bbc..b8665c4e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -308,6 +308,7 @@ void K_RegisterKartStuff(void) #define NUMKARTODDS 40 // Ugly ol' 3D arrays +/* static INT32 K_KartItemOddsPosition_Retro[MAXPLAYERS][NUMKARTITEMS][MAXPLAYERS] = { // 1 Active Player @@ -662,14 +663,15 @@ static INT32 K_KartItemOddsPosition_Retro[MAXPLAYERS][NUMKARTITEMS][MAXPLAYERS] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 8, 11, 0, 0 } // Lightning } //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t 13t 14t 15t 16t // }; +*/ // Less ugly 2D arrays static INT32 K_KartItemOddsDistance_Retro[NUMKARTITEMS][9] = { - /*P-Odds 0 1 2 3 4 5 6 7 8 + //P-Odds 0 1 2 3 4 5 6 7 8 /*Magnet*/ { 0, 1, 2, 0, 0, 0, 0, 0, 0 }, // Magnet /*Boo*/ { 0, 0, 2, 2, 1, 0, 0, 0, 0 }, // Boo - /*Mushroom*/ {20, 0, 0, 3, 5, 5, 0, 0, 0 }, // Mushroom + /*Mushroom*/ { 1, 0, 0, 3, 5, 5, 0, 0, 0 }, // Mushroom /*Triple Mushroom*/ { 0, 0, 0, 1, 3, 7, 6, 4, 0 }, // Triple Mushroom /*Mega Mushroom*/ { 0, 0, 0, 0, 1, 2, 1, 0, 0 }, // Mega Mushroom /*Gold Mushroom*/ { 0, 0, 0, 0, 0, 1, 6, 8,12 }, // Gold Mushroom @@ -678,7 +680,7 @@ static INT32 K_KartItemOddsDistance_Retro[NUMKARTITEMS][9] = /*Triple Banana*/ { 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // Triple Banana /*Fake Item*/ { 0, 4, 3, 2, 0, 0, 0, 0, 0 }, // Fake Item /*Banana*/ { 0, 9, 6, 2, 1, 0, 0, 0, 0 }, // Banana - /*Green Shell*/ { 0, 6, 5, 3, 2, 0, 0, 0, 0 }, // Green Shell + /*Green Shell*/ { 1, 6, 5, 3, 2, 0, 0, 0, 0 }, // Green Shell /*Red Shell*/ { 0, 0, 1, 4, 3, 1, 0, 0, 0 }, // Red Shell /*Triple Green Shell*/ { 0, 0, 0, 1, 1, 1, 0, 0, 0 }, // Triple Green Shell /*Bob-omb*/ { 0, 0, 0, 1, 1, 0, 0, 0, 0 }, // Bob-omb @@ -779,7 +781,7 @@ static void K_KartGetItemResult(player_t *player, fixed_t getitem, boolean retro \param player player object passed from P_KartPlayerThink \return void -*/ +/ static void K_KartItemRouletteByPosition(player_t *player, ticcmd_t *cmd) { INT32 i; @@ -864,7 +866,7 @@ static void K_KartItemRouletteByPosition(player_t *player, ticcmd_t *cmd) else CONS_Printf("ERROR: P_KartItemRoulette - There were no choices given by the roulette (ppos = %d).\n", ppos); //} - /*else if (gametype == GT_NEO) + //else if (gametype == GT_NEO) { if (cv_magnet.value) SETITEMRESULT(ppos, pingame, 1) // Electro-Shield if (cv_boo.value) SETITEMRESULT(ppos, pingame, 2) // S3K Ghost @@ -895,7 +897,7 @@ static void K_KartItemRouletteByPosition(player_t *player, ticcmd_t *cmd) } else CONS_Printf("ERROR: P_KartItemRoulette - There's no applicable game type!\n"); - */ + // #undef SETITEMRESULT @@ -903,7 +905,7 @@ static void K_KartItemRouletteByPosition(player_t *player, ticcmd_t *cmd) if (P_IsLocalPlayer(player)) S_StartSound(NULL, sfx_mkitmF); -} +}*/ //} @@ -976,9 +978,6 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd) else if (pdis <= 11000) useodds = 7; else useodds = 8; - CONS_Printf("pdis = %d\n", pdis); - CONS_Printf("useodds = %d\n", useodds); - #define SETITEMRESULT(pos, itemnum) \ for (chance = 0; chance < K_KartItemOddsDistance_Retro[itemnum-1][pos]; chance++) spawnchance[numchoices++] = itemnum @@ -1082,6 +1081,7 @@ void K_SwapMomentum(mobj_t *mobj1, mobj_t *mobj2, boolean bounce) mobj2->momx = meanX + FixedMul(deltax2, a); mobj2->momy = meanY + FixedMul(deltay2, a); } + /* if (mobj1->player && mobj2->player) // Weight is applicable if both are players { fixed_t m1w = 15 + mobj1->player->kartweight; @@ -1093,12 +1093,12 @@ void K_SwapMomentum(mobj_t *mobj1, mobj_t *mobj2, boolean bounce) mobj1->momy = FixedMul(mobj2->momy, FixedDiv(m2w*FRACUNIT, m1w*FRACUNIT)); } else - { + {*/ newx = mobj1->momx; newy = mobj1->momy; mobj1->momx = mobj2->momx; mobj1->momy = mobj2->momy; - } + //} mobj2->momx = newx; mobj2->momy = newy; if (bounce == true) // Perform a Goomba Bounce. @@ -1122,13 +1122,15 @@ void K_KartBouncer(void) if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo) && !players[i].kartstuff[k_growshrinktimer] && !players[i].kartstuff[k_squishedtimer] - && !players[i].kartstuff[k_bootaketimer]) + && !players[i].kartstuff[k_bootaketimer] + && !players[i].kartstuff[k_startimer]) { for (j = i+1; j < MAXPLAYERS; j++) if (playeringame[j] && players[j].mo && !P_MobjWasRemoved(players[j].mo) - && !players[i].kartstuff[k_squishedtimer] + && !players[j].kartstuff[k_squishedtimer] && !players[j].kartstuff[k_growshrinktimer] - && !players[i].kartstuff[k_bootaketimer]) + && !players[j].kartstuff[k_bootaketimer] + && !players[j].kartstuff[k_startimer]) { if (players[j].mo == players[i].mo) break; @@ -1421,7 +1423,20 @@ static fixed_t K_GetKartBoostPower(player_t *player, boolean speed) if (player->kartstuff[k_mushroomtimer]) { // Mushroom if (speed) - boostvalue = max(boostvalue, FRACUNIT/2); // + 50% + { + switch (cv_kartcc.value) + { + case 50: + boostvalue = max(boostvalue, 53740+768); + break; + case 150: + boostvalue = max(boostvalue, 17294+768); + break; + default: + boostvalue = max(boostvalue, 32768); + break; + } + } else boostvalue = max(boostvalue, 8*FRACUNIT); // + 800% } @@ -3453,23 +3468,27 @@ static void K_DrawKartTripleItem(void) else*/ //{ thisitem = stplyr->kartstuff[k_triplebanana]; - if (thisitem & 1) localpatch = kp_singlebananaicon; + if (thisitem & 4) localpatch = kp_triplebananaicon; else if (thisitem & 2) localpatch = kp_doublebananaicon; - else if (thisitem & 4) localpatch = kp_triplebananaicon; + else if (thisitem & 1) localpatch = kp_singlebananaicon; thisitem = stplyr->kartstuff[k_triplegreenshell]; - if (thisitem & 1) localpatch = kp_singlegreenshellicon; + if (thisitem & 4) localpatch = kp_triplegreenshellicon; else if (thisitem & 2) localpatch = kp_doublegreenshellicon; - else if (thisitem & 4) localpatch = kp_triplegreenshellicon; + else if (thisitem & 1) localpatch = kp_singlegreenshellicon; thisitem = stplyr->kartstuff[k_tripleredshell]; - if (thisitem & 1) localpatch = kp_singleredshellicon; + if (thisitem & 4) localpatch = kp_tripleredshellicon; else if (thisitem & 2) localpatch = kp_doubleredshellicon; - else if (thisitem & 4) localpatch = kp_tripleredshellicon; + else if (thisitem & 1) localpatch = kp_singleredshellicon; + + if (stplyr->kartstuff[k_banana] & 1) localpatch = kp_singlebananaicon; + if (stplyr->kartstuff[k_greenshell] & 1) localpatch = kp_singlegreenshellicon; + if (stplyr->kartstuff[k_redshell] & 1) localpatch = kp_singleredshellicon; //} if (localpatch != kp_nodraw) - V_DrawScaledPatch(TRIP_X, STRINGY(TRIP_Y), V_SNAPTORIGHT|V_TRANSLUCENT, localpatch); + V_DrawScaledPatch(TRIP_X, STRINGY(TRIP_Y), V_SNAPTOBOTTOM, localpatch); } static void K_drawKartTimestamp(void) diff --git a/src/p_enemy.c b/src/p_enemy.c index f515a32b..a1058cc0 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8121,12 +8121,12 @@ void A_ItemPop(mobj_t *actor) return; } - if (actor->target && actor->target->player - && !(actor->target->player->kartstuff[k_greenshell] & 2 || actor->target->player->kartstuff[k_triplegreenshell] & 8 - || actor->target->player->kartstuff[k_redshell] & 2 || actor->target->player->kartstuff[k_tripleredshell] & 8 - || actor->target->player->kartstuff[k_banana] & 2 || actor->target->player->kartstuff[k_triplebanana] & 8 - || actor->target->player->kartstuff[k_fakeitem] & 2 || actor->target->player->kartstuff[k_magnet] - || actor->target->player->kartstuff[k_bobomb] & 2 || actor->target->player->kartstuff[k_blueshell] + if (actor->target && actor->target->player // These used to be &2's and &8's for box only, but are now universal. + && !(actor->target->player->kartstuff[k_greenshell] || actor->target->player->kartstuff[k_triplegreenshell] + || actor->target->player->kartstuff[k_redshell] || actor->target->player->kartstuff[k_tripleredshell] + || actor->target->player->kartstuff[k_banana] || actor->target->player->kartstuff[k_triplebanana] + || actor->target->player->kartstuff[k_fakeitem] || actor->target->player->kartstuff[k_magnet] + || actor->target->player->kartstuff[k_bobomb] || actor->target->player->kartstuff[k_blueshell] || actor->target->player->kartstuff[k_mushroom] || actor->target->player->kartstuff[k_fireflower] || actor->target->player->kartstuff[k_star] || actor->target->player->kartstuff[k_goldshroom] || actor->target->player->kartstuff[k_lightning] || actor->target->player->kartstuff[k_megashroom] @@ -8136,7 +8136,7 @@ void A_ItemPop(mobj_t *actor) || actor->target->player->kartstuff[k_growshrinktimer] > 1 || actor->target->player->kartstuff[k_goldshroomtimer])) actor->target->player->kartstuff[k_itemroulette] = 1; - else if(cv_debug && !(actor->target && actor->target->player)) + else if (cv_debug && !(actor->target && actor->target->player)) CONS_Printf("ERROR: Powerup has no target!\n"); remains->flags &= ~MF_AMBUSH; diff --git a/src/p_inter.c b/src/p_inter.c index 5884a7c0..b1a7bd36 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -147,8 +147,8 @@ boolean P_CanPickupItem(player_t *player, boolean weapon) if (player->bot && weapon) return false; - if (player->powers[pw_flashing] > (flashingtics/4)*3 && player->powers[pw_flashing] <= flashingtics) - return false; + //if (player->powers[pw_flashing] > (flashingtics/4)*3 && player->powers[pw_flashing] <= flashingtics) + // return false; return true; } diff --git a/src/p_mobj.c b/src/p_mobj.c index ec378e40..deef7431 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2305,7 +2305,24 @@ static boolean P_ZMovement(mobj_t *mo) case MT_FLINGCOIN: case MT_FLINGRANDOMITEM: case MT_FLINGEMERALD: + // SRB2kart stuff that should die in pits case MT_RANDOMITEM: + case MT_BANANASHIELD: + case MT_TRIPLEBANANASHIELD1: + case MT_TRIPLEBANANASHIELD2: + case MT_TRIPLEBANANASHIELD3: + case MT_BANANAITEM: + case MT_GREENSHIELD: + case MT_TRIPLEGREENSHIELD1: + case MT_TRIPLEGREENSHIELD2: + case MT_TRIPLEGREENSHIELD3: + case MT_GREENITEM: + case MT_REDSHIELD: + case MT_TRIPLEREDSHIELD1: + case MT_TRIPLEREDSHIELD2: + case MT_TRIPLEREDSHIELD3: + case MT_REDITEM: + case MT_REDITEMDUD: // Remove flinged stuff from death pits. if (P_CheckDeathPitCollide(mo)) {