From c806b88c87adbed1e0252a46e6d82c741db0ddb0 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 24 Sep 2018 09:49:53 -0400 Subject: [PATCH 01/80] Version number update part 1 - Change from "v1.4.8" to "v1.0.0" - Remove the random additional "DevEXE" moniker outside of DEVELOP mode - For some reason, the version number of "1.4.8" was also set separately in DEVELOP mode, even though in vanilla it's intended to always be 0. Changed this back. TODO (*after* feature freeze): - Request and update MODID - Undef DEVELOP mode --- src/doomdef.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/doomdef.h b/src/doomdef.h index b5519f6fd..97f0d325c 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -142,17 +142,17 @@ 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 104 // Game version -#define SUBVERSION 8 // more precise version number +#define VERSION 0 // Game version +#define SUBVERSION 0 // more precise version number #define VERSIONSTRING "Development EXE" -#define VERSIONSTRINGW "v1.4.8" +#define VERSIONSTRINGW L"Development EXE" // most interface strings are ignored in development mode. // we use comprevision and compbranch instead. #else -#define VERSION 104 // Game version -#define SUBVERSION 8 // more precise version number -#define VERSIONSTRING "DevEXE v1.4.8" -#define VERSIONSTRINGW L"v1.4.8" +#define VERSION 100 // Game version +#define SUBVERSION 0 // more precise version number +#define VERSIONSTRING "v1.0.0" +#define VERSIONSTRINGW L"v1.0.0" // Hey! If you change this, add 1 to the MODVERSION below! // Otherwise we can't force updates! #endif From 94ddcf068f9be53e0dce3efdc5f74ccf5a89cf1d Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 24 Sep 2018 09:53:11 -0400 Subject: [PATCH 02/80] Say "mb.srb2.org" instead of "the forums on srb2.org" :V --- src/doomdef.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/doomdef.h b/src/doomdef.h index 97f0d325c..4c81ad534 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -176,7 +176,7 @@ extern FILE *logstream; // Please change to apply to your modification (we don't want everyone asking where your mod is on SRB2.org!). #define UPDATE_ALERT_STRING \ "A new update is available for SRB2Kart.\n"\ -"Please visit the forums on SRB2.org to download it.\n"\ +"Please visit mb.srb2.org to download it.\n"\ "\n"\ "You are using version: %s\n"\ "The newest version is: %s\n"\ @@ -193,7 +193,7 @@ extern FILE *logstream; // Generally less filled with newlines, since Windows gives you lots more room to work with. #define UPDATE_ALERT_STRING_CONSOLE \ "A new update is available for SRB2Kart.\n"\ -"Please visit the forums on SRB2.org to download it.\n"\ +"Please visit mb.srb2.org to download it.\n"\ "\n"\ "You are using version: %s\n"\ "The newest version is: %s\n"\ From 45e6162d40a31bb32d3b184ce45e876402d39f8b Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 24 Sep 2018 09:56:02 -0400 Subject: [PATCH 03/80] Prefix with Kart --- src/doomdef.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/doomdef.h b/src/doomdef.h index 4c81ad534..dcbd07750 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -151,8 +151,8 @@ extern FILE *logstream; #else #define VERSION 100 // Game version #define SUBVERSION 0 // more precise version number -#define VERSIONSTRING "v1.0.0" -#define VERSIONSTRINGW L"v1.0.0" +#define VERSIONSTRING "Kart v1.0.0" +#define VERSIONSTRINGW L"Kart v1.0.0" // Hey! If you change this, add 1 to the MODVERSION below! // Otherwise we can't force updates! #endif From 0a96849f26c45fa1bc052bfd4976dac64f84fcdd Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 1 Oct 2018 16:24:38 -0400 Subject: [PATCH 04/80] MODID acquired DEVELOP and USE_PATCH_KART undef'd as well --- src/doomdef.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/doomdef.h b/src/doomdef.h index dcbd07750..31a32a6c1 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -140,7 +140,7 @@ extern FILE *logstream; #endif -#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3 +//#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 0 // Game version #define SUBVERSION 0 // more precise version number @@ -162,7 +162,7 @@ extern FILE *logstream; //#define USE_PATCH_DTA // Kart has it's own, as well. -#define USE_PATCH_KART +//#define USE_PATCH_KART // Modification options // If you want to take advantage of the Master Server's ability to force clients to update @@ -211,7 +211,8 @@ extern FILE *logstream; // The Modification ID; must be obtained from Rob ( https://mb.srb2.org/private.php?do=newpm&u=546 ). // DO NOT try to set this otherwise, or your modification will be unplayable through the Master Server. // "12" is the default mod ID for version 2.1 -#define MODID 12 +// "17" is the 2.1 Kart's mod ID +#define MODID 17 // The Modification Version, starting from 1. Do not follow your version string for this, // it's only for detection of the version the player is using so the MS can alert them of an update. From c5436ee2e5247dd1d9fac08e5e0e82ff2ea5fa9c Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 17 Oct 2018 20:30:34 -0400 Subject: [PATCH 05/80] Add more hash stuff UNFINISHED, still need to add in legitimate hashes for non-CMake builds when we've finalized the content. --- assets/CMakeLists.txt | 7 ++++--- src/config.h.in | 26 +++++++++++++++++++------- src/d_main.c | 4 ++-- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt index 764415976..dae68cf75 100644 --- a/assets/CMakeLists.txt +++ b/assets/CMakeLists.txt @@ -3,8 +3,9 @@ # MD5 generation set(SRB2_ASSET_ALL ${CMAKE_CURRENT_SOURCE_DIR}/srb2.srb - ${CMAKE_CURRENT_SOURCE_DIR}/chars.kart + ${CMAKE_CURRENT_SOURCE_DIR}/patch.dta ${CMAKE_CURRENT_SOURCE_DIR}/gfx.kart + ${CMAKE_CURRENT_SOURCE_DIR}/chars.kart ${CMAKE_CURRENT_SOURCE_DIR}/maps.kart ${CMAKE_CURRENT_SOURCE_DIR}/sounds.kart ${CMAKE_CURRENT_SOURCE_DIR}/music.dta @@ -13,10 +14,10 @@ set(SRB2_ASSET_ALL set(SRB2_ASSET_HASHED srb2.srb - chars.kart + patch.dta gfx.kart + chars.kart maps.kart - sounds.kart ) foreach(SRB2_ASSET ${SRB2_ASSET_HASHED}) diff --git a/src/config.h.in b/src/config.h.in index 22a0dfa01..68c29782d 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -11,14 +11,20 @@ #ifdef CMAKECONFIG +// Base SRB2 hashes #define ASSET_HASH_SRB2_SRB "${SRB2_ASSET_srb2.srb_HASH}" -#define ASSET_HASH_PLAYER_DTA "${SRB2_ASSET_player.dta_HASH}" -#define ASSET_HASH_RINGS_DTA "${SRB2_ASSET_rings.dta_HASH}" -#define ASSET_HASH_ZONES_DTA "${SRB2_ASSET_zones.dta_HASH}" #ifdef USE_PATCH_DTA #define ASSET_HASH_PATCH_DTA "${SRB2_ASSET_patch.dta_HASH}" #endif +// SRB2Kart-specific hashes +#define ASSET_HASH_GFX_KART "${SRB2_ASSET_gfx.kart_HASH}" +#define ASSET_HASH_CHARS_KART "${SRB2_ASSET_chars.kart_HASH}" +#define ASSET_HASH_MAPS_KART "${SRB2_ASSET_maps.kart_HASH}" +#ifdef USE_PATCH_KART +#define ASSET_HASH_PATCH_KART "${SRB2_ASSET_patch.kart_HASH}" +#endif + #define SRB2_COMP_REVISION "${SRB2_COMP_REVISION}" #define SRB2_COMP_BRANCH "${SRB2_COMP_BRANCH}" #define SRB2_GIT_DESCRIBE "${SRB2_GIT_DESCRIBE}" @@ -32,14 +38,20 @@ * YYYY MM DD * Last updated 2017 / 02 / 20 */ -#define ASSET_HASH_SRB2_SRB "c1b9577687f8a795104aef4600720ea7" -#define ASSET_HASH_GFX_DTA "ff653bb9c0dcb685fb7c1c5880bcaff1" -#define ASSET_HASH_CHARS_DTA "24c2641472bc187980eedc3c86691863" -#define ASSET_HASH_MAPS_DTA "13db5d4427f568f1c8f0599f2d14a7aa" +// Base SRB2 hashes +#define ASSET_HASH_SRB2_SRB "c1b9577687f8a795104aef4600720ea7" #ifdef USE_PATCH_DTA #define ASSET_HASH_PATCH_DTA "dbbf8bc6121618ee3be2d5b14650429b" #endif +// SRB2Kart-specific hashes +#define ASSET_HASH_GFX_KART "00000000000000000000000000000000" +#define ASSET_HASH_CHARS_KART "00000000000000000000000000000000" +#define ASSET_HASH_MAPS_KART "00000000000000000000000000000000" +#ifdef USE_PATCH_KART +#define ASSET_HASH_PATCH_KART "00000000000000000000000000000000" +#endif + #endif #endif diff --git a/src/d_main.c b/src/d_main.c index e56a631a2..e5fe67f13 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1263,9 +1263,9 @@ void D_SRB2Main(void) #ifdef USE_PATCH_DTA mainwads++; // patch.dta #endif - mainwads++; // gfx.kart + mainwads++; // gfx.kart mainwads++; // chars.kart - mainwads++; // maps.kart + mainwads++; // maps.kart mainwads++; // sounds.kart #ifdef USE_PATCH_KART mainwads++; // patch.kart From 752711479cb7ecfdb3bb1f84d37201800bfe9dcb Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 22 Oct 2018 00:29:17 +0100 Subject: [PATCH 06/80] Initial commit, revert this before merging the branch: Make it so it uses a seperate copy of gfx.kart with the Lua lumps hardcoded taken out, for easier work without conflict. --- src/d_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_main.c b/src/d_main.c index e1bcce8c6..b38cdb01a 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -953,7 +953,7 @@ static void IdentifyVersion(void) } // SRB2kart - Add graphics (temp) // The command for md5 checks is "W_VerifyFileMD5" - looks for ASSET_HASH_SRB2_SRB in config.h.in - D_AddFile(va(pandf,srb2waddir,"gfx.kart")); + D_AddFile(va(pandf,srb2waddir,"gfxHC.kart")); // temporary, don't let this line get merged D_AddFile(va(pandf,srb2waddir,"chars.kart")); D_AddFile(va(pandf,srb2waddir,"maps.kart")); //D_AddFile(va(pandf,srb2waddir,"sounds.kart")); From 11a3eb51221b8194564b839ceb4d81c8f68715d5 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 22 Oct 2018 00:34:47 +0100 Subject: [PATCH 07/80] Hardcoding start! toast's stuff specifically. * Marble Zone! * Torch decoration. * Incense burner decoration. * CD Special Stage 1! * The UFO, now with improved death animation! * Turns out I duplicated sounds that already existed in sounds.kart. When we touch up the files later, yalls can remove both `DSFUFOx`'s from it. --- src/dehacked.c | 20 +++++++ src/info.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++++- src/info.h | 23 ++++++++ src/p_enemy.c | 23 +++++++- src/p_inter.c | 14 +++++ src/p_mobj.c | 32 +++++++++++ 6 files changed, 256 insertions(+), 3 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 60d38a638..ff0739b33 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1838,6 +1838,7 @@ static actionpointer_t actionpointers[] = {{A_MineExplode}, "A_MINEEXPLODE"}, // SRB2kart {{A_BallhogExplode}, "A_BALLHOGEXPLODE"}, // SRB2kart {{A_LightningFollowPlayer}, "A_LIGHTNINGFOLLOWPLAYER"}, //SRB2kart + {{A_FlameParticle}, "A_FLAMEPARTICLE"}, // SRB2kart {{A_OrbitNights}, "A_ORBITNIGHTS"}, {{A_GhostMe}, "A_GHOSTME"}, {{A_SetObjectState}, "A_SETOBJECTSTATE"}, @@ -6770,6 +6771,16 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_KLIT11", "S_KLIT12", + // Marble Zone + "S_FLAMEPARTICLE", + "S_MARBLETORCH", + "S_MARBLELIGHT", + "S_MARBLEBURNER", + + // CD Special Stage + "S_CDUFO", + "S_CDUFO_DIE", + #ifdef SEENAMES "S_NAMECHECK", #endif @@ -7423,6 +7434,15 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_KARMAHITBOX", "MT_KARMAWHEEL", + // Marble Zone + "MT_FLAMEPARTICLE", + "MT_MARBLETORCH", + "MT_MARBLELIGHT", + "MT_MARBLEBURNER", + + // CD Special Stage + "MT_CDUFO", + #ifdef SEENAMES "MT_NAMECHECK", #endif diff --git a/src/info.c b/src/info.c index 2efa68ab8..19403f513 100644 --- a/src/info.c +++ b/src/info.c @@ -61,7 +61,7 @@ char sprnames[NUMSPRITES + 1][5] = "DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM", "SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB", "ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK", - "LZI1","LZI2","KLIT","VIEW" + "LZI1","LZI2","KLIT","MARB","FUFO","VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -3066,6 +3066,16 @@ state_t states[NUMSTATES] = {SPR_KLIT, FF_FULLBRIGHT|FF_PAPERSPRITE|5, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT12}, // S_KLIT11 {SPR_NULL, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT1}, // S_KLIT12 + // Marble Zone + {SPR_MARB, FF_FULLBRIGHT|FF_ANIMATE|5, TICRATE, {NULL}, 3, 3, S_NULL}, // S_FLAMEPARTICLE + {SPR_MARB, FF_FULLBRIGHT|FF_ANIMATE, 8*3, {A_FlameParticle}, 3, 3, S_MARBLETORCH}, // S_MARBLETORCH + {SPR_MARB, FF_FULLBRIGHT|FF_TRANS80|4, -1, {NULL}, 1, 29, S_NULL}, // S_MARBLELIGHT + {SPR_MARB, 9, -1, {NULL}, 0, 0, S_NULL}, // S_MARBLEBURNER + + // CD Special Stage + {SPR_FUFO, 0, 1, {A_Thrust}, 5, 2, S_CDUFO}, // S_CDUFO + {SPR_FUFO, 0, 4, {A_BossScream}, 0, MT_EXPLODE, S_CDUFO_DIE}, // S_CDUFO_DIE + #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK #endif @@ -17211,6 +17221,141 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_FLAMEPARTICLE + -1, // doomednum + S_FLAMEPARTICLE,// 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 + 0, // speed + FRACUNIT, // radius + FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_SCENERY|MF_NOCLIPTHING|MF_NOCLIPHEIGHT, // flags + S_NULL // raisestate + }, + + { // MT_MARBLETORCH + 1969, // doomednum + S_MARBLETORCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + MT_FLAMEPARTICLE,// painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 12*FRACUNIT, // radius + 45*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_SCENERY|MF_NOGRAVITY|MF_FIRE|MF_PAIN, // flags + S_NULL // raisestate + }, + + { // MT_MARBLELIGHT + -1, // doomednum + S_MARBLELIGHT, // 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 + 0, // speed + FRACUNIT, // radius + FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_SCENERY|MF_NOCLIPTHING|MF_NOCLIPHEIGHT, // flags + S_NULL // raisestate + }, + + { // MT_MARBLEBURNER + 1970, // doomednum + S_MARBLEBURNER, // 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 + 0, // speed + 24*FRACUNIT, // radius + 96*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOTHINK|MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_CDUFO + 4050, // doomednum + S_CDUFO, // spawnstate + 1, // 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_CDUFO_DIE, // deathstate + S_NULL, // xdeathstate + sfx_cdfm19, // deathsound + 0, // speed + 70*FRACUNIT, // radius + 70*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_SPECIAL, // flags + S_NULL // raisestate + }, + // ============================================================================================================================// #ifdef SEENAMES diff --git a/src/info.h b/src/info.h index f14d21212..7c3f37570 100644 --- a/src/info.h +++ b/src/info.h @@ -169,6 +169,7 @@ void A_JawzExplode(); // SRB2kart void A_MineExplode(); // SRB2kart void A_BallhogExplode(); // SRB2kart void A_LightningFollowPlayer(); // SRB2kart: Lightning shield effect player chasing +void A_FlameParticle(); void A_OrbitNights(); void A_GhostMe(); void A_SetObjectState(); @@ -653,6 +654,9 @@ typedef enum sprite SPR_LZI2, // ditto SPR_KLIT, // You have a twisted mind. But this actually is for the diagonal lightning. + SPR_MARB, // Marble Zone sprites + SPR_FUFO, // CD Special Stage UFO (don't ask me why it begins with an F) + SPR_VIEW, // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw! SPR_FIRSTFREESLOT, @@ -3613,6 +3617,16 @@ typedef enum state S_KLIT11, S_KLIT12, + // Marble Zone + S_FLAMEPARTICLE, + S_MARBLETORCH, + S_MARBLELIGHT, + S_MARBLEBURNER, + + // CD Special Stage + S_CDUFO, + S_CDUFO_DIE, + #ifdef SEENAMES S_NAMECHECK, #endif @@ -4283,6 +4297,15 @@ typedef enum mobj_type MT_KARMAHITBOX, MT_KARMAWHEEL, + // Marble Zone + MT_FLAMEPARTICLE, + MT_MARBLETORCH, + MT_MARBLELIGHT, + MT_MARBLEBURNER, + + // CD Special Stage + MT_CDUFO, + #ifdef SEENAMES MT_NAMECHECK, #endif diff --git a/src/p_enemy.c b/src/p_enemy.c index 37dd58998..9e6ce3863 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -193,6 +193,7 @@ void A_JawzExplode(mobj_t *actor); // SRB2kart void A_MineExplode(mobj_t *actor); // SRB2kart void A_BallhogExplode(mobj_t *actor); // SRB2kart void A_LightningFollowPlayer(mobj_t *actor); // SRB2kart +void A_FlameParticle(mobj_t *actor); // SRB2kart void A_OrbitNights(mobj_t *actor); void A_GhostMe(mobj_t *actor); void A_SetObjectState(mobj_t *actor); @@ -8403,7 +8404,9 @@ void A_LightningFollowPlayer(mobj_t *actor) if (LUA_CallAction("A_LightningFollowPlayer", actor)) return; #endif - if (actor->target) + if (!actor->target) + return; + { if (actor->extravalue1) // Make the radius also follow the player somewhat accuratly { @@ -8418,7 +8421,23 @@ void A_LightningFollowPlayer(mobj_t *actor) actor->momy = actor->target->momy; actor->momz = actor->target->momz; // Give momentum since we don't teleport to our player literally every frame. } - return; +} + +void A_FlameParticle(mobj_t *actor) +{ + fixed_t rad = actor->radius>>FRACBITS, hei = actor->radius>>FRACBITS; + mobj_t *par; +#ifdef HAVE_BLUA + if (LUA_CallAction("A_FlameParticle", actor)) + return; +#endif + + par = P_SpawnMobj( + actor->x + (P_RandomRange(-rad, rad)<y + (P_RandomRange(-rad, rad)<z + (P_RandomRange(hei/2, hei)<info->painchance); + par->momz = actor->scale<<1; } //} diff --git a/src/p_inter.c b/src/p_inter.c index 5e532c615..96733f27f 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -577,6 +577,20 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) special->target->player->kartstuff[k_eggmanblame] = -1; } return; + case MT_CDUFO: // SRB2kart + if (special->fuse || !P_CanPickupItem(player, 1) || (G_BattleGametype() && player->kartstuff[k_bumper] <= 0)) + return; + + player->kartstuff[k_itemroulette] = 1; + player->kartstuff[k_roulettetype] = 1; + + S_StartSound(toucher, sfx_cdfm73); // they don't make this sound in the original game but it's nice to have a "reward" for good play + + //special->momx = special->momy = special->momz = 0; + special->momz = -(3*special->scale)/2; + //P_SetTarget(&special->target, toucher); + special->fuse = 2*TICRATE; + break; // ***************************************** // // Rings, coins, spheres, weapon panels, etc // diff --git a/src/p_mobj.c b/src/p_mobj.c index 84163f1ca..981ac8a94 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7434,6 +7434,10 @@ void P_MobjThinker(mobj_t *mobj) case MT_MINEEXPLOSIONSOUND: P_RemoveMobj(mobj); return; + case MT_CDUFO: + if (mobj->fuse > TICRATE) + mobj->flags2 ^= MF2_DONTDRAW; // only by good fortune does this end with it having MF2_DONTDRAW... don't touch! + break; //} default: break; @@ -8480,6 +8484,31 @@ void P_MobjThinker(mobj_t *mobj) } } } + break; + case MT_CDUFO: + if (!mobj->spawnpoint || mobj->fuse) + break; + + if (mobj->movecount) + { + mobj->movecount--; + break; + } + else if (P_AproxDistance(mobj->x - (mobj->spawnpoint->x<y - (mobj->spawnpoint->y<movecount = 3; + + { + angle_t facing = P_RandomRange(0, 90); + if (facing >= 45) + facing = InvAngle((facing - 45)*ANG1); + else + facing *= ANG1; + + mobj->angle = R_PointToAngle2(mobj->x, mobj->y, mobj->spawnpoint->x<spawnpoint->y<color = SKINCOLOR_AQUA; break; } + case MT_MARBLETORCH: + P_SpawnMobj(mobj->x, mobj->y, mobj->z + (29< Date: Mon, 22 Oct 2018 21:56:14 +0100 Subject: [PATCH 08/80] Rusty Rig plus minor touchups to what I did already (I haven't made a new exe this stuff is simple enough, and I'll test it when I do the balloon panic stuff) --- src/dehacked.c | 8 +++++++ src/info.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++-- src/info.h | 10 ++++++++ src/p_mobj.c | 5 +++- 4 files changed, 82 insertions(+), 3 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index ff0739b33..96a1d1cff 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6781,6 +6781,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_CDUFO", "S_CDUFO_DIE", + // Rusty Rig + "S_RUSTYLAMP_ORANGE", + "S_RUSTYCHAIN", + #ifdef SEENAMES "S_NAMECHECK", #endif @@ -7443,6 +7447,10 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s // CD Special Stage "MT_CDUFO", + // Rusty Rig + "MT_RUSTYLAMP_ORANGE", + "MT_RUSTYCHAIN", + #ifdef SEENAMES "MT_NAMECHECK", #endif diff --git a/src/info.c b/src/info.c index 19403f513..9c44edbbe 100644 --- a/src/info.c +++ b/src/info.c @@ -61,7 +61,7 @@ char sprnames[NUMSPRITES + 1][5] = "DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM", "SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB", "ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK", - "LZI1","LZI2","KLIT","MARB","FUFO","VIEW" + "LZI1","LZI2","KLIT","MARB","FUFO","RUST","VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -3073,9 +3073,13 @@ state_t states[NUMSTATES] = {SPR_MARB, 9, -1, {NULL}, 0, 0, S_NULL}, // S_MARBLEBURNER // CD Special Stage - {SPR_FUFO, 0, 1, {A_Thrust}, 5, 2, S_CDUFO}, // S_CDUFO + {SPR_FUFO, 0, 1, {A_Thrust}, 5, 2, S_CDUFO}, // S_CDUFO {SPR_FUFO, 0, 4, {A_BossScream}, 0, MT_EXPLODE, S_CDUFO_DIE}, // S_CDUFO_DIE + // Rusty Rig + {SPR_RUST, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_RUSTYLAMP_ORANGE + {SPR_RUST, 1, -1, {NULL}, 0, 0, S_NULL}, // S_RUSTYCHAIN + #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK #endif @@ -17356,6 +17360,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_RUSTYLAMP_ORANGE + 1988, // doomednum + S_RUSTYLAMP_ORANGE, // 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 + 0, // speed + 12*FRACUNIT, // radius + 45*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_SCENERY|MF_NOGRAVITY|MF_NOBLOCKMAP, // flags + S_NULL // raisestate + }, + + { // MT_RUSTYCHAIN + 1989, // doomednum + S_RUSTYCHAIN, // 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 + 0, // speed + 12*FRACUNIT, // radius + 45*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_SCENERY|MF_NOBLOCKMAP, // flags + S_NULL // raisestate + }, + // ============================================================================================================================// #ifdef SEENAMES diff --git a/src/info.h b/src/info.h index 7c3f37570..ac9a24e92 100644 --- a/src/info.h +++ b/src/info.h @@ -657,6 +657,8 @@ typedef enum sprite SPR_MARB, // Marble Zone sprites SPR_FUFO, // CD Special Stage UFO (don't ask me why it begins with an F) + SPR_RUST, // Rusty Rig sprites + SPR_VIEW, // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw! SPR_FIRSTFREESLOT, @@ -3627,6 +3629,10 @@ typedef enum state S_CDUFO, S_CDUFO_DIE, + // Rusty Rig + S_RUSTYLAMP_ORANGE, + S_RUSTYCHAIN, + #ifdef SEENAMES S_NAMECHECK, #endif @@ -4306,6 +4312,10 @@ typedef enum mobj_type // CD Special Stage MT_CDUFO, + // Rusty Rig + MT_RUSTYLAMP_ORANGE, + MT_RUSTYCHAIN, + #ifdef SEENAMES MT_NAMECHECK, #endif diff --git a/src/p_mobj.c b/src/p_mobj.c index 981ac8a94..f832b4eb9 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9380,7 +9380,10 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) break; } case MT_MARBLETORCH: - P_SpawnMobj(mobj->x, mobj->y, mobj->z + (29<x, mobj->y, mobj->z + (29*mobj->scale), MT_MARBLELIGHT); + break; + case MT_RUSTYLAMP_ORANGE: + P_SpawnMobj(mobj->x, mobj->y, mobj->z + (68*mobj->scale), MT_MARBLELIGHT); break; default: break; From 3abcf552b0cae9af2ae058c6f6639df9649f98bb Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 22 Oct 2018 22:36:04 +0100 Subject: [PATCH 09/80] D2 Balloon Panic, plus minor, minor touchup to Rusty Rig lamp's light positioning. (Sorry, Drt.) --- src/dehacked.c | 9 +++++++++ src/info.c | 35 ++++++++++++++++++++++++++++++++++- src/info.h | 11 +++++++++++ src/p_enemy.c | 2 ++ src/p_inter.c | 5 ++++- src/p_mobj.c | 7 ++++++- 6 files changed, 66 insertions(+), 3 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 96a1d1cff..2c2d02321 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6785,6 +6785,12 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_RUSTYLAMP_ORANGE", "S_RUSTYCHAIN", + // D2 Balloon Panic + "S_BALLOON", + "S_BALLOONPOP1", + "S_BALLOONPOP2", + "S_BALLOONPOP3", + #ifdef SEENAMES "S_NAMECHECK", #endif @@ -7451,6 +7457,9 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_RUSTYLAMP_ORANGE", "MT_RUSTYCHAIN", + // D2 Balloon Panic + "MT_BALLOON", + #ifdef SEENAMES "MT_NAMECHECK", #endif diff --git a/src/info.c b/src/info.c index 9c44edbbe..fb80e5a17 100644 --- a/src/info.c +++ b/src/info.c @@ -61,7 +61,7 @@ char sprnames[NUMSPRITES + 1][5] = "DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM", "SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB", "ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK", - "LZI1","LZI2","KLIT","MARB","FUFO","RUST","VIEW" + "LZI1","LZI2","KLIT","MARB","FUFO","RUST","BLON","VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -3080,6 +3080,12 @@ state_t states[NUMSTATES] = {SPR_RUST, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_RUSTYLAMP_ORANGE {SPR_RUST, 1, -1, {NULL}, 0, 0, S_NULL}, // S_RUSTYCHAIN + // D2 Balloon Panic + {SPR_BLON, FF_ANIMATE, -1, {NULL}, 2, 5, S_BALLOON}, // S_BALLOON + {SPR_BLON, FF_ANIMATE|3, 2, {NULL}, 1, 1, S_BALLOONPOP2}, // S_BALLOONPOP1 + {SPR_NULL, 0, 15*TICRATE, {NULL}, 0, 0, S_BALLOONPOP3}, // S_BALLOONPOP2 + {SPR_NULL, 0, 0, {A_SpawnFreshCopy}, 0, 0, S_NULL}, // S_BALLOONPOP3 + #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK #endif @@ -17414,6 +17420,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_BALLOON + 462, // doomednum + S_BALLOON, // 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_BALLOONPOP1, // deathstate + S_NULL, // xdeathstate + sfx_s3k77, // deathsound + 0, // speed + 32*FRACUNIT, // radius + 64*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL|MF_NOGRAVITY|MF_SCENERY, // flags + S_NULL // raisestate + }, + // ============================================================================================================================// #ifdef SEENAMES diff --git a/src/info.h b/src/info.h index ac9a24e92..c4807c9cd 100644 --- a/src/info.h +++ b/src/info.h @@ -659,6 +659,8 @@ typedef enum sprite SPR_RUST, // Rusty Rig sprites + SPR_BLON, // D2 Balloon Panic + SPR_VIEW, // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw! SPR_FIRSTFREESLOT, @@ -3633,6 +3635,12 @@ typedef enum state S_RUSTYLAMP_ORANGE, S_RUSTYCHAIN, + // D2 Balloon Panic + S_BALLOON, + S_BALLOONPOP1, + S_BALLOONPOP2, + S_BALLOONPOP3, + #ifdef SEENAMES S_NAMECHECK, #endif @@ -4316,6 +4324,9 @@ typedef enum mobj_type MT_RUSTYLAMP_ORANGE, MT_RUSTYCHAIN, + // D2 Balloon Panic + MT_BALLOON, + #ifdef SEENAMES MT_NAMECHECK, #endif diff --git a/src/p_enemy.c b/src/p_enemy.c index 9e6ce3863..a21d4d30d 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -10583,4 +10583,6 @@ void A_SpawnFreshCopy(mobj_t *actor) if (newObject->info->seesound) S_StartSound(newObject, newObject->info->seesound); + + newObject->color = actor->color; // SRB2Kart } diff --git a/src/p_inter.c b/src/p_inter.c index 96733f27f..ece7b3a0b 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -577,7 +577,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) special->target->player->kartstuff[k_eggmanblame] = -1; } return; - case MT_CDUFO: // SRB2kart + case MT_CDUFO: // SRB2kart if (special->fuse || !P_CanPickupItem(player, 1) || (G_BattleGametype() && player->kartstuff[k_bumper] <= 0)) return; @@ -591,6 +591,9 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) //P_SetTarget(&special->target, toucher); special->fuse = 2*TICRATE; break; + case MT_BALLOON: // SRB2kart + P_SetObjectMomZ(toucher, 20<x, mobj->y, mobj->z + (29*mobj->scale), MT_MARBLELIGHT); break; case MT_RUSTYLAMP_ORANGE: - P_SpawnMobj(mobj->x, mobj->y, mobj->z + (68*mobj->scale), MT_MARBLELIGHT); + P_SpawnMobj(mobj->x, mobj->y, mobj->z + (69*mobj->scale), MT_MARBLELIGHT); break; default: break; @@ -11044,6 +11044,11 @@ ML_NOCLIMB : Direction not controllable case MT_TRAPGOYLELONG: if (mthing->angle >= 360) mobj->tics += 7*(mthing->angle / 360) + 1; // starting delay + break; + case MT_BALLOON: // SRB2Kart + if (mthing->angle < MAXSKINCOLORS && mthing->angle > 0) + mobj->color = mthing->angle; + break; default: break; } From c98d00a8f645b677bd5f97ee5f3dd63e7644a2f3 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 22 Oct 2018 23:28:38 +0100 Subject: [PATCH 10/80] SOC_PALM (untested) --- src/dehacked.c | 16 ++++++ src/info.c | 146 ++++++++++++++++++++++++++++++++++++++++++++++++- src/info.h | 23 ++++++++ 3 files changed, 184 insertions(+), 1 deletion(-) diff --git a/src/dehacked.c b/src/dehacked.c index 2c2d02321..584014ddd 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6771,6 +6771,14 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_KLIT11", "S_KLIT12", + // Various plants + "S_PALMTREE", + "S_SHRUB", + "S_TALLBUSH", + "S_AZURECITYTREE", + + "S_DKRBALLOON", // Diddy Kong Racing + // Marble Zone "S_FLAMEPARTICLE", "S_MARBLETORCH", @@ -7444,6 +7452,14 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_KARMAHITBOX", "MT_KARMAWHEEL", + // Various plants + "MT_PALMTREE", + "MT_SHRUB", + "MT_TALLBUSH", + "MT_AZURECITYTREE", + + "MT_DKRBALLOON", // Diddy Kong Racing + // Marble Zone "MT_FLAMEPARTICLE", "MT_MARBLETORCH", diff --git a/src/info.c b/src/info.c index fb80e5a17..c16596870 100644 --- a/src/info.c +++ b/src/info.c @@ -61,7 +61,8 @@ char sprnames[NUMSPRITES + 1][5] = "DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM", "SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB", "ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK", - "LZI1","LZI2","KLIT","MARB","FUFO","RUST","BLON","VIEW" + "LZI1","LZI2","KLIT","PALM","SHRB","TWEE","BALN","MARB","FUFO","RUST", + "BLON","VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -3066,6 +3067,14 @@ state_t states[NUMSTATES] = {SPR_KLIT, FF_FULLBRIGHT|FF_PAPERSPRITE|5, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT12}, // S_KLIT11 {SPR_NULL, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT1}, // S_KLIT12 + // Various plants + {SPR_PALM, 0, -1, {NULL}, 0, 0, S_NULL}, // S_PALMTREE + {SPR_SHRB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHRUB + {SPR_BUS2, 1, -1, {NULL}, 0, 0, S_NULL}, // S_TALLBUSH + {SPR_TWEE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_AZURECITYTREE + + {SPR_BALN, 0, -1, {NULL}, 0, 0, S_NULL}, // S_DKRBALLOON + // Marble Zone {SPR_MARB, FF_FULLBRIGHT|FF_ANIMATE|5, TICRATE, {NULL}, 3, 3, S_NULL}, // S_FLAMEPARTICLE {SPR_MARB, FF_FULLBRIGHT|FF_ANIMATE, 8*3, {A_FlameParticle}, 3, 3, S_MARBLETORCH}, // S_MARBLETORCH @@ -17231,6 +17240,141 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_PALMTREE, + 1482, // doomednum + S_PALMTREE, // 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 + 0, // speed + 16*FRACUNIT, // radius + 189*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_SHRUB, + 4022, // doomednum + S_SHRUB, // 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 + 0, // speed + 91*FRACUNIT, // radius + 166*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_TALLBUSH, + 1485, // doomednum + S_TALLBUSH, // 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 + 0, // speed + 91*FRACUNIT, // radius + 166*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_AZURECITYTREE, + 1486, // doomednum + S_AZURECITYTREE,// 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 + 0, // speed + 91*FRACUNIT, // radius + 166*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_DKRBALLOON, + 2807, // doomednum + S_DKRBALLOON, // 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 + 0, // speed + 91*FRACUNIT, // radius + 166*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + { // MT_FLAMEPARTICLE -1, // doomednum S_FLAMEPARTICLE,// spawnstate diff --git a/src/info.h b/src/info.h index c4807c9cd..a8ef3bc8f 100644 --- a/src/info.h +++ b/src/info.h @@ -654,6 +654,13 @@ typedef enum sprite SPR_LZI2, // ditto SPR_KLIT, // You have a twisted mind. But this actually is for the diagonal lightning. + // Various plants + SPR_PALM, + SPR_SHRB, + SPR_TWEE, + + SPR_BALN, // Diddy Kong Racing + SPR_MARB, // Marble Zone sprites SPR_FUFO, // CD Special Stage UFO (don't ask me why it begins with an F) @@ -3621,6 +3628,14 @@ typedef enum state S_KLIT11, S_KLIT12, + // Various plants + S_PALMTREE, + S_SHRUB, + S_TALLBUSH, + S_AZURECITYTREE, + + S_DKRBALLOON, // Diddy Kong Racing + // Marble Zone S_FLAMEPARTICLE, S_MARBLETORCH, @@ -4311,6 +4326,14 @@ typedef enum mobj_type MT_KARMAHITBOX, MT_KARMAWHEEL, + // Various plants + MT_PALMTREE, + MT_SHRUB, + MT_TALLBUSH, + MT_AZURECITYTREE, + + MT_DKRBALLOON, // Diddy Kong Racing + // Marble Zone MT_FLAMEPARTICLE, MT_MARBLETORCH, From 5a11bdc5807adcdf0bf96ef073e0e18da748fe37 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 23 Oct 2018 14:59:09 +0100 Subject: [PATCH 11/80] SOC_XMAS (untested). Well, mostly. At least, all elements with sprites provided - there are two bushes that, weirdly enough, do not have their graphics provided in gfx.kart but ARE soc'd, and I feel like there's no point hardcoding that stuff..? Also, I'm being cheeky and doing this in the middle of a lecture. :shitsfree: --- src/dehacked.c | 8 ++++ src/info.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++++- src/info.h | 12 +++++ 3 files changed, 136 insertions(+), 2 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 584014ddd..50d2b7ec3 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -5268,6 +5268,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_XMASPOLE", "S_CANDYCANE", "S_SNOWMAN", + "S_SNOWMANHAT", + "S_LAMPPOST1", + "S_LAMPPOST2", + "S_HANGSTAR", // Botanic Serenity's loads of scenery states "S_BSZTALLFLOWER_RED", @@ -7085,6 +7089,10 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_XMASPOLE", "MT_CANDYCANE", "MT_SNOWMAN", + "MT_SNOWMANHAT", + "MT_LAMPPOST1", + "MT_LAMPPOST2", + "MT_HANGSTAR", // Botanic Serenity "MT_BSZTALLFLOWER_RED", diff --git a/src/info.c b/src/info.c index c16596870..22c4056e5 100644 --- a/src/info.c +++ b/src/info.c @@ -62,7 +62,9 @@ char sprnames[NUMSPRITES + 1][5] = "SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB", "ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK", "LZI1","LZI2","KLIT","PALM","SHRB","TWEE","BALN","MARB","FUFO","RUST", - "BLON","VIEW" + "BLON", + "XMS4","XMS5", + "VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -1535,6 +1537,10 @@ state_t states[NUMSTATES] = {SPR_XMS1, 0, -1, {NULL}, 0, 0, S_NULL}, // S_XMASPOLE {SPR_XMS2, 0, -1, {NULL}, 0, 0, S_NULL}, // S_CANDYCANE {SPR_XMS3, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SNOWMAN + {SPR_XMS3, 1, -1, {NULL}, 0, 0, S_NULL}, // S_SNOWMANHAT + {SPR_XMS4, 0, -1, {NULL}, 0, 0, S_NULL}, // S_LAMPPOST1 + {SPR_XMS4, 1, -1, {NULL}, 0, 0, S_NULL}, // S_LAMPPOST2 + {SPR_XMS5, 0, -1, {NULL}, 0, 0, S_NULL}, // S_HANGSTAR // Loads of Botanic Serenity bullshit {SPR_BSZ1, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BSZTALLFLOWER_RED @@ -9086,7 +9092,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // deathsound 25*FRACUNIT, // speed 16*FRACUNIT, // radius - 40*FRACUNIT, // height + 64*FRACUNIT, // height 0, // display offset 100, // mass 1, // damage @@ -9095,6 +9101,114 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_SNOWMANHAT + 1853, // doomednum + S_SNOWMANHAT, // 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 + 25*FRACUNIT, // speed + 16*FRACUNIT, // radius + 80*FRACUNIT, // height + 0, // display offset + 100, // mass + 1, // damage + sfx_None, // activesound + MF_SLIDEME|MF_SOLID|MF_PUSHABLE, // flags + S_NULL // raisestate + }, + + { // MT_LAMPPOST1 + 1854, // doomednum + S_LAMPPOST1, // 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 + 0, // speed + 8*FRACUNIT, // radius + 120*FRACUNIT, // height + 0, // display offset + 100, // mass + 1, // damage + sfx_None, // activesound + MF_SOLID|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_LAMPPOST2 + 1855, // doomednum + S_LAMPPOST2, // 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 + 0, // speed + 8*FRACUNIT, // radius + 120*FRACUNIT, // height + 0, // display offset + 100, // mass + 1, // damage + sfx_None, // activesound + MF_SOLID|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_HANGSTAR + 1856, // doomednum + S_HANGSTAR, // 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 + 0, // speed + FRACUNIT, // radius + 80*FRACUNIT, // height + 0, // display offset + 100, // mass + 1, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_SPAWNCEILING|MF_NOGRAVITY|MF_SCENERY, // flags + S_NULL // raisestate + }, + // No, I did not do all of this by hand. // I made a script to make all of these for me. // Ha HA. ~Inuyasha diff --git a/src/info.h b/src/info.h index a8ef3bc8f..2a578bf66 100644 --- a/src/info.h +++ b/src/info.h @@ -668,6 +668,10 @@ typedef enum sprite SPR_BLON, // D2 Balloon Panic + // Xmas-specific sprites that don't fit aboxe + SPR_XMS4, + SPR_XMS5, + SPR_VIEW, // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw! SPR_FIRSTFREESLOT, @@ -2125,6 +2129,10 @@ typedef enum state S_XMASPOLE, S_CANDYCANE, S_SNOWMAN, + S_SNOWMANHAT, + S_LAMPPOST1, + S_LAMPPOST2, + S_HANGSTAR, // Botanic Serenity's loads of scenery states S_BSZTALLFLOWER_RED, @@ -3959,6 +3967,10 @@ typedef enum mobj_type MT_XMASPOLE, MT_CANDYCANE, MT_SNOWMAN, + MT_SNOWMANHAT, + MT_LAMPPOST1, + MT_LAMPPOST2, + MT_HANGSTAR, // Botanic Serenity scenery MT_BSZTALLFLOWER_RED, From b461a69a0498b934041a2b50d682d9a50e9da9b4 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 23 Oct 2018 17:47:15 +0100 Subject: [PATCH 12/80] Remove all of the DKRBALLOON stuff I added from SOC_PALM, as the object already existed as MT_DOOD_BALLOON. --- src/dehacked.c | 4 ---- src/info.c | 40 +++++----------------------------------- src/info.h | 6 ------ 3 files changed, 5 insertions(+), 45 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 50d2b7ec3..72d3e551c 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6781,8 +6781,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_TALLBUSH", "S_AZURECITYTREE", - "S_DKRBALLOON", // Diddy Kong Racing - // Marble Zone "S_FLAMEPARTICLE", "S_MARBLETORCH", @@ -7466,8 +7464,6 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_TALLBUSH", "MT_AZURECITYTREE", - "MT_DKRBALLOON", // Diddy Kong Racing - // Marble Zone "MT_FLAMEPARTICLE", "MT_MARBLETORCH", diff --git a/src/info.c b/src/info.c index 22c4056e5..c6bc6d480 100644 --- a/src/info.c +++ b/src/info.c @@ -61,8 +61,7 @@ char sprnames[NUMSPRITES + 1][5] = "DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM", "SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB", "ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK", - "LZI1","LZI2","KLIT","PALM","SHRB","TWEE","BALN","MARB","FUFO","RUST", - "BLON", + "LZI1","LZI2","KLIT","PALM","SHRB","TWEE","MARB","FUFO","RUST","BLON", "XMS4","XMS5", "VIEW" }; @@ -3079,8 +3078,6 @@ state_t states[NUMSTATES] = {SPR_BUS2, 1, -1, {NULL}, 0, 0, S_NULL}, // S_TALLBUSH {SPR_TWEE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_AZURECITYTREE - {SPR_BALN, 0, -1, {NULL}, 0, 0, S_NULL}, // S_DKRBALLOON - // Marble Zone {SPR_MARB, FF_FULLBRIGHT|FF_ANIMATE|5, TICRATE, {NULL}, 3, 3, S_NULL}, // S_FLAMEPARTICLE {SPR_MARB, FF_FULLBRIGHT|FF_ANIMATE, 8*3, {A_FlameParticle}, 3, 3, S_MARBLETORCH}, // S_MARBLETORCH @@ -16507,13 +16504,13 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 1048576, // radius - 2097152, // height + 91*FRACUNIT, // radius + 166*FRACUNIT, // height 0, // display offset - 100, // mass + 0, // mass 0, // damage sfx_None, // activesound - 33554944, // flags + MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY, // flags S_NULL // raisestate }, @@ -17462,33 +17459,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_DKRBALLOON, - 2807, // doomednum - S_DKRBALLOON, // 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 - 0, // speed - 91*FRACUNIT, // radius - 166*FRACUNIT, // height - 0, // display offset - 0, // mass - 0, // damage - sfx_None, // activesound - MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - { // MT_FLAMEPARTICLE -1, // doomednum S_FLAMEPARTICLE,// spawnstate diff --git a/src/info.h b/src/info.h index 2a578bf66..ef6e5d617 100644 --- a/src/info.h +++ b/src/info.h @@ -659,8 +659,6 @@ typedef enum sprite SPR_SHRB, SPR_TWEE, - SPR_BALN, // Diddy Kong Racing - SPR_MARB, // Marble Zone sprites SPR_FUFO, // CD Special Stage UFO (don't ask me why it begins with an F) @@ -3642,8 +3640,6 @@ typedef enum state S_TALLBUSH, S_AZURECITYTREE, - S_DKRBALLOON, // Diddy Kong Racing - // Marble Zone S_FLAMEPARTICLE, S_MARBLETORCH, @@ -4344,8 +4340,6 @@ typedef enum mobj_type MT_TALLBUSH, MT_AZURECITYTREE, - MT_DKRBALLOON, // Diddy Kong Racing - // Marble Zone MT_FLAMEPARTICLE, MT_MARBLETORCH, From 83fcfc45c1f24587f3a819a2db5d010a2e4b1c79 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 23 Oct 2018 20:44:54 +0100 Subject: [PATCH 13/80] SOC_COAT and SOC_SMOK. To make the MT_PETSMOKER make vaping clouds for Volcanic Valley instead, apply MTF_OBJECTSPECIAL on the spawnpoint. Since I had to compile, I ALSO discovered SOC_PALM's palmtree was already hardcoded as well!!!! Gosh dang inconsistencies... --- src/dehacked.c | 22 +++++++- src/info.c | 133 +++++++++++++++++++++++++++++++++++++------------ src/info.h | 24 ++++++++- src/p_enemy.c | 2 + src/p_mobj.c | 8 +++ 5 files changed, 153 insertions(+), 36 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 72d3e551c..ba0796719 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6776,7 +6776,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_KLIT12", // Various plants - "S_PALMTREE", "S_SHRUB", "S_TALLBUSH", "S_AZURECITYTREE", @@ -6801,6 +6800,21 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_BALLOONPOP2", "S_BALLOONPOP3", + // Smokin' & Vapin' (Don't try this at home, kids!) + "S_PETSMOKE0", + "S_PETSMOKE1", + "S_PETSMOKE2", + "S_PETSMOKE3", + "S_PETSMOKE4", + "S_PETSMOKE5", + "S_VVVAPING0", + "S_VVVAPING1", + "S_VVVAPING2", + "S_VVVAPING3", + "S_VVVAPING4", + "S_VVVAPING5", + "S_VVVAPE", + #ifdef SEENAMES "S_NAMECHECK", #endif @@ -7459,7 +7473,6 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_KARMAWHEEL", // Various plants - "MT_PALMTREE", "MT_SHRUB", "MT_TALLBUSH", "MT_AZURECITYTREE", @@ -7480,6 +7493,11 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s // D2 Balloon Panic "MT_BALLOON", + // Smokin' & Vapin' (Don't try this at home, kids!) + "MT_PETSMOKER", + "MT_PETSMOKE", + "MT_VVVAPE", + #ifdef SEENAMES "MT_NAMECHECK", #endif diff --git a/src/info.c b/src/info.c index c6bc6d480..b885084d7 100644 --- a/src/info.c +++ b/src/info.c @@ -62,6 +62,7 @@ char sprnames[NUMSPRITES + 1][5] = "SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB", "ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK", "LZI1","LZI2","KLIT","PALM","SHRB","TWEE","MARB","FUFO","RUST","BLON", + "VAPE", "XMS4","XMS5", "VIEW" }; @@ -3073,7 +3074,6 @@ state_t states[NUMSTATES] = {SPR_NULL, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT1}, // S_KLIT12 // Various plants - {SPR_PALM, 0, -1, {NULL}, 0, 0, S_NULL}, // S_PALMTREE {SPR_SHRB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHRUB {SPR_BUS2, 1, -1, {NULL}, 0, 0, S_NULL}, // S_TALLBUSH {SPR_TWEE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_AZURECITYTREE @@ -3098,6 +3098,21 @@ state_t states[NUMSTATES] = {SPR_NULL, 0, 15*TICRATE, {NULL}, 0, 0, S_BALLOONPOP3}, // S_BALLOONPOP2 {SPR_NULL, 0, 0, {A_SpawnFreshCopy}, 0, 0, S_NULL}, // S_BALLOONPOP3 + // Smokin' & Vapin' (Don't try this at home, kids!) + {SPR_SMOK, 0, 1, {A_SetScale}, FRACUNIT/2, 0, S_PETSMOKE1}, // S_PETSMOKE0 + {SPR_SMOK, 0, 5, {A_SetScale}, FRACUNIT*2, 1, S_PETSMOKE2}, // S_PETSMOKE1 + {SPR_SMOK, 1, 5, {A_BubbleRise}, 0, 50096, S_PETSMOKE3}, // S_PETSMOKE2 + {SPR_SMOK, 2, 15, {A_BubbleRise}, 0, 50096, S_PETSMOKE4}, // S_PETSMOKE3 + {SPR_SMOK, 3, 25, {A_BubbleRise}, 0, 50096, S_PETSMOKE5}, // S_PETSMOKE4 + {SPR_SMOK, 4, 35, {A_BubbleRise}, 0, 50096, S_NULL}, // S_PETSMOKE5 + {SPR_VAPE, 0, 1, {NULL}, 0, 0, S_VVVAPING1}, // S_VVVAPING0 + {SPR_SMOK, 0, 5, {A_SetScale}, FRACUNIT*2, 1, S_VVVAPING2}, // S_VVVAPING1 + {SPR_VAPE, 1, 5, {A_BubbleRise}, 0, 50096, S_VVVAPING3}, // S_VVVAPING2 + {SPR_VAPE, 2, 15, {A_BubbleRise}, 0, 50096, S_VVVAPING4}, // S_VVVAPING3 + {SPR_VAPE, 3, 25, {A_BubbleRise}, 0, 50096, S_VVVAPING5}, // S_VVVAPING4 + {SPR_VAPE, 4, 35, {A_BubbleRise}, 0, 50096, S_NULL}, // S_VVVAPING5 + {SPR_VAPE, FF_ANIMATE|FF_TRANS30, -1, {NULL}, 6, 6, S_NULL}, // S_VVVAPE + #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK #endif @@ -16152,14 +16167,14 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound - 8, // speed + 0, // speed 16*FRACUNIT, // radius - 40*FRACUNIT, // height + 189*FRACUNIT, // height 0, // display offset - 100, // mass + 0, // mass 0, // damage sfx_None, // activesound - MF_NOCLIP|MF_SCENERY, // flags + MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags S_NULL // raisestate }, @@ -17351,33 +17366,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_PALMTREE, - 1482, // doomednum - S_PALMTREE, // 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 - 0, // speed - 16*FRACUNIT, // radius - 189*FRACUNIT, // height - 0, // display offset - 0, // mass - 0, // damage - sfx_None, // activesound - MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags - S_NULL // raisestate - }, - { // MT_SHRUB, 4022, // doomednum S_SHRUB, // spawnstate @@ -17675,6 +17663,87 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_PETSMOKER + 2018, // doomednum + S_INVISIBLE, // 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 + 0, // speed + 24*FRACUNIT, // radius + 64*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_SCENERY|MF_NOBLOCKMAP|MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_PETSMOKE + -1, // doomednum + S_PETSMOKE0, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_VVVAPING0, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 8*FRACUNIT, // radius + 12*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY|MF_RUNSPAWNFUNC, // flags + S_NULL // raisestate + }, + + { // MT_VVVAPE + 1600, // doomednum + S_VVVAPE, // 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 + 0, // speed + 16*FRACUNIT, // radius + 64*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SCENERY|MF_NOGRAVITY|MF_NOBLOCKMAP, // flags + S_NULL // raisestate + }, + // ============================================================================================================================// #ifdef SEENAMES diff --git a/src/info.h b/src/info.h index ef6e5d617..237cc451d 100644 --- a/src/info.h +++ b/src/info.h @@ -666,6 +666,8 @@ typedef enum sprite SPR_BLON, // D2 Balloon Panic + SPR_VAPE, // Volcanic Valley + // Xmas-specific sprites that don't fit aboxe SPR_XMS4, SPR_XMS5, @@ -3635,7 +3637,6 @@ typedef enum state S_KLIT12, // Various plants - S_PALMTREE, S_SHRUB, S_TALLBUSH, S_AZURECITYTREE, @@ -3660,6 +3661,21 @@ typedef enum state S_BALLOONPOP2, S_BALLOONPOP3, + // Smokin' & Vapin' (Don't try this at home, kids!) + S_PETSMOKE0, + S_PETSMOKE1, + S_PETSMOKE2, + S_PETSMOKE3, + S_PETSMOKE4, + S_PETSMOKE5, + S_VVVAPING0, + S_VVVAPING1, + S_VVVAPING2, + S_VVVAPING3, + S_VVVAPING4, + S_VVVAPING5, + S_VVVAPE, + #ifdef SEENAMES S_NAMECHECK, #endif @@ -4335,7 +4351,6 @@ typedef enum mobj_type MT_KARMAWHEEL, // Various plants - MT_PALMTREE, MT_SHRUB, MT_TALLBUSH, MT_AZURECITYTREE, @@ -4356,6 +4371,11 @@ typedef enum mobj_type // D2 Balloon Panic MT_BALLOON, + // Smokin' & Vapin' (Don't try this at home, kids!) + MT_PETSMOKER, + MT_PETSMOKE, + MT_VVVAPE, + #ifdef SEENAMES MT_NAMECHECK, #endif diff --git a/src/p_enemy.c b/src/p_enemy.c index a21d4d30d..d808512d7 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -9755,6 +9755,8 @@ void A_SetScale(mobj_t *actor) return; } + locvar1 = FixedMul(locvar1, mapheaderinfo[gamemap-1]->mobj_scale); // SRB2Kart + target->destscale = locvar1; // destination scale if (!(locvar2 & 65535)) P_SetScale(target, locvar1); // this instantly changes current scale to var1 if used, if not destscale will alter scale to var1 anyway diff --git a/src/p_mobj.c b/src/p_mobj.c index 5ff1afa59..c24547da2 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7031,6 +7031,14 @@ void P_MobjThinker(mobj_t *mobj) return; } break; + case MT_PETSMOKER: + if (!(leveltime % 10)) + { + mobj_t *smok = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_PETSMOKE); + if (mobj->spawnpoint && mobj->spawnpoint->options & MTF_OBJECTSPECIAL) + P_SetMobjStateNF(smok, smok->info->painstate); // same function, diff sprite + } + break; //} case MT_WATERDROP: P_SceneryCheckWater(mobj); From 45616eb4bba0ec54356a754cf2a5be5a7ca93af8 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 23 Oct 2018 22:16:40 +0100 Subject: [PATCH 14/80] With the permission of Sev, SOC_SEV, SOC_SG, SOC_PEAC and SOC_DHST are now done. --- src/dehacked.c | 32 +++++ src/info.c | 345 ++++++++++++++++++++++++++++++++++++++++++++++++- src/info.h | 49 ++++++- 3 files changed, 423 insertions(+), 3 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index ba0796719..0cf08b501 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6776,6 +6776,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_KLIT12", // Various plants + "S_SONICBUSH", "S_SHRUB", "S_TALLBUSH", "S_AZURECITYTREE", @@ -6815,6 +6816,21 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_VVVAPING5", "S_VVVAPE", + // Hill Top Zone + "S_HTZTREE", + "S_HTZBUSH", + + // Ports of gardens + "S_SGVINE1", + "S_SGVINE2", + "S_SGVINE3", + "S_PGTREE", + "S_PGFLOWER1", + "S_PGFLOWER2", + "S_PGFLOWER3", + "S_PGBUSH", + "S_DHPILLAR", + #ifdef SEENAMES "S_NAMECHECK", #endif @@ -7473,6 +7489,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_KARMAWHEEL", // Various plants + "MT_SONICBUSH", "MT_SHRUB", "MT_TALLBUSH", "MT_AZURECITYTREE", @@ -7498,6 +7515,21 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_PETSMOKE", "MT_VVVAPE", + // Hill Top Zone + "MT_HTZTREE", + "MT_HTZBUSH", + + // Ports of gardens + "MT_SGVINE1", + "MT_SGVINE2", + "MT_SGVINE3", + "MT_PGTREE", + "MT_PGFLOWER1", + "MT_PGFLOWER2", + "MT_PGFLOWER3", + "MT_PGBUSH", + "MT_DHPILLAR", + #ifdef SEENAMES "MT_NAMECHECK", #endif diff --git a/src/info.c b/src/info.c index b885084d7..617975b00 100644 --- a/src/info.c +++ b/src/info.c @@ -61,8 +61,9 @@ char sprnames[NUMSPRITES + 1][5] = "DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM", "SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB", "ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK", - "LZI1","LZI2","KLIT","PALM","SHRB","TWEE","MARB","FUFO","RUST","BLON", - "VAPE", + "LZI1","LZI2","KLIT","SBUS","SHRB","TWEE","MARB","FUFO","RUST","BLON", + "VAPE","HTZA","HTZB","SGVA","SGVB","SGVC","PGTR","PGF1","PGF2","PGF3", + "PGBH","DPLR", "XMS4","XMS5", "VIEW" }; @@ -3074,6 +3075,7 @@ state_t states[NUMSTATES] = {SPR_NULL, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {A_LightningFollowPlayer}, 0, 0, S_KLIT1}, // S_KLIT12 // Various plants + {SPR_SBUS, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SONICBUSH {SPR_SHRB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHRUB {SPR_BUS2, 1, -1, {NULL}, 0, 0, S_NULL}, // S_TALLBUSH {SPR_TWEE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_AZURECITYTREE @@ -3113,6 +3115,21 @@ state_t states[NUMSTATES] = {SPR_VAPE, 4, 35, {A_BubbleRise}, 0, 50096, S_NULL}, // S_VVVAPING5 {SPR_VAPE, FF_ANIMATE|FF_TRANS30, -1, {NULL}, 6, 6, S_NULL}, // S_VVVAPE + // Hill Top Zone + {SPR_HTZA, 0, -1, {A_SetScale}, 2*FRACUNIT, 0, S_NULL}, // S_HTZTREE + {SPR_HTZB, 0, -1, {A_SetScale}, 2*FRACUNIT, 0, S_NULL}, // S_HTZBUSH + + // Ports of gardens + {SPR_SGVA, 0, 1, {NULL}, 0, 0, S_NULL}, // S_SGVINE1 + {SPR_SGVB, 0, 1, {NULL}, 0, 0, S_NULL}, // S_SGVINE2 + {SPR_SGVC, 0, 1, {NULL}, 0, 0, S_NULL}, // S_SGVINE3 + {SPR_PGTR, 0, 1, {NULL}, 0, 0, S_NULL}, // S_PGTREE + {SPR_PGF1, 0, 1, {NULL}, 0, 0, S_NULL}, // S_PGFLOWER1 + {SPR_PGF2, 0, 1, {NULL}, 0, 0, S_NULL}, // S_PGFLOWER2 + {SPR_PGF3, 0, 1, {NULL}, 0, 0, S_NULL}, // S_PGFLOWER3 + {SPR_PGBH, 0, 1, {NULL}, 0, 0, S_NULL}, // S_PGBUSH + {SPR_DPLR, 0, 1, {NULL}, 0, 0, S_NULL}, // S_DHPILLAR + #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK #endif @@ -17366,6 +17383,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_SONICBUSH, + 715, // doomednum + S_SONICBUSH, // 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 + 0, // speed + 192*FRACUNIT, // radius + 922*FRACUNIT, // height + 0, // display offset + 0, // mass + 0, // damage + sfx_None, // activesound + MF_NOTHINK|MF_SOLID, // flags + S_NULL // raisestate + }, + { // MT_SHRUB, 4022, // doomednum S_SHRUB, // spawnstate @@ -17744,6 +17788,303 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_HTZTREE + 716, // doomednum + S_HTZTREE, // 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 + 0, // speed + 5*FRACUNIT, // radius + 204*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SCENERY|MF_SOLID|MF_RUNSPAWNFUNC|MF_DONTENCOREMAP, // flags + S_NULL // raisestate + }, + + { // MT_HTZBUSH + 717, // doomednum + S_HTZBUSH, // 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 + 0, // speed + 24*FRACUNIT, // radius + 38*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTHINK|MF_SCENERY|MF_RUNSPAWNFUNC, // flags + S_NULL // raisestate + }, + + { // MT_SGVINE1 + 718, // doomednum + S_SGVINE1, // 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 + 0, // speed + 32*FRACUNIT, // radius + 256*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_SGVINE2 + 719, // doomednum + S_SGVINE2, // 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 + 0, // speed + 17*FRACUNIT, // radius + 48*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTHINK|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_SGVINE3 + 720, // doomednum + S_SGVINE3, // 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 + 0, // speed + 17*FRACUNIT, // radius + 48*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTHINK|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_PGTREE + 711, // doomednum + S_PGTREE, // 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 + 0, // speed + 30*FRACUNIT, // radius + 504*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_PGFLOWER1 + 712, // doomednum + S_PGFLOWER1, // 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 + 0, // speed + 17*FRACUNIT, // radius + 48*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTHINK|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_PGFLOWER2 + 713, // doomednum + S_PGFLOWER2, // 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 + 0, // speed + 17*FRACUNIT, // radius + 48*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTHINK|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_PGFLOWER3 + 714, // doomednum + S_PGFLOWER3, // 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 + 0, // speed + 17*FRACUNIT, // radius + 48*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTHINK|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_PGBUSH + 715, // doomednum + S_PGBUSH, // 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 + 0, // speed + 384*FRACUNIT, // radius + 922*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID|MF_SCENERY, // flags + S_NULL // raisestate + }, + + { // MT_DHPILLAR + 1960, // doomednum + S_DHPILLAR, // 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 + 0, // speed + 58*FRACUNIT, // radius + 256*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP, // flags + S_NULL // raisestate + }, + // ============================================================================================================================// #ifdef SEENAMES diff --git a/src/info.h b/src/info.h index 237cc451d..53f8b5070 100644 --- a/src/info.h +++ b/src/info.h @@ -655,7 +655,7 @@ typedef enum sprite SPR_KLIT, // You have a twisted mind. But this actually is for the diagonal lightning. // Various plants - SPR_PALM, + SPR_SBUS, SPR_SHRB, SPR_TWEE, @@ -668,6 +668,21 @@ typedef enum sprite SPR_VAPE, // Volcanic Valley + // Hill Top Zone + SPR_HTZA, + SPR_HTZB, + + // Ports of gardens + SPR_SGVA, + SPR_SGVB, + SPR_SGVC, + SPR_PGTR, + SPR_PGF1, + SPR_PGF2, + SPR_PGF3, + SPR_PGBH, + SPR_DPLR, + // Xmas-specific sprites that don't fit aboxe SPR_XMS4, SPR_XMS5, @@ -3637,6 +3652,7 @@ typedef enum state S_KLIT12, // Various plants + S_SONICBUSH, S_SHRUB, S_TALLBUSH, S_AZURECITYTREE, @@ -3676,6 +3692,21 @@ typedef enum state S_VVVAPING5, S_VVVAPE, + // Hill Top Zone + S_HTZTREE, + S_HTZBUSH, + + // Ports of gardens + S_SGVINE1, + S_SGVINE2, + S_SGVINE3, + S_PGTREE, + S_PGFLOWER1, + S_PGFLOWER2, + S_PGFLOWER3, + S_PGBUSH, + S_DHPILLAR, + #ifdef SEENAMES S_NAMECHECK, #endif @@ -4351,6 +4382,7 @@ typedef enum mobj_type MT_KARMAWHEEL, // Various plants + MT_SONICBUSH, MT_SHRUB, MT_TALLBUSH, MT_AZURECITYTREE, @@ -4376,6 +4408,21 @@ typedef enum mobj_type MT_PETSMOKE, MT_VVVAPE, + // Hill Top Zone + MT_HTZTREE, + MT_HTZBUSH, + + // Ports of gardens + MT_SGVINE1, + MT_SGVINE2, + MT_SGVINE3, + MT_PGTREE, + MT_PGFLOWER1, + MT_PGFLOWER2, + MT_PGFLOWER3, + MT_PGBUSH, + MT_DHPILLAR, + #ifdef SEENAMES MT_NAMECHECK, #endif From 6bb2329800285d72b3b59b43df69b6c03809f064 Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 24 Oct 2018 21:48:09 +0100 Subject: [PATCH 15/80] SPR_VAPE on S_VVVAPING1 --- src/info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index 617975b00..daf166090 100644 --- a/src/info.c +++ b/src/info.c @@ -3108,7 +3108,7 @@ state_t states[NUMSTATES] = {SPR_SMOK, 3, 25, {A_BubbleRise}, 0, 50096, S_PETSMOKE5}, // S_PETSMOKE4 {SPR_SMOK, 4, 35, {A_BubbleRise}, 0, 50096, S_NULL}, // S_PETSMOKE5 {SPR_VAPE, 0, 1, {NULL}, 0, 0, S_VVVAPING1}, // S_VVVAPING0 - {SPR_SMOK, 0, 5, {A_SetScale}, FRACUNIT*2, 1, S_VVVAPING2}, // S_VVVAPING1 + {SPR_VAPE, 0, 5, {A_SetScale}, FRACUNIT*2, 1, S_VVVAPING2}, // S_VVVAPING1 {SPR_VAPE, 1, 5, {A_BubbleRise}, 0, 50096, S_VVVAPING3}, // S_VVVAPING2 {SPR_VAPE, 2, 15, {A_BubbleRise}, 0, 50096, S_VVVAPING4}, // S_VVVAPING3 {SPR_VAPE, 3, 25, {A_BubbleRise}, 0, 50096, S_VVVAPING5}, // S_VVVAPING4 From 90f904241bda1b71978264aa016685c26fdd2078 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 27 Oct 2018 15:43:33 +0100 Subject: [PATCH 16/80] Felt like cleaning up the character frame list. Definitely won't merge conflict with anything else. Requires charscleanup.kart. Ezo, if you want me to, I can fix up bonuschars for this tweaked system. --- src/d_main.c | 2 +- src/info.c | 46 +++++++++++++++++++++++----------------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index e1bcce8c6..500f61166 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -954,7 +954,7 @@ static void IdentifyVersion(void) // SRB2kart - Add graphics (temp) // The command for md5 checks is "W_VerifyFileMD5" - looks for ASSET_HASH_SRB2_SRB in config.h.in D_AddFile(va(pandf,srb2waddir,"gfx.kart")); - D_AddFile(va(pandf,srb2waddir,"chars.kart")); + D_AddFile(va(pandf,srb2waddir,"charscleanup.kart")); D_AddFile(va(pandf,srb2waddir,"maps.kart")); //D_AddFile(va(pandf,srb2waddir,"sounds.kart")); MUSICTEST("sounds.kart") diff --git a/src/info.c b/src/info.c index cde74cee2..5f6991462 100644 --- a/src/info.c +++ b/src/info.c @@ -97,25 +97,25 @@ state_t states[NUMSTATES] = {SPR_PLAY, 3, 1, {NULL}, 0, 0, S_KART_STND1_L}, // S_KART_STND2_L D {SPR_PLAY, 4, 1, {NULL}, 0, 0, S_KART_STND2_R}, // S_KART_STND1_R E {SPR_PLAY, 5, 1, {NULL}, 0, 0, S_KART_STND1_R}, // S_KART_STND2_R F - {SPR_PLAY, 6, 1, {NULL}, 0, 0, S_KART_WALK2}, // S_KART_WALK1 G - {SPR_PLAY, 7, 1, {NULL}, 0, 0, S_KART_WALK1}, // S_KART_WALK2 H - {SPR_PLAY, 8, 1, {NULL}, 0, 0, S_KART_WALK2_L}, // S_KART_WALK1_L I - {SPR_PLAY, 9, 1, {NULL}, 0, 0, S_KART_WALK1_L}, // S_KART_WALK2_L J - {SPR_PLAY, 10, 1, {NULL}, 0, 0, S_KART_WALK2_R}, // S_KART_WALK1_R K - {SPR_PLAY, 11, 1, {NULL}, 0, 0, S_KART_WALK1_R}, // S_KART_WALK2_R L - {SPR_PLAY, 12, 1, {NULL}, 0, 0, S_KART_RUN2}, // S_KART_RUN1 M - {SPR_PLAY, 13, 1, {NULL}, 0, 0, S_KART_RUN1}, // S_KART_RUN2 N - {SPR_PLAY, 14, 1, {NULL}, 0, 0, S_KART_RUN2_L}, // S_KART_RUN1_L O - {SPR_PLAY, 15, 1, {NULL}, 0, 0, S_KART_RUN1_L}, // S_KART_RUN2_L P - {SPR_PLAY, 16, 1, {NULL}, 0, 0, S_KART_RUN2_R}, // S_KART_RUN1_R Q - {SPR_PLAY, 17, 1, {NULL}, 0, 0, S_KART_RUN1_R}, // S_KART_RUN2_R R - {SPR_PLAY, 18, 1, {NULL}, 0, 0, S_KART_DRIFT2_L}, // S_KART_DRIFT1_L S - {SPR_PLAY, 19, 1, {NULL}, 0, 0, S_KART_DRIFT1_L}, // S_KART_DRIFT2_L T - {SPR_PLAY, 20, 1, {NULL}, 0, 0, S_KART_DRIFT2_R}, // S_KART_DRIFT1_R U - {SPR_PLAY, 21, 1, {NULL}, 0, 0, S_KART_DRIFT1_R}, // S_KART_DRIFT2_R V - {SPR_PLAY, 22, -1, {NULL}, 0, 0, S_KART_SPIN}, // S_KART_SPIN W - {SPR_PLAY, 22, 350, {NULL}, 0, 0, S_KART_STND1}, // S_KART_PAIN W - {SPR_PLAY, 23, 350, {NULL}, 0, 0, S_KART_STND1}, // S_KART_SQUISH X + {SPR_PLAY, 6, 1, {NULL}, 0, 0, S_KART_WALK2}, // S_KART_WALK1 A + {SPR_PLAY, 7, 1, {NULL}, 0, 0, S_KART_WALK1}, // S_KART_WALK2 G + {SPR_PLAY, 8, 1, {NULL}, 0, 0, S_KART_WALK2_L}, // S_KART_WALK1_L C + {SPR_PLAY, 9, 1, {NULL}, 0, 0, S_KART_WALK1_L}, // S_KART_WALK2_L H + {SPR_PLAY, 10, 1, {NULL}, 0, 0, S_KART_WALK2_R}, // S_KART_WALK1_R E + {SPR_PLAY, 11, 1, {NULL}, 0, 0, S_KART_WALK1_R}, // S_KART_WALK2_R I + {SPR_PLAY, 12, 1, {NULL}, 0, 0, S_KART_RUN2}, // S_KART_RUN1 A + {SPR_PLAY, 13, 1, {NULL}, 0, 0, S_KART_RUN1}, // S_KART_RUN2 J + {SPR_PLAY, 14, 1, {NULL}, 0, 0, S_KART_RUN2_L}, // S_KART_RUN1_L C + {SPR_PLAY, 15, 1, {NULL}, 0, 0, S_KART_RUN1_L}, // S_KART_RUN2_L K + {SPR_PLAY, 16, 1, {NULL}, 0, 0, S_KART_RUN2_R}, // S_KART_RUN1_R E + {SPR_PLAY, 17, 1, {NULL}, 0, 0, S_KART_RUN1_R}, // S_KART_RUN2_R L + {SPR_PLAY, 18, 1, {NULL}, 0, 0, S_KART_DRIFT2_L}, // S_KART_DRIFT1_L M + {SPR_PLAY, 19, 1, {NULL}, 0, 0, S_KART_DRIFT1_L}, // S_KART_DRIFT2_L N + {SPR_PLAY, 20, 1, {NULL}, 0, 0, S_KART_DRIFT2_R}, // S_KART_DRIFT1_R O + {SPR_PLAY, 21, 1, {NULL}, 0, 0, S_KART_DRIFT1_R}, // S_KART_DRIFT2_R P + {SPR_PLAY, 22, -1, {NULL}, 0, 0, S_KART_SPIN}, // S_KART_SPIN Q + {SPR_PLAY, 22, 350, {NULL}, 0, 0, S_KART_STND1}, // S_KART_PAIN Q + {SPR_PLAY, 23, 350, {NULL}, 0, 0, S_KART_STND1}, // S_KART_SQUISH R /* {SPR_PLAY, 0, 105, {NULL}, 0, 0, S_PLAY_TAP1}, // S_PLAY_STND {SPR_PLAY, 1, 16, {NULL}, 0, 0, S_PLAY_TAP2}, // S_PLAY_TAP1 @@ -178,14 +178,14 @@ state_t states[NUMSTATES] = // 1-Up Box Sprites (uses player sprite) // Kart: default to signpost just to ensure there are no missing sprite errors... - {SPR_PLAY, 24, 2, {NULL}, 0, 16, S_PLAY_BOX2}, // S_PLAY_BOX1 + {SPR_PLAY, 18, 2, {NULL}, 0, 16, S_PLAY_BOX2}, // S_PLAY_BOX1 {SPR_NULL, 0, 1, {NULL}, 0, 0, S_PLAY_BOX1}, // S_PLAY_BOX2 - {SPR_PLAY, 24, 4, {NULL}, 0, 4, S_PLAY_ICON2}, // S_PLAY_ICON1 + {SPR_PLAY, 18, 4, {NULL}, 0, 4, S_PLAY_ICON2}, // S_PLAY_ICON1 {SPR_NULL, 0, 12, {NULL}, 0, 0, S_PLAY_ICON3}, // S_PLAY_ICON2 - {SPR_PLAY, 24, 18, {NULL}, 0, 4, S_NULL}, // S_PLAY_ICON3 + {SPR_PLAY, 18, 18, {NULL}, 0, 4, S_NULL}, // S_PLAY_ICON3 // Level end sign (uses player sprite) - {SPR_PLAY, 24, 1, {NULL}, 0, 24, S_PLAY_SIGN}, // S_PLAY_SIGN + {SPR_PLAY, 18, 1, {NULL}, 0, 18, S_PLAY_SIGN}, // S_PLAY_SIGN S // Blue Crawla {SPR_POSS, 0, 5, {A_Look}, 0, 0, S_POSS_STND}, // S_POSS_STND From 889064527a7cdad5ccb05d84e33aed744cbeef30 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 27 Oct 2018 16:25:25 +0100 Subject: [PATCH 17/80] dumbass who forgot to stage most of the actual changes because she actually deleted all the changes and then remade them by accident --- src/info.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/info.c b/src/info.c index 5f6991462..ea2240f4b 100644 --- a/src/info.c +++ b/src/info.c @@ -97,25 +97,25 @@ state_t states[NUMSTATES] = {SPR_PLAY, 3, 1, {NULL}, 0, 0, S_KART_STND1_L}, // S_KART_STND2_L D {SPR_PLAY, 4, 1, {NULL}, 0, 0, S_KART_STND2_R}, // S_KART_STND1_R E {SPR_PLAY, 5, 1, {NULL}, 0, 0, S_KART_STND1_R}, // S_KART_STND2_R F - {SPR_PLAY, 6, 1, {NULL}, 0, 0, S_KART_WALK2}, // S_KART_WALK1 A - {SPR_PLAY, 7, 1, {NULL}, 0, 0, S_KART_WALK1}, // S_KART_WALK2 G - {SPR_PLAY, 8, 1, {NULL}, 0, 0, S_KART_WALK2_L}, // S_KART_WALK1_L C - {SPR_PLAY, 9, 1, {NULL}, 0, 0, S_KART_WALK1_L}, // S_KART_WALK2_L H - {SPR_PLAY, 10, 1, {NULL}, 0, 0, S_KART_WALK2_R}, // S_KART_WALK1_R E - {SPR_PLAY, 11, 1, {NULL}, 0, 0, S_KART_WALK1_R}, // S_KART_WALK2_R I - {SPR_PLAY, 12, 1, {NULL}, 0, 0, S_KART_RUN2}, // S_KART_RUN1 A - {SPR_PLAY, 13, 1, {NULL}, 0, 0, S_KART_RUN1}, // S_KART_RUN2 J - {SPR_PLAY, 14, 1, {NULL}, 0, 0, S_KART_RUN2_L}, // S_KART_RUN1_L C - {SPR_PLAY, 15, 1, {NULL}, 0, 0, S_KART_RUN1_L}, // S_KART_RUN2_L K - {SPR_PLAY, 16, 1, {NULL}, 0, 0, S_KART_RUN2_R}, // S_KART_RUN1_R E - {SPR_PLAY, 17, 1, {NULL}, 0, 0, S_KART_RUN1_R}, // S_KART_RUN2_R L - {SPR_PLAY, 18, 1, {NULL}, 0, 0, S_KART_DRIFT2_L}, // S_KART_DRIFT1_L M - {SPR_PLAY, 19, 1, {NULL}, 0, 0, S_KART_DRIFT1_L}, // S_KART_DRIFT2_L N - {SPR_PLAY, 20, 1, {NULL}, 0, 0, S_KART_DRIFT2_R}, // S_KART_DRIFT1_R O - {SPR_PLAY, 21, 1, {NULL}, 0, 0, S_KART_DRIFT1_R}, // S_KART_DRIFT2_R P - {SPR_PLAY, 22, -1, {NULL}, 0, 0, S_KART_SPIN}, // S_KART_SPIN Q - {SPR_PLAY, 22, 350, {NULL}, 0, 0, S_KART_STND1}, // S_KART_PAIN Q - {SPR_PLAY, 23, 350, {NULL}, 0, 0, S_KART_STND1}, // S_KART_SQUISH R + {SPR_PLAY, 0, 1, {NULL}, 0, 0, S_KART_WALK2}, // S_KART_WALK1 A + {SPR_PLAY, 6, 1, {NULL}, 0, 0, S_KART_WALK1}, // S_KART_WALK2 G + {SPR_PLAY, 2, 1, {NULL}, 0, 0, S_KART_WALK2_L}, // S_KART_WALK1_L C + {SPR_PLAY, 7, 1, {NULL}, 0, 0, S_KART_WALK1_L}, // S_KART_WALK2_L H + {SPR_PLAY, 4, 1, {NULL}, 0, 0, S_KART_WALK2_R}, // S_KART_WALK1_R E + {SPR_PLAY, 8, 1, {NULL}, 0, 0, S_KART_WALK1_R}, // S_KART_WALK2_R I + {SPR_PLAY, 0, 1, {NULL}, 0, 0, S_KART_RUN2}, // S_KART_RUN1 A + {SPR_PLAY, 9, 1, {NULL}, 0, 0, S_KART_RUN1}, // S_KART_RUN2 J + {SPR_PLAY, 2, 1, {NULL}, 0, 0, S_KART_RUN2_L}, // S_KART_RUN1_L C + {SPR_PLAY, 10, 1, {NULL}, 0, 0, S_KART_RUN1_L}, // S_KART_RUN2_L K + {SPR_PLAY, 4, 1, {NULL}, 0, 0, S_KART_RUN2_R}, // S_KART_RUN1_R E + {SPR_PLAY, 11, 1, {NULL}, 0, 0, S_KART_RUN1_R}, // S_KART_RUN2_R L + {SPR_PLAY, 12, 1, {NULL}, 0, 0, S_KART_DRIFT2_L}, // S_KART_DRIFT1_L M + {SPR_PLAY, 13, 1, {NULL}, 0, 0, S_KART_DRIFT1_L}, // S_KART_DRIFT2_L N + {SPR_PLAY, 14, 1, {NULL}, 0, 0, S_KART_DRIFT2_R}, // S_KART_DRIFT1_R O + {SPR_PLAY, 15, 1, {NULL}, 0, 0, S_KART_DRIFT1_R}, // S_KART_DRIFT2_R P + {SPR_PLAY, 16, -1, {NULL}, 0, 0, S_KART_SPIN}, // S_KART_SPIN Q + {SPR_PLAY, 16, 350, {NULL}, 0, 0, S_KART_STND1}, // S_KART_PAIN Q + {SPR_PLAY, 17, 350, {NULL}, 0, 0, S_KART_STND1}, // S_KART_SQUISH R /* {SPR_PLAY, 0, 105, {NULL}, 0, 0, S_PLAY_TAP1}, // S_PLAY_STND {SPR_PLAY, 1, 16, {NULL}, 0, 0, S_PLAY_TAP2}, // S_PLAY_TAP1 From 503985d48dace0e27c6d538911628f3ee0227522 Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 27 Oct 2018 21:30:20 +0100 Subject: [PATCH 18/80] Minor correction - Jeck initially got it wrong, but informed me after lots of testin's. --- src/info.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/info.c b/src/info.c index ea2240f4b..48db114a5 100644 --- a/src/info.c +++ b/src/info.c @@ -97,11 +97,11 @@ state_t states[NUMSTATES] = {SPR_PLAY, 3, 1, {NULL}, 0, 0, S_KART_STND1_L}, // S_KART_STND2_L D {SPR_PLAY, 4, 1, {NULL}, 0, 0, S_KART_STND2_R}, // S_KART_STND1_R E {SPR_PLAY, 5, 1, {NULL}, 0, 0, S_KART_STND1_R}, // S_KART_STND2_R F - {SPR_PLAY, 0, 1, {NULL}, 0, 0, S_KART_WALK2}, // S_KART_WALK1 A + {SPR_PLAY, 9, 1, {NULL}, 0, 0, S_KART_WALK2}, // S_KART_WALK1 J {SPR_PLAY, 6, 1, {NULL}, 0, 0, S_KART_WALK1}, // S_KART_WALK2 G - {SPR_PLAY, 2, 1, {NULL}, 0, 0, S_KART_WALK2_L}, // S_KART_WALK1_L C + {SPR_PLAY, 10, 1, {NULL}, 0, 0, S_KART_WALK2_L}, // S_KART_WALK1_L K {SPR_PLAY, 7, 1, {NULL}, 0, 0, S_KART_WALK1_L}, // S_KART_WALK2_L H - {SPR_PLAY, 4, 1, {NULL}, 0, 0, S_KART_WALK2_R}, // S_KART_WALK1_R E + {SPR_PLAY, 11, 1, {NULL}, 0, 0, S_KART_WALK2_R}, // S_KART_WALK1_R L {SPR_PLAY, 8, 1, {NULL}, 0, 0, S_KART_WALK1_R}, // S_KART_WALK2_R I {SPR_PLAY, 0, 1, {NULL}, 0, 0, S_KART_RUN2}, // S_KART_RUN1 A {SPR_PLAY, 9, 1, {NULL}, 0, 0, S_KART_RUN1}, // S_KART_RUN2 J From 3516b11b33957b74cfc458901569be9bcbc3865a Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 27 Oct 2018 22:23:44 +0100 Subject: [PATCH 19/80] toaster: not good at stuff (signpost z offset fix) --- src/info.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/info.c b/src/info.c index 48db114a5..b8ed6550e 100644 --- a/src/info.c +++ b/src/info.c @@ -185,7 +185,7 @@ state_t states[NUMSTATES] = {SPR_PLAY, 18, 18, {NULL}, 0, 4, S_NULL}, // S_PLAY_ICON3 // Level end sign (uses player sprite) - {SPR_PLAY, 18, 1, {NULL}, 0, 18, S_PLAY_SIGN}, // S_PLAY_SIGN S + {SPR_PLAY, 18, 1, {NULL}, 0, 24, S_PLAY_SIGN}, // S_PLAY_SIGN S // Blue Crawla {SPR_POSS, 0, 5, {A_Look}, 0, 0, S_POSS_STND}, // S_POSS_STND From 3c04b2103b77bef1ef8954942df0e96aa83482ef Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 28 Oct 2018 16:27:55 +0000 Subject: [PATCH 20/80] Stupidbad-big commit, but PLEASE don't ask me to re-do this on another branch, I swear to god. I know it makes things more difficult on you, and I'm sorry for that, but I'm definitely feeling the goddamn crunch right now and I wanna take a step back from this spaghetti nightmare and clear my head. * Do that thing where the character icons are ALWAYS 1x sized, through having two seperate lumps. * Revamp the S_SKIN parameters to be `facerank` (rankings - equivalent of half-scale old face), `facewant` (WANTED - equivalent of old face), and `facemmap` (equivalent of old iconprefix). * Do that thing Oni wanted where it shows two postions above and two positions below your current ranking (and you) to the left of the screen, instead of always the top 4, with some limits to avoid drawing outside of everything. * Replace the last few shitty Mario numbers (for the left rankings) with cool, new Oni numbers. * Change a bunch of offsets and things so the tab rankings and the intermission work nicer with 9+ players. --- src/hu_stuff.c | 39 +++++++-------- src/hu_stuff.h | 1 - src/k_kart.c | 125 +++++++++++++++++++--------------------------- src/k_kart.h | 2 - src/lua_skinlib.c | 30 +++++------ src/m_menu.c | 97 +++++++++++++++++------------------ src/p_setup.c | 1 - src/r_things.c | 46 ++++++----------- src/r_things.h | 5 +- src/st_stuff.c | 31 +++++------- src/st_stuff.h | 7 +-- src/y_inter.c | 39 +++++++-------- 12 files changed, 182 insertions(+), 241 deletions(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 4210b70ed..c73151375 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -87,7 +87,6 @@ patch_t *rmatcico; patch_t *bmatcico; patch_t *tagico; patch_t *tallminus; -patch_t *iconprefix[MAXSKINS]; // minimap icons //------------------------------------------- // coop hud @@ -2281,9 +2280,9 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I V_DrawFill(1, 26, 318, 1, 0); // Draw a horizontal line because it looks nice! if (scorelines > 8) { - V_DrawFill(160, 26, 1, 154, 0); // Draw a vertical line to separate the two sides. - V_DrawFill(1, 180, 318, 1, 0); // And a horizontal line near the bottom. - rightoffset = 156; + V_DrawFill(160, 26, 1, 147, 0); // Draw a vertical line to separate the two sides. + V_DrawFill(1, 173, 318, 1, 0); // And a horizontal line near the bottom. + rightoffset = (BASEVIDWIDTH/2) - 4 - x; } for (i = 0; i < scorelines; i++) @@ -2318,8 +2317,8 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I else colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo->color, GTC_CACHE); - V_DrawSmallMappedPatch(x, y-4, 0, faceprefix[players[tab[i].num].skin], colormap); - if (G_BattleGametype() && players[tab[i].num].kartstuff[k_bumper] > 0) + V_DrawMappedPatch(x, y-4, 0, facerankprefix[players[tab[i].num].skin], colormap); + /*if (G_BattleGametype() && players[tab[i].num].kartstuff[k_bumper] > 0) -- doesn't physically fit... { INT32 bumperx = x-5; for (j = 0; j < players[tab[i].num].kartstuff[k_bumper]; j++) @@ -2327,7 +2326,7 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I bumperx -= 3; V_DrawSmallMappedPatch(bumperx, y+6, 0, W_CachePatchName("K_BLNICO", PU_CACHE), colormap); } - } + }*/ } if (G_BattleGametype() && players[tab[i].num].kartstuff[k_bumper] <= 0) @@ -2347,11 +2346,11 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I else V_DrawRightAlignedString(x+rightoffset, y, 0, va("%u", tab[i].count)); - y += 16; + y += 18; if (i == 7) { - y = 32; - x += BASEVIDWIDTH/2; + y = 33; + x = (BASEVIDWIDTH/2) + 4; } } } @@ -2416,15 +2415,15 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I if (players[tab[i].num].powers[pw_super]) { colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE); - V_DrawSmallMappedPatch (x, y-4, 0, superprefix[players[tab[i].num].skin], colormap); + V_DrawSmallMappedPatch (x, y-4, 0, facewantprefix[players[tab[i].num].skin], colormap); } else { colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE); if (players[tab[i].num].health <= 0) - V_DrawSmallTranslucentMappedPatch (x, y-4, 0, faceprefix[players[tab[i].num].skin], colormap); + V_DrawSmallTranslucentMappedPatch (x, y-4, 0, facerankprefix[players[tab[i].num].skin], colormap); else - V_DrawSmallMappedPatch (x, y-4, 0, faceprefix[players[tab[i].num].skin], colormap); + V_DrawSmallMappedPatch (x, y-4, 0, facerankprefix[players[tab[i].num].skin], colormap); } V_DrawRightAlignedThinString(x+120, y-1, ((players[tab[i].num].health > 0) ? 0 : V_TRANSLUCENT), va("%u", tab[i].count)); if (!splitscreen) @@ -2478,13 +2477,13 @@ void HU_DrawDualTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scoreline { colormap = colormaps; if (players[tab[i].num].powers[pw_super]) - V_DrawSmallScaledPatch (x, y-4, 0, superprefix[players[tab[i].num].skin]); + V_DrawSmallScaledPatch (x, y-4, 0, facewantprefix[players[tab[i].num].skin]); else { if (players[tab[i].num].health <= 0) - V_DrawSmallTranslucentPatch (x, y-4, 0, faceprefix[players[tab[i].num].skin]); + V_DrawSmallTranslucentPatch (x, y-4, 0, facerankprefix[players[tab[i].num].skin]); else - V_DrawSmallScaledPatch (x, y-4, 0, faceprefix[players[tab[i].num].skin]); + V_DrawSmallScaledPatch (x, y-4, 0, facerankprefix[players[tab[i].num].skin]); } } else @@ -2492,15 +2491,15 @@ void HU_DrawDualTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scoreline if (players[tab[i].num].powers[pw_super]) { colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE); - V_DrawSmallMappedPatch (x, y-4, 0, superprefix[players[tab[i].num].skin], colormap); + V_DrawSmallMappedPatch (x, y-4, 0, facewantprefix[players[tab[i].num].skin], colormap); } else { colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo ? players[tab[i].num].mo->color : tab[i].color, GTC_CACHE); if (players[tab[i].num].health <= 0) - V_DrawSmallTranslucentMappedPatch (x, y-4, 0, faceprefix[players[tab[i].num].skin], colormap); + V_DrawSmallTranslucentMappedPatch (x, y-4, 0, facerankprefix[players[tab[i].num].skin], colormap); else - V_DrawSmallMappedPatch (x, y-4, 0, faceprefix[players[tab[i].num].skin], colormap); + V_DrawSmallMappedPatch (x, y-4, 0, facerankprefix[players[tab[i].num].skin], colormap); } } @@ -2778,7 +2777,7 @@ static void HU_DrawRankings(void) /*if (G_GametypeHasTeams()) HU_DrawTeamTabRankings(tab, whiteplayer); //separate function for Spazzo's silly request -- gotta fix this up later else if (scorelines > 10)*/ - HU_DrawTabRankings(((scorelines > 8) ? 32 : 40), 32, tab, scorelines, whiteplayer, hilicol); + HU_DrawTabRankings(((scorelines > 8) ? 32 : 40), 33, tab, scorelines, whiteplayer, hilicol); /*else HU_DrawDualTabRankings(32, 32, tab, scorelines, whiteplayer);*/ diff --git a/src/hu_stuff.h b/src/hu_stuff.h index f21af8bf6..a91949754 100644 --- a/src/hu_stuff.h +++ b/src/hu_stuff.h @@ -76,7 +76,6 @@ extern patch_t *rmatcico; extern patch_t *bmatcico; extern patch_t *tagico; extern patch_t *tallminus; -extern patch_t *iconprefix[MAXSKINS]; #define CHAT_BUFSIZE 64 // that's enough messages, right? We'll delete the older ones when that gets out of hand. diff --git a/src/k_kart.c b/src/k_kart.c index 76670f178..26fa600b9 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5507,11 +5507,7 @@ static patch_t *kp_racefinish[2]; static patch_t *kp_positionnum[NUMPOSNUMS][NUMPOSFRAMES]; static patch_t *kp_winnernum[NUMPOSFRAMES]; -static patch_t *kp_facenull; -static patch_t *kp_facefirst; -static patch_t *kp_facesecond; -static patch_t *kp_facethird; -static patch_t *kp_facefourth; +static patch_t *kp_facenum[MAXPLAYERS+1]; static patch_t *kp_rankbumper; static patch_t *kp_ranknobumpers; @@ -5613,11 +5609,13 @@ void K_LoadKartHUDGraphics(void) kp_winnernum[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX); } - kp_facenull = W_CachePatchName("K_PFACE0", PU_HUDGFX); - kp_facefirst = W_CachePatchName("K_PFACE1", PU_HUDGFX); - kp_facesecond = W_CachePatchName("K_PFACE2", PU_HUDGFX); - kp_facethird = W_CachePatchName("K_PFACE3", PU_HUDGFX); - kp_facefourth = W_CachePatchName("K_PFACE4", PU_HUDGFX); + sprintf(buffer, "OPPRNKxx"); + for (i = 0; i <= MAXPLAYERS; i++) + { + buffer[6] = '0'+(i/10); + buffer[7] = '0'+(i%10); + kp_facenum[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX); + } // Extra ranking icons kp_rankbumper = W_CachePatchName("K_BLNICO", PU_HUDGFX); @@ -6374,12 +6372,11 @@ static boolean K_drawKartPositionFaces(void) // FACE_Y = 72; // 72 INT32 Y = FACE_Y+9; // +9 to offset where it's being drawn if there are more than one - INT32 i, j, ranklines; + INT32 i, j, ranklines, strank = 0; boolean completed[MAXPLAYERS]; INT32 rankplayer[MAXPLAYERS]; INT32 bumperx, numplayersingame = 0; UINT8 *colormap; - patch_t *localpatch = kp_facenull; ranklines = 0; memset(completed, 0, sizeof (completed)); @@ -6402,7 +6399,7 @@ static boolean K_drawKartPositionFaces(void) { for (i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i] && completed[i] == false && players[i].mo && !players[i].spectator + if (playeringame[i] && !completed[i] && players[i].mo && !players[i].spectator && (rankplayer[ranklines] < 0 || players[i].kartstuff[k_position] < players[rankplayer[ranklines]].kartstuff[k_position])) { rankplayer[ranklines] = i; @@ -6412,15 +6409,35 @@ static boolean K_drawKartPositionFaces(void) completed[i] = true; - if (ranklines == 4) - break; // Only draw the top 4 players + if (players+i == stplyr) + strank = ranklines; + + //if (ranklines == 5) + //break; // Only draw the top 5 players -- we do this a different way now... ranklines++; } - Y -= (9*ranklines); + if (ranklines < 5) + Y -= (9*ranklines); + else + Y -= (9*5); - for (i = 0; i < ranklines; i++) + if (strank <= 2) // too close to the top? + { + i = 0; + if (ranklines > 5) // could be both... + ranklines = 5; + } + else if (strank+3 > ranklines) // too close to the bottom? + i = ranklines - 5; + else + { + i = strank-2; + ranklines = strank+3; + } + + for (; i < ranklines; i++) { if (players[rankplayer[i]].spectator) continue; // Spectators are ignored if (!players[rankplayer[i]].mo) continue; @@ -6435,7 +6452,7 @@ static boolean K_drawKartPositionFaces(void) else colormap = R_GetTranslationColormap(players[rankplayer[i]].skin, players[rankplayer[i]].mo->color, GTC_CACHE); - V_DrawSmallMappedPatch(FACE_X, Y, V_HUDTRANS|V_SNAPTOLEFT, faceprefix[players[rankplayer[i]].skin], colormap); + V_DrawMappedPatch(FACE_X, Y, V_HUDTRANS|V_SNAPTOLEFT, facerankprefix[players[rankplayer[i]].skin], colormap); if (G_BattleGametype() && players[rankplayer[i]].kartstuff[k_bumper] > 0) { for (j = 0; j < players[rankplayer[i]].kartstuff[k_bumper]; j++) @@ -6446,20 +6463,16 @@ static boolean K_drawKartPositionFaces(void) } } - // Draws the little number over the face - switch (players[rankplayer[i]].kartstuff[k_position]) - { - case 1: localpatch = kp_facefirst; break; - case 2: localpatch = kp_facesecond; break; - case 3: localpatch = kp_facethird; break; - case 4: localpatch = kp_facefourth; break; - default: break; - } - if (G_BattleGametype() && players[rankplayer[i]].kartstuff[k_bumper] <= 0) V_DrawSmallScaledPatch(FACE_X-2, Y, V_HUDTRANS|V_SNAPTOLEFT, kp_ranknobumpers); else - V_DrawSmallScaledPatch(FACE_X, Y, V_HUDTRANS|V_SNAPTOLEFT, localpatch); + { + INT32 pos = players[rankplayer[i]].kartstuff[k_position]; + if (pos < 0 || pos > MAXPLAYERS) + pos = 0; + // Draws the little number over the face + V_DrawScaledPatch(FACE_X-5, Y+10, V_HUDTRANS|V_SNAPTOLEFT, kp_facenum[pos]); + } Y += 18; } @@ -6605,7 +6618,7 @@ static void K_drawKartWanted(void) for (i = 0; i < numwanted; i++) { - INT32 x = WANT_X+7, y = WANT_Y+20; + INT32 x = WANT_X+8, y = WANT_Y+21; fixed_t scale = FRACUNIT/2; player_t *p = &players[battlewanted[i]]; @@ -6613,24 +6626,19 @@ static void K_drawKartWanted(void) break; if (numwanted == 1) - { - x++; //y++; scale = FRACUNIT; - } else { if (i & 1) - x += 18; + x += 16; if (i > 1) - y += 17; + y += 16; } - if (players[battlewanted[i]].skincolor == 0) - V_DrawFixedPatch(x<skin], NULL); - else + if (players[battlewanted[i]].skincolor) { colormap = R_GetTranslationColormap(TC_RAINBOW, p->skincolor, GTC_CACHE); - V_DrawFixedPatch(x<skin], colormap); + V_DrawFixedPatch(x<skin] : facerankprefix[p->skin]), colormap); } } } @@ -6685,35 +6693,6 @@ static void K_drawKartPlayerCheck(void) } } -void K_LoadIconGraphics(char *facestr, INT32 skinnum) -{ - char namelump[9]; - - // hack: make sure base face name is no more than 8 chars - if (strlen(facestr) > 8) - facestr[8] = '\0'; - strcpy(namelump, facestr); // copy base name - - iconprefix[skinnum] = W_CachePatchName(namelump, PU_HUDGFX); - iconfreed[skinnum] = false; -} - -#if 0 //unused -static void K_UnLoadIconGraphics(INT32 skinnum) -{ - Z_Free(iconprefix[skinnum]); - iconfreed[skinnum] = true; -} -#endif - -void K_ReloadSkinIconGraphics(void) -{ - INT32 i; - - for (i = 0; i < numskins; i++) - K_LoadIconGraphics(skins[i].iconprefix, i); -} - static void K_drawKartMinimapHead(mobj_t *mo, INT32 x, INT32 y, INT32 flags, patch_t *AutomapPic) { // amnum xpos & ypos are the icon's speed around the HUD. @@ -6780,18 +6759,18 @@ static void K_drawKartMinimapHead(mobj_t *mo, INT32 x, INT32 y, INT32 flags, pat if (encoremode) amnumxpos = -amnumxpos; - amxpos = amnumxpos + ((x + AutomapPic->width/2 - (iconprefix[skin]->width/2))<height/2 - (iconprefix[skin]->height/2))<width/2 - (facemmapprefix[skin]->width/2))<height/2 - (facemmapprefix[skin]->height/2))<width/2 + (iconprefix[skin]->width/2))<width/2 + (facemmapprefix[skin]->width/2))<color) // 'default' color - V_DrawSciencePatch(amxpos, amypos, flags, iconprefix[skin], FRACUNIT); + V_DrawSciencePatch(amxpos, amypos, flags, facemmapprefix[skin], FRACUNIT); else { UINT8 *colormap; @@ -6799,7 +6778,7 @@ static void K_drawKartMinimapHead(mobj_t *mo, INT32 x, INT32 y, INT32 flags, pat colormap = R_GetTranslationColormap(TC_RAINBOW, mo->color, 0); else colormap = R_GetTranslationColormap(skin, mo->color, 0); - V_DrawFixedPatch(amxpos, amypos, FRACUNIT, flags, iconprefix[skin], colormap); + V_DrawFixedPatch(amxpos, amypos, FRACUNIT, flags, facemmapprefix[skin], colormap); } } diff --git a/src/k_kart.h b/src/k_kart.h index 671efb89c..6b4706329 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -67,8 +67,6 @@ fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my void K_drawKartHUD(void); void K_drawKartFreePlay(UINT32 flashtime); void K_drawKartTimestamp(tic_t drawtime, INT32 TX, INT32 TY, INT16 emblemmap, boolean playing); -void K_LoadIconGraphics(char *facestr, INT32 skinnum); -void K_ReloadSkinIconGraphics(void); // ========================================================================= #endif // __K_KART__ diff --git a/src/lua_skinlib.c b/src/lua_skinlib.c index a267d998d..7223e8dbe 100644 --- a/src/lua_skinlib.c +++ b/src/lua_skinlib.c @@ -27,9 +27,9 @@ enum skin { skin_flags, skin_realname, skin_hudname, - skin_charsel, - skin_face, - skin_superface, + skin_facerank, + skin_facewant, + skin_facemmap, skin_ability, skin_ability2, skin_thokitem, @@ -61,9 +61,9 @@ static const char *const skin_opt[] = { "flags", "realname", "hudname", - "charsel", - "face", - "superface", + "facerank", + "facewant", + "facemmap", "ability", "ability2", "thokitem", @@ -121,23 +121,23 @@ static int skin_get(lua_State *L) case skin_hudname: lua_pushstring(L, skin->hudname); break; - case skin_charsel: + case skin_facerank: for (i = 0; i < 8; i++) - if (!skin->charsel[i]) + if (!skin->facerank[i]) break; - lua_pushlstring(L, skin->charsel, i); + lua_pushlstring(L, skin->facerank, i); break; - case skin_face: + case skin_facewant: for (i = 0; i < 8; i++) - if (!skin->face[i]) + if (!skin->facewant[i]) break; - lua_pushlstring(L, skin->face, i); + lua_pushlstring(L, skin->facewant, i); break; - case skin_superface: + case skin_facemmap: for (i = 0; i < 8; i++) - if (!skin->superface[i]) + if (!skin->facemmap[i]) break; - lua_pushlstring(L, skin->superface, i); + lua_pushlstring(L, skin->facemmap, i); break; case skin_ability: lua_pushinteger(L, skin->ability); diff --git a/src/m_menu.c b/src/m_menu.c index 1827bf7ba..ed430cdb0 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -151,8 +151,8 @@ description_t description[32] = {"???", "", ""}, {"???", "", ""} }; -static char *char_notes = NULL; -static fixed_t char_scroll = 0; +//static char *char_notes = NULL; +//static fixed_t char_scroll = 0; boolean menuactive = false; boolean fromlevelselect = false; @@ -173,7 +173,7 @@ static char joystickInfo[8][25]; static UINT32 serverlistpage; #endif -static saveinfo_t savegameinfo[MAXSAVEGAMES]; // Extra info about the save games. +//static saveinfo_t savegameinfo[MAXSAVEGAMES]; // Extra info about the save games. INT16 startmap; // Mario, NiGHTS, or just a plain old normal game? @@ -219,10 +219,10 @@ menu_t SPauseDef; //static void M_CustomLevelSelect(INT32 choice); //static void M_CustomWarp(INT32 choice); FUNCNORETURN static ATTRNORETURN void M_UltimateCheat(INT32 choice); -static void M_LoadGameLevelSelect(INT32 choice); +//static void M_LoadGameLevelSelect(INT32 choice); static void M_GetAllEmeralds(INT32 choice); static void M_DestroyRobots(INT32 choice); -static void M_LevelSelectWarp(INT32 choice); +//static void M_LevelSelectWarp(INT32 choice); static void M_Credits(INT32 choice); static void M_PandorasBox(INT32 choice); static void M_EmblemHints(INT32 choice); @@ -244,7 +244,7 @@ static void M_ConfirmTeamScramble(INT32 choice); static void M_ConfirmTeamChange(INT32 choice); static void M_ConfirmSpectateChange(INT32 choice); //static void M_SecretsMenu(INT32 choice); -static void M_SetupChoosePlayer(INT32 choice); +//static void M_SetupChoosePlayer(INT32 choice); static void M_QuitSRB2(INT32 choice); menu_t SP_MainDef, MP_MainDef, OP_MainDef; menu_t MISC_ScrambleTeamDef, MISC_ChangeTeamDef, MISC_ChangeSpectateDef; @@ -262,7 +262,7 @@ static void M_ChooseTimeAttack(INT32 choice); static void M_ModeAttackRetry(INT32 choice); static void M_ModeAttackEndGame(INT32 choice); static void M_SetGuestReplay(INT32 choice); -static void M_ChoosePlayer(INT32 choice); +//static void M_ChoosePlayer(INT32 choice); menu_t SP_LevelStatsDef; static menu_t SP_TimeAttackDef, SP_ReplayDef, SP_GuestReplayDef, SP_GhostDef; //static menu_t SP_NightsAttackDef, SP_NightsReplayDef, SP_NightsGuestReplayDef, SP_NightsGhostDef; @@ -342,11 +342,11 @@ static void M_DrawPauseMenu(void); static void M_DrawLevelSelectOnly(boolean leftfade, boolean rightfade); static void M_DrawServerMenu(void); static void M_DrawImageDef(void); -static void M_DrawLoad(void); +//static void M_DrawLoad(void); static void M_DrawLevelStats(void); static void M_DrawTimeAttackMenu(void); //static void M_DrawNightsAttackMenu(void); -static void M_DrawSetupChoosePlayerMenu(void); +//static void M_DrawSetupChoosePlayerMenu(void); static void M_DrawControl(void); static void M_DrawVideoMenu(void); static void M_DrawHUDOptions(void); @@ -373,7 +373,7 @@ static boolean M_QuitMultiPlayerMenu(void); static void M_HandleAddons(INT32 choice); static void M_HandleSoundTest(INT32 choice); static void M_HandleImageDef(INT32 choice); -static void M_HandleLoadSave(INT32 choice); +//static void M_HandleLoadSave(INT32 choice); static void M_HandleLevelStats(INT32 choice); #ifndef NONET static void M_HandleConnectIP(INT32 choice); @@ -594,7 +594,7 @@ static menuitem_t SPauseMenu[] = // Pandora's Box will be shifted up if both options are available {IT_CALL | IT_STRING, NULL, "Pandora's Box...", M_PandorasBox, 16}, {IT_CALL | IT_STRING, NULL, "Emblem Hints...", M_EmblemHints, 24}, - {IT_CALL | IT_STRING, NULL, "Level Select...", M_LoadGameLevelSelect, 32}, + //{IT_CALL | IT_STRING, NULL, "Level Select...", M_LoadGameLevelSelect, 32}, {IT_CALL | IT_STRING, NULL, "Continue", M_SelectableClearMenus,48}, {IT_CALL | IT_STRING, NULL, "Retry", M_Retry, 56}, @@ -608,7 +608,7 @@ typedef enum { spause_pandora = 0, spause_hints, - spause_levelselect, + //spause_levelselect, spause_continue, spause_retry, @@ -726,11 +726,11 @@ static menuitem_t SR_MainMenu[] = }; -static menuitem_t SR_LevelSelectMenu[] = +/*static menuitem_t SR_LevelSelectMenu[] = { {IT_STRING|IT_CVAR, NULL, "Level", &cv_nextmap, 78}, {IT_WHITESTRING|IT_CALL, NULL, "Start", M_LevelSelectWarp, 130}, -}; +};*/ static menuitem_t SR_UnlockChecklistMenu[] = { @@ -766,7 +766,7 @@ enum }; // Single Player Load Game -static menuitem_t SP_LoadGameMenu[] = +/*static menuitem_t SP_LoadGameMenu[] = { {IT_KEYHANDLER | IT_NOTHING, NULL, "", M_HandleLoadSave, '\0'}, // dummy menuitem for the control func }; @@ -776,7 +776,7 @@ static menuitem_t SP_LevelSelectMenu[] = { {IT_STRING|IT_CVAR, NULL, "Level", &cv_nextmap, 78}, {IT_WHITESTRING|IT_CALL, NULL, "Start", M_LevelSelectWarp, 130}, -}; +};*/ // Single Player Time Attack static menuitem_t SP_TimeAttackMenu[] = @@ -906,6 +906,7 @@ static menuitem_t SP_LevelStatsMenu[] = // A rare case. // External files modify this menu, so we can't call it static. // And I'm too lazy to go through and rename it everywhere. ARRGH! +#define M_ChoosePlayer NULL menuitem_t PlayerMenu[32] = { {IT_CALL, NULL, NULL, M_ChoosePlayer, 0}, @@ -1677,7 +1678,7 @@ menu_t SR_MainDef = NULL }; -menu_t SR_LevelSelectDef = MAPICONMENUSTYLE(NULL, SR_LevelSelectMenu, &SR_MainDef); +//menu_t SR_LevelSelectDef = MAPICONMENUSTYLE(NULL, SR_LevelSelectMenu, &SR_MainDef); menu_t SR_UnlockChecklistDef = { @@ -1704,7 +1705,7 @@ menu_t SR_EmblemHintDef = // Single Player menu_t SP_MainDef = CENTERMENUSTYLE(NULL, SP_MainMenu, &MainDef, 72); -menu_t SP_LoadDef = +/*menu_t SP_LoadDef = { "M_PICKG", 1, @@ -1715,7 +1716,7 @@ menu_t SP_LoadDef = 0, NULL }; -menu_t SP_LevelSelectDef = MAPICONMENUSTYLE(NULL, SP_LevelSelectMenu, &SP_LoadDef); +menu_t SP_LevelSelectDef = MAPICONMENUSTYLE(NULL, SP_LevelSelectMenu, &SP_LoadDef);*/ menu_t SP_LevelStatsDef = { @@ -1820,7 +1821,7 @@ static menu_t SP_NightsGhostDef = };*/ -menu_t SP_PlayerDef = +/*menu_t SP_PlayerDef = { "M_PICKP", sizeof (PlayerMenu)/sizeof (menuitem_t),//player_end, @@ -1830,7 +1831,7 @@ menu_t SP_PlayerDef = 24, 32, 0, NULL -}; +};*/ #ifndef NONET // Multiplayer @@ -2629,21 +2630,21 @@ boolean M_Responder(event_t *ev) case KEY_DOWNARROW: M_NextOpt(); S_StartSound(NULL, sfx_menu1); - if (currentMenu == &SP_PlayerDef) + /*if (currentMenu == &SP_PlayerDef) { Z_Free(char_notes); char_notes = NULL; - } + }*/ return true; case KEY_UPARROW: M_PrevOpt(); S_StartSound(NULL, sfx_menu1); - if (currentMenu == &SP_PlayerDef) + /*if (currentMenu == &SP_PlayerDef) { Z_Free(char_notes); char_notes = NULL; - } + }*/ return true; case KEY_LEFTARROW: @@ -2885,7 +2886,7 @@ void M_StartControlPanel(void) } // We can always use level select though. :33 - SPauseMenu[spause_levelselect].status = (gamecomplete) ? (IT_STRING | IT_CALL) : (IT_DISABLED); + //SPauseMenu[spause_levelselect].status = (gamecomplete) ? (IT_STRING | IT_CALL) : (IT_DISABLED); // And emblem hints. SPauseMenu[spause_hints].status = (M_SecretUnlocked(SECRET_EMBLEMHINTS)) ? (IT_STRING | IT_CALL) : (IT_DISABLED); @@ -5055,7 +5056,7 @@ static void M_DestroyRobots(INT32 choice) M_StartMessage(M_GetText("Do you want to destroy all\nrobots in the current level?\n\n(Press 'Y' to confirm)\n"),M_DestroyRobotsResponse,MM_YESNO); } -static void M_LevelSelectWarp(INT32 choice) +/*static void M_LevelSelectWarp(INT32 choice) { boolean fromloadgame = (currentMenu == &SP_LevelSelectDef); @@ -5078,7 +5079,7 @@ static void M_LevelSelectWarp(INT32 choice) cursaveslot = -1; M_SetupChoosePlayer(0); } -} +}*/ // ======== // SKY ROOM @@ -5423,7 +5424,7 @@ static void M_HandleSoundTest(INT32 choice) // NEW GAME FUNCTIONS // ================== -INT32 ultimate_selectable = false; +/*INT32 ultimate_selectable = false; static void M_NewGame(void) { @@ -5433,7 +5434,7 @@ static void M_NewGame(void) CV_SetValue(&cv_newgametype, GT_RACE); // SRB2kart M_SetupChoosePlayer(0); -} +}*/ /*static void M_CustomWarp(INT32 choice) { @@ -5484,7 +5485,7 @@ static void M_SinglePlayerMenu(INT32 choice) M_SetupNextMenu(&SP_MainDef); } -static void M_LoadGameLevelSelect(INT32 choice) +/*static void M_LoadGameLevelSelect(INT32 choice) { (void)choice; levellistmode = LLM_LEVELSELECT; @@ -5499,13 +5500,13 @@ static void M_LoadGameLevelSelect(INT32 choice) M_PrepareLevelSelect(); M_SetupNextMenu(&SP_LevelSelectDef); -} +}*/ // ============== // LOAD GAME MENU // ============== -static INT32 saveSlotSelected = 0; +/*static INT32 saveSlotSelected = 0; static short menumovedir = 0; static void M_DrawLoadGameData(void) @@ -5904,13 +5905,13 @@ static void M_HandleLoadSave(INT32 choice) // // Selected from SRB2 menu // -/*static void M_LoadGame(INT32 choice) +static void M_LoadGame(INT32 choice) { (void)choice; M_ReadSaveStrings(); M_SetupNextMenu(&SP_LoadDef); -}*/ +} // // Used by cheats to force the save menu to a specific spot. @@ -6127,11 +6128,7 @@ static void M_ChoosePlayer(INT32 choice) G_DeferedInitNew(false, G_BuildMapName(startmap), (UINT8)skinnum, 0, fromlevelselect); COM_BufAddText("dummyconsvar 1\n"); // G_DeferedInitNew doesn't do this -} - -// =============== -// STATISTICS MENU -// =============== +}*/ // =============== // STATISTICS MENU @@ -6368,7 +6365,6 @@ void M_DrawTimeAttackMenu(void) { INT32 i, x, y, cursory = 0; UINT16 dispstatus; - patch_t *PictureOfUrFace; //S_ChangeMusicInternal("racent", true); // Eww, but needed for when user hits escape during demo playback @@ -6384,11 +6380,10 @@ void M_DrawTimeAttackMenu(void) y = currentMenu->y; // Character face! - if (W_CheckNumForName(skins[cv_chooseskin.value-1].face) != LUMPERROR) + if (W_CheckNumForName(skins[cv_chooseskin.value-1].facewant) != LUMPERROR) { UINT8 *colormap = R_GetTranslationColormap(cv_chooseskin.value-1, cv_playercolor.value, 0); - PictureOfUrFace = W_CachePatchName(skins[cv_chooseskin.value-1].face, PU_CACHE); - V_DrawMappedPatch(BASEVIDWIDTH-x - SHORT(PictureOfUrFace->width), y, 0, PictureOfUrFace, colormap); + V_DrawMappedPatch(BASEVIDWIDTH-x - SHORT(facewantprefix[cv_chooseskin.value-1]->width), y, 0, facewantprefix[cv_chooseskin.value-1], colormap); } for (i = 0; i < currentMenu->numitems; ++i) @@ -7676,7 +7671,6 @@ Update the maxplayers label... // player arrangement width, but there's also a chance i'm a furry, shhhhhh const INT32 paw = iconwidth + 3*incrwidth; INT32 trans = 0; - patch_t *face; UINT8 *colmap; x = BASEVIDWIDTH/2 - paw/2; y = currentMenu->y + 32; @@ -7711,15 +7705,13 @@ Update the maxplayers label... colmap = R_GetTranslationColormap(pskin, pcol, 0); - face = W_CachePatchName(skins[pskin].face, PU_CACHE); - V_DrawFixedPatch(x<= numskins) col -= numskins; x += FixedMul(iconwidth<realname, "Someone"); strcpy(skin->hudname, "???"); - strncpy(skin->charsel, "CHRSONIC", 9); - strncpy(skin->face, "MISSING", 9); - strncpy(skin->superface, "MISSING", 9); + strncpy(skin->facerank, "PLAYRANK", 9); + strncpy(skin->facewant, "PLAYWANT", 9); + strncpy(skin->facemmap, "PLAYICON", 9); skin->starttranscolor = 160; skin->prefcolor = SKINCOLOR_GREEN; @@ -2551,7 +2551,6 @@ static void Sk_SetDefaultValue(skin_t *skin) for (i = 0; i < sfx_skinsoundslot0; i++) if (S_sfx[i].skinsound != -1) skin->soundsid[S_sfx[i].skinsound] = i; - strncpy(skin->iconprefix, "SONICICN", 9); } // @@ -2584,9 +2583,9 @@ void R_InitSkins(void) strcpy(skin->realname, "Sonic"); strcpy(skin->hudname, "SONIC"); - strncpy(skin->charsel, "CHRSONIC", 9); - strncpy(skin->face, "LIVSONIC", 9); - strncpy(skin->superface, "LIVSUPER", 9); + strncpy(skin->facerank, "PLAYRANK", 9); + strncpy(skin->facewant, "PLAYWANT", 9); + strncpy(skin->facemmap, "PLAYICON", 9); skin->prefcolor = SKINCOLOR_BLUE; skin->ability = CA_THOK; @@ -2605,9 +2604,7 @@ void R_InitSkins(void) skin->spritedef.numframes = sprites[SPR_PLAY].numframes; skin->spritedef.spriteframes = sprites[SPR_PLAY].spriteframes; - ST_LoadFaceGraphics(skin->face, skin->superface, 0); - strncpy(skin->iconprefix, "SONICICN", 9); - K_LoadIconGraphics(skin->iconprefix, 0); + ST_LoadFaceGraphics(skin->facerank, skin->facewant, skin->facemmap, 0); //MD2 for sonic doesn't want to load in Linux. #ifdef HWRENDER @@ -2763,7 +2760,7 @@ void R_AddSkins(UINT16 wadnum) char *value; size_t size; skin_t *skin; - boolean hudname, realname, superface; + boolean hudname, realname; // // search for all skin markers in pwad @@ -2793,7 +2790,7 @@ void R_AddSkins(UINT16 wadnum) skin = &skins[numskins]; Sk_SetDefaultValue(skin); skin->wadnum = wadnum; - hudname = realname = superface = false; + hudname = realname = false; // parse stoken = strtok (buf2, "\r\n= "); while (stoken) @@ -2878,23 +2875,20 @@ void R_AddSkins(UINT16 wadnum) strupr(value); strncpy(skin->sprite, value, sizeof skin->sprite); } - else if (!stricmp(stoken, "charsel")) + else if (!stricmp(stoken, "facerank")) { strupr(value); - strncpy(skin->charsel, value, sizeof skin->charsel); + strncpy(skin->facerank, value, sizeof skin->facerank); } - else if (!stricmp(stoken, "face")) + else if (!stricmp(stoken, "facewant")) { strupr(value); - strncpy(skin->face, value, sizeof skin->face); - if (!superface) - strncpy(skin->superface, value, sizeof skin->superface); + strncpy(skin->facewant, value, sizeof skin->facewant); } - else if (!stricmp(stoken, "superface")) + else if (!stricmp(stoken, "facemmap")) { - superface = true; strupr(value); - strncpy(skin->superface, value, sizeof skin->superface); + strncpy(skin->facemmap, value, sizeof skin->facemmap); } #define FULLPROCESS(field) else if (!stricmp(stoken, #field)) skin->field = get_number(value); @@ -2936,11 +2930,6 @@ void R_AddSkins(UINT16 wadnum) skin->jumpfactor = FLOAT_TO_FIXED(atof(value)); else if (!stricmp(stoken, "highresscale")) skin->highresscale = FLOAT_TO_FIXED(atof(value)); - else if (!stricmp(stoken, "faceicon")) - { - strupr(value); - strncpy(skin->iconprefix, value, sizeof skin->iconprefix); - } else { INT32 found = false; @@ -3041,10 +3030,7 @@ next_token: #endif // add face graphics - ST_LoadFaceGraphics(skin->face, skin->superface, numskins); - - // load minimap icons - K_LoadIconGraphics(skin->iconprefix, numskins); + ST_LoadFaceGraphics(skin->facerank, skin->facewant, skin->facemmap, numskins); #ifdef HWRENDER if (rendermode == render_opengl) diff --git a/src/r_things.h b/src/r_things.h index a037b8734..a7542e2f0 100644 --- a/src/r_things.h +++ b/src/r_things.h @@ -81,7 +81,7 @@ typedef struct char realname[SKINNAMESIZE+1]; // Display name for level completion. char hudname[SKINNAMESIZE+1]; // HUD name to display (officially exactly 5 characters long) - char charsel[9], face[9], superface[9]; // Arbitrarily named patch lumps + char facerank[9], facewant[9], facemmap[9]; // Arbitrarily named patch lumps UINT8 ability; // ability definition UINT8 ability2; // secondary ability definition @@ -113,9 +113,6 @@ typedef struct // specific sounds per skin sfxenum_t soundsid[NUMSKINSOUNDS]; // sound # in S_sfx table - - // minimap icons - char iconprefix[9]; } skin_t; // ----------- diff --git a/src/st_stuff.c b/src/st_stuff.c index 5ba000156..f17c66ce2 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -50,8 +50,9 @@ UINT16 objectsdrawn = 0; // STATUS BAR DATA // -patch_t *faceprefix[MAXSKINS]; // face status patches -patch_t *superprefix[MAXSKINS]; // super face status patches +patch_t *facerankprefix[MAXSKINS]; // ranking +patch_t *facewantprefix[MAXSKINS]; // wanted +patch_t *facemmapprefix[MAXSKINS]; // minimap // ------------------------------------------ // status bar overlay @@ -356,28 +357,20 @@ void ST_LoadGraphics(void) } // made separate so that skins code can reload custom face graphics -void ST_LoadFaceGraphics(char *facestr, char *superstr, INT32 skinnum) +void ST_LoadFaceGraphics(char *rankstr, char *wantstr, char *mmapstr, INT32 skinnum) { - faceprefix[skinnum] = W_CachePatchName(facestr, PU_HUDGFX); - superprefix[skinnum] = W_CachePatchName(superstr, PU_HUDGFX); + facerankprefix[skinnum] = W_CachePatchName(rankstr, PU_HUDGFX); + facewantprefix[skinnum] = W_CachePatchName(wantstr, PU_HUDGFX); + facemmapprefix[skinnum] = W_CachePatchName(mmapstr, PU_HUDGFX); facefreed[skinnum] = false; } -#ifdef DELFILE -void ST_UnLoadFaceGraphics(INT32 skinnum) -{ - Z_Free(faceprefix[skinnum]); - Z_Free(superprefix[skinnum]); - facefreed[skinnum] = true; -} -#endif - void ST_ReloadSkinFaceGraphics(void) { INT32 i; for (i = 0; i < numskins; i++) - ST_LoadFaceGraphics(skins[i].face, skins[i].superface, i); + ST_LoadFaceGraphics(skins[i].facerank, skins[i].facewant, skins[i].facemmap, i); } static inline void ST_InitData(void) @@ -726,9 +719,9 @@ static void ST_drawLives(void) // SRB2kart - unused. { // skincolor face/super UINT8 *colormap = R_GetTranslationColormap(stplyr->skin, stplyr->mo->color, GTC_CACHE); - patch_t *face = faceprefix[stplyr->skin]; + patch_t *face = facerankprefix[stplyr->skin]; if (stplyr->powers[pw_super] || stplyr->pflags & PF_NIGHTSMODE) - face = superprefix[stplyr->skin]; + face = facewantprefix[stplyr->skin]; V_DrawSmallMappedPatch(hudinfo[HUD_LIVESPIC].x, hudinfo[HUD_LIVESPIC].y + (v_splitflag ? -12 : 0), V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS|v_splitflag,face, colormap); } @@ -737,7 +730,7 @@ static void ST_drawLives(void) // SRB2kart - unused. // skincolor face UINT8 *colormap = R_GetTranslationColormap(stplyr->skin, stplyr->skincolor, GTC_CACHE); V_DrawSmallMappedPatch(hudinfo[HUD_LIVESPIC].x, hudinfo[HUD_LIVESPIC].y + (v_splitflag ? -12 : 0), - V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS|v_splitflag,faceprefix[stplyr->skin], colormap); + V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS|v_splitflag,facerankprefix[stplyr->skin], colormap); } // name @@ -1965,7 +1958,7 @@ static void ST_overlayDrawer(void) INT32 splitflags = K_calcSplitFlags(0); V_DrawThinString(2, (BASEVIDHEIGHT/2)-20, V_YELLOWMAP|V_HUDTRANSHALF|splitflags, M_GetText("- SPECTATING -")); if (stplyr->powers[pw_flashing]) - V_DrawString(2, (BASEVIDHEIGHT/2)-10, V_HUDTRANSHALF|splitflags, M_GetText("Item - . . .")); + V_DrawThinString(2, (BASEVIDHEIGHT/2)-10, V_HUDTRANSHALF|splitflags, M_GetText("Item - . . .")); else if (stplyr->pflags & PF_WANTSTOJOIN) V_DrawThinString(2, (BASEVIDHEIGHT/2)-10, V_HUDTRANSHALF|splitflags, M_GetText("Item - Cancel Join")); /*else if (G_GametypeHasTeams()) diff --git a/src/st_stuff.h b/src/st_stuff.h index d0528e0a4..b054460be 100644 --- a/src/st_stuff.h +++ b/src/st_stuff.h @@ -42,7 +42,7 @@ void ST_UnloadGraphics(void); void ST_LoadGraphics(void); // face load graphics, called when skin changes -void ST_LoadFaceGraphics(char *facestr, char *superstr, INT32 playernum); +void ST_LoadFaceGraphics(char *rankstr, char *wantstr, char *mmapstr, INT32 playernum); void ST_ReloadSkinFaceGraphics(void); #ifdef DELFILE void ST_UnLoadFaceGraphics(INT32 skinnum); @@ -66,8 +66,9 @@ extern patch_t *sboscore; extern patch_t *sbotime; extern patch_t *sbocolon; extern patch_t *sboperiod; -extern patch_t *faceprefix[MAXSKINS]; // face status patches -extern patch_t *superprefix[MAXSKINS]; // super face status patches +extern patch_t *facerankprefix[MAXSKINS]; // ranking +extern patch_t *facewantprefix[MAXSKINS]; // wanted +extern patch_t *facemmapprefix[MAXSKINS]; // minimap extern patch_t *livesback; extern patch_t *ngradeletters[7]; extern boolean iconfreed[MAXPLAYERS]; diff --git a/src/y_inter.c b/src/y_inter.c index 9361dbe3c..01d6b0391 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -416,7 +416,7 @@ void Y_IntermissionDrawer(void) else*/ if (intertype == int_race || intertype == int_match) { #define NUMFORNEWCOLUMN 8 - INT32 y = 48, gutter = ((data.match.numplayers > NUMFORNEWCOLUMN) ? 0 : (BASEVIDWIDTH/2)); + INT32 y = 41, gutter = ((data.match.numplayers > NUMFORNEWCOLUMN) ? 0 : (BASEVIDWIDTH/2)); const char *timeheader; if (data.match.rankingsmode) @@ -425,26 +425,27 @@ void Y_IntermissionDrawer(void) timeheader = (intertype == int_race ? "TIME" : "SCORE"); // draw the level name - V_DrawCenteredString(-4 + x + BASEVIDWIDTH/2, 20, 0, data.match.levelstring); - V_DrawFill(x, 42, 312, 1, 0); + V_DrawCenteredString(-4 + x + BASEVIDWIDTH/2, 12, 0, data.match.levelstring); + V_DrawFill(x, 34, 312, 1, 0); if (data.match.encore) - V_DrawCenteredString(-4 + x + BASEVIDWIDTH/2, 20-8, hilicol, "ENCORE MODE"); + V_DrawCenteredString(-4 + x + BASEVIDWIDTH/2, 12-8, hilicol, "ENCORE MODE"); if (!gutter) { - V_DrawFill(x+156, 32, 1, 152, 0); + V_DrawFill(x+156, 24, 1, 158, 0); + V_DrawFill(x, 182, 312, 1, 0); - V_DrawCenteredString(x+6+(BASEVIDWIDTH/2), 32, hilicol, "#"); - V_DrawString(x+36+(BASEVIDWIDTH/2), 32, hilicol, "NAME"); + V_DrawCenteredString(x+6+(BASEVIDWIDTH/2), 24, hilicol, "#"); + V_DrawString(x+36+(BASEVIDWIDTH/2), 24, hilicol, "NAME"); - V_DrawRightAlignedString(x+152, 32, hilicol, timeheader); + V_DrawRightAlignedString(x+152, 24, hilicol, timeheader); } - V_DrawCenteredString(x+6, 32, hilicol, "#"); - V_DrawString(x+36, 32, hilicol, "NAME"); + V_DrawCenteredString(x+6, 24, hilicol, "#"); + V_DrawString(x+36, 24, hilicol, "NAME"); - V_DrawRightAlignedString(x+(BASEVIDWIDTH/2)+152, 32, hilicol, timeheader); + V_DrawRightAlignedString(x+(BASEVIDWIDTH/2)+152, 24, hilicol, timeheader); for (i = 0; i < data.match.numplayers; i++) { @@ -460,12 +461,10 @@ void Y_IntermissionDrawer(void) V_DrawCenteredString(x+6, y, 0, va("%d", data.match.pos[i])); - if (data.match.color[i] == 0) - V_DrawSmallScaledPatch(x+16, y-4, 0,faceprefix[*data.match.character[i]]); - else + if (data.match.color[i]) { UINT8 *colormap = R_GetTranslationColormap(*data.match.character[i], *data.match.color[i], GTC_CACHE); - V_DrawSmallMappedPatch(x+16, y-4, 0,faceprefix[*data.match.character[i]], colormap); + V_DrawMappedPatch(x+16, y-4, 0,facerankprefix[*data.match.character[i]], colormap); } if (!gutter) @@ -520,11 +519,11 @@ void Y_IntermissionDrawer(void) else data.match.num[i] = MAXPLAYERS; // this should be the only field setting in this function - y += 16; + y += 18; if (i == NUMFORNEWCOLUMN-1) { - y = 48; + y = 41; x += BASEVIDWIDTH/2; } #undef NUMFORNEWCOLUMN @@ -1148,12 +1147,10 @@ void Y_VoteDrawer(void) V_DrawDiag(x, y, 6, V_SNAPTOLEFT|levelinfo[votes[i]].gtc); } - if (players[i].skincolor == 0) - V_DrawSmallScaledPatch(x+24, y+9, V_SNAPTOLEFT, faceprefix[players[i].skin]); - else + if (players[i].skincolor) { UINT8 *colormap = R_GetTranslationColormap(players[i].skin, players[i].skincolor, GTC_CACHE); - V_DrawSmallMappedPatch(x+24, y+9, V_SNAPTOLEFT, faceprefix[players[i].skin], colormap); + V_DrawMappedPatch(x+24, y+9, V_SNAPTOLEFT, facerankprefix[players[i].skin], colormap); } } From 9195885ff56272ce83f3f8acdf8e4a0d05054129 Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 28 Oct 2018 16:29:56 +0000 Subject: [PATCH 21/80] unused variable [screams] --- src/hu_stuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index c73151375..043eadf4a 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -2271,7 +2271,7 @@ void HU_drawPing(INT32 x, INT32 y, INT32 ping, boolean notext) // void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer, INT32 hilicol) { - INT32 i, j, rightoffset = 240; + INT32 i, rightoffset = 240; const UINT8 *colormap; //this function is designed for 9 or less score lines only From 62bd9fafbf4f83f3582dd4329f026a8f649c7304 Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 28 Oct 2018 16:34:02 +0000 Subject: [PATCH 22/80] fix ping drawing offset (this won't be in the exe I uploaded before I disappear for a bit) --- src/hu_stuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 043eadf4a..a16d1d468 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -2295,7 +2295,7 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I if (!splitscreen) // don't draw it on splitscreen, { if (!(tab[i].num == serverplayer)) - HU_drawPing(x+ 253, y+2, playerpingtable[tab[i].num], false); + HU_drawPing(x + rightoffset + 13, y+2, playerpingtable[tab[i].num], false); } if (scorelines > 8) From 6ab0faae6f0307193fcf2f785df2440a85c0e34a Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 28 Oct 2018 18:06:21 +0000 Subject: [PATCH 23/80] Ping offset fixed even more --- src/hu_stuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index a16d1d468..c910782d1 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -2295,7 +2295,7 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I if (!splitscreen) // don't draw it on splitscreen, { if (!(tab[i].num == serverplayer)) - HU_drawPing(x + rightoffset + 13, y+2, playerpingtable[tab[i].num], false); + HU_drawPing(x + rightoffset + ((scorelines > 8) ? 13 : -27), y+2, playerpingtable[tab[i].num], false); } if (scorelines > 8) From 5496803ced5662b2a7d55104bfa6c00fe95e1a38 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sun, 28 Oct 2018 14:43:58 -0400 Subject: [PATCH 24/80] Fix kartspeed/kartweight writes --- src/d_clisrv.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 3d5b90a23..f27fc3afd 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -576,8 +576,8 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) // Just in case Lua does something like // modify these at runtime // SRB2kart - rsp->kartspeed = (UINT8)LONG(players[i].kartspeed); - rsp->kartweight = (UINT8)LONG(players[i].kartweight); + rsp->kartspeed = (UINT8)players[i].kartspeed; + rsp->kartweight = (UINT8)players[i].kartweight; // rsp->normalspeed = (fixed_t)LONG(players[i].normalspeed); rsp->runspeed = (fixed_t)LONG(players[i].runspeed); @@ -708,8 +708,8 @@ static void resynch_read_player(resynch_pak *rsp) players[i].skin = LONG(rsp->skin); // Just in case Lua does something like // modify these at runtime - players[i].kartspeed = (UINT8)LONG(rsp->kartspeed); - players[i].kartweight = (UINT8)LONG(rsp->kartweight); + players[i].kartspeed = (UINT8)rsp->kartspeed; + players[i].kartweight = (UINT8)rsp->kartweight; players[i].normalspeed = (fixed_t)LONG(rsp->normalspeed); players[i].runspeed = (fixed_t)LONG(rsp->runspeed); From d106cf701bfa5a51598748a1abb93e4d220b4a5d Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sun, 28 Oct 2018 14:45:01 -0400 Subject: [PATCH 25/80] Use k_itemtype as the additional check instead of pw_shield --- src/d_clisrv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index f27fc3afd..f811334ad 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -4344,7 +4344,7 @@ static INT16 Consistancy(void) { ret += players[i].mo->x; ret -= players[i].mo->y; - ret += players[i].powers[pw_shield]; + ret += players[i].kartstuff[k_itemtype]; // powers[pw_shield] ret *= i+1; } } From f9d8ebd4e68db8dfa678c687ca7b1816e4b09852 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sun, 28 Oct 2018 17:31:59 -0400 Subject: [PATCH 26/80] Camera crash fixes UNRELATED, but they made this branch a pain in the ass to test so I needed to fix this here :V --- src/g_game.c | 2 ++ src/p_mobj.c | 5 +++++ src/p_user.c | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/src/g_game.c b/src/g_game.c index baf89d069..c795c1d60 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -4033,6 +4033,7 @@ static void M_ForceLoadGameResponse(INT32 ch) displayplayer = consoleplayer; multiplayer = false; splitscreen = 0; + SplitScreen_OnChange(); // not needed? if (setsizeneeded) R_ExecuteSetViewSize(); @@ -4122,6 +4123,7 @@ void G_LoadGame(UINT32 slot, INT16 mapoverride) displayplayer = consoleplayer; multiplayer = false; splitscreen = 0; + SplitScreen_OnChange(); // not needed? // G_DeferedInitNew(sk_medium, G_BuildMapName(1), 0, 0, 1); if (setsizeneeded) diff --git a/src/p_mobj.c b/src/p_mobj.c index 5de7e2468..959aa741a 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3654,6 +3654,11 @@ boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled { boolean itsatwodlevel = false; postimg_t postimg = postimg_none; + + // This can happen when joining + if (thiscam->subsector == NULL || thiscam->subsector->sector == NULL) + return true; + if (twodlevel || (thiscam == &camera && players[displayplayer].mo && (players[displayplayer].mo->flags2 & MF2_TWOD)) || (thiscam == &camera2 && players[secondarydisplayplayer].mo && (players[secondarydisplayplayer].mo->flags2 & MF2_TWOD)) diff --git a/src/p_user.c b/src/p_user.c index 0f89f8262..0a933c949 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -8083,6 +8083,10 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (!player || !player->mo) return true; + // This can happen when joining + if (thiscam->subsector == NULL || thiscam->subsector->sector == NULL) + return true; + mo = player->mo; #ifndef NOCLIPCAM From 193941945ef816bf4f10d2f42d0c5f32dca893f1 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 29 Oct 2018 05:00:08 -0400 Subject: [PATCH 27/80] The motherload: all of my Lua is hardcoded This took like 6 straight hours of work, never ask me for anything ever again --- src/dehacked.c | 150 ++++++-- src/doomstat.h | 1 + src/g_game.c | 1 + src/info.c | 953 ++++++++++++++++++++++++++++++++++++++++++++++--- src/info.h | 183 ++++++++-- src/k_kart.c | 12 +- src/p_inter.c | 133 ++++--- src/p_map.c | 135 ++++++- src/p_mobj.c | 716 ++++++++++++++++++++++++++++++++++--- src/p_saveg.c | 2 + src/p_setup.c | 1 + src/p_spec.c | 2 + src/p_user.c | 2 +- 13 files changed, 2067 insertions(+), 224 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 77663ccda..b8885be4e 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6327,31 +6327,31 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_ROCKETSNEAKER_RVIBRATE", //{ Eggman Monitor - "S_FAKEITEM1", - "S_FAKEITEM2", - "S_FAKEITEM3", - "S_FAKEITEM4", - "S_FAKEITEM5", - "S_FAKEITEM6", - "S_FAKEITEM7", - "S_FAKEITEM8", - "S_FAKEITEM9", - "S_FAKEITEM10", - "S_FAKEITEM11", - "S_FAKEITEM12", - "S_FAKEITEM13", - "S_FAKEITEM14", - "S_FAKEITEM15", - "S_FAKEITEM16", - "S_FAKEITEM17", - "S_FAKEITEM18", - "S_FAKEITEM19", - "S_FAKEITEM20", - "S_FAKEITEM21", - "S_FAKEITEM22", - "S_FAKEITEM23", - "S_FAKEITEM24", - "S_DEADFAKEITEM", + "S_EGGMANITEM1", + "S_EGGMANITEM2", + "S_EGGMANITEM3", + "S_EGGMANITEM4", + "S_EGGMANITEM5", + "S_EGGMANITEM6", + "S_EGGMANITEM7", + "S_EGGMANITEM8", + "S_EGGMANITEM9", + "S_EGGMANITEM10", + "S_EGGMANITEM11", + "S_EGGMANITEM12", + "S_EGGMANITEM13", + "S_EGGMANITEM14", + "S_EGGMANITEM15", + "S_EGGMANITEM16", + "S_EGGMANITEM17", + "S_EGGMANITEM18", + "S_EGGMANITEM19", + "S_EGGMANITEM20", + "S_EGGMANITEM21", + "S_EGGMANITEM22", + "S_EGGMANITEM23", + "S_EGGMANITEM24", + "S_EGGMANITEM_DEAD", //} // Banana @@ -6863,6 +6863,59 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_CDTREEASP", "S_CDTREEBSP", + // Daytona Speedway + "S_PINETREE", + "S_PINETREE_SIDE", + + // Egg Zeppelin + "S_EZZPROPELLER", + "S_EZZPROPELLER_BLADE", + + // Desert Palace + "S_DP_PALMTREE", + + // Aurora Atoll + "S_AAZTREE_SEG", + "S_AAZTREE_COCONUT", + "S_AAZTREE_LEAF", + + // Barren Badlands + "S_BBZDUST1", // Dust + "S_BBZDUST2", + "S_BBZDUST3", + "S_BBZDUST4", + "S_FROGGER", // Frog badniks + "S_FROGGER_ATTACK", + "S_FROGGER_JUMP", + "S_FROGTONGUE", + "S_FROGTONGUE_JOINT", + "S_ROBRA", // Black cobra badniks + "S_ROBRA_HEAD", + "S_ROBRA_JOINT", + "S_ROBRASHELL_INSIDE", + "S_ROBRASHELL_OUTSIDE", + "S_BLUEROBRA", // Blue cobra badniks + "S_BLUEROBRA_HEAD", + "S_BLUEROBRA_JOINT", + + // Eerie Grove + "S_EERIEFOG1", + "S_EERIEFOG2", + "S_EERIEFOG3", + "S_EERIEFOG4", + "S_EERIEFOG5", + + // SMK ports + "S_SMK_PIPE1", // Generic pipes + "S_SMK_PIPE2", + "S_SMK_MOLE", // Donut Plains Monty Moles + "S_SMK_THWOMP", // Bowser Castle Thwomps + "S_SMK_SNOWBALL", // Vanilla Lake snowballs + "S_SMK_ICEBLOCK", // Vanilla Lake breakable ice blocks + "S_SMK_ICEBLOCK2", + "S_SMK_ICEBLOCK_DEBRIS", + "S_SMK_ICEBLOCK_DEBRIS2", + #ifdef SEENAMES "S_NAMECHECK", #endif @@ -7397,8 +7450,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_ROCKETSNEAKER", // Rocket sneakers - "MT_FAKESHIELD", - "MT_FAKEITEM", + "MT_EGGMANITEM", // Eggman items + "MT_EGGMANITEM_SHIELD", "MT_BANANA", // Banana Stuff "MT_BANANA_SHIELD", @@ -7537,6 +7590,49 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_CDTREEA", "MT_CDTREEB", + // Daytona Speedway + "MT_PINETREE", + "MT_PINETREE_SIDE", + + // Egg Zeppelin + "MT_EZZPROPELLER", + "MT_EZZPROPELLER_BLADE", + + // Desert Palace + "MT_DP_PALMTREE", + + // Aurora Atoll + "MT_AAZTREE_HELPER", + "MT_AAZTREE_SEG", + "MT_AAZTREE_COCONUT", + "MT_AAZTREE_LEAF", + + // Barren Badlands + "MT_BBZDUST", + "MT_FROGGER", + "MT_FROGTONGUE", + "MT_FROGTONGUE_JOINT", + "MT_ROBRA", + "MT_ROBRA_HEAD", + "MT_ROBRA_JOINT", + "MT_BLUEROBRA", + "MT_BLUEROBRA_HEAD", + "MT_BLUEROBRA_JOINT", + + // Eerie Grove + "MT_EERIEFOG", + "MT_EERIEFOGGEN", + + // SMK ports + "MT_SMK_PIPE", + "MT_SMK_MOLESPAWNER", + "MT_SMK_MOLE", + "MT_SMK_THWOMP", + "MT_SMK_SNOWBALL", + "MT_SMK_ICEBLOCK", + "MT_SMK_ICEBLOCK_SIDE", + "MT_SMK_ICEBLOCK_DEBRIS", + #ifdef SEENAMES "MT_NAMECHECK", #endif diff --git a/src/doomstat.h b/src/doomstat.h index 4b0c6f608..f45651d1a 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -460,6 +460,7 @@ extern tic_t wantedcalcdelay; extern tic_t indirectitemcooldown; extern tic_t mapreset; extern UINT8 nospectategrief; +extern boolean thwompsactive; extern boolean legitimateexit; extern boolean comebackshowninfo; diff --git a/src/g_game.c b/src/g_game.c index baf89d069..bbf6ebaca 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -266,6 +266,7 @@ tic_t wantedcalcdelay; // Time before it recalculates WANTED tic_t indirectitemcooldown; // Cooldown before any more Shrink, SPB, or any other item that works indirectly is awarded tic_t mapreset; // Map reset delay when enough players have joined an empty game UINT8 nospectategrief; // How many players need to be in-game to eliminate last; for preventing spectate griefing +boolean thwompsactive; // Thwomps activate on lap 2 // Client-sided, unsynched variables (NEVER use in anything that needs to be synced with other players) boolean legitimateexit; // Did this client actually finish the match? diff --git a/src/info.c b/src/info.c index cde74cee2..81fd54692 100644 --- a/src/info.c +++ b/src/info.c @@ -62,7 +62,8 @@ char sprnames[NUMSPRITES + 1][5] = "CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB","ARRO", "ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK","LZI1", "LZI2","KLIT","FZSM","FZBM","FPRT","SPTL","ENM1","GARU","MARR","REAP", - "JITB","CDMO","CDBU","VIEW" + "JITB","CDMO","CDBU","PINE","PPLR","DPPT","AATR","COCO","BDST","FROG", + "CBRA","HOLE","BBRA","EGFG","SMKP","MTYM","THWP","SNOB","ICEB","VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -2629,31 +2630,31 @@ state_t states[NUMSTATES] = {SPR_RSHE, 2, -1, {NULL}, 0, 0, S_NULL}, // S_ROCKETSNEAKER_LVIBRATE {SPR_RSHE, 3, -1, {NULL}, 0, 0, S_NULL}, // S_ROCKETSNEAKER_RVIBRATE - {SPR_FITM, FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM2}, // S_FAKEITEM1 - {SPR_FITM, 1|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM3}, // S_FAKEITEM2 - {SPR_FITM, 2|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM4}, // S_FAKEITEM3 - {SPR_FITM, 3|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM5}, // S_FAKEITEM4 - {SPR_FITM, 4|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM6}, // S_FAKEITEM5 - {SPR_FITM, 5|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM7}, // S_FAKEITEM6 - {SPR_FITM, 6|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM8}, // S_FAKEITEM7 - {SPR_FITM, 7|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM9}, // S_FAKEITEM8 - {SPR_FITM, 8|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM10}, // S_FAKEITEM9 - {SPR_FITM, 9|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM11}, // S_FAKEITEM10 - {SPR_FITM, 10|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM12}, // S_FAKEITEM11 - {SPR_FITM, 11|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM13}, // S_FAKEITEM12 - {SPR_FITM, 12|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM14}, // S_FAKEITEM13 - {SPR_FITM, 13|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM15}, // S_FAKEITEM14 - {SPR_FITM, 14|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM16}, // S_FAKEITEM15 - {SPR_FITM, 15|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM17}, // S_FAKEITEM16 - {SPR_FITM, 16|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM18}, // S_FAKEITEM17 - {SPR_FITM, 17|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM19}, // S_FAKEITEM18 - {SPR_FITM, 18|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM20}, // S_FAKEITEM19 - {SPR_FITM, 19|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM21}, // S_FAKEITEM20 - {SPR_FITM, 20|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM22}, // S_FAKEITEM21 - {SPR_FITM, 21|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM23}, // S_FAKEITEM22 // ***** - {SPR_FITM, 22|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM24}, // S_FAKEITEM23 // ***** - {SPR_FITM, 23|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_FAKEITEM1}, // S_FAKEITEM24 // ***** - {SPR_FITM, FF_FULLBRIGHT, 175, {NULL}, 0, 0, S_FAKEITEM1}, // S_DEADFAKEITEM + {SPR_FITM, FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM2}, // S_EGGMANITEM1 + {SPR_FITM, 1|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM3}, // S_EGGMANITEM2 + {SPR_FITM, 2|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM4}, // S_EGGMANITEM3 + {SPR_FITM, 3|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM5}, // S_EGGMANITEM4 + {SPR_FITM, 4|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM6}, // S_EGGMANITEM5 + {SPR_FITM, 5|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM7}, // S_EGGMANITEM6 + {SPR_FITM, 6|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM8}, // S_EGGMANITEM7 + {SPR_FITM, 7|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM9}, // S_EGGMANITEM8 + {SPR_FITM, 8|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM10}, // S_EGGMANITEM9 + {SPR_FITM, 9|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM11}, // S_EGGMANITEM10 + {SPR_FITM, 10|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM12}, // S_EGGMANITEM11 + {SPR_FITM, 11|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM13}, // S_EGGMANITEM12 + {SPR_FITM, 12|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM14}, // S_EGGMANITEM13 + {SPR_FITM, 13|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM15}, // S_EGGMANITEM14 + {SPR_FITM, 14|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM16}, // S_EGGMANITEM15 + {SPR_FITM, 15|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM17}, // S_EGGMANITEM16 + {SPR_FITM, 16|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM18}, // S_EGGMANITEM17 + {SPR_FITM, 17|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM19}, // S_EGGMANITEM18 + {SPR_FITM, 18|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM20}, // S_EGGMANITEM19 + {SPR_FITM, 19|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM21}, // S_EGGMANITEM20 + {SPR_FITM, 20|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM22}, // S_EGGMANITEM21 + {SPR_FITM, 21|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM23}, // S_EGGMANITEM22 // ***** + {SPR_FITM, 22|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM24}, // S_EGGMANITEM23 // ***** + {SPR_FITM, 23|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_EGGMANITEM1}, // S_EGGMANITEM24 // ***** + {SPR_FITM, FF_FULLBRIGHT, 175, {NULL}, 0, 0, S_EGGMANITEM1}, // S_EGGMANITEM_DEAD {SPR_BANA, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BANANA {SPR_BANA, 0, 175, {NULL}, 0, 0, S_NULL}, // S_BANANA_DEAD @@ -3158,6 +3159,63 @@ state_t states[NUMSTATES] = {SPR_CDBU, 1, -1, {NULL}, 0, 0, S_CDTREEASP}, // S_CDTREEASP {SPR_CDBU, 2, -1, {NULL}, 0, 0, S_CDTREEBSP}, // S_CDTREEBSP + // Daytona Speedway + {SPR_PINE, 1, -1, {NULL}, 0, 0, S_NULL}, // S_PINETREE + {SPR_PINE, FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_PINETREE_SIDE + + // Egg Zeppelin + {SPR_PPLR, 0, -1, {NULL}, 0, 0, S_EZZPROPELLER}, // S_EZZPROPELLER + {SPR_PPLR, FF_PAPERSPRITE|1, -1, {NULL}, 0, 0, S_EZZPROPELLER_BLADE}, // S_EZZPROPELLER_BLADE + + // Desert Palace + {SPR_DPPT, 0, -1, {NULL}, 0, 0, S_NULL}, // S_DP_PALMTREE + + // Aurora Atoll + {SPR_AATR, 0, -1, {NULL}, 0, 0, S_AAZTREE_SEG}, // S_AAZTREE_SEG + {SPR_COCO, 0, -1, {NULL}, 0, 0, S_AAZTREE_COCONUT}, // S_AAZTREE_COCONUT + {SPR_AATR, FF_PAPERSPRITE|1, -1, {NULL}, 0, 0, S_AAZTREE_LEAF}, // S_AAZTREE_LEAF + + // Barren Badlands + {SPR_BDST, FF_TRANS80, 35, {NULL}, 0, 0, S_BBZDUST2}, // S_BBZDUST1 + {SPR_BDST, FF_TRANS80|1, 12, {NULL}, 0, 0, S_BBZDUST3}, // S_BBZDUST2 + {SPR_BDST, FF_TRANS80|2, 11, {NULL}, 0, 0, S_BBZDUST4}, // S_BBZDUST3 + {SPR_BDST, FF_TRANS80|3, 10, {NULL}, 0, 0, S_NULL}, // S_BBZDUST4 + + {SPR_FROG, 0, -1, {NULL}, 0, 0, S_FROGGER}, // S_FROGGER + {SPR_FROG, 1, -1, {NULL}, 0, 0, S_FROGGER_ATTACK}, // S_FROGGER_ATTACK + {SPR_FROG, 2, -1, {NULL}, 0, 0, S_FROGGER_JUMP}, // S_FROGGER_JUMP + + {SPR_FROG, 3, 7*TICRATE/2, {NULL}, 0, 0, S_NULL}, // S_FROGTONGUE + {SPR_FROG, 4, 7*TICRATE/2, {NULL}, 0, 0, S_NULL}, // S_FROGTONGUE_JOINT + + {SPR_HOLE, 0, 1, {NULL}, 0, 0, S_ROBRA}, // S_ROBRA + {SPR_CBRA, 0, 1, {NULL}, 0, 0, S_ROBRA_HEAD}, // S_ROBRA_HEAD + {SPR_CBRA, 1, -1, {NULL}, 0, 0, S_ROBRA_JOINT}, // S_ROBRA_JOINT + {SPR_CBRA, 2, -1, {NULL}, 1, 0, S_ROBRASHELL_INSIDE}, // S_ROBRASHELL_INSIDE + {SPR_CBRA, 3, -1, {NULL}, 0, 0, S_ROBRASHELL_OUTSIDE}, // S_ROBRASHELL_OUTSIDE + + {SPR_HOLE, 0, 1, {NULL}, 0, 0, S_BLUEROBRA}, // S_BLUEROBRA + {SPR_BBRA, 0, 1, {NULL}, 0, 0, S_BLUEROBRA_HEAD}, // S_BLUEROBRA_HEAD + {SPR_BBRA, 1, -1, {NULL}, 0, 0, S_BLUEROBRA_JOINT}, // S_BLUEROBRA_JOINT + + // Eerie Grove + {SPR_EGFG, FF_TRANS90|FF_FULLBRIGHT, 7, {A_SetRandomTics}, 5, 9, S_EERIEFOG2}, // S_EERIEFOG1 + {SPR_EGFG, FF_TRANS90|FF_FULLBRIGHT|1, 7, {A_SetRandomTics}, 5, 9, S_EERIEFOG3}, // S_EERIEFOG2 + {SPR_EGFG, FF_TRANS90|FF_FULLBRIGHT|2, 7, {A_SetRandomTics}, 5, 9, S_EERIEFOG4}, // S_EERIEFOG3 + {SPR_EGFG, FF_TRANS90|FF_FULLBRIGHT|3, 7, {A_SetRandomTics}, 5, 9, S_EERIEFOG5}, // S_EERIEFOG4 + {SPR_EGFG, FF_TRANS90|FF_FULLBRIGHT|4, 7, {A_SetRandomTics}, 5, 9, S_EERIEFOG1}, // S_EERIEFOG5 + + // SMK ports + {SPR_SMKP, 0, -1, {NULL}, 0, 0, S_SMK_PIPE1}, // S_SMK_PIPE1 + {SPR_SMKP, 1, -1, {NULL}, 0, 0, S_SMK_PIPE2}, // S_SMK_PIPE2 + {SPR_MTYM, 0, -1, {NULL}, 0, 0, S_SMK_MOLE}, // S_SMK_MOLE + {SPR_THWP, 0, -1, {NULL}, 0, 0, S_SMK_THWOMP}, // S_SMK_THWOMP + {SPR_SNOB, 0, -1, {NULL}, 0, 0, S_SMK_SNOWBALL}, // S_SMK_SNOWBALL + {SPR_ICEB, FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_SMK_ICEBLOCK + {SPR_ICEB, FF_PAPERSPRITE|1, -1, {NULL}, 0, 0, S_NULL}, // S_SMK_ICEBLOCK2 + {SPR_ICEB, 2, 10, {NULL}, 0, 0, S_SMK_ICEBLOCK_DEBRIS2}, // S_SMK_ICEBLOCK_DEBRIS + {SPR_ICEB, 3, 10, {NULL}, 0, 0, S_NULL}, // S_SMK_ICEBLOCK_DEBRIS2 + #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK #endif @@ -14927,36 +14985,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_FAKESHIELD + { // MT_EGGMANITEM -1, // doomednum - S_FAKEITEM1, // 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_DEADFAKEITEM, // deathstate - S_NULL, // xdeathstate - sfx_kc2e, // deathsound - 8, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_SPECIAL|MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP, // flags - S_NULL // raisestate - }, - - { // MT_FAKEITEM - -1, // doomednum - S_FAKEITEM1, // spawnstate + S_EGGMANITEM1, // spawnstate 2, // spawnhealth S_NULL, // seestate sfx_tossed, // seesound @@ -14967,7 +14998,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_DEADFAKEITEM, // deathstate + S_EGGMANITEM_DEAD, // deathstate S_NULL, // xdeathstate sfx_kc2e, // deathsound 0, // speed @@ -14981,6 +15012,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_EGGMANITEM_SHIELD + -1, // doomednum + S_EGGMANITEM1, // 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_EGGMANITEM_DEAD, // deathstate + S_NULL, // xdeathstate + sfx_kc2e, // deathsound + 8, // speed + 16*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + 1, // damage + sfx_None, // activesound + MF_SPECIAL|MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP, // flags + S_NULL // raisestate + }, + { // MT_BANANA -1, // doomednum S_BANANA, // spawnstate @@ -17656,6 +17714,789 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_PINETREE + 3204, // doomednum + S_PINETREE, // 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 + 0, // speed + 32<mo->hnext; @@ -4659,7 +4659,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } else { - newitem = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_FAKEITEM); + newitem = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_EGGMANITEM); if (player->kartstuff[k_eggmanblame] >= 0 && player->kartstuff[k_eggmanblame] < MAXPLAYERS && playeringame[player->kartstuff[k_eggmanblame]] @@ -4685,7 +4685,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) // Eggman Monitor throwing else if (ATTACK_IS_DOWN && player->kartstuff[k_eggmanheld]) { - K_ThrowKartItem(player, false, MT_FAKEITEM, -1, 0); + K_ThrowKartItem(player, false, MT_EGGMANITEM, -1, 0); K_PlayAttackTaunt(player->mo); player->kartstuff[k_eggmanheld] = 0; K_UpdateHnextList(player, true); @@ -4811,7 +4811,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) player->kartstuff[k_itemamount]--; player->kartstuff[k_eggmanheld] = 1; S_StartSound(player->mo, sfx_s254); - mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_FAKESHIELD); + mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_EGGMANITEM_SHIELD); if (mo) { mo->flags |= MF_NOCLIPTHING; diff --git a/src/p_inter.c b/src/p_inter.c index af5dc5b12..f9c574327 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -324,48 +324,10 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) return; } - else if ((special->flags & MF_ENEMY) && !(special->flags & MF_MISSILE)) + else if ((special->flags & MF_ENEMY) && !(special->flags & MF_MISSILE) + && (special->type != MT_SPRINGSHELL)) // Kart: prevent random hits from these things { - //////////////////////////////////////////////////////// - /////ENEMIES!!////////////////////////////////////////// - //////////////////////////////////////////////////////// - /*if (special->type == MT_GSNAPPER && !(((player->pflags & PF_NIGHTSMODE) && (player->pflags & PF_DRILLING)) - || player->powers[pw_invulnerability] || player->powers[pw_super]) - && toucher->z < special->z + special->height && toucher->z + toucher->height > special->z) - { - // Can only hit snapper from above - P_DamageMobj(toucher, special, special, 1); - } - else if (special->type == MT_SHARP - && ((special->state == &states[special->info->xdeathstate]) || (toucher->z > special->z + special->height/2))) - { - // Cannot hit sharp from above or when red and angry - P_DamageMobj(toucher, special, special, 1); - } - else if (((player->pflags & PF_NIGHTSMODE) && (player->pflags & PF_DRILLING)) - || (player->pflags & (PF_JUMPED|PF_SPINNING|PF_GLIDING)) - || player->powers[pw_invulnerability] || player->powers[pw_super]) // Do you possess the ability to subdue the object? - { - if (P_MobjFlip(toucher)*toucher->momz < 0) - toucher->momz = -toucher->momz; - - P_DamageMobj(special, toucher, toucher, 1); - } - else if (((toucher->z < special->z && !(toucher->eflags & MFE_VERTICALFLIP)) - || (toucher->z + toucher->height > special->z + special->height && (toucher->eflags & MFE_VERTICALFLIP))) // Flame is bad at logic - JTE - && player->charability == CA_FLY - && (player->powers[pw_tailsfly] - || (toucher->state >= &states[S_PLAY_SPC1] && toucher->state <= &states[S_PLAY_SPC4]))) // Tails can shred stuff with his propeller. - { - if (P_MobjFlip(toucher)*toucher->momz < 0) - toucher->momz = -toucher->momz/2; - - P_DamageMobj(special, toucher, toucher, 1); - } - // SRB2kart - Removed: No more fly states - else*/ - P_DamageMobj(toucher, special, special, 1); - + P_DamageMobj(toucher, special, special, 1); return; } else if (special->flags & MF_FIRE) @@ -424,8 +386,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) P_SetTarget(&special->target, toucher); P_KillMobj(special, toucher, toucher); break; - case MT_FAKESHIELD: // SRB2kart - case MT_FAKEITEM: + case MT_EGGMANITEM_SHIELD: // SRB2kart + case MT_EGGMANITEM: if ((special->target == toucher || special->target == toucher->target) && (special->threshold > 0)) return; @@ -618,7 +580,36 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) } else K_SpinPlayer(player, special, 0, false); + return; + /*case MT_EERIEFOG: + special->frame &= ~FF_TRANS80; + special->frame |= FF_TRANS90; + return;*/ + case MT_SMK_MOLE: + if (special->target && !P_MobjWasRemoved(special->target)) + return; + if (special->health <= 0 || toucher->health <= 0) + return; + + if (!player->mo || player->spectator) + return; + + // kill + if (player->kartstuff[k_invincibilitytimer] > 0 || player->kartstuff[k_growshrinktimer] > 0) + { + P_KillMobj(special, toucher, toucher); + return; + } + + // no interaction + if (player->powers[pw_flashing] > 0 || player->kartstuff[k_hyudorotimer] > 0 + || player->kartstuff[k_squishedtimer] > 0 || player->kartstuff[k_spinouttimer] > 0) + return; + + // attach to player! + P_SetTarget(&special->target, toucher); + S_StartSound(special, sfx_s1a2); return; // ***************************************** // @@ -2044,7 +2035,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source) && !(target->type == MT_ORBINAUT || target->type == MT_ORBINAUT_SHIELD || target->type == MT_JAWZ || target->type == MT_JAWZ_DUD || target->type == MT_JAWZ_SHIELD || target->type == MT_BANANA || target->type == MT_BANANA_SHIELD - || target->type == MT_FAKEITEM || target->type == MT_FAKESHIELD + || target->type == MT_EGGMANITEM || target->type == MT_EGGMANITEM_SHIELD || target->type == MT_BALLHOG || target->type == MT_SPB)) // kart dead items target->flags |= MF_NOGRAVITY; // Don't drop Tails 03-08-2000 else @@ -2068,7 +2059,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source) // I wish I knew a better way to do this if (target->target && target->target->player && target->target->player->mo) { - if (target->target->player->kartstuff[k_eggmanheld] && target->type == MT_FAKESHIELD) + if (target->target->player->kartstuff[k_eggmanheld] && target->type == MT_EGGMANITEM_SHIELD) target->target->player->kartstuff[k_eggmanheld] = 0; if (target->target->player->kartstuff[k_itemheld]) @@ -2414,6 +2405,21 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source) else P_PlayDeathSound(target); break; + + // SRB2Kart: + case MT_SMK_ICEBLOCK: + { + mobj_t *cur = target->hnext; + while (cur && !P_MobjWasRemoved(cur)) + { + P_SetMobjState(cur, S_SMK_ICEBLOCK2); + cur = cur->hnext; + } + target->fuse = 10; + S_StartSound(target, sfx_s3k80); + } + break; + default: break; } @@ -2474,6 +2480,41 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source) target->z += P_MobjFlip(target)*20*target->scale; } + // kill tracer + if (target->type == MT_FROGGER) + { + if (target->tracer && !P_MobjWasRemoved(target->tracer)) + P_KillMobj(target->tracer, inflictor, source); + } + + + if (target->type == MT_FROGGER || target->type == MT_ROBRA_HEAD || target->type == MT_BLUEROBRA_HEAD) // clean hnext list + { + mobj_t *cur = target->hnext; + while (cur && !P_MobjWasRemoved(cur)) + { + P_KillMobj(cur, inflictor, source); + cur = cur->hnext; + } + } + + // Bounce up on death + if (target->type == MT_SMK_PIPE || target->type == MT_SMK_MOLE || target->type == MT_SMK_THWOMP) + { + target->flags &= (~MF_NOGRAVITY); + + if (target->eflags & MFE_VERTICALFLIP) + target->z -= target->height; + else + target->z += target->height; + + S_StartSound(target, target->info->deathsound); + + P_SetObjectMomZ(target, 8<x, inflictor->y, target->x, target->y)+ANGLE_90, 16<type == MT_SPIKE && inflictor && target->info->deathstate != S_NULL) { const fixed_t x=target->x,y=target->y,z=target->z; @@ -3250,7 +3291,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da { if (inflictor && (inflictor->type == MT_ORBINAUT || inflictor->type == MT_ORBINAUT_SHIELD || inflictor->type == MT_JAWZ || inflictor->type == MT_JAWZ_SHIELD || inflictor->type == MT_JAWZ_DUD - || inflictor->player)) + || inflictor->type == MT_SMK_THWOMP || inflictor->player)) { player->kartstuff[k_sneakertimer] = 0; K_SpinPlayer(player, source, 1, false); diff --git a/src/p_map.c b/src/p_map.c index 1d8a2daa6..eba6ad8d7 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -663,7 +663,38 @@ static boolean PIT_CheckThing(mobj_t *thing) } } - // SRB2kart 011617 - Colission code for kart items //{ + // SRB2kart 011617 - Colission[sic] code for kart items //{ + + if (thing->type == MT_SMK_ICEBLOCK) + { + // see if it went over / under + if (tmthing->z > thing->z + thing->height) + return true; // overhead + if (tmthing->z + tmthing->height < thing->z) + return true; // underneath + + if (!(tmthing->flags & MF_SOLID || tmthing->flags & MF_SHOOTABLE || tmthing->flags & MF_BOUNCE)) + return true; + + if (!(tmthing->health)) + return true; + + if (tmthing->type == MT_BANANA || tmthing->type == MT_BANANA_SHIELD + || tmthing->type == MT_EGGMANITEM || tmthing->type == MT_EGGMANITEM_SHIELD + || tmthing->type == MT_SSMINE || tmthing->type == MT_SSMINE_SHIELD + || tmthing->type == MT_ORBINAUT_SHIELD || tmthing->type == MT_JAWZ_SHIELD) + return false; + + if (thing->health) + P_KillMobj(thing, tmthing, tmthing); + + /*if (tmthing->player && (tmthing->player->kartstuff[k_invincibilitytimer] > 0 + || tmthing->player->kartstuff[k_growshrinktimer] > 0)) + return true;*/ + + K_KartBouncing(tmthing, thing, false, true); + return false; + } if (tmthing->type == MT_RANDOMITEM) return true; @@ -1539,6 +1570,106 @@ static boolean PIT_CheckThing(mobj_t *thing) return true; } + else if (thing->type == MT_BLUEROBRA_HEAD || thing->type == MT_BLUEROBRA_JOINT) + { + // see if it went over / under + if (tmthing->z > thing->z + thing->height) + return true; // overhead + if (tmthing->z + tmthing->height < thing->z) + return true; // underneath + + if (!thing->health) + return true; // dead + + if (tmthing->player->kartstuff[k_invincibilitytimer] > 0 + || tmthing->player->kartstuff[k_growshrinktimer] > 0) + { + if (thing->type == MT_BLUEROBRA_JOINT) + P_KillMobj(thing->target, tmthing, tmthing); + else + P_KillMobj(thing, tmthing, tmthing); + return true; + } + else + { + K_KartBouncing(tmthing, thing, false, true); + return false; + } + } + else if (thing->type == MT_SMK_PIPE) + { + // see if it went over / under + if (tmthing->z > thing->z + thing->height) + return true; // overhead + if (tmthing->z + tmthing->height < thing->z) + return true; // underneath + + if (!thing->health) + return true; // dead + + if (tmthing->player->kartstuff[k_invincibilitytimer] > 0 + || tmthing->player->kartstuff[k_growshrinktimer] > 0) + { + P_KillMobj(thing, tmthing, tmthing); + return true; // kill + } + + K_KartBouncing(tmthing, thing, false, true); + return false; + } + else if (thing->type == MT_SMK_THWOMP) + { + if (!thing->health) + return true; // dead + + if (!thwompsactive) + return true; // not active yet + + if ((tmthing->z < thing->z) && (thing->z >= thing->movefactor-(256<extravalue1 = 1; // purposely try to stomp on players early + //S_StartSound(thing, sfx_s1bb); + } + + // see if it went over / under + if (tmthing->z > thing->z + thing->height) + return true; // overhead + if (tmthing->z + tmthing->height < thing->z) + return true; // underneath + + // kill + if (tmthing->player->kartstuff[k_invincibilitytimer] > 0 + || tmthing->player->kartstuff[k_growshrinktimer] > 0) + { + P_KillMobj(thing, tmthing, tmthing); + return true; + } + + // continue to squish + if (tmthing->player->kartstuff[k_squishedtimer]) + { + tmthing->player->kartstuff[k_squishedtimer] = 2*TICRATE; + tmthing->player->powers[pw_flashing] = K_GetKartFlashing(tmthing->player); + return true; + } + + // no interaction + if (tmthing->player->powers[pw_flashing] > 0 || tmthing->player->kartstuff[k_hyudorotimer] > 0 + || tmthing->player->kartstuff[k_spinouttimer] > 0) //|| tmthing->player->kartstuff[k_squishedtimer] > 0 + return true; + + // collide + if (tmthing->z < thing->z && thing->momz < 0) + K_SquishPlayer(tmthing->player, thing); + else + { + if (thing->flags2 & MF2_AMBUSH) + P_DamageMobj(tmthing, thing, thing, 1); + K_KartBouncing(tmthing, thing, false, true); + } + + return false; + } else if (thing->flags & MF_SOLID) { // see if it went over / under @@ -1552,7 +1683,7 @@ static boolean PIT_CheckThing(mobj_t *thing) else K_KartBouncing(tmthing, thing, false, true); - return true; + return false; } // Are you touching the side of the object you're interacting with? else if (thing->z - FixedMul(FRACUNIT, thing->scale) <= tmthing->z + tmthing->height diff --git a/src/p_mobj.c b/src/p_mobj.c index 5de7e2468..91ba959ae 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1403,7 +1403,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) gravityadd >>= 1; break; case MT_BANANA: - case MT_FAKEITEM: + case MT_EGGMANITEM: case MT_SSMINE: gravityadd = FixedMul(gravityadd, 5*FRACUNIT/2); break; @@ -2345,7 +2345,7 @@ static boolean P_ZMovement(mobj_t *mo) case MT_SHELL: // SRB2kart stuff that should die in pits // Shouldn't stop moving along the Z if there's no speed though! - case MT_FAKEITEM: + case MT_EGGMANITEM: case MT_BANANA: case MT_ORBINAUT: case MT_JAWZ: @@ -6641,7 +6641,7 @@ void P_MobjThinker(mobj_t *mobj) case MT_JAWZ_SHIELD: case MT_BANANA_SHIELD: case MT_SSMINE_SHIELD: - case MT_FAKESHIELD: + case MT_EGGMANITEM_SHIELD: case MT_SINK_SHIELD: if ((mobj->health > 0 && (!mobj->target || !mobj->target->player || mobj->target->player->health <= 0 || mobj->target->player->spectator)) @@ -6838,7 +6838,8 @@ void P_MobjThinker(mobj_t *mobj) if (!mobj->tracer) { - mobj->tracer = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); + mobj_t *overlay = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); + P_SetTarget(&mobj->tracer, overlay); P_SetTarget(&mobj->tracer->target, mobj); P_SetMobjState(mobj->tracer, S_PLAYERARROW_ITEM); P_SetMobjState(mobj->tracer, S_ITEMICON); // null sprite and frame to be overwritten later @@ -7402,7 +7403,7 @@ void P_MobjThinker(mobj_t *mobj) //{ SRB2kart Items - Death States case MT_ORBINAUT: case MT_BANANA: - case MT_FAKEITEM: + case MT_EGGMANITEM: case MT_SPB: if (mobj->z <= mobj->floorz) { @@ -7412,7 +7413,7 @@ void P_MobjThinker(mobj_t *mobj) // fallthru case MT_ORBINAUT_SHIELD: case MT_BANANA_SHIELD: - case MT_FAKESHIELD: + case MT_EGGMANITEM_SHIELD: mobj->flags2 ^= MF2_DONTDRAW; break; case MT_JAWZ: @@ -7439,6 +7440,41 @@ void P_MobjThinker(mobj_t *mobj) case MT_MINEEXPLOSIONSOUND: P_RemoveMobj(mobj); return; + case MT_SMK_PIPE: + if (mobj->flags2 & MF2_AMBUSH) + P_SetMobjStateNF(mobj, mobj->info->seestate); + else + P_SetMobjStateNF(mobj, mobj->info->spawnstate); + /* FALLTHRU */ + case MT_SMK_MOLE: + mobj->flags2 ^= MF2_DONTDRAW; + if (mobj->z <= mobj->floorz) + { + P_RemoveMobj(mobj); + return; + } + break; + case MT_SMK_THWOMP: + if (mobj->flags2 & MF2_AMBUSH) + { + mobj->colorized = true; + mobj->color = (1 + (leveltime % (MAXSKINCOLORS-1))); + mobj->frame |= FF_FULLBRIGHT; + } + else + { + mobj->colorized = false; + mobj->color = SKINCOLOR_NONE; + mobj->frame &= (~FF_FULLBRIGHT); + } + + mobj->flags2 ^= MF2_DONTDRAW; + if (mobj->z <= mobj->floorz) + { + P_RemoveMobj(mobj); + return; + } + break; //} default: break; @@ -7881,50 +7917,6 @@ void P_MobjThinker(mobj_t *mobj) } break; //{ SRB2kart Items - case MT_POKEY: - if (mobj->threshold) - { - if (mobj->state == &states[S_POKEY1]) - mobj->health = 1; - else if (mobj->state == &states[S_POKEY2]) - mobj->health = 2; - else if (mobj->state == &states[S_POKEY3]) - mobj->health = 3; - else if (mobj->state == &states[S_POKEY4]) - mobj->health = 4; - else if (mobj->state == &states[S_POKEY5]) - mobj->health = 5; - else if (mobj->state == &states[S_POKEY6]) - mobj->health = 6; - else if (mobj->state == &states[S_POKEY7]) - mobj->health = 7; - else if (mobj->state == &states[S_POKEY8]) - mobj->health = 8; - - mobj->threshold++; - P_SetMobjState(mobj, S_POKEYIDLE); - } - if (mobj->state == &states[S_POKEYIDLE] && mobj->threshold >= 105) - { - if (mobj->health == 1) - P_SetMobjState(mobj, S_POKEY1); - else if (mobj->health == 2) - P_SetMobjState(mobj, S_POKEY2); - else if (mobj->health == 3) - P_SetMobjState(mobj, S_POKEY3); - else if (mobj->health == 4) - P_SetMobjState(mobj, S_POKEY4); - else if (mobj->health == 5) - P_SetMobjState(mobj, S_POKEY5); - else if (mobj->health == 6) - P_SetMobjState(mobj, S_POKEY6); - else if (mobj->health == 7) - P_SetMobjState(mobj, S_POKEY7); - else if (mobj->health == 8) - P_SetMobjState(mobj, S_POKEY8); - mobj->threshold = 0; - } - break; case MT_FLOATINGITEM: { if (mobj->flags & MF_NOCLIPTHING) @@ -8147,7 +8139,7 @@ void P_MobjThinker(mobj_t *mobj) break; } case MT_BANANA: - case MT_FAKEITEM: + case MT_EGGMANITEM: if (mobj->momx || mobj->momy) P_SpawnGhostMobj(mobj); if (mobj->z <= mobj->floorz && mobj->health > 1) @@ -8561,6 +8553,449 @@ void P_MobjThinker(mobj_t *mobj) } } break; + case MT_EZZPROPELLER: + if (mobj->hnext) + { + mobj_t *cur = mobj->hnext; + + while (cur && !P_MobjWasRemoved(cur)) + { + cur->angle += FixedAngle(mobj->info->speed); + P_TeleportMove(cur, mobj->x + FINECOSINE((cur->angle*8)>>ANGLETOFINESHIFT), + mobj->y + FINESINE((cur->angle*8)>>ANGLETOFINESHIFT), mobj->z); + //P_SpawnGhostMobj(cur)->tics = 2; + + cur = cur->hnext; + } + } + if (!S_SoundPlaying(mobj, mobj->info->seesound)) + S_StartSound(mobj, mobj->info->seesound); + break; + case MT_FROGGER: + { + statenum_t frogstate = (mobj->state-states); + + // FROG ATTACK VALUES: + // threshold: distance + // movecount: time + // lastlook: direction + // extravalue1: x step + // extravalue2: y step + // cusval: z step + + if (frogstate == S_FROGGER) + { + mobj->threshold = mobj->movecount = mobj->lastlook = 0; // clear tongue attack + mobj->extravalue1 = mobj->extravalue2 = mobj->cusval = 0; + if (mobj->hnext) // Clean hnext list + { + mobj_t *cur = mobj->hnext; + while (cur && !P_MobjWasRemoved(cur)) + { + mobj_t *next = cur->hnext; + P_RemoveMobj(cur); + cur = next; + } + } + + if (mobj->reactiontime) + mobj->reactiontime--; + else + { + if (mobj->flags2 & MF2_AMBUSH) + { + mobj->momz = P_RandomRange(12, 16)<x, mobj->y, mobj->z + (mobj->height/2), MT_FROGTONGUE); + P_SetTarget(&mobj->tracer, tongue); + P_SetMobjState(mobj, S_FROGGER_ATTACK); + } + } + } + else if (frogstate == S_FROGGER_ATTACK) + { + if (!mobj->tracer || P_MobjWasRemoved(mobj->tracer)) + { + mobj->reactiontime = mobj->info->reactiontime; + P_SetMobjState(mobj, S_FROGGER); + break; + } + + if (mobj->threshold == 0) + { + fixed_t targetz = mobj->tracer->z; //mobj->z + (mobj->height/2) + + mobj->threshold = 256; + mobj->movecount = 1; + mobj->lastlook = 1; + + mobj->tracer->angle = mobj->angle; + + mobj->extravalue1 = FixedMul(FixedMul((mobj->threshold/16)<>ANGLETOFINESHIFT)), + FINECOSINE(mobj->angle>>ANGLETOFINESHIFT)) >> FRACBITS; + + mobj->extravalue2 = FixedMul(FixedMul((mobj->threshold/16)<>ANGLETOFINESHIFT)), + FINESINE(mobj->angle>>ANGLETOFINESHIFT)) >> FRACBITS; + + mobj->cusval = FixedMul((mobj->threshold/16)<>ANGLETOFINESHIFT)) >> FRACBITS; + + S_StartSound(mobj, sfx_s3k8c); // Play that tongue-y sound. + } + + mobj->movecount += mobj->lastlook; + + if (!(P_TryMove(mobj->tracer, mobj->x + ((mobj->extravalue1<movecount), mobj->y + ((mobj->extravalue2<movecount), true)) + || (mobj->movecount >= 16) // maximum travel time + || (mobj->tracer->z <= mobj->tracer->floorz) // Through the floor + || ((mobj->tracer->z + mobj->tracer->height) >= mobj->tracer->ceilingz)) // Through the ceiling + { + mobj->lastlook = -1; // Reverse direction. + } + + if (mobj->movecount == 0) // It's back to its source, time to reset. + { + mobj->threshold = mobj->lastlook = 0; + + P_RemoveMobj(mobj->tracer); + + if (mobj->hnext) // Clean hnext list + { + mobj_t *cur = mobj->hnext; + while (cur && !P_MobjWasRemoved(cur)) + { + mobj_t *next = cur->hnext; + P_RemoveMobj(cur); + cur = next; + } + } + + mobj->reactiontime = mobj->info->reactiontime; + P_SetMobjState(mobj, S_FROGGER); + } + else + { + const UINT8 numjoints = 11; + UINT8 joint = numjoints; + mobj_t *cur = mobj->hnext, *prev = mobj; + + mobj->angle = R_PointToAngle2(mobj->x, mobj->y, mobj->tracer->x, mobj->tracer->y); + + for (; joint > 0; joint--) + { + fixed_t wx = mobj->tracer->x + (joint * (mobj->x - mobj->tracer->x) / (numjoints+1)); + fixed_t wy = mobj->tracer->y + (joint * (mobj->y - mobj->tracer->y) / (numjoints+1)); + fixed_t wz = mobj->tracer->z + (joint * ((mobj->z + (mobj->height/2)) - mobj->tracer->z) / (numjoints+1)); + + if (cur && !P_MobjWasRemoved(cur)) + P_TeleportMove(cur, wx, wy, wz); + else + cur = P_SpawnMobj(wx, wy, wz, MT_FROGTONGUE_JOINT); + + P_SetTarget(&cur->target, mobj); + + P_SetTarget(&prev->hnext, cur); + P_SetTarget(&cur->hprev, prev); + + prev = cur; + cur = cur->hnext; + } + } + } + else if (frogstate == S_FROGGER_JUMP) + { + if (P_IsObjectOnGround(mobj)) + { + mobj->reactiontime = mobj->info->reactiontime; + P_SetMobjState(mobj, S_FROGGER); + } + } + } + break; + case MT_ROBRA: + case MT_BLUEROBRA: + if (mobj->health) + { + boolean blue = (mobj->type == MT_BLUEROBRA); + + if (blue) + { + if (mobj->spawnpoint) + mobj->extravalue2 = mobj->spawnpoint->angle; + else + mobj->extravalue2 = 128; + } + else + { + if (!mobj->extravalue2) + mobj->extravalue2 = P_RandomRange(64, 192); + } + + if (mobj->reactiontime) + mobj->reactiontime--; + else + { + if (!mobj->extravalue1) + { + mobj_t *head = P_SpawnMobj(mobj->x, mobj->y, mobj->z, (blue ? MT_BLUEROBRA_HEAD : MT_ROBRA_HEAD)); + P_SetTarget(&mobj->tracer, head); + + mobj->destscale = mapheaderinfo[gamemap-1]->mobj_scale; + P_SetTarget(&mobj->tracer->target, mobj->target); + P_SetTarget(&mobj->tracer->tracer, mobj); + mobj->tracer->extravalue2 = mobj->extravalue2; + + if (!blue) + mobj->tracer->angle = mobj->angle; + + mobj->extravalue1 = 1; + } + } + + if ((mobj->extravalue1) && !(mobj->tracer && !P_MobjWasRemoved(mobj->tracer))) + { + mobj->reactiontime = 20*mobj->info->reactiontime; + P_SetTarget(&mobj->target, NULL); + mobj->extravalue1 = 0; + } + + if ((mobj->tracer && !P_MobjWasRemoved(mobj->tracer)) && !(leveltime % 10)) + { + mobj_t *dust = P_SpawnMobj(mobj->x + (P_RandomRange(-4, 4)<y + (P_RandomRange(-4, 4)<z + (P_RandomRange(0, 2)<scale/2); + P_InstaThrust(dust, FixedAngle(P_RandomRange(0,359)<tracer->momz)/2); + + if (abs(mobj->tracer->momz) >= 2<health) + { + boolean blue = (mobj->type == MT_BLUEROBRA_HEAD); + UINT8 numsegs = abs(mobj->z - mobj->floorz) / (32 * mobj->scale); + UINT8 i; + mobj_t *cur = mobj->hnext, *prev = mobj; + + if (blue) + mobj->angle = (angle_t)mobj->extravalue1; + mobj->extravalue1 += (FixedAngle(2*mobj->momz) * (blue ? -1 : 1)); + + for (i = 0; i < numsegs*2; i++) // *2 to check for any extra segs still present + { + fixed_t segz = mobj->z - ((i+1) * (32 * mobj->scale)); + + if (cur && !P_MobjWasRemoved(cur)) + { + if (i >= numsegs) // Remove extras + { + mobj_t *next = cur->hnext; + P_RemoveMobj(cur); + cur = next; + continue; + } + else // Move into place + P_TeleportMove(cur, mobj->x, mobj->y, segz); + } + else + { + if (i >= numsegs) // We're done with this list + continue; //break; + else // Need another here! + cur = P_SpawnMobj(mobj->x, mobj->y, segz, (blue ? MT_BLUEROBRA_JOINT : MT_ROBRA_JOINT)); + } + + P_SetTarget(&cur->target, mobj); + P_SetScale(cur, (7*mobj->scale)/8); + + cur->angle = mobj->extravalue1; + mobj->extravalue1 += (FixedAngle(2*mobj->momz) * (blue ? -1 : 1)); + + P_SetTarget(&prev->hnext, cur); + P_SetTarget(&cur->hprev, prev); + + prev = cur; + cur = cur->hnext; + } + + { + //fixed_t ceilingheight = mobj->ceilingz - (72<floorz + (72<floorz + (mobj->extravalue2<z < targetheight) + { + mobj->momz += mobj->info->speed; + if ((mobj->z < floorheight) && (mobj->momz < 0)) + mobj->momz /= 2; + } + else + { + mobj->momz -= mobj->info->speed; + if ((mobj->z > (targetheight + (64<momz > 0)) + mobj->momz /= 2; + } + } + } + break; + case MT_ROBRA_JOINT: + case MT_BLUEROBRA_JOINT: + if (!mobj->target || P_MobjWasRemoved(mobj->target)) + { + P_RemoveMobj(mobj); + return; + } + break; + case MT_SMK_PIPE: + if (mobj->flags2 & MF2_AMBUSH) + P_SetMobjStateNF(mobj, mobj->info->seestate); + else + P_SetMobjStateNF(mobj, mobj->info->spawnstate); + break; + case MT_SMK_MOLESPAWNER: + if (!mobj->target || P_MobjWasRemoved(mobj->target)) + { + mobj_t *newmole = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_SMK_MOLE); + P_SetTarget(&mobj->target, newmole); + return; + } + break; + case MT_SMK_MOLE: + if (mobj->target && !P_MobjWasRemoved(mobj->target) && mobj->target->player) + { + player_t *player = mobj->target->player; + + mobj->extravalue1 = 1; + player->kartstuff[k_offroad] += 2<mo->x + P_ReturnThrustX(NULL, player->mo->angle, player->mo->radius) + + P_ReturnThrustX(NULL, player->mo->angle+ANGLE_90, (mobj->threshold)<mo->y + P_ReturnThrustY(NULL, player->mo->angle, player->mo->radius) + + P_ReturnThrustY(NULL, player->mo->angle+ANGLE_90, (mobj->threshold)<mo->z + (player->mo->height/2 * P_MobjFlip(player->mo)) + + (P_RandomRange(-abs(mobj->threshold), abs(mobj->threshold))<threshold /= 2; + mobj->momz = 0; + + if (mobj->movecount > 8*TICRATE) + { + P_KillMobj(mobj, mobj->target, mobj->target); + break; + } + + if (abs(player->cmd.driftturn) > 100) + { + INT32 lastsign = 0; + if (mobj->lastlook > 0) + lastsign = 1; + else if (mobj->lastlook < 0) + lastsign = -1; + + if ((player->cmd.driftturn > 0 && lastsign < 0) + || (player->cmd.driftturn < 0 && lastsign > 0)) + { + mobj->movecount += (TICRATE/2); + mobj->threshold = 16*lastsign; + S_StartSound(mobj, sfx_s1ab); + } + + mobj->lastlook = player->cmd.driftturn; + } + + mobj->movecount++; + } + else if (mobj->extravalue1) // lost your player somehow, DIE + { + P_KillMobj(mobj, NULL, NULL); + break; + } + else + { + if (P_IsObjectOnGround(mobj)) + { + if (mobj->reactiontime) + mobj->reactiontime--; + else + { + mobj->momz = (mobj->info->speed * P_MobjFlip(mobj)); + mobj->reactiontime = mobj->info->reactiontime; + } + } + } + break; + case MT_SMK_THWOMP: + if (mobj->flags2 & MF2_AMBUSH) + { + mobj->colorized = true; + mobj->color = (1 + (leveltime % (MAXSKINCOLORS-1))); + mobj->frame |= FF_FULLBRIGHT; + } + else + { + mobj->colorized = false; + mobj->color = SKINCOLOR_NONE; + mobj->frame &= (~FF_FULLBRIGHT); + } + + if (!thwompsactive) + break; + + if (mobj->reactiontime) + mobj->reactiontime--; + else + { + if (mobj->extravalue1) + { + P_SpawnGhostMobj(mobj)->tics = 3; + + if (mobj->z == mobj->floorz) + { + UINT8 i; + + mobj->extravalue1 = 0; + mobj->reactiontime = mobj->info->reactiontime; + S_StartSound(mobj, sfx_s1bd); + + for (i = 0; i < 8; i++) + { + mobj_t *dust = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_DRIFTDUST); + P_InstaThrust(dust, FixedAngle(((360*FRACUNIT)/8) * i), mobj->info->speed/8); + dust->momz = P_MobjFlip(mobj) * (P_RandomRange(1,4)<scale = mobj->scale/2; + dust->destscale = mobj->scale*3; + } + } + else + mobj->momz = (-mobj->info->speed) * P_MobjFlip(mobj); + } + else + { + if (mobj->z > mobj->movefactor) + mobj->z = mobj->movefactor; + + if (mobj->z == mobj->movefactor) + { + mobj->extravalue1 = 1; + //S_StartSound(mobj, sfx_s1bb); + } + else + mobj->momz = (mobj->info->speed/16) * P_MobjFlip(mobj); + } + } + break; //} case MT_TURRET: P_MobjCheckWater(mobj); @@ -8855,6 +9290,31 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s return; case MT_PLAYER: break; // don't remove + case MT_SMK_ICEBLOCK: + { + mobj_t *cur = mobj->hnext, *next; + UINT8 i; + + for (i = 0; i < 5; i++) + { + mobj_t *debris = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_SMK_ICEBLOCK_DEBRIS); + debris->angle = FixedAngle(P_RandomRange(0,360)<angle, P_RandomRange(3,18)*(FRACUNIT/4)); + debris->momz = P_RandomRange(4,8)<hnext; + P_RemoveMobj(cur); + cur = next; + } + + P_RemoveMobj(mobj); + return; + } default: P_SetMobjState(mobj, mobj->info->xdeathstate); // will remove the mobj if S_NULL. break; @@ -8862,7 +9322,7 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s if (P_MobjWasRemoved(mobj)) return; } - else if (((mobj->type == MT_RANDOMITEM && mobj->threshold == 69) || mobj->type == MT_FAKEITEM || mobj->type == MT_FALLINGROCK) && mobj->fuse <= TICRATE) + else if (((mobj->type == MT_RANDOMITEM && mobj->threshold == 69) || mobj->type == MT_EGGMANITEM || mobj->type == MT_FALLINGROCK) && mobj->fuse <= TICRATE) mobj->flags2 ^= MF2_DONTDRAW; } @@ -9363,7 +9823,8 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) case MT_BLUEBALL: nummaprings++; break; - case MT_KARMAHITBOX: // SRB2Kart + // SRB2Kart + case MT_KARMAHITBOX: { const fixed_t rad = FixedMul(mobjinfo[MT_PLAYER].radius, mobj->scale); mobj_t *cur, *prev = mobj; @@ -9430,6 +9891,103 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) mobj->color = SKINCOLOR_AQUA; break; } + case MT_PINETREE: + { + angle_t diff = FixedAngle((360/mobj->info->mass)*FRACUNIT); + UINT8 i; + + for (i = 0; i < mobj->info->mass; i++) + { + angle_t ang = i * diff; + mobj_t *side = P_SpawnMobj(mobj->x + FINECOSINE((ang>>ANGLETOFINESHIFT) & FINEMASK), + mobj->y + FINESINE((ang>>ANGLETOFINESHIFT) & FINEMASK), mobj->z, MT_PINETREE_SIDE); + side->angle = ang; + side->target = mobj; + side->threshold = i; + } + break; + } + case MT_EZZPROPELLER: + { + mobj_t *cur, *prev = mobj; + UINT8 i; + + for (i = 0; i < mobj->info->mass; i++) + { + mobj->angle = FixedAngle((i * (360/mobj->info->mass))<x + FINECOSINE(((mobj->angle*8)>>ANGLETOFINESHIFT) & FINEMASK), + mobj->y + FINESINE(((mobj->angle*8)>>ANGLETOFINESHIFT) & FINEMASK), mobj->z, MT_EZZPROPELLER_BLADE); + cur->angle = mobj->angle; + + P_SetTarget(&cur->hprev, prev); + P_SetTarget(&prev->hnext, cur); + + prev = cur; + } + break; + } + case MT_ROBRA: + case MT_BLUEROBRA: + P_SetScale(mobj, (mobj->destscale = 1)); + break; + case MT_ROBRA_HEAD: + { + mobj_t *shell; + + shell = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); + P_SetTarget(&shell->target, mobj); + P_SetMobjState(shell, S_ROBRASHELL_INSIDE); + + shell = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); + P_SetTarget(&shell->target, mobj); + P_SetMobjState(shell, S_ROBRASHELL_OUTSIDE); + } + break; + case MT_EERIEFOGGEN: + { + UINT16 i; + for (i = 0; i < mobj->info->mass; i++) + { + fixed_t newx = mobj->x + (P_RandomRange(-mobj->info->mass, mobj->info->mass)<y + (P_RandomRange(-mobj->info->mass, mobj->info->mass)<z, 8<z) + P_SpawnMobj(newx, newy, mobj->z, MT_EERIEFOG); + } + } + break; + case MT_SMK_MOLE: + mobj->reactiontime = P_RandomRange(0, 3*mobj->info->reactiontime/2); // Random delay on start of level + break; + case MT_SMK_THWOMP: + mobj->reactiontime = P_RandomRange(0, 3*mobj->info->reactiontime); // Random delay on start of level + if (mobj->z == mobj->floorz) + mobj->z += (256<movefactor = mobj->z + (256<flags2 |= MF2_STANDONME; + { + mobj_t *cur, *prev = mobj; + UINT8 i; + + for (i = 0; i < 4; i++) + { + cur = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_SMK_ICEBLOCK_SIDE); + P_SetTarget(&cur->target, mobj); + cur->threshold = i; + P_TeleportMove(cur, cur->x + ((cur->radius>>FRACBITS) * FINECOSINE((FixedAngle((90*cur->threshold)<>ANGLETOFINESHIFT) & FINEMASK)), + cur->y + ((cur->radius>>FRACBITS) * FINESINE((FixedAngle((90*cur->threshold)<>ANGLETOFINESHIFT) & FINEMASK)), cur->z); + cur->angle = ANGLE_90*(cur->threshold+1); + + P_SetTarget(&cur->hprev, prev); + P_SetTarget(&prev->hnext, cur); + + prev = cur; + } + } + break; default: break; } @@ -9437,17 +9995,19 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) switch (mobj->type) { case MT_PLAYER: - case MT_BIGMACE: case MT_SMALLMACE: + case MT_SMALLMACE: case MT_BIGMACE: + case MT_PUMA: case MT_BIGPUMA: case MT_FALLINGROCK: + case MT_SMK_MOLE: case MT_SMK_THWOMP: //case MT_RANDOMITEM: case MT_FLOATINGITEM: case MT_BATTLEBUMPER: case MT_BANANA: case MT_BANANA_SHIELD: - //case MT_FAKEITEM: case MT_FAKESHIELD: + //case MT_EGGMANITEM: case MT_EGGMANSHIELD: case MT_ORBINAUT: case MT_ORBINAUT_SHIELD: - case MT_JAWZ: case MT_JAWZ_DUD: case MT_JAWZ_SHIELD: - case MT_SSMINE: case MT_SSMINE_SHIELD: - case MT_BALLHOG: case MT_SINK: + case MT_JAWZ: case MT_JAWZ_DUD: case MT_JAWZ_SHIELD: + case MT_SSMINE: case MT_SSMINE_SHIELD: + case MT_BALLHOG: case MT_SINK: case MT_THUNDERSHIELD: case MT_ROCKETSNEAKER: case MT_SPB: P_SpawnShadowMobj(mobj); @@ -11090,6 +11650,46 @@ ML_NOCLIMB : Direction not controllable case MT_TRAPGOYLELONG: if (mthing->angle >= 360) mobj->tics += 7*(mthing->angle / 360) + 1; // starting delay + break; + // SRB2Kart + case MT_AAZTREE_HELPER: + { + fixed_t top = mobj->z; + UINT8 numsegs = (mthing->extrainfo)+2; + UINT8 numleaves = max(3, (abs(mthing->angle+1) % 6) + 3); + UINT8 i; + mobj_t *coconut; + + // Spawn tree segments + for (i = 0; i < numsegs; i++) + { + P_SpawnMobj(mobj->x, mobj->y, top, MT_AAZTREE_SEG); + top += FixedMul(mobjinfo[MT_AAZTREE_SEG].height, mobj->scale); + } + + // Big coconut topper + coconut = P_SpawnMobj(mobj->x, mobj->y, top - (8<destscale = (2*mobj->scale))); + + // Spawn all of the papersprite leaves + for (i = 0; i < numleaves; i++) + { + mobj_t *leaf; + + mobj->angle = FixedAngle((i * (360/numleaves))<x + FINECOSINE((mobj->angle>>ANGLETOFINESHIFT) & FINEMASK), + mobj->y + FINESINE((mobj->angle>>ANGLETOFINESHIFT) & FINEMASK), top, MT_AAZTREE_LEAF); + leaf->angle = mobj->angle; + + // Small coconut for each leaf + P_SpawnMobj(mobj->x + (32 * FINECOSINE((mobj->angle>>ANGLETOFINESHIFT) & FINEMASK)), + mobj->y + (32 * FINESINE((mobj->angle>>ANGLETOFINESHIFT) & FINEMASK)), top - (24<starpostnum) { diff --git a/src/p_user.c b/src/p_user.c index 0f89f8262..a286202a1 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7695,7 +7695,7 @@ void P_NukeEnemies(mobj_t *inflictor, mobj_t *source, fixed_t radius) if (mo->type == MT_ORBINAUT || mo->type == MT_JAWZ || mo->type == MT_JAWZ_DUD || mo->type == MT_ORBINAUT_SHIELD || mo->type == MT_JAWZ_SHIELD || mo->type == MT_BANANA || mo->type == MT_BANANA_SHIELD - || mo->type == MT_FAKEITEM || mo->type == MT_FAKESHIELD + || mo->type == MT_EGGMANITEM || mo->type == MT_EGGMANITEM_SHIELD || mo->type == MT_BALLHOG || mo->type == MT_SPB) { if (mo->eflags & MFE_VERTICALFLIP) From 37f949bb38f687f1e8f4084f71033a841457799a Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 29 Oct 2018 05:21:47 -0400 Subject: [PATCH 28/80] Make shadows more consistent on slopes for non-players --- src/p_mobj.c | 47 ++++++++++++++--------------------------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 91ba959ae..5ced93000 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6293,6 +6293,8 @@ void P_RunShadows(void) for (mobj = shadowcap; mobj; mobj = next) { + fixed_t floorz; + next = mobj->hnext; P_SetTarget(&mobj->hnext, NULL); @@ -6302,37 +6304,16 @@ void P_RunShadows(void) continue; // shouldn't you already be dead? } - if ((mobj->target->flags2 & MF2_DONTDRAW) - || (((mobj->target->eflags & MFE_VERTICALFLIP) && mobj->target->z+mobj->target->height > mobj->target->ceilingz) - || (!(mobj->target->eflags & MFE_VERTICALFLIP) && mobj->target->z < mobj->target->floorz))) + if (mobj->target->player) + floorz = mobj->target->floorz; + else // FOR SOME REASON, plain floorz is not reliable for normal objects, only players?! + floorz = P_FloorzAtPos(mobj->target->x, mobj->target->y, mobj->target->z, mobj->target->height); + + K_MatchGenericExtraFlags(mobj, mobj->target); + + if (((mobj->target->eflags & MFE_VERTICALFLIP) && mobj->target->z+mobj->target->height > mobj->target->ceilingz) + || (!(mobj->target->eflags & MFE_VERTICALFLIP) && mobj->target->z < floorz)) mobj->flags2 |= MF2_DONTDRAW; - else - mobj->flags2 &= ~MF2_DONTDRAW; - - if (mobj->target->eflags & MFE_VERTICALFLIP) - mobj->eflags |= MFE_VERTICALFLIP; - else - mobj->eflags &= ~MFE_VERTICALFLIP; - - if (mobj->target->eflags & MFE_DRAWONLYFORP1) // groooooaann... - mobj->eflags |= MFE_DRAWONLYFORP1; - else - mobj->eflags &= ~MFE_DRAWONLYFORP1; - - if (mobj->target->eflags & MFE_DRAWONLYFORP2) - mobj->eflags |= MFE_DRAWONLYFORP2; - else - mobj->eflags &= ~MFE_DRAWONLYFORP2; - - if (mobj->target->eflags & MFE_DRAWONLYFORP3) - mobj->eflags |= MFE_DRAWONLYFORP3; - else - mobj->eflags &= ~MFE_DRAWONLYFORP3; - - if (mobj->target->eflags & MFE_DRAWONLYFORP4) - mobj->eflags |= MFE_DRAWONLYFORP4; - else - mobj->eflags &= ~MFE_DRAWONLYFORP4; // First scale to the same radius P_SetScale(mobj, FixedDiv(mobj->target->radius, mobj->info->radius)); @@ -6345,12 +6326,12 @@ void P_RunShadows(void) P_TeleportMove(mobj, dest->x, dest->y, mobj->target->z); if (((mobj->eflags & MFE_VERTICALFLIP) && (mobj->ceilingz > mobj->z+mobj->height)) - || (!(mobj->eflags & MFE_VERTICALFLIP) && (mobj->floorz < mobj->z))) + || (!(mobj->eflags & MFE_VERTICALFLIP) && (floorz < mobj->z))) { INT32 i; fixed_t prevz; - mobj->z = (mobj->eflags & MFE_VERTICALFLIP ? mobj->ceilingz : mobj->floorz); + mobj->z = (mobj->eflags & MFE_VERTICALFLIP ? mobj->ceilingz : floorz); for (i = 0; i < MAXFFLOORS; i++) { @@ -6362,7 +6343,7 @@ void P_RunShadows(void) // Check new position to see if you should still be on that ledge P_TeleportMove(mobj, dest->x, dest->y, mobj->z); - mobj->z = (mobj->eflags & MFE_VERTICALFLIP ? mobj->ceilingz : mobj->floorz); + mobj->z = (mobj->eflags & MFE_VERTICALFLIP ? mobj->ceilingz : floorz); if (mobj->z == prevz) break; From d1ac57e4ecb29d4a37df9054896f7e86e356f902 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 29 Oct 2018 06:57:45 -0400 Subject: [PATCH 29/80] Fix Sonic's minimap icon not being properly initialised. (Experimenting with the online editor, since I'm low on time, but this is 100% correct and I'll make a new exe later.) --- src/r_things.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/r_things.c b/src/r_things.c index bd5b8b160..70451f656 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -2519,7 +2519,7 @@ static void Sk_SetDefaultValue(skin_t *skin) strcpy(skin->hudname, "???"); strncpy(skin->facerank, "PLAYRANK", 9); strncpy(skin->facewant, "PLAYWANT", 9); - strncpy(skin->facemmap, "PLAYICON", 9); + strncpy(skin->facemmap, "PLAYMMAP", 9); skin->starttranscolor = 160; skin->prefcolor = SKINCOLOR_GREEN; @@ -2585,7 +2585,7 @@ void R_InitSkins(void) strncpy(skin->facerank, "PLAYRANK", 9); strncpy(skin->facewant, "PLAYWANT", 9); - strncpy(skin->facemmap, "PLAYICON", 9); + strncpy(skin->facemmap, "PLAYMMAP", 9); skin->prefcolor = SKINCOLOR_BLUE; skin->ability = CA_THOK; From 4bf4bcadda4b73dcd065edb1fe4e6df884b34265 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 29 Oct 2018 17:45:59 -0400 Subject: [PATCH 30/80] Fix SMK RR thwomps casuing bounce-up --- src/p_user.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index a286202a1..8b8abfe14 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -846,7 +846,8 @@ void P_DoPlayerPain(player_t *player, mobj_t *source, mobj_t *inflictor) fixed_t fallbackspeed; if (inflictor && (inflictor->type != MT_PLAYER && inflictor->type != MT_ORBINAUT && inflictor->type != MT_ORBINAUT_SHIELD - && inflictor->type != MT_JAWZ && inflictor->type != MT_JAWZ_DUD && inflictor->type != MT_JAWZ_SHIELD)) + && inflictor->type != MT_JAWZ && inflictor->type != MT_JAWZ_DUD && inflictor->type != MT_JAWZ_SHIELD + && inflictor->type != MT_SMK_THWOMP)) { if (player->mo->eflags & MFE_VERTICALFLIP) player->mo->z--; From 88227a1f83b6ace25032641477ea8212741f0f3d Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 30 Oct 2018 01:23:21 -0400 Subject: [PATCH 31/80] Clean up resync pak --- src/d_clisrv.c | 108 ++++--------------------------------------------- src/d_clisrv.h | 52 ++---------------------- 2 files changed, 11 insertions(+), 149 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index f811334ad..e294145ca 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -555,21 +555,17 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) rsp->panim = (UINT8)players[i].panim; //panim_t rsp->aiming = (angle_t)LONG(players[i].aiming); - rsp->currentweapon = LONG(players[i].currentweapon); - rsp->ringweapons = LONG(players[i].ringweapons); for (j = 0; j < NUMPOWERS; ++j) rsp->powers[j] = (UINT16)SHORT(players[i].powers[j]); for (j = 0; j < NUMKARTSTUFF; ++j) rsp->kartstuff[j] = LONG(players[i].kartstuff[j]); // SRB2kart + rsp->frameangle = (angle_t)LONG(players[i].frameangle); // SRB2kart + // Score is resynched in the rspfirm resync packet rsp->health = 0; // resynched with mo health rsp->lives = players[i].lives; - rsp->continues = players[i].continues; - rsp->scoreadd = players[i].scoreadd; - rsp->xtralife = players[i].xtralife; - rsp->pity = players[i].pity; rsp->skincolor = players[i].skincolor; rsp->skin = LONG(players[i].skin); @@ -578,41 +574,16 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) // SRB2kart rsp->kartspeed = (UINT8)players[i].kartspeed; rsp->kartweight = (UINT8)players[i].kartweight; - // - rsp->normalspeed = (fixed_t)LONG(players[i].normalspeed); - rsp->runspeed = (fixed_t)LONG(players[i].runspeed); - rsp->thrustfactor = players[i].thrustfactor; - rsp->accelstart = players[i].accelstart; - rsp->acceleration = players[i].acceleration; - rsp->charability = players[i].charability; - rsp->charability2 = players[i].charability2; - rsp->charflags = (UINT32)LONG(players[i].charflags); - rsp->thokitem = (UINT32)LONG(players[i].thokitem); //mobjtype_t - rsp->spinitem = (UINT32)LONG(players[i].spinitem); //mobjtype_t - rsp->revitem = (UINT32)LONG(players[i].revitem); //mobjtype_t - rsp->actionspd = (fixed_t)LONG(players[i].actionspd); - rsp->mindash = (fixed_t)LONG(players[i].mindash); - rsp->maxdash = (fixed_t)LONG(players[i].maxdash); - rsp->jumpfactor = (fixed_t)LONG(players[i].jumpfactor); rsp->speed = (fixed_t)LONG(players[i].speed); - rsp->jumping = players[i].jumping; - rsp->secondjump = players[i].secondjump; - rsp->fly1 = players[i].fly1; - rsp->glidetime = (tic_t)LONG(players[i].glidetime); - rsp->climbing = players[i].climbing; rsp->deadtimer = players[i].deadtimer; rsp->exiting = (tic_t)LONG(players[i].exiting); - rsp->homing = players[i].homing; rsp->skidtime = (tic_t)LONG(players[i].skidtime); rsp->cmomx = (fixed_t)LONG(players[i].cmomx); rsp->cmomy = (fixed_t)LONG(players[i].cmomy); rsp->rmomx = (fixed_t)LONG(players[i].rmomx); rsp->rmomy = (fixed_t)LONG(players[i].rmomy); - rsp->weapondelay = LONG(players[i].weapondelay); - rsp->tossdelay = LONG(players[i].tossdelay); - rsp->starpostx = SHORT(players[i].starpostx); rsp->starposty = SHORT(players[i].starposty); rsp->starpostz = SHORT(players[i].starpostz); @@ -621,29 +592,12 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) rsp->starposttime = (tic_t)LONG(players[i].starposttime); rsp->starpostangle = (angle_t)LONG(players[i].starpostangle); - rsp->maxlink = LONG(players[i].maxlink); - rsp->dashspeed = (fixed_t)LONG(players[i].dashspeed); - rsp->dashtime = LONG(players[i].dashtime); - rsp->angle_pos = (angle_t)LONG(players[i].angle_pos); - rsp->old_angle_pos = (angle_t)LONG(players[i].old_angle_pos); - rsp->bumpertime = (tic_t)LONG(players[i].bumpertime); - rsp->flyangle = LONG(players[i].flyangle); - rsp->drilltimer = (tic_t)LONG(players[i].drilltimer); - rsp->linkcount = LONG(players[i].linkcount); - rsp->linktimer = (tic_t)LONG(players[i].linktimer); - rsp->anotherflyangle = LONG(players[i].anotherflyangle); - rsp->nightstime = (tic_t)LONG(players[i].nightstime); - rsp->drillmeter = LONG(players[i].drillmeter); - rsp->drilldelay = players[i].drilldelay; - rsp->bonustime = players[i].bonustime; - rsp->mare = players[i].mare; - rsp->lastsidehit = SHORT(players[i].lastsidehit); - rsp->lastlinehit = SHORT(players[i].lastlinehit); - rsp->losstime = (tic_t)LONG(players[i].losstime); rsp->timeshit = players[i].timeshit; rsp->onconveyor = LONG(players[i].onconveyor); + rsp->jointime = (tic_t)LONG(players[i].jointime); + rsp->hasmo = false; //Transfer important mo information if the player has a body. //This lets us resync players even if they are dead. @@ -688,21 +642,17 @@ static void resynch_read_player(resynch_pak *rsp) players[i].panim = (UINT8)rsp->panim; //panim_t players[i].aiming = (angle_t)LONG(rsp->aiming); - players[i].currentweapon = LONG(rsp->currentweapon); - players[i].ringweapons = LONG(rsp->ringweapons); for (j = 0; j < NUMPOWERS; ++j) players[i].powers[j] = (UINT16)SHORT(rsp->powers[j]); for (j = 0; j < NUMKARTSTUFF; ++j) players[i].kartstuff[j] = LONG(rsp->kartstuff[j]); // SRB2kart + players[i].frameangle = (angle_t)LONG(rsp->frameangle); // SRB2kart + // Score is resynched in the rspfirm resync packet players[i].health = rsp->health; players[i].lives = rsp->lives; - players[i].continues = rsp->continues; - players[i].scoreadd = rsp->scoreadd; - players[i].xtralife = rsp->xtralife; - players[i].pity = rsp->pity; players[i].skincolor = rsp->skincolor; players[i].skin = LONG(rsp->skin); @@ -711,40 +661,15 @@ static void resynch_read_player(resynch_pak *rsp) players[i].kartspeed = (UINT8)rsp->kartspeed; players[i].kartweight = (UINT8)rsp->kartweight; - players[i].normalspeed = (fixed_t)LONG(rsp->normalspeed); - players[i].runspeed = (fixed_t)LONG(rsp->runspeed); - players[i].thrustfactor = rsp->thrustfactor; - players[i].accelstart = rsp->accelstart; - players[i].acceleration = rsp->acceleration; - players[i].charability = rsp->charability; - players[i].charability2 = rsp->charability2; - players[i].charflags = (UINT32)LONG(rsp->charflags); - players[i].thokitem = (UINT32)LONG(rsp->thokitem); //mobjtype_t - players[i].spinitem = (UINT32)LONG(rsp->spinitem); //mobjtype_t - players[i].revitem = (UINT32)LONG(rsp->revitem); //mobjtype_t - players[i].actionspd = (fixed_t)LONG(rsp->actionspd); - players[i].mindash = (fixed_t)LONG(rsp->mindash); - players[i].maxdash = (fixed_t)LONG(rsp->maxdash); - players[i].jumpfactor = (fixed_t)LONG(rsp->jumpfactor); - players[i].speed = (fixed_t)LONG(rsp->speed); - players[i].jumping = rsp->jumping; - players[i].secondjump = rsp->secondjump; - players[i].fly1 = rsp->fly1; - players[i].glidetime = (tic_t)LONG(rsp->glidetime); - players[i].climbing = rsp->climbing; players[i].deadtimer = rsp->deadtimer; players[i].exiting = (tic_t)LONG(rsp->exiting); - players[i].homing = rsp->homing; players[i].skidtime = (tic_t)LONG(rsp->skidtime); players[i].cmomx = (fixed_t)LONG(rsp->cmomx); players[i].cmomy = (fixed_t)LONG(rsp->cmomy); players[i].rmomx = (fixed_t)LONG(rsp->rmomx); players[i].rmomy = (fixed_t)LONG(rsp->rmomy); - players[i].weapondelay = LONG(rsp->weapondelay); - players[i].tossdelay = LONG(rsp->tossdelay); - players[i].starpostx = SHORT(rsp->starpostx); players[i].starposty = SHORT(rsp->starposty); players[i].starpostz = SHORT(rsp->starpostz); @@ -753,29 +678,12 @@ static void resynch_read_player(resynch_pak *rsp) players[i].starposttime = (tic_t)LONG(rsp->starposttime); players[i].starpostangle = (angle_t)LONG(rsp->starpostangle); - players[i].maxlink = LONG(rsp->maxlink); - players[i].dashspeed = (fixed_t)LONG(rsp->dashspeed); - players[i].dashtime = LONG(rsp->dashtime); - players[i].angle_pos = (angle_t)LONG(rsp->angle_pos); - players[i].old_angle_pos = (angle_t)LONG(rsp->old_angle_pos); - players[i].bumpertime = (tic_t)LONG(rsp->bumpertime); - players[i].flyangle = LONG(rsp->flyangle); - players[i].drilltimer = (tic_t)LONG(rsp->drilltimer); - players[i].linkcount = LONG(rsp->linkcount); - players[i].linktimer = (tic_t)LONG(rsp->linktimer); - players[i].anotherflyangle = LONG(rsp->anotherflyangle); - players[i].nightstime = (tic_t)LONG(rsp->nightstime); - players[i].drillmeter = LONG(rsp->drillmeter); - players[i].drilldelay = rsp->drilldelay; - players[i].bonustime = rsp->bonustime; - players[i].mare = rsp->mare; - players[i].lastsidehit = SHORT(rsp->lastsidehit); - players[i].lastlinehit = SHORT(rsp->lastlinehit); - players[i].losstime = (tic_t)LONG(rsp->losstime); players[i].timeshit = rsp->timeshit; players[i].onconveyor = LONG(rsp->onconveyor); + players[i].jointime = (tic_t)LONG(rsp->jointime); + //We get a packet for each player in game. if (!playeringame[i]) return; diff --git a/src/d_clisrv.h b/src/d_clisrv.h index e2a6ed7cc..d1bdbec97 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -184,8 +184,7 @@ typedef struct UINT8 panim; // panim_t angle_t aiming; - INT32 currentweapon; - INT32 ringweapons; + UINT16 powers[NUMPOWERS]; INT32 kartstuff[NUMKARTSTUFF]; // SRB2kart @@ -194,10 +193,6 @@ typedef struct // Score is resynched in the confirm resync packet INT32 health; SINT8 lives; - SINT8 continues; - UINT8 scoreadd; - SINT8 xtralife; - SINT8 pity; UINT8 skincolor; INT32 skin; @@ -206,41 +201,16 @@ typedef struct // SRB2kart UINT8 kartspeed; UINT8 kartweight; - // - fixed_t normalspeed; - fixed_t runspeed; - UINT8 thrustfactor; - UINT8 accelstart; - UINT8 acceleration; - UINT8 charability; - UINT8 charability2; - UINT32 charflags; - UINT32 thokitem; // mobjtype_t - UINT32 spinitem; // mobjtype_t - UINT32 revitem; // mobjtype_t - fixed_t actionspd; - fixed_t mindash; - fixed_t maxdash; - fixed_t jumpfactor; fixed_t speed; - UINT8 jumping; - UINT8 secondjump; - UINT8 fly1; - tic_t glidetime; - UINT8 climbing; INT32 deadtimer; tic_t exiting; - UINT8 homing; tic_t skidtime; fixed_t cmomx; fixed_t cmomy; fixed_t rmomx; fixed_t rmomy; - INT32 weapondelay; - INT32 tossdelay; - INT16 starpostx; INT16 starposty; INT16 starpostz; @@ -249,28 +219,12 @@ typedef struct tic_t starposttime; angle_t starpostangle; - INT32 maxlink; - fixed_t dashspeed; - INT32 dashtime; - angle_t angle_pos; - angle_t old_angle_pos; - tic_t bumpertime; - INT32 flyangle; - tic_t drilltimer; - INT32 linkcount; - tic_t linktimer; - INT32 anotherflyangle; - tic_t nightstime; - INT32 drillmeter; - UINT8 drilldelay; - UINT8 bonustime; - UINT8 mare; - INT16 lastsidehit, lastlinehit; - tic_t losstime; UINT8 timeshit; INT32 onconveyor; + tic_t jointime; + //player->mo stuff UINT8 hasmo; // Boolean From 6909bd25f9b53ff5c73923114ee0572daa88f16a Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 30 Oct 2018 11:08:53 +0000 Subject: [PATCH 32/80] No fucking wonder these weren't showing up, I set their duration to 1 tic instead of -1 tic (The Volcanic Valley issue is because the most recent Volcanic Valley update in maps.kart lost all the Objectspecial flags from mapthing 2018) --- src/info.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/info.c b/src/info.c index bdf9851b0..8b05ae45a 100644 --- a/src/info.c +++ b/src/info.c @@ -3176,15 +3176,15 @@ state_t states[NUMSTATES] = {SPR_HTZB, 0, -1, {A_SetScale}, 2*FRACUNIT, 0, S_NULL}, // S_HTZBUSH // Ports of gardens - {SPR_SGVA, 0, 1, {NULL}, 0, 0, S_NULL}, // S_SGVINE1 - {SPR_SGVB, 0, 1, {NULL}, 0, 0, S_NULL}, // S_SGVINE2 - {SPR_SGVC, 0, 1, {NULL}, 0, 0, S_NULL}, // S_SGVINE3 - {SPR_PGTR, 0, 1, {NULL}, 0, 0, S_NULL}, // S_PGTREE - {SPR_PGF1, 0, 1, {NULL}, 0, 0, S_NULL}, // S_PGFLOWER1 - {SPR_PGF2, 0, 1, {NULL}, 0, 0, S_NULL}, // S_PGFLOWER2 - {SPR_PGF3, 0, 1, {NULL}, 0, 0, S_NULL}, // S_PGFLOWER3 - {SPR_PGBH, 0, 1, {NULL}, 0, 0, S_NULL}, // S_PGBUSH - {SPR_DPLR, 0, 1, {NULL}, 0, 0, S_NULL}, // S_DHPILLAR + {SPR_SGVA, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SGVINE1 + {SPR_SGVB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SGVINE2 + {SPR_SGVC, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SGVINE3 + {SPR_PGTR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_PGTREE + {SPR_PGF1, 0, -1, {NULL}, 0, 0, S_NULL}, // S_PGFLOWER1 + {SPR_PGF2, 0, -1, {NULL}, 0, 0, S_NULL}, // S_PGFLOWER2 + {SPR_PGF3, 0, -1, {NULL}, 0, 0, S_NULL}, // S_PGFLOWER3 + {SPR_PGBH, 0, -1, {NULL}, 0, 0, S_NULL}, // S_PGBUSH + {SPR_DPLR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_DHPILLAR // Midnight Channel stuff, yay more boring states! {SPR_SPTL, 0, -1, {NULL}, 0, 0, S_SPOTLIGHT}, // S_SPOTLIGHT From e3bf06432abd7f1a109b00e9dad644d0a641f60b Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 30 Oct 2018 16:24:27 -0400 Subject: [PATCH 33/80] Add hnext/hprev to consistancy, add marescore to resynchend --- src/d_clisrv.c | 50 ++++++++++++++++++++++++++++++++++++++++++++------ src/d_clisrv.h | 3 +-- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index e294145ca..edc0bf3d1 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -847,8 +847,7 @@ static inline void resynch_write_others(resynchend_pak *rst) { rst->ctfteam[i] = 0; rst->score[i] = 0; - rst->numboxes[i] = 0; - rst->totalring[i] = 0; + rst->marescore[i] = 0; rst->realtime[i] = 0; rst->laps[i] = 0; continue; @@ -858,8 +857,7 @@ static inline void resynch_write_others(resynchend_pak *rst) rst->ingame |= (1<ctfteam[i] = (INT32)LONG(players[i].ctfteam); rst->score[i] = (UINT32)LONG(players[i].score); - rst->numboxes[i] = SHORT(players[i].numboxes); - rst->totalring[i] = SHORT(players[i].totalring); + rst->marescore[i] = (UINT32)LONG(players[i].marescore); rst->realtime[i] = (tic_t)LONG(players[i].realtime); rst->laps[i] = players[i].laps; } @@ -879,8 +877,7 @@ static inline void resynch_read_others(resynchend_pak *p) players[i].spectator = !(loc_ingame & (1<ctfteam[i]); // no, 0 does not mean spectator, at least not in Match players[i].score = (UINT32)LONG(p->score[i]); - players[i].numboxes = SHORT(p->numboxes[i]); - players[i].totalring = SHORT(p->totalring[i]); + players[i].marescore = (UINT32)LONG(p->marescore[i]); players[i].realtime = (tic_t)LONG(p->realtime[i]); players[i].laps = p->laps[i]; } @@ -4327,6 +4324,47 @@ static INT16 Consistancy(void) ret -= mo->tracer->sprite; ret += mo->tracer->frame; } + else + ret ^= 0xAAAA; + // SRB2Kart: We use hnext & hprev very extensively + if (mo->hnext) + { + ret += mo->hnext->type; + ret -= mo->hnext->x; + ret += mo->hnext->y; + ret -= mo->hnext->z; + ret += mo->hnext->momx; + ret -= mo->hnext->momy; + ret += mo->hnext->momz; + ret -= mo->hnext->angle; + ret += mo->hnext->flags; + ret -= mo->hnext->flags2; + ret += mo->hnext->eflags; + ret -= mo->hnext->state - states; + ret += mo->hnext->tics; + ret -= mo->hnext->sprite; + ret += mo->hnext->frame; + } + else + ret ^= 0x3333; + if (mo->hprev) + { + ret += mo->hprev->type; + ret -= mo->hprev->x; + ret += mo->hprev->y; + ret -= mo->hprev->z; + ret += mo->hprev->momx; + ret -= mo->hprev->momy; + ret += mo->hprev->momz; + ret -= mo->hprev->angle; + ret += mo->hprev->flags; + ret -= mo->hprev->flags2; + ret += mo->hprev->eflags; + ret -= mo->hprev->state - states; + ret += mo->hprev->tics; + ret -= mo->hprev->sprite; + ret += mo->hprev->frame; + } else ret ^= 0xAAAA; ret -= mo->state - states; diff --git a/src/d_clisrv.h b/src/d_clisrv.h index d1bdbec97..3e0bcb723 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -166,8 +166,7 @@ typedef struct // Resynch game scores and the like all at once UINT32 score[MAXPLAYERS]; // Everyone's score - INT16 numboxes[MAXPLAYERS]; - INT16 totalring[MAXPLAYERS]; + UINT32 marescore[MAXPLAYERS]; // SRB2kart: Battle score tic_t realtime[MAXPLAYERS]; UINT8 laps[MAXPLAYERS]; } ATTRPACK resynchend_pak; From 53e22e57697b35981a6b9bcc63986dc5ab1d7aca Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 30 Oct 2018 17:03:11 -0400 Subject: [PATCH 34/80] Fuck it, add back in the old vars If we want a smaller resync packet, let's actually remove these FOR REAL --- src/d_clisrv.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++++ src/d_clisrv.h | 49 ++++++++++++++++++++++++ 2 files changed, 149 insertions(+) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index edc0bf3d1..bba1e7b20 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -555,6 +555,8 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) rsp->panim = (UINT8)players[i].panim; //panim_t rsp->aiming = (angle_t)LONG(players[i].aiming); + rsp->currentweapon = LONG(players[i].currentweapon); + rsp->ringweapons = LONG(players[i].ringweapons); for (j = 0; j < NUMPOWERS; ++j) rsp->powers[j] = (UINT16)SHORT(players[i].powers[j]); @@ -566,6 +568,10 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) // Score is resynched in the rspfirm resync packet rsp->health = 0; // resynched with mo health rsp->lives = players[i].lives; + rsp->continues = players[i].continues; + rsp->scoreadd = players[i].scoreadd; + rsp->xtralife = players[i].xtralife; + rsp->pity = players[i].pity; rsp->skincolor = players[i].skincolor; rsp->skin = LONG(players[i].skin); @@ -574,16 +580,41 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) // SRB2kart rsp->kartspeed = (UINT8)players[i].kartspeed; rsp->kartweight = (UINT8)players[i].kartweight; + // + rsp->normalspeed = (fixed_t)LONG(players[i].normalspeed); + rsp->runspeed = (fixed_t)LONG(players[i].runspeed); + rsp->thrustfactor = players[i].thrustfactor; + rsp->accelstart = players[i].accelstart; + rsp->acceleration = players[i].acceleration; + rsp->charability = players[i].charability; + rsp->charability2 = players[i].charability2; + rsp->charflags = (UINT32)LONG(players[i].charflags); + rsp->thokitem = (UINT32)LONG(players[i].thokitem); //mobjtype_t + rsp->spinitem = (UINT32)LONG(players[i].spinitem); //mobjtype_t + rsp->revitem = (UINT32)LONG(players[i].revitem); //mobjtype_t + rsp->actionspd = (fixed_t)LONG(players[i].actionspd); + rsp->mindash = (fixed_t)LONG(players[i].mindash); + rsp->maxdash = (fixed_t)LONG(players[i].maxdash); + rsp->jumpfactor = (fixed_t)LONG(players[i].jumpfactor); rsp->speed = (fixed_t)LONG(players[i].speed); + rsp->jumping = players[i].jumping; + rsp->secondjump = players[i].secondjump; + rsp->fly1 = players[i].fly1; + rsp->glidetime = (tic_t)LONG(players[i].glidetime); + rsp->climbing = players[i].climbing; rsp->deadtimer = players[i].deadtimer; rsp->exiting = (tic_t)LONG(players[i].exiting); + rsp->homing = players[i].homing; rsp->skidtime = (tic_t)LONG(players[i].skidtime); rsp->cmomx = (fixed_t)LONG(players[i].cmomx); rsp->cmomy = (fixed_t)LONG(players[i].cmomy); rsp->rmomx = (fixed_t)LONG(players[i].rmomx); rsp->rmomy = (fixed_t)LONG(players[i].rmomy); + rsp->weapondelay = LONG(players[i].weapondelay); + rsp->tossdelay = LONG(players[i].tossdelay); + rsp->starpostx = SHORT(players[i].starpostx); rsp->starposty = SHORT(players[i].starposty); rsp->starpostz = SHORT(players[i].starpostz); @@ -592,6 +623,25 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) rsp->starposttime = (tic_t)LONG(players[i].starposttime); rsp->starpostangle = (angle_t)LONG(players[i].starpostangle); + rsp->maxlink = LONG(players[i].maxlink); + rsp->dashspeed = (fixed_t)LONG(players[i].dashspeed); + rsp->dashtime = LONG(players[i].dashtime); + rsp->angle_pos = (angle_t)LONG(players[i].angle_pos); + rsp->old_angle_pos = (angle_t)LONG(players[i].old_angle_pos); + rsp->bumpertime = (tic_t)LONG(players[i].bumpertime); + rsp->flyangle = LONG(players[i].flyangle); + rsp->drilltimer = (tic_t)LONG(players[i].drilltimer); + rsp->linkcount = LONG(players[i].linkcount); + rsp->linktimer = (tic_t)LONG(players[i].linktimer); + rsp->anotherflyangle = LONG(players[i].anotherflyangle); + rsp->nightstime = (tic_t)LONG(players[i].nightstime); + rsp->drillmeter = LONG(players[i].drillmeter); + rsp->drilldelay = players[i].drilldelay; + rsp->bonustime = players[i].bonustime; + rsp->mare = players[i].mare; + rsp->lastsidehit = SHORT(players[i].lastsidehit); + rsp->lastlinehit = SHORT(players[i].lastlinehit); + rsp->losstime = (tic_t)LONG(players[i].losstime); rsp->timeshit = players[i].timeshit; rsp->onconveyor = LONG(players[i].onconveyor); @@ -642,6 +692,8 @@ static void resynch_read_player(resynch_pak *rsp) players[i].panim = (UINT8)rsp->panim; //panim_t players[i].aiming = (angle_t)LONG(rsp->aiming); + players[i].currentweapon = LONG(rsp->currentweapon); + players[i].ringweapons = LONG(rsp->ringweapons); for (j = 0; j < NUMPOWERS; ++j) players[i].powers[j] = (UINT16)SHORT(rsp->powers[j]); @@ -653,6 +705,10 @@ static void resynch_read_player(resynch_pak *rsp) // Score is resynched in the rspfirm resync packet players[i].health = rsp->health; players[i].lives = rsp->lives; + players[i].continues = rsp->continues; + players[i].scoreadd = rsp->scoreadd; + players[i].xtralife = rsp->xtralife; + players[i].pity = rsp->pity; players[i].skincolor = rsp->skincolor; players[i].skin = LONG(rsp->skin); @@ -661,15 +717,40 @@ static void resynch_read_player(resynch_pak *rsp) players[i].kartspeed = (UINT8)rsp->kartspeed; players[i].kartweight = (UINT8)rsp->kartweight; + players[i].normalspeed = (fixed_t)LONG(rsp->normalspeed); + players[i].runspeed = (fixed_t)LONG(rsp->runspeed); + players[i].thrustfactor = rsp->thrustfactor; + players[i].accelstart = rsp->accelstart; + players[i].acceleration = rsp->acceleration; + players[i].charability = rsp->charability; + players[i].charability2 = rsp->charability2; + players[i].charflags = (UINT32)LONG(rsp->charflags); + players[i].thokitem = (UINT32)LONG(rsp->thokitem); //mobjtype_t + players[i].spinitem = (UINT32)LONG(rsp->spinitem); //mobjtype_t + players[i].revitem = (UINT32)LONG(rsp->revitem); //mobjtype_t + players[i].actionspd = (fixed_t)LONG(rsp->actionspd); + players[i].mindash = (fixed_t)LONG(rsp->mindash); + players[i].maxdash = (fixed_t)LONG(rsp->maxdash); + players[i].jumpfactor = (fixed_t)LONG(rsp->jumpfactor); + players[i].speed = (fixed_t)LONG(rsp->speed); + players[i].jumping = rsp->jumping; + players[i].secondjump = rsp->secondjump; + players[i].fly1 = rsp->fly1; + players[i].glidetime = (tic_t)LONG(rsp->glidetime); + players[i].climbing = rsp->climbing; players[i].deadtimer = rsp->deadtimer; players[i].exiting = (tic_t)LONG(rsp->exiting); + players[i].homing = rsp->homing; players[i].skidtime = (tic_t)LONG(rsp->skidtime); players[i].cmomx = (fixed_t)LONG(rsp->cmomx); players[i].cmomy = (fixed_t)LONG(rsp->cmomy); players[i].rmomx = (fixed_t)LONG(rsp->rmomx); players[i].rmomy = (fixed_t)LONG(rsp->rmomy); + players[i].weapondelay = LONG(rsp->weapondelay); + players[i].tossdelay = LONG(rsp->tossdelay); + players[i].starpostx = SHORT(rsp->starpostx); players[i].starposty = SHORT(rsp->starposty); players[i].starpostz = SHORT(rsp->starpostz); @@ -678,6 +759,25 @@ static void resynch_read_player(resynch_pak *rsp) players[i].starposttime = (tic_t)LONG(rsp->starposttime); players[i].starpostangle = (angle_t)LONG(rsp->starpostangle); + players[i].maxlink = LONG(rsp->maxlink); + players[i].dashspeed = (fixed_t)LONG(rsp->dashspeed); + players[i].dashtime = LONG(rsp->dashtime); + players[i].angle_pos = (angle_t)LONG(rsp->angle_pos); + players[i].old_angle_pos = (angle_t)LONG(rsp->old_angle_pos); + players[i].bumpertime = (tic_t)LONG(rsp->bumpertime); + players[i].flyangle = LONG(rsp->flyangle); + players[i].drilltimer = (tic_t)LONG(rsp->drilltimer); + players[i].linkcount = LONG(rsp->linkcount); + players[i].linktimer = (tic_t)LONG(rsp->linktimer); + players[i].anotherflyangle = LONG(rsp->anotherflyangle); + players[i].nightstime = (tic_t)LONG(rsp->nightstime); + players[i].drillmeter = LONG(rsp->drillmeter); + players[i].drilldelay = rsp->drilldelay; + players[i].bonustime = rsp->bonustime; + players[i].mare = rsp->mare; + players[i].lastsidehit = SHORT(rsp->lastsidehit); + players[i].lastlinehit = SHORT(rsp->lastlinehit); + players[i].losstime = (tic_t)LONG(rsp->losstime); players[i].timeshit = rsp->timeshit; players[i].onconveyor = LONG(rsp->onconveyor); diff --git a/src/d_clisrv.h b/src/d_clisrv.h index 3e0bcb723..4d7386320 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -183,6 +183,8 @@ typedef struct UINT8 panim; // panim_t angle_t aiming; + INT32 currentweapon; + INT32 ringweapons; UINT16 powers[NUMPOWERS]; @@ -192,6 +194,10 @@ typedef struct // Score is resynched in the confirm resync packet INT32 health; SINT8 lives; + SINT8 continues; + UINT8 scoreadd; + SINT8 xtralife; + SINT8 pity; UINT8 skincolor; INT32 skin; @@ -200,16 +206,41 @@ typedef struct // SRB2kart UINT8 kartspeed; UINT8 kartweight; + // + fixed_t normalspeed; + fixed_t runspeed; + UINT8 thrustfactor; + UINT8 accelstart; + UINT8 acceleration; + UINT8 charability; + UINT8 charability2; + UINT32 charflags; + UINT32 thokitem; // mobjtype_t + UINT32 spinitem; // mobjtype_t + UINT32 revitem; // mobjtype_t + fixed_t actionspd; + fixed_t mindash; + fixed_t maxdash; + fixed_t jumpfactor; fixed_t speed; + UINT8 jumping; + UINT8 secondjump; + UINT8 fly1; + tic_t glidetime; + UINT8 climbing; INT32 deadtimer; tic_t exiting; + UINT8 homing; tic_t skidtime; fixed_t cmomx; fixed_t cmomy; fixed_t rmomx; fixed_t rmomy; + INT32 weapondelay; + INT32 tossdelay; + INT16 starpostx; INT16 starposty; INT16 starpostz; @@ -218,6 +249,24 @@ typedef struct tic_t starposttime; angle_t starpostangle; + INT32 maxlink; + fixed_t dashspeed; + INT32 dashtime; + angle_t angle_pos; + angle_t old_angle_pos; + tic_t bumpertime; + INT32 flyangle; + tic_t drilltimer; + INT32 linkcount; + tic_t linktimer; + INT32 anotherflyangle; + tic_t nightstime; + INT32 drillmeter; + UINT8 drilldelay; + UINT8 bonustime; + UINT8 mare; + INT16 lastsidehit, lastlinehit; + tic_t losstime; UINT8 timeshit; INT32 onconveyor; From ae47951a2e2c0e31286ce6c3b845e8bc2524538e Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 30 Oct 2018 22:07:35 +0000 Subject: [PATCH 35/80] Some adjustments to the position faces. (Currently untested, but I need to merge master in and accidentially did this before that and I still have to compile from scratch for this branch, so...) --- 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 dc7a5bd3b..7baa2058d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6435,8 +6435,10 @@ static boolean K_drawKartPositionFaces(void) { for (i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i] && !completed[i] && players[i].mo && !players[i].spectator - && (rankplayer[ranklines] < 0 || players[i].kartstuff[k_position] < players[rankplayer[ranklines]].kartstuff[k_position])) + if (completed[i] || !playeringame[i] || players[i].spectator || !players[i].mo) + continue; + + if (rankplayer[ranklines] < 0 || players[i].kartstuff[k_position] < players[rankplayer[ranklines]].kartstuff[k_position]) { rankplayer[ranklines] = i; } @@ -6459,7 +6461,7 @@ static boolean K_drawKartPositionFaces(void) else Y -= (9*5); - if (strank <= 2) // too close to the top? + if (G_BattleGametype() || strank <= 2) // too close to the top, or playing battle? { i = 0; if (ranklines > 5) // could be both... @@ -6475,7 +6477,8 @@ static boolean K_drawKartPositionFaces(void) for (; i < ranklines; i++) { - if (players[rankplayer[i]].spectator) continue; // Spectators are ignored + if (!playeringame[rankplayer[i]]) continue; + if (players[rankplayer[i]].spectator) continue; if (!players[rankplayer[i]].mo) continue; bumperx = FACE_X+18; From 76a5f98c62cfffe109af6bf8c9bdeafe255fe2ae Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 30 Oct 2018 22:09:04 +0000 Subject: [PATCH 36/80] Make the horizontal line at the bottom of the tab rankings use the duptweaks. --- src/hu_stuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index b0fb8875e..603c4e402 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -2283,7 +2283,7 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I if (scorelines > 8) { V_DrawFill(160, 26, 1, 147, 0); // Draw a vertical line to separate the two sides. - V_DrawFill(1, 173, 318, 1, 0); // And a horizontal line near the bottom. + V_DrawFill(1-duptweak, 173, dupadjust-2, 1, 0); // And a horizontal line near the bottom. rightoffset = (BASEVIDWIDTH/2) - 4 - x; } From adf988f2c9c3dd4991316bff1db1b8898d1eced5 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 30 Oct 2018 18:20:56 -0400 Subject: [PATCH 37/80] Clean up for player->mo resyncing Make most of the order match the struct, make sure proper type conversions are used when needed --- src/d_clisrv.c | 69 ++++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index bba1e7b20..b6f424ccc 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -658,26 +658,26 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) rsp->health = LONG(players[i].mo->health); rsp->angle = (angle_t)LONG(players[i].mo->angle); - rsp->x = LONG(players[i].mo->x); - rsp->y = LONG(players[i].mo->y); - rsp->z = LONG(players[i].mo->z); - rsp->momx = LONG(players[i].mo->momx); - rsp->momy = LONG(players[i].mo->momy); - rsp->momz = LONG(players[i].mo->momz); - rsp->friction = LONG(players[i].mo->friction); - rsp->movefactor = LONG(players[i].mo->movefactor); + rsp->x = (fixed_t)LONG(players[i].mo->x); + rsp->y = (fixed_t)LONG(players[i].mo->y); + rsp->z = (fixed_t)LONG(players[i].mo->z); + rsp->momx = (fixed_t)LONG(players[i].mo->momx); + rsp->momy = (fixed_t)LONG(players[i].mo->momy); + rsp->momz = (fixed_t)LONG(players[i].mo->momz); + rsp->friction = (fixed_t)LONG(players[i].mo->friction); + rsp->movefactor = (fixed_t)LONG(players[i].mo->movefactor); rsp->tics = LONG(players[i].mo->tics); rsp->statenum = (statenum_t)LONG(players[i].mo->state-states); // :( + rsp->flags = (UINT32)LONG(players[i].mo->flags); + rsp->flags2 = (UINT32)LONG(players[i].mo->flags2); rsp->eflags = (UINT16)SHORT(players[i].mo->eflags); - rsp->flags = LONG(players[i].mo->flags); - rsp->flags2 = LONG(players[i].mo->flags2); - rsp->radius = LONG(players[i].mo->radius); - rsp->height = LONG(players[i].mo->height); - rsp->scale = LONG(players[i].mo->scale); - rsp->destscale = LONG(players[i].mo->destscale); - rsp->scalespeed = LONG(players[i].mo->scalespeed); + rsp->radius = (fixed_t)LONG(players[i].mo->radius); + rsp->height = (fixed_t)LONG(players[i].mo->height); + rsp->scale = (fixed_t)LONG(players[i].mo->scale); + rsp->destscale = (fixed_t)LONG(players[i].mo->destscale); + rsp->scalespeed = (fixed_t)LONG(players[i].mo->scalespeed); } static void resynch_read_player(resynch_pak *rsp) @@ -802,27 +802,30 @@ static void resynch_read_player(resynch_pak *rsp) //At this point, the player should have a body, whether they were respawned or not. P_UnsetThingPosition(players[i].mo); - players[i].mo->angle = (angle_t)LONG(rsp->angle); - players[i].mo->eflags = (UINT16)SHORT(rsp->eflags); - players[i].mo->flags = LONG(rsp->flags); - players[i].mo->flags2 = LONG(rsp->flags2); - players[i].mo->friction = LONG(rsp->friction); players[i].mo->health = LONG(rsp->health); - players[i].mo->momx = LONG(rsp->momx); - players[i].mo->momy = LONG(rsp->momy); - players[i].mo->momz = LONG(rsp->momz); - players[i].mo->movefactor = LONG(rsp->movefactor); + + players[i].mo->angle = (angle_t)LONG(rsp->angle); + players[i].mo->x = (fixed_t)LONG(rsp->x); + players[i].mo->y = (fixed_t)LONG(rsp->y); + players[i].mo->z = (fixed_t)LONG(rsp->z); + players[i].mo->momx = (fixed_t)LONG(rsp->momx); + players[i].mo->momy = (fixed_t)LONG(rsp->momy); + players[i].mo->momz = (fixed_t)LONG(rsp->momz); + players[i].mo->friction = (fixed_t)LONG(rsp->friction); + players[i].mo->movefactor = (fixed_t)LONG(rsp->movefactor); + players[i].mo->tics = LONG(rsp->tics); - P_SetMobjStateNF(players[i].mo, LONG(rsp->statenum)); - players[i].mo->x = LONG(rsp->x); - players[i].mo->y = LONG(rsp->y); - players[i].mo->z = LONG(rsp->z); - players[i].mo->radius = LONG(rsp->radius); - players[i].mo->height = LONG(rsp->height); + P_SetMobjStateNF(players[i].mo, (statenum_t)LONG(rsp->statenum)); + players[i].mo->flags = (UINT32)LONG(rsp->flags); + players[i].mo->flags2 = (UINT32)LONG(rsp->flags2); + players[i].mo->eflags = (UINT16)SHORT(rsp->eflags); + + players[i].mo->radius = (fixed_t)LONG(rsp->radius); + players[i].mo->height = (fixed_t)LONG(rsp->height); // P_SetScale is redundant for this, as all related variables are already restored properly. - players[i].mo->scale = LONG(rsp->scale); - players[i].mo->destscale = LONG(rsp->destscale); - players[i].mo->scalespeed = LONG(rsp->scalespeed); + players[i].mo->scale = (fixed_t)LONG(rsp->scale); + players[i].mo->destscale = (fixed_t)LONG(rsp->destscale); + players[i].mo->scalespeed = (fixed_t)LONG(rsp->scalespeed); // And finally, SET THE MOBJ SKIN damn it. players[i].mo->skin = &skins[players[i].skin]; From c71e71a4b40962b337d3c08a0983ad44471778ef Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 30 Oct 2018 22:44:05 +0000 Subject: [PATCH 38/80] Fix ping alignment. --- src/hu_stuff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 603c4e402..16f688027 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -2296,7 +2296,7 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I if (netgame // don't draw it offline && tab[i].num != serverplayer) - HU_drawPing(x + rightoffset + ((scorelines > 8) ? 13 : -27), y+2, playerpingtable[tab[i].num], false); + HU_drawPing(x + ((i < 8) ? -19 : rightoffset + 13), y+2, playerpingtable[tab[i].num], false); if (scorelines > 8) strlcpy(strtime, tab[i].name, 6); From bac297b6587e8e70a4df2f040e23fdabfb20b5cc Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 30 Oct 2018 23:01:17 +0000 Subject: [PATCH 39/80] Have HU_DrawRankings and K_drawKartPositionFaces learn a thing or two from each other, considering the latter was originally copypasted code from the former but then diverged a bit. Hopefully this solves our disconnect woes. --- src/hu_stuff.c | 4 ++-- src/k_kart.c | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 16f688027..5118fb759 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -2733,7 +2733,7 @@ static void HU_DrawRankings(void) tab[i].name = NULL; tab[i].count = INT32_MAX; - if (!playeringame[i] || players[i].spectator) + if (!playeringame[i] || players[i].spectator || !players[i].mo) continue; numplayersingame++; @@ -2744,7 +2744,7 @@ static void HU_DrawRankings(void) UINT8 lowestposition = MAXPLAYERS; for (i = 0; i < MAXPLAYERS; i++) { - if (!playeringame[i] || players[i].spectator || completed[i]) + if (completed[i] || !playeringame[i] || players[i].spectator || !players[i].mo) continue; if (players[i].kartstuff[k_position] >= lowestposition) diff --git a/src/k_kart.c b/src/k_kart.c index f6ad03548..52d8f0ecf 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6431,16 +6431,19 @@ static boolean K_drawKartPositionFaces(void) for (j = 0; j < numplayersingame; j++) { + UINT8 lowestposition = MAXPLAYERS; for (i = 0; i < MAXPLAYERS; i++) { if (completed[i] || !playeringame[i] || players[i].spectator || !players[i].mo) continue; - if (rankplayer[ranklines] < 0 || players[i].kartstuff[k_position] < players[rankplayer[ranklines]].kartstuff[k_position]) - { - rankplayer[ranklines] = i; - } + if (players[i].kartstuff[k_position] >= lowestposition) + continue; + + rankplayer[ranklines] = i; + lowestposition = players[i].kartstuff[k_position]; } + i = rankplayer[ranklines]; completed[i] = true; From 5c5894202be99c36835eb8d871778fd84492f522 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 30 Oct 2018 20:11:15 -0400 Subject: [PATCH 40/80] Set stats to what we want them to be for R2 anyway (Eggman's will need updating in the wad) --- src/r_things.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/r_things.c b/src/r_things.c index 70451f656..54b20e170 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -2592,8 +2592,8 @@ void R_InitSkins(void) skin->actionspd = 60<kartspeed = 7; - skin->kartweight = 3; + skin->kartspeed = 8; + skin->kartweight = 2; // skin->normalspeed = 36< Date: Tue, 30 Oct 2018 20:35:33 -0500 Subject: [PATCH 41/80] SOC_CHAO hardcode TODO: fix comment alignment --- src/dehacked.c | 116 ++++++ src/info.c | 967 ++++++++++++++++++++++++++++++++++++++++++++++++- src/info.h | 148 ++++++++ src/sounds.c | 15 + src/sounds.h | 15 + 5 files changed, 1260 insertions(+), 1 deletion(-) diff --git a/src/dehacked.c b/src/dehacked.c index bf2a5ca1b..94a3a32f6 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6924,6 +6924,88 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_CDTREEASP", "S_CDTREEBSP", + // SOC_CHAO hardcode + "S_BLUEFIRE1", + "S_BLUEFIRE2", + "S_BLUEFIRE3", + "S_BLUEFIRE4", + "S_GREENFIRE1", + "S_GREENFIRE2", + "S_GREENFIRE3", + "S_GREENFIRE4", + "S_REGALCHEST", + "S_CHIMERASTATUE", + "S_DRAGONSTATUE", + "S_LIZARDMANSTATUE", + "S_PEGASUSSTATUE", + "S_ZELDAFIRE1", + "S_ZELDAFIRE2", + "S_ZELDAFIRE3", + "S_ZELDAFIRE4", + "S_GANBARETHING", + "S_GANBAREDUCK", + "S_GANBARETREE", + "S_MONOIDLE", + "S_MONOCHASE1", + "S_MONOCHASE2", + "S_MONOCHASE3", + "S_MONOCHASE4", + "S_MONOPAIN", + "S_REDZELDAFIRE1", + "S_REDZELDAFIRE2", + "S_REDZELDAFIRE3", + "S_REDZELDAFIRE4", + "S_BOWLINGPIN", + "S_BOWLINGHIT1", + "S_BOWLINGHIT2", + "S_BOWLINGHIT3", + "S_BOWLINGHIT4", + "S_ARIDTOAD", + "S_TOADHIT1", + "S_TOADHIT2", + "S_TOADHIT3", + "S_TOADHIT4", + "S_EBARRELIDLE", + "S_EBARREL1", + "S_EBARREL2", + "S_EBARREL3", + "S_EBARREL4", + "S_EBARREL5", + "S_EBARREL6", + "S_EBARREL7", + "S_EBARREL8", + "S_EBARREL9", + "S_EBARREL10", + "S_EBARREL11", + "S_EBARREL12", + "S_EBARREL13", + "S_EBARREL14", + "S_EBARREL15", + "S_EBARREL16", + "S_EBARREL17", + "S_EBARREL18", + "S_MERRYHORSE", + "S_BLUEFRUIT", + "S_ORANGEFRUIT", + "S_REDFRUIT", + "S_PINKFRUIT", + "S_ADVENTURESPIKEA1", + "S_ADVENTURESPIKEA2", + "S_ADVENTURESPIKEB1", + "S_ADVENTURESPIKEB2", + "S_ADVENTURESPIKEC1", + "S_ADVENTURESPIKEC2", + "S_BOOSTPROMPT1", + "S_BOOSTPROMPT2", + "S_BOOSTOFF1", + "S_BOOSTOFF2", + "S_BOOSTON1", + "S_BOOSTON2", + "S_LIZARDMAN", + "S_LIONMAN", + "S_MOUSEMAN1", + "S_MOUSEMAN2", + #ifdef SEENAMES "S_NAMECHECK", #endif @@ -7644,6 +7726,40 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_CDTREEA", "MT_CDTREEB", + // SOC_CHAO hardcode + "MT_BLUEFIRE", + "MT_GREENFIRE", + "MT_REGALCHEST", + "MT_CHIMERASTATUE", + "MT_DRAGONSTATUE", + "MT_LIZARDMANSTATUE", + "MT_PEGASUSSTATUE", + "MT_ZELDAFIRE", + "MT_GANBARETHING", + "MT_GANBAREDUCK", + "MT_GANBARETREE", + "MT_MONOKUMA", + "MT_REDZELDAFIRE", + "MT_BOWLINGPIN", + "MT_MERRYAMBIENCE", + "MT_TWINKLECARTAMBIENCE", + "MT_EXPLODINGBARREL", + "MT_MERRYHORSE", + "MT_ARIDTOAD", + "MT_BLUEFRUIT", + "MT_ORANGEFRUIT", + "MT_REDFRUIT", + "MT_PINKFRUIT", + "MT_ADVENTURESPIKEA", + "MT_ADVENTURESPIKEB", + "MT_ADVENTURESPIKEC", + "MT_BOOSTPROMPT", + "MT_BOOSTOFF", + "MT_BOOSTON", + "MT_LIZARDMAN", + "MT_LIONMAN", + "MT_MOUSEMAN", + #ifdef SEENAMES "MT_NAMECHECK", #endif diff --git a/src/info.c b/src/info.c index 4e4ea8f60..037d6b58b 100644 --- a/src/info.c +++ b/src/info.c @@ -64,7 +64,10 @@ char sprnames[NUMSPRITES + 1][5] = "LZI2","KLIT","FZSM","FZBM","FPRT","SBUS","SHRB","TWEE","MARB","FUFO", "RUST","BLON","VAPE","HTZA","HTZB","SGVA","SGVB","SGVC","PGTR","PGF1", "PGF2","PGF3","PGBH","DPLR","SPTL","ENM1","GARU","MARR","REAP","JITB", - "CDMO","CDBU", + "CDMO","CDBU","CNDL","DOCH","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","MSMF", "XMS4","XMS5","VIEW" }; @@ -3221,6 +3224,104 @@ state_t states[NUMSTATES] = {SPR_CDBU, 1, -1, {NULL}, 0, 0, S_CDTREEASP}, // S_CDTREEASP {SPR_CDBU, 2, -1, {NULL}, 0, 0, S_CDTREEBSP}, // S_CDTREEBSP + // SOC_CHAO hardcode + {SPR_CNDL, FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_BLUEFIRE2}, // S_BLUEFIRE1 + {SPR_CNDL, 1|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_BLUEFIRE3}, // S_BLUEFIRE2 + {SPR_CNDL, 2|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_BLUEFIRE4}, // S_BLUEFIRE3 + {SPR_CNDL, 3|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_BLUEFIRE1}, // S_BLUEFIRE4 + + {SPR_CNDL, 4|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_GREENFIRE2}, // S_GREENFIRE1 + {SPR_CNDL, 5|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_GREENFIRE3}, // S_GREENFIRE2 + {SPR_CNDL, 6|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_GREENFIRE4}, // S_GREENFIRE3 + {SPR_CNDL, 7|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_GREENFIRE1}, // S_GREENFIRE4 + + {SPR_CHES, 0, -1, {NULL}, 0, 0, S_NULL}, // S_REGALCHEST + {SPR_CHIM, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_CHIMERASTATUE + {SPR_DRGN, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_DRAGONSTATUE + {SPR_LZMN, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_LIZARDMANSTATUE + {SPR_PGSS, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_PEGASUSSTATUE + + {SPR_ZTCH, FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_ZELDAFIRE2}, // S_ZELDAFIRE1 + {SPR_ZTCH, 1|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_ZELDAFIRE3}, // S_ZELDAFIRE2 + {SPR_ZTCH, 2|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_ZELDAFIRE4}, // S_ZELDAFIRE3 + {SPR_ZTCH, 3|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_ZELDAFIRE1}, // S_ZELDAFIRE4 + + {SPR_DOCH, 0, -1, {NULL}, 0, 0, S_NULL}, // S_GANBARETHING + {SPR_DUCK, 0, -1, {NULL}, 0, 0, S_NULL}, // S_GANBAREDUCK + {SPR_GTRE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_GANBARETREE + + {SPR_MKMA, 1, 2, {A_Look}, (256<<16)|1, 0, S_MONOIDLE}, // S_MONOIDLE + {SPR_MKMA, 0, 3, {A_Chase}, 3, 0, S_MONOCHASE2}, // S_MONOCHASE1 + {SPR_MKMA, 1, 3, {A_Chase}, 3, 0, S_MONOCHASE3}, // S_MONOCHASE2 + {SPR_MKMA, 2, 3, {A_Chase}, 3, 0, S_MONOCHASE4}, // S_MONOCHASE3 + {SPR_MKMA, 3, 3, {A_Chase}, 3, 0, S_MONOCHASE1}, // S_MONOCHASE4 + {SPR_MKMP, 0, 24, {A_Pain}, 3, 0, S_MONOIDLE}, // S_MONOPAIN + + {SPR_RTCH, FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_REDZELDAFIRE2}, // S_REDZELDAFIRE1 + {SPR_RTCH, 1|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_REDZELDAFIRE3}, // S_REDZELDAFIRE2 + {SPR_RTCH, 2|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_REDZELDAFIRE4}, // S_REDZELDAFIRE3 + {SPR_RTCH, 3|FF_FULLBRIGHT|FF_TRANS50, 3, {NULL}, 0, 0, S_REDZELDAFIRE1}, // S_REDZELDAFIRE4 + + {SPR_BOWL, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BOWLINGPIN + {SPR_BOWH, 0, 4, {A_BunnyHop}, 5, 20, S_BOWLINGHIT2}, // S_BOWLINGHIT1 + {SPR_BOWH, 1, 2, {NULL}, 0, 0, S_BOWLINGHIT3}, // S_BOWLINGHIT2 + {SPR_BOWH, 2, 2, {NULL}, 0, 0, S_BOWLINGHIT4}, // S_BOWLINGHIT3 + {SPR_BOWH, 3, 2, {NULL}, 0, 0, S_NULL}, // S_BOWLINGHIT4 + + {SPR_BRRL, 0, 1, {A_Look}, (96<<16)|1, 0, S_EBARRELIDLE}, // S_EBARRELIDLE + {SPR_BRRR, 0, 4, {NULL}, 0, 0, S_EBARREL2}, // S_EBARREL1 + {SPR_BRRR, 1, 4, {NULL}, 0, 0, S_EBARREL3}, // S_EBARREL2 + {SPR_BRRR, 2, 4, {NULL}, 0, 0, S_EBARREL4}, // S_EBARREL3 + {SPR_BRRR, 3, 4, {NULL}, 0, 0, S_EBARREL5}, // S_EBARREL4 + {SPR_BRRR, 4, 4, {NULL}, 0, 0, S_EBARREL6}, // S_EBARREL5 + {SPR_BRRR, 5, 4, {NULL}, 0, 0, S_EBARREL7}, // S_EBARREL6 + {SPR_BRRR, 6, 4, {NULL}, 0, 0, S_EBARREL8}, // S_EBARREL7 + {SPR_BRRR, 7, 4, {NULL}, 0, 0, S_EBARREL9}, // S_EBARREL8 + {SPR_BRRR, 8, 4, {NULL}, 0, 0, S_EBARREL10}, // S_EBARREL9 + {SPR_BRRR, 9, 4, {NULL}, 0, 0, S_EBARREL11}, // S_EBARREL10 + {SPR_BRRR, 10, 4, {NULL}, 0, 0, S_EBARREL12}, // S_EBARREL11 + {SPR_BRRR, 11, 4, {NULL}, 0, 0, S_EBARREL13}, // S_EBARREL12 + {SPR_BRRR, 12, 4, {NULL}, 0, 0, S_EBARREL14}, // S_EBARREL13 + {SPR_BRRR, 13, 4, {NULL}, 0, 0, S_EBARREL15}, // S_EBARREL14 + {SPR_BRRR, 14, 4, {NULL}, 0, 0, S_EBARREL16}, // S_EBARREL15 + {SPR_BRRR, 15, 4, {NULL}, 0, 0, S_EBARREL17}, // S_EBARREL16 + {SPR_BRRR, 16, 4, {NULL}, 0, 0, S_EBARREL18}, // S_EBARREL17 + {SPR_BRRR, 16, 0, {A_MineExplode}, MT_MINEEXPLOSION, 0, S_NULL}, // S_EBARREL18 + + {SPR_HRSE, 0, 230, {A_PlaySeeSound}, 0, 0, S_MERRYHORSE}, // S_MERRYHORSE + + {SPR_BFRT, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BLUEFRUIT + {SPR_OFRT, 0, -1, {NULL}, 0, 0, S_NULL}, // S_ORANGEFRUIT + {SPR_RFRT, 0, -1, {NULL}, 0, 0, S_NULL}, // S_REDFRUIT + {SPR_PFRT, 0, -1, {NULL}, 0, 0, S_NULL}, // S_PINKFRUIT + + {SPR_ASPK, 0, 50, {A_PlayAttackSound}, 0, 0, S_ADVENTURESPIKEA2}, // S_ADVENTURESPIKEA1 + {SPR_ASPK, 0, 50, {A_BunnyHop}, 20, 0, S_ADVENTURESPIKEA1}, // S_ADVENTURESPIKEA2 + {SPR_ASPK, 0, 50, {A_PlayAttackSound}, 0, 0, S_ADVENTURESPIKEB2}, // S_ADVENTURESPIKEB1 + {SPR_ASPK, 0, 35, {A_BunnyHop}, 15, 0, S_ADVENTURESPIKEB1}, // S_ADVENTURESPIKEB2 + {SPR_ASPK, 0, 50, {A_PlayAttackSound}, 0, 0, S_ADVENTURESPIKEC2}, // S_ADVENTURESPIKEC1 + {SPR_ASPK, 0, 65, {A_BunnyHop}, 25, 0, S_ADVENTURESPIKEC1}, // S_ADVENTURESPIKEC1 + + {SPR_HBST, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_BOOSTPROMPT2}, // S_BOOSTPROMPT1 + {SPR_HBST, 1|FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_BOOSTPROMPT1}, // S_BOOSTPROMPT2 + + {SPR_HBSF, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_BOOSTOFF2}, // S_BOOSTOFF1 + {SPR_HBSF, 1|FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_BOOSTOFF1}, // S_BOOSTOFF2 + + {SPR_HBSO, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_BOOSTON2}, // S_BOOSTON1 + {SPR_HBSO, 1|FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_BOOSTON1}, // S_BOOSTON2 + + {SPR_TOAD, 0, -1, {NULL}, 0, 0, S_NULL}, // S_ARIDTOAD + {SPR_TOAH, 0, 4, {A_BunnyHop}, 10, 60, S_TOADHIT2}, // S_TOADHIT1 + {SPR_TOAH, 1, 3, {NULL}, 0, 0, S_TOADHIT3}, // S_TOADHIT2 + {SPR_TOAH, 2, 3, {NULL}, 0, 0, S_TOADHIT4}, // S_TOADHIT3 + {SPR_TOAH, 3, 3, {NULL}, 0, 0, S_EBARREL18}, // S_TOADHIT4 + + {SPR_WBLZ, 0, -1, {NULL}, 0, 0, S_NULL}, // S_LIZARDMAN + {SPR_WBLN, 0, -1, {NULL}, 0, 0, S_NULL}, // S_LIONMAN + {SPR_MSMF, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_MOUSEMAN2}, // S_MOUSEMAN1 + {SPR_MSMF, 1|FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_MOUSEMAN1}, // S_MOUSEMAN2 + #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK #endif @@ -18529,6 +18630,870 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_BLUEFIRE + 749, // doomednum + S_BLUEFIRE1, // 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 + 0, // speed + 8*FRACUNIT, // radius + 32*FRACUNIT, // height + 0, // display offset + 100, // mass + 20, // damage + sfx_None, // activesound + MF_SPECIAL|MF_FIRE, // flags + S_NULL // raisestate + }, + + { // MT_GREENFIRE + 748, // doomednum + S_GREENFIRE1, // 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 + 0, // speed + 8< Date: Wed, 31 Oct 2018 02:46:16 -0400 Subject: [PATCH 42/80] "Joined with" kicks display in the chat instead of console --- src/d_clisrv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 3d5b90a23..97b352da2 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -2922,7 +2922,7 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum) if (otherp >= 0) \ { \ if (otherp != pnum) \ - CONS_Printf("\x82%s\x80 left the game (Joined with \x82%s\x80)\n", player_names[otherp], player_names[pnum]); \ + HU_AddChatText(va("\x82*%s left the game (Joined with %s)", player_names[otherp], player_names[pnum]), false); \ buf[0] = (UINT8)otherp; \ SendNetXCmd(XD_REMOVEPLAYER, &buf, 1); \ otherp = -1; \ From 3761a51e6be79f76e516dc81eb83d33d03597599 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 03:06:36 -0400 Subject: [PATCH 43/80] Fix ENTER GAME option not working --- src/d_netcmd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index a2dd550f4..df9fb54ab 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -3234,6 +3234,8 @@ static void Got_Teamchange(UINT8 **cp, INT32 playernum) players[playernum].playerstate = PST_REBORN; } + players[playernum].pflags &= ~PF_WANTSTOJOIN; + //Now that we've done our error checking and killed the player //if necessary, put the player on the correct team/status. if (G_TagGametype()) @@ -3315,8 +3317,6 @@ static void Got_Teamchange(UINT8 **cp, INT32 playernum) else CONS_Printf(M_GetText("%s switched to the %c%s%c.\n"), player_names[playernum], '\x84', M_GetText("Blue Team"), '\x80'); } - else if (players[playernum].pflags & PF_WANTSTOJOIN) - players[playernum].pflags &= ~PF_WANTSTOJOIN; else HU_AddChatText(va("\x82*%s became a spectator.", player_names[playernum]), false); From f5be6fb910583afbcc63b4696e8ec1ce22f04590 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 03:07:33 -0400 Subject: [PATCH 44/80] Cancel pogo spring when bumping a wall Prevents instances where you can use it to stick in one spot in Battle --- src/p_map.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/p_map.c b/src/p_map.c index 1d8a2daa6..0078a9698 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -3784,6 +3784,7 @@ void P_BouncePlayerMove(mobj_t *mo) S_StartSound(mo, sfx_s3k49); } + mo->player->kartstuff[k_pogospring] = 0; // Cancel pogo spring effect so you aren't shoved forward back into the wall you just bounced off P_PlayerHitBounceLine(bestslideline); mo->eflags |= MFE_JUSTBOUNCEDWALL; From b08fb14d623ef1ef1926320e2795b182de8caeba Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 03:13:56 -0400 Subject: [PATCH 45/80] Time over cam & signposts support mobjscale --- src/p_mobj.c | 4 ++-- src/p_spec.c | 6 +++--- src/p_user.c | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index f4fd40c9f..9802c88e0 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8509,8 +8509,8 @@ void P_MobjThinker(mobj_t *mobj) case MT_FZEROBOOM: // F-Zero explosion if (!mobj->extravalue1) { - fixed_t mx = P_ReturnThrustX(NULL, mobj->angle, 32<angle, 32<angle, 32*mobj->scale); + fixed_t my = P_ReturnThrustY(NULL, mobj->angle, 32*mobj->scale); mobj_t *explosion = P_SpawnMobj(mobj->x + (2*mx), mobj->y + (2*my), mobj->z+(mobj->height/2), MT_THOK); P_SetMobjState(explosion, S_FZEROBOOM1); diff --git a/src/p_spec.c b/src/p_spec.c index 76ed73aa8..b7006c871 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -3219,7 +3219,7 @@ void P_SetupSignExit(player_t *player) // SRB2Kart: Set sign spinning variables thing->movefactor = thing->z; - thing->z += (768<z += (768*thing->scale) * P_MobjFlip(thing); thing->movecount = 1; ++numfound; @@ -3247,7 +3247,7 @@ void P_SetupSignExit(player_t *player) // SRB2Kart: Set sign spinning variables thing->movefactor = thing->z; - thing->z += (768<z += (768*thing->scale) * P_MobjFlip(thing); thing->movecount = 1; ++numfound; @@ -3259,7 +3259,7 @@ void P_SetupSignExit(player_t *player) // SRB2Kart: FINALLY, add in an alternative if no place is found if (player->mo) { - mobj_t *sign = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + (768<mo->x, player->mo->y, player->mo->z + (768*mapheaderinfo[gamemap-1]->mobj_scale), MT_SIGN); P_SetTarget(&sign->target, player->mo); P_SetMobjState(sign, S_SIGN1); diff --git a/src/p_user.c b/src/p_user.c index 8cd31f723..b5d9397dc 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -8606,8 +8606,8 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (timeover == 1) { - thiscam->momx = P_ReturnThrustX(NULL, mo->angle, 32<momy = P_ReturnThrustY(NULL, mo->angle, 32<momx = P_ReturnThrustX(NULL, mo->angle, 32*mo->scale); // Push forward + thiscam->momy = P_ReturnThrustY(NULL, mo->angle, 32*mo->scale); thiscam->momz = 0; } else if (player->exiting || timeover == 2) From 65f67478872ff76fa0232df535fa8243ab9b14e3 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 04:46:24 -0400 Subject: [PATCH 46/80] Push fakes away from other items Prevents stupid item stacking in Battle (you can still do it with bananas, but THOSE are removable, and don't have a similar sprite) --- src/p_map.c | 25 +++++++++++++++++++++++++ src/p_mobj.c | 1 + 2 files changed, 26 insertions(+) diff --git a/src/p_map.c b/src/p_map.c index 0078a9698..2bcfd73a7 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -665,8 +665,33 @@ static boolean PIT_CheckThing(mobj_t *thing) // SRB2kart 011617 - Colission code for kart items //{ + // Push fakes out of other items + if (tmthing->type == MT_FAKEITEM && (thing->type == MT_RANDOMITEM || thing->type == MT_FAKEITEM)) + { + // see if it went over / under + if (tmthing->z > thing->z + thing->height) + return true; // overhead + if (tmthing->z + tmthing->height < thing->z) + return true; // underneath + + P_InstaThrust(tmthing, R_PointToAngle2(thing->x, thing->y, tmthing->x, tmthing->y), thing->radius/4); + return true; + } + else if (thing->type == MT_FAKEITEM && (tmthing->type == MT_RANDOMITEM || tmthing->type == MT_FAKEITEM)) + { + // see if it went over / under + if (tmthing->z > thing->z + thing->height) + return true; // overhead + if (tmthing->z + tmthing->height < thing->z) + return true; // underneath + + P_InstaThrust(thing, R_PointToAngle2(tmthing->x, tmthing->y, thing->x, thing->y), tmthing->radius/4); + return true; + } + if (tmthing->type == MT_RANDOMITEM) return true; + if (tmthing->type == MT_ORBINAUT || tmthing->type == MT_JAWZ || tmthing->type == MT_JAWZ_DUD || tmthing->type == MT_ORBINAUT_SHIELD || tmthing->type == MT_JAWZ_SHIELD) { diff --git a/src/p_mobj.c b/src/p_mobj.c index 9802c88e0..407ddc391 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8151,6 +8151,7 @@ void P_MobjThinker(mobj_t *mobj) } case MT_BANANA: case MT_FAKEITEM: + mobj->friction = ORIG_FRICTION/4; if (mobj->momx || mobj->momy) P_SpawnGhostMobj(mobj); if (mobj->z <= mobj->floorz && mobj->health > 1) From ef44df00810b61de138874c15ba39c611e717c3e Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 04:55:00 -0400 Subject: [PATCH 47/80] Fix incorrect scale of player arrows in non-splitscreen whoops --- src/p_mobj.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 407ddc391..611562a98 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6829,10 +6829,10 @@ void P_MobjThinker(mobj_t *mobj) if (!splitscreen) { - scale += FixedMul(FixedDiv(abs(P_AproxDistance(players[displayplayer].mo->x-mobj->target->x, + scale = mobj->target->scale + FixedMul(FixedDiv(abs(P_AproxDistance(players[displayplayer].mo->x-mobj->target->x, players[displayplayer].mo->y-mobj->target->y)), RING_DIST), mobj->target->scale); - if (scale > 16*FRACUNIT) - scale = 16*FRACUNIT; + if (scale > 16*mobj->target->scale) + scale = 16*mobj->target->scale; } mobj->destscale = scale; @@ -7025,10 +7025,10 @@ void P_MobjThinker(mobj_t *mobj) if (!splitscreen) { - scale += FixedMul(FixedDiv(abs(P_AproxDistance(players[displayplayer].mo->x-mobj->target->x, + scale = mobj->target->scale + FixedMul(FixedDiv(abs(P_AproxDistance(players[displayplayer].mo->x-mobj->target->x, players[displayplayer].mo->y-mobj->target->y)), RING_DIST), mobj->target->scale); - if (scale > 16*FRACUNIT) - scale = 16*FRACUNIT; + if (scale > 16*mobj->target->scale) + scale = 16*mobj->target->scale; } mobj->destscale = scale; } From e5e7bc4c1139eb62f02d4ee09c7b98198cdaf997 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 05:28:39 -0400 Subject: [PATCH 48/80] Use frameangle for rocket sneakers so they rotate around you when you spinout --- 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 ee59566f8..be902e975 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3630,7 +3630,7 @@ static void K_MoveHeldObjects(player_t *player) #if 1 { - angle_t input = player->mo->angle - cur->angle; + angle_t input = player->frameangle - cur->angle; boolean invert = (input > ANGLE_180); if (invert) input = InvAngle(input); @@ -3642,7 +3642,7 @@ static void K_MoveHeldObjects(player_t *player) cur->angle = cur->angle + input; } #else - cur->angle = player->mo->angle; + cur->angle = player->frameangle; #endif angoffset = ANGLE_90 + (ANGLE_180 * num); From 971040fba9a2d5204f248799d3bdc615e79efb03 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 05:32:59 -0400 Subject: [PATCH 49/80] No item usage while squished or respawning --- 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 be902e975..fc90de2bf 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4662,7 +4662,8 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else if (cmd->buttons & BT_ATTACK) player->pflags |= PF_ATTACKDOWN; - if (player && player->mo && player->mo->health > 0 && !player->spectator && !(player->exiting || mapreset) && player->kartstuff[k_spinouttimer] == 0) + if (player && player->mo && player->mo->health > 0 && !player->spectator && !(player->exiting || mapreset) + && player->kartstuff[k_spinouttimer] == 0 && player->kartstuff[k_squishedtimer] == 0 && player->kartstuff[k_respawn] == 0) { // First, the really specific, finicky items that function without the item being directly in your item slot. // Karma item dropping From fc011ce813909c9e86619388fcfdbf79a79d8a04 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 05:35:06 -0400 Subject: [PATCH 50/80] Nerfed squishing After fixing flashing tics not being set properly, 2 seconds of being fully stopped and then another 1.5 seconds minimum of being unable to be hit just feels like an eternity :V --- 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 fc90de2bf..4e576ea3a 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1940,7 +1940,7 @@ void K_SquishPlayer(player_t *player, mobj_t *source) K_CheckBumpers(); } - player->kartstuff[k_squishedtimer] = 2*TICRATE; + player->kartstuff[k_squishedtimer] = TICRATE; player->powers[pw_flashing] = K_GetKartFlashing(player); From 741ba90b749712fb9b14d98df7cd6dee72ca70be Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 31 Oct 2018 16:18:44 +0000 Subject: [PATCH 51/80] Order of state enums was different to that of info table, so corrected. --- src/info.c | 13 +++++++------ src/info.h | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/info.c b/src/info.c index 57c243fd1..da3ba55a7 100644 --- a/src/info.c +++ b/src/info.c @@ -3325,6 +3325,12 @@ state_t states[NUMSTATES] = {SPR_BOWH, 1, 2, {NULL}, 0, 0, S_BOWLINGHIT3}, // S_BOWLINGHIT2 {SPR_BOWH, 2, 2, {NULL}, 0, 0, S_BOWLINGHIT4}, // S_BOWLINGHIT3 {SPR_BOWH, 3, 2, {NULL}, 0, 0, S_NULL}, // S_BOWLINGHIT4 + + {SPR_TOAD, 0, -1, {NULL}, 0, 0, S_NULL}, // S_ARIDTOAD + {SPR_TOAH, 0, 4, {A_BunnyHop}, 10, 60, S_TOADHIT2}, // S_TOADHIT1 + {SPR_TOAH, 1, 3, {NULL}, 0, 0, S_TOADHIT3}, // S_TOADHIT2 + {SPR_TOAH, 2, 3, {NULL}, 0, 0, S_TOADHIT4}, // S_TOADHIT3 + {SPR_TOAH, 3, 3, {NULL}, 0, 0, S_EBARREL18}, // S_TOADHIT4 {SPR_BRRL, 0, 1, {A_Look}, (96<<16)|1, 0, S_EBARRELIDLE}, // S_EBARRELIDLE {SPR_BRRR, 0, 4, {NULL}, 0, 0, S_EBARREL2}, // S_EBARREL1 @@ -3369,12 +3375,6 @@ state_t states[NUMSTATES] = {SPR_HBSO, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_BOOSTON2}, // S_BOOSTON1 {SPR_HBSO, 1|FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_BOOSTON1}, // S_BOOSTON2 - {SPR_TOAD, 0, -1, {NULL}, 0, 0, S_NULL}, // S_ARIDTOAD - {SPR_TOAH, 0, 4, {A_BunnyHop}, 10, 60, S_TOADHIT2}, // S_TOADHIT1 - {SPR_TOAH, 1, 3, {NULL}, 0, 0, S_TOADHIT3}, // S_TOADHIT2 - {SPR_TOAH, 2, 3, {NULL}, 0, 0, S_TOADHIT4}, // S_TOADHIT3 - {SPR_TOAH, 3, 3, {NULL}, 0, 0, S_EBARREL18}, // S_TOADHIT4 - {SPR_WBLZ, 0, -1, {NULL}, 0, 0, S_NULL}, // S_LIZARDMAN {SPR_WBLN, 0, -1, {NULL}, 0, 0, S_NULL}, // S_LIONMAN {SPR_MSMF, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_MOUSEMAN2}, // S_MOUSEMAN1 @@ -19469,6 +19469,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // activesound MF_SCENERY|MF_NOCLIP|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate + }, { // MT_BLUEFIRE 749, // doomednum diff --git a/src/info.h b/src/info.h index b5373ba15..2ed349cb0 100644 --- a/src/info.h +++ b/src/info.h @@ -3940,42 +3940,51 @@ typedef enum state S_BLUEFIRE2, S_BLUEFIRE3, S_BLUEFIRE4, + S_GREENFIRE1, S_GREENFIRE2, S_GREENFIRE3, S_GREENFIRE4, + S_REGALCHEST, S_CHIMERASTATUE, S_DRAGONSTATUE, S_LIZARDMANSTATUE, S_PEGASUSSTATUE, + S_ZELDAFIRE1, S_ZELDAFIRE2, S_ZELDAFIRE3, S_ZELDAFIRE4, + S_GANBARETHING, S_GANBAREDUCK, S_GANBARETREE, + S_MONOIDLE, S_MONOCHASE1, S_MONOCHASE2, S_MONOCHASE3, S_MONOCHASE4, S_MONOPAIN, + S_REDZELDAFIRE1, S_REDZELDAFIRE2, S_REDZELDAFIRE3, S_REDZELDAFIRE4, + S_BOWLINGPIN, S_BOWLINGHIT1, S_BOWLINGHIT2, S_BOWLINGHIT3, S_BOWLINGHIT4, + S_ARIDTOAD, S_TOADHIT1, S_TOADHIT2, S_TOADHIT3, S_TOADHIT4, + S_EBARRELIDLE, S_EBARREL1, S_EBARREL2, @@ -3995,23 +4004,30 @@ typedef enum state S_EBARREL16, S_EBARREL17, S_EBARREL18, + S_MERRYHORSE, + S_BLUEFRUIT, S_ORANGEFRUIT, S_REDFRUIT, S_PINKFRUIT, + S_ADVENTURESPIKEA1, S_ADVENTURESPIKEA2, S_ADVENTURESPIKEB1, S_ADVENTURESPIKEB2, S_ADVENTURESPIKEC1, S_ADVENTURESPIKEC2, + S_BOOSTPROMPT1, S_BOOSTPROMPT2, + S_BOOSTOFF1, S_BOOSTOFF2, + S_BOOSTON1, S_BOOSTON2, + S_LIZARDMAN, S_LIONMAN, S_MOUSEMAN1, From aff865a3e71cc9730cd5ac2602cd01a5940e8591 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 15:14:53 -0400 Subject: [PATCH 52/80] Item distribution experiments based on my experience in netgames Needs tested tonight. - Grow & Rocket Sneakers are slightly more in the back - Sneaker x3 gets handed out more in the back-middle - Removed 5% from Ballhog towards the front - Removed 5% from Shrink in the forward-most column it was in --- src/k_kart.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 4e576ea3a..23b84ff1e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -487,22 +487,22 @@ static INT32 K_KartItemOddsRace[NUMKARTRESULTS][9] = { //P-Odds 0 1 2 3 4 5 6 7 8 /*Sneaker*/ {20, 0, 0, 4, 6, 6, 0, 0, 0 }, // Sneaker - /*Rocket Sneaker*/ { 0, 0, 0, 0, 0, 2, 5, 5, 0 }, // Rocket Sneaker - /*Invincibility*/ { 0, 0, 0, 0, 0, 1, 4, 6,16 }, // Invincibility + /*Rocket Sneaker*/ { 0, 0, 0, 0, 0, 1, 3, 5, 3 }, // Rocket Sneaker + /*Invincibility*/ { 0, 0, 0, 0, 0, 1, 4, 6,14 }, // Invincibility /*Banana*/ { 0, 9, 4, 2, 1, 0, 0, 0, 0 }, // Banana /*Eggman Monitor*/ { 0, 4, 3, 2, 0, 0, 0, 0, 0 }, // Eggman Monitor /*Orbinaut*/ { 0, 6, 5, 3, 2, 0, 0, 0, 0 }, // Orbinaut /*Jawz*/ { 0, 0, 3, 2, 1, 1, 0, 0, 0 }, // Jawz - /*Mine*/ { 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Mine - /*Ballhog*/ { 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Ballhog + /*Mine*/ { 0, 0, 2, 2, 1, 0, 0, 0, 0 }, // Mine + /*Ballhog*/ { 0, 0, 0, 2, 1, 0, 0, 0, 0 }, // Ballhog /*Self-Propelled Bomb*/ { 0, 0, 1, 2, 3, 4, 2, 2, 0 }, // Self-Propelled Bomb - /*Grow*/ { 0, 0, 0, 0, 0, 1, 3, 5, 4 }, // Grow - /*Shrink*/ { 0, 0, 0, 0, 0, 0, 1, 2, 0 }, // Shrink + /*Grow*/ { 0, 0, 0, 0, 0, 1, 3, 5, 3 }, // Grow + /*Shrink*/ { 0, 0, 0, 0, 0, 0, 0, 2, 0 }, // Shrink /*Thunder Shield*/ { 0, 1, 2, 0, 0, 0, 0, 0, 0 }, // Thunder Shield /*Hyudoro*/ { 0, 0, 0, 0, 1, 2, 1, 0, 0 }, // Hyudoro /*Pogo Spring*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Pogo Spring /*Kitchen Sink*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Kitchen Sink - /*Sneaker x3*/ { 0, 0, 0, 0, 3, 6, 6, 2, 0 }, // Sneaker x3 + /*Sneaker x3*/ { 0, 0, 0, 0, 3, 7, 9, 2, 0 }, // Sneaker x3 /*Banana x3*/ { 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // Banana x3 /*Banana x10*/ { 0, 0, 0, 0, 1, 0, 0, 0, 0 }, // Banana x10 /*Orbinaut x3*/ { 0, 0, 0, 1, 0, 0, 0, 0, 0 }, // Orbinaut x3 From 9f1acf35284fe950e7beedf00e8dc2e41988d748 Mon Sep 17 00:00:00 2001 From: toaster Date: Thu, 1 Nov 2018 00:10:34 +0000 Subject: [PATCH 53/80] That's it for me. No new features, no major sprite replacements. Maybe bugfixing stuff like this I did while half-asleep just in case it turns out I missed a test case. * Oni's new 1x Bumpers and Out-Of-Bumpers competition-style 'X'! * Modify alignment for `GOTITx` emblem drawing to match new Chaos Coin sprites. * Adjust m_cond.c list to use new Chaos Coin Emblem sprite slots. --- src/hu_stuff.c | 86 +----------------------------------- src/k_kart.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++--- src/m_cond.c | 104 ++++++++++++++++++++++---------------------- src/m_menu.c | 12 +++--- 4 files changed, 167 insertions(+), 150 deletions(-) diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 5118fb759..614ca49ac 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -2268,92 +2268,8 @@ void HU_drawPing(INT32 x, INT32 y, INT32 ping, boolean notext) } // -// HU_DrawTabRankings +// HU_DrawTabRankings -- moved to k_kart.c // -void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer, INT32 hilicol) -{ - INT32 i, rightoffset = 240; - const UINT8 *colormap; - INT32 dupadjust = (vid.width/vid.dupx), duptweak = (dupadjust - BASEVIDWIDTH)/2; - - //this function is designed for 9 or less score lines only - //I_Assert(scorelines <= 9); -- not today bitch, kart fixed it up - - V_DrawFill(1-duptweak, 26, dupadjust-2, 1, 0); // Draw a horizontal line because it looks nice! - if (scorelines > 8) - { - V_DrawFill(160, 26, 1, 147, 0); // Draw a vertical line to separate the two sides. - V_DrawFill(1-duptweak, 173, dupadjust-2, 1, 0); // And a horizontal line near the bottom. - rightoffset = (BASEVIDWIDTH/2) - 4 - x; - } - - for (i = 0; i < scorelines; i++) - { - char strtime[MAXPLAYERNAME+1]; - - if (players[tab[i].num].spectator || !players[tab[i].num].mo) - continue; //ignore them. - - if (netgame // don't draw it offline - && tab[i].num != serverplayer) - HU_drawPing(x + ((i < 8) ? -19 : rightoffset + 13), y+2, playerpingtable[tab[i].num], false); - - if (scorelines > 8) - strlcpy(strtime, tab[i].name, 6); - else - STRBUFCPY(strtime, tab[i].name); - - V_DrawString(x + 20, y, - ((tab[i].num == whiteplayer) - ? hilicol|V_ALLOWLOWERCASE - : V_ALLOWLOWERCASE), - strtime); - - if (players[tab[i].num].mo->color) - { - colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo->color, GTC_CACHE); - if (players[tab[i].num].mo->colorized) - colormap = R_GetTranslationColormap(TC_RAINBOW, players[tab[i].num].mo->color, GTC_CACHE); - else - colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo->color, GTC_CACHE); - - V_DrawMappedPatch(x, y-4, 0, facerankprefix[players[tab[i].num].skin], colormap); - /*if (G_BattleGametype() && players[tab[i].num].kartstuff[k_bumper] > 0) -- doesn't physically fit... - { - INT32 bumperx = x-5; - for (j = 0; j < players[tab[i].num].kartstuff[k_bumper]; j++) - { - bumperx -= 3; - V_DrawSmallMappedPatch(bumperx, y+6, 0, W_CachePatchName("K_BLNICO", PU_CACHE), colormap); - } - }*/ - } - - if (G_BattleGametype() && players[tab[i].num].kartstuff[k_bumper] <= 0) - V_DrawSmallScaledPatch(x-2, y-4, 0, W_CachePatchName("K_NOBLNS", PU_CACHE)); - - if (G_RaceGametype()) - { -#define timestring(time) va("%i'%02i\"%02i", G_TicsToMinutes(time, true), G_TicsToSeconds(time), G_TicsToCentiseconds(time)) - if (players[tab[i].num].exiting) - V_DrawRightAlignedString(x+rightoffset, y, hilicol, timestring(players[tab[i].num].realtime)); - else if (players[tab[i].num].pflags & PF_TIMEOVER) - V_DrawRightAlignedThinString(x+rightoffset, y-1, 0, "NO CONTEST."); - else if (circuitmap) - V_DrawRightAlignedString(x+rightoffset, y, 0, va("Lap %d", tab[i].count)); -#undef timestring - } - else - V_DrawRightAlignedString(x+rightoffset, y, 0, va("%u", tab[i].count)); - - y += 18; - if (i == 7) - { - y = 33; - x = (BASEVIDWIDTH/2) + 4; - } - } -} // // HU_DrawTeamTabRankings diff --git a/src/k_kart.c b/src/k_kart.c index 52d8f0ecf..8fc4c2a81 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5528,6 +5528,7 @@ static patch_t *kp_winnernum[NUMPOSFRAMES]; static patch_t *kp_facenum[MAXPLAYERS+1]; static patch_t *kp_rankbumper; +static patch_t *kp_tinybumpera, *kp_tinybumperb; static patch_t *kp_ranknobumpers; static patch_t *kp_battlewin; @@ -5653,6 +5654,8 @@ void K_LoadKartHUDGraphics(void) // Extra ranking icons kp_rankbumper = W_CachePatchName("K_BLNICO", PU_HUDGFX); + kp_tinybumpera = W_CachePatchName("K_BLNA", PU_HUDGFX); + kp_tinybumperb = W_CachePatchName("K_BLNB", PU_HUDGFX); kp_ranknobumpers = W_CachePatchName("K_NOBLNS", PU_HUDGFX); // Battle graphics @@ -6311,7 +6314,7 @@ void K_drawKartTimestamp(tic_t drawtime, INT32 TX, INT32 TY, INT16 emblemmap, bo } V_DrawRightAlignedString(workx, worky, splitflags, targettext); - workx -= 72; //69; -- good night sweet prince + workx -= 67; V_DrawSmallScaledPatch(workx + 4, worky, splitflags, W_CachePatchName("NEEDIT", PU_CACHE)); break; @@ -6324,7 +6327,7 @@ void K_drawKartTimestamp(tic_t drawtime, INT32 TX, INT32 TY, INT16 emblemmap, bo splitflags = (splitflags &~ V_HUDTRANSHALF)|V_HUDTRANS; while (curemb--) { - workx -= 16; + workx -= 12; V_DrawSmallMappedPatch(workx + 4, worky, splitflags, emblempic[curemb], emblemcol[curemb]); } } @@ -6482,7 +6485,7 @@ static boolean K_drawKartPositionFaces(void) if (players[rankplayer[i]].spectator) continue; if (!players[rankplayer[i]].mo) continue; - bumperx = FACE_X+18; + bumperx = FACE_X+19; if (players[rankplayer[i]].mo->color) { @@ -6495,16 +6498,17 @@ static boolean K_drawKartPositionFaces(void) V_DrawMappedPatch(FACE_X, Y, V_HUDTRANS|V_SNAPTOLEFT, facerankprefix[players[rankplayer[i]].skin], colormap); if (G_BattleGametype() && players[rankplayer[i]].kartstuff[k_bumper] > 0) { - for (j = 0; j < players[rankplayer[i]].kartstuff[k_bumper]; j++) + V_DrawMappedPatch(bumperx-2, Y, V_HUDTRANS|V_SNAPTOLEFT, kp_tinybumpera, colormap); + for (j = 1; j < players[rankplayer[i]].kartstuff[k_bumper]; j++) { - V_DrawSmallMappedPatch(bumperx, Y+10, V_HUDTRANS|V_SNAPTOLEFT, kp_rankbumper, colormap); - bumperx += 3; + bumperx += 5; + V_DrawMappedPatch(bumperx, Y, V_HUDTRANS|V_SNAPTOLEFT, kp_tinybumperb, colormap); } } } if (G_BattleGametype() && players[rankplayer[i]].kartstuff[k_bumper] <= 0) - V_DrawSmallScaledPatch(FACE_X-2, Y, V_HUDTRANS|V_SNAPTOLEFT, kp_ranknobumpers); + V_DrawScaledPatch(FACE_X-4, Y-3, V_HUDTRANS|V_SNAPTOLEFT, kp_ranknobumpers); else { INT32 pos = players[rankplayer[i]].kartstuff[k_position]; @@ -6520,6 +6524,103 @@ static boolean K_drawKartPositionFaces(void) return false; } +// +// HU_DrawTabRankings -- moved here to take advantage of kart stuff! +// +void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer, INT32 hilicol) +{ + INT32 i, rightoffset = 240; + const UINT8 *colormap; + INT32 dupadjust = (vid.width/vid.dupx), duptweak = (dupadjust - BASEVIDWIDTH)/2; + + //this function is designed for 9 or less score lines only + //I_Assert(scorelines <= 9); -- not today bitch, kart fixed it up + + V_DrawFill(1-duptweak, 26, dupadjust-2, 1, 0); // Draw a horizontal line because it looks nice! + if (scorelines > 8) + { + V_DrawFill(160, 26, 1, 147, 0); // Draw a vertical line to separate the two sides. + V_DrawFill(1-duptweak, 173, dupadjust-2, 1, 0); // And a horizontal line near the bottom. + rightoffset = (BASEVIDWIDTH/2) - 4 - x; + } + + for (i = 0; i < scorelines; i++) + { + char strtime[MAXPLAYERNAME+1]; + + if (players[tab[i].num].spectator || !players[tab[i].num].mo) + continue; //ignore them. + + if (netgame // don't draw it offline + && tab[i].num != serverplayer) + HU_drawPing(x + ((i < 8) ? -19 : rightoffset + 13), y+2, playerpingtable[tab[i].num], false); + + if (scorelines > 8) + strlcpy(strtime, tab[i].name, 6); + else + STRBUFCPY(strtime, tab[i].name); + + V_DrawString(x + 20, y, + ((tab[i].num == whiteplayer) + ? hilicol|V_ALLOWLOWERCASE + : V_ALLOWLOWERCASE), + strtime); + + if (players[tab[i].num].mo->color) + { + colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo->color, GTC_CACHE); + if (players[tab[i].num].mo->colorized) + colormap = R_GetTranslationColormap(TC_RAINBOW, players[tab[i].num].mo->color, GTC_CACHE); + else + colormap = R_GetTranslationColormap(players[tab[i].num].skin, players[tab[i].num].mo->color, GTC_CACHE); + + V_DrawMappedPatch(x, y-4, 0, facerankprefix[players[tab[i].num].skin], colormap); + /*if (G_BattleGametype() && players[tab[i].num].kartstuff[k_bumper] > 0) -- not enough space for this + { + INT32 bumperx = x+19; + V_DrawMappedPatch(bumperx-2, y-4, 0, kp_tinybumpera, colormap); + for (j = 1; j < players[tab[i].num].kartstuff[k_bumper]; j++) + { + bumperx += 5; + V_DrawMappedPatch(bumperx, y-4, 0, kp_tinybumperb, colormap); + } + }*/ + } + + if (G_BattleGametype() && players[tab[i].num].kartstuff[k_bumper] <= 0) + V_DrawScaledPatch(x-4, y-7, 0, kp_ranknobumpers); + else + { + INT32 pos = players[tab[i].num].kartstuff[k_position]; + if (pos < 0 || pos > MAXPLAYERS) + pos = 0; + // Draws the little number over the face + V_DrawScaledPatch(x-5, y+6, 0, kp_facenum[pos]); + } + + if (G_RaceGametype()) + { +#define timestring(time) va("%i'%02i\"%02i", G_TicsToMinutes(time, true), G_TicsToSeconds(time), G_TicsToCentiseconds(time)) + if (players[tab[i].num].exiting) + V_DrawRightAlignedString(x+rightoffset, y, hilicol, timestring(players[tab[i].num].realtime)); + else if (players[tab[i].num].pflags & PF_TIMEOVER) + V_DrawRightAlignedThinString(x+rightoffset, y-1, 0, "NO CONTEST."); + else if (circuitmap) + V_DrawRightAlignedString(x+rightoffset, y, 0, va("Lap %d", tab[i].count)); +#undef timestring + } + else + V_DrawRightAlignedString(x+rightoffset, y, 0, va("%u", tab[i].count)); + + y += 18; + if (i == 7) + { + y = 33; + x = (BASEVIDWIDTH/2) + 4; + } + } +} + static void K_drawKartLaps(void) { INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTOLEFT); diff --git a/src/m_cond.c b/src/m_cond.c index 7387a8044..3e2baa1fd 100644 --- a/src/m_cond.c +++ b/src/m_cond.c @@ -33,64 +33,64 @@ conditionset_t conditionSets[MAXCONDITIONSETS]; emblem_t emblemlocations[MAXEMBLEMS] = { // SILVER TIME TROPHIES - {ET_TIME, 0,0,0, 1, 'T', SKINCOLOR_GREY, 90*TICRATE, "", 0}, // Green Hills Zone - Time: 1:30 - {ET_TIME, 0,0,0, 2, 'T', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Pipe Speedway Zone - Time: 1:50 - {ET_TIME, 0,0,0, 3, 'T', SKINCOLOR_GREY, 135*TICRATE, "", 0}, // Dark Race - 2:15 - {ET_TIME, 0,0,0, 4, 'T', SKINCOLOR_GREY, 105*TICRATE, "", 0}, // Darkvile Garden Zone - 1:45 - {ET_TIME, 0,0,0, 5, 'T', SKINCOLOR_GREY, 140*TICRATE, "", 0}, // Northern District Zone - 2:20 - {ET_TIME, 0,0,0, 6, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0}, // Sonic Speedway Zone - 2:00 - {ET_TIME, 0,0,0, 7, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0}, // Egg Zeppelin Zone - 2:00 - {ET_TIME, 0,0,0, 8, 'T', SKINCOLOR_GREY, 95*TICRATE, "", 0}, // Hill Top Zone - 1:35 - {ET_TIME, 0,0,0, 9, 'T', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Sunbeam Paradise Zone - 1:50 - {ET_TIME, 0,0,0, 10, 'T', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Diamond Square Zone - 1:50 - {ET_TIME, 0,0,0, 11, 'T', SKINCOLOR_GREY, 150*TICRATE, "", 0}, // Misty Maze Zone - 2:30 - {ET_TIME, 0,0,0, 12, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0}, // Midnight Meadow Zone - 2:00 - {ET_TIME, 0,0,0, 13, 'T', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // Megablock Castle Zone - 2:10 - {ET_TIME, 0,0,0, 14, 'T', SKINCOLOR_GREY, 150*TICRATE, "", 0}, // Sub-Zero Peak Zone - 2:30 - {ET_TIME, 0,0,0, 15, 'T', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Sapphire Coast Zone - 1:50 - {ET_TIME, 0,0,0, 16, 'T', SKINCOLOR_GREY, 140*TICRATE, "", 0}, // Silvercloud Island Zone - 2:20 - {ET_TIME, 0,0,0, 17, 'T', SKINCOLOR_GREY, 135*TICRATE, "", 0}, // Petroleum Refinery Zone - 2:15 - {ET_TIME, 0,0,0, 18, 'T', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // Canyon Rush Zone - 2:10 - {ET_TIME, 0,0,0, 19, 'T', SKINCOLOR_GREY, 160*TICRATE, "", 0}, // Blue Mountain Zone - 2:40 - {ET_TIME, 0,0,0, 20, 'T', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Casino Resort Zone - 1:50 - {ET_TIME, 0,0,0, 21, 'T', SKINCOLOR_GREY, 105*TICRATE, "", 0}, // Desert Palace Zone - 1:45 - {ET_TIME, 0,0,0, 22, 'T', SKINCOLOR_GREY, 165*TICRATE, "", 0}, // Red Barrage Area - 2:45 - {ET_TIME, 0,0,0, 23, 'T', SKINCOLOR_GREY, 105*TICRATE, "", 0}, // Vanilla Hotel Zone - 1:45 - {ET_TIME, 0,0,0, 24, 'T', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Twinkle Cart - 1:50 - {ET_TIME, 0,0,0, 25, 'T', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Pleasure Castle - 1:50 - {ET_TIME, 0,0,0, 26, 'T', SKINCOLOR_GREY, 140*TICRATE, "", 0}, // Aurora Atoll Zone - 2:20 - {ET_TIME, 0,0,0, 27, 'T', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // Barren Badlands Zone - 2:10 - {ET_TIME, 0,0,0, 28, 'T', SKINCOLOR_GREY, 155*TICRATE, "", 0}, // Toxic Palace Zone - 2:35 - {ET_TIME, 0,0,0, 29, 'T', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // Ancient Tomb Zone - 2:10 - {ET_TIME, 0,0,0, 30, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0}, // Cloud Cradle Zone K - 2:00 - {ET_TIME, 0,0,0, 31, 'T', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Kodachrome Void Zone - 1:50 - {ET_TIME, 0,0,0, 32, 'T', SKINCOLOR_GREY, 140*TICRATE, "", 0}, // Egg Quarters - 2:20 - {ET_TIME, 0,0,0, 33, 'T', SKINCOLOR_GREY, 115*TICRATE, "", 0}, // Boiling Bedrock Zone - 1:55 - {ET_TIME, 0,0,0, 34, 'T', SKINCOLOR_GREY, 140*TICRATE, "", 0}, // Virtual Highway Zone - 2:20 - {ET_TIME, 0,0,0, 35, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0}, // Eggman's Nightclub Zone - 2:00 - {ET_TIME, 0,0,0, 36, 'T', SKINCOLOR_GREY, 90*TICRATE, "", 0}, // KKR Ganbare Dochu 2 - 1:30 - {ET_TIME, 0,0,0, 37, 'T', SKINCOLOR_GREY, 80*TICRATE, "", 0}, // CK Chao Circuit 1 - 1:20 - {ET_TIME, 0,0,0, 38, 'T', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // CK Chao Circuit 2 - 2:10 - {ET_TIME, 0,0,0, 39, 'T', SKINCOLOR_GREY, 100*TICRATE, "", 0}, // CK Cloud Tops 2 - 1:40 - {ET_TIME, 0,0,0, 40, 'T', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // CK Regal Raceway - 2:10 - {ET_TIME, 0,0,0, 41, 'T', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // SM Dimension Heist - 2:10 - {ET_TIME, 0,0,0, 42, 'T', SKINCOLOR_GREY, 100*TICRATE, "", 0}, // SRB2 Frozen Night - 1:40 - {ET_TIME, 0,0,0, 43, 'T', SKINCOLOR_GREY, 100*TICRATE, "", 0}, // MKSC Sky Garden - 1:40 - {ET_TIME, 0,0,0, 44, 'T', SKINCOLOR_GREY, 95*TICRATE, "", 0}, // MKDS Peach Gardens - 1:35 - {ET_TIME, 0,0,0, 45, 'T', SKINCOLOR_GREY, 105*TICRATE, "", 0}, // MKSC Rainbow Road - 1:45 - {ET_TIME, 0,0,0, 46, 'T', SKINCOLOR_GREY, 70*TICRATE, "", 0}, // SMK Mario Circuit 1 - 1:10 - {ET_TIME, 0,0,0, 47, 'T', SKINCOLOR_GREY, 90*TICRATE, "", 0}, // SMK Donut Plains 1 - 1:30 - {ET_TIME, 0,0,0, 48, 'T', SKINCOLOR_GREY, 75*TICRATE, "", 0}, // SMK Ghost Valley 2 - 1:15 - {ET_TIME, 0,0,0, 49, 'T', SKINCOLOR_GREY, 105*TICRATE, "", 0}, // SMK Mario Circuit 3 - 1:45 - {ET_TIME, 0,0,0, 50, 'T', SKINCOLOR_GREY, 130*TICRATE, "", 0} // SMK Rainbow Road - 2:10 + {ET_TIME, 0,0,0, 1, 'B', SKINCOLOR_GREY, 90*TICRATE, "", 0}, // Green Hills Zone - Time: 1:30 + {ET_TIME, 0,0,0, 2, 'B', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Pipe Speedway Zone - Time: 1:50 + {ET_TIME, 0,0,0, 3, 'B', SKINCOLOR_GREY, 135*TICRATE, "", 0}, // Dark Race - 2:15 + {ET_TIME, 0,0,0, 4, 'B', SKINCOLOR_GREY, 105*TICRATE, "", 0}, // Darkvile Garden Zone - 1:45 + {ET_TIME, 0,0,0, 5, 'B', SKINCOLOR_GREY, 140*TICRATE, "", 0}, // Northern District Zone - 2:20 + {ET_TIME, 0,0,0, 6, 'B', SKINCOLOR_GREY, 120*TICRATE, "", 0}, // Sonic Speedway Zone - 2:00 + {ET_TIME, 0,0,0, 7, 'B', SKINCOLOR_GREY, 120*TICRATE, "", 0}, // Egg Zeppelin Zone - 2:00 + {ET_TIME, 0,0,0, 8, 'B', SKINCOLOR_GREY, 95*TICRATE, "", 0}, // Hill Top Zone - 1:35 + {ET_TIME, 0,0,0, 9, 'B', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Sunbeam Paradise Zone - 1:50 + {ET_TIME, 0,0,0, 10, 'B', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Diamond Square Zone - 1:50 + {ET_TIME, 0,0,0, 11, 'B', SKINCOLOR_GREY, 150*TICRATE, "", 0}, // Misty Maze Zone - 2:30 + {ET_TIME, 0,0,0, 12, 'B', SKINCOLOR_GREY, 120*TICRATE, "", 0}, // Midnight Meadow Zone - 2:00 + {ET_TIME, 0,0,0, 13, 'B', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // Megablock Castle Zone - 2:10 + {ET_TIME, 0,0,0, 14, 'B', SKINCOLOR_GREY, 150*TICRATE, "", 0}, // Sub-Zero Peak Zone - 2:30 + {ET_TIME, 0,0,0, 15, 'B', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Sapphire Coast Zone - 1:50 + {ET_TIME, 0,0,0, 16, 'B', SKINCOLOR_GREY, 140*TICRATE, "", 0}, // Silvercloud Island Zone - 2:20 + {ET_TIME, 0,0,0, 17, 'B', SKINCOLOR_GREY, 135*TICRATE, "", 0}, // Petroleum Refinery Zone - 2:15 + {ET_TIME, 0,0,0, 18, 'B', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // Canyon Rush Zone - 2:10 + {ET_TIME, 0,0,0, 19, 'B', SKINCOLOR_GREY, 160*TICRATE, "", 0}, // Blue Mountain Zone - 2:40 + {ET_TIME, 0,0,0, 20, 'B', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Casino Resort Zone - 1:50 + {ET_TIME, 0,0,0, 21, 'B', SKINCOLOR_GREY, 105*TICRATE, "", 0}, // Desert Palace Zone - 1:45 + {ET_TIME, 0,0,0, 22, 'B', SKINCOLOR_GREY, 165*TICRATE, "", 0}, // Red Barrage Area - 2:45 + {ET_TIME, 0,0,0, 23, 'B', SKINCOLOR_GREY, 105*TICRATE, "", 0}, // Vanilla Hotel Zone - 1:45 + {ET_TIME, 0,0,0, 24, 'B', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Twinkle Cart - 1:50 + {ET_TIME, 0,0,0, 25, 'B', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Pleasure Castle - 1:50 + {ET_TIME, 0,0,0, 26, 'B', SKINCOLOR_GREY, 140*TICRATE, "", 0}, // Aurora Atoll Zone - 2:20 + {ET_TIME, 0,0,0, 27, 'B', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // Barren Badlands Zone - 2:10 + {ET_TIME, 0,0,0, 28, 'B', SKINCOLOR_GREY, 155*TICRATE, "", 0}, // Toxic Palace Zone - 2:35 + {ET_TIME, 0,0,0, 29, 'B', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // Ancient Tomb Zone - 2:10 + {ET_TIME, 0,0,0, 30, 'B', SKINCOLOR_GREY, 120*TICRATE, "", 0}, // Cloud Cradle Zone K - 2:00 + {ET_TIME, 0,0,0, 31, 'B', SKINCOLOR_GREY, 110*TICRATE, "", 0}, // Kodachrome Void Zone - 1:50 + {ET_TIME, 0,0,0, 32, 'B', SKINCOLOR_GREY, 140*TICRATE, "", 0}, // Egg Quarters - 2:20 + {ET_TIME, 0,0,0, 33, 'B', SKINCOLOR_GREY, 115*TICRATE, "", 0}, // Boiling Bedrock Zone - 1:55 + {ET_TIME, 0,0,0, 34, 'B', SKINCOLOR_GREY, 140*TICRATE, "", 0}, // Virtual Highway Zone - 2:20 + {ET_TIME, 0,0,0, 35, 'B', SKINCOLOR_GREY, 120*TICRATE, "", 0}, // Eggman's Nightclub Zone - 2:00 + {ET_TIME, 0,0,0, 36, 'B', SKINCOLOR_GREY, 90*TICRATE, "", 0}, // KKR Ganbare Dochu 2 - 1:30 + {ET_TIME, 0,0,0, 37, 'B', SKINCOLOR_GREY, 80*TICRATE, "", 0}, // CK Chao Circuit 1 - 1:20 + {ET_TIME, 0,0,0, 38, 'B', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // CK Chao Circuit 2 - 2:10 + {ET_TIME, 0,0,0, 39, 'B', SKINCOLOR_GREY, 100*TICRATE, "", 0}, // CK Cloud Tops 2 - 1:40 + {ET_TIME, 0,0,0, 40, 'B', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // CK Regal Raceway - 2:10 + {ET_TIME, 0,0,0, 41, 'B', SKINCOLOR_GREY, 130*TICRATE, "", 0}, // SM Dimension Heist - 2:10 + {ET_TIME, 0,0,0, 42, 'B', SKINCOLOR_GREY, 100*TICRATE, "", 0}, // SRB2 Frozen Night - 1:40 + {ET_TIME, 0,0,0, 43, 'B', SKINCOLOR_GREY, 100*TICRATE, "", 0}, // MKSC Sky Garden - 1:40 + {ET_TIME, 0,0,0, 44, 'B', SKINCOLOR_GREY, 95*TICRATE, "", 0}, // MKDS Peach Gardens - 1:35 + {ET_TIME, 0,0,0, 45, 'B', SKINCOLOR_GREY, 105*TICRATE, "", 0}, // MKSC Rainbow Road - 1:45 + {ET_TIME, 0,0,0, 46, 'B', SKINCOLOR_GREY, 70*TICRATE, "", 0}, // SMK Mario Circuit 1 - 1:10 + {ET_TIME, 0,0,0, 47, 'B', SKINCOLOR_GREY, 90*TICRATE, "", 0}, // SMK Donut Plains 1 - 1:30 + {ET_TIME, 0,0,0, 48, 'B', SKINCOLOR_GREY, 75*TICRATE, "", 0}, // SMK Ghost Valley 2 - 1:15 + {ET_TIME, 0,0,0, 49, 'B', SKINCOLOR_GREY, 105*TICRATE, "", 0}, // SMK Mario Circuit 3 - 1:45 + {ET_TIME, 0,0,0, 50, 'B', SKINCOLOR_GREY, 130*TICRATE, "", 0} // SMK Rainbow Road - 2:10 // GOLD DEV TIME TROPHIES - // ...none yet! + // ...none yet! uses 'A' }; // Default Extra Emblems extraemblem_t extraemblems[MAXEXTRAEMBLEMS] = { - {"Experienced Driver", "Play 100 Matches", 10, 'X', SKINCOLOR_BLUE, 0}, + {"Experienced Driver", "Play 100 Matches", 10, 'C', SKINCOLOR_RED, 0}, }; // Default Unlockables diff --git a/src/m_menu.c b/src/m_menu.c index 43a8ff3c9..9c6635e10 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -3380,7 +3380,7 @@ static void M_DrawMapEmblems(INT32 mapnum, INT32 x, INT32 y) V_DrawSmallScaledPatch(x, y, 0, W_CachePatchName("NEEDIT", PU_CACHE)); emblem = M_GetLevelEmblems(-1); - x -= 12; + x -= 8; } } @@ -6199,7 +6199,7 @@ static void M_DrawStatsMaps(int location) } mnum = statsMapList[i]; - M_DrawMapEmblems(mnum+1, 292, y); + M_DrawMapEmblems(mnum+1, 295, y); if (mapheaderinfo[mnum]->levelflags & LF_NOZONE) V_DrawString(20, y, 0, va("%s %s", @@ -6248,10 +6248,10 @@ static void M_DrawStatsMaps(int location) exemblem = &extraemblems[i]; if (exemblem->collected) - V_DrawSmallMappedPatch(292, y, 0, W_CachePatchName(M_GetExtraEmblemPatch(exemblem), PU_CACHE), + V_DrawSmallMappedPatch(295, y, 0, W_CachePatchName(M_GetExtraEmblemPatch(exemblem), PU_CACHE), R_GetTranslationColormap(TC_DEFAULT, M_GetExtraEmblemColor(exemblem), GTC_CACHE)); else - V_DrawSmallScaledPatch(292, y, 0, W_CachePatchName("NEEDIT", PU_CACHE)); + V_DrawSmallScaledPatch(295, y, 0, W_CachePatchName("NEEDIT", PU_CACHE)); V_DrawString(20, y, 0, va("%s", exemblem->description)); } @@ -6310,8 +6310,8 @@ static void M_DrawLevelStats(void) else V_DrawRightAlignedString(BASEVIDWIDTH-16, 70, recommendedflags, "(complete)"); - V_DrawString(36, 70, 0, va("x %d/%d", M_CountEmblems(), numemblems+numextraemblems)); - V_DrawSmallScaledPatch(20, 70, 0, W_CachePatchName("EMBLICON", PU_STATIC)); + V_DrawString(32, 70, 0, va("x %d/%d", M_CountEmblems(), numemblems+numextraemblems)); + V_DrawSmallScaledPatch(20, 70, 0, W_CachePatchName("GOTITA", PU_STATIC)); M_DrawStatsMaps(statsLocation); } From dd28bda75fc3aa82510539c1e5ea419e7dc9aaa3 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 21:35:17 -0400 Subject: [PATCH 54/80] Brake drfit effect --- src/d_player.h | 1 + src/dehacked.c | 5 +++++ src/info.c | 43 ++++++++++++++++++++++++++++++++++++------- src/info.h | 5 +++++ src/k_kart.c | 33 ++++++++++++++++++++++++++++++++- src/p_enemy.c | 1 + src/p_mobj.c | 42 ++++++++++++++++++++++++++++++++++++++---- 7 files changed, 118 insertions(+), 12 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 866589dfb..91d09df64 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -308,6 +308,7 @@ typedef enum k_destboostcam, // Ditto k_timeovercam, // Camera timer for leaving behind or not k_aizdriftstrat, // Let go of your drift while boosting? Helper for the SICK STRATZ you have just unlocked + k_brakedrift, // Helper for brake-drift spark spawning k_itemroulette, // Used for the roulette when deciding what item to give you (was "pw_kartitem") k_roulettetype, // Used for the roulette, for deciding type (currently only used for Battle, to give you better items from Karma items) diff --git a/src/dehacked.c b/src/dehacked.c index 77663ccda..3dcc92122 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6247,6 +6247,9 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DRIFTSPARK_C1", "S_DRIFTSPARK_C2", + // Brake drift sparks + "S_BRAKEDRIFT", + // Drift Smoke "S_DRIFTDUST1", "S_DRIFTDUST2", @@ -7393,6 +7396,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_INVULNFLASH", "MT_WIPEOUTTRAIL", "MT_DRIFTSPARK", + "MT_BRAKEDRIFT", "MT_DRIFTDUST", "MT_ROCKETSNEAKER", // Rocket sneakers @@ -7895,6 +7899,7 @@ static const char *const KARTSTUFF_LIST[] = { "DESTBOOSTCAM", "TIMEOVERCAM", "AIZDRIFTSTRAT", + "BRAKEDRIFT", "ITEMROULETTE", "ROULETTETYPE", diff --git a/src/info.c b/src/info.c index cde74cee2..18b818c94 100644 --- a/src/info.c +++ b/src/info.c @@ -56,13 +56,13 @@ char sprnames[NUMSPRITES + 1][5] = "SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO", //SRB2kart Sprites "SPRG","BSPR","RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE", - "KINV","KINF","WIPD","DRIF","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","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB","ARRO", - "ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK","LZI1", - "LZI2","KLIT","FZSM","FZBM","FPRT","SPTL","ENM1","GARU","MARR","REAP", - "JITB","CDMO","CDBU","VIEW" + "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","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB", + "ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK", + "LZI1","LZI2","KLIT","FZSM","FZBM","FPRT","SPTL","ENM1","GARU","MARR", + "REAP","JITB","CDMO","CDBU","VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -2561,6 +2561,8 @@ 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_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 {SPR_DUST, 1, 3, {NULL}, 0, 0, S_DRIFTDUST3}, // S_DRIFTDUST2 {SPR_DUST, FF_TRANS20|2, 3, {NULL}, 0, 0, S_DRIFTDUST4}, // S_DRIFTDUST3 @@ -14873,6 +14875,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_BRAKEDRIFT + -1, // doomednum + S_BRAKEDRIFT, // 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 + 8*FRACUNIT, // radius + 8*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_DRIFTDUST -1, // doomednum S_DRIFTDUST1, // spawnstate diff --git a/src/info.h b/src/info.h index 78f0edaed..61e0e1dbe 100644 --- a/src/info.h +++ b/src/info.h @@ -601,6 +601,7 @@ typedef enum sprite SPR_KINF, // Invincibility flash SPR_WIPD, // Wipeout dust trail SPR_DRIF, // Drift Sparks + SPR_BDRF, // Brake drift sparks SPR_DUST, // Drift Dust // Kart Items @@ -3109,6 +3110,9 @@ typedef enum state S_DRIFTSPARK_C1, S_DRIFTSPARK_C2, + // Brake drift sparks + S_BRAKEDRIFT, + // Drift Smoke S_DRIFTDUST1, S_DRIFTDUST2, @@ -4272,6 +4276,7 @@ typedef enum mobj_type MT_INVULNFLASH, MT_WIPEOUTTRAIL, MT_DRIFTSPARK, + MT_BRAKEDRIFT, MT_DRIFTDUST, MT_ROCKETSNEAKER, diff --git a/src/k_kart.c b/src/k_kart.c index ee59566f8..126ba1843 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1330,6 +1330,23 @@ static void K_SpawnDashDustRelease(player_t *player) } } +static void K_SpawnBrakeDriftSparks(player_t *player) // Be sure to update the mobj thinker case too! +{ + mobj_t *sparks; + + I_Assert(player != NULL); + I_Assert(player->mo != NULL); + I_Assert(!P_MobjWasRemoved(player->mo)); + + // Position & etc are handled in its thinker, and its spawned invisible. + // This avoids needing to dupe code if we don't need it. + sparks = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BRAKEDRIFT); + P_SetTarget(&sparks->target, player->mo); + P_SetScale(sparks, (sparks->destscale = player->mo->scale)); + K_MatchGenericExtraFlags(sparks, player->mo); + sparks->flags2 |= MF2_DONTDRAW; +} + /** \brief Calculates the respawn timer and drop-boosting \param player player object passed from K_KartPlayerThink @@ -3879,6 +3896,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) fast->momx = 3*player->mo->momx/4; fast->momy = 3*player->mo->momy/4; fast->momz = 3*player->mo->momz/4; + K_MatchGenericExtraFlags(fast, player->mo); } if (player->playerstate == PST_DEAD || player->kartstuff[k_respawn] > 1) // Ensure these are set correctly here @@ -4454,7 +4472,8 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_spinouttimer] > 0 // banana peel || player->speed < FixedMul(10<<16, player->mo->scale)) // you're too slow! { - player->kartstuff[k_drift] = player->kartstuff[k_driftcharge] = player->kartstuff[k_aizdriftstrat] = 0; + player->kartstuff[k_drift] = player->kartstuff[k_driftcharge] = 0; + player->kartstuff[k_aizdriftstrat] = player->kartstuff[k_brakedrift] = 0; } if ((!player->kartstuff[k_sneakertimer]) @@ -4468,6 +4487,18 @@ static void K_KartDrift(player_t *player, boolean onground) } else if (player->kartstuff[k_aizdriftstrat] && !player->kartstuff[k_drift]) K_SpawnAIZDust(player); + + if (player->kartstuff[k_drift] + && ((player->cmd.buttons & BT_BRAKE) + || !(player->cmd.buttons & BT_ACCELERATE)) + && P_IsObjectOnGround(player->mo)) + { + if (!player->kartstuff[k_brakedrift]) + K_SpawnBrakeDriftSparks(player); + player->kartstuff[k_brakedrift] = 1; + } + else + player->kartstuff[k_brakedrift] = 0; } // // K_KartUpdatePosition diff --git a/src/p_enemy.c b/src/p_enemy.c index f06718390..b44bb8749 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8435,6 +8435,7 @@ void A_SPBChase(mobj_t *actor) //fast->momz = 3*actor->momz/4; fast->color = SKINCOLOR_RED; fast->colorized = true; + K_MatchGenericExtraFlags(fast, actor); } return; diff --git a/src/p_mobj.c b/src/p_mobj.c index f4fd40c9f..089f6fafe 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8301,6 +8301,43 @@ void P_MobjThinker(mobj_t *mobj) } P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z); break; + case MT_BRAKEDRIFT: + if ((!mobj->target || !mobj->target->health || !mobj->target->player || !P_IsObjectOnGround(mobj->target)) + || !mobj->target->player->kartstuff[k_drift] || !mobj->target->player->kartstuff[k_brakedrift] + || !((mobj->target->player->cmd.buttons & BT_BRAKE) + || !(mobj->target->player->cmd.buttons & BT_ACCELERATE))) // Letting go of accel functions about the same as brake-drifting + { + P_RemoveMobj(mobj); + return; + } + else + { + fixed_t newx, newy; + angle_t travelangle; + + travelangle = mobj->target->angle - ((ANGLE_45/5)*mobj->target->player->kartstuff[k_drift]); + + newx = mobj->target->x + P_ReturnThrustX(mobj->target, travelangle+ANGLE_180, 24*mobj->target->scale); + newy = mobj->target->y + P_ReturnThrustY(mobj->target, travelangle+ANGLE_180, 24*mobj->target->scale); + P_TeleportMove(mobj, newx, newy, mobj->target->z); + + 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_KETCHUP; + else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)) + mobj->color = SKINCOLOR_SAPPHIRE; + else + mobj->color = SKINCOLOR_YELLOW; + + K_MatchGenericExtraFlags(mobj, mobj->target); + if (leveltime & 1) + mobj->flags2 |= MF2_DONTDRAW; + } + break; case MT_PLAYERRETICULE: if (!mobj->target || !mobj->target->health) { @@ -8310,10 +8347,7 @@ void P_MobjThinker(mobj_t *mobj) P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z); break; case MT_INSTASHIELDB: - if (leveltime & 1) - mobj->flags2 |= MF2_DONTDRAW; - else - mobj->flags2 &= ~MF2_DONTDRAW; + mobj->flags2 ^= MF2_DONTDRAW; /* FALLTHRU */ case MT_INSTASHIELDA: if (!mobj->target || !mobj->target->health || (mobj->target->player && !mobj->target->player->kartstuff[k_instashield])) From 94429a1cb6be8deb8ebbca3d36d9f6f786fda3b8 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 22:38:43 -0400 Subject: [PATCH 55/80] Fix offsets, add colormapping --- src/k_kart.c | 43 +++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index ee59566f8..453b0be85 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7376,41 +7376,48 @@ static void K_drawLapStartAnim(void) { // This is an EVEN MORE insanely complicated animation. const UINT8 progress = 80-stplyr->kartstuff[k_lapanimation]; + UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, stplyr->skincolor, 0); - V_DrawScaledPatch(BASEVIDWIDTH/2 + (32*max(0, stplyr->kartstuff[k_lapanimation]-76)), - 56 - (32*max(0, progress-76)), - 0, kp_lapanim_emblem); + V_DrawFixedPatch((BASEVIDWIDTH/2 + (32*max(0, stplyr->kartstuff[k_lapanimation]-76)))*FRACUNIT, + (48 - (32*max(0, progress-76)))*FRACUNIT, + FRACUNIT, V_HUDTRANS, + kp_lapanim_emblem, colormap); if (stplyr->laps == (UINT8)(cv_numlaps.value - 1)) { - V_DrawScaledPatch(27 - (32*max(0, progress-76)), - 32, - 0, kp_lapanim_final[min(progress/2, 10)]); + V_DrawFixedPatch((62 - (32*max(0, progress-76)))*FRACUNIT, // 27 + (-6)*FRACUNIT, // 24 + FRACUNIT, V_HUDTRANS, + kp_lapanim_final[min(progress/2, 10)], NULL); if (progress/2-12 >= 0) { - V_DrawScaledPatch(194 + (32*max(0, progress-76)), - 32, - 0, kp_lapanim_lap[min(progress/2-12, 6)]); + V_DrawFixedPatch((188 + (32*max(0, progress-76)))*FRACUNIT, // 194 + (-6)*FRACUNIT, // 24 + FRACUNIT, V_HUDTRANS, + kp_lapanim_lap[min(progress/2-12, 6)], NULL); } } else { - V_DrawScaledPatch(61 - (32*max(0, progress-76)), - 32, - 0, kp_lapanim_lap[min(progress/2, 6)]); + V_DrawFixedPatch((82 - (32*max(0, progress-76)))*FRACUNIT, // 61 + (-6)*FRACUNIT, // 24 + FRACUNIT, V_HUDTRANS, + kp_lapanim_lap[min(progress/2, 6)], NULL); if (progress/2-8 >= 0) { - V_DrawScaledPatch(194 + (32*max(0, progress-76)), - 32, - 0, kp_lapanim_number[(((UINT32)stplyr->laps+1) / 10)][min(progress/2-8, 2)]); + V_DrawFixedPatch((188 + (32*max(0, progress-76)))*FRACUNIT, // 194 + (-6)*FRACUNIT, // 24 + FRACUNIT, V_HUDTRANS, + kp_lapanim_number[(((UINT32)stplyr->laps+1) / 10)][min(progress/2-8, 2)], NULL); if (progress/2-10 >= 0) { - V_DrawScaledPatch(221 + (32*max(0, progress-76)), - 32, - 0, kp_lapanim_number[(((UINT32)stplyr->laps+1) % 10)][min(progress/2-10, 2)]); + V_DrawFixedPatch((208 + (32*max(0, progress-76)))*FRACUNIT, // 221 + (-6)*FRACUNIT, // 24 + FRACUNIT, V_HUDTRANS, + kp_lapanim_number[(((UINT32)stplyr->laps+1) % 10)][min(progress/2-10, 2)], NULL); } } } From 04dc2978abd766cb8305da7382211693cdfcc2e7 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 23:10:38 -0400 Subject: [PATCH 56/80] Added judging hands (if'd out) --- src/k_kart.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 453b0be85..78b92a9fe 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5577,6 +5577,9 @@ static patch_t *kp_lapanim_lap[7]; static patch_t *kp_lapanim_final[11]; static patch_t *kp_lapanim_number[10][3]; static patch_t *kp_lapanim_emblem; +#if 0 +static patch_t *kp_lapanim_hand[3]; +#endif void K_LoadKartHUDGraphics(void) { @@ -5796,6 +5799,15 @@ void K_LoadKartHUDGraphics(void) } kp_lapanim_emblem = (patch_t *) W_CachePatchName("K_LAPE00", PU_HUDGFX); + +#if 0 + sprintf(buffer, "K_LAPH0x"); + for (i = 0; i < 3; i++) + { + buffer[7] = '0'+(i+1); + kp_lapanim_hand[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX); + } +#endif } // For the item toggle menu @@ -7377,12 +7389,28 @@ static void K_drawLapStartAnim(void) // This is an EVEN MORE insanely complicated animation. const UINT8 progress = 80-stplyr->kartstuff[k_lapanimation]; UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, stplyr->skincolor, 0); +#if 0 + UINT8 h = 1; + + if (stplyr->kartstuff[k_position] == 1) + h = 0; + else if (K_IsPlayerLosing(stplyr)) + h = 2; +#endif V_DrawFixedPatch((BASEVIDWIDTH/2 + (32*max(0, stplyr->kartstuff[k_lapanimation]-76)))*FRACUNIT, (48 - (32*max(0, progress-76)))*FRACUNIT, FRACUNIT, V_HUDTRANS, kp_lapanim_emblem, colormap); +#if 0 + V_DrawFixedPatch((BASEVIDWIDTH/2 + (32*max(0, stplyr->kartstuff[k_lapanimation]-76)))*FRACUNIT, + (48 - (32*max(0, progress-76)) + + 4 - abs((leveltime % 8) - 4))*FRACUNIT, + FRACUNIT, V_HUDTRANS, + kp_lapanim_hand[h], NULL); +#endif + if (stplyr->laps == (UINT8)(cv_numlaps.value - 1)) { V_DrawFixedPatch((62 - (32*max(0, progress-76)))*FRACUNIT, // 27 From ee033c1ac4ef7aaccdc7b7d4abfd351b7a65c8dc Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 31 Oct 2018 23:34:13 -0400 Subject: [PATCH 57/80] YOU GOT EM Flashes on screen whenever you get more than 1 karma point at a time, getting you back into the game. --- src/d_player.h | 1 + src/dehacked.c | 1 + src/k_kart.c | 10 ++++++++++ src/p_inter.c | 21 +++++++++++++++++---- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 866589dfb..18099967a 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -344,6 +344,7 @@ typedef enum k_comebackpoints, // Number of times you've bombed or gave an item to someone; once it's 3 it gets set back to 0 and you're given a bumper k_comebackmode, // 0 = bomb, 1 = item 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 NUMKARTSTUFF } kartstufftype_t; diff --git a/src/dehacked.c b/src/dehacked.c index 77663ccda..7222b6ffd 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -7927,6 +7927,7 @@ static const char *const KARTSTUFF_LIST[] = { "COMEBACKPOINTS", "COMEBACKMODE", "WANTED", + "YOUGOTEM", }; static const char *const HUDITEMS_LIST[] = { diff --git a/src/k_kart.c b/src/k_kart.c index ee59566f8..14978c672 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4067,6 +4067,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_lapanimation]) player->kartstuff[k_lapanimation]--; + if (player->kartstuff[k_yougotem]) + player->kartstuff[k_yougotem]--; + if (G_BattleGametype() && (player->exiting || player->kartstuff[k_comebacktimer])) { if (player->exiting) @@ -5578,6 +5581,8 @@ static patch_t *kp_lapanim_final[11]; static patch_t *kp_lapanim_number[10][3]; static patch_t *kp_lapanim_emblem; +static patch_t *kp_yougotem; + void K_LoadKartHUDGraphics(void) { INT32 i, j; @@ -5796,6 +5801,8 @@ void K_LoadKartHUDGraphics(void) } kp_lapanim_emblem = (patch_t *) W_CachePatchName("K_LAPE00", PU_HUDGFX); + + kp_yougotem = (patch_t *) W_CachePatchName("YOUGOTEM", PU_HUDGFX); } // For the item toggle menu @@ -7652,6 +7659,9 @@ void K_drawKartHUD(void) K_drawLapStartAnim(); } + if (G_BattleGametype() && !splitscreen && (stplyr->kartstuff[k_yougotem] % 2)) // * YOU GOT EM * + V_DrawScaledPatch(BASEVIDWIDTH/2 - SHORT(kp_yougotem->width), 32, V_HUDTRANS, kp_yougotem); + // Draw FREE PLAY. if (isfreeplay && !stplyr->spectator && timeinmap > 113) K_drawKartFreePlay(leveltime); diff --git a/src/p_inter.c b/src/p_inter.c index af5dc5b12..8b49494b2 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -494,6 +494,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) else { mobj_t *boom = P_SpawnMobj(special->target->x, special->target->y, special->target->z, MT_BOOMEXPLODE); + UINT8 ptadd = (K_IsPlayerWanted(player) ? 2 : 1); + boom->scale = special->target->scale; boom->destscale = special->target->scale; boom->momz = 5*FRACUNIT; @@ -516,12 +518,17 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) } if (numingame <= 2) // If so, then an extra karma point so they are 100% certain to switch places; it's annoying to end matches with a bomb kill - special->target->player->kartstuff[k_comebackpoints]++; + ptadd++; } - special->target->player->kartstuff[k_comebackpoints] += (K_IsPlayerWanted(player) ? 2 : 1); + special->target->player->kartstuff[k_comebackpoints] += ptadd; + + if (ptadd > 1) + special->target->player->kartstuff[k_yougotem] = TICRATE; + if (special->target->player->kartstuff[k_comebackpoints] >= 2) K_StealBumper(special->target->player, player, true); + special->target->player->kartstuff[k_comebacktimer] = comebacktime; K_ExplodePlayer(player, special->target, special); @@ -545,6 +552,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) else if (special->target->player->kartstuff[k_comebackmode] == 2 && P_CanPickupItem(player, 2)) { mobj_t *poof = P_SpawnMobj(special->x, special->y, special->z, MT_EXPLODE); + UINT8 ptadd = 1; // No WANTED bonus for tricking + S_StartSound(poof, special->info->seesound); if (player->kartstuff[k_bumper] == 1) // If you have only one bumper left, and see if it's a 1v1 @@ -560,14 +569,18 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) } if (numingame <= 2) // If so, then an extra karma point so they are 100% certain to switch places; it's annoying to end matches with a fake kill - special->target->player->kartstuff[k_comebackpoints]++; + ptadd++; } special->target->player->kartstuff[k_comebackmode] = 0; - special->target->player->kartstuff[k_comebackpoints]++; + special->target->player->kartstuff[k_comebackpoints] += ptadd; + + if (ptadd > 1) + special->target->player->kartstuff[k_yougotem] = TICRATE; if (special->target->player->kartstuff[k_comebackpoints] >= 2) K_StealBumper(special->target->player, player, true); + special->target->player->kartstuff[k_comebacktimer] = comebacktime; K_DropItems(player); //K_StripItems(player); From e59102365fbc6e922a088bc7ab2f91566af1e946 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 1 Nov 2018 00:57:38 -0400 Subject: [PATCH 58/80] Battle points are visible --- src/dehacked.c | 32 ++++++++++++++++++++++++ src/info.c | 63 ++++++++++++++++++++++++++++++++++++++++++++--- src/info.h | 39 ++++++++++++++++++++++++++++- src/k_kart.c | 29 ++++++++++++++++++++++ src/k_kart.h | 1 + src/lua_baselib.c | 15 +++++++++++ src/p_mobj.c | 22 +++++++++++++++++ 7 files changed, 197 insertions(+), 4 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 7222b6ffd..8877cee61 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6758,6 +6758,36 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_KARMAWHEEL", // Karma player wheels + "S_BATTLEPOINT1A", // Battle point indicators + "S_BATTLEPOINT1B", + "S_BATTLEPOINT1C", + "S_BATTLEPOINT1D", + "S_BATTLEPOINT1E", + "S_BATTLEPOINT1F", + "S_BATTLEPOINT1G", + "S_BATTLEPOINT1H", + "S_BATTLEPOINT1I", + + "S_BATTLEPOINT2A", + "S_BATTLEPOINT2B", + "S_BATTLEPOINT2C", + "S_BATTLEPOINT2D", + "S_BATTLEPOINT2E", + "S_BATTLEPOINT2F", + "S_BATTLEPOINT2G", + "S_BATTLEPOINT2H", + "S_BATTLEPOINT2I", + + "S_BATTLEPOINT3A", + "S_BATTLEPOINT3B", + "S_BATTLEPOINT3C", + "S_BATTLEPOINT3D", + "S_BATTLEPOINT3E", + "S_BATTLEPOINT3F", + "S_BATTLEPOINT3G", + "S_BATTLEPOINT3H", + "S_BATTLEPOINT3I", + // Thunder shield use stuff; "S_KSPARK1", // Sparkling Radius "S_KSPARK2", @@ -7515,6 +7545,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_KARMAHITBOX", "MT_KARMAWHEEL", + "MT_BATTLEPOINT", + "MT_FZEROBOOM", // Midnight Channel stuff: diff --git a/src/info.c b/src/info.c index cde74cee2..928e2cb1b 100644 --- a/src/info.c +++ b/src/info.c @@ -60,9 +60,9 @@ char sprnames[NUMSPRITES + 1][5] = "SSMN","KRBM","BHOG","BHBM","SPBM","THNS","SINK","SITR","KBLN","DEZL", "POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO", "CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB","ARRO", - "ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","KSPK","LZI1", - "LZI2","KLIT","FZSM","FZBM","FPRT","SPTL","ENM1","GARU","MARR","REAP", - "JITB","CDMO","CDBU","VIEW" + "ITEM","ITMO","ITMI","ITMN","WANT","PBOM","HIT1","HIT2","HIT3","RETI", + "AIDU","KSPK","LZI1","LZI2","KLIT","FZSM","FZBM","FPRT","SPTL","ENM1", + "GARU","MARR","REAP","JITB","CDMO","CDBU","VIEW" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -3046,6 +3046,36 @@ state_t states[NUMSTATES] = {SPR_PBOM, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KARMAWHEEL + {SPR_HIT1, 0, 1, {NULL}, 0, 0, S_BATTLEPOINT1B}, // S_BATTLEPOINT1A + {SPR_HIT1, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT1C}, // S_BATTLEPOINT1B + {SPR_HIT1, 4, 1, {NULL}, 0, 0, S_BATTLEPOINT1D}, // S_BATTLEPOINT1C + {SPR_HIT1, 3, 1, {NULL}, 0, 0, S_BATTLEPOINT1E}, // S_BATTLEPOINT1D + {SPR_HIT1, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT1F}, // S_BATTLEPOINT1E + {SPR_HIT1, 1, 1, {NULL}, 0, 0, S_BATTLEPOINT1G}, // S_BATTLEPOINT1F + {SPR_HIT1, 2, TICRATE, {NULL}, 0, 0, S_BATTLEPOINT1H}, // S_BATTLEPOINT1G + {SPR_HIT1, 5, 1, {NULL}, 0, 0, S_BATTLEPOINT1I}, // S_BATTLEPOINT1H + {SPR_HIT1, 6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT1I + + {SPR_HIT2, 0, 1, {NULL}, 0, 0, S_BATTLEPOINT2B}, // S_BATTLEPOINT2A + {SPR_HIT2, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT2C}, // S_BATTLEPOINT2B + {SPR_HIT2, 4, 1, {NULL}, 0, 0, S_BATTLEPOINT2D}, // S_BATTLEPOINT2C + {SPR_HIT2, 3, 1, {NULL}, 0, 0, S_BATTLEPOINT2E}, // S_BATTLEPOINT2D + {SPR_HIT2, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT2F}, // S_BATTLEPOINT2E + {SPR_HIT2, 1, 1, {NULL}, 0, 0, S_BATTLEPOINT2G}, // S_BATTLEPOINT2F + {SPR_HIT2, 2, TICRATE, {NULL}, 0, 0, S_BATTLEPOINT2H}, // S_BATTLEPOINT2G + {SPR_HIT2, 5, 1, {NULL}, 0, 0, S_BATTLEPOINT2I}, // S_BATTLEPOINT2H + {SPR_HIT2, 6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT2I + + {SPR_HIT3, 0, 1, {NULL}, 0, 0, S_BATTLEPOINT3B}, // S_BATTLEPOINT3A + {SPR_HIT3, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT3C}, // S_BATTLEPOINT3B + {SPR_HIT3, 4, 1, {NULL}, 0, 0, S_BATTLEPOINT3D}, // S_BATTLEPOINT3C + {SPR_HIT3, 3, 1, {NULL}, 0, 0, S_BATTLEPOINT3E}, // S_BATTLEPOINT3D + {SPR_HIT3, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT3F}, // S_BATTLEPOINT3E + {SPR_HIT3, 1, 1, {NULL}, 0, 0, S_BATTLEPOINT3G}, // S_BATTLEPOINT3F + {SPR_HIT3, 2, TICRATE, {NULL}, 0, 0, S_BATTLEPOINT3H}, // S_BATTLEPOINT3G + {SPR_HIT3, 5, 1, {NULL}, 0, 0, S_BATTLEPOINT3I}, // S_BATTLEPOINT3H + {SPR_HIT3, 6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT3I + // Oh no it's annoying lightning states....... // Lightning Sparks (it's the ones we'll use for the radius) {SPR_KSPK, FF_FULLBRIGHT, 2, {A_LightningFollowPlayer}, 0, 0, S_KSPARK2}, // S_KSPARK1 @@ -17276,6 +17306,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_BATTLEPOINT + -1, // doomednum + S_INVISIBLE, // 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 + 8*FRACUNIT, // radius + 8*FRACUNIT, // height + -1, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_DONTENCOREMAP, // flags + S_NULL // raisestate + }, + { // MT_FZEROBOOM -1, // doomednum S_INVISIBLE, // spawnstate diff --git a/src/info.h b/src/info.h index 78f0edaed..d125aa96e 100644 --- a/src/info.h +++ b/src/info.h @@ -651,6 +651,11 @@ typedef enum sprite SPR_WANT, SPR_PBOM, // player bomb + + SPR_HIT1, // battle points + SPR_HIT2, // battle points + SPR_HIT3, // battle points + SPR_RETI, // player reticule SPR_AIDU, @@ -3619,7 +3624,37 @@ typedef enum state S_PLAYERFAKE, S_KARMAWHEEL, - + + S_BATTLEPOINT1A, // Battle point indicators + S_BATTLEPOINT1B, + S_BATTLEPOINT1C, + S_BATTLEPOINT1D, + S_BATTLEPOINT1E, + S_BATTLEPOINT1F, + S_BATTLEPOINT1G, + S_BATTLEPOINT1H, + S_BATTLEPOINT1I, + + S_BATTLEPOINT2A, + S_BATTLEPOINT2B, + S_BATTLEPOINT2C, + S_BATTLEPOINT2D, + S_BATTLEPOINT2E, + S_BATTLEPOINT2F, + S_BATTLEPOINT2G, + S_BATTLEPOINT2H, + S_BATTLEPOINT2I, + + S_BATTLEPOINT3A, + S_BATTLEPOINT3B, + S_BATTLEPOINT3C, + S_BATTLEPOINT3D, + S_BATTLEPOINT3E, + S_BATTLEPOINT3F, + S_BATTLEPOINT3G, + S_BATTLEPOINT3H, + S_BATTLEPOINT3I, + // Thunder shield use stuff; S_KSPARK1, // Sparkling Radius S_KSPARK2, @@ -4394,6 +4429,8 @@ typedef enum mobj_type MT_KARMAHITBOX, MT_KARMAWHEEL, + MT_BATTLEPOINT, + MT_FZEROBOOM, // Midnight Channel stuff: diff --git a/src/k_kart.c b/src/k_kart.c index 14978c672..68478db29 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1784,6 +1784,32 @@ void K_DoInstashield(player_t *player) P_SetTarget(&layerb->target, player->mo); } +void K_SpawnBattlePoints(player_t *source, player_t *victim, UINT8 amount) +{ + statenum_t st; + mobj_t *pt; + + if (!source || !source->mo) + return; + + if (amount == 1) + st = S_BATTLEPOINT1A; + else if (amount == 2) + st = S_BATTLEPOINT2A; + else if (amount == 3) + st = S_BATTLEPOINT3A; + else + return; // NO STATE! + + pt = P_SpawnMobj(source->mo->x, source->mo->y, source->mo->z, MT_BATTLEPOINT); + P_SetTarget(&pt->target, source->mo); + P_SetMobjState(pt, st); + if (victim && victim->skincolor) + pt->color = victim->skincolor; + else + pt->color = source->skincolor; +} + void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, boolean trapitem) { UINT8 scoremultiply = 1; @@ -1817,6 +1843,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, boolean trapitem if (source && source->player && player != source->player) { P_AddPlayerScore(source->player, scoremultiply); + K_SpawnBattlePoints(source->player, player, scoremultiply); if (!trapitem) { source->player->kartstuff[k_wanted] -= wantedreduce; @@ -1907,6 +1934,7 @@ void K_SquishPlayer(player_t *player, mobj_t *source) if (source && source->player && player != source->player) { P_AddPlayerScore(source->player, scoremultiply); + K_SpawnBattlePoints(source->player, player, scoremultiply); source->player->kartstuff[k_wanted] -= wantedreduce; player->kartstuff[k_wanted] -= (wantedreduce/2); } @@ -1996,6 +2024,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source, mobj_t *inflictor) // A b if (source && source->player && player != source->player) { P_AddPlayerScore(source->player, scoremultiply); + K_SpawnBattlePoints(source->player, player, scoremultiply); source->player->kartstuff[k_wanted] -= wantedreduce; player->kartstuff[k_wanted] -= (wantedreduce/2); } diff --git a/src/k_kart.h b/src/k_kart.h index 671efb89c..1a96d6bb3 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -27,6 +27,7 @@ void K_KartMoveAnimation(player_t *player); void K_KartPlayerThink(player_t *player, ticcmd_t *cmd); void K_KartPlayerAfterThink(player_t *player); void K_DoInstashield(player_t *player); +void K_SpawnBattlePoints(player_t *source, player_t *victim, UINT8 amount); void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, boolean trapitem); void K_SquishPlayer(player_t *player, mobj_t *source); void K_ExplodePlayer(player_t *player, mobj_t *source, mobj_t *inflictor); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 8b9a01313..05facf180 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -2109,6 +2109,20 @@ static int lib_kDoInstashield(lua_State *L) return 0; } +static int lib_kSpawnBattlePoints(lua_State *L) +{ + player_t *source = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); + player_t *victim = *((player_t **)luaL_checkudata(L, 2, META_PLAYER)); + UINT8 amount = (UINT8)luaL_checkinteger(L, 3); + NOHUD + if (!source) + return LUA_ErrInvalid(L, "player_t"); + if (!victim) + return LUA_ErrInvalid(L, "player_t"); + K_SpawnBattlePoints(source, victim, amount); + return 0; +} + static int lib_kSpinPlayer(lua_State *L) { player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); @@ -2500,6 +2514,7 @@ static luaL_Reg lib[] = { {"K_KartBouncing",lib_kKartBouncing}, {"K_MatchGenericExtraFlags",lib_kMatchGenericExtraFlags}, {"K_DoInstashield",lib_kDoInstashield}, + {"K_SpawnBattlePoints",lib_kSpawnBattlePoints}, {"K_SpinPlayer",lib_kSpinPlayer}, {"K_SquishPlayer",lib_kSquishPlayer}, {"K_ExplodePlayer",lib_kExplodePlayer}, diff --git a/src/p_mobj.c b/src/p_mobj.c index f4fd40c9f..78c7fe5c6 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8323,6 +8323,28 @@ void P_MobjThinker(mobj_t *mobj) } P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z); break; + case MT_BATTLEPOINT: + if (!mobj->target || P_MobjWasRemoved(mobj->target)) + { + P_RemoveMobj(mobj); + return; + } + + if (mobj->movefactor < 48*mobj->target->scale) + { + mobj->movefactor += (48*mobj->target->scale)/6; + if (mobj->movefactor > mobj->target->height) + mobj->movefactor = mobj->target->height; + } + else if (mobj->movefactor > 48*mobj->target->scale) + { + mobj->movefactor -= (48*mobj->target->scale)/6; + if (mobj->movefactor < mobj->target->height) + mobj->movefactor = mobj->target->height; + } + + P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z + (mobj->target->height/2) + mobj->movefactor); + break; case MT_THUNDERSHIELD: { fixed_t destx, desty; From a4ad09c470c82ba1b9f17a23458ec361054d01ea Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 1 Nov 2018 13:44:09 -0400 Subject: [PATCH 59/80] First frame lasts longer --- src/info.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/info.c b/src/info.c index 928e2cb1b..5aa5dcc2e 100644 --- a/src/info.c +++ b/src/info.c @@ -3046,7 +3046,7 @@ state_t states[NUMSTATES] = {SPR_PBOM, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KARMAWHEEL - {SPR_HIT1, 0, 1, {NULL}, 0, 0, S_BATTLEPOINT1B}, // S_BATTLEPOINT1A + {SPR_HIT1, 0, 7, {NULL}, 0, 0, S_BATTLEPOINT1B}, // S_BATTLEPOINT1A {SPR_HIT1, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT1C}, // S_BATTLEPOINT1B {SPR_HIT1, 4, 1, {NULL}, 0, 0, S_BATTLEPOINT1D}, // S_BATTLEPOINT1C {SPR_HIT1, 3, 1, {NULL}, 0, 0, S_BATTLEPOINT1E}, // S_BATTLEPOINT1D @@ -3056,7 +3056,7 @@ state_t states[NUMSTATES] = {SPR_HIT1, 5, 1, {NULL}, 0, 0, S_BATTLEPOINT1I}, // S_BATTLEPOINT1H {SPR_HIT1, 6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT1I - {SPR_HIT2, 0, 1, {NULL}, 0, 0, S_BATTLEPOINT2B}, // S_BATTLEPOINT2A + {SPR_HIT2, 0, 7, {NULL}, 0, 0, S_BATTLEPOINT2B}, // S_BATTLEPOINT2A {SPR_HIT2, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT2C}, // S_BATTLEPOINT2B {SPR_HIT2, 4, 1, {NULL}, 0, 0, S_BATTLEPOINT2D}, // S_BATTLEPOINT2C {SPR_HIT2, 3, 1, {NULL}, 0, 0, S_BATTLEPOINT2E}, // S_BATTLEPOINT2D @@ -3066,7 +3066,7 @@ state_t states[NUMSTATES] = {SPR_HIT2, 5, 1, {NULL}, 0, 0, S_BATTLEPOINT2I}, // S_BATTLEPOINT2H {SPR_HIT2, 6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT2I - {SPR_HIT3, 0, 1, {NULL}, 0, 0, S_BATTLEPOINT3B}, // S_BATTLEPOINT3A + {SPR_HIT3, 0, 7, {NULL}, 0, 0, S_BATTLEPOINT3B}, // S_BATTLEPOINT3A {SPR_HIT3, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT3C}, // S_BATTLEPOINT3B {SPR_HIT3, 4, 1, {NULL}, 0, 0, S_BATTLEPOINT3D}, // S_BATTLEPOINT3C {SPR_HIT3, 3, 1, {NULL}, 0, 0, S_BATTLEPOINT3E}, // S_BATTLEPOINT3D From 0c0a53b2d623348c47056780be939a5740bbd78f Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 1 Nov 2018 16:15:25 -0400 Subject: [PATCH 60/80] Lap hands touch-up --- src/d_player.h | 1 + src/dehacked.c | 1 + src/k_kart.c | 27 ++++++++------------------- src/p_spec.c | 37 ++++++++++++++++++++++++++++--------- 4 files changed, 38 insertions(+), 28 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 866589dfb..f06a7313a 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -280,6 +280,7 @@ typedef enum k_throwdir, // Held dir of controls; 1 = forward, 0 = none, -1 = backward (was "player->heldDir") k_lapanimation, // Used to show the lap start wing logo animation + k_laphand, // Lap hand gfx to use; 0 = none, 1 = :ok_hand:, 2 = :thumbs_up:, 3 = :thumps_down: k_cardanimation, // Used to determine the position of some full-screen Battle Mode graphics k_voices, // Used to stop the player saying more voices than it should k_tauntvoices, // Used to specifically stop taunt voice spam diff --git a/src/dehacked.c b/src/dehacked.c index 77663ccda..3545e0558 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -7867,6 +7867,7 @@ static const char *const KARTSTUFF_LIST[] = { "THROWDIR", "LAPANIMATION", + "LAPHAND", "CARDANIMATION", "VOICES", "TAUNTVOICES", diff --git a/src/k_kart.c b/src/k_kart.c index 78b92a9fe..9af07ec8c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5577,9 +5577,7 @@ static patch_t *kp_lapanim_lap[7]; static patch_t *kp_lapanim_final[11]; static patch_t *kp_lapanim_number[10][3]; static patch_t *kp_lapanim_emblem; -#if 0 static patch_t *kp_lapanim_hand[3]; -#endif void K_LoadKartHUDGraphics(void) { @@ -5800,14 +5798,12 @@ void K_LoadKartHUDGraphics(void) kp_lapanim_emblem = (patch_t *) W_CachePatchName("K_LAPE00", PU_HUDGFX); -#if 0 sprintf(buffer, "K_LAPH0x"); for (i = 0; i < 3; i++) { buffer[7] = '0'+(i+1); kp_lapanim_hand[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX); } -#endif } // For the item toggle menu @@ -7389,27 +7385,20 @@ static void K_drawLapStartAnim(void) // This is an EVEN MORE insanely complicated animation. const UINT8 progress = 80-stplyr->kartstuff[k_lapanimation]; UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, stplyr->skincolor, 0); -#if 0 - UINT8 h = 1; - - if (stplyr->kartstuff[k_position] == 1) - h = 0; - else if (K_IsPlayerLosing(stplyr)) - h = 2; -#endif V_DrawFixedPatch((BASEVIDWIDTH/2 + (32*max(0, stplyr->kartstuff[k_lapanimation]-76)))*FRACUNIT, (48 - (32*max(0, progress-76)))*FRACUNIT, FRACUNIT, V_HUDTRANS, kp_lapanim_emblem, colormap); -#if 0 - V_DrawFixedPatch((BASEVIDWIDTH/2 + (32*max(0, stplyr->kartstuff[k_lapanimation]-76)))*FRACUNIT, - (48 - (32*max(0, progress-76)) - + 4 - abs((leveltime % 8) - 4))*FRACUNIT, - FRACUNIT, V_HUDTRANS, - kp_lapanim_hand[h], NULL); -#endif + if (stplyr->kartstuff[k_laphand] >= 1 && stplyr->kartstuff[k_laphand] <= 3) + { + V_DrawFixedPatch((BASEVIDWIDTH/2 + (32*max(0, stplyr->kartstuff[k_lapanimation]-76)))*FRACUNIT, + (48 - (32*max(0, progress-76)) + + 4 - abs((leveltime % 8) - 4))*FRACUNIT, + FRACUNIT, V_HUDTRANS, + kp_lapanim_hand[stplyr->kartstuff[k_laphand]-1], NULL); + } if (stplyr->laps == (UINT8)(cv_numlaps.value - 1)) { diff --git a/src/p_spec.c b/src/p_spec.c index 76ed73aa8..9f18fdc7d 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -4196,7 +4196,34 @@ DoneSection2: { if (player->starpostcount >= numstarposts/2) // srb2kart: must have touched *enough* starposts (was originally "(player->starpostnum == numstarposts)") { + UINT8 i; + UINT8 nump = 0; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i] || players[i].spectator) + continue; + nump++; + } + player->laps++; + + // Set up lap animation vars + if (nump > 1) + { + if (K_IsPlayerLosing(player)) + player->kartstuff[k_laphand] = 3; + else + { + if (nump > 2 && player->kartstuff[k_position] == 1) // 1st place in 1v1 uses thumbs up + player->kartstuff[k_laphand] = 1; + else + player->kartstuff[k_laphand] = 2; + } + } + else + player->kartstuff[k_laphand] = 0; // No hands in FREE PLAY + player->kartstuff[k_lapanimation] = 80; if (player->pflags & PF_NIGHTSMODE) @@ -4237,15 +4264,7 @@ DoneSection2: // Figure out how many are playing on the last lap, to prevent spectate griefing if (!nospectategrief && player->laps >= (UINT8)(cv_numlaps.value - 1)) - { - UINT8 i; - for (i = 0; i < MAXPLAYERS; i++) - { - if (!playeringame[i] || players[i].spectator) - continue; - nospectategrief++; - } - } + nospectategrief = nump; } else if (player->starpostnum) { From 5cebc06db641fee7accfb33c92fbdc7240d9462c Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 1 Nov 2018 17:06:10 -0400 Subject: [PATCH 61/80] Properly center this --- 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 68478db29..cef28029d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7689,7 +7689,7 @@ void K_drawKartHUD(void) } if (G_BattleGametype() && !splitscreen && (stplyr->kartstuff[k_yougotem] % 2)) // * YOU GOT EM * - V_DrawScaledPatch(BASEVIDWIDTH/2 - SHORT(kp_yougotem->width), 32, V_HUDTRANS, kp_yougotem); + V_DrawScaledPatch(BASEVIDWIDTH/2 - (SHORT(kp_yougotem->width)/2), 32, V_HUDTRANS, kp_yougotem); // Draw FREE PLAY. if (isfreeplay && !stplyr->spectator && timeinmap > 113) From b26ef23b5294b6aa948ef36ed0f9e3f2c77f5672 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 1 Nov 2018 17:08:30 -0400 Subject: [PATCH 62/80] Double length of msg --- src/p_inter.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_inter.c b/src/p_inter.c index 8b49494b2..73eb9f98a 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -524,7 +524,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) special->target->player->kartstuff[k_comebackpoints] += ptadd; if (ptadd > 1) - special->target->player->kartstuff[k_yougotem] = TICRATE; + special->target->player->kartstuff[k_yougotem] = 2*TICRATE; if (special->target->player->kartstuff[k_comebackpoints] >= 2) K_StealBumper(special->target->player, player, true); @@ -576,7 +576,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) special->target->player->kartstuff[k_comebackpoints] += ptadd; if (ptadd > 1) - special->target->player->kartstuff[k_yougotem] = TICRATE; + special->target->player->kartstuff[k_yougotem] = 2*TICRATE; if (special->target->player->kartstuff[k_comebackpoints] >= 2) K_StealBumper(special->target->player, player, true); From 3c050b44f304925dcc263825d6bbae18cf8edd4b Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 1 Nov 2018 17:37:59 -0400 Subject: [PATCH 63/80] Change default brake color from Yellow to White --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index f6548e940..12e61dff1 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8331,7 +8331,7 @@ void P_MobjThinker(mobj_t *mobj) else if (mobj->target->player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(mobj->target->player)) mobj->color = SKINCOLOR_SAPPHIRE; else - mobj->color = SKINCOLOR_YELLOW; + mobj->color = SKINCOLOR_WHITE; K_MatchGenericExtraFlags(mobj, mobj->target); if (leveltime & 1) From 28e40b7e971e662381445926b4fb4b6345648a0e Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 1 Nov 2018 19:50:31 -0400 Subject: [PATCH 64/80] Fix random crash on squishing Why does this cause a crash? I dunno, beats me, but this seemed to fix it. --- src/p_map.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index 2bcfd73a7..5784b3ff3 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1411,19 +1411,17 @@ static boolean PIT_CheckThing(mobj_t *thing) // Make sure they aren't able to damage you ANYWHERE along the Z axis, you have to be TOUCHING the person. && !(thing->z + thing->height < tmthing->z || thing->z > tmthing->z + tmthing->height)) { - // SRB2kart - Squish! - if (tmthing->scale > thing->scale + (FRACUNIT/8)) + + if (tmthing->scale > thing->scale + (FRACUNIT/8)) // SRB2kart - Handle squishes first! K_SquishPlayer(thing->player, tmthing); else if (thing->scale > tmthing->scale + (FRACUNIT/8)) K_SquishPlayer(tmthing->player, thing); - - // SRB2kart - Invincibility! - if (tmthing->player->kartstuff[k_invincibilitytimer] && !thing->player->kartstuff[k_invincibilitytimer]) + else if (tmthing->player->kartstuff[k_invincibilitytimer] && !thing->player->kartstuff[k_invincibilitytimer]) // SRB2kart - Then invincibility! P_DamageMobj(thing, tmthing, tmthing, 1); else if (thing->player->kartstuff[k_invincibilitytimer] && !tmthing->player->kartstuff[k_invincibilitytimer]) P_DamageMobj(tmthing, thing, thing, 1); - if (G_BattleGametype() && (!G_GametypeHasTeams() || tmthing->player->ctfteam != thing->player->ctfteam)) + /*if (G_BattleGametype() && (!G_GametypeHasTeams() || tmthing->player->ctfteam != thing->player->ctfteam)) { if ((tmthing->player->powers[pw_invulnerability] || tmthing->player->powers[pw_super]) && !thing->player->powers[pw_super]) @@ -1441,7 +1439,7 @@ static boolean PIT_CheckThing(mobj_t *thing) P_DamageMobj(thing, tmthing, tmthing, 1); else if ((thing->player->pflags & PF_TAGIT) && !(tmthing->player->pflags & PF_TAGIT)) P_DamageMobj(tmthing, thing, tmthing, 1); - } + }*/ } // Force solid players in hide and seek to avoid corner stacking. From fbc4c3464de1dfa669eb4b37ff86ddfd398f5339 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 1 Nov 2018 20:46:20 -0400 Subject: [PATCH 65/80] Change out the hex used for hnext/hprev consistancy --- src/d_clisrv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index e07b9021b..3b66d7603 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -4449,7 +4449,7 @@ static INT16 Consistancy(void) ret += mo->hnext->frame; } else - ret ^= 0x3333; + ret ^= 0x5555; if (mo->hprev) { ret += mo->hprev->type; @@ -4469,7 +4469,7 @@ static INT16 Consistancy(void) ret += mo->hprev->frame; } else - ret ^= 0xAAAA; + ret ^= 0xCCCC; ret -= mo->state - states; ret += mo->tics; ret -= mo->sprite; From 71db7214e465ca68719b7481cd41a923cc54ad41 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 1 Nov 2018 20:50:19 -0400 Subject: [PATCH 66/80] 0xFFFF to 0xFFFFFFFF I'll implement proper bit-setting later, just gotta see if it works first --- src/d_clisrv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 3b66d7603..2fb2c8267 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -1001,7 +1001,7 @@ static void SV_RequireResynch(INT32 node) resynch_delay[node] = 10; // Delay before you can fail sync again resynch_score[node] += 200; // Add score for initial desynch - resynch_status[node] = 0xFFFFFFFF; // No players assumed synched + resynch_status[node] = 0xFFFF; // No players assumed synched resynch_inprogress[node] = true; // so we know to send a PT_RESYNCHEND after sync // Initial setup From 75af6af57cbad51b43d89680355d99720ed92253 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Thu, 1 Nov 2018 21:05:52 -0400 Subject: [PATCH 67/80] Actually lets just do this now, like how its done below --- src/d_clisrv.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 2fb2c8267..5ceb47cd2 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -1001,7 +1001,8 @@ static void SV_RequireResynch(INT32 node) resynch_delay[node] = 10; // Delay before you can fail sync again resynch_score[node] += 200; // Add score for initial desynch - resynch_status[node] = 0xFFFF; // No players assumed synched + for (i = 0; i < MAXPLAYERS; ++i) + resynch_status[node] |= (1< Date: Fri, 2 Nov 2018 01:19:25 -0400 Subject: [PATCH 68/80] Fix ghost rankings issue --- src/k_kart.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index bf6751e84..0f7d46af4 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6548,7 +6548,11 @@ static boolean K_drawKartPositionFaces(void) ranklines = 5; } else if (strank+3 > ranklines) // too close to the bottom? + { i = ranklines - 5; + if (ranklines < 0) + ranklines = 0; + } else { i = strank-2; From f7ca5685e22c75260c952ca38e99e4425805a3bd Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 2 Nov 2018 01:22:52 -0400 Subject: [PATCH 69/80] Use chars.kart --- src/d_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_main.c b/src/d_main.c index 500f61166..e1bcce8c6 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -954,7 +954,7 @@ static void IdentifyVersion(void) // SRB2kart - Add graphics (temp) // The command for md5 checks is "W_VerifyFileMD5" - looks for ASSET_HASH_SRB2_SRB in config.h.in D_AddFile(va(pandf,srb2waddir,"gfx.kart")); - D_AddFile(va(pandf,srb2waddir,"charscleanup.kart")); + D_AddFile(va(pandf,srb2waddir,"chars.kart")); D_AddFile(va(pandf,srb2waddir,"maps.kart")); //D_AddFile(va(pandf,srb2waddir,"sounds.kart")); MUSICTEST("sounds.kart") From 0148c1209c6cbbf13ec8b0626c44ba1a4e9dd772 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 2 Nov 2018 02:28:34 -0400 Subject: [PATCH 70/80] quick merge fix --- 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 0129701a1..f9eb8bc2c 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -697,7 +697,7 @@ static boolean PIT_CheckThing(mobj_t *thing) } // Push fakes out of other items - if (tmthing->type == MT_FAKEITEM && (thing->type == MT_RANDOMITEM || thing->type == MT_FAKEITEM)) + if (tmthing->type == MT_EGGMANITEM && (thing->type == MT_RANDOMITEM || thing->type == MT_EGGMANITEM)) { // see if it went over / under if (tmthing->z > thing->z + thing->height) @@ -708,7 +708,7 @@ static boolean PIT_CheckThing(mobj_t *thing) P_InstaThrust(tmthing, R_PointToAngle2(thing->x, thing->y, tmthing->x, tmthing->y), thing->radius/4); return true; } - else if (thing->type == MT_FAKEITEM && (tmthing->type == MT_RANDOMITEM || tmthing->type == MT_FAKEITEM)) + else if (thing->type == MT_EGGMANITEM && (tmthing->type == MT_RANDOMITEM || tmthing->type == MT_EGGMANITEM)) { // see if it went over / under if (tmthing->z > thing->z + thing->height) From 53e017f64909b7c678e175ecb9283ca374b203a0 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 2 Nov 2018 14:01:29 -0400 Subject: [PATCH 71/80] wrong var fix --- 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 0f7d46af4..e933a2774 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6550,8 +6550,8 @@ static boolean K_drawKartPositionFaces(void) else if (strank+3 > ranklines) // too close to the bottom? { i = ranklines - 5; - if (ranklines < 0) - ranklines = 0; + if (i < 0) + i = 0; } else { From 03bedd870ec0a5e95cbc072898d36a41cfb49373 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 2 Nov 2018 14:52:08 -0400 Subject: [PATCH 72/80] use gfx.kart --- src/d_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_main.c b/src/d_main.c index b38cdb01a..e1bcce8c6 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -953,7 +953,7 @@ static void IdentifyVersion(void) } // SRB2kart - Add graphics (temp) // The command for md5 checks is "W_VerifyFileMD5" - looks for ASSET_HASH_SRB2_SRB in config.h.in - D_AddFile(va(pandf,srb2waddir,"gfxHC.kart")); // temporary, don't let this line get merged + D_AddFile(va(pandf,srb2waddir,"gfx.kart")); D_AddFile(va(pandf,srb2waddir,"chars.kart")); D_AddFile(va(pandf,srb2waddir,"maps.kart")); //D_AddFile(va(pandf,srb2waddir,"sounds.kart")); From e4a0c3103a92790b292bdb9de85961ed57009717 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 2 Nov 2018 14:59:26 -0400 Subject: [PATCH 73/80] Fix for "became a spectator" text repeating --- src/d_netcmd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index df9fb54ab..6e598801f 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -3317,8 +3317,8 @@ static void Got_Teamchange(UINT8 **cp, INT32 playernum) else CONS_Printf(M_GetText("%s switched to the %c%s%c.\n"), player_names[playernum], '\x84', M_GetText("Blue Team"), '\x80'); } - else - HU_AddChatText(va("\x82*%s became a spectator.", player_names[playernum]), false); + else if (NetPacket.packet.newteam == 0) + HU_AddChatText(va("\x82*%s became a spectator.", player_names[playernum]), false); // "entered the game" text was moved to P_SpectatorJoinGame //reset view if you are changed, or viewing someone who was changed. if (playernum == consoleplayer || displayplayer == playernum) From c4fec80513be892c5e79b64da4cfbe9799b1c495 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 2 Nov 2018 15:06:56 -0400 Subject: [PATCH 74/80] fullbright points --- src/info.c | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/info.c b/src/info.c index 8d77b7967..4028c187e 100644 --- a/src/info.c +++ b/src/info.c @@ -3059,35 +3059,35 @@ state_t states[NUMSTATES] = {SPR_PBOM, 0, -1, {NULL}, 0, 0, S_NULL}, // S_KARMAWHEEL - {SPR_HIT1, 0, 7, {NULL}, 0, 0, S_BATTLEPOINT1B}, // S_BATTLEPOINT1A - {SPR_HIT1, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT1C}, // S_BATTLEPOINT1B - {SPR_HIT1, 4, 1, {NULL}, 0, 0, S_BATTLEPOINT1D}, // S_BATTLEPOINT1C - {SPR_HIT1, 3, 1, {NULL}, 0, 0, S_BATTLEPOINT1E}, // S_BATTLEPOINT1D - {SPR_HIT1, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT1F}, // S_BATTLEPOINT1E - {SPR_HIT1, 1, 1, {NULL}, 0, 0, S_BATTLEPOINT1G}, // S_BATTLEPOINT1F - {SPR_HIT1, 2, TICRATE, {NULL}, 0, 0, S_BATTLEPOINT1H}, // S_BATTLEPOINT1G - {SPR_HIT1, 5, 1, {NULL}, 0, 0, S_BATTLEPOINT1I}, // S_BATTLEPOINT1H - {SPR_HIT1, 6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT1I + {SPR_HIT1, FF_FULLBRIGHT, 7, {NULL}, 0, 0, S_BATTLEPOINT1B}, // S_BATTLEPOINT1A + {SPR_HIT1, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_BATTLEPOINT1C}, // S_BATTLEPOINT1B + {SPR_HIT1, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_BATTLEPOINT1D}, // S_BATTLEPOINT1C + {SPR_HIT1, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_BATTLEPOINT1E}, // S_BATTLEPOINT1D + {SPR_HIT1, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_BATTLEPOINT1F}, // S_BATTLEPOINT1E + {SPR_HIT1, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_BATTLEPOINT1G}, // S_BATTLEPOINT1F + {SPR_HIT1, FF_FULLBRIGHT|2, TICRATE, {NULL}, 0, 0, S_BATTLEPOINT1H}, // S_BATTLEPOINT1G + {SPR_HIT1, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_BATTLEPOINT1I}, // S_BATTLEPOINT1H + {SPR_HIT1, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT1I - {SPR_HIT2, 0, 7, {NULL}, 0, 0, S_BATTLEPOINT2B}, // S_BATTLEPOINT2A - {SPR_HIT2, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT2C}, // S_BATTLEPOINT2B - {SPR_HIT2, 4, 1, {NULL}, 0, 0, S_BATTLEPOINT2D}, // S_BATTLEPOINT2C - {SPR_HIT2, 3, 1, {NULL}, 0, 0, S_BATTLEPOINT2E}, // S_BATTLEPOINT2D - {SPR_HIT2, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT2F}, // S_BATTLEPOINT2E - {SPR_HIT2, 1, 1, {NULL}, 0, 0, S_BATTLEPOINT2G}, // S_BATTLEPOINT2F - {SPR_HIT2, 2, TICRATE, {NULL}, 0, 0, S_BATTLEPOINT2H}, // S_BATTLEPOINT2G - {SPR_HIT2, 5, 1, {NULL}, 0, 0, S_BATTLEPOINT2I}, // S_BATTLEPOINT2H - {SPR_HIT2, 6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT2I + {SPR_HIT2, FF_FULLBRIGHT, 7, {NULL}, 0, 0, S_BATTLEPOINT2B}, // S_BATTLEPOINT2A + {SPR_HIT2, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_BATTLEPOINT2C}, // S_BATTLEPOINT2B + {SPR_HIT2, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_BATTLEPOINT2D}, // S_BATTLEPOINT2C + {SPR_HIT2, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_BATTLEPOINT2E}, // S_BATTLEPOINT2D + {SPR_HIT2, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_BATTLEPOINT2F}, // S_BATTLEPOINT2E + {SPR_HIT2, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_BATTLEPOINT2G}, // S_BATTLEPOINT2F + {SPR_HIT2, FF_FULLBRIGHT|2, TICRATE, {NULL}, 0, 0, S_BATTLEPOINT2H}, // S_BATTLEPOINT2G + {SPR_HIT2, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_BATTLEPOINT2I}, // S_BATTLEPOINT2H + {SPR_HIT2, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT2I - {SPR_HIT3, 0, 7, {NULL}, 0, 0, S_BATTLEPOINT3B}, // S_BATTLEPOINT3A - {SPR_HIT3, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT3C}, // S_BATTLEPOINT3B - {SPR_HIT3, 4, 1, {NULL}, 0, 0, S_BATTLEPOINT3D}, // S_BATTLEPOINT3C - {SPR_HIT3, 3, 1, {NULL}, 0, 0, S_BATTLEPOINT3E}, // S_BATTLEPOINT3D - {SPR_HIT3, 2, 1, {NULL}, 0, 0, S_BATTLEPOINT3F}, // S_BATTLEPOINT3E - {SPR_HIT3, 1, 1, {NULL}, 0, 0, S_BATTLEPOINT3G}, // S_BATTLEPOINT3F - {SPR_HIT3, 2, TICRATE, {NULL}, 0, 0, S_BATTLEPOINT3H}, // S_BATTLEPOINT3G - {SPR_HIT3, 5, 1, {NULL}, 0, 0, S_BATTLEPOINT3I}, // S_BATTLEPOINT3H - {SPR_HIT3, 6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT3I + {SPR_HIT3, FF_FULLBRIGHT, 7, {NULL}, 0, 0, S_BATTLEPOINT3B}, // S_BATTLEPOINT3A + {SPR_HIT3, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_BATTLEPOINT3C}, // S_BATTLEPOINT3B + {SPR_HIT3, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_BATTLEPOINT3D}, // S_BATTLEPOINT3C + {SPR_HIT3, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_BATTLEPOINT3E}, // S_BATTLEPOINT3D + {SPR_HIT3, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_BATTLEPOINT3F}, // S_BATTLEPOINT3E + {SPR_HIT3, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_BATTLEPOINT3G}, // S_BATTLEPOINT3F + {SPR_HIT3, FF_FULLBRIGHT|2, TICRATE, {NULL}, 0, 0, S_BATTLEPOINT3H}, // S_BATTLEPOINT3G + {SPR_HIT3, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_BATTLEPOINT3I}, // S_BATTLEPOINT3H + {SPR_HIT3, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_NULL}, // S_BATTLEPOINT3I // Oh no it's annoying lightning states....... // Lightning Sparks (it's the ones we'll use for the radius) From 9c2767649b6751d5aec2df00d55dcfb3a6ce3d22 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Fri, 2 Nov 2018 23:51:06 -0400 Subject: [PATCH 75/80] Check for valid source in A_JawzChase, change 1 target rule --- src/p_enemy.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/p_enemy.c b/src/p_enemy.c index c4d1fe415..ea10b62be 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8261,6 +8261,9 @@ void A_JawzChase(mobj_t *actor) if (actor->tracer) { + if (G_RaceGametype()) // Stop looking after first target in race + actor->extravalue1 = 1; + if (actor->tracer->health) { mobj_t *ret; @@ -8280,13 +8283,13 @@ void A_JawzChase(mobj_t *actor) if (actor->extravalue1) // Disable looking by setting this return; + if (actor->target && !P_MobjWasRemoved(actor->target)) // No source! + return; + player = K_FindJawzTarget(actor, actor->target->player); if (player) P_SetTarget(&actor->tracer, player->mo); - if (G_RaceGametype()) // Stop looking after first tic in race - actor->extravalue1 = 1; - return; } From 87f767fad09f078c425f047c1c8c8eb248b28e37 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sat, 3 Nov 2018 03:17:20 -0400 Subject: [PATCH 76/80] Add textures.kart, re-define DEVELOP mode, Disabling DEVELOP can be another branch; this means this can get in master quicker --- assets/CMakeLists.txt | 2 ++ src/config.h.in | 38 ++++++++++++++++++++------------------ src/d_main.c | 3 +++ src/doomdef.h | 3 +-- 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt index dae68cf75..1962685ec 100644 --- a/assets/CMakeLists.txt +++ b/assets/CMakeLists.txt @@ -5,6 +5,7 @@ set(SRB2_ASSET_ALL ${CMAKE_CURRENT_SOURCE_DIR}/srb2.srb ${CMAKE_CURRENT_SOURCE_DIR}/patch.dta ${CMAKE_CURRENT_SOURCE_DIR}/gfx.kart + ${CMAKE_CURRENT_SOURCE_DIR}/textures.kart ${CMAKE_CURRENT_SOURCE_DIR}/chars.kart ${CMAKE_CURRENT_SOURCE_DIR}/maps.kart ${CMAKE_CURRENT_SOURCE_DIR}/sounds.kart @@ -16,6 +17,7 @@ set(SRB2_ASSET_HASHED srb2.srb patch.dta gfx.kart + textures.kart chars.kart maps.kart ) diff --git a/src/config.h.in b/src/config.h.in index 68c29782d..e72970f33 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -12,45 +12,47 @@ #ifdef CMAKECONFIG // Base SRB2 hashes -#define ASSET_HASH_SRB2_SRB "${SRB2_ASSET_srb2.srb_HASH}" +#define ASSET_HASH_SRB2_SRB "${SRB2_ASSET_srb2.srb_HASH}" #ifdef USE_PATCH_DTA -#define ASSET_HASH_PATCH_DTA "${SRB2_ASSET_patch.dta_HASH}" +#define ASSET_HASH_PATCH_DTA "${SRB2_ASSET_patch.dta_HASH}" #endif // SRB2Kart-specific hashes -#define ASSET_HASH_GFX_KART "${SRB2_ASSET_gfx.kart_HASH}" -#define ASSET_HASH_CHARS_KART "${SRB2_ASSET_chars.kart_HASH}" -#define ASSET_HASH_MAPS_KART "${SRB2_ASSET_maps.kart_HASH}" +#define ASSET_HASH_GFX_KART "${SRB2_ASSET_gfx.kart_HASH}" +#define ASSET_HASH_TEXTURES_KART "${SRB2_ASSET_textures.kart_HASH}" +#define ASSET_HASH_CHARS_KART "${SRB2_ASSET_chars.kart_HASH}" +#define ASSET_HASH_MAPS_KART "${SRB2_ASSET_maps.kart_HASH}" #ifdef USE_PATCH_KART -#define ASSET_HASH_PATCH_KART "${SRB2_ASSET_patch.kart_HASH}" +#define ASSET_HASH_PATCH_KART "${SRB2_ASSET_patch.kart_HASH}" #endif -#define SRB2_COMP_REVISION "${SRB2_COMP_REVISION}" -#define SRB2_COMP_BRANCH "${SRB2_COMP_BRANCH}" -#define SRB2_GIT_DESCRIBE "${SRB2_GIT_DESCRIBE}" -#define SRB2_GIT_BRANCH "${SRB2_GIT_BRANCH}" +#define SRB2_COMP_REVISION "${SRB2_COMP_REVISION}" +#define SRB2_COMP_BRANCH "${SRB2_COMP_BRANCH}" +#define SRB2_GIT_DESCRIBE "${SRB2_GIT_DESCRIBE}" +#define SRB2_GIT_BRANCH "${SRB2_GIT_BRANCH}" -#define CMAKE_ASSETS_DIR "${CMAKE_SOURCE_DIR}/assets" +#define CMAKE_ASSETS_DIR "${CMAKE_SOURCE_DIR}/assets" #else -/* Manually defined asset hashes for non-CMake builds - Still used in SRB2kart. +/* Manually defined asset hashes for non-CMake builds * YYYY MM DD * Last updated 2017 / 02 / 20 */ // Base SRB2 hashes -#define ASSET_HASH_SRB2_SRB "c1b9577687f8a795104aef4600720ea7" +#define ASSET_HASH_SRB2_SRB "c1b9577687f8a795104aef4600720ea7" #ifdef USE_PATCH_DTA -#define ASSET_HASH_PATCH_DTA "dbbf8bc6121618ee3be2d5b14650429b" +#define ASSET_HASH_PATCH_DTA "dbbf8bc6121618ee3be2d5b14650429b" #endif // SRB2Kart-specific hashes -#define ASSET_HASH_GFX_KART "00000000000000000000000000000000" -#define ASSET_HASH_CHARS_KART "00000000000000000000000000000000" -#define ASSET_HASH_MAPS_KART "00000000000000000000000000000000" +#define ASSET_HASH_GFX_KART "00000000000000000000000000000000" +#define ASSET_HASH_TEXTURES_KART "00000000000000000000000000000000" +#define ASSET_HASH_CHARS_KART "00000000000000000000000000000000" +#define ASSET_HASH_MAPS_KART "00000000000000000000000000000000" #ifdef USE_PATCH_KART -#define ASSET_HASH_PATCH_KART "00000000000000000000000000000000" +#define ASSET_HASH_PATCH_KART "00000000000000000000000000000000" #endif #endif diff --git a/src/d_main.c b/src/d_main.c index 3eedb607e..b3c5fb80d 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -954,6 +954,7 @@ static void IdentifyVersion(void) // SRB2kart - Add graphics (temp) // The command for md5 checks is "W_VerifyFileMD5" - looks for ASSET_HASH_SRB2_SRB in config.h.in D_AddFile(va(pandf,srb2waddir,"gfx.kart")); + D_AddFile(va(pandf,srb2waddir,"textures.kart")); D_AddFile(va(pandf,srb2waddir,"chars.kart")); D_AddFile(va(pandf,srb2waddir,"maps.kart")); //D_AddFile(va(pandf,srb2waddir,"sounds.kart")); @@ -1234,6 +1235,7 @@ void D_SRB2Main(void) mainwads++; W_VerifyFileMD5(mainwads, ASSET_HASH_PATCH_DTA); // patch.dta #endif mainwads++; W_VerifyFileMD5(mainwads, ASSET_HASH_GFX_KART); // gfx.kart + mainwads++; W_VerifyFileMD5(mainwads, ASSET_HASH_TEXTURES_KART); // textures.kart mainwads++; W_VerifyFileMD5(mainwads, ASSET_HASH_CHARS_KART); // chars.kart mainwads++; W_VerifyFileMD5(mainwads, ASSET_HASH_MAPS_KART); // maps.kart mainwads++; //W_VerifyFileMD5(5, ASSET_HASH_SOUNDS_KART); -- sounds.kart - doesn't trigger modifiedgame, doesn't need an MD5...? @@ -1249,6 +1251,7 @@ void D_SRB2Main(void) mainwads++; // patch.dta #endif mainwads++; // gfx.kart + mainwads++; // textures.kart mainwads++; // chars.kart mainwads++; // maps.kart mainwads++; // sounds.kart diff --git a/src/doomdef.h b/src/doomdef.h index 89cab4e50..9921f1c29 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -140,7 +140,7 @@ extern FILE *logstream; #endif -//#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3 +#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 0 // Game version #define SUBVERSION 0 // more precise version number @@ -546,7 +546,6 @@ extern const char *compdate, *comptime, *comprevision, *compbranch; #define SECTORSPECIALSAFTERTHINK /// SRB2Kart: Camera always has noclip. -/// \note Kind of problematic. If we decide to keep this on, we'll need serious map changes. #define NOCLIPCAM #endif // __DOOMDEF__ From 4781f34190c4ddbef0e3e5e47dc058a92f9669eb Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sat, 3 Nov 2018 03:21:08 -0400 Subject: [PATCH 77/80] Remove NOFOURPLAYER from Makefile Seems that someone already removed it from the other code anyway...? --- src/Makefile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Makefile b/src/Makefile index 85ecb49aa..c37e9827c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -389,11 +389,6 @@ ifdef NOPOSTPROCESSING OPTS+=-DNOPOSTPROCESSING endif -# srb2kart, remove before release -ifdef NOFOURPLAYER - OPTS+=-DNOFOURPLAYER -endif - OPTS:=-fno-exceptions $(OPTS) ifdef MOBJCONSISTANCY From bb4dfed0724af50a18a738200118db50bfe4f3b6 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sat, 3 Nov 2018 03:29:06 -0400 Subject: [PATCH 78/80] Changed this randomly changed instance back to vanilla, due to compile errors https://i.imgur.com/SEdmZpC.png --- src/m_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 9c6635e10..5ac72fbc1 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2804,8 +2804,8 @@ void M_Drawer(void) else { #ifdef DEVELOP // Development -- show revision / branch info - V_DrawThinString(vid.dupx, vid.height - 20*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, "KART DEV EXE"); - V_DrawThinString(vid.dupx, vid.height - 10*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, va("%s", VERSIONSTRINGW)); + V_DrawThinString(vid.dupx, vid.height - 17*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, compbranch); + V_DrawThinString(vid.dupx, vid.height - 9*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, comprevision); #else // Regular build V_DrawThinString(vid.dupx, vid.height - 10*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, va("%s", VERSIONSTRING)); #endif From c22b3b3d76e1c4c6883139e11117f67c57f9e78f Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sat, 3 Nov 2018 03:38:41 -0400 Subject: [PATCH 79/80] Keep the old y offsets, though. --- src/m_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 5ac72fbc1..5dc09a83d 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2804,8 +2804,8 @@ void M_Drawer(void) else { #ifdef DEVELOP // Development -- show revision / branch info - V_DrawThinString(vid.dupx, vid.height - 17*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, compbranch); - V_DrawThinString(vid.dupx, vid.height - 9*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, comprevision); + V_DrawThinString(vid.dupx, vid.height - 20*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, compbranch); + V_DrawThinString(vid.dupx, vid.height - 10*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, comprevision); #else // Regular build V_DrawThinString(vid.dupx, vid.height - 10*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, va("%s", VERSIONSTRING)); #endif From 6de4c77fe603027310dfa396fe0b2804b9615ebd Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 3 Nov 2018 13:20:02 +0000 Subject: [PATCH 80/80] Fix 2p ("wide") splitscreen having an incorrect FINISH arrangement (drawn at wrong scale, moved across screen at wrong speed...) --- src/k_kart.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index af0021da1..39ef34c04 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7140,25 +7140,30 @@ static void K_drawKartFinish(void) if ((stplyr->kartstuff[k_cardanimation] % (2*5)) / 5) // blink pnum = 1; - if (splitscreen > 1) // small splitscreen - pnum += 2; - else if (splitscreen == 1) // wide splitscreen - pnum += 4; - - if (splitscreen > 1) // Stationary FIN - V_DrawScaledPatch(STCD_X - (SHORT(kp_racefinish[pnum]->width)/2), STCD_Y - (SHORT(kp_racefinish[pnum]->height)/2), splitflags, kp_racefinish[pnum]); - else // Scrolling FINISH + if (splitscreen > 1) // 3/4p, stationary FIN { - INT32 scaleshift = (FRACBITS - splitscreen); // FRACUNIT or FRACUNIT/2 - INT32 x = ((vid.width<width)<width)/2), STCD_Y - (SHORT(kp_racefinish[pnum]->height)/2), splitflags, kp_racefinish[pnum]); + return; + } + + //else -- 1/2p, scrolling FINISH + { + INT32 x, xval; + + if (splitscreen) // wide splitscreen + pnum += 4; + + x = ((vid.width<width)<kartstuff[k_cardanimation])*(xval > x ? xval : x))/TICRATE; if (splitscreen && stplyr == &players[secondarydisplayplayer]) x = -x; - V_DrawFixedPatch(x + (STCD_X<width)<<(scaleshift-1)), - (STCD_Y<height)<<(scaleshift-1)), - (1<>1), + (STCD_Y<height)<<(FRACBITS-1)), + FRACUNIT, splitflags, kp_racefinish[pnum], NULL); } }