From cbff4bbf441c577ced7827aeeff92e6fdcce28ac Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 5 Feb 2018 18:55:52 -0500 Subject: [PATCH 01/14] So much - Renamed fucking everything - Threw out all of the item code because it looks at me funny --- src/d_netcmd.c | 57 +- src/d_netcmd.h | 17 +- src/d_player.h | 96 +- src/dehacked.c | 142 +- src/doomstat.h | 6 +- src/g_game.c | 8 +- src/hardware/hw_light.c | 43 +- src/hardware/hw_main.c | 4 +- src/info.c | 362 +---- src/info.h | 119 +- src/k_kart.c | 2779 ++++++++++++++------------------------- src/k_kart.h | 4 +- src/lua_baselib.c | 6 +- src/m_menu.c | 38 +- src/p_enemy.c | 37 +- src/p_floor.c | 2 +- src/p_inter.c | 78 +- src/p_map.c | 69 +- src/p_mobj.c | 104 +- src/p_spec.c | 10 +- src/p_user.c | 27 +- src/r_draw.c | 4 +- src/r_draw.h | 2 +- src/r_things.c | 8 +- 24 files changed, 1438 insertions(+), 2584 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 2388d8fc..f8997bf9 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -216,7 +216,7 @@ static CV_PossibleValue_t competitionboxes_cons_t[] = {{0, "Normal"}, {1, "Rando static CV_PossibleValue_t matchboxes_cons_t[] = {{0, "Normal"}, {1, "Random"}, {2, "Non-Random"}, {3, "None"}, {0, NULL}}; -static CV_PossibleValue_t chances_cons_t[] = {{0, "MIN"}, {9, "MAX"}, {0, NULL}}; +//static CV_PossibleValue_t chances_cons_t[] = {{0, "MIN"}, {9, "MAX"}, {0, NULL}}; static CV_PossibleValue_t match_scoring_cons_t[] = {{0, "Normal"}, {1, "Classic"}, {0, NULL}}; static CV_PossibleValue_t pause_cons_t[] = {{0, "Server"}, {1, "All"}, {0, NULL}}; @@ -311,7 +311,7 @@ consvar_t cv_matchboxes = {"matchboxes", "Normal", CV_NETVAR|CV_CHEAT, matchboxe consvar_t cv_specialrings = {"specialrings", "On", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_powerstones = {"powerstones", "On", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_recycler = {"tv_recycler", "5", CV_NETVAR|CV_CHEAT, chances_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +/*consvar_t cv_recycler = {"tv_recycler", "5", CV_NETVAR|CV_CHEAT, chances_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_teleporters = {"tv_teleporter", "5", CV_NETVAR|CV_CHEAT, chances_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_superring = {"tv_superring", "5", CV_NETVAR|CV_CHEAT, chances_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_supersneakers = {"tv_supersneaker", "5", CV_NETVAR|CV_CHEAT, chances_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -322,30 +322,30 @@ consvar_t cv_ringshield = {"tv_ringshield", "5", CV_NETVAR|CV_CHEAT, chanc consvar_t cv_forceshield = {"tv_forceshield", "5", CV_NETVAR|CV_CHEAT, chances_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_bombshield = {"tv_bombshield", "5", CV_NETVAR|CV_CHEAT, chances_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_1up = {"tv_1up", "5", CV_NETVAR|CV_CHEAT, chances_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_eggmanbox = {"tv_eggman", "5", CV_NETVAR|CV_CHEAT, chances_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_eggmanbox = {"tv_eggman", "5", CV_NETVAR|CV_CHEAT, chances_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};*/ // SRB2kart -consvar_t cv_magnet = {"magnets", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_boo = {"boos", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_mushroom = {"mushrooms", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_triplemushroom = {"triplemushrooms", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_megashroom = {"megashrooms", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_goldshroom = {"goldshrooms", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_star = {"stars", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_triplebanana = {"triplebananas", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_fakeitem = {"fakeitems", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_banana = {"bananas", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_greenshell = {"greenshells", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_redshell = {"redshells", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_laserwisp = {"laserwisps", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_triplegreenshell = {"triplegreenshells", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_bobomb = {"bobombs", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_blueshell = {"blueshells", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_jaws = {"jaws", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_fireflower = {"fireflowers", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_tripleredshell = {"tripleredshells", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_lightning = {"lightning", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_feather = {"feathers", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; + +consvar_t cv_sneaker = {"sneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_rocketsneaker = {"rocketsneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_invincibility = {"invincibility", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_banana = {"banana", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_fakeitem = {"fakeitem", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_orbinaut = {"orbinaut", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_jawz = {"jawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_mine = {"mine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_ballhog = {"ballhog", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_selfpropelledbomb = {"selfpropelledbomb", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_sizeup = {"sizeup", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_sizedown = {"sizedown", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_lightningshield = {"lightningshield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_hyudoro = {"hyudoro", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_pogospring = {"pogospring", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; + +consvar_t cv_triplesneaker = {"triplesneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_triplebanana = {"triplebanana", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_tripleorbinaut = {"tripleorbinaut", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_dualjawz = {"dualjawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_karthud = {"karthud", "Default", CV_SAVE|CV_CALL, karthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartminimap = {"kartminimap", "Yes", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -361,6 +361,11 @@ consvar_t cv_kartmirror = {"kartmirror", "Off", CV_NETVAR|CV_CHEAT|CV_CALL|CV_NO static CV_PossibleValue_t speedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}}; consvar_t cv_speedometer = {"speedometer", "Kilometers", CV_SAVE, speedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display +static CV_PossibleValue_t kartdebugitem_cons_t[] = {{-1, "MIN"}, {NUMKARTITEMS-1, "MAX"}, {0, NULL}}; +consvar_t cv_kartdebugitem = {"kartdebugitem", "0", CV_NETVAR|CV_CHEAT, kartdebugitem_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +static CV_PossibleValue_t kartdebugamount_cons_t[] = {{1, "MIN"}, {255, "MAX"}, {0, NULL}}; +consvar_t cv_kartdebugamount = {"kartdebugamount", "1", CV_NETVAR|CV_CHEAT, kartdebugamount_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; + static CV_PossibleValue_t cv_collideminimum_cons_t[] = {{1, "MIN"}, {16384, "MAX"}, {0, NULL}}; consvar_t cv_collideminimum = {"collide_minspeed", "25", CV_NETVAR, cv_collideminimum_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t cv_collidesoundnum_cons_t[] = {{1, "MIN"}, {1208, "MAX"}, {0, NULL}}; @@ -595,7 +600,7 @@ void D_RegisterServerCommands(void) CV_RegisterVar(&cv_competitionboxes); CV_RegisterVar(&cv_matchboxes); - CV_RegisterVar(&cv_recycler); + /*CV_RegisterVar(&cv_recycler); CV_RegisterVar(&cv_teleporters); CV_RegisterVar(&cv_superring); CV_RegisterVar(&cv_supersneakers); @@ -606,7 +611,7 @@ void D_RegisterServerCommands(void) CV_RegisterVar(&cv_forceshield); CV_RegisterVar(&cv_bombshield); CV_RegisterVar(&cv_1up); - CV_RegisterVar(&cv_eggmanbox); + CV_RegisterVar(&cv_eggmanbox);*/ K_RegisterKartStuff(); // SRB2kart diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 66a1d982..6363fd0d 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -103,17 +103,18 @@ extern consvar_t cv_pause; extern consvar_t cv_restrictskinchange, cv_allowteamchange, cv_respawntime; -extern consvar_t cv_teleporters, cv_superring, cv_supersneakers, cv_invincibility; +/*extern consvar_t cv_teleporters, cv_superring, cv_supersneakers, cv_invincibility; extern consvar_t cv_jumpshield, cv_watershield, cv_ringshield, cv_forceshield, cv_bombshield; extern consvar_t cv_1up, cv_eggmanbox; -extern consvar_t cv_recycler; +extern consvar_t cv_recycler;*/ // SRB2kart items -extern consvar_t cv_magnet, cv_boo, cv_mushroom, cv_triplemushroom, cv_megashroom; -extern consvar_t cv_goldshroom, cv_star, cv_triplebanana, cv_fakeitem, cv_banana; -extern consvar_t cv_greenshell, cv_redshell, cv_laserwisp, cv_triplegreenshell, cv_bobomb; -extern consvar_t cv_blueshell, cv_jaws, cv_fireflower, cv_tripleredshell, cv_lightning; -extern consvar_t cv_feather; +extern consvar_t cv_sneaker, cv_rocketsneaker, cv_invincibility, cv_banana; +extern consvar_t cv_fakeitem, cv_orbinaut, cv_jawz, cv_mine; +extern consvar_t cv_ballhog, cv_selfpropelledbomb, cv_sizeup, cv_sizedown; +extern consvar_t cv_lightningshield, cv_hyudoro, cv_pogospring; + +extern consvar_t cv_triplesneaker, cv_triplebanana, cv_tripleorbinaut, cv_dualjawz; extern consvar_t cv_karthud; extern consvar_t cv_kartminimap; @@ -129,6 +130,8 @@ extern consvar_t cv_speedometer; extern consvar_t cv_collideminimum; extern consvar_t cv_collidesoundnum; extern consvar_t cv_collidesounds; + +extern consvar_t cv_kartdebugitem, cv_kartdebugamount; // extern consvar_t cv_itemfinder; diff --git a/src/d_player.h b/src/d_player.h index accbacc9..c7cb6d2a 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -230,6 +230,38 @@ typedef enum NUMPOWERS } powertype_t; +typedef enum +{ + KITEM_SAD = -1, + KITEM_NONE = 0, + KITEM_SNEAKER, + KITEM_ROCKETSNEAKER, + KITEM_INVINCIBILITY, + KITEM_BANANA, + KITEM_FAKE, + KITEM_ORBINAUT, + KITEM_JAWZ, + KITEM_MINE, + KITEM_BALLHOG, + KITEM_SPB, + KITEM_SIZEUP, + KITEM_SIZEDOWN, + KITEM_LIGHTNINGSHIELD, + KITEM_HYUDORO, + KITEM_POGOSPRING, + KITEM_KITCHENSINK, + + NUMKARTITEMS, + + // Additional roulette numbers, only used for K_KartGetItemResult + KRITEM_TRIPLESNEAKER = NUMKARTITEMS, + KRITEM_TRIPLEBANANA, + KRITEM_TRIPLEORBINAUT, + KRITEM_DUALJAWZ, + + NUMKARTRESULTS +} kartitems_t; + //{ SRB2kart - kartstuff typedef enum { @@ -249,7 +281,7 @@ typedef enum k_sounds, // Used this to stop and then force music restores as it hits zero k_boosting, // Determines if you're currently shroom-boosting - k_floorboost, // Prevents Mushroom sounds for a breif duration when triggered by a floor panel + k_floorboost, // Prevents Sneaker sounds for a breif duration when triggered by a floor panel k_spinout, // Separate confirmation to prevent endless wipeout loops k_spinouttype, // Determines whether to thrust forward or not while spinning out; 0 = move forwards, 1 = stay still @@ -260,54 +292,32 @@ typedef enum k_boostcharge, // Charge-up for boosting at the start of the race, or when Lakitu drops you k_jmp, // In Mario Kart, letting go of the jump button stops the drift k_offroad, // In Super Mario Kart, going offroad has lee-way of about 1 second before you start losing speed + k_pogospring, // Pogo spring effect k_itemroulette, // Used for the roulette when deciding what item to give you (was "pw_kartitem") - k_itemclose, // Used to animate the item window closing (was "pw_psychic") // Some items use timers for their duration or effects - k_magnettimer, // Duration of Magnet's item-break and item box pull - k_bootimer, // Duration of the boo offroad effect itself - k_bootaketimer, // You are stealing an item, this is your timer - k_boostolentimer, // You are being stolen from, this is your timer - k_mushroomtimer, // Duration of the Mushroom Boost itself - k_growshrinktimer, // > 0 = Big, < 0 = small - k_squishedtimer, // Squished frame timer - k_goldshroomtimer, // Gold Mushroom duration timer - k_startimer, // Invincibility timer - k_spinouttimer, // Spin-out from a banana peel or oil slick (was "pw_bananacam") - k_laserwisptimer, // The duration and relative angle of the laser - k_justbumped, // Prevent players from endlessly bumping into each other - k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Star, Megashroom) - k_comebacktimer, // Battle mode, how long before you become a bomb after death + k_attractiontimer, // Duration of Lightning Shield's item-break and item box pull + k_hyudorotimer, // Duration of the Hyudoro offroad effect itself + k_stealingtimer, // You are stealing an item, this is your timer + k_stolentimer, // You are being stolen from, this is your timer + k_sneakertimer, // Duration of the Sneaker Boost itself + k_growshrinktimer, // > 0 = Big, < 0 = small + k_squishedtimer, // Squished frame timer + k_rocketsneakertimer, // Rocket Sneaker duration timer + k_invincibilitytimer, // Invincibility timer + k_fakeitem, // Fake item held, separate from itemtype so it doesn't stop you from getting items + k_spinouttimer, // Spin-out from a banana peel or oil slick (was "pw_bananacam") + k_justbumped, // Prevent players from endlessly bumping into each other + k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Invincibility, Size Up) + k_comebacktimer, // Battle mode, how long before you become a bomb after death + k_sadtimer, // How long you've been sad // Each item needs its own power slot, for the HUD and held use - // *** ADDING A NEW ITEM? ADD IT TO K_DoBooSteal PLEASE!! -Salt *** - k_magnet, // 0x1 = Magnet in inventory - k_boo, // 0x1 = Boo in inventory - k_mushroom, // 0x1 = 1 Mushroom in inventory, 0x2 = 2 Mushrooms in inventory - // 0x4 = 3 Mushrooms in inventory - k_megashroom, // 0x1 = Mega Mushroom in inventory - k_goldshroom, // 0x1 = Gold Mushroom in inventory - k_star, // 0x1 = Star in inventory - k_triplebanana, // 0x1 = 1 Banana following, 0x2 = 2 Bananas following - // 0x4 = 3 Bananas following, 0x8 = Triple Banana in inventory - k_fakeitem, // 0x1 = Fake Item being held, 0x2 = Fake Item in inventory - k_banana, // 0x1 = Banana being held, 0x2 = Banana in inventory - k_greenshell, // 0x1 = Green Shell being held, 0x2 = Green Shell in inventory - k_redshell, // 0x1 = Red Shell being held, 0x2 = Red Shell in inventory - k_laserwisp, // 0x1 = Laser Wisp in inventory - k_triplegreenshell, // 0x1 = 1 Green Shell orbiting, 0x2 = 2 Green Shells orbiting - // 0x4 = 3 Green Shells orbiting, 0x8 = Triple Green Shell in inventory - k_bobomb, // 0x1 = Bob-omb being held, 0x2 = Bob-omb in inventory - k_blueshell, // 0x1 = Blue Shell in inventory - k_jaws, // 0x1 = 1 Jaws orbiting, 0x2 = 2 Jaws orbiting, - // 0x4 = 2x Jaws in inventory - k_fireflower, // 0x1 = Fire Flower in inventory - k_tripleredshell, // 0x1 = 1 Red Shell orbiting, 0x2 = 2 Red Shells orbiting - // 0x4 = 3 Red Shells orbiting, 0x8 = Triple Red Shell in inventory - k_lightning, // 0x1 = Lightning in inventory - k_feather, // 0x1 = Feather in inventory, 0x2 = Player is feather jumping - k_kitchensink, // 0x1 = Sink in inventory + // *** ADDING A NEW ITEM? ADD IT TO K_DoHyudoroSteal PLEASE!! -Salt *** + k_itemtype, // KITEM_ constant for item number + k_itemamount, // Amount of said item + k_itemheld, // Are you holding an item? 1 = normal hold, 2 = rotation hold // Battle Mode vars k_balloon, // Number of balloons left diff --git a/src/dehacked.c b/src/dehacked.c index ed6aee55..7d90c19d 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1822,8 +1822,8 @@ static actionpointer_t actionpointers[] = {{A_RemoteAction}, "A_REMOTEACTION"}, {{A_ToggleFlameJet}, "A_TOGGLEFLAMEJET"}, {{A_ItemPop}, "A_ITEMPOP"}, // SRB2kart - {{A_RedShellChase}, "A_REDSHELLCHASE"}, // SRB2kart - {{A_BobombExplode}, "A_BOBOMBEXPLODE"}, // SRB2kart + {{A_JawzChase}, "A_JAWZCHASE"}, // SRB2kart + {{A_MineExplode}, "A_MINEEXPLODE"}, // SRB2kart {{A_OrbitNights}, "A_ORBITNIGHTS"}, {{A_GhostMe}, "A_GHOSTME"}, {{A_SetObjectState}, "A_SETOBJECTSTATE"}, @@ -6248,7 +6248,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit // Magnet Burst - // Mushroom Fire Trail + // Sneaker Fire Trail "S_KARTFIRE1", "S_KARTFIRE2", "S_KARTFIRE3", @@ -6290,15 +6290,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_BANANAITEM", "S_DEADBANANA", - //{ Green Shell - "S_TRIPLEGREENSHIELD1", - "S_TRIPLEGREENSHIELD2", - "S_TRIPLEGREENSHIELD3", - "S_TRIPLEGREENSHIELD4", - "S_TRIPLEGREENSHIELD5", - "S_TRIPLEGREENSHIELD6", - "S_TRIPLEGREENSHIELD7", - "S_TRIPLEGREENSHIELD8", + //{ Orbinaut "S_GREENSHIELD1", "S_GREENSHIELD2", "S_GREENSHIELD3", @@ -6317,15 +6309,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_GREENITEM8", "S_DEADGREEN", //} - //{ Red Shell - "S_TRIPLEREDSHIELD1", - "S_TRIPLEREDSHIELD2", - "S_TRIPLEREDSHIELD3", - "S_TRIPLEREDSHIELD4", - "S_TRIPLEREDSHIELD5", - "S_TRIPLEREDSHIELD6", - "S_TRIPLEREDSHIELD7", - "S_TRIPLEREDSHIELD8", + //{ Jawz "S_REDSHIELD1", "S_REDSHIELD2", "S_REDSHIELD3", @@ -6355,20 +6339,38 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_FIRETRAIL8", "S_FIRETRAIL9", - // Bob-omb - "S_BOMBSHIELD", - "S_BOMBITEM", - "S_BOMBAIR", + // Special Stage Mine + "S_BOMBSHIELD1", + "S_BOMBSHIELD2", + "S_BOMBAIR1", + "S_BOMBAIR2", + "S_BOMBDEPLOY1", + "S_BOMBDEPLOY2", + "S_BOMBDEPLOY3", + "S_BOMBDEPLOY4", + "S_BOMBDEPLOY5", + "S_BOMBDEPLOY6", + "S_BOMBDEPLOY7", + "S_BOMBDEPLOY8", + "S_BOMBDEPLOY9", + "S_BOMBDEPLOY10", + "S_BOMBDEPLOY11", + "S_BOMBDEPLOY12", + "S_BOMBDEPLOY13", + "S_BOMBITEM1", + "S_BOMBITEM2", + "S_BOMBITEM3", + "S_BOMBITEM4", "S_BOMBEXPLODE", - // Blue Shell - Blue Lightning for now... + // Self-Propelled Bomb - just an explosion for now... "S_BLUELIGHTNING1", "S_BLUELIGHTNING2", "S_BLUELIGHTNING3", "S_BLUELIGHTNING4", "S_BLUEEXPLODE", - // Lightning + // Size Down "S_LIGHTNING1", "S_LIGHTNING2", "S_LIGHTNING3", @@ -6420,20 +6422,17 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_FIREDITEM4", "S_PLAYERARROW", // Above player arrow - "S_PLAYERARROW_MUSHROOM", - "S_PLAYERARROW_GREENSHELL", + "S_PLAYERARROW_SNEAKER", "S_PLAYERARROW_BANANA", "S_PLAYERARROW_FAKEITEM", - "S_PLAYERARROW_BOO", - "S_PLAYERARROW_FEATHER", - "S_PLAYERARROW_REDSHELL", - "S_PLAYERARROW_BOBOMB", - "S_PLAYERARROW_FIREFLOWER", - "S_PLAYERARROW_TRIPLEGREENSHELL", - "S_PLAYERARROW_TRIPLEBANANA", - "S_PLAYERARROW_TRIPLEREDSHELL", - "S_PLAYERARROW_STAR", - "S_PLAYERARROW_MEGASHROOM", + "S_PLAYERARROW_HYUDORO", + "S_PLAYERARROW_POGOSPRING", + "S_PLAYERARROW_JAWZ", + "S_PLAYERARROW_MINE", + "S_PLAYERARROW_BALLHOG", + "S_PLAYERARROW_ORBINAUT", + "S_PLAYERARROW_INVINCIBILITY", + "S_PLAYERARROW_SIZEUP", "S_PLAYERARROW_KITCHENSINK", "S_PLAYERARROW_EMPTY", "S_PLAYERARROW_ROULETTE", @@ -6959,39 +6958,31 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_FLINGRANDOMITEM", "MT_RANDOMITEMPOP", - "MT_MUSHROOMTRAIL", + "MT_SNEAKERTRAIL", "MT_DRIFT", "MT_DRIFTSMOKE", "MT_FAKESHIELD", "MT_FAKEITEM", - "MT_TRIPLEBANANASHIELD1", // Banana Stuff - "MT_TRIPLEBANANASHIELD2", - "MT_TRIPLEBANANASHIELD3", - "MT_BANANASHIELD", + + "MT_BANANASHIELD", // Banana Stuff "MT_BANANAITEM", - "MT_TRIPLEGREENSHIELD1", // Green shell stuff - "MT_TRIPLEGREENSHIELD2", - "MT_TRIPLEGREENSHIELD3", - "MT_GREENSHIELD", + "MT_GREENSHIELD", // Orbinaut stuff "MT_GREENITEM", "MT_FIRETRAIL", - "MT_TRIPLEREDSHIELD1", // Red shell stuff - "MT_TRIPLEREDSHIELD2", - "MT_TRIPLEREDSHIELD3", - "MT_REDSHIELD", + "MT_REDSHIELD", // Jawz stuff "MT_REDITEM", "MT_REDITEMDUD", - "MT_BOMBSHIELD", // Bob-omb stuff + "MT_BOMBSHIELD", // Special Stage Mine stuff "MT_BOMBITEM", "MT_BOMBEXPLOSION", "MT_BOMBEXPLOSIONSOUND", - "MT_BLUELIGHTNING", // Lightning stuff + "MT_BLUELIGHTNING", // Size Down stuff "MT_BLUEEXPLOSION", "MT_LIGHTNING", @@ -7338,7 +7329,6 @@ static const char *const KARTSTUFF_LIST[] = { "LAKITU", "THROWDIR", - "CAMSPIN", "LAPANIMATION", "CARDANIMATION", "SOUNDS", @@ -7355,46 +7345,28 @@ static const char *const KARTSTUFF_LIST[] = { "BOOSTCHARGE", "JMP", "OFFROAD", + "POGOSPRING", "ITEMROULETTE", - "ITEMCLOSE", - "MAGNETTIMER", - "BOOTIMER", - "BOOTAKETIMER", - "BOOSTOLENTIMER", - "MUSHROOMTIMER", + "ATTRACTIONTIMER", + "HYUDOROTIMER", + "STEALINGTIMER", + "STOLENTIMER", + "SNEAKERTIMER", "GROWSHRINKTIMER", "SQUISHEDTIMER", - "GOLDSHROOMTIMER", - "STARTIMER", + "ROCKETSNEAKERTIMER", + "INVINCIBILITYTIMER", "SPINOUTTIMER", - "LASERWISPTIMER", "JUSTBUMPED", "POWERITEMTIMER", "COMEBACKTIMER", + "SADTIMER", - "MAGNET", - "BOO", - "MUSHROOM", - "MEGASHROOM", - "GOLDSHROOM", - "STAR", - "TRIPLEBANANA", - "FAKEITEM", - "BANANA", - "GREENSHELL", - "REDSHELL", - "LASERWISP", - "TRIPLEGREENSHELL", - "BOBOMB", - "BLUESHELL", - "JAWS", - "FIREFLOWER", - "TRIPLEREDSHELL", - "LIGHTNING", - "FEATHER", - "KITCHENSINK", + "ITEMTYPE", + "ITEMAMOUNT", + "ITEMHELD", "BALLOON", "COMEBACKPOINTS", diff --git a/src/doomstat.h b/src/doomstat.h index a74e470b..a6bbab87 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -409,9 +409,9 @@ extern UINT16 spacetimetics; extern UINT16 extralifetics; // SRB2kart -extern INT32 bootime; -extern INT32 boostealtime; -extern INT32 mushroomtime; +extern INT32 hyudorotime; +extern INT32 stealtime; +extern INT32 sneakertime; extern INT32 itemtime; extern INT32 comebacktime; extern INT32 bumptime; diff --git a/src/g_game.c b/src/g_game.c index a8dc26d9..6225b34e 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -206,9 +206,9 @@ UINT16 spacetimetics = 11*TICRATE + (TICRATE/2); UINT16 extralifetics = 4*TICRATE; // SRB2kart -INT32 bootime = 7*TICRATE; -INT32 boostealtime = TICRATE/2; -INT32 mushroomtime = TICRATE + (TICRATE/3); +INT32 hyudorotime = 7*TICRATE; +INT32 stealtime = TICRATE/2; +INT32 sneakertime = TICRATE + (TICRATE/3); INT32 itemtime = 8*TICRATE; INT32 comebacktime = 10*TICRATE; INT32 bumptime = 6; @@ -1379,7 +1379,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) else { // forward with key or button // SRB2kart - we use an accel/brake instead of forward/backward. - if (InputDown(gc_accelerate, ssplayer) || player->kartstuff[k_mushroomtimer]) + if (InputDown(gc_accelerate, ssplayer) || player->kartstuff[k_sneakertimer]) { cmd->buttons |= BT_ACCELERATE; forward = forwardmove[1]; // 50 diff --git a/src/hardware/hw_light.c b/src/hardware/hw_light.c index eeb5afbd..ee0cca74 100644 --- a/src/hardware/hw_light.c +++ b/src/hardware/hw_light.c @@ -499,23 +499,46 @@ light_t *t_lspr[NUMSPRITES] = &lspr[NOLIGHT], //"SPRG", &lspr[NOLIGHT], //"BSPR", + &lspr[NOLIGHT], //"RNDM", - &lspr[NOLIGHT], //"SPRK", &lspr[NOLIGHT], //"KFRE", &lspr[NOLIGHT], //"DRIF", - &lspr[NOLIGHT], //"FAKE", - &lspr[NOLIGHT], //"DFAK", + &lspr[NOLIGHT], //"DSMO", + + &lspr[NOLIGHT], //"FITM", &lspr[NOLIGHT], //"BANA", - &lspr[NOLIGHT], //"DBAN", &lspr[NOLIGHT], //"GSHE", - &lspr[NOLIGHT], //"GSTR", - &lspr[NOLIGHT], //"DGSH", &lspr[NOLIGHT], //"RSHE", - &lspr[NOLIGHT], //"RSTR", - &lspr[NOLIGHT], //"DRSH", - &lspr[NOLIGHT], //"BOMB", + &lspr[NOLIGHT], //"SSMN", &lspr[NOLIGHT], //"BLIG", - &lspr[NOLIGHT], //"LIGH" + &lspr[NOLIGHT], //"LIGH", + &lspr[NOLIGHT], //"SINK", + &lspr[NOLIGHT], //"SITR", + &lspr[NOLIGHT], //"KBLN", + + &lspr[NOLIGHT], //"LAKI", + + &lspr[NOLIGHT], //"POKE", + &lspr[NOLIGHT], //"AUDI", + &lspr[NOLIGHT], //"DECO", + &lspr[NOLIGHT], //"DOOD", + &lspr[NOLIGHT], //"SNES", + &lspr[NOLIGHT], //"GBAS", + &lspr[NOLIGHT], //"SPRS", + &lspr[NOLIGHT], //"BUZB", + &lspr[NOLIGHT], //"CHOM", + &lspr[NOLIGHT], //"SACO", + &lspr[NOLIGHT], //"CRAB", + &lspr[NOLIGHT], //"SHAD", + + &lspr[NOLIGHT], //"BUMP", + &lspr[NOLIGHT], //"FLEN", + &lspr[NOLIGHT], //"CLAS", + &lspr[NOLIGHT], //"PSHW", + + &lspr[NOLIGHT], //"ARRO", + + &lspr[NOLIGHT], //"PBOM" // Free slots &lspr[NOLIGHT], diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 094a5212..e8e03f8a 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5276,8 +5276,8 @@ static void HWR_ProjectSprite(mobj_t *thing) // New colormap stuff for skins Tails 06-07-2002 if (thing->skin && thing->sprite == SPR_PLAY) // This thing is a player! { - if (thing->player && thing->player->kartstuff[k_startimer]) - vis->colormap = R_GetTranslationColormap(TC_STARMAN, thing->color, GTC_CACHE); + if (thing->player && thing->player->kartstuff[k_invincibilitytimer]) + vis->colormap = R_GetTranslationColormap(TC_RAINBOW, thing->color, GTC_CACHE); else { size_t skinnum = (skin_t*)thing->skin-skins; diff --git a/src/info.c b/src/info.c index ee8853ef..958fed05 100644 --- a/src/info.c +++ b/src/info.c @@ -55,10 +55,10 @@ char sprnames[NUMSPRITES + 1][5] = "GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI", "SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO", //SRB2kart Sprites - "SPRG","BSPR","RNDM","RPOP","KFRE","DRIF","DSMO","FITM","DFAK","BANA", - "DBAN","GSHE","DGSH","RSHE","DRSH","BOMB","BLIG","LIGH","SINK","SITR", - "KBLN","LAKI","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB", - "CHOM","SACO","CRAB","SHAD","BUMP","FLEN","CLAS","PSHW","ARRO","PBOM" + "SPRG","BSPR","RNDM","KFRE","DRIF","DSMO","FITM","BANA","GSHE","RSHE", + "SSMN","BLIG","LIGH","SINK","SITR","KBLN","LAKI","POKE","AUDI","DECO", + "DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO","CRAB","SHAD","BUMP", + "FLEN","CLAS","PSHW","ARRO","PBOM" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -2565,10 +2565,10 @@ state_t states[NUMSTATES] = {SPR_RNDM, 23, 3, {NULL}, 0, 0, S_RANDOMITEM1}, // S_RANDOMITEM24 {SPR_RNDM, 0, 1, {A_ItemPop}, 0, 0, S_NULL}, // S_DEADRANDOMITEM - {SPR_RPOP, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_RANDOMITEMPOP2}, // S_RANDOMITEMPOP1 - {SPR_RPOP, FF_FULLBRIGHT|1, 5, {NULL}, 0, 0, S_RANDOMITEMPOP3}, // S_RANDOMITEMPOP2 - {SPR_RPOP, FF_FULLBRIGHT|2, 5, {NULL}, 0, 0, S_RANDOMITEMPOP4}, // S_RANDOMITEMPOP3 - {SPR_RPOP, FF_FULLBRIGHT|3, 5, {NULL}, 0, 0, S_NULL}, // S_RANDOMITEMPOP4 + {SPR_RNDM, FF_FULLBRIGHT|24, 5, {NULL}, 0, 0, S_RANDOMITEMPOP2}, // S_RANDOMITEMPOP1 + {SPR_RNDM, FF_FULLBRIGHT|25, 5, {NULL}, 0, 0, S_RANDOMITEMPOP3}, // S_RANDOMITEMPOP2 + {SPR_RNDM, FF_FULLBRIGHT|26, 5, {NULL}, 0, 0, S_RANDOMITEMPOP4}, // S_RANDOMITEMPOP3 + {SPR_RNDM, FF_FULLBRIGHT|27, 5, {NULL}, 0, 0, S_NULL}, // S_RANDOMITEMPOP4 {SPR_DRIF, 0, 2, {NULL}, 0, 0, S_DRIFTSPARK2}, // S_DRIFTSPARK1 {SPR_DRIF, 1, 2, {NULL}, 0, 0, S_DRIFTSPARK3}, // S_DRIFTSPARK2 @@ -2616,19 +2616,11 @@ state_t states[NUMSTATES] = {SPR_FITM, 21, 3, {NULL}, 0, 0, S_FAKEITEM23}, // S_FAKEITEM22 // ***** {SPR_FITM, 22, 3, {NULL}, 0, 0, S_FAKEITEM24}, // S_FAKEITEM23 // ***** {SPR_FITM, 23, 3, {NULL}, 0, 0, S_FAKEITEM1}, // S_FAKEITEM24 // ***** - {SPR_DFAK, 0, 175, {NULL}, 0, 0, S_FAKEITEM1}, // S_DEADFAKEITEM + {SPR_FITM, 24, 175, {NULL}, 0, 0, S_FAKEITEM1}, // S_DEADFAKEITEM {SPR_BANA, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BANANAITEM - {SPR_DBAN, 0, 175, {NULL}, 0, 0, S_NULL}, // S_DEADBANANA + {SPR_BANA, 1, 175, {NULL}, 0, 0, S_NULL}, // S_DEADBANANA - {SPR_GSHE, 0, 1, {NULL}, 0, 0, S_TRIPLEGREENSHIELD2}, // S_TRIPLEGREENSHIELD1 - {SPR_GSHE, 1, 1, {NULL}, 0, 0, S_TRIPLEGREENSHIELD3}, // S_TRIPLEGREENSHIELD2 - {SPR_GSHE, 2, 1, {NULL}, 0, 0, S_TRIPLEGREENSHIELD4}, // S_TRIPLEGREENSHIELD3 - {SPR_GSHE, 3, 1, {NULL}, 0, 0, S_TRIPLEGREENSHIELD5}, // S_TRIPLEGREENSHIELD4 - {SPR_GSHE, 4, 1, {NULL}, 0, 0, S_TRIPLEGREENSHIELD6}, // S_TRIPLEGREENSHIELD5 - {SPR_GSHE, 5, 1, {NULL}, 0, 0, S_TRIPLEGREENSHIELD7}, // S_TRIPLEGREENSHIELD6 - {SPR_GSHE, 6, 1, {NULL}, 0, 0, S_TRIPLEGREENSHIELD8}, // S_TRIPLEGREENSHIELD7 - {SPR_GSHE, 7, 1, {NULL}, 0, 0, S_TRIPLEGREENSHIELD1}, // S_TRIPLEGREENSHIELD8 {SPR_GSHE, 0, 1, {NULL}, 0, 0, S_GREENSHIELD2}, // S_GREENSHIELD1 {SPR_GSHE, 1, 1, {NULL}, 0, 0, S_GREENSHIELD3}, // S_GREENSHIELD2 {SPR_GSHE, 2, 1, {NULL}, 0, 0, S_GREENSHIELD4}, // S_GREENSHIELD3 @@ -2645,16 +2637,8 @@ state_t states[NUMSTATES] = {SPR_GSHE, 5, 1, {NULL}, 0, 0, S_GREENITEM7}, // S_GREENITEM6 {SPR_GSHE, 6, 1, {NULL}, 0, 0, S_GREENITEM8}, // S_GREENITEM7 {SPR_GSHE, 7, 1, {NULL}, 0, 0, S_GREENITEM1}, // S_GREENITEM8 - {SPR_DGSH, 0, 175, {NULL}, 0, 0, S_NULL}, // S_DEADGREEN + {SPR_GSHE, 8, 175, {NULL}, 0, 0, S_NULL}, // S_DEADGREEN - {SPR_RSHE, 0, 1, {NULL}, 0, 0, S_TRIPLEREDSHIELD2}, // S_TRIPLEREDSHIELD1 - {SPR_RSHE, 1, 1, {NULL}, 0, 0, S_TRIPLEREDSHIELD3}, // S_TRIPLEREDSHIELD2 - {SPR_RSHE, 2, 1, {NULL}, 0, 0, S_TRIPLEREDSHIELD4}, // S_TRIPLEREDSHIELD3 - {SPR_RSHE, 3, 1, {NULL}, 0, 0, S_TRIPLEREDSHIELD5}, // S_TRIPLEREDSHIELD4 - {SPR_RSHE, 4, 1, {NULL}, 0, 0, S_TRIPLEREDSHIELD6}, // S_TRIPLEREDSHIELD5 - {SPR_RSHE, 5, 1, {NULL}, 0, 0, S_TRIPLEREDSHIELD7}, // S_TRIPLEREDSHIELD6 - {SPR_RSHE, 6, 1, {NULL}, 0, 0, S_TRIPLEREDSHIELD8}, // S_TRIPLEREDSHIELD7 - {SPR_RSHE, 7, 1, {NULL}, 0, 0, S_TRIPLEREDSHIELD1}, // S_TRIPLEREDSHIELD8 {SPR_RSHE, 0, 1, {NULL}, 0, 0, S_REDSHIELD2}, // S_REDSHIELD1 {SPR_RSHE, 1, 1, {NULL}, 0, 0, S_REDSHIELD3}, // S_REDSHIELD2 {SPR_RSHE, 2, 1, {NULL}, 0, 0, S_REDSHIELD4}, // S_REDSHIELD3 @@ -2663,15 +2647,15 @@ state_t states[NUMSTATES] = {SPR_RSHE, 5, 1, {NULL}, 0, 0, S_REDSHIELD7}, // S_REDSHIELD6 {SPR_RSHE, 6, 1, {NULL}, 0, 0, S_REDSHIELD8}, // S_REDSHIELD7 {SPR_RSHE, 7, 1, {NULL}, 0, 0, S_REDSHIELD1}, // S_REDSHIELD8 - {SPR_RSHE, 0, 1, {A_RedShellChase}, 0, 0, S_REDITEM2}, // S_REDITEM1 - {SPR_RSHE, 1, 1, {A_RedShellChase}, 0, 0, S_REDITEM3}, // S_REDITEM2 - {SPR_RSHE, 2, 1, {A_RedShellChase}, 0, 0, S_REDITEM4}, // S_REDITEM3 - {SPR_RSHE, 3, 1, {A_RedShellChase}, 0, 0, S_REDITEM5}, // S_REDITEM4 - {SPR_RSHE, 4, 1, {A_RedShellChase}, 0, 0, S_REDITEM6}, // S_REDITEM5 - {SPR_RSHE, 5, 1, {A_RedShellChase}, 0, 0, S_REDITEM7}, // S_REDITEM6 - {SPR_RSHE, 6, 1, {A_RedShellChase}, 0, 0, S_REDITEM8}, // S_REDITEM7 - {SPR_RSHE, 7, 1, {A_RedShellChase}, 0, 0, S_REDITEM1}, // S_REDITEM8 - {SPR_DRSH, 0, 175, {NULL}, 0, 0, S_NULL}, // S_DEADRED + {SPR_RSHE, 0, 1, {A_JawzChase}, 0, 0, S_REDITEM2}, // S_REDITEM1 + {SPR_RSHE, 1, 1, {A_JawzChase}, 0, 0, S_REDITEM3}, // S_REDITEM2 + {SPR_RSHE, 2, 1, {A_JawzChase}, 0, 0, S_REDITEM4}, // S_REDITEM3 + {SPR_RSHE, 3, 1, {A_JawzChase}, 0, 0, S_REDITEM5}, // S_REDITEM4 + {SPR_RSHE, 4, 1, {A_JawzChase}, 0, 0, S_REDITEM6}, // S_REDITEM5 + {SPR_RSHE, 5, 1, {A_JawzChase}, 0, 0, S_REDITEM7}, // S_REDITEM6 + {SPR_RSHE, 6, 1, {A_JawzChase}, 0, 0, S_REDITEM8}, // S_REDITEM7 + {SPR_RSHE, 7, 1, {A_JawzChase}, 0, 0, S_REDITEM1}, // S_REDITEM8 + {SPR_RSHE, 8, 175, {NULL}, 0, 0, S_NULL}, // S_DEADRED {SPR_FBLL, 13, 3, {NULL}, 0, 0, S_FIRETRAIL2}, // S_FIRETRAIL1 {SPR_FBLL, 14, 3, {NULL}, 0, 0, S_FIRETRAIL3}, // S_FIRETRAIL2 @@ -2683,16 +2667,34 @@ state_t states[NUMSTATES] = {SPR_FBLL, 20, 3, {NULL}, 0, 0, S_FIRETRAIL9}, // S_FIRETRAIL8 {SPR_FBLL, 21, 3, {NULL}, 0, 0, S_NULL}, // S_FIRETRAIL9 - {SPR_BOMB, 0, 1, {NULL}, 0, 0, S_BOMBSHIELD}, // S_BOMBSHIELD - {SPR_BOMB, 0, 1, {A_GrenadeRing}, 0, 0, S_BOMBITEM}, // S_BOMBITEM - {SPR_BOMB, 0, 1, {NULL}, 0, 0, S_BOMBAIR}, // S_BOMBAIR - {SPR_BOMB, 0, 1, {A_BobombExplode}, MT_BOMBEXPLOSION, 0, S_NULL}, // S_BOMBEXPLODE + {SPR_SSMN, 4, 1, {NULL}, 0, 0, S_BOMBSHIELD2}, // S_BOMBSHIELD1 + {SPR_SSMN, 5, 1, {NULL}, 0, 0, S_BOMBSHIELD1}, // S_BOMBSHIELD2 + {SPR_SSMN, 4, 1, {NULL}, 0, 0, S_BOMBAIR2}, // S_BOMBAIR1 + {SPR_SSMN, 5, 1, {NULL}, 0, 0, S_BOMBAIR1}, // S_BOMBAIR2 + {SPR_SSMN, 6, 3, {NULL}, 0, 0, S_BOMBDEPLOY2}, // S_BOMBDEPLOY1 + {SPR_SSMN, 7, 5, {NULL}, 0, 0, S_BOMBDEPLOY3}, // S_BOMBDEPLOY2 + {SPR_SSMN, 8, 7, {NULL}, 0, 0, S_BOMBDEPLOY4}, // S_BOMBDEPLOY3 + {SPR_SSMN, 9, 1, {NULL}, 0, 0, S_BOMBDEPLOY5}, // S_BOMBDEPLOY4 + {SPR_SSMN, 10, 1, {NULL}, 0, 0, S_BOMBDEPLOY6}, // S_BOMBDEPLOY5 + {SPR_SSMN, 9, 1, {NULL}, 0, 0, S_BOMBDEPLOY7}, // S_BOMBDEPLOY6 + {SPR_SSMN, 10, 3, {NULL}, 0, 0, S_BOMBDEPLOY8}, // S_BOMBDEPLOY7 + {SPR_SSMN, 11, 1, {NULL}, 0, 0, S_BOMBDEPLOY9}, // S_BOMBDEPLOY8 + {SPR_SSMN, 10, 1, {NULL}, 0, 0, S_BOMBDEPLOY10}, // S_BOMBDEPLOY9 + {SPR_SSMN, 11, 3, {NULL}, 0, 0, S_BOMBDEPLOY11}, // S_BOMBDEPLOY10 + {SPR_SSMN, 12, 3, {NULL}, 0, 0, S_BOMBDEPLOY12}, // S_BOMBDEPLOY11 + {SPR_SSMN, 13, 3, {NULL}, 0, 0, S_BOMBDEPLOY13}, // S_BOMBDEPLOY12 + {SPR_SSMN, 14, 3, {NULL}, 0, 0, S_BOMBITEM1}, // S_BOMBDEPLOY13 + {SPR_SSMN, 0, 30, {A_GrenadeRing}, 0, 0, S_BOMBITEM2}, // S_BOMBITEM1 + {SPR_SSMN, 3, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM3}, // S_BOMBITEM2 + {SPR_SSMN, 2, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM4}, // S_BOMBITEM3 + {SPR_SSMN, 1, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM1}, // S_BOMBITEM4 + {SPR_SSMN, 3, 1, {A_MineExplode}, MT_BOMBEXPLOSION, 0, S_NULL}, // S_BOMBEXPLODE {SPR_BLIG, 0, 2, {NULL}, 0, 0, S_BLUELIGHTNING2}, // S_BLUELIGHTNING1 {SPR_BLIG, 1, 2, {NULL}, 0, 0, S_BLUELIGHTNING3}, // S_BLUELIGHTNING2 {SPR_BLIG, 2, 2, {NULL}, 0, 0, S_BLUELIGHTNING4}, // S_BLUELIGHTNING3 {SPR_BLIG, 3, 2, {NULL}, 0, 0, S_NULL}, // S_BLUELIGHTNING4 - {SPR_BOMB, 0, 1, {A_BobombExplode}, MT_BLUEEXPLOSION, 0, S_NULL}, // S_BLUEEXPLODE + {SPR_SSMN, 3, 1, {A_MineExplode}, MT_BLUEEXPLOSION, 0, S_NULL}, // S_BLUEEXPLODE {SPR_LIGH, 0, 2, {NULL}, 0, 0, S_LIGHTNING2}, // S_LIGHTNING1 {SPR_LIGH, 1, 2, {NULL}, 0, 0, S_LIGHTNING3}, // S_LIGHTNING2 @@ -2863,20 +2865,17 @@ state_t states[NUMSTATES] = // Above player arrow {SPR_ARRO, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW - {SPR_ARRO, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_MUSHROOM - {SPR_ARRO, FF_FULLBRIGHT|2, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_GREENSHELL + {SPR_ARRO, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_SNEAKER {SPR_ARRO, FF_FULLBRIGHT|3, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_BANANA {SPR_ARRO, FF_FULLBRIGHT|4, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_FAKEITEM - {SPR_ARRO, FF_FULLBRIGHT|5, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_BOO - {SPR_ARRO, FF_FULLBRIGHT|6, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_FEATHER - {SPR_ARRO, FF_FULLBRIGHT|7, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_REDSHELL - {SPR_ARRO, FF_FULLBRIGHT|8, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_BOBOMB - {SPR_ARRO, FF_FULLBRIGHT|9, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_FIREFLOWER - {SPR_ARRO, FF_FULLBRIGHT|10, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_TRIPLEGREENSHELL - {SPR_ARRO, FF_FULLBRIGHT|11, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_TRIPLEBANANA - {SPR_ARRO, FF_FULLBRIGHT|12, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_TRIPLEREDSHELL - {SPR_ARRO, FF_FULLBRIGHT|13, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_STAR - {SPR_ARRO, FF_FULLBRIGHT|14, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_MEGASHROOM + {SPR_ARRO, FF_FULLBRIGHT|5, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_HYUDORO + {SPR_ARRO, FF_FULLBRIGHT|6, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_POGOSPRING + {SPR_ARRO, FF_FULLBRIGHT|7, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_JAWZ + {SPR_ARRO, FF_FULLBRIGHT|8, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_MINE + {SPR_ARRO, FF_FULLBRIGHT|9, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_BALLHOG + {SPR_ARRO, FF_FULLBRIGHT|10, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_ORBINAUT + {SPR_ARRO, FF_FULLBRIGHT|13, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_INVINCIBILITY + {SPR_ARRO, FF_FULLBRIGHT|14, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_SIZEUP {SPR_ARRO, FF_FULLBRIGHT|15, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_KITCHENSINK {SPR_ARRO, FF_FULLBRIGHT|16, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_EMPTY {SPR_ARRO, FF_FULLBRIGHT|FF_ANIMATE|1, -1, {NULL}, 5, 3, S_NULL}, // S_PLAYERARROW_ROULETTE @@ -14302,7 +14301,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_MUSHROOMTRAIL + { // MT_SNEAKERTRAIL -1, // doomednum S_KARTFIRE1, // spawnstate 1, // spawnhealth @@ -14437,87 +14436,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_TRIPLEBANANASHIELD1 - -1, // doomednum - S_BANANAITEM, // 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_DEADBANANA, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - k_banana, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY, // flags - S_NULL // raisestate - }, - - { // MT_TRIPLEBANANASHIELD2 - -1, // doomednum - S_BANANAITEM, // 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_DEADBANANA, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - k_banana, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY, // flags - S_NULL // raisestate - }, - - { // MT_TRIPLEBANANASHIELD3 - -1, // doomednum - S_BANANAITEM, // 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_DEADBANANA, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - k_banana, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY, // flags - S_NULL // raisestate - }, - { // MT_BANANASHIELD -1, // doomednum S_BANANAITEM, // spawnstate @@ -14534,7 +14452,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_DEADBANANA, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound - k_banana, // speed + 0, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset @@ -14572,87 +14490,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_TRIPLEGREENSHIELD1 - -1, // doomednum - S_TRIPLEGREENSHIELD1, // 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_DEADGREEN, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 10*FRACUNIT, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY, // flags - S_NULL // raisestate - }, - - { // MT_TRIPLEGREENSHIELD2 - -1, // doomednum - S_TRIPLEGREENSHIELD4, // 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_DEADGREEN, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 10*FRACUNIT, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY, // flags - S_NULL // raisestate - }, - - { // MT_TRIPLEGREENSHIELD3 - -1, // doomednum - S_TRIPLEGREENSHIELD7, // 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_DEADGREEN, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 10*FRACUNIT, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY, // flags - S_NULL // raisestate - }, - { // MT_GREENSHIELD -1, // doomednum S_GREENSHIELD1, // spawnstate @@ -14669,7 +14506,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_DEADGREEN, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound - k_greenshell, // speed + 10*FRACUNIT, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset @@ -14734,87 +14571,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_TRIPLEREDSHIELD1 - -1, // doomednum - S_TRIPLEREDSHIELD2, // 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_DEADRED, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 10*FRACUNIT, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY, // flags - S_NULL // raisestate - }, - - { // MT_TRIPLEREDSHIELD2 - -1, // doomednum - S_TRIPLEREDSHIELD5, // 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_DEADRED, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 10*FRACUNIT, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY, // flags - S_NULL // raisestate - }, - - { // MT_TRIPLEREDSHIELD3 - -1, // doomednum - S_TRIPLEREDSHIELD8, // 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_DEADRED, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 10*FRACUNIT, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height - 0, // display offset - 100, // mass - 1, // damage - sfx_None, // activesound - MF_SHOOTABLE|MF_NOGRAVITY|MF_SCENERY, // flags - S_NULL // raisestate - }, - { // MT_REDSHIELD -1, // doomednum S_REDSHIELD1, // spawnstate @@ -14831,7 +14587,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_DEADRED, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound - k_redshell, // speed + 10*FRACUNIT, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset @@ -14898,7 +14654,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_BOMBSHIELD -1, // doomednum - S_BOMBSHIELD, // spawnstate + S_BOMBSHIELD1, // spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -14912,7 +14668,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_BOMBEXPLODE, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound - k_bobomb, // speed + 10*FRACUNIT, // speed 16*FRACUNIT, // radius 32*FRACUNIT, // height 0, // display offset @@ -14925,7 +14681,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_BOMBITEM -1, // doomednum - S_BOMBAIR, // spawnstate + S_BOMBAIR1, // spawnstate 105, // spawnhealth S_NULL, // seestate sfx_tossed, // seesound diff --git a/src/info.h b/src/info.h index e50e9bf0..10140b84 100644 --- a/src/info.h +++ b/src/info.h @@ -163,9 +163,9 @@ void A_RandomStateRange(); void A_DualAction(); void A_RemoteAction(); void A_ToggleFlameJet(); -void A_ItemPop(); // SRB2kart -void A_RedShellChase(); // SRB2kart -void A_BobombExplode(); // SRB2kart +void A_ItemPop(); // SRB2kart +void A_JawzChase(); // SRB2kart +void A_MineExplode(); // SRB2kart void A_OrbitNights(); void A_GhostMe(); void A_SetObjectState(); @@ -579,23 +579,18 @@ typedef enum sprite SPR_BSPR, // Blue Diagonal Spring SPR_RNDM, // Random Item Box - SPR_RPOP, // Random Item Box Pop - SPR_KFRE, // Mushroom fire trail + SPR_KFRE, // Sneaker fire trail SPR_DRIF, // Drift Sparks SPR_DSMO, // Drift Smoke // Kart Items - SPR_FITM, // Fake Item box - SPR_DFAK, // Dead Fake Item + SPR_FITM, // Fake Item SPR_BANA, // Banana Peel - SPR_DBAN, // Dead Banana Peel - SPR_GSHE, // Green Shell - SPR_DGSH, // Dead Green Shell - SPR_RSHE, // Red Shell - SPR_DRSH, // Dead Red Shell - SPR_BOMB, // Bob-omb - SPR_BLIG, // Blue Lightning - SPR_LIGH, // Lightning + SPR_GSHE, // Orbinaut + SPR_RSHE, // Jawz + SPR_SSMN, // SS Mine + SPR_BLIG, // Self-Propelled Bomb + SPR_LIGH, // Size Up/Down beams (Metallic Maddness) SPR_SINK, // Kitchen Sink SPR_SITR, // Kitchen Sink Trail SPR_KBLN, // Battle Mode Balloon @@ -3085,7 +3080,7 @@ typedef enum state // Magnet Burst - // Mushroom Fire Trail + // Sneaker Fire Trail S_KARTFIRE1, S_KARTFIRE2, S_KARTFIRE3, @@ -3127,15 +3122,7 @@ typedef enum state S_BANANAITEM, S_DEADBANANA, - //{ Green Shell - S_TRIPLEGREENSHIELD1, - S_TRIPLEGREENSHIELD2, - S_TRIPLEGREENSHIELD3, - S_TRIPLEGREENSHIELD4, - S_TRIPLEGREENSHIELD5, - S_TRIPLEGREENSHIELD6, - S_TRIPLEGREENSHIELD7, - S_TRIPLEGREENSHIELD8, + //{ Orbinaut S_GREENSHIELD1, S_GREENSHIELD2, S_GREENSHIELD3, @@ -3154,15 +3141,7 @@ typedef enum state S_GREENITEM8, S_DEADGREEN, //} - //{ Red Shell - S_TRIPLEREDSHIELD1, - S_TRIPLEREDSHIELD2, - S_TRIPLEREDSHIELD3, - S_TRIPLEREDSHIELD4, - S_TRIPLEREDSHIELD5, - S_TRIPLEREDSHIELD6, - S_TRIPLEREDSHIELD7, - S_TRIPLEREDSHIELD8, + //{ Jawz S_REDSHIELD1, S_REDSHIELD2, S_REDSHIELD3, @@ -3192,20 +3171,38 @@ typedef enum state S_FIRETRAIL8, S_FIRETRAIL9, - // Bob-omb - S_BOMBSHIELD, - S_BOMBITEM, - S_BOMBAIR, + // Special Stage Mine + S_BOMBSHIELD1, + S_BOMBSHIELD2, + S_BOMBAIR1, + S_BOMBAIR2, + S_BOMBDEPLOY1, + S_BOMBDEPLOY2, + S_BOMBDEPLOY3, + S_BOMBDEPLOY4, + S_BOMBDEPLOY5, + S_BOMBDEPLOY6, + S_BOMBDEPLOY7, + S_BOMBDEPLOY8, + S_BOMBDEPLOY9, + S_BOMBDEPLOY10, + S_BOMBDEPLOY11, + S_BOMBDEPLOY12, + S_BOMBDEPLOY13, + S_BOMBITEM1, + S_BOMBITEM2, + S_BOMBITEM3, + S_BOMBITEM4, S_BOMBEXPLODE, - // Blue Shell - Blue Lightning for now... + // Self-Propelled Bomb - just an explosion for now... S_BLUELIGHTNING1, S_BLUELIGHTNING2, S_BLUELIGHTNING3, S_BLUELIGHTNING4, S_BLUEEXPLODE, - // Lightning + // Size-Down S_LIGHTNING1, S_LIGHTNING2, S_LIGHTNING3, @@ -3384,20 +3381,17 @@ typedef enum state S_FIREDITEM4, S_PLAYERARROW, // Above player arrow - S_PLAYERARROW_MUSHROOM, - S_PLAYERARROW_GREENSHELL, + S_PLAYERARROW_SNEAKER, S_PLAYERARROW_BANANA, S_PLAYERARROW_FAKEITEM, - S_PLAYERARROW_BOO, - S_PLAYERARROW_FEATHER, - S_PLAYERARROW_REDSHELL, - S_PLAYERARROW_BOBOMB, - S_PLAYERARROW_FIREFLOWER, - S_PLAYERARROW_TRIPLEGREENSHELL, - S_PLAYERARROW_TRIPLEBANANA, - S_PLAYERARROW_TRIPLEREDSHELL, - S_PLAYERARROW_STAR, - S_PLAYERARROW_MEGASHROOM, + S_PLAYERARROW_HYUDORO, + S_PLAYERARROW_POGOSPRING, + S_PLAYERARROW_JAWZ, + S_PLAYERARROW_MINE, + S_PLAYERARROW_BALLHOG, + S_PLAYERARROW_ORBINAUT, + S_PLAYERARROW_INVINCIBILITY, + S_PLAYERARROW_SIZEUP, S_PLAYERARROW_KITCHENSINK, S_PLAYERARROW_EMPTY, S_PLAYERARROW_ROULETTE, @@ -3940,39 +3934,30 @@ typedef enum mobj_type MT_FLINGRANDOMITEM, MT_RANDOMITEMPOP, - MT_MUSHROOMTRAIL, + MT_SNEAKERTRAIL, MT_DRIFT, MT_DRIFTSMOKE, MT_FAKESHIELD, MT_FAKEITEM, - MT_TRIPLEBANANASHIELD1, // Banana Stuff - MT_TRIPLEBANANASHIELD2, - MT_TRIPLEBANANASHIELD3, - MT_BANANASHIELD, + MT_BANANASHIELD, // Banana Stuff MT_BANANAITEM, - MT_TRIPLEGREENSHIELD1, // Green shell stuff - MT_TRIPLEGREENSHIELD2, - MT_TRIPLEGREENSHIELD3, - MT_GREENSHIELD, + MT_GREENSHIELD, // Orbinaut stuff MT_GREENITEM, MT_FIRETRAIL, - MT_TRIPLEREDSHIELD1, // Red shell stuff - MT_TRIPLEREDSHIELD2, - MT_TRIPLEREDSHIELD3, - MT_REDSHIELD, + MT_REDSHIELD, // Jawz stuff MT_REDITEM, MT_REDITEMDUD, - MT_BOMBSHIELD, // Bob-omb stuff + MT_BOMBSHIELD, // Mine stuff MT_BOMBITEM, MT_BOMBEXPLOSION, MT_BOMBEXPLOSIONSOUND, - MT_BLUELIGHTNING, // Lightning stuff + MT_BLUELIGHTNING, // Size Down stuff MT_BLUEEXPLOSION, MT_LIGHTNING, diff --git a/src/k_kart.c b/src/k_kart.c index 3c66d510..c21be997 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -173,12 +173,12 @@ UINT8 colortranslations[MAXSKINCOLORS][16] = { */ }; -/** \brief Generates the starman colourmaps that are used when a player has the invincibility power +/** \brief Generates the rainbow colourmaps that are used when a player has the invincibility power \param dest_colormap colormap to populate \param skincolor translation color */ -void K_StarmanColormap(UINT8 *dest_colormap, UINT8 skincolor) +void K_RainbowColormap(UINT8 *dest_colormap, UINT8 skincolor) { INT32 i, j; RGBA_t color; @@ -242,9 +242,9 @@ void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color) return; } - else if (skinnum == TC_STARMAN) + else if (skinnum == TC_RAINBOW) { - K_StarmanColormap(dest_colormap, color); + K_RainbowColormap(dest_colormap, color); return; } @@ -288,27 +288,26 @@ UINT8 K_GetKartColorByName(const char *name) void K_RegisterKartStuff(void) { - CV_RegisterVar(&cv_magnet); - CV_RegisterVar(&cv_boo); - CV_RegisterVar(&cv_mushroom); - CV_RegisterVar(&cv_triplemushroom); - CV_RegisterVar(&cv_megashroom); - CV_RegisterVar(&cv_goldshroom); - CV_RegisterVar(&cv_star); - CV_RegisterVar(&cv_triplebanana); - CV_RegisterVar(&cv_fakeitem); + CV_RegisterVar(&cv_sneaker); + CV_RegisterVar(&cv_rocketsneaker); + CV_RegisterVar(&cv_invincibility); CV_RegisterVar(&cv_banana); - CV_RegisterVar(&cv_greenshell); - CV_RegisterVar(&cv_redshell); - CV_RegisterVar(&cv_laserwisp); - CV_RegisterVar(&cv_triplegreenshell); - CV_RegisterVar(&cv_bobomb); - CV_RegisterVar(&cv_blueshell); - CV_RegisterVar(&cv_jaws); - CV_RegisterVar(&cv_fireflower); - CV_RegisterVar(&cv_tripleredshell); - CV_RegisterVar(&cv_lightning); - CV_RegisterVar(&cv_feather); + CV_RegisterVar(&cv_fakeitem); + CV_RegisterVar(&cv_orbinaut); + CV_RegisterVar(&cv_jawz); + CV_RegisterVar(&cv_mine); + CV_RegisterVar(&cv_ballhog); + CV_RegisterVar(&cv_selfpropelledbomb); + CV_RegisterVar(&cv_sizeup); + CV_RegisterVar(&cv_sizedown); + CV_RegisterVar(&cv_lightningshield); + CV_RegisterVar(&cv_hyudoro); + CV_RegisterVar(&cv_pogospring); + + CV_RegisterVar(&cv_triplesneaker); + CV_RegisterVar(&cv_triplebanana); + CV_RegisterVar(&cv_tripleorbinaut); + CV_RegisterVar(&cv_dualjawz); CV_RegisterVar(&cv_kartminimap); CV_RegisterVar(&cv_kartcheck); @@ -319,550 +318,127 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartcomeback); CV_RegisterVar(&cv_kartmirror); CV_RegisterVar(&cv_speedometer); + CV_RegisterVar(&cv_collideminimum); CV_RegisterVar(&cv_collidesoundnum); CV_RegisterVar(&cv_collidesounds); + + CV_RegisterVar(&cv_kartdebugitem); + CV_RegisterVar(&cv_kartdebugamount); } //} //{ SRB2kart Roulette Code - Position Based -#define NUMKARTITEMS 19 #define NUMKARTODDS 40 -// Ugly ol' 3D arrays -/* -static INT32 K_KartItemOddsPosition_Retro[MAXPLAYERS][NUMKARTITEMS][MAXPLAYERS] = -{ - // 1 Active Player - { //1st // - { 0 }, // Magnet - { 0 }, // Boo - { 40 }, // Mushroom - { 0 }, // Triple Mushroom - { 0 }, // Mega Mushroom - { 0 }, // Gold Mushroom - { 0 }, // Star - { 0 }, // Triple Banana - { 0 }, // Fake Item - { 0 }, // Banana - { 0 }, // Green Shell - { 0 }, // Red Shell - { 0 }, // Triple Green Shell - { 0 }, // Bob-omb - { 0 }, // Blue Shell - { 0 }, // Fire Flower - { 0 }, // Triple Red Shell - { 0 } // Lightning - }, //1st // - - // 2 Active Players - { //1st 2nd // - { 1, 0 }, // Magnet - { 0, 0 }, // Boo - { 6, 11 }, // Mushroom - { 0, 3 }, // Triple Mushroom - { 0, 1 }, // Mega Mushroom - { 0, 1 }, // Gold Mushroom - { 0, 0 }, // Star - { 4, 0 }, // Triple Banana - { 7, 0 }, // Fake Item - { 12, 0 }, // Banana - { 8, 6 }, // Green Shell - { 2, 12 }, // Red Shell - { 0, 4 }, // Triple Green Shell - { 0, 0 }, // Bob-omb - { 0, 2 }, // Blue Shell - { 0, 0 }, // Fire Flower - { 0, 0 }, // Triple Red Shell - { 0, 0 } // Lightning - }, //1st 2nd // - - // 3 Active Players - { //1st 2nd 3rd // - { 1, 0, 0 }, // Magnet - { 0, 1, 0 }, // Boo - { 4, 10, 0 }, // Mushroom - { 0, 4, 11 }, // Triple Mushroom - { 0, 0, 2 }, // Mega Mushroom - { 0, 0, 16 }, // Gold Mushroom - { 0, 0, 6 }, // Star - { 4, 0, 0 }, // Triple Banana - { 7, 2, 0 }, // Fake Item - { 13, 4, 0 }, // Banana - { 9, 4, 0 }, // Green Shell - { 2, 8, 0 }, // Red Shell - { 0, 3, 0 }, // Triple Green Shell - { 0, 2, 0 }, // Bob-omb - { 0, 2, 0 }, // Blue Shell - { 0, 0, 0 }, // Fire Flower - { 0, 0, 0 }, // Triple Red Shell - { 0, 0, 5 } // Lightning - }, //1st 2nd 3rd // - - // 4 Active Players - { //1st 2nd 3rd 4th // - { 1, 1, 0, 0 }, // Magnet - { 0, 3, 0, 0 }, // Boo - { 2, 10, 0, 0 }, // Mushroom - { 0, 3, 9, 10 }, // Triple Mushroom - { 0, 0, 3, 0 }, // Mega Mushroom - { 0, 0, 9, 16 }, // Gold Mushroom - { 0, 0, 0, 8 }, // Star - { 4, 0, 0, 0 }, // Triple Banana - { 7, 2, 0, 0 }, // Fake Item - { 14, 4, 0, 0 }, // Banana - { 9, 5, 0, 0 }, // Green Shell - { 3, 8, 6, 0 }, // Red Shell - { 0, 2, 4, 0 }, // Triple Green Shell - { 0, 2, 0, 0 }, // Bob-omb - { 0, 0, 3, 0 }, // Blue Shell - { 0, 0, 3, 0 }, // Fire Flower - { 0, 0, 3, 0 }, // Triple Red Shell - { 0, 0, 0, 6 } // Lightning - }, //1st 2nd 3rd 4th // - - // 5 Active Players - { //1st 2nd 3rd 4th 5th // - { 1, 2, 0, 0, 0 }, // Magnet - { 0, 3, 0, 0, 0 }, // Boo - { 0, 9, 7, 0, 0 }, // Mushroom - { 0, 0, 8, 12, 12 }, // Triple Mushroom - { 0, 0, 2, 2, 0 }, // Mega Mushroom - { 0, 0, 0, 9, 20 }, // Gold Mushroom - { 0, 0, 0, 3, 8 }, // Star - { 4, 2, 0, 0, 0 }, // Triple Banana - { 7, 3, 0, 0, 0 }, // Fake Item - { 15, 4, 0, 0, 0 }, // Banana - { 10, 6, 3, 0, 0 }, // Green Shell - { 3, 9, 6, 0, 0 }, // Red Shell - { 0, 2, 4, 0, 0 }, // Triple Green Shell - { 0, 0, 3, 0, 0 }, // Bob-omb - { 0, 0, 4, 0, 0 }, // Blue Shell - { 0, 0, 3, 4, 0 }, // Fire Flower - { 0, 0, 0, 3, 0 }, // Triple Red Shell - { 0, 0, 0, 7, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th // - - // 6 Active Players - { //1st 2nd 3rd 4th 5th 6th // - { 1, 2, 0, 0, 0, 0 }, // Magnet - { 0, 2, 2, 0, 0, 0 }, // Boo - { 0, 9, 8, 0, 0, 0 }, // Mushroom - { 0, 0, 5, 11, 14, 12 }, // Triple Mushroom - { 0, 0, 0, 2, 2, 0 }, // Mega Mushroom - { 0, 0, 0, 6, 11, 20 }, // Gold Mushroom - { 0, 0, 0, 0, 3, 8 }, // Star - { 4, 2, 0, 0, 0, 0 }, // Triple Banana - { 7, 3, 0, 0, 0, 0 }, // Fake Item - { 15, 5, 3, 0, 0, 0 }, // Banana - { 10, 6, 4, 0, 0, 0 }, // Green Shell - { 3, 9, 8, 6, 0, 0 }, // Red Shell - { 0, 2, 4, 5, 0, 0 }, // Triple Green Shell - { 0, 0, 3, 0, 0, 0 }, // Bob-omb - { 0, 0, 3, 3, 0, 0 }, // Blue Shell - { 0, 0, 0, 4, 0, 0 }, // Fire Flower - { 0, 0, 0, 3, 3, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 7, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th 6th // - - // 7 Active Players - { //1st 2nd 3rd 4th 5th 6th 7th // - { 1, 2, 0, 0, 0, 0, 0 }, // Magnet - { 0, 2, 3, 0, 0, 0, 0 }, // Boo - { 0, 8, 8, 8, 0, 0, 0 }, // Mushroom - { 0, 0, 3, 8, 14, 15, 12 }, // Triple Mushroom - { 0, 0, 0, 2, 4, 2, 0 }, // Mega Mushroom - { 0, 0, 0, 0, 7, 12, 20 }, // Gold Mushroom - { 0, 0, 0, 0, 0, 3, 8 }, // Star - { 4, 2, 0, 0, 0, 0, 0 }, // Triple Banana - { 7, 4, 2, 0, 0, 0, 0 }, // Fake Item - { 15, 5, 4, 0, 0, 0, 0 }, // Banana - { 10, 6, 4, 0, 0, 0, 0 }, // Green Shell - { 3, 10, 8, 7, 0, 0, 0 }, // Red Shell - { 0, 1, 4, 6, 4, 0, 0 }, // Triple Green Shell - { 0, 0, 3, 0, 0, 0, 0 }, // Bob-omb - { 0, 0, 1, 3, 3, 0, 0 }, // Blue Shell - { 0, 0, 0, 3, 5, 0, 0 }, // Fire Flower - { 0, 0, 0, 3, 3, 0, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 0, 8, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th 6th 7th // - - // 8 Active Players - { //1st 2nd 3rd 4th 5th 6th 7th 8th // - { 1, 2, 0, 0, 0, 0, 0, 0 }, // Magnet - { 0, 2, 3, 0, 0, 0, 0, 0 }, // Boo - { 0, 8, 8, 8, 0, 0, 0, 0 }, // Mushroom - { 0, 0, 3, 7, 12, 15, 11, 7 }, // Triple Mushroom - { 0, 0, 0, 2, 4, 4, 2, 0 }, // Mega Mushroom - { 0, 0, 0, 0, 4, 8, 15, 24 }, // Gold Mushroom - { 0, 0, 0, 0, 0, 2, 5, 9 }, // Star - { 4, 2, 0, 0, 0, 0, 0, 0 }, // Triple Banana - { 7, 4, 2, 0, 0, 0, 0, 0 }, // Fake Item - { 15, 5, 4, 0, 0, 0, 0, 0 }, // Banana - { 10, 7, 5, 2, 0, 0, 0, 0 }, // Green Shell - { 3, 9, 8, 7, 5, 0, 0, 0 }, // Red Shell - { 0, 1, 4, 6, 4, 0, 0, 0 }, // Triple Green Shell - { 0, 0, 2, 3, 0, 0, 0, 0 }, // Bob-omb - { 0, 0, 1, 3, 3, 0, 0, 0 }, // Blue Shell - { 0, 0, 0, 2, 5, 3, 0, 0 }, // Fire Flower - { 0, 0, 0, 0, 3, 3, 0, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 0, 5, 7, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th 6th 7th 8th // - - // 9 Active Players - { //1st 2nd 3rd 4th 5th 6th 7th 8th 9th // - { 1, 3, 2, 0, 0, 0, 0, 0, 0 }, // Magnet - { 0, 2, 2, 3, 0, 0, 0, 0, 0 }, // Boo - { 0, 7, 9, 10, 8, 0, 0, 0, 0 }, // Mushroom - { 0, 0, 3, 7, 10, 17, 16, 12, 0 }, // Triple Mushroom - { 0, 0, 0, 0, 2, 4, 6, 0, 0 }, // Mega Mushroom - { 0, 0, 0, 0, 0, 4, 8, 15, 29 }, // Gold Mushroom - { 0, 0, 0, 0, 0, 0, 3, 6, 11 }, // Star - { 4, 2, 0, 0, 0, 0, 0, 0, 0 }, // Triple Banana - { 7, 4, 2, 0, 0, 0, 0, 0, 0 }, // Fake Item - { 15, 6, 5, 2, 0, 0, 0, 0, 0 }, // Banana - { 10, 7, 5, 2, 0, 0, 0, 0, 0 }, // Green Shell - { 3, 9, 8, 7, 6, 0, 0, 0, 0 }, // Red Shell - { 0, 0, 2, 4, 6, 4, 0, 0, 0 }, // Triple Green Shell - { 0, 0, 2, 3, 0, 0, 0, 0, 0 }, // Bob-omb - { 0, 0, 0, 2, 3, 3, 0, 0, 0 }, // Blue Shell - { 0, 0, 0, 0, 3, 5, 0, 0, 0 }, // Fire Flower - { 0, 0, 0, 0, 2, 3, 2, 0, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 0, 0, 5, 7, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th 6th 7th 8th 9th // - - // 10 Active Players - { //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t // - { 1, 3, 2, 0, 0, 0, 0, 0, 0, 0 }, // Magnet - { 0, 2, 3, 3, 0, 0, 0, 0, 0, 0 }, // Boo - { 0, 7, 8, 10, 8, 0, 0, 0, 0, 0 }, // Mushroom - { 0, 0, 2, 5, 9, 14, 16, 14, 9, 0 }, // Triple Mushroom - { 0, 0, 0, 0, 2, 4, 6, 5, 0, 0 }, // Mega Mushroom - { 0, 0, 0, 0, 0, 4, 5, 10, 16, 28 }, // Gold Mushroom - { 0, 0, 0, 0, 0, 0, 2, 4, 7, 12 }, // Star - { 4, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, // Triple Banana - { 7, 4, 2, 0, 0, 0, 0, 0, 0, 0 }, // Fake Item - { 15, 6, 5, 2, 0, 0, 0, 0, 0, 0 }, // Banana - { 10, 7, 6, 4, 2, 0, 0, 0, 0, 0 }, // Green Shell - { 3, 9, 8, 7, 6, 3, 0, 0, 0, 0 }, // Red Shell - { 0, 0, 2, 4, 6, 4, 0, 0, 0, 0 }, // Triple Green Shell - { 0, 0, 2, 3, 1, 0, 0, 0, 0, 0 }, // Bob-omb - { 0, 0, 0, 2, 3, 3, 0, 0, 0, 0 }, // Blue Shell - { 0, 0, 0, 0, 3, 6, 4, 0, 0, 0 }, // Fire Flower - { 0, 0, 0, 0, 0, 2, 3, 1, 0, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 0, 0, 4, 6, 8, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t // - - // 11 Active Players - { //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t // - { 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, // Magnet - { 0, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0 }, // Boo - { 0, 6, 8, 9, 8, 6, 0, 0, 0, 0, 0 }, // Mushroom - { 0, 0, 2, 5, 9, 10, 15, 17, 14, 10, 0 }, // Triple Mushroom - { 0, 0, 0, 0, 2, 3, 6, 6, 4, 0, 0 }, // Mega Mushroom - { 0, 0, 0, 0, 0, 0, 4, 5, 11, 15, 18 }, // Gold Mushroom - { 0, 0, 0, 0, 0, 0, 0, 3, 5, 7, 12 }, // Star - { 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Triple Banana - { 7, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0 }, // Fake Item - { 15, 7, 5, 2, 0, 0, 0, 0, 0, 0, 0 }, // Banana - { 10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0 }, // Green Shell - { 3, 9, 8, 7, 6, 4, 0, 0, 0, 0, 0 }, // Red Shell - { 0, 0, 2, 4, 6, 6, 5, 0, 0, 0, 0 }, // Triple Green Shell - { 0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0 }, // Bob-omb - { 0, 0, 0, 2, 3, 3, 2, 0, 0, 0, 0 }, // Blue Shell - { 0, 0, 0, 0, 3, 6, 5, 3, 0, 0, 0 }, // Fire Flower - { 0, 0, 0, 0, 0, 2, 3, 2, 0, 0, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 0, 0, 0, 4, 6, 8, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t // - - // 12 Active Players - { //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t // - { 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Magnet - { 0, 2, 3, 3, 2, 0, 0, 0, 0, 0, 0, 0 }, // Boo - { 0, 6, 8, 9, 10, 8, 0, 0, 0, 0, 0, 0 }, // Mushroom - { 0, 0, 1, 4, 9, 11, 15, 17, 15, 11, 6, 0 }, // Triple Mushroom - { 0, 0, 0, 0, 0, 2, 4, 6, 7, 5, 0, 0 }, // Mega Mushroom - { 0, 0, 0, 0, 0, 0, 3, 5, 9, 13, 18, 28 }, // Gold Mushroom - { 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 12 }, // Star - { 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Triple Banana - { 7, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, // Fake Item - { 15, 7, 6, 3, 2, 0, 0, 0, 0, 0, 0, 0 }, // Banana - { 10, 7, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0 }, // Green Shell - { 3, 9, 8, 7, 6, 5, 2, 0, 0, 0, 0, 0 }, // Red Shell - { 0, 0, 2, 4, 5, 7, 5, 3, 0, 0, 0, 0 }, // Triple Green Shell - { 0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, // Bob-omb - { 0, 0, 0, 2, 3, 3, 3, 2, 0, 0, 0, 0 }, // Blue Shell - { 0, 0, 0, 0, 0, 2, 5, 4, 0, 0, 0, 0 }, // Fire Flower - { 0, 0, 0, 0, 0, 2, 3, 3, 2, 0, 0, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 8, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t // - - // 13 Active Players - { //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t 13t // - { 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Magnet - { 0, 2, 4, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, // Boo - { 0, 5, 8, 9, 10, 8, 5, 0, 0, 0, 0, 0, 0 }, // Mushroom - { 0, 0, 0, 2, 6, 9, 11, 15, 16, 14, 11, 10, 0 }, // Triple Mushroom - { 0, 0, 0, 0, 0, 2, 5, 6, 8, 6, 3, 0, 0 }, // Mega Mushroom - { 0, 0, 0, 0, 0, 0, 0, 4, 5, 8, 11, 20, 27 }, // Gold Mushroom - { 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 10, 13 }, // Star - { 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Triple Banana - { 7, 4, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Fake Item - { 15, 7, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, // Banana - { 10, 8, 6, 4, 3, 2, 0, 0, 0, 0, 0, 0, 0 }, // Green Shell - { 3, 9, 8, 7, 6, 5, 2, 0, 0, 0, 0, 0, 0 }, // Red Shell - { 0, 0, 2, 4, 5, 7, 6, 5, 0, 0, 0, 0, 0 }, // Triple Green Shell - { 0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0, 0 }, // Bob-omb - { 0, 0, 0, 2, 3, 3, 3, 2, 0, 0, 0, 0, 0 }, // Blue Shell - { 0, 0, 0, 0, 0, 3, 6, 5, 3, 0, 0, 0, 0 }, // Fire Flower - { 0, 0, 0, 0, 0, 0, 2, 3, 3, 2, 0, 0, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 10, 0, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t 13t // - - // 14 Active Players - { //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t 13t 14t // - { 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Magnet - { 0, 2, 4, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Boo - { 0, 5, 7, 9, 11, 8, 5, 0, 0, 0, 0, 0, 0, 0 }, // Mushroom - { 0, 0, 0, 2, 6, 9, 10, 12, 17, 15, 14, 12, 8, 0 }, // Triple Mushroom - { 0, 0, 0, 0, 0, 2, 5, 6, 8, 7, 3, 0, 0, 0 }, // Mega Mushroom - { 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 22, 27 }, // Gold Mushroom - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 10, 13 }, // Star - { 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Triple Banana - { 7, 4, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Fake Item - { 15, 7, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Banana - { 10, 8, 6, 4, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0 }, // Green Shell - { 3, 10, 8, 7, 6, 5, 3, 2, 0, 0, 0, 0, 0, 0 }, // Red Shell - { 0, 0, 2, 4, 5, 7, 6, 5, 2, 0, 0, 0, 0, 0 }, // Triple Green Shell - { 0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, // Bob-omb - { 0, 0, 0, 0, 2, 3, 4, 3, 1, 0, 0, 0, 0, 0 }, // Blue Shell - { 0, 0, 0, 0, 0, 3, 5, 6, 4, 2, 0, 0, 0, 0 }, // Fire Flower - { 0, 0, 0, 0, 0, 0, 2, 3, 3, 3, 2, 0, 0, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 10, 0, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t 13t 14t // - - // 15 Active Players - { //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t 13t 14t 15t // - { 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Magnet - { 0, 2, 4, 4, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Boo - { 0, 4, 6, 8, 10, 9, 8, 4, 0, 0, 0, 0, 0, 0, 0 }, // Mushroom - { 0, 0, 0, 2, 4, 8, 11, 13, 17, 18, 15, 13, 9, 8, 0 }, // Triple Mushroom - { 0, 0, 0, 0, 0, 0, 2, 5, 6, 8, 7, 3, 0, 0, 0 }, // Mega Mushroom - { 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 22, 27 }, // Gold Mushroom - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 7, 10, 13 }, // Star - { 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Triple Banana - { 7, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Fake Item - { 15, 8, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Banana - { 10, 8, 6, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, // Green Shell - { 3, 10, 9, 8, 7, 6, 4, 3, 0, 0, 0, 0, 0, 0, 0 }, // Red Shell - { 0, 0, 2, 4, 5, 7, 6, 5, 3, 0, 0, 0, 0, 0, 0 }, // Triple Green Shell - { 0, 0, 0, 2, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, // Bob-omb - { 0, 0, 0, 0, 2, 3, 4, 3, 2, 0, 0, 0, 0, 0, 0 }, // Blue Shell - { 0, 0, 0, 0, 0, 0, 3, 5, 6, 2, 0, 0, 0, 0, 0 }, // Fire Flower - { 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 2, 0, 0, 0, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 8, 11, 0, 0 } // Lightning - }, //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t 13t 14t 15t // - - // 16 Active Players - { //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t 13t 14t 15t 16t // - { 1, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Magnet - { 0, 2, 4, 4, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Boo - { 0, 4, 6, 8, 10, 9, 7, 4, 0, 0, 0, 0, 0, 0, 0, 0 }, // Mushroom - { 0, 0, 0, 2, 4, 7, 10, 13, 16, 18, 15, 14, 12, 8, 7, 0 }, // Triple Mushroom - { 0, 0, 0, 0, 0, 0, 2, 5, 6, 8, 8, 5, 2, 0, 0, 0 }, // Mega Mushroom - { 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 8, 11, 13, 14, 23, 27 }, // Gold Mushroom - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 7, 10, 13 }, // Star - { 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Triple Banana - { 7, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Fake Item - { 15, 8, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Banana - { 10, 8, 6, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Green Shell - { 3, 10, 9, 8, 7, 6, 5, 3, 2, 0, 0, 0, 0, 0, 0, 0 }, // Red Shell - { 0, 0, 2, 4, 5, 8, 7, 5, 3, 2, 0, 0, 0, 0, 0, 0 }, // Triple Green Shell - { 0, 0, 0, 2, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Bob-omb - { 0, 0, 0, 0, 2, 3, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0 }, // Blue Shell - { 0, 0, 0, 0, 0, 0, 3, 5, 6, 4, 2, 0, 0, 0, 0, 0 }, // Fire Flower - { 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 3, 2, 0, 0, 0, 0 }, // Triple Red Shell - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 8, 11, 0, 0 } // Lightning - } //1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10t 11t 12t 13t 14t 15t 16t // -}; -*/ - // Less ugly 2D arrays -static INT32 K_KartItemOddsDistance_Retro[NUMKARTITEMS][9] = +static INT32 K_KartItemOddsDistance_Retro[NUMKARTRESULTS][9] = { //P-Odds 0 1 2 3 4 5 6 7 8 - /*Magnet*/ { 0, 1, 2, 0, 0, 0, 0, 0, 0 }, // Magnet - /*Boo*/ { 0, 0, 2, 2, 1, 0, 0, 0, 0 }, // Boo - /*Mushroom*/ { 1, 0, 0, 3, 7, 5, 0, 0, 0 }, // Mushroom - /*Triple Mushroom*/ { 0, 0, 0, 0, 3,10, 6, 4, 0 }, // Triple Mushroom - /*Mega Mushroom*/ { 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // Mega Mushroom - /*Gold Mushroom*/ { 0, 0, 0, 0, 0, 0, 4, 6, 8 }, // Gold Mushroom - /*Star*/ { 0, 0, 0, 0, 0, 1, 6, 8,12 }, // Star - - /*Triple Banana*/ { 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // Triple Banana - /*Fake Item*/ { 0, 4, 2, 1, 0, 0, 0, 0, 0 }, // Fake Item + /*Sneaker*/ { 1, 0, 0, 3, 7, 5, 0, 0, 0 }, // Sneaker + /*Rocket Sneaker*/ { 0, 0, 0, 0, 0, 0, 4, 6, 8 }, // Rocket Sneaker + /*Invincibility*/ { 0, 0, 0, 0, 0, 1, 6, 8,12 }, // Invincibility /*Banana*/ { 0, 9, 4, 2, 1, 0, 0, 0, 0 }, // Banana - /*Green Shell*/ { 0, 6, 4, 3, 2, 0, 0, 0, 0 }, // Green Shell - /*Red Shell*/ { 0, 0, 3, 2, 2, 1, 0, 0, 0 }, // Red Shell - /*Triple Green Shell*/ { 0, 0, 0, 1, 1, 1, 0, 0, 0 }, // Triple Green Shell - /*Bob-omb*/ { 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Bob-omb - /*Blue Shell*/ { 0, 0, 0, 0, 0, 1, 2, 0, 0 }, // Blue Shell - /*Fire Flower*/ { 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Fire Flower - /*Triple Red Shell*/ { 0, 0, 0, 1, 1, 0, 0, 0, 0 }, // Triple Red Shell - /*Lightning*/ { 0, 0, 0, 0, 0, 0, 1, 2, 0 }, // Lightning + /*Fake Item*/ { 0, 4, 2, 1, 0, 0, 0, 0, 0 }, // Fake Item + /*Orbinaut*/ { 0, 6, 4, 3, 2, 0, 0, 0, 0 }, // Orbinaut + /*Jawz*/ { 0, 0, 3, 2, 2, 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 + /*Self-Propelled Bomb*/ { 0, 0, 0, 0, 0, 1, 2, 0, 0 }, // Self-Propelled Bomb + /*Size Up*/ { 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // Size Up + /*Size Down*/ { 0, 0, 0, 0, 0, 0, 1, 2, 0 }, // Size Down + /*Lightning Shield*/ { 0, 1, 2, 0, 0, 0, 0, 0, 0 }, // Lightning Shield + /*Hyudoro*/ { 0, 0, 2, 2, 1, 0, 0, 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 - /*Feather*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0 } // Feather + /*Sneaker x3*/ { 0, 0, 0, 0, 3,10, 6, 4, 0 }, // Sneaker x3 + /*Banana x3*/ { 0, 0, 1, 1, 0, 0, 0, 0, 0 }, // Banana x3 + /*Orbinaut x3*/ { 0, 0, 0, 1, 1, 1, 0, 0, 0 }, // Orbinaut x3 + /*Jawz x2*/ { 0, 0, 0, 1, 1, 0, 0, 0, 0 } // Jawz x2 }; -static INT32 K_KartItemOddsBalloons[NUMKARTITEMS][5] = +static INT32 K_KartItemOddsBalloons[NUMKARTRESULTS][5] = { //P-Odds 0 1 2 3 4 - /*Magnet*/ { 0, 0, 0, 0, 0 }, // Magnet - /*Boo*/ { 0, 1, 3, 2, 0 }, // Boo - /*Mushroom*/ { 1, 2, 5, 1, 0 }, // Mushroom - /*Triple Mushroom*/ { 0, 0, 0, 0, 0 }, // Triple Mushroom - /*Mega Mushroom*/ { 1, 1, 0, 0, 0 }, // Mega Mushroom - /*Gold Mushroom*/ { 0, 0, 0, 0, 0 }, // Gold Mushroom - /*Star*/ { 1, 1, 0, 0, 0 }, // Star - - /*Triple Banana*/ { 0, 3, 1, 1, 0 }, // Triple Banana - /*Fake Item*/ { 0, 0, 2, 2, 1 }, // Fake Item + /*Sneaker*/ { 1, 2, 5, 1, 0 }, // Sneaker + /*Rocket Sneaker*/ { 0, 0, 0, 0, 0 }, // Rocket Sneaker + /*Invincibility*/ { 1, 1, 0, 0, 0 }, // Invincibility /*Banana*/ { 0, 0, 3, 1, 1 }, // Banana - /*Green Shell*/ { 0, 0, 5, 3, 1 }, // Green Shell - /*Red Shell*/ { 0, 3, 3, 1, 0 }, // Red Shell - /*Triple Green Shell*/ { 0, 3, 3, 1, 0 }, // Triple Green Shell - /*Bob-omb*/ { 0, 3, 3, 0, 0 }, // Bob-omb - /*Blue Shell*/ { 0, 0, 0, 0, 0 }, // Blue Shell - /*Fire Flower*/ { 0, 3, 3, 0, 0 }, // Fire Flower - /*Triple Red Shell*/ { 1, 1, 0, 0, 0 }, // Triple Red Shell - /*Lightning*/ { 0, 0, 0, 0, 0 }, // Lightning + /*Fake Item*/ { 0, 0, 2, 2, 1 }, // Fake Item + /*Orbinaut*/ { 0, 0, 5, 3, 1 }, // Orbinaut + /*Jawz*/ { 0, 3, 3, 1, 0 }, // Jawz + /*Mine*/ { 0, 3, 3, 0, 0 }, // Mine + /*Ballhog*/ { 0, 3, 3, 0, 0 }, // Ballhog + /*Self-Propelled Bomb*/ { 0, 0, 0, 0, 0 }, // Self-Propelled Bomb + /*Size Up*/ { 1, 1, 0, 0, 0 }, // Size Up + /*Size Down*/ { 0, 0, 0, 0, 0 }, // Size Down + /*Lightning Shield*/ { 0, 0, 0, 0, 0 }, // Lightning Shield + /*Hyudoro*/ { 0, 1, 1, 1, 0 }, // Hyudoro + /*Pogo Spring*/ { 0, 0, 3, 2, 1 }, // Pogo Spring + /*Kitchen Sink*/ { 0, 0, 0, 0, 0 }, // Kitchen Sink - /*Feather*/ { 0, 0, 3, 2, 1 } // Feather + /*Sneaker x3*/ { 0, 0, 0, 0, 0 }, // Sneaker x3 + /*Orbinaut x3*/ { 0, 3, 3, 1, 0 }, // Orbinaut x3 + /*Banana x3*/ { 0, 3, 1, 1, 0 }, // Banana x3 + /*Jawz x2*/ { 1, 1, 0, 0, 0 } // Jawz x2 }; /** \brief Item Roulette for Kart \param player player \param getitem what item we're looking for - \param retrokart whether or not we're getting old or new item odds \return void */ -static void K_KartGetItemResult(player_t *player, fixed_t getitem, boolean retrokart) +static void K_KartGetItemResult(player_t *player, INT8 getitem) { switch (getitem) { - case 1: // Magnet - player->kartstuff[k_magnet] = 1; + // Do the special roulette numbers first, then do the + case KRITEM_TRIPLESNEAKER: // Sneaker x3 + player->kartstuff[k_itemtype] = KITEM_SNEAKER; + player->kartstuff[k_itemamount] = 3; break; - case 2: // Boo - player->kartstuff[k_boo] = 1; + case KRITEM_TRIPLEBANANA: // Banana x3 + player->kartstuff[k_itemtype] = KITEM_BANANA; + player->kartstuff[k_itemamount] = 3; break; - case 4: // Triple Mushroom - player->kartstuff[k_mushroom] = 4; + case KRITEM_TRIPLEORBINAUT: // Orbinaut x3 + player->kartstuff[k_itemtype] = KITEM_ORBINAUT; + player->kartstuff[k_itemamount] = 3; break; - case 5: // Mega Mushroom - player->kartstuff[k_megashroom] = 1; + case KRITEM_DUALJAWZ: // Jawz x2 + player->kartstuff[k_itemtype] = KITEM_JAWZ; + player->kartstuff[k_itemamount] = 2; break; - case 6: // Gold Mushroom - player->kartstuff[k_goldshroom] = 1; - break; - case 7: // Star - player->kartstuff[k_star] = 1; - break; - case 8: // Triple Banana - player->kartstuff[k_triplebanana] |= 8; - break; - case 9: // Fake Item - player->kartstuff[k_fakeitem] |= 2; - break; - case 10: // Banana - player->kartstuff[k_banana] |= 2; - break; - case 11: // Green Shell - player->kartstuff[k_greenshell] |= 2; - break; - case 12: // Red Shell - player->kartstuff[k_redshell] |= 2; - break; - case 13: // Triple Green Shell - or - Laser Wisp - if (retrokart) - player->kartstuff[k_triplegreenshell] |= 8; + default: + if (getitem <= 0 || getitem >= NUMKARTRESULTS) // Sad (Fallback) + { + if (getitem != 0) + CONS_Printf("ERROR: P_KartGetItemResult - Item roulette gave bad item (%d) :(\n", getitem); + player->kartstuff[k_itemtype] = KITEM_SAD; + } else - player->kartstuff[k_laserwisp] = 1; - break; - case 14: // Bob-omb - or - 3x Orbinaut (Triple Green Shell) - if (retrokart) - player->kartstuff[k_bobomb] |= 2; - else - player->kartstuff[k_triplegreenshell] |= 8; - break; - case 15: // Blue Shell - or - Specialstage Mines (Bob-omb) - if (retrokart) - player->kartstuff[k_blueshell] = 1; - else - player->kartstuff[k_bobomb] |= 2; - break; - case 16: // Fire Flower - or - Deton (Blue Shell) - if (retrokart) - player->kartstuff[k_fireflower] = 1; - else - player->kartstuff[k_blueshell] |= 4; - break; - case 17: // Triple Red Shell - or - 2x Jaws - if (retrokart) - player->kartstuff[k_tripleredshell] |= 8; - else - player->kartstuff[k_jaws] = 1; - break; - case 18: // Lightning - player->kartstuff[k_lightning] = 1; - break; - case 19: // Feather - player->kartstuff[k_feather] |= 1; - break; - default: // Mushroom - Doing it here as a fail-safe - if (getitem != 3) - CONS_Printf("ERROR: P_KartGetItemResult - Item roulette gave bad item (%d), giving Mushroom instead.\n", getitem); - player->kartstuff[k_mushroom] = 1; + player->kartstuff[k_itemtype] = getitem; + player->kartstuff[k_itemamount] = 1; break; } } -/** \brief Item Roulette for Kart - - \param player player object passed from P_KartPlayerThink - - \return void -/ -static void K_KartItemRouletteByPosition(player_t *player, ticcmd_t *cmd) +static INT32 K_KartGetItemOdds(UINT8 pos, INT8 item, player_t *player) { + INT32 newodds; INT32 i; - INT32 pingame = 0, pexiting = 0; - INT32 roulettestop; - INT32 prandom; - INT32 ppos = player->kartstuff[k_position] - 1; - INT32 spawnchance[NUMKARTITEMS * NUMKARTODDS]; - INT32 chance = 0, numchoices = 0; + UINT8 pingame = 0, pexiting = 0; - - // This makes the roulette cycle through items - if this is 0, you shouldn't be here. - if (player->kartstuff[k_itemroulette]) - player->kartstuff[k_itemroulette]++; + if (gametype == GT_MATCH) + newodds = K_KartItemOddsBalloons[item-1][pos]; else - return; + newodds = K_KartItemOddsDistance_Retro[item-1][pos]; - // This makes the roulette produce the random noises. - if ((player->kartstuff[k_itemroulette] % 3) == 1 && P_IsLocalPlayer(player)) - S_StartSound(NULL,sfx_mkitm1 + ((player->kartstuff[k_itemroulette] / 3) % 8)); - - // Initializes existing spawnchance values - for (i = 0; i < (NUMKARTITEMS * NUMKARTODDS); i++) - spawnchance[i] = 0; - - // Gotta check how many players are active at this moment. for (i = 0; i < MAXPLAYERS; i++) { if (playeringame[i] && !players[i].spectator) @@ -871,112 +447,85 @@ static void K_KartItemRouletteByPosition(player_t *player, ticcmd_t *cmd) pexiting++; } - roulettestop = (TICRATE*1) + (3*(pingame - player->kartstuff[k_position])); - - // If the roulette finishes or the player presses BT_ATTACK, stop the roulette and calculate the item. - // I'm returning via the exact opposite, however, to forgo having another bracket embed. Same result either way, I think. - // Finally, if you get past this check, now you can actually start calculating what item you get. - if (!(player->kartstuff[k_itemroulette] >= (TICRATE*3) - || ((cmd->buttons & BT_ATTACK) && player->kartstuff[k_itemroulette] >= roulettestop))) - return; - - if (cmd->buttons & BT_ATTACK) - player->pflags |= PF_ATTACKDOWN; - - player->kartstuff[k_itemclose] = 0; // Reset the item window closer. - - // Tiny catcher in case player position is unset. - if (ppos < 0) ppos = 0; - -#define SETITEMRESULT(pos, numplayers, itemnum) \ - for (chance = 0; chance < K_KartItemOddsPosition_Retro[numplayers-1][itemnum-1][pos]; chance++) spawnchance[numchoices++] = itemnum - - // Check the game type to differentiate odds. - //if (gametype == GT_RETRO) - //{ - if (cv_magnet.value) SETITEMRESULT(ppos, pingame, 1); // Magnet - if (cv_boo.value) SETITEMRESULT(ppos, pingame, 2); // Boo - if (cv_mushroom.value) SETITEMRESULT(ppos, pingame, 3); // Mushroom - if (cv_mushroom.value) SETITEMRESULT(ppos, pingame, 4); // Triple Mushroom - if (cv_megashroom.value) SETITEMRESULT(ppos, pingame, 5); // Mega Mushroom - if (cv_goldshroom.value) SETITEMRESULT(ppos, pingame, 6); // Gold Mushroom - if (cv_star.value) SETITEMRESULT(ppos, pingame, 7); // Star - if (cv_triplebanana.value) SETITEMRESULT(ppos, pingame, 8); // Triple Banana - if (cv_fakeitem.value) SETITEMRESULT(ppos, pingame, 9); // Fake Item - if (cv_banana.value) SETITEMRESULT(ppos, pingame, 10); // Banana - if (cv_greenshell.value) SETITEMRESULT(ppos, pingame, 11); // Green Shell - if (cv_redshell.value) SETITEMRESULT(ppos, pingame, 12); // Red Shell - if (cv_triplegreenshell.value) SETITEMRESULT(ppos, pingame, 13); // Triple Green Shell - if (cv_bobomb.value) SETITEMRESULT(ppos, pingame, 14); // Bob-omb - if (cv_blueshell.value && pexiting == 0) SETITEMRESULT(ppos, pingame, 15); // Blue Shell - //if (cv_fireflower.value) SETITEMRESULT(ppos, pingame, 16); // Fire Flower - if (cv_tripleredshell.value) SETITEMRESULT(ppos, pingame, 17); // Triple Red Shell - if (cv_lightning.value && pingame > pexiting) SETITEMRESULT(ppos, pingame, 18); // Lightning - - prandom = P_RandomKey(numchoices); - - // Award the player whatever power is rolled - if (numchoices > 0) - K_KartGetItemResult(player, spawnchance[prandom], true); - else - CONS_Printf("ERROR: P_KartItemRoulette - There were no choices given by the roulette (ppos = %d).\n", ppos); - //} - //else if (gametype == GT_NEO) + switch (item) { - if (cv_magnet.value) SETITEMRESULT(ppos, pingame, 1) // Electro-Shield - if (cv_boo.value) SETITEMRESULT(ppos, pingame, 2) // S3K Ghost - if (cv_mushroom.value) SETITEMRESULT(ppos, pingame, 3) // Speed Shoe - if (cv_mushroom.value) SETITEMRESULT(ppos, pingame, 4) // Triple Speed Shoe - if (cv_megashroom.value) SETITEMRESULT(ppos, pingame, 5) // Size-Up Monitor - if (cv_goldshroom.value) SETITEMRESULT(ppos, pingame, 6) // Rocket Shoe - if (cv_star.value) SETITEMRESULT(ppos, pingame, 7) // Invincibility - if (cv_triplebanana.value) SETITEMRESULT(ppos, pingame, 8) // Triple Banana - if (cv_fakeitem.value) SETITEMRESULT(ppos, pingame, 9) // Eggman Monitor - if (cv_banana.value) SETITEMRESULT(ppos, pingame, 10) // Banana - if (cv_greenshell.value) SETITEMRESULT(ppos, pingame, 11) // 1x Orbinaut - if (cv_redshell.value) SETITEMRESULT(ppos, pingame, 12) // 1x Jaws - if (cv_laserwisp.value) SETITEMRESULT(ppos, pingame, 13) // Laser Wisp - if (cv_triplegreenshell.value) SETITEMRESULT(ppos, pingame, 14) // 3x Orbinaut - if (cv_bobomb.value) SETITEMRESULT(ppos, pingame, 15) // Specialstage Mines - if (cv_blueshell.value && pexiting == 0) SETITEMRESULT(ppos, pingame, 16) // Deton - if (cv_jaws.value) SETITEMRESULT(ppos, pingame, 17) // 2x Jaws - if (cv_lightning.value && pingame > pexiting) SETITEMRESULT(ppos, pingame, 18) // Size-Down Monitor - - prandom = P_RandomKey(numchoices); - - // Award the player whatever power is rolled - if (numchoices > 0) - K_KartGetItemResult(player, spawnchance[prandom], false) - else - CONS_Printf("ERROR: P_KartItemRoulette - There were no choices given by the roulette (ppos = %d).\n", ppos); + case KITEM_SNEAKER: + if (!cv_sneaker.value && !modeattacking) newodds = 0; + break; + case KITEM_ROCKETSNEAKER: + if (franticitems) newodds *= 2; + if (!cv_rocketsneaker.value) newodds = 0; + break; + case KITEM_INVINCIBILITY: + if (franticitems) newodds *= 2; + if (!cv_invincibility.value || player->kartstuff[k_poweritemtimer]) newodds = 0; + break; + case KITEM_BANANA: + if (!cv_banana.value) newodds = 0; + break; + case KITEM_FAKE: + if (!cv_fakeitem.value) newodds = 0; + break; + case KITEM_ORBINAUT: + if (!cv_orbinaut.value) newodds = 0; + break; + case KITEM_JAWZ: + if (franticitems) newodds *= 2; + if (!cv_jawz.value) newodds = 0; + break; + case KITEM_MINE: + if (franticitems) newodds *= 2; + if (!cv_mine.value) newodds = 0; + break; + case KITEM_BALLHOG: + if (franticitems) newodds *= 2; + if (!cv_ballhog.value) newodds = 0; + break; + case KITEM_SPB: + if (franticitems) newodds *= 2; + if (!cv_selfpropelledbomb.value || pexiting <= 0) newodds = 0; + break; + case KITEM_SIZEUP: + if (franticitems) newodds *= 2; + if (!cv_sizeup.value || player->kartstuff[k_poweritemtimer]) newodds = 0; + break; + case KITEM_SIZEDOWN: + if (franticitems) newodds *= 2; + if (!cv_sizedown.value || pingame-1 <= pexiting) newodds = 0; + break; + case KITEM_LIGHTNINGSHIELD: + if (franticitems) newodds *= 2; + if (!cv_lightningshield.value || gametype != GT_RACE) newodds = 0; + break; + case KITEM_HYUDORO: + if (!cv_hyudoro.value) newodds = 0; + break; + case KITEM_POGOSPRING: + if (!cv_pogospring.value) newodds = 0; + break; + /*case KITEM_KITCHENSINK: + if (franticitems) newodds *= 2; + if (!cv_kitchensink.value) newodds = 0; + break;*/ + case KRITEM_TRIPLESNEAKER: + if (franticitems) newodds *= 2; + if (!cv_triplesneaker.value) newodds = 0; + break; + case KRITEM_TRIPLEBANANA: + if (franticitems) newodds *= 2; + if (!cv_triplebanana.value) newodds = 0; + break; + case KRITEM_TRIPLEORBINAUT: + if (franticitems) newodds *= 2; + if (!cv_tripleorbinaut.value) newodds = 0; + break; + case KRITEM_DUALJAWZ: + if (franticitems) newodds *= 2; + if (!cv_dualjawz.value) newodds = 0; + break; + default: + break; } - else - CONS_Printf("ERROR: P_KartItemRoulette - There's no applicable game type!\n"); - // - -#undef SETITEMRESULT - - player->kartstuff[k_itemroulette] = 0; // Since we're done, clear the roulette number - - if (P_IsLocalPlayer(player)) - S_StartSound(NULL, sfx_mkitmF); -}*/ - -//} - -static INT32 K_KartGetItemOdds(INT32 pos, INT32 itemnum) -{ - INT32 newodds; - - if (gametype == GT_MATCH) - newodds = K_KartItemOddsBalloons[itemnum-1][pos]; - else - newodds = K_KartItemOddsDistance_Retro[itemnum-1][pos]; - - if (franticitems && (itemnum == 1 || itemnum == 4 || itemnum == 5 || itemnum == 6 - || itemnum == 7 || itemnum == 8 || itemnum == 12 || itemnum == 13 || itemnum == 14 || itemnum == 15 - || itemnum == 16 || itemnum == 17 || itemnum == 18)) - newodds *= 2; return newodds; } @@ -985,15 +534,17 @@ static INT32 K_KartGetItemOdds(INT32 pos, INT32 itemnum) static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd) { + const INT32 distvar = (64*14); INT32 i; - INT32 pingame = 0, pexiting = 0; - INT32 roulettestop; - INT32 prandom; + UINT8 pingame = 0; + UINT8 roulettestop; INT32 pdis = 0, useodds = 0; - INT32 spawnchance[NUMKARTITEMS * NUMKARTODDS]; + INT32 spawnchance[NUMKARTRESULTS * NUMKARTODDS]; INT32 chance = 0, numchoices = 0; - INT32 distvar = (64*14); INT32 avgballoon = 0; + UINT8 oddsvalid[9]; + UINT8 disttable[14]; + UINT8 distlen = 0; // This makes the roulette cycle through items - if this is 0, you shouldn't be here. if (player->kartstuff[k_itemroulette]) @@ -1001,6 +552,18 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd) else return; + // Gotta check how many players are active at this moment. + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i] && !players[i].spectator) + pingame++; + if (players[i].kartstuff[k_balloon] > 0) + avgballoon += players[i].kartstuff[k_balloon]; + } + + if (pingame) + avgballoon /= pingame; + // This makes the roulette produce the random noises. if ((player->kartstuff[k_itemroulette] % 3) == 1 && P_IsLocalPlayer(player)) S_StartSound(NULL,sfx_mkitm1 + ((player->kartstuff[k_itemroulette] / 3) % 8)); @@ -1011,29 +574,47 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd) // I'm returning via the exact opposite, however, to forgo having another bracket embed. Same result either way, I think. // Finally, if you get past this check, now you can actually start calculating what item you get. if (!(player->kartstuff[k_itemroulette] >= (TICRATE*3) - || ((cmd->buttons & BT_ATTACK) && player->kartstuff[k_itemroulette] >= roulettestop))) + || ((cmd->buttons & BT_ATTACK) && !(player->kartstuff[k_fakeitem] || player->kartstuff[k_itemheld]) + && player->kartstuff[k_itemroulette] >= roulettestop))) return; if (cmd->buttons & BT_ATTACK) player->pflags |= PF_ATTACKDOWN; - // Initializes existing spawnchance values - for (i = 0; i < (NUMKARTITEMS * NUMKARTODDS); i++) - spawnchance[i] = 0; - - // Gotta check how many players are active at this moment. - for (i = 0; i < MAXPLAYERS; i++) + if (cv_kartdebugitem.value != 0) { - if (playeringame[i] && !players[i].spectator) - pingame++; - if (players[i].exiting) - pexiting++; - if (players[i].kartstuff[k_balloon] > 0) - avgballoon += players[i].kartstuff[k_balloon]; + K_KartGetItemResult(player, cv_kartdebugitem.value); + player->kartstuff[k_itemamount] = cv_kartdebugamount.value; + player->kartstuff[k_itemroulette] = 0; + return; } - if (pingame) - avgballoon /= pingame; + // Initializes existing spawnchance values + for (i = 0; i < (NUMKARTRESULTS * NUMKARTODDS); i++) + spawnchance[i] = 0; + + for (i = 0; i < 9; i++) + { + INT32 j; + UINT8 available = 0; + + if ((gametype == GT_MATCH || gametype == GT_TEAMMATCH || gametype == GT_CTF) && i >= 5) + { + oddsvalid[i] = 0; + break; + } + + for (j = 0; j < NUMKARTRESULTS; j++) + { + if (K_KartGetItemOdds(i, j, player) > 0) + { + available = 1; + break; + } + } + + oddsvalid[i] = available; + } for (i = 0; i < MAXPLAYERS; i++) { @@ -1046,76 +627,93 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd) / ((pingame - 1) * (pingame + 1) / 3); } - player->kartstuff[k_itemclose] = 0; // Reset the item window closer. +#define SETUPDISTTABLE(odds, num) \ + for (i = num; i; --i) disttable[distlen++] = odds if (gametype == GT_MATCH || gametype == GT_TEAMMATCH || gametype == GT_CTF) // Battle Mode { - useodds = (player->kartstuff[k_balloon]-avgballoon)+2; // 0 is two balloons below average, 2 is average, 4 is two balloons above average - if (useodds > 4) - useodds = 4; - if (useodds < 0) - useodds = 0; + UINT8 wantedpos; + + if (oddsvalid[0]) SETUPDISTTABLE(0,1); + if (oddsvalid[1]) SETUPDISTTABLE(1,1); + if (oddsvalid[2]) SETUPDISTTABLE(2,1); + if (oddsvalid[3]) SETUPDISTTABLE(3,1); + if (oddsvalid[4]) SETUPDISTTABLE(4,1); + + wantedpos = (player->kartstuff[k_balloon]-avgballoon)+2; // 0 is two balloons below average, 2 is average, 4 is two balloons above average + if (wantedpos > 4) + wantedpos = 4; + if (wantedpos < 0) + wantedpos = 0; + + useodds = disttable[(wantedpos * distlen) / 5]; } else { + if (oddsvalid[1]) SETUPDISTTABLE(1,1); + if (oddsvalid[2]) SETUPDISTTABLE(2,1); + if (oddsvalid[3]) SETUPDISTTABLE(3,1); + if (oddsvalid[4]) SETUPDISTTABLE(4,2); + if (oddsvalid[5]) SETUPDISTTABLE(5,2); + if (oddsvalid[6]) SETUPDISTTABLE(6,3); + if (oddsvalid[7]) SETUPDISTTABLE(7,3); + if (oddsvalid[8]) SETUPDISTTABLE(8,1); + if (franticitems) // Frantic items make the distances between everyone artifically higher :P pdis = (15*pdis/14); - if (pingame == 1) useodds = 0; // Record Attack, or just alone - else if (pdis <= distvar * 0) useodds = 1; // (64*14) * 0 = 0 - else if (pdis <= distvar * 1) useodds = 2; // (64*14) * 1 = 896 - else if (pdis <= distvar * 2) useodds = 3; // (64*14) * 2 = 1792 - else if (pdis <= distvar * 4) useodds = 4; // (64*14) * 4 = 3584 - else if (pdis <= distvar * 6) useodds = 5; // (64*14) * 6 = 5376 - else if (pdis <= distvar * 9) useodds = 6; // (64*14) * 9 = 8064 - else if (pdis <= distvar * 12) useodds = 7; // (64*14) * 12 = 10752 - else useodds = 8; + + if (pingame == 1 && oddsvalid[0]) // Record Attack, or just alone + useodds = 0; + else if (pdis <= 0) // (64*14) * 0 = 0 + useodds = disttable[0]; + else if (pdis > distvar * ((12 * distlen) / 14)) // (64*14) * 12 = 10752 + useodds = disttable[distlen-1]; + else + { + for (i = 1; i < 12; i++) + if (pdis <= distvar * ((i * distlen) / 14)) useodds = disttable[((i * distlen) / 14)]; + } } +#undef SETUPDISTTABLE + #define SETITEMRESULT(pos, itemnum) \ - for (chance = 0; chance < K_KartGetItemOdds(pos, itemnum); chance++) \ + for (chance = 0; chance < K_KartGetItemOdds(pos, itemnum, player); chance++) \ spawnchance[numchoices++] = itemnum - // Check the game type to differentiate odds. - //if (gametype == GT_RETRO) - //{ - if (cv_magnet.value) SETITEMRESULT(useodds, 1); // Magnet - if (cv_boo.value) SETITEMRESULT(useodds, 2); // Boo - if (cv_mushroom.value || modeattacking) SETITEMRESULT(useodds, 3); // Mushroom - if (cv_triplemushroom.value) SETITEMRESULT(useodds, 4); // Triple Mushroom - if (cv_megashroom.value && !player->kartstuff[k_poweritemtimer]) SETITEMRESULT(useodds, 5); // Mega Mushroom - if (cv_goldshroom.value) SETITEMRESULT(useodds, 6); // Gold Mushroom - if (cv_star.value && !player->kartstuff[k_poweritemtimer]) SETITEMRESULT(useodds, 7); // Star - if (cv_triplebanana.value) SETITEMRESULT(useodds, 8); // Triple Banana - if (cv_fakeitem.value) SETITEMRESULT(useodds, 9); // Fake Item - if (cv_banana.value) SETITEMRESULT(useodds, 10); // Banana - if (cv_greenshell.value) SETITEMRESULT(useodds, 11); // Green Shell - if (cv_redshell.value) SETITEMRESULT(useodds, 12); // Red Shell - if (cv_triplegreenshell.value) SETITEMRESULT(useodds, 13); // Triple Green Shell - if (cv_bobomb.value) SETITEMRESULT(useodds, 14); // Bob-omb - if (cv_blueshell.value && pexiting == 0) SETITEMRESULT(useodds, 15); // Blue Shell - if (cv_fireflower.value) SETITEMRESULT(useodds, 16); // Fire Flower - if (cv_tripleredshell.value && pingame > 2) SETITEMRESULT(useodds, 17); // Triple Red Shell - if (cv_lightning.value && pingame > pexiting) SETITEMRESULT(useodds, 18); // Lightning - if (cv_feather.value) SETITEMRESULT(useodds, 19); // Feather + SETITEMRESULT(useodds, KITEM_SNEAKER); // Sneaker + SETITEMRESULT(useodds, KITEM_ROCKETSNEAKER); // Rocket Sneaker + SETITEMRESULT(useodds, KITEM_INVINCIBILITY); // Invincibility + SETITEMRESULT(useodds, KITEM_BANANA); // Banana + SETITEMRESULT(useodds, KITEM_FAKE); // Fake Item + SETITEMRESULT(useodds, KITEM_ORBINAUT); // Orbinaut + SETITEMRESULT(useodds, KITEM_JAWZ); // Jawz + SETITEMRESULT(useodds, KITEM_MINE); // Mine + SETITEMRESULT(useodds, KITEM_BALLHOG); // Ballhog + SETITEMRESULT(useodds, KITEM_SPB); // Self-Propelled Bomb + SETITEMRESULT(useodds, KITEM_SIZEUP); // Size Up + SETITEMRESULT(useodds, KITEM_SIZEDOWN); // Size Down + SETITEMRESULT(useodds, KITEM_LIGHTNINGSHIELD); // Lightning Shield + SETITEMRESULT(useodds, KITEM_HYUDORO); // Hyudoro + SETITEMRESULT(useodds, KITEM_POGOSPRING); // Pogo Spring + //SETITEMRESULT(useodds, KITEM_KITCHENSINK); // Kitchen Sink - prandom = P_RandomKey(numchoices); - - // Award the player whatever power is rolled - if (numchoices > 0) - K_KartGetItemResult(player, spawnchance[prandom], true); - else - CONS_Printf("ERROR: P_KartItemRoulette - There were no choices given by the roulette (useodds = %d).\n", useodds); - //} - /*else if (gametype == GT_NEO) - { - - } - else - CONS_Printf("ERROR: P_KartItemRoulette - There's no applicable game type!\n"); - */ + SETITEMRESULT(useodds, KRITEM_TRIPLESNEAKER); // Sneaker x3 + SETITEMRESULT(useodds, KRITEM_TRIPLEBANANA); // Banana x3 + SETITEMRESULT(useodds, KRITEM_TRIPLEORBINAUT); // Orbinaut x3 + SETITEMRESULT(useodds, KRITEM_DUALJAWZ); // Jawz x2 #undef SETITEMRESULT + // Award the player whatever power is rolled + if (numchoices > 0) + K_KartGetItemResult(player, spawnchance[P_RandomKey(numchoices)]); + else + { + player->kartstuff[k_itemtype] = KITEM_SAD; + player->kartstuff[k_itemamount] = 1; + } + player->kartstuff[k_itemroulette] = 0; // Since we're done, clear the roulette number if (P_IsLocalPlayer(player)) @@ -1309,7 +907,7 @@ static void K_UpdateOffroad(player_t *player) // A higher kart weight means you can stay offroad for longer without losing speed offroad = (1872 + 5*156 - kartweight*156)*offroadstrength; - //if (player->kartstuff[k_growshrinktimer] > 1) // megashroom slows down half as fast + //if (player->kartstuff[k_growshrinktimer] > 1) // sizeup slows down half as fast // offroad /= 2; player->kartstuff[k_offroad] += offroad; @@ -1384,7 +982,7 @@ void K_LakituChecker(player_t *player) player->kartstuff[k_lakitu]--; // Quick! You only have three tics to boost! if (cmd->buttons & BT_ACCELERATE) - K_DoMushroom(player, true, false); + K_DoSneaker(player, true, false); } } } @@ -1453,9 +1051,6 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) { K_UpdateOffroad(player); - if (player->kartstuff[k_itemclose]) - player->kartstuff[k_itemclose]--; - if (player->kartstuff[k_spinout]) player->kartstuff[k_spinout]--; @@ -1473,11 +1068,11 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_spinout] == 0 && player->kartstuff[k_spinouttimer] == 0 && player->powers[pw_flashing] == K_GetKartFlashing()) player->powers[pw_flashing]--; - if (player->kartstuff[k_magnettimer]) - player->kartstuff[k_magnettimer]--; + if (player->kartstuff[k_attractiontimer]) + player->kartstuff[k_attractiontimer]--; - if (player->kartstuff[k_mushroomtimer]) - player->kartstuff[k_mushroomtimer]--; + if (player->kartstuff[k_sneakertimer]) + player->kartstuff[k_sneakertimer]--; if (player->kartstuff[k_floorboost]) player->kartstuff[k_floorboost]--; @@ -1485,8 +1080,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_driftboost]) player->kartstuff[k_driftboost]--; - if (player->kartstuff[k_startimer]) - player->kartstuff[k_startimer]--; + if (player->kartstuff[k_invincibilitytimer]) + player->kartstuff[k_invincibilitytimer]--; if (player->kartstuff[k_growshrinktimer] > 0) player->kartstuff[k_growshrinktimer]--; @@ -1500,25 +1095,25 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) P_RestoreMusic(player); } - if (player->kartstuff[k_bootaketimer] == 0 && player->kartstuff[k_boostolentimer] == 0 - && player->kartstuff[k_goldshroomtimer]) - player->kartstuff[k_goldshroomtimer]--; + if (player->kartstuff[k_stealingtimer] == 0 && player->kartstuff[k_stolentimer] == 0 + && player->kartstuff[k_rocketsneakertimer]) + player->kartstuff[k_rocketsneakertimer]--; - if (player->kartstuff[k_bootimer]) - player->kartstuff[k_bootimer]--; + if (player->kartstuff[k_hyudorotimer]) + player->kartstuff[k_hyudorotimer]--; - if (player->kartstuff[k_bootaketimer]) - player->kartstuff[k_bootaketimer]--; + if (player->kartstuff[k_sadtimer]) + player->kartstuff[k_sadtimer]--; - if (player->kartstuff[k_boostolentimer]) - player->kartstuff[k_boostolentimer]--; + if (player->kartstuff[k_stealingtimer]) + player->kartstuff[k_stealingtimer]--; + + if (player->kartstuff[k_stolentimer]) + player->kartstuff[k_stolentimer]--; if (player->kartstuff[k_squishedtimer]) player->kartstuff[k_squishedtimer]--; - if (player->kartstuff[k_laserwisptimer]) - player->kartstuff[k_laserwisptimer]--; - if (player->kartstuff[k_justbumped]) player->kartstuff[k_justbumped]--; @@ -1568,9 +1163,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_comebacktimer]) player->kartstuff[k_comebackmode] = 0; - if (P_IsObjectOnGround(player->mo) && !(player->mo->momz) - && player->kartstuff[k_feather] & 2) - player->kartstuff[k_feather] &= ~2; + if (P_IsObjectOnGround(player->mo) && player->mo->momz <= 0 && player->kartstuff[k_pogospring]) + player->kartstuff[k_pogospring] = 0; if (cmd->buttons & BT_DRIFT) player->kartstuff[k_jmp] = 1; @@ -1585,15 +1179,15 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) //K_KartItemRouletteByPosition(player, cmd); // Old, position-based K_KartItemRouletteByDistance(player, cmd); // New, distance-based - // Stopping of the horrible star SFX - if (player->mo->health <= 0 || player->mo->player->kartstuff[k_startimer] <= 0 + // Stopping of the horrible invincibility SFX + if (player->mo->health <= 0 || player->mo->player->kartstuff[k_invincibilitytimer] <= 0 || player->mo->player->kartstuff[k_growshrinktimer] > 0) // If you don't have invincibility (or mega is active too) { if (S_SoundPlaying(player->mo, sfx_star)) // But the sound is playing S_StopSoundByID(player->mo, sfx_star); // Stop it } - // And the same for the mega mushroom SFX + // And the same for the size up SFX if (!(player->mo->health > 0 && player->mo->player->kartstuff[k_growshrinktimer] > 0)) // If you aren't big { if (S_SoundPlaying(player->mo, sfx_mega)) // But the sound is playing @@ -1601,7 +1195,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) } // AAAAAAND handle the SMK star alarm - if (player->mo->health > 0 && (player->mo->player->kartstuff[k_startimer] > 0 + if (player->mo->health > 0 && (player->mo->player->kartstuff[k_invincibilitytimer] > 0 || player->mo->player->kartstuff[k_growshrinktimer] > 0)) { if (leveltime % 13 == 0 && cv_kartstarsfx.value && !P_IsLocalPlayer(player)) @@ -1657,14 +1251,14 @@ static fixed_t K_GetKartBoostPower(player_t *player, boolean speed) fixed_t boostvalue = 0; // Offroad is separate, it's difficult to factor it in with a variable value anyway. - if (!(player->kartstuff[k_startimer] || player->kartstuff[k_bootimer] || player->kartstuff[k_mushroomtimer]) + if (!(player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_hyudorotimer] || player->kartstuff[k_sneakertimer]) && player->kartstuff[k_offroad] >= 0 && speed) boostpower = FixedDiv(boostpower, player->kartstuff[k_offroad] + FRACUNIT); if (player->kartstuff[k_growshrinktimer] > 1 && (player->kartstuff[k_growshrinktimer] > ((itemtime + TICRATE*2) - 25) || player->kartstuff[k_growshrinktimer] <= 26)) - { // Mega Mushroom - Mid-size + { // Size Up - Mid-size if (speed) { boostvalue = max(boostvalue, FRACUNIT/8); // + 12.5% @@ -1672,14 +1266,14 @@ static fixed_t K_GetKartBoostPower(player_t *player, boolean speed) } if (player->kartstuff[k_growshrinktimer] < ((itemtime + TICRATE*2) - 25) && player->kartstuff[k_growshrinktimer] > 26) - { // Mega Mushroom + { // Size Up if (speed) { boostvalue = max(boostvalue, FRACUNIT/5); // + 20% } } - if (player->kartstuff[k_startimer]) - { // Star + if (player->kartstuff[k_invincibilitytimer]) + { // Invincibility if (speed) boostvalue = max(boostvalue, 3*(FRACUNIT/8)); // + 37.5% else @@ -1692,8 +1286,8 @@ static fixed_t K_GetKartBoostPower(player_t *player, boolean speed) else boostvalue = max(boostvalue, 4*FRACUNIT); // + 400% } - if (player->kartstuff[k_mushroomtimer]) - { // Mushroom + if (player->kartstuff[k_sneakertimer]) + { // Sneaker if (speed) { switch (gamespeed) @@ -1783,7 +1377,7 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove fixed_t p_speed = K_GetKartSpeed(player, true); fixed_t p_accel = K_GetKartAccel(player); - if (!onground && !(player->kartstuff[k_feather] & 2)) return 0; // If the player isn't on the ground, there is no change in speed + if (!onground && !player->kartstuff[k_pogospring]) return 0; // If the player isn't on the ground, there is no change in speed // ACCELCODE!!!1!11! oldspeed = R_PointToDist2(0, 0, player->rmomx, player->rmomy); // FixedMul(P_AproxDistance(player->rmomx, player->rmomy), player->mo->scale); @@ -1816,7 +1410,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source) return; if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_invincibilitytimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_hyudorotimer] > 0 || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; @@ -1826,7 +1420,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source) source->player->kartstuff[k_sounds] = 50; } - player->kartstuff[k_mushroomtimer] = 0; + player->kartstuff[k_sneakertimer] = 0; player->kartstuff[k_driftboost] = 0; if (gametype != GT_RACE) @@ -1879,12 +1473,12 @@ void K_SquishPlayer(player_t *player, mobj_t *source) if (player->health <= 0) return; - if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || player->kartstuff[k_startimer] > 0 - || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || player->kartstuff[k_invincibilitytimer] > 0 + || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_hyudorotimer] > 0 || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; - player->kartstuff[k_mushroomtimer] = 0; + player->kartstuff[k_sneakertimer] = 0; player->kartstuff[k_driftboost] = 0; if (gametype != GT_RACE) @@ -1924,14 +1518,14 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju return; if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_invincibilitytimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_hyudorotimer] > 0 || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; player->mo->momz = 18*FRACUNIT; player->mo->momx = player->mo->momy = 0; - player->kartstuff[k_mushroomtimer] = 0; + player->kartstuff[k_sneakertimer] = 0; player->kartstuff[k_driftboost] = 0; if (gametype != GT_RACE) @@ -2004,10 +1598,10 @@ void K_StealBalloon(player_t *player, player_t *victim, boolean force) return; if ((player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_invincibilitytimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_hyudorotimer] > 0 || (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer])) || (victim->powers[pw_flashing] > 0 || victim->kartstuff[k_squishedtimer] > 0 || (victim->kartstuff[k_spinouttimer] > 0 && victim->kartstuff[k_spinout] > 0) - || victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootimer] > 0)) + || victim->kartstuff[k_invincibilitytimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_hyudorotimer] > 0)) return; } @@ -2225,7 +1819,7 @@ void K_SpawnDriftTrail(player_t *player) I_Assert(!P_MobjWasRemoved(player->mo)); if (player->mo->eflags & MFE_VERTICALFLIP) - ground = player->mo->ceilingz - FixedMul(mobjinfo[MT_MUSHROOMTRAIL].height, player->mo->scale); + ground = player->mo->ceilingz - FixedMul(mobjinfo[MT_SNEAKERTRAIL].height, player->mo->scale); else ground = player->mo->floorz; @@ -2236,7 +1830,7 @@ void K_SpawnDriftTrail(player_t *player) for (i = 0; i < 2; i++) { - if (player->kartstuff[k_bootimer] != 0 || (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer])) + if (player->kartstuff[k_hyudorotimer] != 0 || (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer])) continue; newx = player->mo->x + P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(24*FRACUNIT, player->mo->scale)); @@ -2246,13 +1840,13 @@ void K_SpawnDriftTrail(player_t *player) { ground = P_GetZAt(player->mo->standingslope, newx, newy); if (player->mo->eflags & MFE_VERTICALFLIP) - ground -= FixedMul(mobjinfo[MT_MUSHROOMTRAIL].height, player->mo->scale); + ground -= FixedMul(mobjinfo[MT_SNEAKERTRAIL].height, player->mo->scale); } #endif - if (player->kartstuff[k_drift] != 0 && player->kartstuff[k_mushroomtimer] == 0) + if (player->kartstuff[k_drift] != 0 && player->kartstuff[k_sneakertimer] == 0) flame = P_SpawnMobj(newx, newy, ground, MT_DRIFTSMOKE); else - flame = P_SpawnMobj(newx, newy, ground, MT_MUSHROOMTRAIL); + flame = P_SpawnMobj(newx, newy, ground, MT_SNEAKERTRAIL); P_SetTarget(&flame->target, player->mo); flame->angle = travelangle; @@ -2276,7 +1870,7 @@ void K_SpawnDriftTrail(player_t *player) } } -static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, boolean bobombthrow) +static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, boolean minethrow) { mobj_t *mo; INT32 dir, PROJSPEED; @@ -2302,7 +1896,7 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map break; } - if (bobombthrow) + if (minethrow) { if (player->kartstuff[k_throwdir] == 1) dir = 2; @@ -2440,14 +2034,14 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map return mo; } -static void K_DoMagnet(player_t *player) +static void K_DoLightningShield(player_t *player) { S_StartSound(player->mo, sfx_s3k45); - player->kartstuff[k_magnettimer] = 35; + player->kartstuff[k_attractiontimer] = 35; P_NukeEnemies(player->mo, player->mo, RING_DIST/4); } -static void K_DoBooSteal(player_t *player) +static void K_DoHyudoroSteal(player_t *player) { INT32 i, numplayers = 0; INT32 playerswappable[MAXPLAYERS]; @@ -2464,24 +2058,9 @@ static void K_DoBooSteal(player_t *player) || (gametype != GT_RACE && players[i].kartstuff[k_balloon] > 0)) // Has an item - && (players[i].kartstuff[k_magnet] - || players[i].kartstuff[k_mushroom] - || players[i].kartstuff[k_megashroom] - || players[i].kartstuff[k_goldshroom] - || players[i].kartstuff[k_star] - || players[i].kartstuff[k_banana] & 2 - || players[i].kartstuff[k_triplebanana] & 8 - || players[i].kartstuff[k_fakeitem] & 2 - || players[i].kartstuff[k_greenshell] & 2 - || players[i].kartstuff[k_triplegreenshell] & 8 - || players[i].kartstuff[k_redshell] & 2 - || players[i].kartstuff[k_tripleredshell] & 8 - || players[i].kartstuff[k_bobomb] & 2 - || players[i].kartstuff[k_lightning] - || players[i].kartstuff[k_blueshell] - || players[i].kartstuff[k_fireflower] - || players[i].kartstuff[k_feather] & 1 - || players[i].kartstuff[k_boo])) // Stealing boos with boos? sounds like fun + && (players[i].kartstuff[k_itemtype] + && players[i].kartstuff[k_itemamount] + && !players[i].kartstuff[k_itemheld])) { playerswappable[numplayers] = i; numplayers++; @@ -2492,9 +2071,8 @@ static void K_DoBooSteal(player_t *player) if ((gametype == GT_RACE && player->kartstuff[k_position] == 1) || numplayers == 0) // No-one can be stolen from? Get longer invisibility for nothing { - player->kartstuff[k_bootimer] = bootime; - player->kartstuff[k_bootaketimer] = boostealtime; - player->kartstuff[k_boo] = 0; + player->kartstuff[k_hyudorotimer] = hyudorotime; + player->kartstuff[k_stealingtimer] = stealtime; return; } else if (numplayers == 1) // With just 2 players, we just need to set the other player to be the one to steal from @@ -2508,105 +2086,21 @@ static void K_DoBooSteal(player_t *player) if (stealplayer > -1) // Now here's where we do the stealing, has to be done here because we still know the player we're stealing from { - player->kartstuff[k_bootimer] = bootime; - player->kartstuff[k_bootaketimer] = boostealtime; - player->kartstuff[k_boo] = 0; - players[stealplayer].kartstuff[k_boostolentimer] = boostealtime; + player->kartstuff[k_hyudorotimer] = hyudorotime; + player->kartstuff[k_stealingtimer] = stealtime; + players[stealplayer].kartstuff[k_stolentimer] = stealtime; - if (players[stealplayer].kartstuff[k_star]) - { - player->kartstuff[k_star] = players[stealplayer].kartstuff[k_star]; - players[stealplayer].kartstuff[k_star] = 0; - } - else if (players[stealplayer].kartstuff[k_mushroom]) - { - player->kartstuff[k_mushroom] = players[stealplayer].kartstuff[k_mushroom]; - players[stealplayer].kartstuff[k_mushroom] = 0; - } - else if (players[stealplayer].kartstuff[k_goldshroom]) - { - player->kartstuff[k_goldshroom] = players[stealplayer].kartstuff[k_goldshroom]; - players[stealplayer].kartstuff[k_goldshroom] = 0; - } - else if (players[stealplayer].kartstuff[k_megashroom]) - { - player->kartstuff[k_megashroom] = players[stealplayer].kartstuff[k_megashroom]; - players[stealplayer].kartstuff[k_megashroom] = 0; - } - else if (players[stealplayer].kartstuff[k_lightning]) - { - player->kartstuff[k_lightning] = players[stealplayer].kartstuff[k_lightning]; - players[stealplayer].kartstuff[k_lightning] = 0; - } - else if (players[stealplayer].kartstuff[k_blueshell]) - { - player->kartstuff[k_blueshell] = players[stealplayer].kartstuff[k_blueshell]; - players[stealplayer].kartstuff[k_blueshell] = 0; - } - else if (players[stealplayer].kartstuff[k_greenshell] & 2) - { - player->kartstuff[k_greenshell] |= 2; - players[stealplayer].kartstuff[k_greenshell] &= ~2; - } - else if (players[stealplayer].kartstuff[k_triplegreenshell] & 8) - { - player->kartstuff[k_triplegreenshell] |= 8; - players[stealplayer].kartstuff[k_triplegreenshell] &= ~8; - } - else if (players[stealplayer].kartstuff[k_redshell] & 2) - { - player->kartstuff[k_redshell] |= 2; - players[stealplayer].kartstuff[k_redshell] &= ~2; - } - else if (players[stealplayer].kartstuff[k_tripleredshell] & 8) - { - player->kartstuff[k_tripleredshell] |= 8; - players[stealplayer].kartstuff[k_tripleredshell] &= ~8; - } - else if (players[stealplayer].kartstuff[k_banana] & 2) - { - player->kartstuff[k_banana] |= 2; - players[stealplayer].kartstuff[k_banana] &= ~2; - } - else if (players[stealplayer].kartstuff[k_triplebanana] & 8) - { - player->kartstuff[k_triplebanana] |= 8; - players[stealplayer].kartstuff[k_triplebanana] &= ~8; - } - else if (players[stealplayer].kartstuff[k_fakeitem] & 2) - { - player->kartstuff[k_fakeitem] |= 2; - players[stealplayer].kartstuff[k_fakeitem] &= ~2; - } - else if (players[stealplayer].kartstuff[k_bobomb] & 2) - { - player->kartstuff[k_bobomb] |= 2; - players[stealplayer].kartstuff[k_bobomb] &= ~2; - } - else if (players[stealplayer].kartstuff[k_magnet]) - { - player->kartstuff[k_magnet] = players[stealplayer].kartstuff[k_magnet]; - players[stealplayer].kartstuff[k_magnet] = 0; - } - else if (players[stealplayer].kartstuff[k_fireflower]) - { - player->kartstuff[k_fireflower] = players[stealplayer].kartstuff[k_fireflower]; - players[stealplayer].kartstuff[k_fireflower] = 0; - } - else if (players[stealplayer].kartstuff[k_feather] & 1) - { - player->kartstuff[k_feather] |= 1; - players[stealplayer].kartstuff[k_feather] &= ~1; - } - else if (players[stealplayer].kartstuff[k_boo]) - { - player->kartstuff[k_boo] = players[stealplayer].kartstuff[k_boo]; - players[stealplayer].kartstuff[k_boo] = 0; - } + player->kartstuff[k_itemtype] = players[stealplayer].kartstuff[k_itemtype]; + player->kartstuff[k_itemamount] = players[stealplayer].kartstuff[k_itemamount]; + player->kartstuff[k_itemheld] = 0; + + players[stealplayer].kartstuff[k_itemtype] = KITEM_NONE; + players[stealplayer].kartstuff[k_itemamount] = 0; + players[stealplayer].kartstuff[k_itemheld] = 0; } } -void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost) +void K_DoSneaker(player_t *player, boolean doPFlag, boolean startboost) { sfxenum_t boostsound = sfx_mush; if (startboost) @@ -2615,7 +2109,7 @@ void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost) if (!player->kartstuff[k_floorboost] || player->kartstuff[k_floorboost] == 3) S_StartSound(player->mo, boostsound); - player->kartstuff[k_mushroomtimer] = mushroomtime; + player->kartstuff[k_sneakertimer] = sneakertime; if (doPFlag) player->pflags |= PF_ATTACKDOWN; @@ -2627,7 +2121,7 @@ void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost) player->kartstuff[k_sounds] = 50; } -static void K_DoLightning(player_t *player, boolean bluelightning) +static void K_DoSizeDown(player_t *player, boolean spb) { mobj_t *mo; thinker_t *think; @@ -2649,7 +2143,7 @@ static void K_DoLightning(player_t *player, boolean bluelightning) mo = (mobj_t *)think; if (mo->type == MT_PLAYER) - P_DamageMobj(mo, player->mo, player->mo, bluelightning ? 65 : 64); + P_DamageMobj(mo, player->mo, player->mo, spb ? 65 : 64); else continue; } @@ -2689,9 +2183,9 @@ void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed) thrust = 48< 72<player->kartstuff[k_mushroomtimer]) + if (mo->player->kartstuff[k_sneakertimer]) thrust = FixedMul(thrust, 5*FRACUNIT/4); - else if (mo->player->kartstuff[k_startimer]) + else if (mo->player->kartstuff[k_invincibilitytimer]) thrust = FixedMul(thrust, 9*FRACUNIT/8); mo->momz = FixedMul(FINESINE(ANGLE_22h>>ANGLETOFINESHIFT), FixedMul(thrust, mo->scale)); } @@ -2765,7 +2259,7 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue) if (player->spectator) return turnvalue; - if (player->kartstuff[k_feather] & 2 && !P_IsObjectOnGround(player->mo)) + if (player->kartstuff[k_pogospring] && !P_IsObjectOnGround(player->mo)) adjustangle /= 2; if (player->kartstuff[k_drift] != 0 && P_IsObjectOnGround(player->mo)) @@ -2785,7 +2279,7 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue) turnvalue = FixedMul(turnvalue, adjustangle); // Weight has a small effect on turning - if (player->kartstuff[k_startimer] || player->kartstuff[k_mushroomtimer] || player->kartstuff[k_growshrinktimer] > 0) + if (player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_sneakertimer] || player->kartstuff[k_growshrinktimer] > 0) turnvalue = FixedMul(turnvalue, FixedDiv(5*FRACUNIT, 4*FRACUNIT)); return turnvalue; @@ -3028,85 +2522,24 @@ static void K_KartUpdatePosition(player_t *player) player->kartstuff[k_position] = position; } // -// K_CheckForHoldItem -// -static boolean K_CheckForHoldItem(player_t *player) -{ - if ( player->kartstuff[k_greenshell] == 1 - || player->kartstuff[k_redshell] == 1 - || player->kartstuff[k_banana] == 1 - || player->kartstuff[k_fakeitem] == 1 - || player->kartstuff[k_bobomb] == 1 - || player->kartstuff[k_triplegreenshell] & 1 - || player->kartstuff[k_triplegreenshell] & 2 - || player->kartstuff[k_triplegreenshell] & 4 - || player->kartstuff[k_tripleredshell] & 1 - || player->kartstuff[k_tripleredshell] & 2 - || player->kartstuff[k_tripleredshell] & 4 - || player->kartstuff[k_triplebanana] & 1 - || player->kartstuff[k_triplebanana] & 2 - || player->kartstuff[k_triplebanana] & 4 - ) return true; - return false; -} -// // K_StripItems // static void K_StripItems(player_t *player) { - if ( player->kartstuff[k_kitchensink] - || player->kartstuff[k_feather] & 1 - || player->kartstuff[k_lightning] - || player->kartstuff[k_tripleredshell] - || player->kartstuff[k_fireflower] - || player->kartstuff[k_blueshell] - || player->kartstuff[k_bobomb] - || player->kartstuff[k_triplegreenshell] - || player->kartstuff[k_redshell] - || player->kartstuff[k_greenshell] - || player->kartstuff[k_banana] - || player->kartstuff[k_fakeitem] & 2 - || player->kartstuff[k_triplebanana] - || player->kartstuff[k_star] - || player->kartstuff[k_goldshroom] - || player->kartstuff[k_megashroom] - || player->kartstuff[k_mushroom] - || player->kartstuff[k_boo] - || player->kartstuff[k_magnet] - || player->kartstuff[k_bootimer] - || player->kartstuff[k_bootaketimer] - || player->kartstuff[k_boostolentimer] - || player->kartstuff[k_goldshroomtimer] - || player->kartstuff[k_growshrinktimer] - || player->kartstuff[k_itemroulette] - ) player->kartstuff[k_itemclose] = 10; - player->kartstuff[k_kitchensink] = 0; - player->kartstuff[k_feather] = 0; - player->kartstuff[k_lightning] = 0; - player->kartstuff[k_tripleredshell] = 0; - player->kartstuff[k_fireflower] = 0; - player->kartstuff[k_blueshell] = 0; - player->kartstuff[k_bobomb] = 0; - player->kartstuff[k_triplegreenshell] = 0; - player->kartstuff[k_redshell] = 0; - player->kartstuff[k_greenshell] = 0; - player->kartstuff[k_banana] = 0; - player->kartstuff[k_fakeitem] = 0; - player->kartstuff[k_triplebanana] = 0; - player->kartstuff[k_star] = 0; - player->kartstuff[k_goldshroom] = 0; - player->kartstuff[k_megashroom] = 0; - player->kartstuff[k_mushroom] = 0; - player->kartstuff[k_boo] = 0; - player->kartstuff[k_magnet] = 0; + player->kartstuff[k_itemtype] = 0; + player->kartstuff[k_itemamount] = 0; + player->kartstuff[k_itemheld] = 0; + player->kartstuff[k_itemroulette] = 0; - player->kartstuff[k_bootimer] = 0; - player->kartstuff[k_bootaketimer] = 0; - player->kartstuff[k_boostolentimer] = 0; - player->kartstuff[k_goldshroomtimer] = 0; + player->kartstuff[k_hyudorotimer] = 0; + player->kartstuff[k_stealingtimer] = 0; + player->kartstuff[k_stolentimer] = 0; + player->kartstuff[k_rocketsneakertimer] = 0; player->kartstuff[k_growshrinktimer] = 0; - player->kartstuff[k_magnettimer] = 0; - player->kartstuff[k_startimer] = 0; + player->kartstuff[k_attractiontimer] = 0; + player->kartstuff[k_invincibilitytimer] = 0; + player->kartstuff[k_fakeitem] = 0; + player->kartstuff[k_sadtimer] = 0; } // // K_MoveKartPlayer @@ -3115,8 +2548,8 @@ void K_MoveKartPlayer(player_t *player, boolean onground) { ticcmd_t *cmd = &player->cmd; boolean ATTACK_IS_DOWN = ((cmd->buttons & BT_ATTACK) && !(player->pflags & PF_ATTACKDOWN)); - boolean HOLDING_ITEM = K_CheckForHoldItem(player); - boolean NO_BOO = (player->kartstuff[k_boostolentimer] == 0 && player->kartstuff[k_bootaketimer] == 0); + boolean HOLDING_ITEM = (player->kartstuff[k_itemheld] || player->kartstuff[k_fakeitem]); + boolean NO_HYUDORO = (player->kartstuff[k_stolentimer] == 0 && player->kartstuff[k_stealingtimer] == 0); K_KartUpdatePosition(player); @@ -3150,429 +2583,405 @@ void K_MoveKartPlayer(player_t *player, boolean onground) if (player && player->mo && player->mo->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0) { - -// Magnet -// Boo -// Mushroom -// Triple Mushroom -// Mega Mushroom -// Gold Mushroom -// Star -// Triple Banana -// Fake Item -// Banana -// Green Shell -// Red Shell -// Triple Green Shell -// Bob-omb -// Blue Shell -// Fire Flower -// Triple Red Shell -// Lightning -// Feather - - // GoldenMushroom power - if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && player->kartstuff[k_goldshroom] == 1 - && player->kartstuff[k_goldshroomtimer] == 0 && NO_BOO) - { - K_DoMushroom(player, true, false); - player->kartstuff[k_goldshroomtimer] = itemtime; - player->kartstuff[k_goldshroom] = 0; - } - // GoldenMushroom power - else if (ATTACK_IS_DOWN && player->kartstuff[k_goldshroomtimer] > 1 && onground && NO_BOO) - { - K_DoMushroom(player, true, false); - player->kartstuff[k_goldshroomtimer] -= 10; - if (player->kartstuff[k_goldshroomtimer] < 1) - player->kartstuff[k_goldshroomtimer] = 1; - } - // TripleMushroom power - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_mushroom] == 4 && onground && NO_BOO) - { - K_DoMushroom(player, true, false); - player->kartstuff[k_mushroom] = 2; - } - // DoubleMushroom power - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_mushroom] == 2 && onground && NO_BOO) - { - K_DoMushroom(player, true, false); - player->kartstuff[k_mushroom] = 1; - } - // Mushroom power - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_mushroom] == 1 && onground && NO_BOO) - { - K_DoMushroom(player, true, false); - player->kartstuff[k_mushroom] = 0; - } - // Star power - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_star] == 1 && NO_BOO) - { - if (P_IsLocalPlayer(player) && !player->exiting) - S_ChangeMusicInternal("minvnc", true); - if (!cv_kartstarsfx.value && !P_IsLocalPlayer(player)) - S_StartSound(player->mo, sfx_star); - player->kartstuff[k_startimer] = itemtime; // Activate it - K_PlayTauntSound(player->mo); - player->kartstuff[k_star] = 0; - if (gametype != GT_RACE) - player->kartstuff[k_poweritemtimer] = 10*TICRATE; - player->kartstuff[k_itemclose] = 10; - player->pflags |= PF_ATTACKDOWN; - } - // Green Shell - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_greenshell] & 2 && NO_BOO) - { - angle_t newangle; - fixed_t newx; - fixed_t newy; - mobj_t *mo; - player->kartstuff[k_greenshell] &= ~2; - player->kartstuff[k_greenshell] |= 1; - player->pflags |= PF_ATTACKDOWN; - newangle = player->mo->angle; - newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - mo = P_SpawnMobj(newx, newy, player->mo->z, MT_GREENSHIELD); - mo->threshold = 10; - if (mo) - P_SetTarget(&mo->target, player->mo); - player->kartstuff[k_itemclose] = 10; - } - else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_greenshell] & 1) - { - player->kartstuff[k_greenshell] &= ~1; - - K_ThrowKartItem(player, true, MT_GREENITEM, 1, false); - K_PlayTauntSound(player->mo); - - } - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_fireflower] && NO_BOO) - { - player->kartstuff[k_fireflower] = 0; - - K_ThrowKartItem(player, true, MT_FIREBALL, 1, false); - S_StartSound(player->mo, sfx_mario7); - K_PlayTauntSound(player->mo); - - player->kartstuff[k_itemclose] = 10; - } - // Triple Green Shell - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_triplegreenshell] & 8 && NO_BOO) - { - angle_t newangle; - fixed_t newx; - fixed_t newy; - mobj_t *mo, *mo2, *mo3; - player->kartstuff[k_triplegreenshell] &= ~8; - player->kartstuff[k_triplegreenshell] |= 7; - player->pflags |= PF_ATTACKDOWN; - newangle = player->mo->angle; - K_PlayTauntSound(player->mo); - newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - mo = P_SpawnMobj(newx, newy, player->mo->z, MT_TRIPLEGREENSHIELD1); - mo->threshold = 10; - P_SetTarget(&mo->target, player->mo); - mo->angle = 0; - mo2 = P_SpawnMobj(newx, newy, player->mo->z, MT_TRIPLEGREENSHIELD2); - mo2->threshold = 10; - P_SetTarget(&mo2->target, player->mo); - mo2->angle = ANGLE_120; - mo3 = P_SpawnMobj(newx, newy, player->mo->z, MT_TRIPLEGREENSHIELD3); - mo3->threshold = 10; - P_SetTarget(&mo3->target, player->mo); - mo3->angle = ANGLE_240; - player->kartstuff[k_itemclose] = 10; - } - else if (ATTACK_IS_DOWN && (player->kartstuff[k_triplegreenshell] & 1 || player->kartstuff[k_triplegreenshell] & 2 || player->kartstuff[k_triplegreenshell] & 4)) - { - K_ThrowKartItem(player, true, MT_GREENITEM, 1, false); - K_PlayTauntSound(player->mo); - player->pflags |= PF_ATTACKDOWN; - - if (player->kartstuff[k_triplegreenshell] & 4) - player->kartstuff[k_triplegreenshell] &= ~4; - else if (player->kartstuff[k_triplegreenshell] & 2) - player->kartstuff[k_triplegreenshell] &= ~2; - else if (player->kartstuff[k_triplegreenshell] & 1) - player->kartstuff[k_triplegreenshell] &= ~1; - - } - // Red Shell - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_redshell] & 2 && NO_BOO) - { - angle_t newangle; - fixed_t newx; - fixed_t newy; - mobj_t *mo; - player->kartstuff[k_redshell] &= ~2; - player->kartstuff[k_redshell] |= 1; - player->pflags |= PF_ATTACKDOWN; - newangle = player->mo->angle; - newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - mo = P_SpawnMobj(newx, newy, player->mo->z, MT_REDSHIELD); - mo->threshold = 10; - if (mo) - P_SetTarget(&mo->target, player->mo); - player->kartstuff[k_itemclose] = 10; - } - else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_redshell] & 1 && (player->kartstuff[k_throwdir] == 1 || player->kartstuff[k_throwdir] == 0)) - { - player->kartstuff[k_redshell] &= ~1; - - K_ThrowKartItem(player, true, MT_REDITEM, 1, false); - K_PlayTauntSound(player->mo); - } - // Red Shell Dud - else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_redshell] & 1 && player->kartstuff[k_throwdir] == -1) - { - player->kartstuff[k_redshell] &= ~1; - - K_ThrowKartItem(player, true, MT_REDITEMDUD, -1, false); - K_PlayTauntSound(player->mo); - } - // Triple Red Shell - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_tripleredshell] & 8 && NO_BOO) - { - angle_t newangle; - fixed_t newx; - fixed_t newy; - mobj_t *mo, *mo2, *mo3; - player->kartstuff[k_tripleredshell] &= ~8; - player->kartstuff[k_tripleredshell] |= 7; - player->pflags |= PF_ATTACKDOWN; - newangle = player->mo->angle; - K_PlayTauntSound(player->mo); - newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - mo = P_SpawnMobj(newx, newy, player->mo->z, MT_TRIPLEREDSHIELD1); - mo->threshold = 10; - P_SetTarget(&mo->target, player->mo); - mo->angle = 0; - mo2 = P_SpawnMobj(newx, newy, player->mo->z, MT_TRIPLEREDSHIELD2); - mo2->threshold = 10; - P_SetTarget(&mo2->target, player->mo); - mo2->angle = ANGLE_120; - mo3 = P_SpawnMobj(newx, newy, player->mo->z, MT_TRIPLEREDSHIELD3); - mo3->threshold = 10; - P_SetTarget(&mo3->target, player->mo); - mo3->angle = ANGLE_240; - player->kartstuff[k_itemclose] = 10; - } - else if (ATTACK_IS_DOWN && (player->kartstuff[k_tripleredshell] & 1 || player->kartstuff[k_tripleredshell] & 2 || player->kartstuff[k_tripleredshell] & 4) - && (player->kartstuff[k_throwdir] == 1 || player->kartstuff[k_throwdir] == 0)) - { - K_ThrowKartItem(player, true, MT_REDITEM, 1, false); - K_PlayTauntSound(player->mo); - player->pflags |= PF_ATTACKDOWN; - if (player->kartstuff[k_tripleredshell] & 4) - player->kartstuff[k_tripleredshell] &= ~4; - else if (player->kartstuff[k_tripleredshell] & 2) - player->kartstuff[k_tripleredshell] &= ~2; - else if (player->kartstuff[k_tripleredshell] & 1) - player->kartstuff[k_tripleredshell] &= ~1; - } - else if (ATTACK_IS_DOWN && (player->kartstuff[k_tripleredshell] & 1 || player->kartstuff[k_tripleredshell] & 2 || player->kartstuff[k_tripleredshell] & 4) - && player->kartstuff[k_throwdir] == -1) - { - K_ThrowKartItem(player, true, MT_REDITEMDUD, -1, false); - K_PlayTauntSound(player->mo); - player->pflags |= PF_ATTACKDOWN; - if (player->kartstuff[k_tripleredshell] & 4) - player->kartstuff[k_tripleredshell] &= ~4; - else if (player->kartstuff[k_tripleredshell] & 2) - player->kartstuff[k_tripleredshell] &= ~2; - else if (player->kartstuff[k_tripleredshell] & 1) - player->kartstuff[k_tripleredshell] &= ~1; - } - // Banana Peel - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_banana] & 2 && NO_BOO) - { - angle_t newangle; - fixed_t newx; - fixed_t newy; - mobj_t *mo; - player->kartstuff[k_banana] &= ~2; - player->kartstuff[k_banana] |= 1; - player->pflags |= PF_ATTACKDOWN; - newangle = player->mo->angle; - newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - mo = P_SpawnMobj(newx, newy, player->mo->z, MT_BANANASHIELD); - mo->threshold = 10; - if (mo) - P_SetTarget(&mo->target, player->mo); - player->kartstuff[k_itemclose] = 10; - } - else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_banana] & 1) - { - K_ThrowKartItem(player, false, MT_BANANAITEM, -1, false); - K_PlayTauntSound(player->mo); - player->kartstuff[k_banana] &= ~1; - } - // Triple Banana Peel - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_triplebanana] & 8 && NO_BOO) - { - angle_t newangle; - fixed_t newx; - fixed_t newy; - mobj_t *mo, *mo2, *mo3; - K_PlayTauntSound(player->mo); - player->kartstuff[k_triplebanana] &= ~8; - player->kartstuff[k_triplebanana] |= 7; - player->pflags |= PF_ATTACKDOWN; - newangle = player->mo->angle; - newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - mo = P_SpawnMobj(newx, newy, player->mo->z, MT_TRIPLEBANANASHIELD1); - mo->threshold = 10; - if (mo) { - P_SetTarget(&mo->target, player->mo); - mo->angle = 0; } - mo2 = P_SpawnMobj(newx, newy, player->mo->z, MT_TRIPLEBANANASHIELD2); - mo2->threshold = 10; - if (mo2) { - P_SetTarget(&mo2->target, player->mo); - mo2->angle = ANGLE_135; } - mo3 = P_SpawnMobj(newx, newy, player->mo->z, MT_TRIPLEBANANASHIELD3); - mo3->threshold = 10; - if (mo3) { - P_SetTarget(&mo3->target, player->mo); - mo3->angle = ANGLE_225; } - player->kartstuff[k_itemclose] = 10; - } - else if (ATTACK_IS_DOWN && (player->kartstuff[k_triplebanana] & 1 || player->kartstuff[k_triplebanana] & 2 || player->kartstuff[k_triplebanana] & 4)) - { - K_ThrowKartItem(player, false, MT_BANANAITEM, -1,false ); - K_PlayTauntSound(player->mo); - player->pflags |= PF_ATTACKDOWN; - if (player->kartstuff[k_triplebanana] & 4) - player->kartstuff[k_triplebanana] &= ~4; - else if (player->kartstuff[k_triplebanana] & 2) - player->kartstuff[k_triplebanana] &= ~2; - else if (player->kartstuff[k_triplebanana] & 1) - player->kartstuff[k_triplebanana] &= ~1; - } - // Fake Itembox - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_fakeitem] & 2 && NO_BOO) - { - angle_t newangle; - fixed_t newx; - fixed_t newy; - mobj_t *mo; - player->kartstuff[k_fakeitem] &= ~2; - player->kartstuff[k_fakeitem] |= 1; - player->pflags |= PF_ATTACKDOWN; - newangle = player->mo->angle; - newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - mo = P_SpawnMobj(newx, newy, player->mo->z, MT_FAKESHIELD); - mo->scale = FRACUNIT/2; - mo->threshold = 10; - if (mo) - P_SetTarget(&mo->target, player->mo); - player->kartstuff[k_itemclose] = 10; - } - else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_fakeitem] & 1) + // Fake Item dropping + if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_fakeitem]) { K_ThrowKartItem(player, false, MT_FAKEITEM, -1, false); K_PlayTauntSound(player->mo); - player->kartstuff[k_fakeitem] &= ~1; + player->kartstuff[k_fakeitem] = 0; } - // Bomb - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_bobomb] & 2 && NO_BOO) + // Rocket Sneaker power + else if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO + && player->kartstuff[k_rocketsneakertimer] > 1) { - angle_t newangle; - fixed_t newx; - fixed_t newy; - mobj_t *mo; - player->kartstuff[k_bobomb] &= ~2; - player->kartstuff[k_bobomb] |= 1; - player->pflags |= PF_ATTACKDOWN; - newangle = player->mo->angle; - newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - mo = P_SpawnMobj(newx, newy, player->mo->z, MT_BOMBSHIELD); - mo->threshold = 10; - if (mo) - P_SetTarget(&mo->target, player->mo); - player->kartstuff[k_itemclose] = 10; + K_DoSneaker(player, true, false); + player->kartstuff[k_rocketsneakertimer] -= 5; + if (player->kartstuff[k_rocketsneakertimer] < 1) + player->kartstuff[k_rocketsneakertimer] = 1; } - if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_bobomb] & 1) + else { - K_ThrowKartItem(player, false, MT_BOMBITEM, 1, true); - K_PlayTauntSound(player->mo); - player->kartstuff[k_bobomb] &= ~1; - } - // Thunder - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_lightning] == 1 && NO_BOO) - { - K_DoLightning(player, false); - player->kartstuff[k_lightning] = 0; - player->kartstuff[k_itemclose] = 10; - } - // Blue Shell - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_blueshell] == 1 && NO_BOO) - { - K_DoLightning(player, true); - player->kartstuff[k_blueshell] = 0; - player->kartstuff[k_itemclose] = 10; - } - // Mega Mushroom - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_megashroom] == 1 && NO_BOO) - { - if (P_IsLocalPlayer(player) && !player->exiting) - S_ChangeMusicInternal("mega", true); - if (!cv_kartstarsfx.value && !P_IsLocalPlayer(player)) - S_StartSound(player->mo, sfx_mega); - K_PlayTauntSound(player->mo); - player->kartstuff[k_growshrinktimer] = itemtime + TICRATE*2; - S_StartSound(player->mo, sfx_mario3); - player->pflags |= PF_ATTACKDOWN; - player->kartstuff[k_megashroom] = 0; - if (gametype != GT_RACE) - player->kartstuff[k_poweritemtimer] = 10*TICRATE; - player->kartstuff[k_itemclose] = 10; - } - // Boo - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_boo] == 1 && NO_BOO) - { - K_DoBooSteal(player); - player->pflags |= PF_ATTACKDOWN; - player->kartstuff[k_boo] = 0; - } - // Magnet - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_magnet] == 1 && NO_BOO) - { - K_DoMagnet(player); - player->pflags |= PF_ATTACKDOWN; - player->kartstuff[k_magnet] = 0; - } - // Feather - else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_feather] & 1 && onground && NO_BOO) - { - K_PlayTauntSound(player->mo); - K_DoBouncePad(player->mo, 32<kartstuff[k_itemtype]) + { + case KITEM_SNEAKER: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO) + { + K_DoSneaker(player, true, false); + player->kartstuff[k_itemamount]--; + } + break; + case KITEM_ROCKETSNEAKER: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO + && player->kartstuff[k_rocketsneakertimer] == 0) + { + K_DoSneaker(player, true, false); + player->kartstuff[k_rocketsneakertimer] = itemtime; + player->kartstuff[k_itemamount]--; + } + break; + case KITEM_INVINCIBILITY: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) // Doesn't hold your item slot hostage normally, so you're free to waste it if you have multiple + { + if (P_IsLocalPlayer(player) && !player->exiting) + S_ChangeMusicInternal("minvnc", true); + if (!cv_kartstarsfx.value && !P_IsLocalPlayer(player)) + S_StartSound(player->mo, sfx_star); + player->kartstuff[k_invincibilitytimer] = itemtime; // Activate it + K_PlayTauntSound(player->mo); + player->kartstuff[k_itemamount]--; + if (gametype != GT_RACE) + player->kartstuff[k_poweritemtimer] = 10*TICRATE; + player->pflags |= PF_ATTACKDOWN; + } + break; + case KITEM_BANANA: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) + { + if (player->kartstuff[k_itemamount] == 1) // Banana x1 held + { + angle_t newangle; + fixed_t newx; + fixed_t newy; + mobj_t *mo; + player->kartstuff[k_itemheld] = 1; + player->pflags |= PF_ATTACKDOWN; + newangle = player->mo->angle; + newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + mo = P_SpawnMobj(newx, newy, player->mo->z, MT_BANANASHIELD); + mo->threshold = 10; + if (mo) + P_SetTarget(&mo->target, player->mo); + } + else if (player->kartstuff[k_itemamount] > 1) // Banana x3 held + { + INT32 moloop; - player->pflags |= PF_ATTACKDOWN; - player->kartstuff[k_feather] |= 2; - player->kartstuff[k_feather] &= ~1; + K_PlayTauntSound(player->mo); + player->kartstuff[k_itemheld] = 2; + player->pflags |= PF_ATTACKDOWN; - player->kartstuff[k_itemclose] = 10; + for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++) + { + angle_t newangle; + fixed_t newx; + fixed_t newy; + mobj_t *mo; + + newangle = player->mo->angle; + newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + mo = P_SpawnMobj(newx, newy, player->mo->z, MT_BANANASHIELD); + + if (mo) + { + mo->threshold = 10; + mo->lastlook = moloop+1; + P_SetTarget(&mo->target, player->mo); + mo->angle = FixedAngle(((90/player->kartstuff[k_itemamount])*moloop)*FRACUNIT); + } + } + } + } + else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_itemheld] == 1) + { + K_ThrowKartItem(player, false, MT_BANANAITEM, -1, false); + K_PlayTauntSound(player->mo); + player->kartstuff[k_itemamount]--; + player->kartstuff[k_itemheld] = 0; + } + else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld] == 2) // Banana x3 thrown + { + K_ThrowKartItem(player, false, MT_BANANAITEM, -1,false ); + K_PlayTauntSound(player->mo); + player->pflags |= PF_ATTACKDOWN; + player->kartstuff[k_itemamount]--; + if (!player->kartstuff[k_itemamount]) + player->kartstuff[k_itemheld] = 0; + } + break; + case KITEM_FAKE: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) + { + angle_t newangle; + fixed_t newx; + fixed_t newy; + mobj_t *mo; + player->kartstuff[k_itemamount]--; + player->kartstuff[k_fakeitem] = 1; + player->pflags |= PF_ATTACKDOWN; + newangle = player->mo->angle; + newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + mo = P_SpawnMobj(newx, newy, player->mo->z, MT_FAKESHIELD); + mo->threshold = 10; + if (mo) + { + mo->scale = FRACUNIT/2; + mo->threshold = 10; + P_SetTarget(&mo->target, player->mo); + } + } + break; + case KITEM_ORBINAUT: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) + { + /*if (player->kartstuff[k_itemamount] == 1) // Orbinaut x1 held + { + angle_t newangle; + fixed_t newx; + fixed_t newy; + mobj_t *mo; + player->kartstuff[k_itemheld] = 1; + player->pflags |= PF_ATTACKDOWN; + newangle = player->mo->angle; + newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + mo = P_SpawnMobj(newx, newy, player->mo->z, MT_GREENSHIELD); + mo->threshold = 10; + if (mo) + P_SetTarget(&mo->target, player->mo); + } + else if (player->kartstuff[k_itemamount] > 1) // Orbinaut x3 held + {*/ + INT32 moloop; + + player->kartstuff[k_itemheld] = 2; + player->pflags |= PF_ATTACKDOWN; + K_PlayTauntSound(player->mo); + + for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++) + { + angle_t newangle; + fixed_t newx; + fixed_t newy; + mobj_t *mo; + + newangle = player->mo->angle; + newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + mo = P_SpawnMobj(newx, newy, player->mo->z, MT_GREENSHIELD); + if (mo) + { + mo->threshold = 10; + mo->lastlook = moloop+1; + P_SetTarget(&mo->target, player->mo); + mo->angle = FixedAngle(((360/player->kartstuff[k_itemamount])*moloop)*FRACUNIT); + } + } + //} + } + else if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_itemheld] == 1) + { + player->kartstuff[k_itemamount]--; + player->kartstuff[k_itemheld] = 0; + + K_ThrowKartItem(player, true, MT_GREENITEM, 1, false); + K_PlayTauntSound(player->mo); + } + else if (ATTACK_IS_DOWN && player->kartstuff[k_itemheld] == 2) // Orbinaut x3 thrown + { + K_ThrowKartItem(player, true, MT_GREENITEM, 1, false); + K_PlayTauntSound(player->mo); + player->pflags |= PF_ATTACKDOWN; + + player->kartstuff[k_itemamount]--; + if (!player->kartstuff[k_itemamount]) + player->kartstuff[k_itemheld] = 0; + } + break; + case KITEM_JAWZ: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) + { + /*if (player->kartstuff[k_itemamount] == 1) // Jawz x1 held + { + angle_t newangle; + fixed_t newx; + fixed_t newy; + mobj_t *mo; + player->kartstuff[k_itemheld] = 1; + player->pflags |= PF_ATTACKDOWN; + newangle = player->mo->angle; + newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + mo = P_SpawnMobj(newx, newy, player->mo->z, MT_REDSHIELD); + mo->threshold = 10; + if (mo) + P_SetTarget(&mo->target, player->mo); + } + else if (player->kartstuff[k_itemamount] > 1) // Jawz x2 held + {*/ + INT32 moloop; + + player->kartstuff[k_itemheld] = 2; + player->pflags |= PF_ATTACKDOWN; + K_PlayTauntSound(player->mo); + + for (moloop = 0; moloop < player->kartstuff[k_itemamount]; moloop++) + { + angle_t newangle; + fixed_t newx; + fixed_t newy; + mobj_t *mo; + + newangle = player->mo->angle; + newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + mo = P_SpawnMobj(newx, newy, player->mo->z, MT_REDSHIELD); + if (mo) + { + mo->threshold = 10; + mo->lastlook = moloop+1; + P_SetTarget(&mo->target, player->mo); + mo->angle = FixedAngle(((360/player->kartstuff[k_itemamount])*moloop)*FRACUNIT); + } + } + //} + } + else if (!(cmd->buttons & BT_ATTACK) && HOLDING_ITEM && player->kartstuff[k_itemheld] == 1) // Jawz x1 thrown + { + player->kartstuff[k_itemamount]--; + player->kartstuff[k_itemheld] = 0; + if (player->kartstuff[k_throwdir] == 1 || player->kartstuff[k_throwdir] == 0) + K_ThrowKartItem(player, true, MT_REDITEM, 1, false); + else if (player->kartstuff[k_throwdir] == -1) // Throwing backward gives you a dud that doesn't home in + K_ThrowKartItem(player, true, MT_REDITEMDUD, -1, false); + K_PlayTauntSound(player->mo); + } + else if (ATTACK_IS_DOWN && HOLDING_ITEM && player->kartstuff[k_itemheld] == 2) // Jawz x2 thrown + { + if (player->kartstuff[k_throwdir] == 1 || player->kartstuff[k_throwdir] == 0) + K_ThrowKartItem(player, true, MT_REDITEM, 1, false); + else if (player->kartstuff[k_throwdir] == -1) // Throwing backward gives you a dud that doesn't home in + K_ThrowKartItem(player, true, MT_REDITEMDUD, -1, false); + K_PlayTauntSound(player->mo); + player->pflags |= PF_ATTACKDOWN; + player->kartstuff[k_itemamount]--; + if (!player->kartstuff[k_itemamount]) + player->kartstuff[k_itemheld] = 0; + } + break; + case KITEM_MINE: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) + { + angle_t newangle; + fixed_t newx; + fixed_t newy; + mobj_t *mo; + player->kartstuff[k_itemheld] = 1; + player->pflags |= PF_ATTACKDOWN; + newangle = player->mo->angle; + newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); + mo = P_SpawnMobj(newx, newy, player->mo->z, MT_BOMBSHIELD); + mo->threshold = 10; + if (mo) + P_SetTarget(&mo->target, player->mo); + } + else if (!(cmd->buttons & BT_ATTACK) && HOLDING_ITEM) + { + K_ThrowKartItem(player, false, MT_BOMBITEM, 1, true); + K_PlayTauntSound(player->mo); + player->kartstuff[k_itemamount]--; + player->kartstuff[k_itemheld] = 0; + } + break; + case KITEM_BALLHOG: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) + { + player->kartstuff[k_itemamount]--; + + K_ThrowKartItem(player, true, MT_FIREBALL, 1, false); + S_StartSound(player->mo, sfx_mario7); + K_PlayTauntSound(player->mo); + } + break; + case KITEM_SPB: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) + { + K_DoSizeDown(player, true); + player->kartstuff[k_itemamount]--; + } + break; + case KITEM_SIZEUP: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO + && player->kartstuff[k_growshrinktimer] <= 0) // Size Up holds the item box hostage + { + if (P_IsLocalPlayer(player) && !player->exiting) + S_ChangeMusicInternal("mega", true); + if (!cv_kartstarsfx.value && !P_IsLocalPlayer(player)) + S_StartSound(player->mo, sfx_mega); + K_PlayTauntSound(player->mo); + player->kartstuff[k_growshrinktimer] = itemtime + TICRATE*2; + S_StartSound(player->mo, sfx_mario3); + player->pflags |= PF_ATTACKDOWN; + player->kartstuff[k_itemamount]--; + if (gametype != GT_RACE) + player->kartstuff[k_poweritemtimer] = 10*TICRATE; + } + break; + case KITEM_SIZEDOWN: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) + { + K_DoSizeDown(player, false); + player->kartstuff[k_itemamount]--; + } + break; + case KITEM_LIGHTNINGSHIELD: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) + { + K_DoLightningShield(player); + player->pflags |= PF_ATTACKDOWN; + player->kartstuff[k_itemamount]--; + } + break; + case KITEM_HYUDORO: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) + { + player->kartstuff[k_itemamount]--; + player->pflags |= PF_ATTACKDOWN; + K_DoHyudoroSteal(player); + } + break; + case KITEM_POGOSPRING: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO + && !player->kartstuff[k_pogospring]) + { + K_PlayTauntSound(player->mo); + K_DoBouncePad(player->mo, 32<pflags |= PF_ATTACKDOWN; + player->kartstuff[k_pogospring] = 1; + player->kartstuff[k_itemamount]--; + } + break; + case KITEM_SAD: + if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO + && !player->kartstuff[k_sadtimer]) + { + player->kartstuff[k_sadtimer] = stealtime; + player->kartstuff[k_itemamount]--; + } + break; + default: + break; + } } - // Mushroom Boost - if (((player->kartstuff[k_mushroomtimer] > 0 && player->kartstuff[k_boosting] == 0) - || (player->kartstuff[k_mushroomtimer] > 0 && ATTACK_IS_DOWN && NO_BOO)) && onground) + // No more! + if (!player->kartstuff[k_itemamount] && !player->kartstuff[k_itemheld]) + player->kartstuff[k_itemtype] = KITEM_NONE; + + // Sneaker Boost + if (((player->kartstuff[k_sneakertimer] > 0 && player->kartstuff[k_boosting] == 0) + || (player->kartstuff[k_sneakertimer] > 0 && ATTACK_IS_DOWN && NO_HYUDORO)) && onground) { player->kartstuff[k_boosting] = 1; } - else if (player->kartstuff[k_mushroomtimer] == 0 && player->kartstuff[k_boosting] == 1) + else if (player->kartstuff[k_sneakertimer] == 0 && player->kartstuff[k_boosting] == 1) player->kartstuff[k_boosting] = 0; - // Megashroom - Make the player grow! + // Size Up - Make the player grow! if (player->kartstuff[k_growshrinktimer] > ((itemtime + TICRATE*2) - 25)) { if (leveltime & 2) @@ -3583,7 +2992,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else if (player->kartstuff[k_growshrinktimer] > 26 && player->kartstuff[k_growshrinktimer] <= ((itemtime + TICRATE*2) - 25)) player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale)*3/2; - // Megashroom - Back to normal... + // Size Up - Back to normal... else if (player->kartstuff[k_growshrinktimer] > 1 && player->kartstuff[k_growshrinktimer] <= 26) { @@ -3596,11 +3005,13 @@ void K_MoveKartPlayer(player_t *player, boolean onground) S_StartSound(player->mo, sfx_mario8); if ((gametype != GT_RACE) - && (player->kartstuff[k_star] || player->kartstuff[k_megashroom] - || player->kartstuff[k_startimer] || player->kartstuff[k_growshrinktimer] > 0)) + && (player->kartstuff[k_itemtype] == KITEM_INVINCIBILITY + || player->kartstuff[k_itemtype] == KITEM_SIZEUP + || player->kartstuff[k_invincibilitytimer] + || player->kartstuff[k_growshrinktimer] > 0)) player->kartstuff[k_poweritemtimer] = 10*TICRATE; - if (player->kartstuff[k_bootimer] > 0) + if (player->kartstuff[k_hyudorotimer] > 0) { if ((player == &players[displayplayer] || (splitscreen && player == &players[secondarydisplayplayer]) @@ -3610,7 +3021,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) || (splitscreen && player == &players[secondarydisplayplayer]) || (splitscreen > 1 && player == &players[thirddisplayplayer]) || (splitscreen > 2 && player == &players[fourthdisplayplayer])) - && (player->kartstuff[k_bootimer] < 1*TICRATE/2 || player->kartstuff[k_bootimer] > bootime-(1*TICRATE/2)))) + && (player->kartstuff[k_hyudorotimer] < 1*TICRATE/2 || player->kartstuff[k_hyudorotimer] > hyudorotime-(1*TICRATE/2)))) { if (leveltime & 1) player->mo->flags2 |= MF2_DONTDRAW; @@ -3620,9 +3031,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else player->mo->flags2 |= MF2_DONTDRAW; - player->powers[pw_flashing] = player->kartstuff[k_bootimer]; // We'll do this for now, let's people know about the invisible people through subtle hints + player->powers[pw_flashing] = player->kartstuff[k_hyudorotimer]; // We'll do this for now, let's people know about the invisible people through subtle hints } - else if (player->kartstuff[k_bootimer] == 0) + else if (player->kartstuff[k_hyudorotimer] == 0) { player->mo->flags2 &= ~MF2_DONTDRAW; } @@ -3704,7 +3115,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } // Squishing - // If a Mega Mushroom or a Thwomp crushes you, get flattened instead of being killed. + // If a Size Up player or a Thwomp crushes you, get flattened instead of being killed. if (player->kartstuff[k_squishedtimer] <= 0) { @@ -3737,7 +3148,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) // Get an instant boost! if (player->kartstuff[k_boostcharge] >= 7 && player->kartstuff[k_boostcharge] <= 10) { - K_DoMushroom(player, false, true); + K_DoSneaker(player, false, true); } // You overcharged your engine? Those things are expensive!!! if (player->kartstuff[k_boostcharge] > 10) @@ -3809,7 +3220,7 @@ void K_CheckBalloons(void) //{ Patch Definitions static patch_t *kp_nodraw; -static patch_t *kp_itembg; + static patch_t *kp_timesticker; static patch_t *kp_timestickerwide; static patch_t *kp_lapsticker; @@ -3820,91 +3231,56 @@ static patch_t *kp_balloonstickerwide; static patch_t *kp_karmasticker; static patch_t *kp_splitkarmabomb; static patch_t *kp_timeoutsticker; + static patch_t *kp_lakitustart[NUMLAKIFRAMES]; static patch_t *kp_lakitulaps[17]; + 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_rankballoon; +static patch_t *kp_ranknoballoons; + static patch_t *kp_battlewin; static patch_t *kp_battlelose; static patch_t *kp_battlewait; static patch_t *kp_battleinfo; -static patch_t *kp_magnet; -static patch_t *kp_boo; -static patch_t *kp_boosteal; -static patch_t *kp_mushroom; -static patch_t *kp_doublemushroom; -static patch_t *kp_triplemushroom; -static patch_t *kp_megashroom; -static patch_t *kp_goldshroom; -static patch_t *kp_star; -static patch_t *kp_triplebanana; -static patch_t *kp_fakeitem; + +static patch_t *kp_itembg; +static patch_t *kp_itembgdark; +static patch_t *kp_itemmulsticker; +static patch_t *kp_itemx; + +static patch_t *kp_sneaker; +static patch_t *kp_rocketsneaker; +static patch_t *kp_invincibility[7]; static patch_t *kp_banana; -static patch_t *kp_greenshell; -static patch_t *kp_redshell; -static patch_t *kp_triplegreenshell; -static patch_t *kp_bobomb; -static patch_t *kp_blueshell; -static patch_t *kp_fireflower; -static patch_t *kp_tripleredshell; -static patch_t *kp_lightning; -static patch_t *kp_feather; +static patch_t *kp_fakeitem; +static patch_t *kp_orbinaut; +static patch_t *kp_jawz; +static patch_t *kp_mine; +static patch_t *kp_ballhog; +static patch_t *kp_selfpropelledbomb; +static patch_t *kp_sizeup; +static patch_t *kp_sizedown; +static patch_t *kp_lightningshield; +static patch_t *kp_hyudoro; +static patch_t *kp_pogospring; static patch_t *kp_kitchensink; -static patch_t *kp_itemused1; -static patch_t *kp_itemused2; -static patch_t *kp_itemused3; -static patch_t *kp_itemused4; -static patch_t *kp_itemused5; -static patch_t *kp_singlebananaicon; -static patch_t *kp_doublebananaicon; -static patch_t *kp_triplebananaicon; -static patch_t *kp_singlegreenshellicon; -static patch_t *kp_doublegreenshellicon; -static patch_t *kp_triplegreenshellicon; -static patch_t *kp_singleredshellicon; -static patch_t *kp_doubleredshellicon; -static patch_t *kp_tripleredshellicon; +static patch_t *kp_sadface; + static patch_t *kp_check; static patch_t *kp_checkw; -static patch_t *kp_checkstar; -static patch_t *kp_checkstarw; -static patch_t *kp_checkmega; -static patch_t *kp_checkmegaw; -static patch_t *kp_rankballoon; -static patch_t *kp_ranknoballoons; -/* -static patch_t *kp_neonoitem; -static patch_t *kp_electroshield; -static patch_t *kp_skghost; -static patch_t *kp_skghoststeal; -static patch_t *kp_speedshoe; -static patch_t *kp_doublespeedshoe; -static patch_t *kp_triplespeedshoe; -static patch_t *kp_sizeupmonitor; -static patch_t *kp_rocketshoe; -static patch_t *kp_invincibility; -static patch_t *kp_neotriplebanana; -static patch_t *kp_eggmanmonitor; -static patch_t *kp_neobanana; -static patch_t *kp_orbinaut; -static patch_t *kp_jaws; -static patch_t *kp_tripleorbinaut; -static patch_t *kp_specialstagemine; -static patch_t *kp_deton; -static patch_t *kp_laserwisp; -static patch_t *kp_doublejaws; -static patch_t *kp_sizedownmonitor; -static patch_t *kp_neoitemused1; -static patch_t *kp_neoitemused2; -static patch_t *kp_neoitemused3; -static patch_t *kp_neoitemused4; -static patch_t *kp_neoitemused5; -*/ +static patch_t *kp_checkinvuln; +static patch_t *kp_checkinvulnw; +static patch_t *kp_checksizeup; +static patch_t *kp_checksizeupw; void K_LoadKartHUDGraphics(void) { @@ -3913,8 +3289,6 @@ void K_LoadKartHUDGraphics(void) // Null Stuff kp_nodraw = W_CachePatchName("K_TRNULL", PU_HUDGFX); - kp_itembg = W_CachePatchName("K_ITNULL", PU_HUDGFX); - //kp_neonoitem = W_CachePatchName("KNITNULL", PU_HUDGFX); // Stickers kp_timesticker = W_CachePatchName("K_STTIME", PU_HUDGFX); @@ -3985,6 +3359,10 @@ void K_LoadKartHUDGraphics(void) kp_facethird = W_CachePatchName("K_PFACE3", PU_HUDGFX); kp_facefourth = W_CachePatchName("K_PFACE4", PU_HUDGFX); + // Extra ranking icons + kp_rankballoon = W_CachePatchName("K_BLNICO", PU_HUDGFX); + kp_ranknoballoons = W_CachePatchName("K_NOBLNS", PU_HUDGFX); + // Battle graphics kp_battlewin = W_CachePatchName("K_BWIN", PU_HUDGFX); kp_battlelose = W_CachePatchName("K_BLOSE", PU_HUDGFX); @@ -3992,94 +3370,45 @@ void K_LoadKartHUDGraphics(void) kp_battleinfo = W_CachePatchName("K_BINFO", PU_HUDGFX); // Kart Item Windows - kp_magnet = W_CachePatchName("K_ITMAGN", PU_HUDGFX); - kp_boo = W_CachePatchName("K_ITBOO1", PU_HUDGFX); - kp_boosteal = W_CachePatchName("K_ITBOO2", PU_HUDGFX); - kp_mushroom = W_CachePatchName("K_ITMUSH", PU_HUDGFX); - kp_doublemushroom = W_CachePatchName("K_ITDOUB", PU_HUDGFX); - kp_triplemushroom = W_CachePatchName("K_ITTRIP", PU_HUDGFX); - kp_megashroom = W_CachePatchName("K_ITMEGA", PU_HUDGFX); - kp_goldshroom = W_CachePatchName("K_ITGOLD", PU_HUDGFX); - kp_star = W_CachePatchName("K_ITSTAR", PU_HUDGFX); - kp_triplebanana = W_CachePatchName("K_ITTBAN", PU_HUDGFX); - kp_fakeitem = W_CachePatchName("K_ITFAKE", PU_HUDGFX); - kp_banana = W_CachePatchName("K_ITBANA", PU_HUDGFX); - kp_greenshell = W_CachePatchName("K_ITGREE", PU_HUDGFX); - kp_redshell = W_CachePatchName("K_ITREDS", PU_HUDGFX); - kp_triplegreenshell = W_CachePatchName("K_ITTGRE", PU_HUDGFX); - kp_bobomb = W_CachePatchName("K_ITBOBO", PU_HUDGFX); - kp_blueshell = W_CachePatchName("K_ITBLUE", PU_HUDGFX); - kp_fireflower = W_CachePatchName("K_ITFIRE", PU_HUDGFX); - kp_tripleredshell = W_CachePatchName("K_ITTRED", PU_HUDGFX); - kp_lightning = W_CachePatchName("K_ITLIGH", PU_HUDGFX); - kp_feather = W_CachePatchName("K_ITFETH", PU_HUDGFX); + kp_itembg = W_CachePatchName("K_ITBG", PU_HUDGFX); + kp_itembgdark = W_CachePatchName("K_ITBGD", PU_HUDGFX); + kp_itemmulsticker = W_CachePatchName("K_ITMUL", PU_HUDGFX); + kp_itemx = W_CachePatchName("K_ITX", PU_HUDGFX); + + kp_sneaker = W_CachePatchName("K_ITSHOE", PU_HUDGFX); + kp_rocketsneaker = W_CachePatchName("K_ITRSHE", PU_HUDGFX); + for (i = 0; i < 7; i++) + { + sprintf(buffer, "K_ITINV%d", i+1); + kp_invincibility[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX); + } + kp_banana = W_CachePatchName("K_ITBANA", PU_HUDGFX); + kp_fakeitem = W_CachePatchName("K_ITFAKE", PU_HUDGFX); + kp_orbinaut = W_CachePatchName("K_ITORBN", PU_HUDGFX); + kp_jawz = W_CachePatchName("K_ITJAWZ", PU_HUDGFX); + kp_mine = W_CachePatchName("K_ITMINE", PU_HUDGFX); + kp_ballhog = W_CachePatchName("K_ITBHOG", PU_HUDGFX); + kp_selfpropelledbomb = W_CachePatchName("K_ITSPB", PU_HUDGFX); + kp_sizeup = W_CachePatchName("K_ITSUP", PU_HUDGFX); + kp_sizedown = W_CachePatchName("K_ITSDWN", PU_HUDGFX); + kp_lightningshield = W_CachePatchName("K_ITLITS", PU_HUDGFX); + kp_hyudoro = W_CachePatchName("K_ITHYUD", PU_HUDGFX); + kp_pogospring = W_CachePatchName("K_ITPOGO", PU_HUDGFX); kp_kitchensink = W_CachePatchName("K_ITSINK", PU_HUDGFX); - - // Item-used - Closing the item window after an item is used - kp_itemused1 = W_CachePatchName("K_ITUSE1", PU_HUDGFX); - kp_itemused2 = W_CachePatchName("K_ITUSE2", PU_HUDGFX); - kp_itemused3 = W_CachePatchName("K_ITUSE3", PU_HUDGFX); - kp_itemused4 = W_CachePatchName("K_ITUSE4", PU_HUDGFX); - kp_itemused5 = W_CachePatchName("K_ITUSE5", PU_HUDGFX); - - // Triple-item HUD icons - kp_singlebananaicon = W_CachePatchName("K_TRBAN1", PU_HUDGFX); - kp_doublebananaicon = W_CachePatchName("K_TRBAN2", PU_HUDGFX); - kp_triplebananaicon = W_CachePatchName("K_TRBAN3", PU_HUDGFX); - kp_singlegreenshellicon = W_CachePatchName("K_TRGRE1", PU_HUDGFX); - kp_doublegreenshellicon = W_CachePatchName("K_TRGRE2", PU_HUDGFX); - kp_triplegreenshellicon = W_CachePatchName("K_TRGRE3", PU_HUDGFX); - kp_singleredshellicon = W_CachePatchName("K_TRRED1", PU_HUDGFX); - kp_doubleredshellicon = W_CachePatchName("K_TRRED2", PU_HUDGFX); - kp_tripleredshellicon = W_CachePatchName("K_TRRED3", PU_HUDGFX); + kp_sadface = W_CachePatchName("K_ITSAD", PU_HUDGFX); // CHECK indicators kp_check = W_CachePatchName("K_CHECK1", PU_HUDGFX); kp_checkw = W_CachePatchName("K_CHECK2", PU_HUDGFX); - kp_checkstar = W_CachePatchName("K_CHECK3", PU_HUDGFX); - kp_checkstarw = W_CachePatchName("K_CHECK4", PU_HUDGFX); - kp_checkmega = W_CachePatchName("K_CHECK5", PU_HUDGFX); - kp_checkmegaw = W_CachePatchName("K_CHECK6", PU_HUDGFX); - - // Extra ranking icons - kp_rankballoon = W_CachePatchName("K_BLNICO", PU_HUDGFX); - kp_ranknoballoons = W_CachePatchName("K_NOBLNS", PU_HUDGFX); - - /* - // Neo-Kart item windows - kp_electroshield = W_CachePatchName("KNITELEC", PU_HUDGFX); - kp_skghost = W_CachePatchName("KTITSKG1", PU_HUDGFX); - kp_skghoststeal = W_CachePatchName("KTITSKG2", PU_HUDGFX); - kp_speedshoe = W_CachePatchName("KTITSPEE", PU_HUDGFX); - kp_triplespeedshoe = W_CachePatchName("KTITTSPE", PU_HUDGFX); - kp_sizeupmonitor = W_CachePatchName("KTITSUPM", PU_HUDGFX); - kp_rocketshoe = W_CachePatchName("KTITROCK", PU_HUDGFX); - kp_invincibility = W_CachePatchName("KTITINVI", PU_HUDGFX); - kp_neotriplebanana = W_CachePatchName("KTITTBAN", PU_HUDGFX); - kp_eggmanmonitor = W_CachePatchName("KTITEGGM", PU_HUDGFX); - kp_neobanana = W_CachePatchName("KTITBANA", PU_HUDGFX); - kp_orbinaut = W_CachePatchName("KTITORBI", PU_HUDGFX); - kp_jaws = W_CachePatchName("KTITJAWS", PU_HUDGFX); - kp_tripleorbinaut = W_CachePatchName("KTITTORB", PU_HUDGFX); - kp_specialstagemine = W_CachePatchName("KTITSPEC", PU_HUDGFX); - kp_deton = W_CachePatchName("KTITDETO", PU_HUDGFX); - kp_laserwisp = W_CachePatchName("KTITLASE", PU_HUDGFX); - kp_doublejaws = W_CachePatchName("KTITDJAW", PU_HUDGFX); - kp_sizedownmonitor = W_CachePatchName("KTITSDOW", PU_HUDGFX); - - // Item-used - Closing the item window after an item is used (Neo-Kart) - kp_neoitemused1 = W_CachePatchName("KNITUSE1", PU_HUDGFX); - kp_neoitemused2 = W_CachePatchName("KNITUSE2", PU_HUDGFX); - kp_neoitemused3 = W_CachePatchName("KNITUSE3", PU_HUDGFX); - kp_neoitemused4 = W_CachePatchName("KNITUSE4", PU_HUDGFX); - kp_neoitemused5 = W_CachePatchName("KNITUSE5", PU_HUDGFX); - */ + kp_checkinvuln = W_CachePatchName("K_CHECK3", PU_HUDGFX); + kp_checkinvulnw = W_CachePatchName("K_CHECK4", PU_HUDGFX); + kp_checksizeup = W_CachePatchName("K_CHECK5", PU_HUDGFX); + kp_checksizeupw = W_CachePatchName("K_CHECK6", PU_HUDGFX); } //} INT32 ITEM_X, ITEM_Y; // Item Window -INT32 TRIP_X, TRIP_Y; // Triple Item Icon INT32 TIME_X, TIME_Y; // Time Sticker INT32 LAPS_X, LAPS_Y; // Lap Sticker INT32 SPDM_X, SPDM_Y; // Speedometer @@ -4127,39 +3456,36 @@ static void K_initKartHUD(void) // Single Screen (defaults) // Item Window - ITEM_X = BASEVIDWIDTH - 52; // 268 - ITEM_Y = 9; // 9 - // Triple Item Object - TRIP_X = 143; // 143 - TRIP_Y = BASEVIDHEIGHT- 34; // 166 + ITEM_X = 5; // 5 + ITEM_Y = 5; // 5 // Level Timer - TIME_X = 9; // 172 - TIME_Y = 9; // 9 + TIME_X = BASEVIDWIDTH - 148; // 172 + TIME_Y = 9; // 9 // Level Laps - LAPS_X = 9; // 9 - LAPS_Y = BASEVIDHEIGHT- 29; // 171 + LAPS_X = 9; // 9 + LAPS_Y = BASEVIDHEIGHT - 29; // 171 // Speedometer - SPDM_X = 9; // 9 - SPDM_Y = BASEVIDHEIGHT- 45; // 155 + SPDM_X = 9; // 9 + SPDM_Y = BASEVIDHEIGHT - 45; // 155 // Position Number - POSI_X = BASEVIDWIDTH - 6; // 268 - POSI_Y = BASEVIDHEIGHT- 4; // 138 + POSI_X = BASEVIDWIDTH - 6; // 268 + POSI_Y = BASEVIDHEIGHT - 4; // 138 // Top-Four Faces - FACE_X = 9; // 9 - FACE_Y = 92; // 92 + FACE_X = 9; // 9 + FACE_Y = 92; // 92 // Lakitu - LAKI_X = 136; // 138 - LAKI_Y = 58 - 200; // 58 + LAKI_X = 136; // 138 + LAKI_Y = 58 - 200; // 58 // CHECK graphic - CHEK_Y = BASEVIDHEIGHT; // 200 + CHEK_Y = BASEVIDHEIGHT; // 200 // Minimap - MINI_X = BASEVIDWIDTH - 58; // 262 - MINI_Y = BASEVIDHEIGHT/2; // 100 + MINI_X = BASEVIDWIDTH - 58; // 262 + MINI_Y = BASEVIDHEIGHT/2; // 100 if (splitscreen) // Splitscreen { - ITEM_X = 9; - ITEM_Y = 4; + ITEM_X = 5; + ITEM_Y = 0; LAPS_Y = (BASEVIDHEIGHT/2)-24; @@ -4227,45 +3553,7 @@ INT32 K_calcSplitFlags(INT32 snapflags) return (splitflags|snapflags); } -static void K_drawKartItemClose(void) -{ - // ITEM_X = BASEVIDWIDTH-50; // 270 - // ITEM_Y = 24; // 24 - - // Why write V_DrawScaledPatch calls over and over when they're all the same? - // Set to 'no draw' just in case. - patch_t *localpatch = kp_nodraw; - INT32 splitflags = K_calcSplitFlags(V_SNAPTOTOP|V_SNAPTORIGHT); - - if (splitscreen) - splitflags = K_calcSplitFlags(V_SNAPTOTOP|V_SNAPTOLEFT); - - /*if () - switch (stplyr->kartstuff[k_itemclose]) - { - case 1: localpatch = kp_neoitemused5; break; - case 3: localpatch = kp_neoitemused4; break; - case 5: localpatch = kp_neoitemused3; break; - case 7: localpatch = kp_neoitemused2; break; - case 9: localpatch = kp_neoitemused1; break; - default: break; - } - else*/ - switch (stplyr->kartstuff[k_itemclose]) - { - case 1: localpatch = kp_itemused5; break; - case 3: localpatch = kp_itemused4; break; - case 5: localpatch = kp_itemused3; break; - case 7: localpatch = kp_itemused2; break; - case 9: localpatch = kp_itemused1; break; - default: break; - } - - if (localpatch != kp_nodraw) - V_DrawScaledPatch(ITEM_X, ITEM_Y, V_HUDTRANS|splitflags, localpatch); -} - -static void K_drawKartItemRoulette(void) +static void K_drawKartItem(void) { // ITEM_X = BASEVIDWIDTH-50; // 270 // ITEM_Y = 24; // 24 @@ -4274,230 +3562,109 @@ static void K_drawKartItemRoulette(void) // Set to 'no item' just in case. patch_t *localpatch = kp_nodraw; patch_t *localbg = kp_itembg; - INT32 splitflags = K_calcSplitFlags(V_SNAPTOTOP|V_SNAPTORIGHT); + patch_t *localinv = kp_invincibility[(leveltime % (7*3)) / 3]; + INT32 splitflags = K_calcSplitFlags(V_SNAPTOTOP|V_SNAPTOLEFT); - if (splitscreen) + if (stplyr->kartstuff[k_itemroulette]) { - splitflags = K_calcSplitFlags(V_SNAPTOTOP|V_SNAPTOLEFT); - if (splitscreen > 1) - localbg = kp_itemused1; - } - - /*if () - switch(stplyr->kartstuff[k_itemroulette] % 53) + switch((stplyr->kartstuff[k_itemroulette] % (13*3)) / 3) { // Each case is handled in threes, to give three frames of in-game time to see the item on the roulette - // I'm also skipping by threes for the power order as to what item shows on the roulette - case 0: case 1: case 2: localpatch = kp_electroshield; break; // Electro-Shield - case 3: case 4: case 5: localpatch = kp_triplespeedshoe; break; // Triple Speed Shoe - case 6: case 7: case 8: localpatch = kp_invincibility; break; // Invincibility - case 9: case 10: case 11: localpatch = kp_neobanana; break; // Banana - case 12: case 13: case 14: localpatch = kp_tripleorbinaut; break; // 3x Orbinaut - case 15: case 16: case 17: localpatch = kp_laserwisp; break; // Laser Wisp - case 18: case 19: case 20: localpatch = kp_skghost; break; // S3K Ghost - case 21: case 22: case 23: localpatch = kp_sizeupmonitor; break; // Size-Up Monitor - case 24: case 25: case 26: localpatch = kp_neotriplebanana; break; // Triple Banana - case 27: case 28: case 29: localpatch = kp_orbinaut; break; // 1x Orbinaut - case 30: case 31: case 32: localpatch = kp_specialstagemine; break; // Specialstage Mines - case 33: case 34: case 35: localpatch = kp_doublejaws; break; // 2x Jaws - case 36: case 37: case 38: localpatch = kp_speedshoe; break; // Speed Shoe - case 39: case 40: case 41: localpatch = kp_rocketshoe; break; // Rocket Shoe - case 42: case 43: case 44: localpatch = kp_eggmanmonitor; break; // Eggman Monitor - case 45: case 46: case 47: localpatch = kp_jaws; break; // 1x Jaws - case 48: case 49: case 50: localpatch = kp_deton; break; // Deton - case 51: case 52: case 53: localpatch = kp_sizedownmonitor; break; // Size-Down Monitor + case 0: localpatch = kp_sneaker; break; // Sneaker + case 1: localpatch = kp_banana; break; // Banana + case 2: localpatch = kp_orbinaut; break; // Orbinaut + case 3: localpatch = kp_mine; break; // Mine + case 4: localpatch = kp_sizeup; break; // Size Up + case 5: localpatch = kp_hyudoro; break; // Hyudoro + case 6: localpatch = kp_rocketsneaker; break; // Rocket Sneaker + case 7: localpatch = kp_jawz; break; // Jawz + case 8: localpatch = kp_selfpropelledbomb; break; // Self-Propelled Bomb + case 9: localpatch = kp_sizedown; break; // Size Down + case 10: localpatch = localinv; break; // Invincibility + case 11: localpatch = kp_fakeitem; break; // Fake Item + case 12: localpatch = kp_ballhog; break; // Ballhog + case 13: localpatch = kp_lightningshield; break; // Lightning Shield + //case 14: localpatch = kp_pogospring; break; // Pogo Spring + //case 15: localpatch = kp_kitchensink; break; // Kitchen Sink default: break; } - else*/ - switch(stplyr->kartstuff[k_itemroulette] % 53) - { - // Each case is handled in threes, to give three frames of in-game time to see the item on the roulette - // I'm also skipping by threes for the power order as to what item shows on the roulette - case 0: case 1: case 2: localpatch = kp_magnet; break; // Magnet - case 3: case 4: case 5: localpatch = kp_triplemushroom; break; // Triple Mushroom - case 6: case 7: case 8: localpatch = kp_star; break; // Star - case 9: case 10: case 11: localpatch = kp_banana; break; // Banana - case 12: case 13: case 14: localpatch = kp_triplegreenshell; break; // Triple Green Shell - case 15: case 16: case 17: localpatch = kp_fireflower; break; // Fire Flower - case 18: case 19: case 20: localpatch = kp_boo; break; // Boo - case 21: case 22: case 23: localpatch = kp_megashroom; break; // Mega Mushroom - case 24: case 25: case 26: localpatch = kp_triplebanana; break; // Triple Banana - case 27: case 28: case 29: localpatch = kp_greenshell; break; // Green Shell - case 30: case 31: case 32: localpatch = kp_bobomb; break; // Bob-omb - case 33: case 34: case 35: localpatch = kp_tripleredshell; break; // Triple Red Shell - case 36: case 37: case 38: localpatch = kp_mushroom; break; // Mushroom - case 39: case 40: case 41: localpatch = kp_goldshroom; break; // Gold Mushroom - case 42: case 43: case 44: localpatch = kp_fakeitem; break; // Fake Item - case 45: case 46: case 47: localpatch = kp_redshell; break; // Red Shell - case 48: case 49: case 50: localpatch = kp_blueshell; break; // Blue Shell - case 51: case 52: case 53: localpatch = kp_lightning; break; // Lightning - default: break; - } - - if (localpatch == kp_nodraw) - return; - - V_DrawScaledPatch(ITEM_X, ITEM_Y, V_HUDTRANS|splitflags, localbg); - V_DrawScaledPatch(ITEM_X, ITEM_Y, V_HUDTRANS|splitflags, localpatch); -} - -static void K_drawKartRetroItem(void) -{ - // ITEM_X = BASEVIDWIDTH-50; // 270 - // ITEM_Y = 24; // 24 - - // Why write V_DrawScaledPatch calls over and over when they're all the same? - // Set to 'no item' just in case. - patch_t *localpatch = kp_nodraw; - patch_t *localbg = kp_itembg; - INT32 X = ITEM_X; - INT32 splitflags = K_calcSplitFlags(V_SNAPTOTOP|V_SNAPTORIGHT); - - if (splitscreen) - { - splitflags = K_calcSplitFlags(V_SNAPTOTOP|V_SNAPTOLEFT); - if (splitscreen > 1) - localbg = kp_itemused1; - } - - // I'm doing this a little weird and drawing mostly in reverse order - // The only actual reason is to make triple/double/single mushrooms line up this way in the code below - // This shouldn't have any actual baring over how it functions - // Boo is first, because we're drawing it on top of the player's current item - if ((stplyr->kartstuff[k_bootaketimer] > 0 || stplyr->kartstuff[k_boostolentimer] > 0) - && (leveltime & 2)) localpatch = kp_boosteal; - else if (stplyr->kartstuff[k_boostolentimer] > 0 && !(leveltime & 2)) localpatch = kp_nodraw; - else if (stplyr->kartstuff[k_kitchensink] == 1) localpatch = kp_kitchensink; - else if (stplyr->kartstuff[k_feather] & 1) localpatch = kp_feather; - else if (stplyr->kartstuff[k_lightning] == 1) localpatch = kp_lightning; - else if (stplyr->kartstuff[k_tripleredshell]) localpatch = kp_tripleredshell; // &8 - else if (stplyr->kartstuff[k_fireflower] == 1) localpatch = kp_fireflower; - else if (stplyr->kartstuff[k_blueshell] == 1) localpatch = kp_blueshell; - else if (stplyr->kartstuff[k_bobomb]) localpatch = kp_bobomb; // &2 - else if (stplyr->kartstuff[k_triplegreenshell]) localpatch = kp_triplegreenshell; // &8 - else if (stplyr->kartstuff[k_redshell]) localpatch = kp_redshell; // &2 - else if (stplyr->kartstuff[k_greenshell]) localpatch = kp_greenshell; // &2 - else if (stplyr->kartstuff[k_banana]) localpatch = kp_banana; // &2 - else if (stplyr->kartstuff[k_fakeitem] & 2) localpatch = kp_fakeitem; - else if (stplyr->kartstuff[k_triplebanana]) localpatch = kp_triplebanana; // &8 - else if (stplyr->kartstuff[k_star] == 1) localpatch = kp_star; - else if (stplyr->kartstuff[k_goldshroom] == 1 - || (stplyr->kartstuff[k_goldshroomtimer] > 1 && (leveltime & 1))) localpatch = kp_goldshroom; - else if (stplyr->kartstuff[k_goldshroomtimer] > 1 && !(leveltime & 1)) localpatch = kp_nodraw; - else if (stplyr->kartstuff[k_megashroom] == 1 - || (stplyr->kartstuff[k_growshrinktimer] > 1 && (leveltime & 1))) localpatch = kp_megashroom; - else if (stplyr->kartstuff[k_growshrinktimer] > 1 && !(leveltime & 1)) localpatch = kp_nodraw; - else if (stplyr->kartstuff[k_mushroom] & 4) localpatch = kp_triplemushroom; - else if (stplyr->kartstuff[k_mushroom] & 2) localpatch = kp_doublemushroom; - else if (stplyr->kartstuff[k_mushroom] == 1) localpatch = kp_mushroom; - else if (stplyr->kartstuff[k_boo] == 1) localpatch = kp_boo; - else if (stplyr->kartstuff[k_magnet] == 1) localpatch = kp_magnet; - - if (localpatch == kp_nodraw) - return; - - V_DrawScaledPatch(X, ITEM_Y, V_HUDTRANS|splitflags, localbg); - V_DrawScaledPatch(X, ITEM_Y, V_HUDTRANS|splitflags, localpatch); -} - -/* -static void K_drawKartNeoItem(void) -{ - // ITEM_X = BASEVIDWIDTH-50; // 270 - // ITEM_Y = 24; // 24 - - // Why write V_DrawScaledPatch calls over and over when they're all the same? - // Set to 'no item' just in case. - patch_t *localpatch = kp_noitem; - - // I'm doing this a little weird and drawing mostly in reverse order - // The only actual reason is to make triple/double/single mushrooms line up this way in the code below - // This shouldn't have any actual baring over how it functions - // Boo is first, because we're drawing it on top of the player's current item - if ((stplyr->kartstuff[k_bootaketimer] > 0 - || stplyr->kartstuff[k_boostolentimer] > 0) && (leveltime & 2)) localpatch = kp_skghoststeal; - else if (stplyr->kartstuff[k_boostolentimer] > 0 && !(leveltime & 2)) localpatch = kp_neonoitem; - else if (stplyr->kartstuff[k_lightning] == 1) localpatch = kp_sizedownmonitor; - else if (stplyr->kartstuff[k_jaws] & 4) localpatch = kp_doublejaws; - else if (stplyr->kartstuff[k_laserwisp] == 1) localpatch = kp_laserwisp; - else if (stplyr->kartstuff[k_blueshell] == 1) localpatch = kp_deton; - else if (stplyr->kartstuff[k_bobomb] & 2) localpatch = kp_specialstagemine; - else if (stplyr->kartstuff[k_triplegreenshell] & 8) localpatch = kp_tripleorbinaut; - else if (stplyr->kartstuff[k_redshell] & 2) localpatch = kp_jaws; - else if (stplyr->kartstuff[k_greenshell] & 2) localpatch = kp_orbinaut; - else if (stplyr->kartstuff[k_banana] & 2) localpatch = kp_neobanana; - else if (stplyr->kartstuff[k_fakeitem] & 2) localpatch = kp_eggmanmonitor; - else if (stplyr->kartstuff[k_triplebanana] & 8) localpatch = kp_neotriplebanana; - else if (stplyr->kartstuff[k_star] == 1) localpatch = kp_invincibility; - else if (stplyr->kartstuff[k_goldshroom] == 1 - || (stplyr->kartstuff[k_goldshroomtimer] > 1 && (leveltime & 1))) localpatch = kp_rocketshoe; - else if (stplyr->kartstuff[k_goldshroomtimer] > 1 && !(leveltime & 1)) localpatch = kp_neonoitem; - else if (stplyr->kartstuff[k_megashroom] == 1 - || (stplyr->kartstuff[k_growshrinktimer] > 1 && (leveltime & 1))) localpatch = kp_sizeupmonitor; - else if (stplyr->kartstuff[k_growshrinktimer] > 1 && !(leveltime & 1)) localpatch = kp_neonoitem; - else if (stplyr->kartstuff[k_mushroom] & 4) localpatch = kp_triplespeedshoe; - else if (stplyr->kartstuff[k_mushroom] & 2) localpatch = kp_doublespeedshoe; - else if (stplyr->kartstuff[k_mushroom] == 1) localpatch = kp_speedshoe; - else if (stplyr->kartstuff[k_boo] & 8) localpatch = kp_skghost; - else if (stplyr->kartstuff[k_magnet] & 8) localpatch = kp_electroshield; - - V_DrawScaledPatch(ITEM_X, ITEM_Y, V_SNAPTORIGHT|V_HUDTRANSHALF, localpatch); -} -*/ - -/* -static void K_DrawKartTripleItem(void) -{ - // TRIP_X = 143; // 143 - // TRIP_Y = BASEVIDHEIGHT-34; // 166 - - // Why write V_DrawScaledPatch calls over and over when they're all the same? - // Set to 'no draw' just in case. - patch_t *localpatch = kp_nodraw; - INT32 thisitem; - - if () - { - thisitem = stplyr->kartstuff[k_triplebanana]; - if (thisitem & 1) localpatch = kp_singleneobananaicon; - else if (thisitem & 2) localpatch = kp_doubleneobananaicon; - else if (thisitem & 4) localpatch = kp_tripleneobananaicon; - - thisitem = stplyr->kartstuff[k_triplegreenshell]; - if (thisitem & 1) localpatch = kp_singleorbitauricon; - else if (thisitem & 2) localpatch = kp_doubleorbitauricon; - else if (thisitem & 4) localpatch = kp_tripleorbitauricon; - - thisitem = stplyr->kartstuff[k_jaws]; - if (thisitem & 1) localpatch = kp_singlejawsicon; - else if (thisitem & 2) localpatch = kp_doublejawsicon; } else { - thisitem = stplyr->kartstuff[k_triplebanana]; - if (thisitem & 4) localpatch = kp_triplebananaicon; - else if (thisitem & 2) localpatch = kp_doublebananaicon; - else if (thisitem & 1) localpatch = kp_singlebananaicon; + // I'm doing this a little weird and drawing mostly in reverse order + // The only actual reason is to make sneakers line up this way in the code below + // This shouldn't have any actual baring over how it functions + // Hyudoro is first, because we're drawing it on top of the player's current item + if (stplyr->kartstuff[k_stealingtimer] > 0 || stplyr->kartstuff[k_stolentimer] > 0) + { + if (leveltime & 2) + localpatch = kp_hyudoro; + else if (!(leveltime & 2)) + localpatch = kp_nodraw; + } + else if (stplyr->kartstuff[k_rocketsneakertimer] > 1) + { + if (leveltime & 1) + localpatch = kp_rocketsneaker; + else if (!(leveltime & 1)) + localpatch = kp_nodraw; + } + else if (stplyr->kartstuff[k_growshrinktimer] > 1) + { + if (leveltime & 1) + localpatch = kp_sizeup; + else if (!(leveltime & 1)) + localpatch = kp_nodraw; + } + else if (stplyr->kartstuff[k_sadtimer] > 0) + { + if (leveltime & 2) + localpatch = kp_sadface; + else if (!(leveltime & 2)) + localpatch = kp_nodraw; + } + else + { + if (!(stplyr->kartstuff[k_itemamount] || stplyr->kartstuff[k_itemheld])) + return; - thisitem = stplyr->kartstuff[k_triplegreenshell]; - if (thisitem & 4) localpatch = kp_triplegreenshellicon; - else if (thisitem & 2) localpatch = kp_doublegreenshellicon; - else if (thisitem & 1) localpatch = kp_singlegreenshellicon; - - thisitem = stplyr->kartstuff[k_tripleredshell]; - if (thisitem & 4) localpatch = kp_tripleredshellicon; - else if (thisitem & 2) localpatch = kp_doubleredshellicon; - else if (thisitem & 1) localpatch = kp_singleredshellicon; - - if (stplyr->kartstuff[k_banana] & 1) localpatch = kp_singlebananaicon; - if (stplyr->kartstuff[k_greenshell] & 1) localpatch = kp_singlegreenshellicon; - if (stplyr->kartstuff[k_redshell] & 1) localpatch = kp_singleredshellicon; + switch(stplyr->kartstuff[k_itemtype]) + { + case KITEM_SNEAKER: localpatch = kp_sneaker; break; + case KITEM_ROCKETSNEAKER: localpatch = kp_rocketsneaker; break; + case KITEM_INVINCIBILITY: localpatch = localinv; localbg = kp_itembgdark; break; + case KITEM_BANANA: localpatch = kp_banana; break; + case KITEM_FAKE: localpatch = kp_fakeitem; break; + case KITEM_ORBINAUT: localpatch = kp_orbinaut; break; + case KITEM_JAWZ: localpatch = kp_jawz; break; + case KITEM_MINE: localpatch = kp_mine; break; + case KITEM_BALLHOG: localpatch = kp_ballhog; break; + case KITEM_SPB: localpatch = kp_selfpropelledbomb; break; + case KITEM_SIZEUP: localpatch = kp_sizeup; break; + case KITEM_SIZEDOWN: localpatch = kp_sizedown; break; + case KITEM_LIGHTNINGSHIELD: localpatch = kp_lightningshield; break; + case KITEM_HYUDORO: localpatch = kp_hyudoro; break; + case KITEM_POGOSPRING: localpatch = kp_pogospring; break; + case KITEM_KITCHENSINK: localpatch = kp_kitchensink; break; + case KITEM_SAD: localpatch = kp_sadface; break; + default: return; + } + } } - if (localpatch != kp_nodraw) - V_DrawScaledPatch(TRIP_X, TRIP_Y, V_SNAPTOBOTTOM, localpatch); + V_DrawScaledPatch(ITEM_X, ITEM_Y, V_HUDTRANS|splitflags, localbg); + + // Then, the numbers: + if (stplyr->kartstuff[k_itemamount] > 1 && !stplyr->kartstuff[k_itemroulette]) + { + V_DrawScaledPatch(ITEM_X+9, ITEM_Y+24, V_HUDTRANS|splitflags, kp_itemmulsticker); + V_DrawScaledPatch(ITEM_X, ITEM_Y, V_HUDTRANS|splitflags, localpatch); + V_DrawScaledPatch(ITEM_X+28, ITEM_Y+41, V_HUDTRANS|splitflags, kp_itemx); + V_DrawKartString(ITEM_X+38, ITEM_Y+36, V_HUDTRANS|splitflags, va("%d", stplyr->kartstuff[k_itemamount])); + } + else + V_DrawScaledPatch(ITEM_X, ITEM_Y, V_HUDTRANS|splitflags, localpatch); } -*/ static void K_drawKartTimestamp(void) { @@ -4929,21 +4096,21 @@ static void K_drawKartPlayerCheck(void) if (!(players[i].mo)) continue; - if ((players[i].kartstuff[k_startimer] <= 0) && (leveltime & 2)) + if ((players[i].kartstuff[k_invincibilitytimer] <= 0) && (leveltime & 2)) { - if (players[i].kartstuff[k_megashroom] || players[i].kartstuff[k_growshrinktimer] > 0) - localpatch = kp_checkmegaw; - else if (players[i].kartstuff[k_star] || players[i].kartstuff[k_startimer]) - localpatch = kp_checkstarw; + if (players[i].kartstuff[k_itemtype] == KITEM_SIZEUP || players[i].kartstuff[k_growshrinktimer] > 0) + localpatch = kp_checksizeupw; + else if (players[i].kartstuff[k_itemtype] == KITEM_INVINCIBILITY || players[i].kartstuff[k_invincibilitytimer]) + localpatch = kp_checkinvulnw; else localpatch = kp_checkw; } else { - if (players[i].kartstuff[k_megashroom] || players[i].kartstuff[k_growshrinktimer] > 0) - localpatch = kp_checkmega; - else if (players[i].kartstuff[k_star] || players[i].kartstuff[k_startimer]) - localpatch = kp_checkstar; + if (players[i].kartstuff[k_itemtype] == KITEM_SIZEUP || players[i].kartstuff[k_growshrinktimer] > 0) + localpatch = kp_checksizeup; + else if (players[i].kartstuff[k_itemtype] == KITEM_INVINCIBILITY || players[i].kartstuff[k_invincibilitytimer]) + localpatch = kp_checkinvuln; else localpatch = kp_check; } @@ -5335,20 +4502,8 @@ void K_drawKartHUD(void) if ((splitscreen == 0 || splitscreen == 2) && cv_kartminimap.value) K_drawKartMinimap(); - // If the item window is closing, draw it closing! - if (stplyr->kartstuff[k_itemclose]) - K_drawKartItemClose(); - - // If the item-roulette is going, draw that - // Otherwise, draw the item window normally (separated for retro/neo, to prevent this block from becoming a mess - if (stplyr->kartstuff[k_itemroulette]) - K_drawKartItemRoulette(); - // else if () - // K_drawKartNeoItem(); - else - K_drawKartRetroItem(); - - //K_DrawKartTripleItem(); + // Draw the item window + K_drawKartItem(); // If not splitscreen, draw... if (!splitscreen) diff --git a/src/k_kart.h b/src/k_kart.h index 9a6c62bb..00fd65b5 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -11,7 +11,7 @@ UINT8 colortranslations[MAXSKINCOLORS][16]; extern const char *KartColor_Names[MAXSKINCOLORS]; -void K_StarmanColormap(UINT8 *dest_colormap, UINT8 skincolor); +void K_RainbowColormap(UINT8 *dest_colormap, UINT8 skincolor); void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color); UINT8 K_GetKartColorByName(const char *name); @@ -27,7 +27,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source); void K_StealBalloon(player_t *player, player_t *victim, boolean force); void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source); void K_SpawnDriftTrail(player_t *player); -void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost); +void K_DoSneaker(player_t *player, boolean doPFlag, boolean startboost); void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed); boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y); INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 67fc7ac2..21e6573a 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -2090,7 +2090,7 @@ static int lib_kSpawnDriftTrail(lua_State *L) return 0; } -static int lib_kDoMushroom(lua_State *L) +static int lib_kDoSneaker(lua_State *L) { player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); boolean doPFlag = luaL_checkboolean(L, 2); @@ -2098,7 +2098,7 @@ static int lib_kDoMushroom(lua_State *L) NOHUD if (!player) return LUA_ErrInvalid(L, "player_t"); - K_DoMushroom(player, doPFlag, startboost); + K_DoSneaker(player, doPFlag, startboost); return 0; } @@ -2336,7 +2336,7 @@ static luaL_Reg lib[] = { {"K_StealBalloon",lib_kStealBalloon}, {"K_SpawnKartExplosion",lib_kSpawnKartExplosion}, {"K_SpawnDriftTrail",lib_kSpawnDriftTrail}, - {"K_DoMushroom",lib_kDoMushroom}, + {"K_DoSneaker",lib_kDoSneaker}, {"K_DoBouncePad",lib_kDoBouncePad}, {"K_MomentumToFacing",lib_kMomentumToFacing}, {"K_GetKartSpeed",lib_kGetKartSpeed}, diff --git a/src/m_menu.c b/src/m_menu.c index 978c45e8..5f34da89 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1497,25 +1497,25 @@ static menuitem_t OP_MonitorToggleMenu[] = { // Printing handled by drawing function // Instead of using this for dumb monitors, lets use the new item bools we have :V - {IT_STRING | IT_CVAR, NULL, "Mushrooms", &cv_mushroom, 10}, - {IT_STRING | IT_CVAR, NULL, "Triple Mushrooms", &cv_triplemushroom, 18}, - {IT_STRING | IT_CVAR, NULL, "Mega Mushrooms", &cv_megashroom, 26}, - {IT_STRING | IT_CVAR, NULL, "Golden Mushrooms", &cv_goldshroom, 34}, - {IT_STRING | IT_CVAR, NULL, "Stars", &cv_star, 42}, - {IT_STRING | IT_CVAR, NULL, "Bananas", &cv_banana, 50}, - {IT_STRING | IT_CVAR, NULL, "Triple Bananas", &cv_triplebanana, 58}, - {IT_STRING | IT_CVAR, NULL, "Fake Items", &cv_fakeitem, 66}, - {IT_STRING | IT_CVAR, NULL, "Green Shells", &cv_greenshell, 74}, - {IT_STRING | IT_CVAR, NULL, "Red Shells", &cv_redshell, 82}, - {IT_STRING | IT_CVAR, NULL, "Triple Green Shells", &cv_triplegreenshell, 90}, - {IT_STRING | IT_CVAR, NULL, "Triple Red Shells", &cv_tripleredshell, 98}, - {IT_STRING | IT_CVAR, NULL, "Bob-ombs", &cv_bobomb, 106}, - {IT_STRING | IT_CVAR, NULL, "Fire Flowers", &cv_fireflower, 114}, - {IT_STRING | IT_CVAR, NULL, "Magnets", &cv_magnet, 122}, - {IT_STRING | IT_CVAR, NULL, "Boos", &cv_boo, 130}, - {IT_STRING | IT_CVAR, NULL, "Lightning", &cv_lightning, 138}, - {IT_STRING | IT_CVAR, NULL, "Blue Lightning", &cv_blueshell, 146}, - {IT_STRING | IT_CVAR, NULL, "Feathers", &cv_feather, 154}, + {IT_STRING | IT_CVAR, NULL, "Sneakers", &cv_sneaker, 10}, + {IT_STRING | IT_CVAR, NULL, "Triple Sneakers", &cv_triplesneaker, 18}, + {IT_STRING | IT_CVAR, NULL, "Rocket Sneakers", &cv_rocketsneaker, 26}, + {IT_STRING | IT_CVAR, NULL, "Invinciblity", &cv_invincibility, 34}, + {IT_STRING | IT_CVAR, NULL, "Bananas", &cv_banana, 42}, + {IT_STRING | IT_CVAR, NULL, "Triple Bananas", &cv_triplebanana, 50}, + {IT_STRING | IT_CVAR, NULL, "Fake Items", &cv_fakeitem, 58}, + {IT_STRING | IT_CVAR, NULL, "Orbinauts", &cv_orbinaut, 66}, + {IT_STRING | IT_CVAR, NULL, "Triple Orbinauts", &cv_tripleorbinaut, 74}, + {IT_STRING | IT_CVAR, NULL, "Jawz", &cv_jawz, 82}, + {IT_STRING | IT_CVAR, NULL, "Dual Jawz", &cv_dualjawz, 90}, + {IT_STRING | IT_CVAR, NULL, "Mines", &cv_mine, 98}, + {IT_STRING | IT_CVAR, NULL, "Ballhogs", &cv_ballhog, 106}, + {IT_STRING | IT_CVAR, NULL, "Self-Propelled Bombs",&cv_selfpropelledbomb,114}, + {IT_STRING | IT_CVAR, NULL, "Size Up", &cv_sizeup, 122}, + {IT_STRING | IT_CVAR, NULL, "Size Down", &cv_sizedown, 130}, + {IT_STRING | IT_CVAR, NULL, "Lightning Shields", &cv_lightningshield, 138}, + {IT_STRING | IT_CVAR, NULL, "Hyudoros", &cv_hyudoro, 146}, + {IT_STRING | IT_CVAR, NULL, "Pogo Springs", &cv_pogospring, 154}, }; // ========================================================================== diff --git a/src/p_enemy.c b/src/p_enemy.c index 59a4a076..0088beff 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -187,9 +187,9 @@ void A_RandomStateRange(mobj_t *actor); void A_DualAction(mobj_t *actor); void A_RemoteAction(mobj_t *actor); void A_ToggleFlameJet(mobj_t *actor); -void A_ItemPop(mobj_t *actor); // SRB2kart -void A_RedShellChase(mobj_t *actor); // SRB2kart -void A_BobombExplode(mobj_t *actor); // SRB2kart +void A_ItemPop(mobj_t *actor); // SRB2kart +void A_JawzChase(mobj_t *actor); // SRB2kart +void A_MineExplode(mobj_t *actor); // SRB2kart void A_OrbitNights(mobj_t *actor); void A_GhostMe(mobj_t *actor); void A_SetObjectState(mobj_t *actor); @@ -741,7 +741,7 @@ static boolean P_LookForShield(mobj_t *actor) continue; // SRB2kart - magnet item - if (player->kartstuff[k_magnettimer] //(player->powers[pw_shield] & SH_NOSTACK) == SH_ATTRACT + if (player->kartstuff[k_attractiontimer] //(player->powers[pw_shield] & SH_NOSTACK) == SH_ATTRACT && (P_AproxDistance(P_AproxDistance(actor->x-player->mo->x, actor->y-player->mo->y), actor->z-player->mo->z) < FixedMul(RING_DIST/4, player->mo->scale))) { P_SetTarget(&actor->tracer, player->mo); @@ -2605,8 +2605,9 @@ void A_MonitorPop(mobj_t *actor) case MT_QUESTIONBOX: // Random! { mobjtype_t spawnchance[256]; - INT32 numchoices = 0, i = 0; + INT32 numchoices = 0/*, i = 0*/; + /* #define QUESTIONBOXCHANCES(type, cvar) \ for (i = cvar.value; i; --i) spawnchance[numchoices++] = type @@ -2624,6 +2625,7 @@ for (i = cvar.value; i; --i) spawnchance[numchoices++] = type QUESTIONBOXCHANCES(MT_RECYCLETV, cv_recycler); #undef QUESTIONBOXCHANCES + */ if (numchoices == 0) { @@ -3613,7 +3615,7 @@ void A_AttractChase(mobj_t *actor) // Turn flingrings back into regular rings if attracted. if (actor->tracer && actor->tracer->player - && actor->tracer->player->kartstuff[k_magnettimer] //&& (actor->tracer->player->powers[pw_shield] & SH_NOSTACK) != SH_ATTRACT + && actor->tracer->player->kartstuff[k_attractiontimer] //&& (actor->tracer->player->powers[pw_shield] & SH_NOSTACK) != SH_ATTRACT && actor->info->reactiontime && actor->type != (mobjtype_t)actor->info->reactiontime) { mobj_t *newring; @@ -3830,7 +3832,7 @@ void A_ThrownRing(mobj_t *actor) P_SetTarget(&actor->tracer, NULL); } - if (actor->tracer && (actor->tracer->health)) // SRB2kart - red shells always follow + if (actor->tracer && (actor->tracer->health)) // SRB2kart - jawz always follow //&& (actor->tracer->player->powers[pw_shield] & SH_NOSTACK) == SH_ATTRACT)// Already found someone to follow. { const INT32 temp = actor->threshold; @@ -3882,7 +3884,7 @@ void A_ThrownRing(mobj_t *actor) && actor->target->player->ctfteam == player->ctfteam) continue; - if (actor->target->player->kartstuff[k_position] < player->kartstuff[k_position]) // SRB2kart - Red Shells only go after people ahead of you + if (actor->target->player->kartstuff[k_position] < player->kartstuff[k_position]) // SRB2kart - Jawz only go after people ahead of you continue; } @@ -3925,8 +3927,11 @@ static inline boolean PIT_GrenadeRing(mobj_t *thing) if (thing == grenade->target && !(grenade->threshold == 0)) // Don't blow up at your owner. return true; - if (thing->player && (thing->player->kartstuff[k_bootimer] - || (thing->player->kartstuff[k_balloon] <= 0 && thing->player->kartstuff[k_comebacktimer]))) + if (thing->player && thing->player->kartstuff[k_hyudorotimer]) + return true; + + if ((gametype != GT_RACE) && thing->player + && thing->player->kartstuff[k_balloon] <= 0 && thing->player->kartstuff[k_comebacktimer]) return true; if ((gametype == GT_CTF || gametype == GT_TEAMMATCH) @@ -8090,7 +8095,7 @@ void A_ToggleFlameJet(mobj_t* actor) } } -//{ SRB2kart - A_ItemPop, A_RedShellChase and A_BobombExplode +//{ SRB2kart - A_ItemPop, A_JawzChase and A_MineExplode void A_ItemPop(mobj_t *actor) { mobj_t *remains; @@ -8149,14 +8154,14 @@ void A_ItemPop(mobj_t *actor) P_RemoveMobj(actor); } -void A_RedShellChase(mobj_t *actor) +void A_JawzChase(mobj_t *actor) { INT32 c = 0; INT32 stop; player_t *player; #ifdef HAVE_BLUA - if (LUA_CallAction("A_RedShellChase", actor)) + if (LUA_CallAction("A_JawzChase", actor)) return; #endif @@ -8216,7 +8221,7 @@ void A_RedShellChase(mobj_t *actor) if (gametype == GT_RACE) // Only in races, in match and CTF you should go after any nearby players { // USER TARGET - if (actor->target->player->kartstuff[k_position] != (player->kartstuff[k_position] + 1)) // Red Shells only go after the person directly ahead of you -Sryder + if (actor->target->player->kartstuff[k_position] != (player->kartstuff[k_position] + 1)) // Jawz only go after the person directly ahead of you -Sryder continue; } @@ -8253,7 +8258,7 @@ void A_RedShellChase(mobj_t *actor) } -void A_BobombExplode(mobj_t *actor) +void A_MineExplode(mobj_t *actor) { mobj_t *mo2; thinker_t *th; @@ -8261,7 +8266,7 @@ void A_BobombExplode(mobj_t *actor) INT32 locvar1 = var1; mobjtype_t type; #ifdef HAVE_BLUA - if (LUA_CallAction("A_BobombExplode", actor)) + if (LUA_CallAction("A_MineExplode", actor)) return; #endif diff --git a/src/p_floor.c b/src/p_floor.c index e761903c..9ce4df83 100644 --- a/src/p_floor.c +++ b/src/p_floor.c @@ -237,7 +237,7 @@ result_e T_MovePlane(sector_t *sector, fixed_t speed, fixed_t dest, boolean crus { case MT_GOOP: // Egg Slimer's goop objects case MT_SPINFIRE: // Elemental Shield flame balls - case MT_MUSHROOMTRAIL: + case MT_SNEAKERTRAIL: case MT_SPIKE: // Floor Spike // Is the object hang from the ceiling? // In that case, swap the planes used. diff --git a/src/p_inter.c b/src/p_inter.c index 5b3addd5..0ac95d02 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -161,23 +161,16 @@ boolean P_CanPickupItem(player_t *player, boolean weapon) if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0) // No balloons in Match return false; - if (player->kartstuff[k_magnettimer]) // You should probably collect stuff when you're attracting it :V + if (player->kartstuff[k_attractiontimer]) // You should probably collect stuff when you're attracting it :V return true; - if (player->kartstuff[k_bootaketimer] || player->kartstuff[k_boostolentimer] - || player->kartstuff[k_growshrinktimer] > 1 || player->kartstuff[k_goldshroomtimer]) // Item-specific timer going off + if (player->kartstuff[k_stealingtimer] || player->kartstuff[k_stolentimer] + || player->kartstuff[k_growshrinktimer] > 1 || player->kartstuff[k_rocketsneakertimer]) // Item-specific timer going off return false; if (player->kartstuff[k_itemroulette] - || player->kartstuff[k_greenshell] || player->kartstuff[k_triplegreenshell] - || player->kartstuff[k_redshell] || player->kartstuff[k_tripleredshell] - || player->kartstuff[k_banana] || player->kartstuff[k_triplebanana] - || player->kartstuff[k_fakeitem] & 2 || player->kartstuff[k_magnet] - || player->kartstuff[k_bobomb] || player->kartstuff[k_blueshell] - || player->kartstuff[k_mushroom] || player->kartstuff[k_fireflower] - || player->kartstuff[k_star] || player->kartstuff[k_goldshroom] - || player->kartstuff[k_lightning] || player->kartstuff[k_megashroom] - || player->kartstuff[k_boo] || player->kartstuff[k_feather] & 1) // Item slot already taken up + || player->kartstuff[k_itemamount] + || player->kartstuff[k_itemheld]) // Item slot already taken up return false; return true; @@ -1635,7 +1628,7 @@ static void P_HitDeathMessages(player_t *player, mobj_t *inflictor, mobj_t *sour str = M_GetText("%s%s's tagging hand %s %s.\n"); break; case MT_SPINFIRE: - case MT_MUSHROOMTRAIL: + case MT_SNEAKERTRAIL: str = M_GetText("%s%s's elemental fire trail %s %s.\n"); break; case MT_THROWNBOUNCE: @@ -2038,36 +2031,22 @@ 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->type == MT_GREENSHIELD && target->target->player->kartstuff[k_greenshell] & 1) - target->target->player->kartstuff[k_greenshell] &= ~1; - else if (target->type == MT_REDSHIELD && target->target->player->kartstuff[k_redshell] & 1) - target->target->player->kartstuff[k_redshell] &= ~1; - else if (target->type == MT_BANANASHIELD && target->target->player->kartstuff[k_banana] & 1) - target->target->player->kartstuff[k_banana] &= ~1; - else if (target->type == MT_FAKESHIELD && target->target->player->kartstuff[k_fakeitem] & 1) - target->target->player->kartstuff[k_fakeitem] &= ~1; - else if (target->type == MT_BOMBSHIELD && target->target->player->kartstuff[k_bobomb] & 1) - target->target->player->kartstuff[k_bobomb] &= ~1; - else if (target->type == MT_TRIPLEGREENSHIELD1 && target->target->player->kartstuff[k_triplegreenshell] & 1) - target->target->player->kartstuff[k_triplegreenshell] &= ~1; - else if (target->type == MT_TRIPLEGREENSHIELD2 && target->target->player->kartstuff[k_triplegreenshell] & 2) - target->target->player->kartstuff[k_triplegreenshell] &= ~2; - else if (target->type == MT_TRIPLEGREENSHIELD3 && target->target->player->kartstuff[k_triplegreenshell] & 4) - target->target->player->kartstuff[k_triplegreenshell] &= ~4; - else if (target->type == MT_TRIPLEREDSHIELD1 && target->target->player->kartstuff[k_tripleredshell] & 1) - target->target->player->kartstuff[k_tripleredshell] &= ~1; - else if (target->type == MT_TRIPLEREDSHIELD2 && target->target->player->kartstuff[k_tripleredshell] & 2) - target->target->player->kartstuff[k_tripleredshell] &= ~2; - else if (target->type == MT_TRIPLEREDSHIELD3 && target->target->player->kartstuff[k_tripleredshell] & 4) - target->target->player->kartstuff[k_tripleredshell] &= ~4; - else if (target->type == MT_TRIPLEBANANASHIELD1 && target->target->player->kartstuff[k_triplebanana] & 1) - target->target->player->kartstuff[k_triplebanana] &= ~1; - else if (target->type == MT_TRIPLEBANANASHIELD2 && target->target->player->kartstuff[k_triplebanana] & 2) - target->target->player->kartstuff[k_triplebanana] &= ~2; - else if (target->type == MT_TRIPLEBANANASHIELD3 && target->target->player->kartstuff[k_triplebanana] & 4) - target->target->player->kartstuff[k_triplebanana] &= ~4; - /*else if (target->type == MT_BATTLEBALLOON && target->target->player->kartstuff[k_balloon] > target->threshold-1) - target->target->player->kartstuff[k_balloon] = target->threshold-1;*/ + if (target->target->player->kartstuff[k_fakeitem] && target->type == MT_FAKESHIELD) + target->target->player->kartstuff[k_fakeitem] = 0; + + if ((target->target->player->kartstuff[k_itemheld]) + && ((target->type == MT_GREENSHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_ORBINAUT) + || (target->type == MT_REDSHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_JAWZ) + || (target->type == MT_BANANASHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_BANANA) + || (target->type == MT_BOMBSHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_MINE))) + { + if (target->lastlook > 0) + target->target->player->kartstuff[k_itemamount] = target->lastlook-1; + else + target->target->player->kartstuff[k_itemamount]--; + if (!target->target->player->kartstuff[k_itemamount]) + target->target->player->kartstuff[k_itemheld] = 0; + } } // @@ -2080,11 +2059,8 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source) // SRB2kart if (target->type != MT_PLAYER && !(target->flags & MF_MONITOR) && !(target->type == MT_GREENITEM || target->type == MT_GREENSHIELD - || target->type == MT_TRIPLEGREENSHIELD1 || target->type == MT_TRIPLEGREENSHIELD2 || target->type == MT_TRIPLEGREENSHIELD3 || target->type == MT_REDITEM || target->type == MT_REDITEMDUD || target->type == MT_REDSHIELD - || target->type == MT_TRIPLEREDSHIELD1 || target->type == MT_TRIPLEREDSHIELD2 || target->type == MT_TRIPLEREDSHIELD3 || target->type == MT_BANANAITEM || target->type == MT_BANANASHIELD - || target->type == MT_TRIPLEBANANASHIELD1 || target->type == MT_TRIPLEBANANASHIELD2 || target->type == MT_TRIPLEBANANASHIELD3 || target->type == MT_FAKEITEM || target->type == MT_FAKESHIELD || target->type == MT_FIREBALL)) // kart dead items target->flags |= MF_NOGRAVITY; // Don't drop Tails 03-08-2000 @@ -3147,13 +3123,13 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da //{ SRB2kart - special damage sources - player->kartstuff[k_mushroomtimer] = 0; + player->kartstuff[k_sneakertimer] = 0; // Thunder if (damage == 64 && player != source->player) { // Don't flip out while super! - if (!player->kartstuff[k_startimer] && player->kartstuff[k_growshrinktimer] <= 0) + if (!player->kartstuff[k_invincibilitytimer] && player->kartstuff[k_growshrinktimer] <= 0) { // Start slipping! K_SpinPlayer(player, source); @@ -3162,7 +3138,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da player->mo->destscale = 6*FRACUNIT/8; player->kartstuff[k_growshrinktimer] -= (100+20*(16-(player->kartstuff[k_position]))); } - // Mega Mushroom? Let's take that away. + // Size Up? Let's take that away. if (player->kartstuff[k_growshrinktimer] > 0) { player->kartstuff[k_growshrinktimer] = 2; @@ -3208,15 +3184,13 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da // Instant-Death if (damage == 10000) P_KillPlayer(player, source, damage); - else if (player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->powers[pw_flashing]) + else if (player->kartstuff[k_invincibilitytimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->powers[pw_flashing]) return false; else { if (inflictor && (inflictor->type == MT_GREENITEM || inflictor->type == MT_GREENSHIELD || inflictor->type == MT_REDITEM || inflictor->type == MT_REDSHIELD || inflictor->type == MT_REDITEMDUD || inflictor->type == MT_FAKEITEM || inflictor->type == MT_FAKESHIELD - || inflictor->type == MT_TRIPLEGREENSHIELD1 || inflictor->type == MT_TRIPLEGREENSHIELD2 || inflictor->type == MT_TRIPLEGREENSHIELD3 - || inflictor->type == MT_TRIPLEREDSHIELD1 || inflictor->type == MT_TRIPLEREDSHIELD2 || inflictor->type == MT_TRIPLEREDSHIELD3 || inflictor->player)) { player->kartstuff[k_spinouttype] = 1; diff --git a/src/p_map.c b/src/p_map.c index 0a52d6fb..ee3d22c9 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -655,10 +655,8 @@ static boolean PIT_CheckThing(mobj_t *thing) if (tmthing->type == MT_RANDOMITEM) return true; - if (tmthing->type == MT_GREENITEM || tmthing->type == MT_REDITEM || tmthing->type == MT_REDITEMDUD || - tmthing->type == MT_GREENSHIELD || tmthing->type == MT_REDSHIELD || - tmthing->type == MT_TRIPLEGREENSHIELD1 || tmthing->type == MT_TRIPLEGREENSHIELD2 || tmthing->type == MT_TRIPLEGREENSHIELD3 || - tmthing->type == MT_TRIPLEREDSHIELD1 || tmthing->type == MT_TRIPLEREDSHIELD2 || tmthing->type == MT_TRIPLEREDSHIELD3) + if (tmthing->type == MT_GREENITEM || tmthing->type == MT_REDITEM || tmthing->type == MT_REDITEMDUD + || tmthing->type == MT_GREENSHIELD || tmthing->type == MT_REDSHIELD) { // see if it went over / under if (tmthing->z > thing->z + thing->height) @@ -672,10 +670,8 @@ static boolean PIT_CheckThing(mobj_t *thing) if (tmthing->health <= 0 || thing->health <= 0) return true; - if (((tmthing->type == MT_TRIPLEGREENSHIELD1 || tmthing->type == MT_TRIPLEGREENSHIELD2 || tmthing->type == MT_TRIPLEGREENSHIELD3 - || tmthing->type == MT_TRIPLEREDSHIELD1 || tmthing->type == MT_TRIPLEREDSHIELD2 || tmthing->type == MT_TRIPLEREDSHIELD3) - && (thing->type == MT_TRIPLEGREENSHIELD1 || thing->type == MT_TRIPLEGREENSHIELD2 || thing->type == MT_TRIPLEGREENSHIELD3 - || thing->type == MT_TRIPLEREDSHIELD1 || thing->type == MT_TRIPLEREDSHIELD2 || thing->type == MT_TRIPLEREDSHIELD3)) + if ((tmthing->type == MT_GREENSHIELD || tmthing->type == MT_REDSHIELD) && tmthing->lastlook + && (thing->type == MT_GREENSHIELD || thing->type == MT_REDSHIELD) && thing->lastlook && (tmthing->target == thing->target)) // Don't hit each other if you have the same target return true; @@ -705,10 +701,7 @@ static boolean PIT_CheckThing(mobj_t *thing) } else if (thing->type == MT_GREENITEM || thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD || thing->type == MT_GREENSHIELD || thing->type == MT_REDSHIELD - || thing->type == MT_TRIPLEGREENSHIELD1 || thing->type == MT_TRIPLEGREENSHIELD2 || thing->type == MT_TRIPLEGREENSHIELD3 - || thing->type == MT_TRIPLEREDSHIELD1 || thing->type == MT_TRIPLEREDSHIELD2 || thing->type == MT_TRIPLEREDSHIELD3 || thing->type == MT_BANANAITEM || thing->type == MT_BANANASHIELD - || thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3 || thing->type == MT_FIREBALL) { // Other Item Damage @@ -739,9 +732,7 @@ static boolean PIT_CheckThing(mobj_t *thing) } else if (thing->type == MT_FAKEITEM || thing->type == MT_FAKESHIELD) { - if (tmthing->type == MT_GREENSHIELD || tmthing->type == MT_REDSHIELD - || tmthing->type == MT_TRIPLEGREENSHIELD1 || tmthing->type == MT_TRIPLEGREENSHIELD2 || tmthing->type == MT_TRIPLEGREENSHIELD3 - || tmthing->type == MT_TRIPLEREDSHIELD1 || tmthing->type == MT_TRIPLEREDSHIELD2 || tmthing->type == MT_TRIPLEREDSHIELD3) + if (tmthing->type == MT_GREENSHIELD || tmthing->type == MT_REDSHIELD) { // This Item Damage if (tmthing->eflags & MFE_VERTICALFLIP) @@ -856,7 +847,6 @@ static boolean PIT_CheckThing(mobj_t *thing) return true; // This doesn't collide with anything, but we want it to effect the player anyway. } else if (tmthing->type == MT_BANANASHIELD || tmthing->type == MT_BANANAITEM - || tmthing->type == MT_TRIPLEBANANASHIELD1 || tmthing->type == MT_TRIPLEBANANASHIELD2 || tmthing->type == MT_TRIPLEBANANASHIELD3 || tmthing->type == MT_FIREBALL) { // see if it went over / under @@ -871,8 +861,7 @@ static boolean PIT_CheckThing(mobj_t *thing) if (tmthing->health <= 0 || thing->health <= 0) return true; - if (((tmthing->type == MT_BANANASHIELD || tmthing->type == MT_TRIPLEBANANASHIELD1 || tmthing->type == MT_TRIPLEBANANASHIELD2 || tmthing->type == MT_TRIPLEBANANASHIELD3) - && (thing->type == MT_BANANASHIELD || thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3)) + if (((tmthing->type == MT_BANANASHIELD) && (thing->type == MT_BANANASHIELD)) && (tmthing->target == thing->target)) // Don't hit each other if you have the same target return true; @@ -899,11 +888,9 @@ static boolean PIT_CheckThing(mobj_t *thing) P_SetObjectMomZ(tmthing, 8*FRACUNIT, false); P_InstaThrust(tmthing, R_PointToAngle2(thing->x, thing->y, tmthing->x, tmthing->y)+ANGLE_90, 16*FRACUNIT); } - else if (thing->type == MT_BANANASHIELD || thing->type == MT_BANANAITEM - || thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3 - || thing->type == MT_GREENITEM || thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD - || thing->type == MT_GREENSHIELD || thing->type == MT_TRIPLEGREENSHIELD1 || thing->type == MT_TRIPLEGREENSHIELD2 || thing->type == MT_TRIPLEGREENSHIELD3 - || thing->type == MT_REDSHIELD || thing->type == MT_TRIPLEREDSHIELD1 || thing->type == MT_TRIPLEREDSHIELD2 || thing->type == MT_TRIPLEREDSHIELD3 + else if (thing->type == MT_BANANAITEM || thing->type == MT_BANANASHIELD + || thing->type == MT_GREENITEM || thing->type == MT_GREENSHIELD + || thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD || thing->type == MT_REDSHIELD || thing->type == MT_FIREBALL) { // Other Item Damage @@ -934,7 +921,7 @@ static boolean PIT_CheckThing(mobj_t *thing) } else if (thing->type == MT_FAKEITEM || thing->type == MT_FAKESHIELD) { - if (tmthing->type == MT_BANANASHIELD || tmthing->type == MT_TRIPLEBANANASHIELD1 || tmthing->type == MT_TRIPLEBANANASHIELD2 || tmthing->type == MT_TRIPLEBANANASHIELD3) + if (tmthing->type == MT_BANANASHIELD) { // This Item Damage if (tmthing->eflags & MFE_VERTICALFLIP) @@ -999,10 +986,10 @@ static boolean PIT_CheckThing(mobj_t *thing) P_SetObjectMomZ(tmthing, 8*FRACUNIT, false); P_InstaThrust(tmthing, R_PointToAngle2(thing->x, thing->y, tmthing->x, tmthing->y)+ANGLE_90, 16*FRACUNIT); } - else if (thing->type == MT_GREENSHIELD || thing->type == MT_TRIPLEGREENSHIELD1 || thing->type == MT_TRIPLEGREENSHIELD2 || thing->type == MT_TRIPLEGREENSHIELD3 // When these items collide with the fake item, both of them are destroyed - || thing->type == MT_REDSHIELD || thing->type == MT_TRIPLEREDSHIELD1 || thing->type == MT_TRIPLEREDSHIELD2 || thing->type == MT_TRIPLEREDSHIELD3 + else if (thing->type == MT_GREENSHIELD // When these items collide with the fake item, both of them are destroyed + || thing->type == MT_REDSHIELD || thing->type == MT_BOMBSHIELD - || thing->type == MT_BANANASHIELD || thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3 + || thing->type == MT_BANANASHIELD || thing->type == MT_FAKEITEM || thing->type == MT_FAKESHIELD) { // Other Item Damage @@ -1073,8 +1060,7 @@ static boolean PIT_CheckThing(mobj_t *thing) P_KillMobj(tmthing, thing, thing); } else if (thing->type == MT_GREENITEM || thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD - || thing->type == MT_GREENSHIELD || thing->type == MT_TRIPLEGREENSHIELD1 || thing->type == MT_TRIPLEGREENSHIELD2 || thing->type == MT_TRIPLEGREENSHIELD3 - || thing->type == MT_REDSHIELD || thing->type == MT_TRIPLEREDSHIELD1 || thing->type == MT_TRIPLEREDSHIELD2 || thing->type == MT_TRIPLEREDSHIELD3) + || thing->type == MT_GREENSHIELD || thing->type == MT_REDSHIELD) { P_KillMobj(tmthing, thing, thing); @@ -1096,11 +1082,8 @@ static boolean PIT_CheckThing(mobj_t *thing) else if (tmthing->type == MT_PLAYER && (thing->type == MT_GREENSHIELD || thing->type == MT_GREENITEM || thing->type == MT_REDSHIELD || thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD - || thing->type == MT_TRIPLEGREENSHIELD1 || thing->type == MT_TRIPLEGREENSHIELD2 || thing->type == MT_TRIPLEGREENSHIELD3 - || thing->type == MT_TRIPLEREDSHIELD1 || thing->type == MT_TRIPLEREDSHIELD2 || thing->type == MT_TRIPLEREDSHIELD3 || thing->type == MT_FAKESHIELD || thing->type == MT_FAKEITEM || thing->type == MT_BANANASHIELD || thing->type == MT_BANANAITEM - || thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3 || thing->type == MT_BOMBSHIELD || thing->type == MT_BOMBITEM || thing->type == MT_BOMBEXPLOSION || thing->type == MT_SINK || thing->type == MT_FIREBALL @@ -1116,8 +1099,7 @@ static boolean PIT_CheckThing(mobj_t *thing) && !(thing->type == MT_GREENITEM || thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD)) return true; - if (thing->type == MT_GREENSHIELD || thing->type == MT_TRIPLEGREENSHIELD1 || thing->type == MT_TRIPLEGREENSHIELD2 || thing->type == MT_TRIPLEGREENSHIELD3 - || thing->type == MT_REDSHIELD || thing->type == MT_TRIPLEREDSHIELD1 || thing->type == MT_TRIPLEREDSHIELD2 || thing->type == MT_TRIPLEREDSHIELD3 + if (thing->type == MT_GREENSHIELD || thing->type == MT_REDSHIELD || thing->type == MT_GREENITEM || thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD || thing->type == MT_FAKESHIELD || thing->type == MT_FAKEITEM) { @@ -1146,7 +1128,6 @@ static boolean PIT_CheckThing(mobj_t *thing) P_InstaThrust(thing, R_PointToAngle2(tmthing->x, tmthing->y, thing->x, thing->y)+ANGLE_90, 16*FRACUNIT); } else if (thing->type == MT_BANANASHIELD || thing->type == MT_BANANAITEM - || thing->type == MT_TRIPLEBANANASHIELD1 || thing->type == MT_TRIPLEBANANASHIELD2 || thing->type == MT_TRIPLEBANANASHIELD3 || thing->type == MT_FIREBALL) { if ((thing->target == tmthing) && (thing->threshold > 0)) @@ -1549,9 +1530,9 @@ static boolean PIT_CheckThing(mobj_t *thing) } // SRB2kart - Starpower! - if (tmthing->player->kartstuff[k_startimer] && !thing->player->kartstuff[k_startimer]) + if (tmthing->player->kartstuff[k_invincibilitytimer] && !thing->player->kartstuff[k_invincibilitytimer]) P_DamageMobj(thing, tmthing, tmthing, 1); - else if (thing->player->kartstuff[k_startimer] && !tmthing->player->kartstuff[k_startimer]) + else if (thing->player->kartstuff[k_invincibilitytimer] && !tmthing->player->kartstuff[k_invincibilitytimer]) P_DamageMobj(tmthing, thing, thing, 1); if (G_RingSlingerGametype() && (!G_GametypeHasTeams() || tmthing->player->ctfteam != thing->player->ctfteam)) @@ -1644,13 +1625,13 @@ static boolean PIT_CheckThing(mobj_t *thing) return true; // underneath if (thing->player->kartstuff[k_growshrinktimer] || thing->player->kartstuff[k_squishedtimer] - || thing->player->kartstuff[k_bootimer] || thing->player->kartstuff[k_spinouttimer] - || thing->player->kartstuff[k_startimer] || thing->player->kartstuff[k_justbumped] + || thing->player->kartstuff[k_hyudorotimer] || thing->player->kartstuff[k_spinouttimer] + || thing->player->kartstuff[k_invincibilitytimer] || thing->player->kartstuff[k_justbumped] || (gametype != GT_RACE && (thing->player->kartstuff[k_balloon] <= 0 && (thing->player->kartstuff[k_comebacktimer] || thing->player->kartstuff[k_comebackmode] == 1))) || tmthing->player->kartstuff[k_growshrinktimer] || tmthing->player->kartstuff[k_squishedtimer] - || tmthing->player->kartstuff[k_bootimer] || tmthing->player->kartstuff[k_spinouttimer] - || tmthing->player->kartstuff[k_startimer] || tmthing->player->kartstuff[k_justbumped] + || tmthing->player->kartstuff[k_hyudorotimer] || tmthing->player->kartstuff[k_spinouttimer] + || tmthing->player->kartstuff[k_invincibilitytimer] || tmthing->player->kartstuff[k_justbumped] || (gametype != GT_RACE && (tmthing->player->kartstuff[k_balloon] <= 0 && (tmthing->player->kartstuff[k_comebacktimer] || tmthing->player->kartstuff[k_comebackmode] == 1)))) { @@ -1680,7 +1661,7 @@ static boolean PIT_CheckThing(mobj_t *thing) if (P_IsObjectOnGround(thing) && tmthing->momz < 0) { K_KartBouncing(tmthing, thing, true, false); - if (gametype != GT_RACE && tmthing->player->kartstuff[k_feather] & 2) + if (gametype != GT_RACE && tmthing->player->kartstuff[k_pogospring]) { K_StealBalloon(tmthing->player, thing->player, false); K_SpinPlayer(thing->player, tmthing); @@ -1689,7 +1670,7 @@ static boolean PIT_CheckThing(mobj_t *thing) else if (P_IsObjectOnGround(tmthing) && thing->momz < 0) { K_KartBouncing(thing, tmthing, true, false); - if (gametype != GT_RACE && thing->player->kartstuff[k_feather] & 2) + if (gametype != GT_RACE && thing->player->kartstuff[k_pogospring]) { K_StealBalloon(thing->player, tmthing->player, false); K_SpinPlayer(tmthing->player, thing); @@ -1700,12 +1681,12 @@ static boolean PIT_CheckThing(mobj_t *thing) if (gametype != GT_RACE) { - if (thing->player->kartstuff[k_mushroomtimer] && !(tmthing->player->kartstuff[k_mushroomtimer])) + if (thing->player->kartstuff[k_sneakertimer] && !(tmthing->player->kartstuff[k_sneakertimer])) { K_StealBalloon(thing->player, tmthing->player, false); K_SpinPlayer(tmthing->player, thing); } - else if (tmthing->player->kartstuff[k_mushroomtimer] && !(thing->player->kartstuff[k_mushroomtimer])) + else if (tmthing->player->kartstuff[k_sneakertimer] && !(thing->player->kartstuff[k_sneakertimer])) { K_StealBalloon(tmthing->player, thing->player, false); K_SpinPlayer(thing->player, tmthing); diff --git a/src/p_mobj.c b/src/p_mobj.c index 1ba05d69..d546dfb7 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1351,7 +1351,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) } if (wasflip == !(mo->eflags & MFE_VERTICALFLIP)) // note!! == ! is not equivalent to != here - turns numeric into bool this way P_PlayerFlip(mo); - if (mo->player->kartstuff[k_feather] & 2) + if (mo->player->kartstuff[k_pogospring]) gravityadd = FixedMul(gravityadd, 5*FRACUNIT/2); } else @@ -1741,7 +1741,7 @@ void P_XYMovement(mobj_t *mo) if (player->bot) B_MoveBlocked(player); } - //{ SRB2kart - Red Shell + //{ SRB2kart - Jawz if (mo->type == MT_REDITEM || mo->type == MT_REDITEMDUD) { if (mo->health == 1) @@ -6518,7 +6518,7 @@ void P_MobjThinker(mobj_t *mobj) return; } - if (mobj->target->player->kartstuff[k_bootimer] > 0) + if (mobj->target->player->kartstuff[k_hyudorotimer] > 0) { if ((mobj->target->player == &players[displayplayer] || (splitscreen && mobj->target->player == &players[secondarydisplayplayer]) @@ -6528,7 +6528,7 @@ void P_MobjThinker(mobj_t *mobj) || (splitscreen && mobj->target->player == &players[secondarydisplayplayer]) || (splitscreen > 1 && mobj->target->player == &players[thirddisplayplayer]) || (splitscreen > 2 && mobj->target->player == &players[fourthdisplayplayer])) - && (mobj->target->player->kartstuff[k_bootimer] < 1*TICRATE/2 || mobj->target->player->kartstuff[k_bootimer] > bootime-(1*TICRATE/2)))) + && (mobj->target->player->kartstuff[k_hyudorotimer] < 1*TICRATE/2 || mobj->target->player->kartstuff[k_hyudorotimer] > hyudorotime-(1*TICRATE/2)))) { if (leveltime & 1) mobj->flags2 |= MF2_DONTDRAW; @@ -6538,7 +6538,7 @@ void P_MobjThinker(mobj_t *mobj) else mobj->flags2 |= MF2_DONTDRAW; } - else if (mobj->target->player->kartstuff[k_bootimer] == 0) + else if (mobj->target->player->kartstuff[k_hyudorotimer] == 0) { mobj->flags2 &= ~MF2_DONTDRAW; } @@ -6592,15 +6592,6 @@ void P_MobjThinker(mobj_t *mobj) case MT_BANANASHIELD: case MT_FAKESHIELD: case MT_BOMBSHIELD: - case MT_TRIPLEGREENSHIELD1: - case MT_TRIPLEGREENSHIELD2: - case MT_TRIPLEGREENSHIELD3: - case MT_TRIPLEREDSHIELD1: - case MT_TRIPLEREDSHIELD2: - case MT_TRIPLEREDSHIELD3: - case MT_TRIPLEBANANASHIELD1: - case MT_TRIPLEBANANASHIELD2: - case MT_TRIPLEBANANASHIELD3: if (mobj->health > 0 && mobj->target && mobj->target->player && mobj->target->player->mo && mobj->target->player->health > 0 && !mobj->target->player->spectator) { @@ -6608,12 +6599,11 @@ void P_MobjThinker(mobj_t *mobj) const fixed_t radius = FixedHypot(mobj->target->radius, mobj->target->radius) + FixedHypot(mobj->radius, mobj->radius); // mobj's distance from its Target, or Radius. //mobj->angle += FixedAngle(12*FRACUNIT); // mobj's actual speed. - if (mobj->type == MT_TRIPLEGREENSHIELD1 || mobj->type == MT_TRIPLEGREENSHIELD2 || mobj->type == MT_TRIPLEGREENSHIELD3 - || mobj->type == MT_TRIPLEREDSHIELD1 || mobj->type == MT_TRIPLEREDSHIELD2 || mobj->type == MT_TRIPLEREDSHIELD3) + if ((mobj->type == MT_GREENSHIELD || mobj->type == MT_REDSHIELD) && mobj->lastlook > 0) mobj->angle += FixedAngle(mobj->info->speed); - else if (mobj->type == MT_TRIPLEBANANASHIELD2) + else if (mobj->type == MT_BANANASHIELD && mobj->lastlook == 2) mobj->angle = (mobj->target->angle + ANGLE_135); - else if (mobj->type == MT_TRIPLEBANANASHIELD3) + else if (mobj->type == MT_BANANASHIELD && mobj->lastlook == 3) mobj->angle = (mobj->target->angle + ANGLE_225); else mobj->angle = (mobj->target->angle + ANGLE_180); @@ -6669,20 +6659,13 @@ void P_MobjThinker(mobj_t *mobj) mobj->momx = mobj->momy = 0; // Was this so hard? - if ((mobj->type == MT_GREENSHIELD && !(mobj->target->player->kartstuff[k_greenshell] & 1)) - || (mobj->type == MT_REDSHIELD && !(mobj->target->player->kartstuff[k_redshell] & 1)) - || (mobj->type == MT_BANANASHIELD && !(mobj->target->player->kartstuff[k_banana] & 1)) - || (mobj->type == MT_TRIPLEGREENSHIELD1 && !(mobj->target->player->kartstuff[k_triplegreenshell] & 1)) - || (mobj->type == MT_TRIPLEGREENSHIELD2 && !(mobj->target->player->kartstuff[k_triplegreenshell] & 2)) - || (mobj->type == MT_TRIPLEGREENSHIELD3 && !(mobj->target->player->kartstuff[k_triplegreenshell] & 4)) - || (mobj->type == MT_TRIPLEREDSHIELD1 && !(mobj->target->player->kartstuff[k_tripleredshell] & 1)) - || (mobj->type == MT_TRIPLEREDSHIELD2 && !(mobj->target->player->kartstuff[k_tripleredshell] & 2)) - || (mobj->type == MT_TRIPLEREDSHIELD3 && !(mobj->target->player->kartstuff[k_tripleredshell] & 4)) - || (mobj->type == MT_TRIPLEBANANASHIELD1 && !(mobj->target->player->kartstuff[k_triplebanana] & 1)) - || (mobj->type == MT_TRIPLEBANANASHIELD2 && !(mobj->target->player->kartstuff[k_triplebanana] & 2)) - || (mobj->type == MT_TRIPLEBANANASHIELD3 && !(mobj->target->player->kartstuff[k_triplebanana] & 4)) - || (mobj->type == MT_BOMBSHIELD && !(mobj->target->player->kartstuff[k_bobomb] & 1)) - || (mobj->type == MT_FAKESHIELD && !(mobj->target->player->kartstuff[k_fakeitem] & 1))) + if ((mobj->type == MT_GREENSHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_ORBINAUT) + || (mobj->type == MT_REDSHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_JAWZ) + || (mobj->type == MT_BANANASHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_BANANA) + || (mobj->type == MT_BOMBSHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_MINE) + || (mobj->type == MT_FAKESHIELD && !mobj->target->player->kartstuff[k_fakeitem]) + || (mobj->type != MT_FAKESHIELD && !mobj->target->player->kartstuff[k_itemheld]) + || (mobj->lastlook > 0 && mobj->target->player->kartstuff[k_itemamount] < mobj->lastlook)) { P_RemoveMobj(mobj); return; @@ -6819,26 +6802,30 @@ void P_MobjThinker(mobj_t *mobj) if (mobj->state != &states[S_PLAYERARROW_ROULETTE]) // don't reset FF_ANIMATE P_SetMobjState(mobj, S_PLAYERARROW_ROULETTE); } - else if (mobj->target->player->kartstuff[k_kitchensink]) P_SetMobjState(mobj, S_PLAYERARROW_KITCHENSINK); - else if (mobj->target->player->kartstuff[k_megashroom] == 1 - || (mobj->target->player->kartstuff[k_growshrinktimer] > 1 - && (leveltime & 1))) P_SetMobjState(mobj, S_PLAYERARROW_MEGASHROOM); - else if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 - && !(leveltime & 1)) P_SetMobjState(mobj, S_PLAYERARROW_EMPTY); // S_INVISIBLE - else if (mobj->target->player->kartstuff[k_star] == 1) P_SetMobjState(mobj, S_PLAYERARROW_STAR); - else if (mobj->target->player->kartstuff[k_tripleredshell]) P_SetMobjState(mobj, S_PLAYERARROW_TRIPLEREDSHELL); - else if (mobj->target->player->kartstuff[k_triplebanana]) P_SetMobjState(mobj, S_PLAYERARROW_TRIPLEBANANA); - else if (mobj->target->player->kartstuff[k_triplegreenshell]) P_SetMobjState(mobj, S_PLAYERARROW_TRIPLEGREENSHELL); - else if (mobj->target->player->kartstuff[k_fireflower]) P_SetMobjState(mobj, S_PLAYERARROW_FIREFLOWER); - else if (mobj->target->player->kartstuff[k_bobomb]) P_SetMobjState(mobj, S_PLAYERARROW_BOBOMB); - else if (mobj->target->player->kartstuff[k_redshell]) P_SetMobjState(mobj, S_PLAYERARROW_REDSHELL); - else if (mobj->target->player->kartstuff[k_feather] & 1) P_SetMobjState(mobj, S_PLAYERARROW_FEATHER); - else if (mobj->target->player->kartstuff[k_boo] == 1) P_SetMobjState(mobj, S_PLAYERARROW_BOO); - else if (mobj->target->player->kartstuff[k_fakeitem] & 2) P_SetMobjState(mobj, S_PLAYERARROW_FAKEITEM); - else if (mobj->target->player->kartstuff[k_banana]) P_SetMobjState(mobj, S_PLAYERARROW_BANANA); - else if (mobj->target->player->kartstuff[k_greenshell]) P_SetMobjState(mobj, S_PLAYERARROW_GREENSHELL); - else if (mobj->target->player->kartstuff[k_mushroom]) P_SetMobjState(mobj, S_PLAYERARROW_MUSHROOM); - else P_SetMobjState(mobj, S_PLAYERARROW); // S_INVISIBLE + else + { + switch(mobj->target->player->kartstuff[k_itemtype]) + { + case KITEM_KITCHENSINK: P_SetMobjState(mobj, S_PLAYERARROW_KITCHENSINK); break; + case KITEM_SIZEUP: P_SetMobjState(mobj, S_PLAYERARROW_SIZEUP); break; + case KITEM_INVINCIBILITY: P_SetMobjState(mobj, S_PLAYERARROW_INVINCIBILITY); break; + case KITEM_ORBINAUT: P_SetMobjState(mobj, S_PLAYERARROW_ORBINAUT); break; + case KITEM_BALLHOG: P_SetMobjState(mobj, S_PLAYERARROW_BALLHOG); break; + case KITEM_MINE: P_SetMobjState(mobj, S_PLAYERARROW_MINE); break; + case KITEM_JAWZ: P_SetMobjState(mobj, S_PLAYERARROW_JAWZ); break; + case KITEM_POGOSPRING: P_SetMobjState(mobj, S_PLAYERARROW_POGOSPRING); break; + case KITEM_HYUDORO: P_SetMobjState(mobj, S_PLAYERARROW_HYUDORO); break; + case KITEM_FAKE: P_SetMobjState(mobj, S_PLAYERARROW_FAKEITEM); break; + case KITEM_BANANA: P_SetMobjState(mobj, S_PLAYERARROW_BANANA); break; + case KITEM_SNEAKER: P_SetMobjState(mobj, S_PLAYERARROW_SNEAKER); break; + default: P_SetMobjState(mobj, S_PLAYERARROW); break; // S_INVISIBLE + } + } + + if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 && (leveltime & 1)) + P_SetMobjState(mobj, S_PLAYERARROW_SIZEUP); + else if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 && !(leveltime & 1)) + P_SetMobjState(mobj, S_PLAYERARROW_EMPTY); // S_INVISIBLE 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); @@ -7871,14 +7858,18 @@ void P_MobjThinker(mobj_t *mobj) mobj->threshold--; break; case MT_BOMBITEM: + if (mobj->target && mobj->target->player) + mobj->color = mobj->target->player->skincolor; + else + mobj->color = SKINCOLOR_RED; if (mobj->momx || mobj->momy) P_SpawnGhostMobj(mobj); if (mobj->z <= mobj->floorz) { if (mobj->health > mobj->info->spawnhealth-1) { - if (mobj->state == &states[S_BOMBAIR]) - P_SetMobjState(mobj, S_BOMBITEM); + if (mobj->state == &states[S_BOMBAIR1] || mobj->state == &states[S_BOMBAIR2]) + P_SetMobjState(mobj, S_BOMBDEPLOY1); mobj->momx = mobj->momy = 0; S_StartSound(mobj, mobj->info->activesound); @@ -7979,7 +7970,7 @@ void P_MobjThinker(mobj_t *mobj) #endif break; case MT_SPINFIRE: - case MT_MUSHROOMTRAIL: + case MT_SNEAKERTRAIL: if (mobj->eflags & MFE_VERTICALFLIP) mobj->z = mobj->ceilingz - mobj->height; else @@ -8672,11 +8663,8 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) case MT_FALLINGROCK: //case MT_RANDOMITEM: case MT_BANANAITEM: case MT_BANANASHIELD: - case MT_TRIPLEBANANASHIELD1: case MT_TRIPLEBANANASHIELD2: case MT_TRIPLEBANANASHIELD3: case MT_GREENITEM: case MT_GREENSHIELD: - case MT_TRIPLEGREENSHIELD1: case MT_TRIPLEGREENSHIELD2: case MT_TRIPLEGREENSHIELD3: case MT_REDITEM: case MT_REDSHIELD: case MT_REDITEMDUD: - case MT_TRIPLEREDSHIELD1: case MT_TRIPLEREDSHIELD2: case MT_TRIPLEREDSHIELD3: case MT_BATTLEBALLOON: case MT_FIREBALL: case MT_FAKEITEM: case MT_FAKESHIELD: case MT_BOMBITEM: case MT_BOMBSHIELD: diff --git a/src/p_spec.c b/src/p_spec.c index 1648829c..56a1d9bf 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -3752,7 +3752,7 @@ DoneSection2: if (player->speed < K_GetKartSpeed(player, true)/4) // Push forward to prevent getting stuck P_InstaThrust(player->mo, player->mo->angle, FixedMul(K_GetKartSpeed(player, true)/4, player->mo->scale)); - player->kartstuff[k_feather] |= 2; + player->kartstuff[k_pogospring] = 1; K_DoBouncePad(player->mo, 0); } break; @@ -3959,14 +3959,14 @@ DoneSection2: // P_SetPlayerMobjState(player->mo, S_PLAY_FALL1); break; - case 6: // SRB2kart 190117 - Mushroom Boost Panel + case 6: // SRB2kart 190117 - Sneaker Boost Panel if (roversector || P_MobjReadyToTrigger(player->mo, sector)) { if (!player->kartstuff[k_floorboost]) player->kartstuff[k_floorboost] = 3; else player->kartstuff[k_floorboost] = 2; - K_DoMushroom(player, false, false); + K_DoSneaker(player, false, false); } break; @@ -7184,8 +7184,8 @@ void T_Friction(friction_t *f) // friction works for all mobj's // (or at least MF_PUSHABLEs, which is all I care about anyway) if ((!(thing->flags & (MF_NOGRAVITY | MF_NOCLIP)) && thing->z == thing->floorz) && (thing->player - && (thing->player->kartstuff[k_startimer] == 0 && thing->player->kartstuff[k_bootimer] == 0 - && thing->player->kartstuff[k_mushroomtimer] == 0 && thing->player->kartstuff[k_growshrinktimer] <= 0))) + && (thing->player->kartstuff[k_invincibilitytimer] == 0 && thing->player->kartstuff[k_hyudorotimer] == 0 + && thing->player->kartstuff[k_sneakertimer] == 0 && thing->player->kartstuff[k_growshrinktimer] <= 0))) { if (f->roverfriction) { diff --git a/src/p_user.c b/src/p_user.c index 978ee1b9..e5611236 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1134,12 +1134,12 @@ void P_RestoreMusic(player_t *player) // SRB2kart - We have some different powers than vanilla, some of which tweak the music. if (!player->exiting) { - // Item - Mega Mushroom + // Item - Size Up if (player->kartstuff[k_growshrinktimer] > 1) S_ChangeMusicInternal("mega", true); // Item - Star - else if (player->kartstuff[k_startimer] > 1) + else if (player->kartstuff[k_invincibilitytimer] > 1) S_ChangeMusicInternal("minvnc", false); // Event - Final Lap @@ -2262,7 +2262,7 @@ static void P_CheckUnderwaterAndSpaceTimer(player_t *player) // static void P_CheckInvincibilityTimer(player_t *player) { - if (!player->powers[pw_invulnerability] && !player->kartstuff[k_startimer]) + if (!player->powers[pw_invulnerability] && !player->kartstuff[k_invincibilitytimer]) return; //if (mariomode && !player->powers[pw_super]) // SRB2kart @@ -2275,7 +2275,7 @@ static void P_CheckInvincibilityTimer(player_t *player) } // Resume normal music stuff. - if (player->powers[pw_invulnerability] == 1 || player->kartstuff[k_startimer] == 1) + if (player->powers[pw_invulnerability] == 1 || player->kartstuff[k_invincibilitytimer] == 1) { if (!player->powers[pw_super]) { @@ -4769,8 +4769,8 @@ static void P_3dMovement(player_t *player) // Do not let the player control movement if not onground. onground = P_IsObjectOnGround(player->mo); - // SRB2Kart: shhhhhhh don't question me, feather and speed bumps are supposed to control like you're on the ground :p - if (player->kartstuff[k_feather] & 2) + // SRB2Kart: shhhhhhh don't question me, pogo springs and speed bumps are supposed to control like you're on the ground :p + if (player->kartstuff[k_pogospring]) onground = true; player->aiming = cmd->aiming<powers[pw_super] || player->powers[pw_sneakers] || player->kartstuff[k_startimer] || player->kartstuff[k_mushroomtimer]) + else if (player->powers[pw_super] || player->powers[pw_sneakers] || player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_sneakertimer]) { - if (player->powers[pw_sneakers] && (player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_mushroomtimer] > 0 || player->kartstuff[k_startimer] > 0)) + if (player->powers[pw_sneakers] && (player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_sneakertimer] > 0 || player->kartstuff[k_invincibilitytimer] > 0)) thrustfactor = player->thrustfactor*3; else thrustfactor = player->thrustfactor*2; @@ -6775,7 +6775,7 @@ static void P_MovePlayer(player_t *player) { K_KartMoveAnimation(player); - if (player->kartstuff[k_feather] & 2) + if (player->kartstuff[k_pogospring]) player->frameangle += ANGLE_22h; else player->frameangle = player->mo->angle; @@ -7071,7 +7071,7 @@ static void P_MovePlayer(player_t *player) //////////////////////////// // SRB2kart - Drifting smoke and fire - if ((player->kartstuff[k_drift] != 0 || player->kartstuff[k_mushroomtimer] > 0) && onground && (leveltime & 1)) + if ((player->kartstuff[k_drift] != 0 || player->kartstuff[k_sneakertimer] > 0) && onground && (leveltime & 1)) K_SpawnDriftTrail(player); /* // SRB2kart - nadah @@ -7806,10 +7806,7 @@ void P_NukeEnemies(mobj_t *inflictor, mobj_t *source, fixed_t radius) //{ SRB2kart if (mo->type == MT_GREENITEM || mo->type == MT_REDITEM || mo->type == MT_REDITEMDUD || mo->type == MT_GREENSHIELD || mo->type == MT_REDSHIELD - || mo->type == MT_TRIPLEGREENSHIELD1 || mo->type == MT_TRIPLEGREENSHIELD2 || mo->type == MT_TRIPLEGREENSHIELD3 - || mo->type == MT_TRIPLEREDSHIELD1 || mo->type == MT_TRIPLEREDSHIELD2 || mo->type == MT_TRIPLEREDSHIELD3 || mo->type == MT_BANANAITEM || mo->type == MT_BANANASHIELD - || mo->type == MT_TRIPLEBANANASHIELD1 || mo->type == MT_TRIPLEBANANASHIELD2 || mo->type == MT_TRIPLEBANANASHIELD3 || mo->type == MT_FAKEITEM || mo->type == MT_FAKESHIELD || mo->type == MT_FIREBALL) { @@ -9518,7 +9515,7 @@ void P_PlayerThink(player_t *player) #if 1 // "Blur" a bit when you have speed shoes and are going fast enough if ((player->powers[pw_super] || player->powers[pw_sneakers] - || player->kartstuff[k_driftboost] || player->kartstuff[k_mushroomtimer]) // SRB2kart + || player->kartstuff[k_driftboost] || player->kartstuff[k_sneakertimer]) // SRB2kart && (player->speed + abs(player->mo->momz)) > FixedMul(20*FRACUNIT,player->mo->scale)) { mobj_t *gmobj = P_SpawnGhostMobj(player->mo); @@ -9665,7 +9662,7 @@ void P_PlayerThink(player_t *player) || (splitscreen && player == &players[secondarydisplayplayer]) || (splitscreen > 1 && player == &players[thirddisplayplayer]) || (splitscreen > 2 && player == &players[fourthdisplayplayer])) - && player->kartstuff[k_bootimer] == 0 && player->kartstuff[k_growshrinktimer] <= 0 + && player->kartstuff[k_hyudorotimer] == 0 && player->kartstuff[k_growshrinktimer] <= 0 && (player->kartstuff[k_comebacktimer] == 0 || (gametype == GT_RACE || player->kartstuff[k_balloon] > 0))) { if (player->powers[pw_flashing] > 0 && player->powers[pw_flashing] < K_GetKartFlashing() && (leveltime & 1)) diff --git a/src/r_draw.c b/src/r_draw.c index 5560ffa0..5703f781 100644 --- a/src/r_draw.c +++ b/src/r_draw.c @@ -135,7 +135,7 @@ UINT32 nflatxshift, nflatyshift, nflatshiftup, nflatmask; #define BOSS_TT_CACHE_INDEX (MAXSKINS + 1) #define METALSONIC_TT_CACHE_INDEX (MAXSKINS + 2) #define ALLWHITE_TT_CACHE_INDEX (MAXSKINS + 3) -#define STARMAN_TT_CACHE_INDEX (MAXSKINS + 4) +#define RAINBOW_TT_CACHE_INDEX (MAXSKINS + 4) #define SKIN_RAMP_LENGTH 16 #define DEFAULT_STARTTRANSCOLOR 160 #define NUM_PALETTE_ENTRIES 256 @@ -529,7 +529,7 @@ UINT8* R_GetTranslationColormap(INT32 skinnum, skincolors_t color, UINT8 flags) else if (skinnum == TC_BOSS) skintableindex = BOSS_TT_CACHE_INDEX; else if (skinnum == TC_METALSONIC) skintableindex = METALSONIC_TT_CACHE_INDEX; else if (skinnum == TC_ALLWHITE) skintableindex = ALLWHITE_TT_CACHE_INDEX; - else if (skinnum == TC_STARMAN) skintableindex = STARMAN_TT_CACHE_INDEX; + else if (skinnum == TC_RAINBOW) skintableindex = RAINBOW_TT_CACHE_INDEX; else skintableindex = skinnum; if (flags & GTC_CACHE) diff --git a/src/r_draw.h b/src/r_draw.h index ae70cd8a..3199f0f6 100644 --- a/src/r_draw.h +++ b/src/r_draw.h @@ -107,7 +107,7 @@ extern lumpnum_t viewborderlump[8]; #define TC_BOSS -2 #define TC_METALSONIC -3 // For Metal Sonic battle #define TC_ALLWHITE -4 // For Cy-Brak-demon -#define TC_STARMAN -5 // For star power +#define TC_RAINBOW -5 // For invincibility power // Initialize color translation tables, for player rendering etc. void R_InitTranslationTables(void); diff --git a/src/r_things.c b/src/r_things.c index 6f88367a..e86171df 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -827,8 +827,8 @@ static void R_DrawVisSprite(vissprite_t *vis) dc_transmap = vis->transmap; if (vis->mobj->skin && vis->mobj->sprite == SPR_PLAY) // MT_GHOST LOOKS LIKE A PLAYER SO USE THE PLAYER TRANSLATION TABLES. >_> { - if (vis->mobj->player && vis->mobj->player->kartstuff[k_startimer]) - dc_translation = R_GetTranslationColormap(TC_STARMAN, vis->mobj->color, GTC_CACHE); + if (vis->mobj->player && vis->mobj->player->kartstuff[k_invincibilitytimer]) + dc_translation = R_GetTranslationColormap(TC_RAINBOW, vis->mobj->color, GTC_CACHE); else { size_t skinnum = (skin_t*)vis->mobj->skin-skins; @@ -851,8 +851,8 @@ static void R_DrawVisSprite(vissprite_t *vis) // New colormap stuff for skins Tails 06-07-2002 if (vis->mobj->skin && vis->mobj->sprite == SPR_PLAY) // This thing is a player! { - if (vis->mobj->player && vis->mobj->player->kartstuff[k_startimer]) - dc_translation = R_GetTranslationColormap(TC_STARMAN, vis->mobj->color, GTC_CACHE); + if (vis->mobj->player && vis->mobj->player->kartstuff[k_invincibilitytimer]) + dc_translation = R_GetTranslationColormap(TC_RAINBOW, vis->mobj->color, GTC_CACHE); else { size_t skinnum = (skin_t*)vis->mobj->skin-skins; From 37499145886cf67e450dac86a4f5a3263b0e4f48 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 5 Feb 2018 19:40:26 -0500 Subject: [PATCH 02/14] Fix more conflicts that I forgot --- src/hardware/hw_md2.c | 4 ++-- src/info.c | 2 +- src/k_kart.c | 4 ++-- src/k_kart.h | 2 +- src/p_enemy.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 8bb4c959..119ff273 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1208,7 +1208,7 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, } // starman support, could theoretically support boss ones too - if (skinnum == TC_STARMAN) + if (skinnum == TC_RAINBOW) { while (size--) { @@ -1490,7 +1490,7 @@ void HWR_DrawMD2(gr_vissprite_t *spr) if (spr->mobj->skin && spr->mobj->sprite == SPR_PLAY) { if (spr->mobj->colorized) - skinnum = TC_STARMAN; + skinnum = TC_RAINBOW; else { skinnum = (INT32)((skin_t*)spr->mobj->skin-skins); diff --git a/src/info.c b/src/info.c index 83b788a4..932a2ee2 100644 --- a/src/info.c +++ b/src/info.c @@ -2688,7 +2688,7 @@ state_t states[NUMSTATES] = {SPR_SSMN, 3, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM3}, // S_BOMBITEM2 {SPR_SSMN, 2, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM4}, // S_BOMBITEM3 {SPR_SSMN, 1, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM1}, // S_BOMBITEM4 - {SPR_BOMB, 0, 1, {A_MineExplode}, MT_BOMBEXPLOSION, 0, S_NULL}, // S_BOMBEXPLODE + {SPR_MINE, 3, 1, {A_MineExplode}, MT_BOMBEXPLOSION, 0, S_NULL}, // S_BOMBEXPLODE {SPR_NULL, 0, 6, {NULL}, 0, 0, S_BOMBEXPLOSION2}, // S_BOMBEXPLOSION1 {SPR_NULL, 1, 22, {A_ForceStop}, 0, 0, S_NULL}, // S_BOMBEXPLOSION2 diff --git a/src/k_kart.c b/src/k_kart.c index 9a36c8f2..873cca00 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1230,7 +1230,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) void K_KartPlayerAfterThink(player_t *player) { - if (player->kartstuff[k_startimer]) + if (player->kartstuff[k_invincibilitytimer]) { player->mo->frame |= FF_FULLBRIGHT; } @@ -1765,7 +1765,7 @@ void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 } // Spawns the purely visual explosion -void K_SpawnBobombExplosion(mobj_t *source) +void K_SpawnMineExplosion(mobj_t *source) { INT32 i, radius, height; mobj_t *smoldering = P_SpawnMobj(source->x, source->y, source->z, MT_SMOLDERING); diff --git a/src/k_kart.h b/src/k_kart.h index b5df29da..80cc455a 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -27,7 +27,7 @@ void K_SquishPlayer(player_t *player, mobj_t *source); void K_ExplodePlayer(player_t *player, mobj_t *source); void K_StealBalloon(player_t *player, player_t *victim, boolean force); void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source); -void K_SpawnBobombExplosion(mobj_t *source); +void K_SpawnMineExplosion(mobj_t *source); void K_SpawnDriftTrail(player_t *player); void K_DoSneaker(player_t *player, boolean doPFlag, boolean startboost); void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed); diff --git a/src/p_enemy.c b/src/p_enemy.c index 5786448e..67e36571 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8272,7 +8272,7 @@ void A_MineExplode(mobj_t *actor) for (d = 0; d < 16; d++) K_SpawnKartExplosion(actor->x, actor->y, actor->z, actor->info->painchance + 32*FRACUNIT, 32, type, d*(ANGLE_45/4), true, false, actor->target); // 32 <-> 64 - K_SpawnBobombExplosion(actor); + K_SpawnMineExplosion(actor); P_SpawnMobj(actor->x, actor->y, actor->z, MT_BOMBEXPLOSIONSOUND); From 8c2bdfd006334c7ce234366d9de00c524809fcf9 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 7 Feb 2018 22:33:27 -0500 Subject: [PATCH 03/14] Belp - Minimap heads that aren't yours are transparent - Minimap has a visibility slider - Bomb stuff renamed to Mine --- src/d_netcmd.c | 5 +- src/dehacked.c | 8 +- src/info.c | 62 +++++++------- src/info.h | 8 +- src/k_kart.c | 215 ++++++++++++++++++++++++------------------------- src/m_menu.c | 7 +- src/p_enemy.c | 4 +- src/p_inter.c | 2 +- src/p_map.c | 18 ++--- src/p_mobj.c | 21 ++--- src/v_video.c | 6 +- 11 files changed, 180 insertions(+), 176 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index f8997bf9..d42ed2fa 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -348,7 +348,8 @@ consvar_t cv_tripleorbinaut = {"tripleorbinaut", "On", CV_NETVAR|CV_CHEAT, C consvar_t cv_dualjawz = {"dualjawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_karthud = {"karthud", "Default", CV_SAVE|CV_CALL, karthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_kartminimap = {"kartminimap", "Yes", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; +static CV_PossibleValue_t kartminimap_cons_t[] = {{0, "MIN"}, {10, "MAX"}, {0, NULL}}; +consvar_t cv_kartminimap = {"kartminimap", "4", CV_SAVE, kartminimap_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartcheck = {"kartcheck", "Yes", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t kartstarsfx_cons_t[] = {{0, "Music"}, {1, "SMK"}, {0, NULL}}; consvar_t cv_kartstarsfx = {"kartstarsfx", "SMK", CV_SAVE, kartstarsfx_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -359,7 +360,7 @@ consvar_t cv_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT|CV_CALL|CV_ consvar_t cv_kartcomeback = {"kartcomeback", "On", CV_NETVAR|CV_CHEAT|CV_CALL|CV_NOINIT, CV_OnOff, KartComeback_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartmirror = {"kartmirror", "Off", CV_NETVAR|CV_CHEAT|CV_CALL|CV_NOINIT, CV_OnOff, KartMirror_OnChange, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t speedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}}; -consvar_t cv_speedometer = {"speedometer", "Kilometers", CV_SAVE, speedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display +consvar_t cv_speedometer = {"speedometer", "Off", CV_SAVE, speedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display static CV_PossibleValue_t kartdebugitem_cons_t[] = {{-1, "MIN"}, {NUMKARTITEMS-1, "MAX"}, {0, NULL}}; consvar_t cv_kartdebugitem = {"kartdebugitem", "0", CV_NETVAR|CV_CHEAT, kartdebugitem_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; diff --git a/src/dehacked.c b/src/dehacked.c index 4ff25e33..39ec2c16 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -7002,10 +7002,10 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_REDITEM", "MT_REDITEMDUD", - "MT_BOMBSHIELD", // Special Stage Mine stuff - "MT_BOMBITEM", - "MT_BOMBEXPLOSION", - "MT_BOMBEXPLOSIONSOUND", + "MT_MINESHIELD", // Special Stage Mine stuff + "MT_MINEITEM", + "MT_MINEEXPLOSION", + "MT_MINEEXPLOSIONSOUND", "MT_SMOLDERING", // New explosion "MT_BOOMPARTICLE", diff --git a/src/info.c b/src/info.c index 3b9eabcb..67c48db1 100644 --- a/src/info.c +++ b/src/info.c @@ -2684,35 +2684,35 @@ state_t states[NUMSTATES] = {SPR_SSMN, 12, 3, {NULL}, 0, 0, S_BOMBDEPLOY12}, // S_BOMBDEPLOY11 {SPR_SSMN, 13, 3, {NULL}, 0, 0, S_BOMBDEPLOY13}, // S_BOMBDEPLOY12 {SPR_SSMN, 14, 3, {NULL}, 0, 0, S_BOMBITEM1}, // S_BOMBDEPLOY13 - {SPR_SSMN, 0, 30, {A_GrenadeRing}, 0, 0, S_BOMBITEM2}, // S_BOMBITEM1 - {SPR_SSMN, 3, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM3}, // S_BOMBITEM2 - {SPR_SSMN, 2, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM4}, // S_BOMBITEM3 - {SPR_SSMN, 1, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM1}, // S_BOMBITEM4 - {SPR_SSMN, 3, 1, {A_MineExplode}, MT_BOMBEXPLOSION, 0, S_NULL}, // S_BOMBEXPLODE + {SPR_SSMN, 0, 30, {NULL}, 0, 0, S_BOMBITEM2}, // S_BOMBITEM1 + {SPR_SSMN, 3, 3, {NULL}, 0, 0, S_BOMBITEM3}, // S_BOMBITEM2 + {SPR_SSMN, 2, 3, {NULL}, 0, 0, S_BOMBITEM4}, // S_BOMBITEM3 + {SPR_SSMN, 1, 3, {NULL}, 0, 0, S_BOMBITEM1}, // S_BOMBITEM4 + {SPR_SSMN, 3, 1, {A_MineExplode}, MT_MINEEXPLOSION, 0, S_NULL}, // S_BOMBEXPLODE {SPR_NULL, 0, 6, {NULL}, 0, 0, S_BOMBEXPLOSION2}, // S_BOMBEXPLOSION1 {SPR_NULL, 1, 22, {A_ForceStop}, 0, 0, S_NULL}, // S_BOMBEXPLOSION2 - {SPR_KRBM, 0, 1, {NULL}, 0, 0, S_QUICKBOOM2}, // S_QUICKBOOM1 - {SPR_KRBM, 1, 1, {NULL}, 0, 0, S_QUICKBOOM3}, // S_QUICKBOOM2 - {SPR_KRBM, 2, 1, {NULL}, 0, 0, S_QUICKBOOM4}, // S_QUICKBOOM3 - {SPR_KRBM, 3, 1, {NULL}, 0, 0, S_QUICKBOOM5}, // S_QUICKBOOM4 - {SPR_KRBM, 4, 1, {NULL}, 0, 0, S_QUICKBOOM6}, // S_QUICKBOOM5 - {SPR_KRBM, 5, 1, {NULL}, 0, 0, S_QUICKBOOM7}, // S_QUICKBOOM6 - {SPR_KRBM, 6, 1, {NULL}, 0, 0, S_QUICKBOOM8}, // S_QUICKBOOM7 - {SPR_KRBM, 7, 2, {NULL}, 0, 0, S_QUICKBOOM9}, // S_QUICKBOOM8 - {SPR_KRBM, 8, 2, {NULL}, 0, 0, S_QUICKBOOM10}, // S_QUICKBOOM9 - {SPR_KRBM, 9, 2, {NULL}, 0, 0, S_NULL}, // S_QUICKBOOM10 + {SPR_KRBM, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_QUICKBOOM2}, // S_QUICKBOOM1 + {SPR_KRBM, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_QUICKBOOM3}, // S_QUICKBOOM2 + {SPR_KRBM, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_QUICKBOOM4}, // S_QUICKBOOM3 + {SPR_KRBM, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_QUICKBOOM5}, // S_QUICKBOOM4 + {SPR_KRBM, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_QUICKBOOM6}, // S_QUICKBOOM5 + {SPR_KRBM, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_QUICKBOOM7}, // S_QUICKBOOM6 + {SPR_KRBM, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_QUICKBOOM8}, // S_QUICKBOOM7 + {SPR_KRBM, FF_FULLBRIGHT|7, 2, {NULL}, 0, 0, S_QUICKBOOM9}, // S_QUICKBOOM8 + {SPR_KRBM, FF_FULLBRIGHT|8, 2, {NULL}, 0, 0, S_QUICKBOOM10}, // S_QUICKBOOM9 + {SPR_KRBM, FF_FULLBRIGHT|9, 2, {NULL}, 0, 0, S_NULL}, // S_QUICKBOOM10 - {SPR_KRBM, 0, 3, {NULL}, 0, 0, S_SLOWBOOM2}, // S_SLOWBOOM1 - {SPR_KRBM, 1, 3, {NULL}, 0, 0, S_SLOWBOOM3}, // S_SLOWBOOM2 - {SPR_KRBM, 2, 3, {NULL}, 0, 0, S_SLOWBOOM4}, // S_SLOWKBOOM3 - {SPR_KRBM, 3, 3, {NULL}, 0, 0, S_SLOWBOOM5}, // S_SLOWBOOM4 - {SPR_KRBM, 4, 3, {NULL}, 0, 0, S_SLOWBOOM6}, // S_SLOWBOOM5 - {SPR_KRBM, 5, 3, {NULL}, 0, 0, S_SLOWBOOM7}, // S_SLOWBOOM6 - {SPR_KRBM, 6, 3, {NULL}, 0, 0, S_SLOWBOOM8}, // S_SLOWBOOM7 - {SPR_KRBM, 7, 5, {NULL}, 0, 0, S_SLOWBOOM9}, // S_SLOWBOOM8 - {SPR_KRBM, 8, 5, {NULL}, 0, 0, S_SLOWBOOM10}, // S_SLOWBOOM9 - {SPR_KRBM, 9, 5, {NULL}, 0, 0, S_NULL}, // S_SLOWBOOM10 + {SPR_KRBM, FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_SLOWBOOM2}, // S_SLOWBOOM1 + {SPR_KRBM, FF_FULLBRIGHT|1, 3, {NULL}, 0, 0, S_SLOWBOOM3}, // S_SLOWBOOM2 + {SPR_KRBM, FF_FULLBRIGHT|2, 3, {NULL}, 0, 0, S_SLOWBOOM4}, // S_SLOWKBOOM3 + {SPR_KRBM, FF_FULLBRIGHT|3, 3, {NULL}, 0, 0, S_SLOWBOOM5}, // S_SLOWBOOM4 + {SPR_KRBM, FF_FULLBRIGHT|4, 3, {NULL}, 0, 0, S_SLOWBOOM6}, // S_SLOWBOOM5 + {SPR_KRBM, FF_FULLBRIGHT|5, 3, {NULL}, 0, 0, S_SLOWBOOM7}, // S_SLOWBOOM6 + {SPR_KRBM, FF_FULLBRIGHT|6, 3, {NULL}, 0, 0, S_SLOWBOOM8}, // S_SLOWBOOM7 + {SPR_KRBM, FF_FULLBRIGHT|7, 5, {NULL}, 0, 0, S_SLOWBOOM9}, // S_SLOWBOOM8 + {SPR_KRBM, FF_FULLBRIGHT|8, 5, {NULL}, 0, 0, S_SLOWBOOM10}, // S_SLOWBOOM9 + {SPR_KRBM, FF_FULLBRIGHT|9, 5, {NULL}, 0, 0, S_NULL}, // S_SLOWBOOM10 {SPR_BLIG, 0, 2, {NULL}, 0, 0, S_BLUELIGHTNING2}, // S_BLUELIGHTNING1 {SPR_BLIG, 1, 2, {NULL}, 0, 0, S_BLUELIGHTNING3}, // S_BLUELIGHTNING2 @@ -14676,7 +14676,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_BOMBSHIELD + { // MT_MINESHIELD -1, // doomednum S_BOMBSHIELD1, // spawnstate 1000, // spawnhealth @@ -14685,7 +14685,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 256*FRACUNIT, // painchance + 320*FRACUNIT, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate @@ -14703,7 +14703,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_BOMBITEM + { // MT_MINEITEM -1, // doomednum S_BOMBAIR1, // spawnstate 105, // spawnhealth @@ -14712,7 +14712,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 288*FRACUNIT, // painchance + 320*FRACUNIT, // painchance sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate @@ -14730,7 +14730,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_BOMBEXPLOSION + { // MT_MINEEXPLOSION -1, // doomednum S_BOMBEXPLOSION1, // spawnstate 1000, // spawnhealth @@ -14757,7 +14757,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_BOMBEXPLOSIONSOUND + { // MT_MINEEXPLOSIONSOUND -1, // doomednum S_INVISIBLE, // spawnstate 100, // spawnhealth diff --git a/src/info.h b/src/info.h index ffaaec7d..a495f398 100644 --- a/src/info.h +++ b/src/info.h @@ -3978,10 +3978,10 @@ typedef enum mobj_type MT_REDITEM, MT_REDITEMDUD, - MT_BOMBSHIELD, // Mine stuff - MT_BOMBITEM, - MT_BOMBEXPLOSION, - MT_BOMBEXPLOSIONSOUND, + MT_MINESHIELD, // Mine stuff + MT_MINEITEM, + MT_MINEEXPLOSION, + MT_MINEEXPLOSIONSOUND, MT_SMOLDERING, // New explosion MT_BOOMPARTICLE, diff --git a/src/k_kart.c b/src/k_kart.c index f9da684c..fc58a338 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1786,7 +1786,7 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color) dust->angle = (ANGLE_180/16) * i; dust->scale = source->scale; dust->destscale = source->scale*10; - P_InstaThrust(dust, dust->angle, FixedMul(20*FRACUNIT, source->scale)); + P_InstaThrust(dust, dust->angle, FixedMul(25*FRACUNIT, source->scale)); truc = P_SpawnMobj(source->x + P_RandomRange(-radius, radius)*FRACUNIT, source->y + P_RandomRange(-radius, radius)*FRACUNIT, @@ -1794,10 +1794,10 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color) truc->scale = source->scale*2; truc->destscale = source->scale*6; P_SetMobjState(truc, S_SLOWBOOM1); - speed = FixedMul(10*FRACUNIT, source->scale)>>FRACBITS; + speed = FixedMul(12*FRACUNIT, source->scale)>>FRACBITS; truc->momx = P_RandomRange(-speed, speed)*FRACUNIT; truc->momy = P_RandomRange(-speed, speed)*FRACUNIT; - speed = FixedMul(20*FRACUNIT, source->scale)>>FRACBITS; + speed = FixedMul(25*FRACUNIT, source->scale)>>FRACBITS; truc->momz = P_RandomRange(-speed, speed)*FRACUNIT; truc->color = color; } @@ -1810,18 +1810,18 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color) dust->scale = source->scale; dust->destscale = source->scale*10; dust->tics = 30; - dust->momz = P_RandomRange(FixedMul(3*FRACUNIT, source->scale)>>FRACBITS, FixedMul(7*FRACUNIT, source->scale)>>FRACBITS)*FRACUNIT; + dust->momz = P_RandomRange(FixedMul(4*FRACUNIT, source->scale)>>FRACBITS, FixedMul(9*FRACUNIT, source->scale)>>FRACBITS)*FRACUNIT; truc = P_SpawnMobj(source->x + P_RandomRange(-radius, radius)*FRACUNIT, source->y + P_RandomRange(-radius, radius)*FRACUNIT, source->z + P_RandomRange(0, height)*FRACUNIT, MT_BOOMPARTICLE); truc->scale = source->scale; truc->destscale = source->scale*5; - speed = FixedMul(20*FRACUNIT, source->scale)>>FRACBITS; + speed = FixedMul(25*FRACUNIT, source->scale)>>FRACBITS; truc->momx = P_RandomRange(-speed, speed)*FRACUNIT; truc->momy = P_RandomRange(-speed, speed)*FRACUNIT; - speed = FixedMul(15*FRACUNIT, source->scale)>>FRACBITS; - speed2 = FixedMul(45*FRACUNIT, source->scale)>>FRACBITS; + speed = FixedMul(18*FRACUNIT, source->scale)>>FRACBITS; + speed2 = FixedMul(56*FRACUNIT, source->scale)>>FRACBITS; truc->momz = P_RandomRange(speed, speed2)*FRACUNIT; if (P_RandomChance(FRACUNIT/2)) truc->momz = -truc->momz; @@ -2970,14 +2970,14 @@ void K_MoveKartPlayer(player_t *player, boolean onground) newangle = player->mo->angle; newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT); - mo = P_SpawnMobj(newx, newy, player->mo->z, MT_BOMBSHIELD); + mo = P_SpawnMobj(newx, newy, player->mo->z, MT_MINESHIELD); mo->threshold = 10; if (mo) P_SetTarget(&mo->target, player->mo); } else if (!(cmd->buttons & BT_ATTACK) && HOLDING_ITEM) { - K_ThrowKartItem(player, false, MT_BOMBITEM, 1, true); + K_ThrowKartItem(player, false, MT_MINEITEM, 1, true); K_PlayTauntSound(player->mo); player->kartstuff[k_itemamount]--; player->kartstuff[k_itemheld] = 0; @@ -3565,8 +3565,8 @@ static void K_initKartHUD(void) SPDM_X = 9; // 9 SPDM_Y = BASEVIDHEIGHT - 45; // 155 // Position Number - POSI_X = BASEVIDWIDTH - 6; // 268 - POSI_Y = BASEVIDHEIGHT - 4; // 138 + POSI_X = BASEVIDWIDTH - 9; // 268 + POSI_Y = BASEVIDHEIGHT - 9; // 138 // Top-Four Faces FACE_X = 9; // 9 FACE_Y = 92; // 92 @@ -3577,7 +3577,7 @@ static void K_initKartHUD(void) CHEK_Y = BASEVIDHEIGHT; // 200 // Minimap MINI_X = BASEVIDWIDTH - 50; // 270 - MINI_Y = BASEVIDHEIGHT/2; // 100 + MINI_Y = (BASEVIDHEIGHT/2)-16; // 84 if (splitscreen) // Splitscreen @@ -4265,17 +4265,95 @@ void K_ReloadSkinIconGraphics(void) K_LoadIconGraphics(skins[i].iconprefix, i); } -static void K_drawKartMinimap(void) +static void K_drawKartMinimapHead(player_t *player, INT32 x, INT32 y, INT32 flags, patch_t *AutomapPic) { + // amnum xpos & ypos are the icon's speed around the HUD. + // The number being divided by is for how fast it moves. + // The higher the number, the slower it moves. + + // am xpos & ypos are the icon's starting position. Withouht + // it, they wouldn't 'spawn' on the top-right side of the HUD. + fixed_t amnumxpos; fixed_t amnumypos; INT32 amxpos; INT32 amypos; + + node_t *bsp = &nodes[numnodes-1]; + fixed_t maxx, minx, maxy, miny; + maxx = maxy = INT32_MAX; + minx = miny = INT32_MIN; + minx = bsp->bbox[0][BOXLEFT]; + maxx = bsp->bbox[0][BOXRIGHT]; + miny = bsp->bbox[0][BOXBOTTOM]; + maxy = bsp->bbox[0][BOXTOP]; + + if (bsp->bbox[1][BOXLEFT] < minx) + minx = bsp->bbox[1][BOXLEFT]; + if (bsp->bbox[1][BOXRIGHT] > maxx) + maxx = bsp->bbox[1][BOXRIGHT]; + if (bsp->bbox[1][BOXBOTTOM] < miny) + miny = bsp->bbox[1][BOXBOTTOM]; + if (bsp->bbox[1][BOXTOP] > maxy) + maxy = bsp->bbox[1][BOXTOP]; + + // You might be wondering why these are being bitshift here + // it's because mapwidth and height would otherwise overflow for maps larger than half the size possible... + // map boundaries and sizes will ALWAYS be whole numbers thankfully + // later calculations take into consideration that these are actually not in terms of FRACUNIT though + minx >>= FRACBITS; + maxx >>= FRACBITS; + miny >>= FRACBITS; + maxy >>= FRACBITS; + + fixed_t mapwidth = maxx - minx; + fixed_t mapheight = maxy - miny; + + // These should always be small enough to be bitshift back right now + fixed_t xoffset = (minx + mapwidth/2)<width, mapwidth); + fixed_t yscale = FixedDiv(AutomapPic->height, mapheight); + fixed_t zoom = FixedMul(min(xscale, yscale), FRACUNIT-FRACUNIT/20); + + amnumxpos = (FixedMul(player->mo->x, zoom) - FixedMul(xoffset, zoom)); + amnumypos = -(FixedMul(player->mo->y, zoom) - FixedMul(yoffset, zoom)); + + amxpos = amnumxpos + ((x + AutomapPic->width/2 - (iconprefix[player->skin]->width/2))<height/2 - (iconprefix[player->skin]->height/2))<width/2 + (iconprefix[player->skin]->width/2))<skincolor) // 'default' color + V_DrawSciencePatch(amxpos, amypos, flags, iconprefix[player->skin], FRACUNIT); + else + { + UINT8 *colormap; + if (player->mo->colorized) + { + colormap = R_GetTranslationColormap(TC_RAINBOW, player->mo->color, 0); + } + else + { + colormap = R_GetTranslationColormap(player->skin, player->mo->color, 0); + } + V_DrawFixedPatch(amxpos, amypos, FRACUNIT, flags, iconprefix[player->skin], colormap); + } +} + +static void K_drawKartMinimap(void) +{ INT32 lumpnum; patch_t *AutomapPic; INT32 i = 0; INT32 x, y; - INT32 splitflags = V_SNAPTORIGHT|V_HUDTRANSHALF; + const INT32 minimaptrans = ((10-cv_kartminimap.value)<bbox[0][BOXLEFT]; - maxx = bsp->bbox[0][BOXRIGHT]; - miny = bsp->bbox[0][BOXBOTTOM]; - maxy = bsp->bbox[0][BOXTOP]; - - if (bsp->bbox[1][BOXLEFT] < minx) - minx = bsp->bbox[1][BOXLEFT]; - if (bsp->bbox[1][BOXRIGHT] > maxx) - maxx = bsp->bbox[1][BOXRIGHT]; - if (bsp->bbox[1][BOXBOTTOM] < miny) - miny = bsp->bbox[1][BOXBOTTOM]; - if (bsp->bbox[1][BOXTOP] > maxy) - maxy = bsp->bbox[1][BOXTOP]; - - // You might be wondering why these are being bitshift here - // it's because mapwidth and height would otherwise overflow for maps larger than half the size possible... - // map boundaries and sizes will ALWAYS be whole numbers thankfully - // later calculations take into consideration that these are actually not in terms of FRACUNIT though - minx >>= FRACBITS; - maxx >>= FRACBITS; - miny >>= FRACBITS; - maxy >>= FRACBITS; - - fixed_t mapwidth = maxx - minx; - fixed_t mapheight = maxy - miny; - - // These should always be small enough to be bitshift back right now - fixed_t xoffset = (minx + mapwidth/2)<width, mapwidth); - fixed_t yscale = FixedDiv(AutomapPic->height, mapheight); - fixed_t zoom = FixedMul(min(xscale, yscale), FRACUNIT-FRACUNIT/20); - - amnumxpos = (FixedMul(players[i].mo->x, zoom) - FixedMul(xoffset, zoom)); - amnumypos = -(FixedMul(players[i].mo->y, zoom) - FixedMul(yoffset, zoom)); - - amxpos = amnumxpos + ((x + AutomapPic->width/2 - (iconprefix[players[i].skin]->width/2))<height/2 - (iconprefix[players[i].skin]->height/2))<width/2 + (iconprefix[players[i].skin]->width/2))<colorized) - { - colormap = R_GetTranslationColormap(TC_RAINBOW, players[i].mo->color, 0); - } - else - { - colormap = R_GetTranslationColormap(players[i].skin, players[i].mo->color, 0); - } - V_DrawFixedPatch(amxpos, amypos, FRACUNIT, splitflags|V_FLIP, iconprefix[players[i].skin], colormap); - } - } - else - { - if (!players[i].skincolor) // 'default' color - V_DrawSciencePatch(amxpos, amypos, splitflags, iconprefix[players[i].skin], FRACUNIT); - else - { - UINT8 *colormap; - if (players[i].mo->colorized) - { - colormap = R_GetTranslationColormap(TC_RAINBOW, players[i].mo->color, 0); - } - else - { - colormap = R_GetTranslationColormap(players[i].skin, players[i].mo->color, 0); - } - V_DrawFixedPatch(amxpos, amypos, FRACUNIT, splitflags, iconprefix[players[i].skin], colormap); - } - } - } + K_drawKartMinimapHead(&players[i], x, y, splitflags, AutomapPic); } + + if (splitscreen == 2) + return; // Don't need this for splits + + splitflags &= ~V_HUDTRANSHALF; + splitflags |= V_HUDTRANS; + K_drawKartMinimapHead(stplyr, x, y, splitflags, AutomapPic); } static void K_drawBattleFullscreen(void) @@ -4632,7 +4631,7 @@ void K_drawKartHUD(void) K_drawKartPlayerCheck(); } - if ((splitscreen == 0 || splitscreen == 2) && cv_kartminimap.value) + if ((splitscreen == 0 && cv_kartminimap.value) || splitscreen == 2) K_drawKartMinimap(); // Draw the item window diff --git a/src/m_menu.c b/src/m_menu.c index 5f34da89..1fb5d7fe 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1422,10 +1422,11 @@ static menuitem_t OP_GameOptionsMenu[] = {IT_STRING | IT_CVAR | IT_CV_SLIDER, NULL, "HUD Visibility", &cv_translucenthud, 50}, - {IT_STRING | IT_CVAR, NULL, "Star SFX", &cv_kartstarsfx, 62}, + {IT_STRING | IT_CVAR | IT_CV_SLIDER, + NULL, "Minimap Visibility", &cv_kartminimap, 62}, {IT_STRING | IT_CVAR, NULL, "Speedometer Display", &cv_speedometer, 72}, - {IT_STRING | IT_CVAR, NULL, "Show Minimap", &cv_kartminimap, 82}, - {IT_STRING | IT_CVAR, NULL, "Show \"CHECK\"", &cv_kartcheck, 92}, + {IT_STRING | IT_CVAR, NULL, "Show \"CHECK\"", &cv_kartcheck, 82}, + {IT_STRING | IT_CVAR, NULL, "Star SFX", &cv_kartstarsfx, 92}, #ifdef SEENAMES {IT_STRING | IT_CVAR, NULL, "HUD Player Names", &cv_seenames, 104}, diff --git a/src/p_enemy.c b/src/p_enemy.c index b2976687..fd961993 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8277,7 +8277,7 @@ void A_MineExplode(mobj_t *actor) else K_SpawnMineExplosion(actor, SKINCOLOR_RED); - P_SpawnMobj(actor->x, actor->y, actor->z, MT_BOMBEXPLOSIONSOUND); + P_SpawnMobj(actor->x, actor->y, actor->z, MT_MINEEXPLOSIONSOUND); //S_StartSound(actor, sfx_prloop); @@ -8288,7 +8288,7 @@ void A_MineExplode(mobj_t *actor) mo2 = (mobj_t *)th; - if (mo2 == actor || mo2->type == MT_BOMBEXPLOSIONSOUND) // Don't explode yourself! Endless loop! + if (mo2 == actor || mo2->type == MT_MINEEXPLOSIONSOUND) // Don't explode yourself! Endless loop! continue; if (gametype == GT_MATCH && actor->target && actor->target->player && actor->target->player->kartstuff[k_balloon] <= 0 && mo2 == actor->target) diff --git a/src/p_inter.c b/src/p_inter.c index 0ac95d02..47031a6b 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2038,7 +2038,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source) && ((target->type == MT_GREENSHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_ORBINAUT) || (target->type == MT_REDSHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_JAWZ) || (target->type == MT_BANANASHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_BANANA) - || (target->type == MT_BOMBSHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_MINE))) + || (target->type == MT_MINESHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_MINE))) { if (target->lastlook > 0) target->target->player->kartstuff[k_itemamount] = target->lastlook-1; diff --git a/src/p_map.c b/src/p_map.c index 6179e465..8ec8d36d 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -761,7 +761,7 @@ static boolean PIT_CheckThing(mobj_t *thing) P_SetObjectMomZ(thing, 8*FRACUNIT, false); P_InstaThrust(thing, R_PointToAngle2(tmthing->x, tmthing->y, thing->x, thing->y)+ANGLE_90, 16*FRACUNIT); } - else if (thing->type == MT_BOMBSHIELD || thing->type == MT_BOMBITEM) + else if (thing->type == MT_MINESHIELD || thing->type == MT_MINEITEM) { // This Item Damage if (tmthing->eflags & MFE_VERTICALFLIP) @@ -825,7 +825,7 @@ static boolean PIT_CheckThing(mobj_t *thing) return true; } - else if (tmthing->type == MT_BOMBEXPLOSION) + else if (tmthing->type == MT_MINEEXPLOSION) { // see if it went over / under if (tmthing->z > thing->z + thing->height) @@ -974,7 +974,7 @@ static boolean PIT_CheckThing(mobj_t *thing) if (thing->type == MT_GREENITEM // When these items collide with the fake item, just the fake item is destroyed || thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD - || thing->type == MT_BOMBITEM + || thing->type == MT_MINEITEM || thing->type == MT_BANANAITEM || thing->type == MT_FIREBALL) { // This Item Damage @@ -991,7 +991,7 @@ static boolean PIT_CheckThing(mobj_t *thing) } else if (thing->type == MT_GREENSHIELD // When these items collide with the fake item, both of them are destroyed || thing->type == MT_REDSHIELD - || thing->type == MT_BOMBSHIELD + || thing->type == MT_MINESHIELD || thing->type == MT_BANANASHIELD || thing->type == MT_FAKEITEM || thing->type == MT_FAKESHIELD) { @@ -1041,7 +1041,7 @@ static boolean PIT_CheckThing(mobj_t *thing) return true; } - else if (tmthing->type == MT_BOMBSHIELD || tmthing->type == MT_BOMBITEM) + else if (tmthing->type == MT_MINESHIELD || tmthing->type == MT_MINEITEM) { // see if it went over / under if (tmthing->z > thing->z + thing->height) @@ -1087,8 +1087,8 @@ static boolean PIT_CheckThing(mobj_t *thing) || thing->type == MT_REDSHIELD || thing->type == MT_REDITEM || thing->type == MT_REDITEMDUD || thing->type == MT_FAKESHIELD || thing->type == MT_FAKEITEM || thing->type == MT_BANANASHIELD || thing->type == MT_BANANAITEM - || thing->type == MT_BOMBSHIELD || thing->type == MT_BOMBITEM - || thing->type == MT_BOMBEXPLOSION + || thing->type == MT_MINESHIELD || thing->type == MT_MINEITEM + || thing->type == MT_MINEEXPLOSION || thing->type == MT_SINK || thing->type == MT_FIREBALL )) { @@ -1154,7 +1154,7 @@ static boolean PIT_CheckThing(mobj_t *thing) P_SetObjectMomZ(thing, 8*FRACUNIT, false); P_InstaThrust(thing, R_PointToAngle2(tmthing->x, tmthing->y, thing->x, thing->y)+ANGLE_90, 16*FRACUNIT); } - else if (thing->type == MT_BOMBSHIELD || thing->type == MT_BOMBITEM) + else if (thing->type == MT_MINESHIELD || thing->type == MT_MINEITEM) { if ((thing->target == tmthing) && (thing->threshold > 0)) return true; @@ -1164,7 +1164,7 @@ static boolean PIT_CheckThing(mobj_t *thing) P_KillMobj(thing, tmthing, tmthing); } - else if (thing->type == MT_BOMBEXPLOSION && tmthing->player) + else if (thing->type == MT_MINEEXPLOSION && tmthing->player) { // Player Damage if (thing->state == &states[S_BOMBEXPLOSION1]) diff --git a/src/p_mobj.c b/src/p_mobj.c index ff8708a2..10f2d89c 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1402,7 +1402,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) gravityadd >>= 1; case MT_BANANAITEM: case MT_FAKEITEM: - case MT_BOMBITEM: + case MT_MINEITEM: gravityadd = FixedMul(gravityadd, 5*FRACUNIT/2); default: break; @@ -6598,7 +6598,7 @@ void P_MobjThinker(mobj_t *mobj) case MT_REDSHIELD: case MT_BANANASHIELD: case MT_FAKESHIELD: - case MT_BOMBSHIELD: + case MT_MINESHIELD: if (mobj->health > 0 && mobj->target && mobj->target->player && mobj->target->player->mo && mobj->target->player->health > 0 && !mobj->target->player->spectator) { @@ -6669,7 +6669,7 @@ void P_MobjThinker(mobj_t *mobj) if ((mobj->type == MT_GREENSHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_ORBINAUT) || (mobj->type == MT_REDSHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_JAWZ) || (mobj->type == MT_BANANASHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_BANANA) - || (mobj->type == MT_BOMBSHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_MINE) + || (mobj->type == MT_MINESHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_MINE) || (mobj->type == MT_FAKESHIELD && !mobj->target->player->kartstuff[k_fakeitem]) || (mobj->type != MT_FAKESHIELD && !mobj->target->player->kartstuff[k_itemheld]) || (mobj->lastlook > 0 && mobj->target->player->kartstuff[k_itemamount] < mobj->lastlook)) @@ -7254,7 +7254,7 @@ void P_MobjThinker(mobj_t *mobj) if (mobj->z <= mobj->floorz) P_RemoveMobj(mobj); break; - case MT_BOMBITEM: + case MT_MINEITEM: case MT_BLUEEXPLOSION: if (mobj->health > -100) { @@ -7264,7 +7264,7 @@ void P_MobjThinker(mobj_t *mobj) else P_RemoveMobj(mobj); break; - case MT_BOMBEXPLOSIONSOUND: + case MT_MINEEXPLOSIONSOUND: P_RemoveMobj(mobj); break; //} @@ -7901,7 +7901,7 @@ void P_MobjThinker(mobj_t *mobj) if (mobj->threshold > 0) mobj->threshold--; break; - case MT_BOMBITEM: + case MT_MINEITEM: if (mobj->target && mobj->target->player) mobj->color = mobj->target->player->skincolor; else @@ -7919,13 +7919,16 @@ void P_MobjThinker(mobj_t *mobj) } mobj->health--; } + if (mobj->state == &states[S_BOMBITEM1] || mobj->state == &states[S_BOMBITEM2] + || mobj->state == &states[S_BOMBITEM3] || mobj->state == &states[S_BOMBITEM4]) + A_GrenadeRing(mobj); if (mobj->threshold > 0) mobj->threshold--; break; case MT_BLUEEXPLOSION: mobj->health--; break; - case MT_BOMBEXPLOSION: + case MT_MINEEXPLOSION: if ((mobj->z < mobj->floorz - mobj->height) || (mobj->z > mobj->ceilingz + mobj->height)) { P_KillMobj(mobj, NULL, NULL); @@ -7948,7 +7951,7 @@ void P_MobjThinker(mobj_t *mobj) mobj->z += mobj->momz; P_SetThingPosition(mobj); return; - case MT_BOMBEXPLOSIONSOUND: + case MT_MINEEXPLOSIONSOUND: if (mobj->health == 100) S_StartSound(mobj, sfx_prloop); mobj->health--; @@ -8712,7 +8715,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) case MT_REDITEM: case MT_REDSHIELD: case MT_REDITEMDUD: case MT_BATTLEBALLOON: case MT_FIREBALL: case MT_FAKEITEM: case MT_FAKESHIELD: - case MT_BOMBITEM: case MT_BOMBSHIELD: + case MT_MINEITEM: case MT_MINESHIELD: P_SpawnShadowMobj(mobj); default: break; diff --git a/src/v_video.c b/src/v_video.c index 5f533596..defe8096 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -303,7 +303,7 @@ void VID_BlitLinearScreen(const UINT8 *srcptr, UINT8 *destptr, INT32 width, INT3 #endif } -static UINT8 hudplusalpha[11] = { 10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0}; +//static UINT8 hudplusalpha[11] = { 10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0}; static UINT8 hudminusalpha[11] = { 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5}; static const UINT8 *v_colormap = NULL; @@ -362,8 +362,8 @@ void V_DrawFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_t alphalevel = hudminusalpha[cv_translucenthud.value]; else if (alphalevel == 14) alphalevel = 10 - cv_translucenthud.value; - else if (alphalevel == 15) - alphalevel = hudplusalpha[cv_translucenthud.value]; + /*else if (alphalevel == 15) + alphalevel = hudplusalpha[cv_translucenthud.value];*/ if (alphalevel >= 10) return; // invis From 2889687d1db7885d461d11cd0dcca3960cdea72c Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sat, 10 Feb 2018 01:19:33 -0500 Subject: [PATCH 04/14] New invincibility effect, grow/shrink stuff Whenever grow/shrink effects get made, I'll remove the Mario-style stuttered growth and whatever else needs doing beyond that --- src/d_netcmd.c | 4 +- src/d_netcmd.h | 2 +- src/d_player.h | 6 +- src/dehacked.c | 26 +++++++- src/info.c | 54 ++++++++++++++-- src/info.h | 28 +++++++- src/k_kart.c | 162 ++++++++++++++++++++++++++-------------------- src/k_kart.h | 1 + src/lua_baselib.c | 11 ++++ src/m_menu.c | 4 +- src/p_inter.c | 2 +- src/p_mobj.c | 21 ++++-- src/p_user.c | 8 ++- 13 files changed, 233 insertions(+), 96 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index d42ed2fa..dfd38794 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -336,8 +336,8 @@ consvar_t cv_jawz = {"jawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0 consvar_t cv_mine = {"mine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_ballhog = {"ballhog", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_selfpropelledbomb = {"selfpropelledbomb", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_sizeup = {"sizeup", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_sizedown = {"sizedown", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_grow = {"grow", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_shrink = {"shrink", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_lightningshield = {"lightningshield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_hyudoro = {"hyudoro", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_pogospring = {"pogospring", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 6363fd0d..fb314b97 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -111,7 +111,7 @@ extern consvar_t cv_recycler;*/ // SRB2kart items extern consvar_t cv_sneaker, cv_rocketsneaker, cv_invincibility, cv_banana; extern consvar_t cv_fakeitem, cv_orbinaut, cv_jawz, cv_mine; -extern consvar_t cv_ballhog, cv_selfpropelledbomb, cv_sizeup, cv_sizedown; +extern consvar_t cv_ballhog, cv_selfpropelledbomb, cv_grow, cv_shrink; extern consvar_t cv_lightningshield, cv_hyudoro, cv_pogospring; extern consvar_t cv_triplesneaker, cv_triplebanana, cv_tripleorbinaut, cv_dualjawz; diff --git a/src/d_player.h b/src/d_player.h index c7cb6d2a..28ee6d00 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -244,8 +244,8 @@ typedef enum KITEM_MINE, KITEM_BALLHOG, KITEM_SPB, - KITEM_SIZEUP, - KITEM_SIZEDOWN, + KITEM_GROW, + KITEM_SHRINK, KITEM_LIGHTNINGSHIELD, KITEM_HYUDORO, KITEM_POGOSPRING, @@ -309,7 +309,7 @@ typedef enum k_fakeitem, // Fake item held, separate from itemtype so it doesn't stop you from getting items k_spinouttimer, // Spin-out from a banana peel or oil slick (was "pw_bananacam") k_justbumped, // Prevent players from endlessly bumping into each other - k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Invincibility, Size Up) + k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Invincibility, Grow) k_comebacktimer, // Battle mode, how long before you become a bomb after death k_sadtimer, // How long you've been sad diff --git a/src/dehacked.c b/src/dehacked.c index 39ec2c16..9c1f3aef 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6258,6 +6258,25 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_KARTFIRE7", "S_KARTFIRE8", + // Invincibility Sparks + "S_KARTINVULN_SMALL1", + "S_KARTINVULN_SMALL2", + "S_KARTINVULN_SMALL3", + "S_KARTINVULN_SMALL4", + "S_KARTINVULN_SMALL5", + + "S_KARTINVULN_LARGE1", + "S_KARTINVULN_LARGE2", + "S_KARTINVULN_LARGE3", + "S_KARTINVULN_LARGE4", + "S_KARTINVULN_LARGE5", + + // Invincibility flash overlay + "S_INVULNFLASH1", + "S_INVULNFLASH2", + "S_INVULNFLASH3", + "S_INVULNFLASH4", + //{ Fake Item "S_FAKEITEM1", "S_FAKEITEM2", @@ -6395,7 +6414,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_BLUELIGHTNING4", "S_BLUEEXPLODE", - // Size Down + // Grow/shrink beams "S_LIGHTNING1", "S_LIGHTNING2", "S_LIGHTNING3", @@ -6457,7 +6476,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_PLAYERARROW_BALLHOG", "S_PLAYERARROW_ORBINAUT", "S_PLAYERARROW_INVINCIBILITY", - "S_PLAYERARROW_SIZEUP", + "S_PLAYERARROW_GROW", "S_PLAYERARROW_KITCHENSINK", "S_PLAYERARROW_EMPTY", "S_PLAYERARROW_ROULETTE", @@ -6984,6 +7003,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_RANDOMITEMPOP", "MT_SNEAKERTRAIL", + "MT_SPARKLETRAIL", "MT_DRIFT", "MT_DRIFTSMOKE", @@ -7010,7 +7030,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_SMOLDERING", // New explosion "MT_BOOMPARTICLE", - "MT_BLUELIGHTNING", // Size Down stuff + "MT_BLUELIGHTNING", // Grow/shrink stuff "MT_BLUEEXPLOSION", "MT_LIGHTNING", diff --git a/src/info.c b/src/info.c index 67c48db1..896cf61a 100644 --- a/src/info.c +++ b/src/info.c @@ -55,10 +55,10 @@ char sprnames[NUMSPRITES + 1][5] = "GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI", "SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO", //SRB2kart Sprites - "SPRG","BSPR","RNDM","KFRE","DRIF","DSMO","FITM","BANA","GSHE","RSHE", - "SSMN","KRBM","BLIG","LIGH","SINK","SITR","KBLN","LAKI","POKE","AUDI", - "DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO","CRAB","SHAD", - "BUMP","FLEN","CLAS","PSHW","ARRO","PBOM" + "SPRG","BSPR","RNDM","KFRE","KINV","KINF","DRIF","DSMO","FITM","BANA", + "GSHE","RSHE","SSMN","KRBM","BLIG","LIGH","SINK","SITR","KBLN","LAKI", + "POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO", + "CRAB","SHAD","BUMP","FLEN","CLAS","PSHW","ARRO","PBOM" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -2592,6 +2592,23 @@ state_t states[NUMSTATES] = {SPR_KFRE, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_KARTFIRE8}, // S_KARTFIRE7 {SPR_KFRE, FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_NULL}, // S_KARTFIRE8 + {SPR_KINV, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL2}, // S_KARTINVULN_SMALL1 + {SPR_KINV, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL3}, // S_KARTINVULN_SMALL2 + {SPR_KINV, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL4}, // S_KARTINVULN_SMALL3 + {SPR_KINV, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL5}, // S_KARTINVULN_SMALL4 + {SPR_KINV, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_NULL}, // S_KARTINVULN_SMALL5 + + {SPR_KINV, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE2}, // S_KARTINVULN_LARGE1 + {SPR_KINV, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE3}, // S_KARTINVULN_LARGE2 + {SPR_KINV, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE4}, // S_KARTINVULN_LARGE3 + {SPR_KINV, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE5}, // S_KARTINVULN_LARGE4 + {SPR_KINV, FF_FULLBRIGHT|7, 1, {NULL}, 0, 0, S_NULL}, // S_KARTINVULN_LARGE5 + + {SPR_KINF, FF_FULLBRIGHT|FF_TRANS80, 1, {NULL}, 0, 0, S_INVULNFLASH2}, // S_INVULNFLASH1 + {SPR_NULL, FF_FULLBRIGHT|FF_TRANS80, 1, {NULL}, 0, 0, S_INVULNFLASH3}, // S_INVULNFLASH2 + {SPR_KINF, FF_FULLBRIGHT|FF_TRANS80|1, 1, {NULL}, 0, 0, S_INVULNFLASH4}, // S_INVULNFLASH3 + {SPR_NULL, FF_FULLBRIGHT|FF_TRANS80, 1, {NULL}, 0, 0, S_INVULNFLASH1}, // S_INVULNFLASH4 + {SPR_FITM, 0, 3, {NULL}, 0, 0, S_FAKEITEM2}, // S_FAKEITEM1 {SPR_FITM, 1, 3, {NULL}, 0, 0, S_FAKEITEM3}, // S_FAKEITEM2 {SPR_FITM, 2, 3, {NULL}, 0, 0, S_FAKEITEM4}, // S_FAKEITEM3 @@ -2899,7 +2916,7 @@ state_t states[NUMSTATES] = {SPR_ARRO, FF_FULLBRIGHT|9, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_BALLHOG {SPR_ARRO, FF_FULLBRIGHT|10, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_ORBINAUT {SPR_ARRO, FF_FULLBRIGHT|13, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_INVINCIBILITY - {SPR_ARRO, FF_FULLBRIGHT|14, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_SIZEUP + {SPR_ARRO, FF_FULLBRIGHT|14, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_GROW {SPR_ARRO, FF_FULLBRIGHT|15, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_KITCHENSINK {SPR_ARRO, FF_FULLBRIGHT|16, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_EMPTY {SPR_ARRO, FF_FULLBRIGHT|FF_ANIMATE|1, -1, {NULL}, 5, 3, S_NULL}, // S_PLAYERARROW_ROULETTE @@ -14352,6 +14369,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_SPARKLETRAIL + -1, // doomednum + S_KARTINVULN_SMALL1, // 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_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 8, // speed + 14*FRACUNIT, // radius + 14*FRACUNIT, // height + 0, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags + S_NULL // raisestate + }, + { // MT_DRIFT -1, // doomednum S_DRIFTSPARK1, // spawnstate diff --git a/src/info.h b/src/info.h index a495f398..0420f533 100644 --- a/src/info.h +++ b/src/info.h @@ -580,6 +580,8 @@ typedef enum sprite SPR_RNDM, // Random Item Box SPR_KFRE, // Sneaker fire trail + SPR_KINV, // Invincibility sparkle trail + SPR_KINF, // Invincibility flash SPR_DRIF, // Drift Sparks SPR_DSMO, // Drift Smoke @@ -591,7 +593,7 @@ typedef enum sprite SPR_SSMN, // SS Mine SPR_KRBM, // SS Mine BOOM SPR_BLIG, // Self-Propelled Bomb - SPR_LIGH, // Size Up/Down beams (Metallic Maddness) + SPR_LIGH, // Grow/shrink beams (Metallic Maddness) SPR_SINK, // Kitchen Sink SPR_SITR, // Kitchen Sink Trail SPR_KBLN, // Battle Mode Balloon @@ -3091,6 +3093,25 @@ typedef enum state S_KARTFIRE7, S_KARTFIRE8, + // Invincibility Sparks + S_KARTINVULN_SMALL1, + S_KARTINVULN_SMALL2, + S_KARTINVULN_SMALL3, + S_KARTINVULN_SMALL4, + S_KARTINVULN_SMALL5, + + S_KARTINVULN_LARGE1, + S_KARTINVULN_LARGE2, + S_KARTINVULN_LARGE3, + S_KARTINVULN_LARGE4, + S_KARTINVULN_LARGE5, + + // Invincibility flash + S_INVULNFLASH1, + S_INVULNFLASH2, + S_INVULNFLASH3, + S_INVULNFLASH4, + //{ Fake Item S_FAKEITEM1, S_FAKEITEM2, @@ -3417,7 +3438,7 @@ typedef enum state S_PLAYERARROW_BALLHOG, S_PLAYERARROW_ORBINAUT, S_PLAYERARROW_INVINCIBILITY, - S_PLAYERARROW_SIZEUP, + S_PLAYERARROW_GROW, S_PLAYERARROW_KITCHENSINK, S_PLAYERARROW_EMPTY, S_PLAYERARROW_ROULETTE, @@ -3961,6 +3982,7 @@ typedef enum mobj_type MT_RANDOMITEMPOP, MT_SNEAKERTRAIL, + MT_SPARKLETRAIL, MT_DRIFT, MT_DRIFTSMOKE, @@ -3986,7 +4008,7 @@ typedef enum mobj_type MT_SMOLDERING, // New explosion MT_BOOMPARTICLE, - MT_BLUELIGHTNING, // Size Down stuff + MT_BLUELIGHTNING, // Grow/shrink stuff MT_BLUEEXPLOSION, MT_LIGHTNING, diff --git a/src/k_kart.c b/src/k_kart.c index 2d12c73d..0cb88519 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -303,8 +303,8 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_mine); CV_RegisterVar(&cv_ballhog); CV_RegisterVar(&cv_selfpropelledbomb); - CV_RegisterVar(&cv_sizeup); - CV_RegisterVar(&cv_sizedown); + CV_RegisterVar(&cv_grow); + CV_RegisterVar(&cv_shrink); CV_RegisterVar(&cv_lightningshield); CV_RegisterVar(&cv_hyudoro); CV_RegisterVar(&cv_pogospring); @@ -352,8 +352,8 @@ static INT32 K_KartItemOddsDistance_Retro[NUMKARTRESULTS][9] = /*Mine*/ { 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Mine /*Ballhog*/ { 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Ballhog /*Self-Propelled Bomb*/ { 0, 0, 0, 0, 0, 1, 2, 0, 0 }, // Self-Propelled Bomb - /*Size Up*/ { 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // Size Up - /*Size Down*/ { 0, 0, 0, 0, 0, 0, 1, 2, 0 }, // Size Down + /*Grow*/ { 0, 0, 0, 0, 0, 1, 1, 0, 0 }, // Grow + /*Shrink*/ { 0, 0, 0, 0, 0, 0, 1, 2, 0 }, // Shrink /*Lightning Shield*/ { 0, 1, 2, 0, 0, 0, 0, 0, 0 }, // Lightning Shield /*Hyudoro*/ { 0, 0, 2, 2, 1, 0, 0, 0, 0 }, // Hyudoro /*Pogo Spring*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // Pogo Spring @@ -378,8 +378,8 @@ static INT32 K_KartItemOddsBalloons[NUMKARTRESULTS][5] = /*Mine*/ { 0, 3, 3, 0, 0 }, // Mine /*Ballhog*/ { 0, 3, 3, 0, 0 }, // Ballhog /*Self-Propelled Bomb*/ { 0, 0, 0, 0, 0 }, // Self-Propelled Bomb - /*Size Up*/ { 1, 1, 0, 0, 0 }, // Size Up - /*Size Down*/ { 0, 0, 0, 0, 0 }, // Size Down + /*Grow*/ { 1, 1, 0, 0, 0 }, // Grow + /*Shrink*/ { 0, 0, 0, 0, 0 }, // Shrink /*Lightning Shield*/ { 0, 0, 0, 0, 0 }, // Lightning Shield /*Hyudoro*/ { 0, 1, 1, 1, 0 }, // Hyudoro /*Pogo Spring*/ { 0, 0, 3, 2, 1 }, // Pogo Spring @@ -490,13 +490,13 @@ static INT32 K_KartGetItemOdds(UINT8 pos, INT8 item, player_t *player) if (franticitems) newodds *= 2; if (!cv_selfpropelledbomb.value || pexiting <= 0) newodds = 0; break; - case KITEM_SIZEUP: + case KITEM_GROW: if (franticitems) newodds *= 2; - if (!cv_sizeup.value || player->kartstuff[k_poweritemtimer]) newodds = 0; + if (!cv_grow.value || player->kartstuff[k_poweritemtimer]) newodds = 0; break; - case KITEM_SIZEDOWN: + case KITEM_SHRINK: if (franticitems) newodds *= 2; - if (!cv_sizedown.value || pingame-1 <= pexiting) newodds = 0; + if (!cv_shrink.value || pingame-1 <= pexiting) newodds = 0; break; case KITEM_LIGHTNINGSHIELD: if (franticitems) newodds *= 2; @@ -696,8 +696,8 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd) SETITEMRESULT(useodds, KITEM_MINE); // Mine SETITEMRESULT(useodds, KITEM_BALLHOG); // Ballhog SETITEMRESULT(useodds, KITEM_SPB); // Self-Propelled Bomb - SETITEMRESULT(useodds, KITEM_SIZEUP); // Size Up - SETITEMRESULT(useodds, KITEM_SIZEDOWN); // Size Down + SETITEMRESULT(useodds, KITEM_GROW); // Grow + SETITEMRESULT(useodds, KITEM_SHRINK); // Shrink SETITEMRESULT(useodds, KITEM_LIGHTNINGSHIELD); // Lightning Shield SETITEMRESULT(useodds, KITEM_HYUDORO); // Hyudoro SETITEMRESULT(useodds, KITEM_POGOSPRING); // Pogo Spring @@ -912,7 +912,7 @@ static void K_UpdateOffroad(player_t *player) // A higher kart weight means you can stay offroad for longer without losing speed offroad = (1872 + 5*156 - kartweight*156)*offroadstrength; - //if (player->kartstuff[k_growshrinktimer] > 1) // sizeup slows down half as fast + //if (player->kartstuff[k_growshrinktimer] > 1) // grow slows down half as fast // offroad /= 2; player->kartstuff[k_offroad] += offroad; @@ -1206,7 +1206,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) S_StopSoundByID(player->mo, sfx_star); // Stop it } - // And the same for the size up SFX + // And the same for the grow SFX if (!(player->mo->health > 0 && player->mo->player->kartstuff[k_growshrinktimer] > 0)) // If you aren't big { if (S_SoundPlaying(player->mo, sfx_mega)) // But the sound is playing @@ -1290,7 +1290,7 @@ static fixed_t K_GetKartBoostPower(player_t *player, boolean speed) if (player->kartstuff[k_growshrinktimer] > 1 && (player->kartstuff[k_growshrinktimer] > ((itemtime + TICRATE*2) - 25) || player->kartstuff[k_growshrinktimer] <= 26)) - { // Size Up - Mid-size + { // Grow - Mid-size if (speed) { boostvalue = max(boostvalue, FRACUNIT/8); // + 12.5% @@ -1298,7 +1298,7 @@ static fixed_t K_GetKartBoostPower(player_t *player, boolean speed) } if (player->kartstuff[k_growshrinktimer] < ((itemtime + TICRATE*2) - 25) && player->kartstuff[k_growshrinktimer] > 26) - { // Size Up + { // Grow if (speed) { boostvalue = max(boostvalue, FRACUNIT/5); // + 20% @@ -1967,6 +1967,38 @@ void K_SpawnDriftTrail(player_t *player) } } +void K_SpawnSparkleTrail(player_t *player) +{ + const INT32 rad = (player->mo->radius*2)>>FRACBITS; + fixed_t newx, newy, newz; + mobj_t *sparkle; + INT32 i; + + I_Assert(player != NULL); + I_Assert(player->mo != NULL); + I_Assert(!P_MobjWasRemoved(player->mo)); + + for (i = 0; i < 3; i++) + { + newx = player->mo->x + player->mo->momx + (P_RandomRange(-rad, rad)<mo->y + player->mo->momy + (P_RandomRange(-rad, rad)<mo->z + player->mo->momz + (P_RandomRange(0, player->mo->height>>FRACBITS)<target, player->mo); + //sparkle->fuse = 10; + sparkle->destscale = player->mo->scale; + P_SetScale(sparkle, player->mo->scale); + sparkle->eflags = (sparkle->eflags & ~MFE_VERTICALFLIP)|(player->mo->eflags & MFE_VERTICALFLIP); + sparkle->color = player->mo->color; + sparkle->colorized = player->mo->colorized; + } +} + static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t mapthing, INT32 defaultDir, boolean minethrow) { mobj_t *mo; @@ -2218,7 +2250,7 @@ void K_DoSneaker(player_t *player, boolean doPFlag, boolean startboost) player->kartstuff[k_sounds] = 50; } -static void K_DoSizeDown(player_t *player, boolean spb) +static void K_DoShrink(player_t *player, boolean spb) { mobj_t *mo; thinker_t *think; @@ -2239,7 +2271,8 @@ static void K_DoSizeDown(player_t *player, boolean spb) mo = (mobj_t *)think; - if (mo->type == MT_PLAYER) + if (mo->player && !mo->player->spectator + && mo->player->kartstuff[k_position] > player->kartstuff[k_position]) P_DamageMobj(mo, player->mo, player->mo, spb ? 65 : 64); else continue; @@ -2723,6 +2756,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground) S_ChangeMusicInternal("minvnc", true); if (!cv_kartstarsfx.value && !P_IsLocalPlayer(player)) S_StartSound(player->mo, sfx_star); + if (!player->kartstuff[k_invincibilitytimer]) + { + mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_OVERLAY); + P_SetTarget(&overlay->target, player->mo); + P_SetMobjState(overlay, S_INVULNFLASH1); + } player->kartstuff[k_invincibilitytimer] = itemtime; // Activate it K_PlayTauntSound(player->mo); player->kartstuff[k_itemamount]--; @@ -2996,13 +3035,13 @@ void K_MoveKartPlayer(player_t *player, boolean onground) case KITEM_SPB: if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) { - K_DoSizeDown(player, true); + K_DoShrink(player, true); player->kartstuff[k_itemamount]--; } break; - case KITEM_SIZEUP: + case KITEM_GROW: if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO - && player->kartstuff[k_growshrinktimer] <= 0) // Size Up holds the item box hostage + && player->kartstuff[k_growshrinktimer] <= 0) // Grow holds the item box hostage { if (P_IsLocalPlayer(player) && !player->exiting) S_ChangeMusicInternal("mega", true); @@ -3017,10 +3056,10 @@ void K_MoveKartPlayer(player_t *player, boolean onground) player->kartstuff[k_poweritemtimer] = 10*TICRATE; } break; - case KITEM_SIZEDOWN: + case KITEM_SHRINK: if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) { - K_DoSizeDown(player, false); + K_DoShrink(player, false); player->kartstuff[k_itemamount]--; } break; @@ -3078,7 +3117,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else if (player->kartstuff[k_sneakertimer] == 0 && player->kartstuff[k_boosting] == 1) player->kartstuff[k_boosting] = 0; - // Size Up - Make the player grow! + // Grow - Make the player grow! if (player->kartstuff[k_growshrinktimer] > ((itemtime + TICRATE*2) - 25)) { if (leveltime & 2) @@ -3089,7 +3128,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else if (player->kartstuff[k_growshrinktimer] > 26 && player->kartstuff[k_growshrinktimer] <= ((itemtime + TICRATE*2) - 25)) player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale)*3/2; - // Size Up - Back to normal... + // Grow - Back to normal... else if (player->kartstuff[k_growshrinktimer] > 1 && player->kartstuff[k_growshrinktimer] <= 26) { @@ -3103,7 +3142,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) if ((gametype != GT_RACE) && (player->kartstuff[k_itemtype] == KITEM_INVINCIBILITY - || player->kartstuff[k_itemtype] == KITEM_SIZEUP + || player->kartstuff[k_itemtype] == KITEM_GROW || player->kartstuff[k_invincibilitytimer] || player->kartstuff[k_growshrinktimer] > 0)) player->kartstuff[k_poweritemtimer] = 10*TICRATE; @@ -3212,7 +3251,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } // Squishing - // If a Size Up player or a Thwomp crushes you, get flattened instead of being killed. + // If a Grow player or a Thwomp crushes you, get flattened instead of being killed. if (player->kartstuff[k_squishedtimer] <= 0) { @@ -3364,20 +3403,15 @@ static patch_t *kp_jawz; static patch_t *kp_mine; static patch_t *kp_ballhog; static patch_t *kp_selfpropelledbomb; -static patch_t *kp_sizeup; -static patch_t *kp_sizedown; +static patch_t *kp_grow; +static patch_t *kp_shrink; static patch_t *kp_lightningshield; static patch_t *kp_hyudoro; static patch_t *kp_pogospring; static patch_t *kp_kitchensink; static patch_t *kp_sadface; -static patch_t *kp_check; -static patch_t *kp_checkw; -static patch_t *kp_checkinvuln; -static patch_t *kp_checkinvulnw; -static patch_t *kp_checksizeup; -static patch_t *kp_checksizeupw; +static patch_t *kp_check[6]; void K_LoadKartHUDGraphics(void) { @@ -3486,8 +3520,8 @@ void K_LoadKartHUDGraphics(void) kp_mine = W_CachePatchName("K_ITMINE", PU_HUDGFX); kp_ballhog = W_CachePatchName("K_ITBHOG", PU_HUDGFX); kp_selfpropelledbomb = W_CachePatchName("K_ITSPB", PU_HUDGFX); - kp_sizeup = W_CachePatchName("K_ITSUP", PU_HUDGFX); - kp_sizedown = W_CachePatchName("K_ITSDWN", PU_HUDGFX); + kp_grow = W_CachePatchName("K_ITGROW", PU_HUDGFX); + kp_shrink = W_CachePatchName("K_ITSHRK", PU_HUDGFX); kp_lightningshield = W_CachePatchName("K_ITLITS", PU_HUDGFX); kp_hyudoro = W_CachePatchName("K_ITHYUD", PU_HUDGFX); kp_pogospring = W_CachePatchName("K_ITPOGO", PU_HUDGFX); @@ -3495,12 +3529,11 @@ void K_LoadKartHUDGraphics(void) kp_sadface = W_CachePatchName("K_ITSAD", PU_HUDGFX); // CHECK indicators - kp_check = W_CachePatchName("K_CHECK1", PU_HUDGFX); - kp_checkw = W_CachePatchName("K_CHECK2", PU_HUDGFX); - kp_checkinvuln = W_CachePatchName("K_CHECK3", PU_HUDGFX); - kp_checkinvulnw = W_CachePatchName("K_CHECK4", PU_HUDGFX); - kp_checksizeup = W_CachePatchName("K_CHECK5", PU_HUDGFX); - kp_checksizeupw = W_CachePatchName("K_CHECK6", PU_HUDGFX); + for (i = 0; i < 6; i++) + { + sprintf(buffer, "K_CHECK%d", i+1); + kp_check[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX); + } } //} @@ -3672,12 +3705,12 @@ static void K_drawKartItem(void) case 1: localpatch = kp_banana; break; // Banana case 2: localpatch = kp_orbinaut; break; // Orbinaut case 3: localpatch = kp_mine; break; // Mine - case 4: localpatch = kp_sizeup; break; // Size Up + case 4: localpatch = kp_grow; break; // Grow case 5: localpatch = kp_hyudoro; break; // Hyudoro case 6: localpatch = kp_rocketsneaker; break; // Rocket Sneaker case 7: localpatch = kp_jawz; break; // Jawz case 8: localpatch = kp_selfpropelledbomb; break; // Self-Propelled Bomb - case 9: localpatch = kp_sizedown; break; // Size Down + case 9: localpatch = kp_shrink; break; // Shrink case 10: localpatch = localinv; break; // Invincibility case 11: localpatch = kp_fakeitem; break; // Fake Item case 12: localpatch = kp_ballhog; break; // Ballhog @@ -3710,7 +3743,7 @@ static void K_drawKartItem(void) else if (stplyr->kartstuff[k_growshrinktimer] > 1) { if (leveltime & 1) - localpatch = kp_sizeup; + localpatch = kp_grow; else if (!(leveltime & 1)) localpatch = kp_nodraw; } @@ -3738,8 +3771,8 @@ static void K_drawKartItem(void) case KITEM_MINE: localpatch = kp_mine; break; case KITEM_BALLHOG: localpatch = kp_ballhog; break; case KITEM_SPB: localpatch = kp_selfpropelledbomb; break; - case KITEM_SIZEUP: localpatch = kp_sizeup; break; - case KITEM_SIZEDOWN: localpatch = kp_sizedown; break; + case KITEM_GROW: localpatch = kp_grow; break; + case KITEM_SHRINK: localpatch = kp_shrink; break; case KITEM_LIGHTNINGSHIELD: localpatch = kp_lightningshield; break; case KITEM_HYUDORO: localpatch = kp_hyudoro; break; case KITEM_POGOSPRING: localpatch = kp_pogospring; break; @@ -4183,11 +4216,11 @@ static void K_drawKartPlayerCheck(void) INT32 i; UINT8 *colormap; INT32 x; - patch_t *localpatch; + UINT8 pnum = 0; INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM); - if (!(stplyr->mo)) + if (!stplyr->mo || stplyr->spectator) return; if (stplyr->awayviewtics) @@ -4200,27 +4233,18 @@ static void K_drawKartPlayerCheck(void) { if (&players[i] == stplyr) continue; - if (!(players[i].mo)) + if (!playeringame[i] || players[i].spectator) + continue; + if (!players[i].mo) continue; if ((players[i].kartstuff[k_invincibilitytimer] <= 0) && (leveltime & 2)) - { - if (players[i].kartstuff[k_itemtype] == KITEM_SIZEUP || players[i].kartstuff[k_growshrinktimer] > 0) - localpatch = kp_checksizeupw; - else if (players[i].kartstuff[k_itemtype] == KITEM_INVINCIBILITY || players[i].kartstuff[k_invincibilitytimer]) - localpatch = kp_checkinvulnw; - else - localpatch = kp_checkw; - } - else - { - if (players[i].kartstuff[k_itemtype] == KITEM_SIZEUP || players[i].kartstuff[k_growshrinktimer] > 0) - localpatch = kp_checksizeup; - else if (players[i].kartstuff[k_itemtype] == KITEM_INVINCIBILITY || players[i].kartstuff[k_invincibilitytimer]) - localpatch = kp_checkinvuln; - else - localpatch = kp_check; - } + pnum++; // white frames + + if (players[i].kartstuff[k_itemtype] == KITEM_GROW || players[i].kartstuff[k_growshrinktimer] > 0) + pnum += 4; + else if (players[i].kartstuff[k_itemtype] == KITEM_INVINCIBILITY || players[i].kartstuff[k_invincibilitytimer]) + pnum += 2; x = K_FindCheckX(stplyr->mo->x, stplyr->mo->y, stplyr->mo->angle, players[i].mo->x, players[i].mo->y); if (x <= 320 && x >= 0) @@ -4231,7 +4255,7 @@ static void K_drawKartPlayerCheck(void) x = 306; colormap = R_GetTranslationColormap(TC_DEFAULT, players[i].mo->color, 0); - V_DrawMappedPatch(x, CHEK_Y, V_HUDTRANS|splitflags, localpatch, colormap); + V_DrawMappedPatch(x, CHEK_Y, V_HUDTRANS|splitflags, kp_check[pnum], colormap); } } } diff --git a/src/k_kart.h b/src/k_kart.h index 22cdf4f5..5a86c0b6 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -29,6 +29,7 @@ void K_StealBalloon(player_t *player, player_t *victim, boolean force); void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source); void K_SpawnMineExplosion(mobj_t *source, UINT8 color); void K_SpawnDriftTrail(player_t *player); +void K_SpawnSparkleTrail(player_t *player); void K_DoSneaker(player_t *player, boolean doPFlag, boolean startboost); void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed); boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 21e6573a..3aeb3358 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -2090,6 +2090,16 @@ static int lib_kSpawnDriftTrail(lua_State *L) return 0; } +static int lib_kSpawnSparkleTrail(lua_State *L) +{ + player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); + NOHUD + if (!player) + return LUA_ErrInvalid(L, "player_t"); + K_SpawnDriftTrail(player); + return 0; +} + static int lib_kDoSneaker(lua_State *L) { player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); @@ -2336,6 +2346,7 @@ static luaL_Reg lib[] = { {"K_StealBalloon",lib_kStealBalloon}, {"K_SpawnKartExplosion",lib_kSpawnKartExplosion}, {"K_SpawnDriftTrail",lib_kSpawnDriftTrail}, + {"K_SpawnSparkleTrail",lib_kSpawnSparkleTrail}, {"K_DoSneaker",lib_kDoSneaker}, {"K_DoBouncePad",lib_kDoBouncePad}, {"K_MomentumToFacing",lib_kMomentumToFacing}, diff --git a/src/m_menu.c b/src/m_menu.c index 1fb5d7fe..626b380b 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1512,8 +1512,8 @@ static menuitem_t OP_MonitorToggleMenu[] = {IT_STRING | IT_CVAR, NULL, "Mines", &cv_mine, 98}, {IT_STRING | IT_CVAR, NULL, "Ballhogs", &cv_ballhog, 106}, {IT_STRING | IT_CVAR, NULL, "Self-Propelled Bombs",&cv_selfpropelledbomb,114}, - {IT_STRING | IT_CVAR, NULL, "Size Up", &cv_sizeup, 122}, - {IT_STRING | IT_CVAR, NULL, "Size Down", &cv_sizedown, 130}, + {IT_STRING | IT_CVAR, NULL, "Grow", &cv_grow, 122}, + {IT_STRING | IT_CVAR, NULL, "Shrink", &cv_shrink, 130}, {IT_STRING | IT_CVAR, NULL, "Lightning Shields", &cv_lightningshield, 138}, {IT_STRING | IT_CVAR, NULL, "Hyudoros", &cv_hyudoro, 146}, {IT_STRING | IT_CVAR, NULL, "Pogo Springs", &cv_pogospring, 154}, diff --git a/src/p_inter.c b/src/p_inter.c index 47031a6b..c3f155c5 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3138,7 +3138,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da player->mo->destscale = 6*FRACUNIT/8; player->kartstuff[k_growshrinktimer] -= (100+20*(16-(player->kartstuff[k_position]))); } - // Size Up? Let's take that away. + // Grow? Let's take that away. if (player->kartstuff[k_growshrinktimer] > 0) { player->kartstuff[k_growshrinktimer] = 2; diff --git a/src/p_mobj.c b/src/p_mobj.c index 526c3e75..41a91299 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6117,7 +6117,7 @@ static boolean P_AddShield(mobj_t *thing) } if (shield != SH_FORCE) - { // Regular shields check for themselves only + { // Regular shields check for themselves only if ((shieldtype_t)(thing->target->player->powers[pw_shield] & SH_NOSTACK) != shield) { P_RemoveMobj(thing); @@ -6154,6 +6154,7 @@ void P_RunOverlays(void) if (!mo->target) continue; + if (!splitscreen /*&& rendermode != render_soft*/) { angle_t viewingangle; @@ -6487,7 +6488,10 @@ void P_MobjThinker(mobj_t *mobj) // Don't touch my fuse! return; case MT_OVERLAY: - if (!mobj->target) + if ((!mobj->target) + || ((mobj->state == &states[S_INVULNFLASH1] || mobj->state == &states[S_INVULNFLASH2] // SRB2kart: BAD HACK X_X + || mobj->state == &states[S_INVULNFLASH3] || mobj->state == &states[S_INVULNFLASH4]) + && mobj->target->player && mobj->target->player->kartstuff[k_invincibilitytimer] == 0)) { P_RemoveMobj(mobj); return; @@ -6852,7 +6856,7 @@ void P_MobjThinker(mobj_t *mobj) switch(mobj->target->player->kartstuff[k_itemtype]) { case KITEM_KITCHENSINK: P_SetMobjState(mobj, S_PLAYERARROW_KITCHENSINK); break; - case KITEM_SIZEUP: P_SetMobjState(mobj, S_PLAYERARROW_SIZEUP); break; + case KITEM_GROW: P_SetMobjState(mobj, S_PLAYERARROW_GROW); break; case KITEM_INVINCIBILITY: P_SetMobjState(mobj, S_PLAYERARROW_INVINCIBILITY); break; case KITEM_ORBINAUT: P_SetMobjState(mobj, S_PLAYERARROW_ORBINAUT); break; case KITEM_BALLHOG: P_SetMobjState(mobj, S_PLAYERARROW_BALLHOG); break; @@ -6868,7 +6872,7 @@ void P_MobjThinker(mobj_t *mobj) } if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 && (leveltime & 1)) - P_SetMobjState(mobj, S_PLAYERARROW_SIZEUP); + P_SetMobjState(mobj, S_PLAYERARROW_GROW); else if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 && !(leveltime & 1)) P_SetMobjState(mobj, S_PLAYERARROW_EMPTY); // S_INVISIBLE @@ -8016,6 +8020,15 @@ void P_MobjThinker(mobj_t *mobj) mobj->tracer->y, mobj->tracer->floorz, SPLATDRAWMODE_SHADE); #endif break; + /*case MT_SPARKLETRAIL: + if (!mobj->target) + { + P_RemoveMobj(mobj); + return; + } + mobj->color = mobj->target->color; + mobj->colorized = mobj->target->colorized; + break;*/ case MT_SPINFIRE: case MT_SNEAKERTRAIL: if (mobj->eflags & MFE_VERTICALFLIP) diff --git a/src/p_user.c b/src/p_user.c index f22fad13..18832d6f 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1134,7 +1134,7 @@ void P_RestoreMusic(player_t *player) // SRB2kart - We have some different powers than vanilla, some of which tweak the music. if (!player->exiting) { - // Item - Size Up + // Item - Grow if (player->kartstuff[k_growshrinktimer] > 1) S_ChangeMusicInternal("mega", true); @@ -2268,12 +2268,12 @@ static void P_CheckInvincibilityTimer(player_t *player) //if (mariomode && !player->powers[pw_super]) // SRB2kart player->mo->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); - if (leveltime % (TICRATE/7) == 0) + /*if (leveltime % (TICRATE/7) == 0) { mobj_t *sparkle = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_IVSP); sparkle->destscale = player->mo->scale; P_SetScale(sparkle, player->mo->scale); - } + }*/ // Resume normal music stuff. if (player->powers[pw_invulnerability] == 1 || player->kartstuff[k_invincibilitytimer] == 1) @@ -7074,6 +7074,8 @@ static void P_MovePlayer(player_t *player) // SRB2kart - Drifting smoke and fire if ((player->kartstuff[k_drift] != 0 || player->kartstuff[k_sneakertimer] > 0) && onground && (leveltime & 1)) K_SpawnDriftTrail(player); + if (player->kartstuff[k_invincibilitytimer] > 0) + K_SpawnSparkleTrail(player); /* // SRB2kart - nadah // If the player isn't on the ground, make sure they aren't in a "starting dash" position. From 4348be7d80550a1523c2d36eb5136d1ea67dca61 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sat, 10 Feb 2018 16:01:09 -0500 Subject: [PATCH 05/14] Chaotix sound effects, new music names --- src/info.c | 8 ++--- src/k_kart.c | 92 +++++++++++++++++------------------------------ src/k_kart.h | 2 +- src/lua_baselib.c | 6 ++-- src/p_inter.c | 3 +- src/p_mobj.c | 6 ++-- src/p_spec.c | 2 +- src/p_user.c | 6 ++-- src/s_sound.c | 6 ---- src/sounds.c | 74 ++++++++++++++++++++++++++++++++++++-- src/sounds.h | 76 ++++++++++++++++++++++++++++++++++++--- 11 files changed, 194 insertions(+), 87 deletions(-) diff --git a/src/info.c b/src/info.c index 896cf61a..11e0e313 100644 --- a/src/info.c +++ b/src/info.c @@ -2604,10 +2604,10 @@ state_t states[NUMSTATES] = {SPR_KINV, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_KARTINVULN_LARGE5}, // S_KARTINVULN_LARGE4 {SPR_KINV, FF_FULLBRIGHT|7, 1, {NULL}, 0, 0, S_NULL}, // S_KARTINVULN_LARGE5 - {SPR_KINF, FF_FULLBRIGHT|FF_TRANS80, 1, {NULL}, 0, 0, S_INVULNFLASH2}, // S_INVULNFLASH1 - {SPR_NULL, FF_FULLBRIGHT|FF_TRANS80, 1, {NULL}, 0, 0, S_INVULNFLASH3}, // S_INVULNFLASH2 - {SPR_KINF, FF_FULLBRIGHT|FF_TRANS80|1, 1, {NULL}, 0, 0, S_INVULNFLASH4}, // S_INVULNFLASH3 - {SPR_NULL, FF_FULLBRIGHT|FF_TRANS80, 1, {NULL}, 0, 0, S_INVULNFLASH1}, // S_INVULNFLASH4 + {SPR_KINF, FF_FULLBRIGHT|FF_TRANS90, 1, {NULL}, 0, 0, S_INVULNFLASH2}, // S_INVULNFLASH1 + {SPR_NULL, FF_FULLBRIGHT|FF_TRANS90, 1, {NULL}, 0, 0, S_INVULNFLASH3}, // S_INVULNFLASH2 + {SPR_KINF, FF_FULLBRIGHT|FF_TRANS90|1, 1, {NULL}, 0, 0, S_INVULNFLASH4}, // S_INVULNFLASH3 + {SPR_NULL, FF_FULLBRIGHT|FF_TRANS90, 1, {NULL}, 0, 0, S_INVULNFLASH1}, // S_INVULNFLASH4 {SPR_FITM, 0, 3, {NULL}, 0, 0, S_FAKEITEM2}, // S_FAKEITEM1 {SPR_FITM, 1, 3, {NULL}, 0, 0, S_FAKEITEM3}, // S_FAKEITEM2 diff --git a/src/k_kart.c b/src/k_kart.c index 0cb88519..a0ae7c50 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1200,17 +1200,17 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) // Stopping of the horrible invincibility SFX if (player->mo->health <= 0 || player->mo->player->kartstuff[k_invincibilitytimer] <= 0 - || player->mo->player->kartstuff[k_growshrinktimer] > 0) // If you don't have invincibility (or mega is active too) + || player->mo->player->kartstuff[k_growshrinktimer] > 0) // If you don't have invincibility (or grow is active too) { - if (S_SoundPlaying(player->mo, sfx_star)) // But the sound is playing - S_StopSoundByID(player->mo, sfx_star); // Stop it + if (S_SoundPlaying(player->mo, sfx_kinvnc)) // But the sound is playing + S_StopSoundByID(player->mo, sfx_kinvnc); // Stop it } // And the same for the grow SFX if (!(player->mo->health > 0 && player->mo->player->kartstuff[k_growshrinktimer] > 0)) // If you aren't big { - if (S_SoundPlaying(player->mo, sfx_mega)) // But the sound is playing - S_StopSoundByID(player->mo, sfx_mega); // Stop it + if (S_SoundPlaying(player->mo, sfx_kgrow)) // But the sound is playing + S_StopSoundByID(player->mo, sfx_kgrow); // Stop it } // AAAAAAND handle the SMK star alarm @@ -1287,17 +1287,7 @@ static fixed_t K_GetKartBoostPower(player_t *player, boolean speed) && player->kartstuff[k_offroad] >= 0 && speed) boostpower = FixedDiv(boostpower, player->kartstuff[k_offroad] + FRACUNIT); - if (player->kartstuff[k_growshrinktimer] > 1 - && (player->kartstuff[k_growshrinktimer] > ((itemtime + TICRATE*2) - 25) - || player->kartstuff[k_growshrinktimer] <= 26)) - { // Grow - Mid-size - if (speed) - { - boostvalue = max(boostvalue, FRACUNIT/8); // + 12.5% - } - } - if (player->kartstuff[k_growshrinktimer] < ((itemtime + TICRATE*2) - 25) - && player->kartstuff[k_growshrinktimer] > 26) + if (player->kartstuff[k_growshrinktimer] > 0) { // Grow if (speed) { @@ -1990,12 +1980,11 @@ void K_SpawnSparkleTrail(player_t *player) P_SetMobjState(sparkle, S_KARTINVULN_LARGE1); P_SetTarget(&sparkle->target, player->mo); - //sparkle->fuse = 10; - sparkle->destscale = player->mo->scale; + sparkle->destscale = player->mo->destscale; P_SetScale(sparkle, player->mo->scale); sparkle->eflags = (sparkle->eflags & ~MFE_VERTICALFLIP)|(player->mo->eflags & MFE_VERTICALFLIP); sparkle->color = player->mo->color; - sparkle->colorized = player->mo->colorized; + //sparkle->colorized = player->mo->colorized; } } @@ -2011,17 +2000,17 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map if (!player) return NULL; - // Figure out projectile speed by CC + // Figure out projectile speed by game speed switch (gamespeed) { case 0: - PROJSPEED = 68*FRACUNIT; // Avg Speed is 34 + PROJSPEED = 68*(mapheaderinfo[gamemap-1]->mobj_scale); // Avg Speed is 34 break; case 2: - PROJSPEED = 96*FRACUNIT; // Avg Speed is 48 + PROJSPEED = 96*(mapheaderinfo[gamemap-1]->mobj_scale); // Avg Speed is 48 break; default: - PROJSPEED = 82*FRACUNIT; // Avg Speed is 41 + PROJSPEED = 82*(mapheaderinfo[gamemap-1]->mobj_scale); // Avg Speed is 41 break; } @@ -2254,15 +2243,16 @@ static void K_DoShrink(player_t *player, boolean spb) { mobj_t *mo; thinker_t *think; - INT32 i; - S_StartSound(player->mo, sfx_bkpoof); // Sound the BANG! + //INT32 i; + + //S_StartSound(player->mo, sfx_bkpoof); // Sound the BANG! player->pflags |= PF_ATTACKDOWN; - for (i = 0; i < MAXPLAYERS; i++) + /*for (i = 0; i < MAXPLAYERS; i++) { if (playeringame[i]) P_FlashPal(&players[i], PAL_NUKE, 10); - } + }*/ for (think = thinkercap.next; think != &thinkercap; think = think->next) { @@ -2272,7 +2262,7 @@ static void K_DoShrink(player_t *player, boolean spb) mo = (mobj_t *)think; if (mo->player && !mo->player->spectator - && mo->player->kartstuff[k_position] > player->kartstuff[k_position]) + && mo->player->kartstuff[k_position] < player->kartstuff[k_position]) P_DamageMobj(mo, player->mo, player->mo, spb ? 65 : 64); else continue; @@ -2285,7 +2275,7 @@ static void K_DoShrink(player_t *player, boolean spb) player->kartstuff[k_sounds] = 50; } -void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed) +void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed) { if (mo->player && mo->player->spectator) return; @@ -2332,7 +2322,7 @@ void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed) else mo->momz = FixedMul(vertispeed, mo->scale); - S_StartSound(mo, sfx_boing); + S_StartSound(mo, sfx_kc2f); } // Returns false if this player being placed here causes them to collide with any other player @@ -2753,14 +2743,16 @@ void K_MoveKartPlayer(player_t *player, boolean onground) if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) // Doesn't hold your item slot hostage normally, so you're free to waste it if you have multiple { if (P_IsLocalPlayer(player) && !player->exiting) - S_ChangeMusicInternal("minvnc", true); + S_ChangeMusicInternal("kinvnc", true); if (!cv_kartstarsfx.value && !P_IsLocalPlayer(player)) - S_StartSound(player->mo, sfx_star); + S_StartSound(player->mo, sfx_kinvnc); if (!player->kartstuff[k_invincibilitytimer]) { mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_OVERLAY); P_SetTarget(&overlay->target, player->mo); P_SetMobjState(overlay, S_INVULNFLASH1); + overlay->destscale = player->mo->scale; + P_SetScale(overlay, player->mo->scale); } player->kartstuff[k_invincibilitytimer] = itemtime; // Activate it K_PlayTauntSound(player->mo); @@ -3044,12 +3036,13 @@ void K_MoveKartPlayer(player_t *player, boolean onground) && player->kartstuff[k_growshrinktimer] <= 0) // Grow holds the item box hostage { if (P_IsLocalPlayer(player) && !player->exiting) - S_ChangeMusicInternal("mega", true); + S_ChangeMusicInternal("kgrow", true); if (!cv_kartstarsfx.value && !P_IsLocalPlayer(player)) - S_StartSound(player->mo, sfx_mega); + S_StartSound(player->mo, sfx_kgrow); K_PlayTauntSound(player->mo); - player->kartstuff[k_growshrinktimer] = itemtime + TICRATE*2; - S_StartSound(player->mo, sfx_mario3); + player->mo->destscale = 3*(mapheaderinfo[gamemap-1]->mobj_scale)/2; + player->kartstuff[k_growshrinktimer] = itemtime; + S_StartSound(player->mo, sfx_kc5a); player->pflags |= PF_ATTACKDOWN; player->kartstuff[k_itemamount]--; if (gametype != GT_RACE) @@ -3084,7 +3077,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) && !player->kartstuff[k_pogospring]) { K_PlayTauntSound(player->mo); - K_DoBouncePad(player->mo, 32<mo, 32<pflags |= PF_ATTACKDOWN; player->kartstuff[k_pogospring] = 1; @@ -3118,28 +3111,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground) player->kartstuff[k_boosting] = 0; // Grow - Make the player grow! - if (player->kartstuff[k_growshrinktimer] > ((itemtime + TICRATE*2) - 25)) - { - if (leveltime & 2) - player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale)*3/2; - else - player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale); - } - else if (player->kartstuff[k_growshrinktimer] > 26 - && player->kartstuff[k_growshrinktimer] <= ((itemtime + TICRATE*2) - 25)) - player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale)*3/2; - // Grow - Back to normal... - else if (player->kartstuff[k_growshrinktimer] > 1 - && player->kartstuff[k_growshrinktimer] <= 26) - { - if (leveltime & 2) - player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale); - else - player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale)*3/2; - } - if (player->kartstuff[k_growshrinktimer] == 26) - S_StartSound(player->mo, sfx_mario8); - + /*if (player->kartstuff[k_growshrinktimer] > 1) + player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale)*3/2;*/ + if ((gametype != GT_RACE) && (player->kartstuff[k_itemtype] == KITEM_INVINCIBILITY || player->kartstuff[k_itemtype] == KITEM_GROW diff --git a/src/k_kart.h b/src/k_kart.h index 5a86c0b6..fad11a2c 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -31,7 +31,7 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color); void K_SpawnDriftTrail(player_t *player); void K_SpawnSparkleTrail(player_t *player); void K_DoSneaker(player_t *player, boolean doPFlag, boolean startboost); -void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed); +void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed); boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y); INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue); void K_MomentumToFacing(player_t *player); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 3aeb3358..76ebb551 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -2112,14 +2112,14 @@ static int lib_kDoSneaker(lua_State *L) return 0; } -static int lib_kDoBouncePad(lua_State *L) +static int lib_kDoPogoSpring(lua_State *L) { mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); fixed_t vertispeed = luaL_checkfixed(L, 2); NOHUD if (!mo) return LUA_ErrInvalid(L, "mobj_t"); - K_DoBouncePad(mo, vertispeed); + K_DoPogoSpring(mo, vertispeed); return 0; } @@ -2348,7 +2348,7 @@ static luaL_Reg lib[] = { {"K_SpawnDriftTrail",lib_kSpawnDriftTrail}, {"K_SpawnSparkleTrail",lib_kSpawnSparkleTrail}, {"K_DoSneaker",lib_kDoSneaker}, - {"K_DoBouncePad",lib_kDoBouncePad}, + {"K_DoPogoSpring",lib_kDoPogoSpring}, {"K_MomentumToFacing",lib_kMomentumToFacing}, {"K_GetKartSpeed",lib_kGetKartSpeed}, {"K_GetKartAccel",lib_kGetKartAccel}, diff --git a/src/p_inter.c b/src/p_inter.c index c3f155c5..ca7003ac 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3135,7 +3135,8 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da K_SpinPlayer(player, source); // Start shrinking! - player->mo->destscale = 6*FRACUNIT/8; + S_StartSound(player->mo, sfx_kc59); + player->mo->destscale = 6*(mapheaderinfo[gamemap-1]->mobj_scale)/8; player->kartstuff[k_growshrinktimer] -= (100+20*(16-(player->kartstuff[k_position]))); } // Grow? Let's take that away. diff --git a/src/p_mobj.c b/src/p_mobj.c index 41a91299..8cd50205 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7790,7 +7790,7 @@ void P_MobjThinker(mobj_t *mobj) if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1) || (P_IsObjectOnRealGround(mobj, mobj->subsector->sector) && GETSECSPECIAL(mobj->subsector->sector->special, 3) == 1)) - K_DoBouncePad(mobj, 0); + K_DoPogoSpring(mobj, 0); if (mobj->threshold > 0) mobj->threshold--; @@ -7852,7 +7852,7 @@ void P_MobjThinker(mobj_t *mobj) if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1) || (P_IsObjectOnRealGround(mobj, mobj->subsector->sector) && GETSECSPECIAL(mobj->subsector->sector->special, 3) == 1)) - K_DoBouncePad(mobj, 0); + K_DoPogoSpring(mobj, 0); break; } @@ -7868,7 +7868,7 @@ void P_MobjThinker(mobj_t *mobj) if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1) || (P_IsObjectOnRealGround(mobj, mobj->subsector->sector) && GETSECSPECIAL(mobj->subsector->sector->special, 3) == 1)) - K_DoBouncePad(mobj, 0); + K_DoPogoSpring(mobj, 0); if (mobj->threshold > 0) mobj->threshold--; diff --git a/src/p_spec.c b/src/p_spec.c index 56a1d9bf..592e9b79 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -3753,7 +3753,7 @@ DoneSection2: P_InstaThrust(player->mo, player->mo->angle, FixedMul(K_GetKartSpeed(player, true)/4, player->mo->scale)); player->kartstuff[k_pogospring] = 1; - K_DoBouncePad(player->mo, 0); + K_DoPogoSpring(player->mo, 0); } break; diff --git a/src/p_user.c b/src/p_user.c index 18832d6f..1aa60f33 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1136,11 +1136,11 @@ void P_RestoreMusic(player_t *player) { // Item - Grow if (player->kartstuff[k_growshrinktimer] > 1) - S_ChangeMusicInternal("mega", true); + S_ChangeMusicInternal("kgrow", true); // Item - Star else if (player->kartstuff[k_invincibilitytimer] > 1) - S_ChangeMusicInternal("minvnc", false); + S_ChangeMusicInternal("kinvnc", false); // Event - Final Lap else if (player->laps == (UINT8)(cv_numlaps.value - 1)) @@ -9660,7 +9660,7 @@ void P_PlayerThink(player_t *player) // Flash player after being hit. if (!(player->pflags & PF_NIGHTSMODE)) { - // SRB2kart - fixes boo not flashing when it should. Mega doesn't flash either. Flashing is local. + // SRB2kart - fixes boo not flashing when it should. Grow doesn't flash either. Flashing is local. if ((player == &players[displayplayer] || (splitscreen && player == &players[secondarydisplayplayer]) || (splitscreen > 1 && player == &players[thirddisplayplayer]) diff --git a/src/s_sound.c b/src/s_sound.c index e63aca15..27a54d2a 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -1464,12 +1464,6 @@ const char *compat_special_music_slots[21] = "credit", // 1048 credits "racent", // 1049 Race Results "stjr", // 1050 Sonic Team Jr. Presents - // SRB2kart 040217 - "finlap", // 1051 Sonic Team Jr. Presents - "karwin", // 1052 Sonic Team Jr. Presents - "karok", // 1053 Sonic Team Jr. Presents - "karlos", // 1054 Sonic Team Jr. Presents - "mega", // 1055 Sonic Team Jr. Presents "" }; #endif diff --git a/src/sounds.c b/src/sounds.c index 22f966ee..a0cb10e8 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -476,8 +476,8 @@ sfxinfo_t S_sfx[NUMSFX] = {"mlap", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"sboost", true, 90, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"mush", false, 90, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"star", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mega", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kinvnc", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kgrow", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, {"bomb", false, 110, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"bomb2", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, {"peel", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, @@ -505,6 +505,76 @@ sfxinfo_t S_sfx[NUMSFX] = {"boing", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"smkinv", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + // Knuckles Chaotix sounds + {"kc2a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Pogo Spring + {"kc30", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc31", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc32", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc33", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc34", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc35", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc36", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc37", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc38", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc39", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc40", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc41", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc42", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc43", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc44", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc52", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc53", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc54", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc55", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc56", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc57", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc58", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc59", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Shrink + {"kc5a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Grow + {"kc5b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc60", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc61", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc62", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc64", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc65", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc68", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc69", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // SRB2kart - Skin sounds {"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR}, {"klose", false, 64, 0, -1, NULL, 0, SKSLOSE, -1, LUMPERROR}, diff --git a/src/sounds.h b/src/sounds.h index 9ffc3a87..c893c533 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -548,8 +548,8 @@ typedef enum sfx_mlap, sfx_sboost, sfx_mush, - sfx_star, - sfx_mega, + sfx_kinvnc, + sfx_kgrow, sfx_bomb, sfx_bomb2, sfx_peel, @@ -577,11 +577,79 @@ typedef enum sfx_boing, sfx_smkinv, + // KC sounds + sfx_kc2a, + sfx_kc2b, + sfx_kc2c, + sfx_kc2d, + sfx_kc2e, + sfx_kc2f, + sfx_kc30, + sfx_kc31, + sfx_kc32, + sfx_kc33, + sfx_kc34, + sfx_kc35, + sfx_kc36, + sfx_kc37, + sfx_kc38, + sfx_kc39, + sfx_kc3a, + sfx_kc3b, + sfx_kc3c, + sfx_kc3d, + sfx_kc3e, + sfx_kc3f, + sfx_kc40, + sfx_kc41, + sfx_kc42, + sfx_kc43, + sfx_kc44, + sfx_kc45, + sfx_kc46, + sfx_kc47, + sfx_kc48, + sfx_kc49, + sfx_kc4a, + sfx_kc4b, + sfx_kc4c, + sfx_kc4d, + sfx_kc4e, + sfx_kc4f, + sfx_kc50, + sfx_kc51, + sfx_kc52, + sfx_kc53, + sfx_kc54, + sfx_kc55, + sfx_kc56, + sfx_kc57, + sfx_kc58, + sfx_kc59, + sfx_kc5a, + sfx_kc5b, + sfx_kc5c, + sfx_kc5d, + sfx_kc5e, + sfx_kc5f, + sfx_kc60, + sfx_kc61, + sfx_kc62, + sfx_kc63, + sfx_kc64, + sfx_kc65, + sfx_kc66, + sfx_kc67, + sfx_kc68, + sfx_kc69, + sfx_kc6b, + sfx_kc6c, + sfx_kc6d, + sfx_kc6e, + sfx_kwin, sfx_klose, sfx_slow, - // - sfx_taunt1, sfx_taunt2, sfx_taunt3, From dbc664d4e778b7ca68c4e768f5d9c9e20661f57c Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sat, 10 Feb 2018 16:19:22 -0500 Subject: [PATCH 06/14] Minor fixes, mostly mobjscale and spectators --- src/g_game.c | 2 +- src/k_kart.c | 4 ++-- src/p_user.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index 1e6dde37..6ace117e 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2491,7 +2491,7 @@ void G_PlayerReborn(INT32 player) } } - if (leveltime > 157) + if (leveltime > 157 && !p->spectator) p->kartstuff[k_lakitu] = 48; // Lakitu Spawner if (gametype == GT_COOP) diff --git a/src/k_kart.c b/src/k_kart.c index a0ae7c50..d7084ec2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -946,9 +946,9 @@ void K_LakituChecker(player_t *player) newx = player->mo->x + P_ReturnThrustX(player->mo, newangle, 0); newy = player->mo->y + P_ReturnThrustY(player->mo, newangle, 0); if (player->mo->eflags & MFE_VERTICALFLIP) - newz = player->mo->z - 128*FRACUNIT; + newz = player->mo->z - 128*(mapheaderinfo[gamemap-1]->mobj_scale); else - newz = player->mo->z + 64*FRACUNIT; + newz = player->mo->z + 64*(mapheaderinfo[gamemap-1]->mobj_scale); mo = P_SpawnMobj(newx, newy, newz, MT_LAKITU); if (mo) { diff --git a/src/p_user.c b/src/p_user.c index 1aa60f33..3849a6cd 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -9257,7 +9257,7 @@ void P_PlayerThink(player_t *player) // Check if all the players in the race have finished. If so, end the level. for (i = 0; i < MAXPLAYERS; i++) { - if (playeringame[i]) + if (playeringame[i] && !players[i].spectator) { if (!players[i].exiting && players[i].lives > 0) break; @@ -9279,7 +9279,7 @@ void P_PlayerThink(player_t *player) // If you've hit the countdown and you haven't made // it to the exit, you're a goner! else */ - if (countdown == 1 && !player->exiting && player->lives > 0) + if (countdown == 1 && !player->exiting && !player->spectator && player->lives > 0) { if (netgame && player->health > 0) CONS_Printf(M_GetText("%s ran out of time.\n"), player_names[player-players]); From b93ec25c83d8f156bb2710643c3a7b8201280d53 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sun, 11 Feb 2018 12:50:42 -0500 Subject: [PATCH 07/14] Fuck this weird tabbing --- src/sounds.c | 1078 +++++++++++++++++++++++++------------------------- 1 file changed, 539 insertions(+), 539 deletions(-) diff --git a/src/sounds.c b/src/sounds.c index 5c029f89..7b5c9ced 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -31,562 +31,562 @@ sfxinfo_t S_sfx[NUMSFX] = Legacy doesn't use the PITCH variable, so now it is used for various flags. See soundflags_t. *****/ - // S_sfx[0] needs to be a dummy for odd reasons. (don't modify this comment) -// name, singularity, priority, pitch, volume, data, length, skinsound, usefulness, lumpnum - {"none" , false, 0, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // S_sfx[0] needs to be a dummy for odd reasons. (don't modify this comment) + // name, singularity, priority, pitch, volume, data, length, skinsound, usefulness, lumpnum + {"none" , false, 0, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - // Skin Sounds - {"altdi1", false, 192, 16, -1, NULL, 0, SKSPLDET1, -1, LUMPERROR}, - {"altdi2", false, 192, 16, -1, NULL, 0, SKSPLDET2, -1, LUMPERROR}, - {"altdi3", false, 192, 16, -1, NULL, 0, SKSPLDET3, -1, LUMPERROR}, - {"altdi4", false, 192, 16, -1, NULL, 0, SKSPLDET4, -1, LUMPERROR}, - {"altow1", false, 192, 16, -1, NULL, 0, SKSPLPAN1, -1, LUMPERROR}, - {"altow2", false, 192, 16, -1, NULL, 0, SKSPLPAN2, -1, LUMPERROR}, - {"altow3", false, 192, 16, -1, NULL, 0, SKSPLPAN3, -1, LUMPERROR}, - {"altow4", false, 192, 16, -1, NULL, 0, SKSPLPAN4, -1, LUMPERROR}, - {"victr1", false, 64, 16, -1, NULL, 0, SKSPLVCT1, -1, LUMPERROR}, - {"victr2", false, 64, 16, -1, NULL, 0, SKSPLVCT2, -1, LUMPERROR}, - {"victr3", false, 64, 16, -1, NULL, 0, SKSPLVCT3, -1, LUMPERROR}, - {"victr4", false, 64, 16, -1, NULL, 0, SKSPLVCT4, -1, LUMPERROR}, - {"gasp" , false, 64, 0, -1, NULL, 0, SKSGASP, -1, LUMPERROR}, - {"jump" , false, 140, 0, -1, NULL, 0, SKSJUMP, -1, LUMPERROR}, - {"pudpud", false, 64, 0, -1, NULL, 0, SKSPUDPUD, -1, LUMPERROR}, - {"putput", false, 64, 0, -1, NULL, 0, SKSPUTPUT, -1, LUMPERROR}, // not as high a priority - {"spin" , false, 100, 0, -1, NULL, 0, SKSSPIN, -1, LUMPERROR}, - {"spndsh", false, 64, 1, -1, NULL, 0, SKSSPNDSH, -1, LUMPERROR}, - {"thok" , false, 96, 0, -1, NULL, 0, SKSTHOK, -1, LUMPERROR}, - {"zoom" , false, 120, 1, -1, NULL, 0, SKSZOOM, -1, LUMPERROR}, - {"skid", false, 64, 32, -1, NULL, 0, SKSSKID, -1, LUMPERROR}, + // Skin Sounds + {"altdi1", false, 192, 16, -1, NULL, 0, SKSPLDET1, -1, LUMPERROR}, + {"altdi2", false, 192, 16, -1, NULL, 0, SKSPLDET2, -1, LUMPERROR}, + {"altdi3", false, 192, 16, -1, NULL, 0, SKSPLDET3, -1, LUMPERROR}, + {"altdi4", false, 192, 16, -1, NULL, 0, SKSPLDET4, -1, LUMPERROR}, + {"altow1", false, 192, 16, -1, NULL, 0, SKSPLPAN1, -1, LUMPERROR}, + {"altow2", false, 192, 16, -1, NULL, 0, SKSPLPAN2, -1, LUMPERROR}, + {"altow3", false, 192, 16, -1, NULL, 0, SKSPLPAN3, -1, LUMPERROR}, + {"altow4", false, 192, 16, -1, NULL, 0, SKSPLPAN4, -1, LUMPERROR}, + {"victr1", false, 64, 16, -1, NULL, 0, SKSPLVCT1, -1, LUMPERROR}, + {"victr2", false, 64, 16, -1, NULL, 0, SKSPLVCT2, -1, LUMPERROR}, + {"victr3", false, 64, 16, -1, NULL, 0, SKSPLVCT3, -1, LUMPERROR}, + {"victr4", false, 64, 16, -1, NULL, 0, SKSPLVCT4, -1, LUMPERROR}, + {"gasp" , false, 64, 0, -1, NULL, 0, SKSGASP, -1, LUMPERROR}, + {"jump" , false, 140, 0, -1, NULL, 0, SKSJUMP, -1, LUMPERROR}, + {"pudpud", false, 64, 0, -1, NULL, 0, SKSPUDPUD, -1, LUMPERROR}, + {"putput", false, 64, 0, -1, NULL, 0, SKSPUTPUT, -1, LUMPERROR}, // not as high a priority + {"spin" , false, 100, 0, -1, NULL, 0, SKSSPIN, -1, LUMPERROR}, + {"spndsh", false, 64, 1, -1, NULL, 0, SKSSPNDSH, -1, LUMPERROR}, + {"thok" , false, 96, 0, -1, NULL, 0, SKSTHOK, -1, LUMPERROR}, + {"zoom" , false, 120, 1, -1, NULL, 0, SKSZOOM, -1, LUMPERROR}, + {"skid", false, 64, 32, -1, NULL, 0, SKSSKID, -1, LUMPERROR}, - // Ambience/background objects/etc - {"ambint", true, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // Ambience/background objects/etc + {"ambint", true, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"alarm", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"buzz1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"buzz2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"buzz3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"buzz4", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"crumbl", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Platform Crumble Tails 03-16-2001 - {"fire", false, 8, 32, -1, NULL, 0, -1, -1, LUMPERROR}, - {"grind", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"laser", true, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mswing", false, 16, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"pstart", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"pstop", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"steam1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 06-19-2001 - {"steam2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 06-19-2001 - {"wbreak", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"alarm", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"buzz1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"buzz2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"buzz3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"buzz4", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"crumbl", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Platform Crumble Tails 03-16-2001 + {"fire", false, 8, 32, -1, NULL, 0, -1, -1, LUMPERROR}, + {"grind", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"laser", true, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mswing", false, 16, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"pstart", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"pstop", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"steam1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 06-19-2001 + {"steam2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 06-19-2001 + {"wbreak", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rainin", true, 24, 4, -1, NULL, 0, -1, -1, LUMPERROR}, - {"litng1", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"litng2", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"litng3", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"litng4", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"athun1", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"athun2", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rainin", true, 24, 4, -1, NULL, 0, -1, -1, LUMPERROR}, + {"litng1", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"litng2", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"litng3", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"litng4", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"athun1", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"athun2", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr1", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr2", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr3", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr4", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr5", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr6", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr7", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr8", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bubbl1", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bubbl2", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bubbl3", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bubbl4", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bubbl5", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"floush", false, 16, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"splash", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"splish", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Splish Tails 12-08-2000 - {"wdrip1", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip2", false, 8 , 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip3", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip4", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip5", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip6", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip7", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip8", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wslap", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Water Slap Tails 12-13-2000 + {"amwtr1", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr2", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr3", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr4", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr5", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr6", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr7", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr8", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bubbl1", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bubbl2", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bubbl3", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bubbl4", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bubbl5", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"floush", false, 16, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"splash", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"splish", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Splish Tails 12-08-2000 + {"wdrip1", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip2", false, 8 , 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip3", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip4", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip5", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip6", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip7", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip8", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wslap", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Water Slap Tails 12-13-2000 - {"doora1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"doorb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"doorc1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"doorc2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"doord1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"doord2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"eleva1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"eleva2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"eleva3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"elevb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"elevb2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"elevb3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doora1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doorb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doorc1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doorc2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doord1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doord2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"eleva1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"eleva2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"eleva3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"elevb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"elevb2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"elevb3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ambin2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"lavbub", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rocks1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rocks2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rocks3", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rocks4", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rumbam", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rumble", false, 64, 24, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ambin2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"lavbub", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rocks1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rocks2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rocks3", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rocks4", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rumbam", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rumble", false, 64, 24, -1, NULL, 0, -1, -1, LUMPERROR}, - // Game objects, etc - {"appear", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bkpoof", false, 70, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bnce1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Boing! - {"bnce2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Boing! - {"cannon", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"cgot" , true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Got Emerald! Tails 09-02-2001 - {"cybdth", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"deton", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ding", false, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"dmpain", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"drown", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"fizzle", false, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"gbeep", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Grenade beep - {"gclose", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ghit" , false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"gloop", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"gspray", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"gravch", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"itemup", true, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"jet", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"jshard", true, 167, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"lose" , false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"lvpass", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mindig", false, 8, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mixup", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"pogo" , false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"pop" , false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rail1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rail2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rlaunc", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"shield", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"shldls", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"spdpad", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"spkdth", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"spring", false, 112, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"statu1", true, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"statu2", true, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"strpst", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Starpost Sound Tails 07-04-2002 - {"supert", true, 127, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"telept", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"tink" , false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"token" , true, 224, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // SS token - {"trfire", true, 60, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"trpowr", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"turhit", false, 40, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdjump", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mswarp", false, 60, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mspogo", false, 60, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + // Game objects, etc + {"appear", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bkpoof", false, 70, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bnce1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Boing! + {"bnce2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Boing! + {"cannon", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"cgot" , true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Got Emerald! Tails 09-02-2001 + {"cybdth", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"deton", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ding", false, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"dmpain", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"drown", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"fizzle", false, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"gbeep", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Grenade beep + {"gclose", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ghit" , false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"gloop", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"gspray", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"gravch", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"itemup", true, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"jet", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"jshard", true, 167, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"lose" , false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"lvpass", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mindig", false, 8, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mixup", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"pogo" , false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"pop" , false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rail1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rail2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rlaunc", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"shield", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"shldls", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"spdpad", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"spkdth", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"spring", false, 112, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"statu1", true, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"statu2", true, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"strpst", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Starpost Sound Tails 07-04-2002 + {"supert", true, 127, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"telept", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"tink" , false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"token" , true, 224, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // SS token + {"trfire", true, 60, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"trpowr", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"turhit", false, 40, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdjump", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mswarp", false, 60, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mspogo", false, 60, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - // Menu, interface - {"chchng", false, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"dwnind", false, 212, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"emfind", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"flgcap", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"menu1", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"oneup", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ptally", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Point tally is identical to menu for now - {"radio", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wepchg", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Weapon switch is identical to menu for now - {"wtrdng", true, 212, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // make sure you can hear the DING DING! Tails 03-08-2000 - {"zelda", false, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // Menu, interface + {"chchng", false, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"dwnind", false, 212, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"emfind", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"flgcap", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"menu1", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"oneup", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ptally", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Point tally is identical to menu for now + {"radio", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wepchg", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Weapon switch is identical to menu for now + {"wtrdng", true, 212, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // make sure you can hear the DING DING! Tails 03-08-2000 + {"zelda", false, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - // NiGHTS - {"ideya", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"xideya", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas - {"nbmper", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"nxbump", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas - {"ncitem", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"nxitem", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas - {"ngdone", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"nxdone", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas - {"drill1", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"drill2", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ncspec", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 12-15-2003 - {"nghurt", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ngskid", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"hoop1", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"hoop2", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"hoop3", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"hidden", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"prloop", false, 104, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"timeup", true, 256, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // NiGHTS + {"ideya", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"xideya", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas + {"nbmper", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"nxbump", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas + {"ncitem", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"nxitem", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas + {"ngdone", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"nxdone", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas + {"drill1", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"drill2", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ncspec", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 12-15-2003 + {"nghurt", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ngskid", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"hoop1", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"hoop2", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"hoop3", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"hidden", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"prloop", false, 104, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"timeup", true, 256, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - // Mario - {"koopfr" , true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario1", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario2", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario3", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario4", true, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario5", false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario6", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario7", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario8", false, 48, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario9", true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"marioa", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"thwomp", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + // Mario + {"koopfr" , true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario1", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario2", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario3", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario4", true, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario5", false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario6", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario7", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario8", false, 48, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario9", true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"marioa", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"thwomp", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - // Black Eggman - {"bebomb", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bechrg", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"becrsh", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bedeen", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bedie1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bedie2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"beeyow", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"befall", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"befire", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"beflap", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"begoop", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"begrnd", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"behurt", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bejet1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"belnch", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"beoutb", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"beragh", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"beshot", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bestep", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bestp2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bewar1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bewar2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bewar3", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bewar4", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bexpld", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bgxpld", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + // Black Eggman + {"bebomb", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bechrg", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"becrsh", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bedeen", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bedie1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bedie2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"beeyow", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"befall", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"befire", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"beflap", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"begoop", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"begrnd", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"behurt", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bejet1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"belnch", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"beoutb", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"beragh", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"beshot", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bestep", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bestp2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bewar1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bewar2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bewar3", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bewar4", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bexpld", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bgxpld", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - // Cybrakdemon - {"beelec", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"brakrl", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"brakrx", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + // Cybrakdemon + {"beelec", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"brakrl", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"brakrx", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - // S3&K sounds - {"s3k33", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k34", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k35", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k36", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k37", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k38", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k39", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k40", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k41", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k42", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k43", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k44", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k52", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k53", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k54", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, // MetalSonic shot fire - {"s3k55", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k56", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k57", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k58", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k59", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k60", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k61", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k62", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k64", false, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k65", false, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Blue Spheres - {"s3k66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k68", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k69", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k70", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k71", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k72", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k73", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k74", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k75", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k76", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k77", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k78", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k79", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k80", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k81", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k82", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k83", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k84", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k85", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k86", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k87", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k88", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k89", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k90", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k91", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k92", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k93", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k94", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k95", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k96", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k97", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k98", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k99", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka0", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka4", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka5", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka6", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka8", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka9", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kaa", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kab", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kac", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kad", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kae", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kaf", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb0", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb4", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb5", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb6", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb8", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb9", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kba", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbb", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbcs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbcl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbdl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbes", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbel", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbfs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbfl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc0s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc0l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc1s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc1l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc2s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc2l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc3s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc5l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc6s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc6l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc8s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc8l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc9s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc9l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcas", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kccs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kccl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcdl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kces", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcel", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcfs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcfl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd0s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd0l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd1s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd1l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd2s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd2l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd3s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd5l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd6s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd6l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd7s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd7l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd8s", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, // Sharp Spin (maybe use the long/L version?) - {"s3kd8l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd9s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd9l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kdas", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kdal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kdbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kdbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // S3&K sounds + {"s3k33", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k34", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k35", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k36", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k37", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k38", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k39", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k40", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k41", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k42", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k43", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k44", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k52", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k53", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k54", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, // MetalSonic shot fire + {"s3k55", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k56", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k57", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k58", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k59", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k60", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k61", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k62", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k64", false, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k65", false, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Blue Spheres + {"s3k66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k68", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k69", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k70", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k71", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k72", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k73", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k74", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k75", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k76", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k77", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k78", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k79", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k80", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k81", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k82", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k83", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k84", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k85", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k86", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k87", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k88", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k89", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k90", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k91", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k92", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k93", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k94", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k95", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k96", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k97", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k98", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k99", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka0", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka4", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka5", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka6", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka8", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka9", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kaa", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kab", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kac", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kad", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kae", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kaf", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb0", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb4", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb5", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb6", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb8", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb9", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kba", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbb", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbcs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbcl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbdl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbes", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbel", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbfs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbfl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc0s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc0l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc1s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc1l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc2s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc2l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc3s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc5l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc6s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc6l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc8s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc8l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc9s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc9l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcas", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kccs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kccl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcdl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kces", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcel", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcfs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcfl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd0s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd0l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd1s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd1l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd2s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd2l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd3s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd5l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd6s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd6l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd7s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd7l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd8s", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, // Sharp Spin (maybe use the long/L version?) + {"s3kd8l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd9s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd9l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kdas", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kdal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kdbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kdbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - // SRB2kart - {"lkt1", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"lkt2", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"lkt3", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kart1", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kart2", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kart3", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mlap", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"sboost", true, 90, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mush", false, 90, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kinvnc", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kgrow", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bomb", false, 110, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bomb2", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"peel", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"slip", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"fake", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"grnshl", false, 120, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"redshl", false, 130, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"shbrk", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkdrft", false, 52, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkslid", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitem", false, 80, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm1", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm2", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm3", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm4", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm5", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm6", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm7", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm8", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitmF", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"clash", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"tossed", false, 150, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"shelit", false, 64, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"vroom", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"boing", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"smkinv", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + // SRB2kart + {"lkt1", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"lkt2", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"lkt3", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kart1", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kart2", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kart3", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mlap", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"sboost", true, 90, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mush", false, 90, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kinvnc", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kgrow", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bomb", false, 110, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bomb2", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"peel", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"slip", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"fake", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"grnshl", false, 120, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"redshl", false, 130, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"shbrk", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkdrft", false, 52, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkslid", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitem", false, 80, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm1", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm2", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm3", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm4", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm5", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm6", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm7", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm8", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitmF", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"clash", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"tossed", false, 150, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"shelit", false, 64, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"vroom", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"boing", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"smkinv", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - // Knuckles Chaotix sounds - {"kc2a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc2b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc2c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc2d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc2e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc2f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Pogo Spring - {"kc30", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc31", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc32", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc33", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc34", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc35", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc36", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc37", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc38", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc39", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Voting beep - {"kc3a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc3b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc3c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc3d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc3e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc3f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc40", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc41", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc42", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc43", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc44", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Voting pick - {"kc49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc52", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc53", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc54", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc55", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc56", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc57", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc58", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc59", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Shrink - {"kc5a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Grow - {"kc5b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc5c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc5e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc5f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc60", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc61", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc62", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc64", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc65", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc68", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc69", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc6b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc6c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc6d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc6e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // Knuckles Chaotix sounds + {"kc2a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Pogo Spring + {"kc30", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc31", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc32", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc33", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc34", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc35", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc36", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc37", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc38", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc39", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Voting beep + {"kc3a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc40", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc41", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc42", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc43", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc44", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Voting pick + {"kc49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc52", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc53", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc54", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc55", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc56", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc57", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc58", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc59", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Shrink + {"kc5a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Grow + {"kc5b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc60", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc61", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc62", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc64", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc65", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc68", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc69", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + { + // SRB2kart - Skin sounds + {"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR}, + {"klose", false, 64, 0, -1, NULL, 0, SKSLOSE, -1, LUMPERROR}, + {"slow", false, 128, 32, -1, NULL, 0, SKSSLOW, -1, LUMPERROR}, + {"taunt1", false, 64, 96, -1, NULL, 0, SKSPLTNT1, -1, LUMPERROR}, + {"taunt2", false, 64, 96, -1, NULL, 0, SKSPLTNT2, -1, LUMPERROR}, + {"taunt3", false, 64, 96, -1, NULL, 0, SKSPLTNT3, -1, LUMPERROR}, + {"taunt4", false, 64, 96, -1, NULL, 0, SKSPLTNT4, -1, LUMPERROR}, + {"hitem", false, 64, 32, -1, NULL, 0, SKSHITEM, -1, LUMPERROR}, - // SRB2kart - Skin sounds - {"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR}, - {"klose", false, 64, 0, -1, NULL, 0, SKSLOSE, -1, LUMPERROR}, - {"slow", false, 128, 32, -1, NULL, 0, SKSSLOW, -1, LUMPERROR}, - {"taunt1", false, 64, 96, -1, NULL, 0, SKSPLTNT1, -1, LUMPERROR}, - {"taunt2", false, 64, 96, -1, NULL, 0, SKSPLTNT2, -1, LUMPERROR}, - {"taunt3", false, 64, 96, -1, NULL, 0, SKSPLTNT3, -1, LUMPERROR}, - {"taunt4", false, 64, 96, -1, NULL, 0, SKSPLTNT4, -1, LUMPERROR}, - {"hitem", false, 64, 32, -1, NULL, 0, SKSHITEM, -1, LUMPERROR}, - - // skin sounds free slots to add sounds at run time (Boris HACK!!!) - // initialized to NULL + // skin sounds free slots to add sounds at run time (Boris HACK!!!) + // initialized to NULL }; char freeslotnames[sfx_freeslot0 + NUMSFXFREESLOTS + NUMSKINSFXSLOTS][7]; From 889e547550bac07111ed40e94afe330eac275b13 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sun, 11 Feb 2018 21:47:19 -0500 Subject: [PATCH 08/14] Updated player arrows --- src/dehacked.c | 16 +- src/info.c | 23 +- src/info.h | 19 +- src/p_mobj.c | 107 +++-- src/sounds.c | 1078 ++++++++++++++++++++++++------------------------ 5 files changed, 632 insertions(+), 611 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 76d491a2..4b2db380 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6466,20 +6466,12 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_FIREDITEM4", "S_PLAYERARROW", // Above player arrow - "S_PLAYERARROW_SNEAKER", - "S_PLAYERARROW_BANANA", - "S_PLAYERARROW_FAKEITEM", - "S_PLAYERARROW_HYUDORO", - "S_PLAYERARROW_POGOSPRING", - "S_PLAYERARROW_JAWZ", - "S_PLAYERARROW_MINE", - "S_PLAYERARROW_BALLHOG", - "S_PLAYERARROW_ORBINAUT", + "S_PLAYERARROW_BOX", + "S_PLAYERARROW_ITEM", "S_PLAYERARROW_INVINCIBILITY", - "S_PLAYERARROW_GROW", - "S_PLAYERARROW_KITCHENSINK", - "S_PLAYERARROW_EMPTY", "S_PLAYERARROW_ROULETTE", + "S_PLAYERARROW_NUMBER", + "S_PLAYERARROW_X", "S_PLAYERBOMB", // Player bomb overlay "S_PLAYERBOMB_WHEEL", diff --git a/src/info.c b/src/info.c index 11e0e313..44f17734 100644 --- a/src/info.c +++ b/src/info.c @@ -58,7 +58,8 @@ char sprnames[NUMSPRITES + 1][5] = "SPRG","BSPR","RNDM","KFRE","KINV","KINF","DRIF","DSMO","FITM","BANA", "GSHE","RSHE","SSMN","KRBM","BLIG","LIGH","SINK","SITR","KBLN","LAKI", "POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO", - "CRAB","SHAD","BUMP","FLEN","CLAS","PSHW","ARRO","PBOM" + "CRAB","SHAD","BUMP","FLEN","CLAS","PSHW","ARRO","ITEM","ITMI","ITMN", + "PBOM" }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -2906,20 +2907,12 @@ state_t states[NUMSTATES] = // Above player arrow {SPR_ARRO, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW - {SPR_ARRO, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_SNEAKER - {SPR_ARRO, FF_FULLBRIGHT|3, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_BANANA - {SPR_ARRO, FF_FULLBRIGHT|4, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_FAKEITEM - {SPR_ARRO, FF_FULLBRIGHT|5, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_HYUDORO - {SPR_ARRO, FF_FULLBRIGHT|6, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_POGOSPRING - {SPR_ARRO, FF_FULLBRIGHT|7, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_JAWZ - {SPR_ARRO, FF_FULLBRIGHT|8, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_MINE - {SPR_ARRO, FF_FULLBRIGHT|9, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_BALLHOG - {SPR_ARRO, FF_FULLBRIGHT|10, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_ORBINAUT - {SPR_ARRO, FF_FULLBRIGHT|13, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_INVINCIBILITY - {SPR_ARRO, FF_FULLBRIGHT|14, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_GROW - {SPR_ARRO, FF_FULLBRIGHT|15, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_KITCHENSINK - {SPR_ARRO, FF_FULLBRIGHT|16, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_EMPTY - {SPR_ARRO, FF_FULLBRIGHT|FF_ANIMATE|1, -1, {NULL}, 5, 3, S_NULL}, // S_PLAYERARROW_ROULETTE + {SPR_ARRO, FF_FULLBRIGHT|1, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_BOX + {SPR_ITEM, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_ITEM + {SPR_ITMI, FF_FULLBRIGHT|FF_ANIMATE, -1, {NULL}, 6, 3, S_NULL}, // S_PLAYERARROW_INVINCIBILITY + {SPR_ITEM, FF_FULLBRIGHT|FF_ANIMATE, -1, {NULL}, 16, 3, S_NULL}, // S_PLAYERARROW_ROULETTE + {SPR_ITMN, FF_FULLBRIGHT, -1, {NULL}, 16, 3, S_NULL}, // S_PLAYERARROW_NUMBER + {SPR_ITMN, FF_FULLBRIGHT|10, -1, {NULL}, 16, 3, S_NULL}, // S_PLAYERARROW_X {SPR_PBOM, FF_ANIMATE, -1, {NULL}, 3, 3, S_NULL}, // S_PLAYERBOMB {SPR_PBOM, 4, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERBOMB_WHEEL diff --git a/src/info.h b/src/info.h index 0420f533..fdf1fdaf 100644 --- a/src/info.h +++ b/src/info.h @@ -620,6 +620,9 @@ typedef enum sprite SPR_PSHW, // thrown indicator SPR_ARRO, // player arrows + SPR_ITEM, + SPR_ITMI, + SPR_ITMN, SPR_PBOM, // player bomb @@ -3428,20 +3431,12 @@ typedef enum state S_FIREDITEM4, S_PLAYERARROW, // Above player arrow - S_PLAYERARROW_SNEAKER, - S_PLAYERARROW_BANANA, - S_PLAYERARROW_FAKEITEM, - S_PLAYERARROW_HYUDORO, - S_PLAYERARROW_POGOSPRING, - S_PLAYERARROW_JAWZ, - S_PLAYERARROW_MINE, - S_PLAYERARROW_BALLHOG, - S_PLAYERARROW_ORBINAUT, + S_PLAYERARROW_BOX, + S_PLAYERARROW_ITEM, S_PLAYERARROW_INVINCIBILITY, - S_PLAYERARROW_GROW, - S_PLAYERARROW_KITCHENSINK, - S_PLAYERARROW_EMPTY, S_PLAYERARROW_ROULETTE, + S_PLAYERARROW_NUMBER, + S_PLAYERARROW_X, S_PLAYERBOMB, S_PLAYERBOMB_WHEEL, diff --git a/src/p_mobj.c b/src/p_mobj.c index 699c26be..288c7855 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6845,44 +6845,85 @@ void P_MobjThinker(mobj_t *mobj) } P_SetThingPosition(mobj); - // Set it to use the correct states for its condition - if (mobj->target->player->kartstuff[k_itemroulette]) - { - if (mobj->state != &states[S_PLAYERARROW_ROULETTE]) // don't reset FF_ANIMATE - P_SetMobjState(mobj, S_PLAYERARROW_ROULETTE); - } - else - { - switch(mobj->target->player->kartstuff[k_itemtype]) - { - case KITEM_KITCHENSINK: P_SetMobjState(mobj, S_PLAYERARROW_KITCHENSINK); break; - case KITEM_GROW: P_SetMobjState(mobj, S_PLAYERARROW_GROW); break; - case KITEM_INVINCIBILITY: P_SetMobjState(mobj, S_PLAYERARROW_INVINCIBILITY); break; - case KITEM_ORBINAUT: P_SetMobjState(mobj, S_PLAYERARROW_ORBINAUT); break; - case KITEM_BALLHOG: P_SetMobjState(mobj, S_PLAYERARROW_BALLHOG); break; - case KITEM_MINE: P_SetMobjState(mobj, S_PLAYERARROW_MINE); break; - case KITEM_JAWZ: P_SetMobjState(mobj, S_PLAYERARROW_JAWZ); break; - case KITEM_POGOSPRING: P_SetMobjState(mobj, S_PLAYERARROW_POGOSPRING); break; - case KITEM_HYUDORO: P_SetMobjState(mobj, S_PLAYERARROW_HYUDORO); break; - case KITEM_FAKE: P_SetMobjState(mobj, S_PLAYERARROW_FAKEITEM); break; - case KITEM_BANANA: P_SetMobjState(mobj, S_PLAYERARROW_BANANA); break; - case KITEM_SNEAKER: P_SetMobjState(mobj, S_PLAYERARROW_SNEAKER); break; - default: P_SetMobjState(mobj, S_PLAYERARROW); break; // S_INVISIBLE - } - } - - if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 && (leveltime & 1)) - P_SetMobjState(mobj, S_PLAYERARROW_GROW); - else if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 && !(leveltime & 1)) - P_SetMobjState(mobj, S_PLAYERARROW_EMPTY); // S_INVISIBLE - 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; - } mobj->destscale = scale; + + if (!(mobj->flags2 & MF2_DONTDRAW)) + { + if (!mobj->tracer) + { + mobj->tracer = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); + P_SetTarget(&mobj->tracer->target, mobj); + P_SetMobjState(mobj->tracer, S_PLAYERARROW_ITEM); + P_SetScale(mobj->tracer, mobj->scale); + } + + // Set it to use the correct states for its condition + if (mobj->target->player->kartstuff[k_itemroulette]) + { + P_SetMobjState(mobj, S_PLAYERARROW_BOX); + + if (mobj->tracer->state != &states[S_PLAYERARROW_ROULETTE]) // don't reset FF_ANIMATE + P_SetMobjState(mobj->tracer, S_PLAYERARROW_ROULETTE); + } + else if (mobj->target->player->kartstuff[k_itemtype]) + { + P_SetMobjState(mobj, S_PLAYERARROW_BOX); + + if (mobj->tracer->state != &states[S_PLAYERARROW_ITEM] + || mobj->tracer->state != &states[S_PLAYERARROW_INVINCIBILITY]) + P_SetMobjState(mobj->tracer, S_PLAYERARROW_ITEM); + + switch (mobj->target->player->kartstuff[k_itemtype]) + { + case KITEM_INVINCIBILITY: + if (mobj->tracer->state != &states[S_PLAYERARROW_INVINCIBILITY]) + P_SetMobjState(mobj->tracer, S_PLAYERARROW_INVINCIBILITY); + break; + case KITEM_SAD: + mobj->tracer->frame = FF_FULLBRIGHT; + break; + default: + mobj->tracer->frame = FF_FULLBRIGHT|(mobj->tracer->target->player->kartstuff[k_itemtype]); + break; + } + + if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 && (leveltime & 1)) + mobj->tracer->frame = FF_FULLBRIGHT|KITEM_GROW; + else if (mobj->target->player->kartstuff[k_growshrinktimer] > 1 && !(leveltime & 1)) + P_SetMobjState(mobj, S_INVISIBLE); + } + else + { + P_SetMobjState(mobj, S_PLAYERARROW); + P_SetMobjState(mobj->tracer, S_INVISIBLE); + } + + mobj->tracer->destscale = scale; + + if (mobj->target->player->kartstuff[k_itemamount] > 1 + && mobj->target->player->kartstuff[k_itemamount] < 10) // Meh, too difficult to support greater than this :V + { + mobj_t *number = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); + mobj_t *numx = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); + + P_SetTarget(&number->target, mobj); + P_SetMobjState(number, S_PLAYERARROW_NUMBER); + P_SetScale(number, mobj->scale); + number->fuse = 1; + number->destscale = scale; + number->frame = FF_FULLBRIGHT|(mobj->target->player->kartstuff[k_itemamount]); + + P_SetTarget(&numx->target, mobj); + P_SetMobjState(numx, S_PLAYERARROW_X); + P_SetScale(numx, mobj->scale); + numx->fuse = 1; + numx->destscale = scale; + } + } } else if (mobj->health > 0) { diff --git a/src/sounds.c b/src/sounds.c index 7b5c9ced..bcfdbf93 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -31,562 +31,562 @@ sfxinfo_t S_sfx[NUMSFX] = Legacy doesn't use the PITCH variable, so now it is used for various flags. See soundflags_t. *****/ - // S_sfx[0] needs to be a dummy for odd reasons. (don't modify this comment) - // name, singularity, priority, pitch, volume, data, length, skinsound, usefulness, lumpnum - {"none" , false, 0, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // S_sfx[0] needs to be a dummy for odd reasons. (don't modify this comment) +// name, singularity, priority, pitch, volume, data, length, skinsound, usefulness, lumpnum + {"none" , false, 0, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - // Skin Sounds - {"altdi1", false, 192, 16, -1, NULL, 0, SKSPLDET1, -1, LUMPERROR}, - {"altdi2", false, 192, 16, -1, NULL, 0, SKSPLDET2, -1, LUMPERROR}, - {"altdi3", false, 192, 16, -1, NULL, 0, SKSPLDET3, -1, LUMPERROR}, - {"altdi4", false, 192, 16, -1, NULL, 0, SKSPLDET4, -1, LUMPERROR}, - {"altow1", false, 192, 16, -1, NULL, 0, SKSPLPAN1, -1, LUMPERROR}, - {"altow2", false, 192, 16, -1, NULL, 0, SKSPLPAN2, -1, LUMPERROR}, - {"altow3", false, 192, 16, -1, NULL, 0, SKSPLPAN3, -1, LUMPERROR}, - {"altow4", false, 192, 16, -1, NULL, 0, SKSPLPAN4, -1, LUMPERROR}, - {"victr1", false, 64, 16, -1, NULL, 0, SKSPLVCT1, -1, LUMPERROR}, - {"victr2", false, 64, 16, -1, NULL, 0, SKSPLVCT2, -1, LUMPERROR}, - {"victr3", false, 64, 16, -1, NULL, 0, SKSPLVCT3, -1, LUMPERROR}, - {"victr4", false, 64, 16, -1, NULL, 0, SKSPLVCT4, -1, LUMPERROR}, - {"gasp" , false, 64, 0, -1, NULL, 0, SKSGASP, -1, LUMPERROR}, - {"jump" , false, 140, 0, -1, NULL, 0, SKSJUMP, -1, LUMPERROR}, - {"pudpud", false, 64, 0, -1, NULL, 0, SKSPUDPUD, -1, LUMPERROR}, - {"putput", false, 64, 0, -1, NULL, 0, SKSPUTPUT, -1, LUMPERROR}, // not as high a priority - {"spin" , false, 100, 0, -1, NULL, 0, SKSSPIN, -1, LUMPERROR}, - {"spndsh", false, 64, 1, -1, NULL, 0, SKSSPNDSH, -1, LUMPERROR}, - {"thok" , false, 96, 0, -1, NULL, 0, SKSTHOK, -1, LUMPERROR}, - {"zoom" , false, 120, 1, -1, NULL, 0, SKSZOOM, -1, LUMPERROR}, - {"skid", false, 64, 32, -1, NULL, 0, SKSSKID, -1, LUMPERROR}, + // Skin Sounds + {"altdi1", false, 192, 16, -1, NULL, 0, SKSPLDET1, -1, LUMPERROR}, + {"altdi2", false, 192, 16, -1, NULL, 0, SKSPLDET2, -1, LUMPERROR}, + {"altdi3", false, 192, 16, -1, NULL, 0, SKSPLDET3, -1, LUMPERROR}, + {"altdi4", false, 192, 16, -1, NULL, 0, SKSPLDET4, -1, LUMPERROR}, + {"altow1", false, 192, 16, -1, NULL, 0, SKSPLPAN1, -1, LUMPERROR}, + {"altow2", false, 192, 16, -1, NULL, 0, SKSPLPAN2, -1, LUMPERROR}, + {"altow3", false, 192, 16, -1, NULL, 0, SKSPLPAN3, -1, LUMPERROR}, + {"altow4", false, 192, 16, -1, NULL, 0, SKSPLPAN4, -1, LUMPERROR}, + {"victr1", false, 64, 16, -1, NULL, 0, SKSPLVCT1, -1, LUMPERROR}, + {"victr2", false, 64, 16, -1, NULL, 0, SKSPLVCT2, -1, LUMPERROR}, + {"victr3", false, 64, 16, -1, NULL, 0, SKSPLVCT3, -1, LUMPERROR}, + {"victr4", false, 64, 16, -1, NULL, 0, SKSPLVCT4, -1, LUMPERROR}, + {"gasp" , false, 64, 0, -1, NULL, 0, SKSGASP, -1, LUMPERROR}, + {"jump" , false, 140, 0, -1, NULL, 0, SKSJUMP, -1, LUMPERROR}, + {"pudpud", false, 64, 0, -1, NULL, 0, SKSPUDPUD, -1, LUMPERROR}, + {"putput", false, 64, 0, -1, NULL, 0, SKSPUTPUT, -1, LUMPERROR}, // not as high a priority + {"spin" , false, 100, 0, -1, NULL, 0, SKSSPIN, -1, LUMPERROR}, + {"spndsh", false, 64, 1, -1, NULL, 0, SKSSPNDSH, -1, LUMPERROR}, + {"thok" , false, 96, 0, -1, NULL, 0, SKSTHOK, -1, LUMPERROR}, + {"zoom" , false, 120, 1, -1, NULL, 0, SKSZOOM, -1, LUMPERROR}, + {"skid", false, 64, 32, -1, NULL, 0, SKSSKID, -1, LUMPERROR}, - // Ambience/background objects/etc - {"ambint", true, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // Ambience/background objects/etc + {"ambint", true, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"alarm", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"buzz1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"buzz2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"buzz3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"buzz4", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"crumbl", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Platform Crumble Tails 03-16-2001 - {"fire", false, 8, 32, -1, NULL, 0, -1, -1, LUMPERROR}, - {"grind", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"laser", true, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mswing", false, 16, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"pstart", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"pstop", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"steam1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 06-19-2001 - {"steam2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 06-19-2001 - {"wbreak", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"alarm", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"buzz1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"buzz2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"buzz3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"buzz4", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"crumbl", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Platform Crumble Tails 03-16-2001 + {"fire", false, 8, 32, -1, NULL, 0, -1, -1, LUMPERROR}, + {"grind", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"laser", true, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mswing", false, 16, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"pstart", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"pstop", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"steam1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 06-19-2001 + {"steam2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 06-19-2001 + {"wbreak", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rainin", true, 24, 4, -1, NULL, 0, -1, -1, LUMPERROR}, - {"litng1", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"litng2", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"litng3", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"litng4", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"athun1", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"athun2", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rainin", true, 24, 4, -1, NULL, 0, -1, -1, LUMPERROR}, + {"litng1", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"litng2", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"litng3", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"litng4", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"athun1", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"athun2", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr1", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr2", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr3", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr4", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr5", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr6", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr7", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"amwtr8", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bubbl1", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bubbl2", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bubbl3", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bubbl4", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bubbl5", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"floush", false, 16, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"splash", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"splish", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Splish Tails 12-08-2000 - {"wdrip1", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip2", false, 8 , 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip3", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip4", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip5", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip6", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip7", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdrip8", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wslap", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Water Slap Tails 12-13-2000 + {"amwtr1", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr2", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr3", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr4", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr5", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr6", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr7", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"amwtr8", false, 12, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bubbl1", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bubbl2", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bubbl3", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bubbl4", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bubbl5", false, 11, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"floush", false, 16, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"splash", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"splish", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Splish Tails 12-08-2000 + {"wdrip1", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip2", false, 8 , 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip3", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip4", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip5", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip6", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip7", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdrip8", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wslap", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Water Slap Tails 12-13-2000 - {"doora1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"doorb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"doorc1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"doorc2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"doord1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"doord2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"eleva1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"eleva2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"eleva3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"elevb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"elevb2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"elevb3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doora1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doorb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doorc1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doorc2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doord1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"doord2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"eleva1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"eleva2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"eleva3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"elevb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"elevb2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"elevb3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ambin2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"lavbub", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rocks1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rocks2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rocks3", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rocks4", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rumbam", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rumble", false, 64, 24, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ambin2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"lavbub", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rocks1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rocks2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rocks3", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rocks4", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rumbam", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rumble", false, 64, 24, -1, NULL, 0, -1, -1, LUMPERROR}, - // Game objects, etc - {"appear", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bkpoof", false, 70, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bnce1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Boing! - {"bnce2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Boing! - {"cannon", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"cgot" , true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Got Emerald! Tails 09-02-2001 - {"cybdth", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"deton", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ding", false, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"dmpain", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"drown", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"fizzle", false, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"gbeep", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Grenade beep - {"gclose", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ghit" , false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"gloop", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"gspray", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"gravch", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"itemup", true, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"jet", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"jshard", true, 167, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"lose" , false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"lvpass", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mindig", false, 8, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mixup", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"pogo" , false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"pop" , false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rail1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rail2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"rlaunc", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"shield", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"shldls", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"spdpad", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"spkdth", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"spring", false, 112, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"statu1", true, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"statu2", true, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"strpst", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Starpost Sound Tails 07-04-2002 - {"supert", true, 127, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"telept", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"tink" , false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"token" , true, 224, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // SS token - {"trfire", true, 60, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"trpowr", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"turhit", false, 40, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wdjump", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mswarp", false, 60, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mspogo", false, 60, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + // Game objects, etc + {"appear", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bkpoof", false, 70, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bnce1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Boing! + {"bnce2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Boing! + {"cannon", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"cgot" , true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Got Emerald! Tails 09-02-2001 + {"cybdth", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"deton", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ding", false, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"dmpain", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"drown", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"fizzle", false, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"gbeep", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Grenade beep + {"gclose", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ghit" , false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"gloop", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"gspray", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"gravch", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"itemup", true, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"jet", false, 8, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"jshard", true, 167, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"lose" , false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"lvpass", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mindig", false, 8, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mixup", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"pogo" , false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"pop" , false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rail1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rail2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"rlaunc", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"shield", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"shldls", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"spdpad", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"spkdth", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"spring", false, 112, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"statu1", true, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"statu2", true, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"strpst", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Starpost Sound Tails 07-04-2002 + {"supert", true, 127, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"telept", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"tink" , false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"token" , true, 224, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // SS token + {"trfire", true, 60, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"trpowr", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"turhit", false, 40, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wdjump", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mswarp", false, 60, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mspogo", false, 60, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - // Menu, interface - {"chchng", false, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"dwnind", false, 212, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"emfind", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"flgcap", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"menu1", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"oneup", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ptally", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Point tally is identical to menu for now - {"radio", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"wepchg", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Weapon switch is identical to menu for now - {"wtrdng", true, 212, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // make sure you can hear the DING DING! Tails 03-08-2000 - {"zelda", false, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // Menu, interface + {"chchng", false, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"dwnind", false, 212, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"emfind", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"flgcap", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"menu1", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"oneup", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ptally", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Point tally is identical to menu for now + {"radio", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"wepchg", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Weapon switch is identical to menu for now + {"wtrdng", true, 212, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // make sure you can hear the DING DING! Tails 03-08-2000 + {"zelda", false, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - // NiGHTS - {"ideya", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"xideya", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas - {"nbmper", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"nxbump", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas - {"ncitem", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"nxitem", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas - {"ngdone", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"nxdone", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas - {"drill1", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"drill2", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ncspec", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 12-15-2003 - {"nghurt", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"ngskid", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"hoop1", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"hoop2", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"hoop3", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"hidden", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"prloop", false, 104, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"timeup", true, 256, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // NiGHTS + {"ideya", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"xideya", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas + {"nbmper", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"nxbump", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas + {"ncitem", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"nxitem", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas + {"ngdone", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"nxdone", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Xmas + {"drill1", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"drill2", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ncspec", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Tails 12-15-2003 + {"nghurt", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ngskid", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"hoop1", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"hoop2", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"hoop3", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"hidden", false, 204, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"prloop", false, 104, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"timeup", true, 256, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - // Mario - {"koopfr" , true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario1", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario2", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario3", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario4", true, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario5", false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario6", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario7", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario8", false, 48, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mario9", true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"marioa", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"thwomp", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + // Mario + {"koopfr" , true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario1", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario2", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario3", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario4", true, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario5", false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario6", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario7", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario8", false, 48, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mario9", true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"marioa", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"thwomp", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - // Black Eggman - {"bebomb", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bechrg", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"becrsh", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bedeen", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bedie1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bedie2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"beeyow", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"befall", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"befire", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"beflap", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"begoop", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"begrnd", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"behurt", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bejet1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"belnch", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"beoutb", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"beragh", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"beshot", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bestep", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bestp2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bewar1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bewar2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bewar3", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bewar4", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bexpld", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bgxpld", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + // Black Eggman + {"bebomb", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bechrg", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"becrsh", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bedeen", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bedie1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bedie2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"beeyow", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"befall", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"befire", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"beflap", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"begoop", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"begrnd", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"behurt", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bejet1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"belnch", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"beoutb", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"beragh", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"beshot", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bestep", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bestp2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bewar1", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bewar2", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bewar3", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bewar4", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bexpld", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bgxpld", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - // Cybrakdemon - {"beelec", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"brakrl", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"brakrx", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + // Cybrakdemon + {"beelec", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"brakrl", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"brakrx", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - // S3&K sounds - {"s3k33", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k34", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k35", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k36", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k37", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k38", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k39", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k3f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k40", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k41", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k42", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k43", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k44", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k52", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k53", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k54", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, // MetalSonic shot fire - {"s3k55", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k56", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k57", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k58", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k59", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k5f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k60", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k61", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k62", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k64", false, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k65", false, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Blue Spheres - {"s3k66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k68", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k69", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k6f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k70", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k71", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k72", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k73", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k74", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k75", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k76", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k77", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k78", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k79", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k7f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k80", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k81", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k82", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k83", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k84", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k85", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k86", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k87", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k88", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k89", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k8f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k90", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k91", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k92", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k93", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k94", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k95", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k96", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k97", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k98", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k99", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k9f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka0", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka4", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka5", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka6", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka8", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3ka9", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kaa", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kab", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kac", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kad", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kae", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kaf", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb0", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb4", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb5", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb6", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb8", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kb9", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kba", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbb", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbcs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbcl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbdl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbes", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbel", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbfs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kbfl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc0s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc0l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc1s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc1l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc2s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc2l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc3s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc5l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc6s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc6l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc8s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc8l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc9s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kc9l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcas", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kccs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kccl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcdl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kces", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcel", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcfs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kcfl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd0s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd0l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd1s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd1l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd2s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd2l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd3s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd5l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd6s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd6l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd7s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd7l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd8s", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, // Sharp Spin (maybe use the long/L version?) - {"s3kd8l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd9s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kd9l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kdas", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kdal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kdbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3kdbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + // S3&K sounds + {"s3k33", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k34", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k35", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k36", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k37", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k38", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k39", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k3f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k40", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k41", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k42", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k43", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k44", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k52", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k53", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k54", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, // MetalSonic shot fire + {"s3k55", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k56", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k57", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k58", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k59", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k5f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k60", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k61", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k62", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k64", false, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k65", false, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Blue Spheres + {"s3k66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k68", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k69", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k6f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k70", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k71", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k72", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k73", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k74", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k75", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k76", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k77", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k78", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k79", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k7f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k80", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k81", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k82", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k83", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k84", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k85", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k86", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k87", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k88", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k89", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k8f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k90", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k91", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k92", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k93", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k94", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k95", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k96", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k97", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k98", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k99", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k9f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka0", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka4", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka5", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka6", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka8", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3ka9", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kaa", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kab", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kac", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kad", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kae", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kaf", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb0", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb3", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb4", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb5", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb6", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb8", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kb9", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kba", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbb", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbcs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbcl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbdl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbes", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbel", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbfs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kbfl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc0s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc0l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc1s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc1l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc2s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc2l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc3s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc5l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc6s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc6l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc8s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc8l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc9s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kc9l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcas", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kccs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kccl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcds", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcdl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kces", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcel", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcfs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kcfl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd0s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd0l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd1s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd1l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd2s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd2l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd3s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd5l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd6s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd6l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd7s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd7l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd8s", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR}, // Sharp Spin (maybe use the long/L version?) + {"s3kd8l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd9s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kd9l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kdas", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kdal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kdbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3kdbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - // SRB2kart - {"lkt1", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"lkt2", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"lkt3", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kart1", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kart2", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kart3", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mlap", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"sboost", true, 90, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mush", false, 90, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kinvnc", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kgrow", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bomb", false, 110, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"bomb2", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"peel", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"slip", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"fake", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"grnshl", false, 120, 64, -1, NULL, 0, -1, -1, LUMPERROR}, - {"redshl", false, 130, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"shbrk", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkdrft", false, 52, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkslid", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitem", false, 80, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm1", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm2", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm3", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm4", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm5", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm6", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm7", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitm8", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"mkitmF", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"clash", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"tossed", false, 150, 8, -1, NULL, 0, -1, -1, LUMPERROR}, - {"shelit", false, 64, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - {"vroom", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"boing", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"smkinv", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + // SRB2kart + {"lkt1", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"lkt2", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"lkt3", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kart1", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kart2", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kart3", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mlap", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"sboost", true, 90, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mush", false, 90, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kinvnc", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kgrow", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bomb", false, 110, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"bomb2", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"peel", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"slip", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"fake", false, 100, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"grnshl", false, 120, 64, -1, NULL, 0, -1, -1, LUMPERROR}, + {"redshl", false, 130, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"shbrk", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkdrft", false, 52, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkslid", false, 48, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitem", false, 80, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm1", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm2", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm3", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm4", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm5", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm6", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm7", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitm8", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"mkitmF", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"clash", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"tossed", false, 150, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"shelit", false, 64, 16, -1, NULL, 0, -1, -1, LUMPERROR}, + {"vroom", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"boing", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"smkinv", false, 140, 16, -1, NULL, 0, -1, -1, LUMPERROR}, - // Knuckles Chaotix sounds - {"kc2a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc2b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc2c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc2d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc2e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc2f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Pogo Spring - {"kc30", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc31", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc32", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc33", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc34", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc35", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc36", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc37", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc38", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc39", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Voting beep - {"kc3a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc3b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc3c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc3d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc3e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc3f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc40", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc41", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc42", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc43", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc44", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Voting pick - {"kc49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc52", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc53", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc54", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc55", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc56", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc57", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc58", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc59", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Shrink - {"kc5a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Grow - {"kc5b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc5c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc5e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc5f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc60", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc61", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc62", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc64", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc65", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc68", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc69", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc6b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc6c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc6d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"kc6e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - { - // SRB2kart - Skin sounds - {"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR}, - {"klose", false, 64, 0, -1, NULL, 0, SKSLOSE, -1, LUMPERROR}, - {"slow", false, 128, 32, -1, NULL, 0, SKSSLOW, -1, LUMPERROR}, - {"taunt1", false, 64, 96, -1, NULL, 0, SKSPLTNT1, -1, LUMPERROR}, - {"taunt2", false, 64, 96, -1, NULL, 0, SKSPLTNT2, -1, LUMPERROR}, - {"taunt3", false, 64, 96, -1, NULL, 0, SKSPLTNT3, -1, LUMPERROR}, - {"taunt4", false, 64, 96, -1, NULL, 0, SKSPLTNT4, -1, LUMPERROR}, - {"hitem", false, 64, 32, -1, NULL, 0, SKSHITEM, -1, LUMPERROR}, + // Knuckles Chaotix sounds + {"kc2a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc2f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Pogo Spring + {"kc30", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc31", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc32", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc33", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc34", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc35", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc36", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc37", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc38", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc39", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Voting beep + {"kc3a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc3f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc40", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc41", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc42", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc43", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc44", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Voting pick + {"kc49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc52", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc53", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc54", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc55", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc56", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc57", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc58", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc59", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Shrink + {"kc5a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Grow + {"kc5b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc5f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc60", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc61", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc62", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc64", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc65", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc68", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc69", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"kc6e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + + // SRB2kart - Skin sounds + {"kwin", false, 64, 0, -1, NULL, 0, SKSWIN, -1, LUMPERROR}, + {"klose", false, 64, 0, -1, NULL, 0, SKSLOSE, -1, LUMPERROR}, + {"slow", false, 128, 32, -1, NULL, 0, SKSSLOW, -1, LUMPERROR}, + {"taunt1", false, 64, 96, -1, NULL, 0, SKSPLTNT1, -1, LUMPERROR}, + {"taunt2", false, 64, 96, -1, NULL, 0, SKSPLTNT2, -1, LUMPERROR}, + {"taunt3", false, 64, 96, -1, NULL, 0, SKSPLTNT3, -1, LUMPERROR}, + {"taunt4", false, 64, 96, -1, NULL, 0, SKSPLTNT4, -1, LUMPERROR}, + {"hitem", false, 64, 32, -1, NULL, 0, SKSHITEM, -1, LUMPERROR}, - // skin sounds free slots to add sounds at run time (Boris HACK!!!) - // initialized to NULL + // skin sounds free slots to add sounds at run time (Boris HACK!!!) + // initialized to NULL }; char freeslotnames[sfx_freeslot0 + NUMSFXFREESLOTS + NUMSKINSFXSLOTS][7]; From 34d6d91577f834c23fb2b4dc9cfad8f00038ac16 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 12 Mar 2018 01:21:35 -0400 Subject: [PATCH 09/14] what is this bullshit?! r_local.h just got completely overwritten by a copy of r_draw.h..... --- src/r_local.h | 187 ++++++-------------------------------------------- 1 file changed, 22 insertions(+), 165 deletions(-) diff --git a/src/r_local.h b/src/r_local.h index ae70cd8a..ebe15512 100644 --- a/src/r_local.h +++ b/src/r_local.h @@ -8,177 +8,34 @@ // terms of the GNU General Public License, version 2. // See the 'LICENSE' file for more details. //----------------------------------------------------------------------------- -/// \file r_draw.h -/// \brief Low-level span/column drawer functions +/// \file r_local.h +/// \brief Refresh (R_*) module, global header. All the rendering/drawing stuff is here -#ifndef __R_DRAW__ -#define __R_DRAW__ +#ifndef __R_LOCAL__ +#define __R_LOCAL__ -#include "r_defs.h" +// Screen size related parameters. +#include "doomdef.h" -// ------------------------------- -// COMMON STUFF FOR 8bpp AND 16bpp -// ------------------------------- -extern UINT8 *ylookup[MAXVIDHEIGHT*4]; -extern UINT8 *ylookup1[MAXVIDHEIGHT*4]; -extern UINT8 *ylookup2[MAXVIDHEIGHT*4]; -extern UINT8 *ylookup3[MAXVIDHEIGHT*4]; -extern UINT8 *ylookup4[MAXVIDHEIGHT*4]; -extern INT32 columnofs[MAXVIDWIDTH*4]; -extern UINT8 *topleft; +// Binary Angles, sine/cosine/atan lookups. +#include "tables.h" -// ------------------------- -// COLUMN DRAWING CODE STUFF -// ------------------------- +// this one holds the max vid sizes and standard aspect +#include "screen.h" -extern lighttable_t *dc_colormap; -extern INT32 dc_x, dc_yl, dc_yh; -extern fixed_t dc_iscale, dc_texturemid; -extern UINT8 dc_hires; +#include "m_bbox.h" -extern UINT8 *dc_source; // first pixel in a column +#include "r_main.h" +#include "r_bsp.h" +#include "r_segs.h" +#include "r_plane.h" +#include "r_sky.h" +#include "r_data.h" +#include "r_things.h" +#include "r_draw.h" -// translucency stuff here -extern UINT8 *transtables; // translucency tables, should be (*transtables)[5][256][256] -extern UINT8 *dc_transmap; +extern drawseg_t *firstseg; -// translation stuff here +void SplitScreen_OnChange(void); -extern UINT8 *dc_translation; - -extern struct r_lightlist_s *dc_lightlist; -extern INT32 dc_numlights, dc_maxlights; - -//Fix TUTIFRUTI -extern INT32 dc_texheight; - -// ----------------------- -// SPAN DRAWING CODE STUFF -// ----------------------- - -extern INT32 ds_y, ds_x1, ds_x2; -extern lighttable_t *ds_colormap; -extern fixed_t ds_xfrac, ds_yfrac, ds_xstep, ds_ystep; -extern UINT8 *ds_source; // start of a 64*64 tile image -extern UINT8 *ds_transmap; - -#ifdef ESLOPE -typedef struct { - float x, y, z; -} floatv3_t; - -extern pslope_t *ds_slope; // Current slope being used -extern floatv3_t ds_su, ds_sv, ds_sz; // Vectors for... stuff? -extern float focallengthf, zeroheight; -#endif - -// Variable flat sizes -extern UINT32 nflatxshift; -extern UINT32 nflatyshift; -extern UINT32 nflatshiftup; -extern UINT32 nflatmask; - -/// \brief Top border -#define BRDR_T 0 -/// \brief Bottom border -#define BRDR_B 1 -/// \brief Left border -#define BRDR_L 2 -/// \brief Right border -#define BRDR_R 3 -/// \brief Topleft border -#define BRDR_TL 4 -/// \brief Topright border -#define BRDR_TR 5 -/// \brief Bottomleft border -#define BRDR_BL 6 -/// \brief Bottomright border -#define BRDR_BR 7 - -extern lumpnum_t viewborderlump[8]; - -// ------------------------------------------------ -// r_draw.c COMMON ROUTINES FOR BOTH 8bpp and 16bpp -// ------------------------------------------------ - -#define GTC_CACHE 1 - -#define TC_DEFAULT -1 -#define TC_BOSS -2 -#define TC_METALSONIC -3 // For Metal Sonic battle -#define TC_ALLWHITE -4 // For Cy-Brak-demon -#define TC_STARMAN -5 // For star power - -// Initialize color translation tables, for player rendering etc. -void R_InitTranslationTables(void); -UINT8* R_GetTranslationColormap(INT32 skinnum, skincolors_t color, UINT8 flags); -void R_FlushTranslationColormapCache(void); -UINT8 R_GetColorByName(const char *name); - -// Custom player skin translation -void R_InitViewBuffer(INT32 width, INT32 height); -void R_InitViewBorder(void); -void R_VideoErase(size_t ofs, INT32 count); - -// Rendering function. -#if 0 -void R_FillBackScreen(void); - -// If the view size is not full screen, draws a border around it. -void R_DrawViewBorder(void); -#endif - -// ----------------- -// 8bpp DRAWING CODE -// ----------------- - -void R_DrawColumn_8(void); -#define R_DrawWallColumn_8 R_DrawColumn_8 -void R_DrawShadeColumn_8(void); -void R_DrawTranslucentColumn_8(void); - -#ifdef USEASM -void ASMCALL R_DrawColumn_8_ASM(void); -#define R_DrawWallColumn_8_ASM R_DrawColumn_8_ASM -void ASMCALL R_DrawShadeColumn_8_ASM(void); -void ASMCALL R_DrawTranslucentColumn_8_ASM(void); -void ASMCALL R_Draw2sMultiPatchColumn_8_ASM(void); - -void ASMCALL R_DrawColumn_8_MMX(void); -#define R_DrawWallColumn_8_MMX R_DrawColumn_8_MMX - -void ASMCALL R_Draw2sMultiPatchColumn_8_MMX(void); -void ASMCALL R_DrawSpan_8_MMX(void); -#endif - -void R_DrawTranslatedColumn_8(void); -void R_DrawTranslatedTranslucentColumn_8(void); -void R_DrawSpan_8(void); -#ifdef ESLOPE -void R_CalcTiltedLighting(fixed_t start, fixed_t end); -void R_DrawTiltedSpan_8(void); -void R_DrawTiltedTranslucentSpan_8(void); -void R_DrawTiltedSplat_8(void); -#endif -void R_DrawSplat_8(void); -void R_DrawTranslucentSplat_8(void); -void R_DrawTranslucentSpan_8(void); -void R_Draw2sMultiPatchColumn_8(void); -void R_DrawFogSpan_8(void); -void R_DrawFogColumn_8(void); -void R_DrawColumnShadowed_8(void); - -// ------------------ -// 16bpp DRAWING CODE -// ------------------ - -#ifdef HIGHCOLOR -void R_DrawColumn_16(void); -void R_DrawWallColumn_16(void); -void R_DrawTranslucentColumn_16(void); -void R_DrawTranslatedColumn_16(void); -void R_DrawSpan_16(void); -#endif - -// ========================================================================= -#endif // __R_DRAW__ +#endif // __R_LOCAL__ \ No newline at end of file From f25b2f0256a3a8577b4bc5b1d42ca0b041a357f0 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 12 Mar 2018 01:23:42 -0400 Subject: [PATCH 10/14] whoops --- 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 ed3390e5..df958dbb 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3223,7 +3223,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) K_KartDrift(player, onground); // Feather strafing - if (player->kartstuff[k_feather] & 2) + if (player->kartstuff[k_pogospring]) { fixed_t strafe = 0; fixed_t strength = FRACUNIT/32; From e5798f749044045b41405147a2520396d70fdf42 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 13 Mar 2018 21:07:08 -0400 Subject: [PATCH 11/14] Rename fake item to eggman monitor --- src/d_netcmd.c | 2 +- src/d_netcmd.h | 2 +- src/d_player.h | 4 ++-- src/dehacked.c | 2 +- src/info.h | 4 ++-- src/k_kart.c | 36 ++++++++++++++++++------------------ src/m_menu.c | 2 +- src/p_inter.c | 4 ++-- src/p_mobj.c | 2 +- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index a8dcf2c5..d3ed20c9 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -334,7 +334,7 @@ consvar_t cv_sneaker = {"sneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NU consvar_t cv_rocketsneaker = {"rocketsneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_invincibility = {"invincibility", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_banana = {"banana", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_fakeitem = {"fakeitem", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_eggmanmonitor = {"eggmanmonitor", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_orbinaut = {"orbinaut", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_jawz = {"jawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_mine = {"mine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 8b207012..851b6b6e 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -110,7 +110,7 @@ extern consvar_t cv_recycler;*/ // SRB2kart items extern consvar_t cv_sneaker, cv_rocketsneaker, cv_invincibility, cv_banana; -extern consvar_t cv_fakeitem, cv_orbinaut, cv_jawz, cv_mine; +extern consvar_t cv_eggmanmonitor, cv_orbinaut, cv_jawz, cv_mine; extern consvar_t cv_ballhog, cv_selfpropelledbomb, cv_grow, cv_shrink; extern consvar_t cv_lightningshield, cv_hyudoro, cv_pogospring; diff --git a/src/d_player.h b/src/d_player.h index 48e7fa3f..5c901f24 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -238,7 +238,7 @@ typedef enum KITEM_ROCKETSNEAKER, KITEM_INVINCIBILITY, KITEM_BANANA, - KITEM_FAKE, + KITEM_EGGMAN, KITEM_ORBINAUT, KITEM_JAWZ, KITEM_MINE, @@ -306,7 +306,7 @@ typedef enum k_squishedtimer, // Squished frame timer k_rocketsneakertimer, // Rocket Sneaker duration timer k_invincibilitytimer, // Invincibility timer - k_fakeitem, // Fake item held, separate from itemtype so it doesn't stop you from getting items + k_eggmanheld, // Eggman monitor held, separate from itemtype so it doesn't stop you from getting items k_spinouttimer, // Spin-out from a banana peel or oil slick (was "pw_bananacam") k_justbumped, // Prevent players from endlessly bumping into each other k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Invincibility, Grow) diff --git a/src/dehacked.c b/src/dehacked.c index 2b583b0d..17a65238 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6277,7 +6277,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_INVULNFLASH3", "S_INVULNFLASH4", - //{ Fake Item + //{ Eggman Monitor "S_FAKEITEM1", "S_FAKEITEM2", "S_FAKEITEM3", diff --git a/src/info.h b/src/info.h index e7e582f4..d42642b2 100644 --- a/src/info.h +++ b/src/info.h @@ -586,7 +586,7 @@ typedef enum sprite SPR_DSMO, // Drift Smoke // Kart Items - SPR_FITM, // Fake Item + SPR_FITM, // Eggman Monitor SPR_BANA, // Banana Peel SPR_GSHE, // Orbinaut SPR_RSHE, // Jawz @@ -3115,7 +3115,7 @@ typedef enum state S_INVULNFLASH3, S_INVULNFLASH4, - //{ Fake Item + //{ Eggman Monitor S_FAKEITEM1, S_FAKEITEM2, S_FAKEITEM3, diff --git a/src/k_kart.c b/src/k_kart.c index df958dbb..6b10a92f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -297,7 +297,7 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_rocketsneaker); CV_RegisterVar(&cv_invincibility); CV_RegisterVar(&cv_banana); - CV_RegisterVar(&cv_fakeitem); + CV_RegisterVar(&cv_eggmanmonitor); CV_RegisterVar(&cv_orbinaut); CV_RegisterVar(&cv_jawz); CV_RegisterVar(&cv_mine); @@ -371,7 +371,7 @@ static INT32 K_KartItemOddsDistance_Retro[NUMKARTRESULTS][9] = /*Rocket Sneaker*/ { 0, 0, 0, 0, 0, 0, 4, 6, 8 }, // Rocket Sneaker /*Invincibility*/ { 0, 0, 0, 0, 0, 1, 6, 8,12 }, // Invincibility /*Banana*/ { 0, 9, 4, 2, 1, 0, 0, 0, 0 }, // Banana - /*Fake Item*/ { 0, 4, 2, 1, 0, 0, 0, 0, 0 }, // Fake Item + /*Eggman Monitor*/ { 0, 4, 2, 1, 0, 0, 0, 0, 0 }, // Eggman Monitor /*Orbinaut*/ { 0, 6, 4, 3, 2, 0, 0, 0, 0 }, // Orbinaut /*Jawz*/ { 0, 0, 3, 2, 2, 1, 0, 0, 0 }, // Jawz /*Mine*/ { 0, 0, 1, 2, 1, 0, 0, 0, 0 }, // Mine @@ -397,7 +397,7 @@ static INT32 K_KartItemOddsBalloons[NUMKARTRESULTS][5] = /*Rocket Sneaker*/ { 0, 0, 0, 0, 0 }, // Rocket Sneaker /*Invincibility*/ { 1, 1, 0, 0, 0 }, // Invincibility /*Banana*/ { 0, 0, 3, 1, 1 }, // Banana - /*Fake Item*/ { 0, 0, 2, 2, 1 }, // Fake Item + /*Eggman Monitor*/ { 0, 0, 2, 2, 1 }, // Eggman Monitor /*Orbinaut*/ { 0, 0, 5, 3, 1 }, // Orbinaut /*Jawz*/ { 0, 3, 3, 1, 0 }, // Jawz /*Mine*/ { 0, 3, 3, 0, 0 }, // Mine @@ -493,8 +493,8 @@ static INT32 K_KartGetItemOdds(UINT8 pos, INT8 item, player_t *player) case KITEM_BANANA: if (!cv_banana.value) newodds = 0; break; - case KITEM_FAKE: - if (!cv_fakeitem.value) newodds = 0; + case KITEM_EGGMAN: + if (!cv_eggmanmonitor.value) newodds = 0; break; case KITEM_ORBINAUT: if (!cv_orbinaut.value) newodds = 0; @@ -604,7 +604,7 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd) // I'm returning via the exact opposite, however, to forgo having another bracket embed. Same result either way, I think. // Finally, if you get past this check, now you can actually start calculating what item you get. if (!(player->kartstuff[k_itemroulette] >= (TICRATE*3) - || ((cmd->buttons & BT_ATTACK) && !(player->kartstuff[k_fakeitem] || player->kartstuff[k_itemheld]) + || ((cmd->buttons & BT_ATTACK) && !(player->kartstuff[k_eggmanheld] || player->kartstuff[k_itemheld]) && player->kartstuff[k_itemroulette] >= roulettestop))) return; @@ -715,7 +715,7 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd) SETITEMRESULT(useodds, KITEM_ROCKETSNEAKER); // Rocket Sneaker SETITEMRESULT(useodds, KITEM_INVINCIBILITY); // Invincibility SETITEMRESULT(useodds, KITEM_BANANA); // Banana - SETITEMRESULT(useodds, KITEM_FAKE); // Fake Item + SETITEMRESULT(useodds, KITEM_EGGMAN); // Eggman Monitor SETITEMRESULT(useodds, KITEM_ORBINAUT); // Orbinaut SETITEMRESULT(useodds, KITEM_JAWZ); // Jawz SETITEMRESULT(useodds, KITEM_MINE); // Mine @@ -2667,7 +2667,7 @@ static void K_StripItems(player_t *player) player->kartstuff[k_growshrinktimer] = 0; player->kartstuff[k_attractiontimer] = 0; player->kartstuff[k_invincibilitytimer] = 0; - player->kartstuff[k_fakeitem] = 0; + player->kartstuff[k_eggmanheld] = 0; player->kartstuff[k_sadtimer] = 0; } // @@ -2677,7 +2677,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) { ticcmd_t *cmd = &player->cmd; boolean ATTACK_IS_DOWN = ((cmd->buttons & BT_ATTACK) && !(player->pflags & PF_ATTACKDOWN)); - boolean HOLDING_ITEM = (player->kartstuff[k_itemheld] || player->kartstuff[k_fakeitem]); + boolean HOLDING_ITEM = (player->kartstuff[k_itemheld] || player->kartstuff[k_eggmanheld]); boolean NO_HYUDORO = (player->kartstuff[k_stolentimer] == 0 && player->kartstuff[k_stealingtimer] == 0); K_KartUpdatePosition(player); @@ -2712,12 +2712,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground) if (player && player->mo && player->mo->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0) { - // Fake Item dropping - if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_fakeitem]) + // Eggman Monitor dropping + if (!(cmd->buttons & BT_ATTACK) && player->kartstuff[k_eggmanheld]) { K_ThrowKartItem(player, false, MT_FAKEITEM, -1, false); K_PlayTauntSound(player->mo); - player->kartstuff[k_fakeitem] = 0; + player->kartstuff[k_eggmanheld] = 0; } // Rocket Sneaker power else if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO @@ -2837,7 +2837,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) player->kartstuff[k_itemheld] = 0; } break; - case KITEM_FAKE: + case KITEM_EGGMAN: if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) { angle_t newangle; @@ -2845,7 +2845,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) fixed_t newy; mobj_t *mo; player->kartstuff[k_itemamount]--; - player->kartstuff[k_fakeitem] = 1; + player->kartstuff[k_eggmanheld] = 1; player->pflags |= PF_ATTACKDOWN; newangle = player->mo->angle; newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT); @@ -3392,7 +3392,7 @@ static patch_t *kp_sneaker; static patch_t *kp_rocketsneaker; static patch_t *kp_invincibility[7]; static patch_t *kp_banana; -static patch_t *kp_fakeitem; +static patch_t *kp_eggman; static patch_t *kp_orbinaut; static patch_t *kp_jawz; static patch_t *kp_mine; @@ -3509,7 +3509,7 @@ void K_LoadKartHUDGraphics(void) kp_invincibility[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX); } kp_banana = W_CachePatchName("K_ITBANA", PU_HUDGFX); - kp_fakeitem = W_CachePatchName("K_ITFAKE", PU_HUDGFX); + kp_eggman = W_CachePatchName("K_ITEGGM", PU_HUDGFX); kp_orbinaut = W_CachePatchName("K_ITORBN", PU_HUDGFX); kp_jawz = W_CachePatchName("K_ITJAWZ", PU_HUDGFX); kp_mine = W_CachePatchName("K_ITMINE", PU_HUDGFX); @@ -3707,7 +3707,7 @@ static void K_drawKartItem(void) case 8: localpatch = kp_selfpropelledbomb; break; // Self-Propelled Bomb case 9: localpatch = kp_shrink; break; // Shrink case 10: localpatch = localinv; break; // Invincibility - case 11: localpatch = kp_fakeitem; break; // Fake Item + case 11: localpatch = kp_eggman; break; // Eggman Monitor case 12: localpatch = kp_ballhog; break; // Ballhog case 13: localpatch = kp_lightningshield; break; // Lightning Shield //case 14: localpatch = kp_pogospring; break; // Pogo Spring @@ -3760,7 +3760,7 @@ static void K_drawKartItem(void) case KITEM_ROCKETSNEAKER: localpatch = kp_rocketsneaker; break; case KITEM_INVINCIBILITY: localpatch = localinv; localbg = kp_itembgdark; break; case KITEM_BANANA: localpatch = kp_banana; break; - case KITEM_FAKE: localpatch = kp_fakeitem; break; + case KITEM_EGGMAN: localpatch = kp_eggman; break; case KITEM_ORBINAUT: localpatch = kp_orbinaut; break; case KITEM_JAWZ: localpatch = kp_jawz; break; case KITEM_MINE: localpatch = kp_mine; break; diff --git a/src/m_menu.c b/src/m_menu.c index ac955bfa..f2ed0002 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1512,7 +1512,7 @@ static menuitem_t OP_MonitorToggleMenu[] = {IT_STRING | IT_CVAR, NULL, "Invinciblity", &cv_invincibility, 34}, {IT_STRING | IT_CVAR, NULL, "Bananas", &cv_banana, 42}, {IT_STRING | IT_CVAR, NULL, "Triple Bananas", &cv_triplebanana, 50}, - {IT_STRING | IT_CVAR, NULL, "Fake Items", &cv_fakeitem, 58}, + {IT_STRING | IT_CVAR, NULL, "Eggman Monitors", &cv_eggmanmonitor, 58}, {IT_STRING | IT_CVAR, NULL, "Orbinauts", &cv_orbinaut, 66}, {IT_STRING | IT_CVAR, NULL, "Triple Orbinauts", &cv_tripleorbinaut, 74}, {IT_STRING | IT_CVAR, NULL, "Jawz", &cv_jawz, 82}, diff --git a/src/p_inter.c b/src/p_inter.c index 267c437c..7602e299 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2031,8 +2031,8 @@ 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_fakeitem] && target->type == MT_FAKESHIELD) - target->target->player->kartstuff[k_fakeitem] = 0; + if (target->target->player->kartstuff[k_eggmanheld] && target->type == MT_FAKESHIELD) + target->target->player->kartstuff[k_eggmanheld] = 0; if ((target->target->player->kartstuff[k_itemheld]) && ((target->type == MT_GREENSHIELD && target->target->player->kartstuff[k_itemtype] == KITEM_ORBINAUT) diff --git a/src/p_mobj.c b/src/p_mobj.c index 9985bded..3b9b471f 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6686,7 +6686,7 @@ void P_MobjThinker(mobj_t *mobj) || (mobj->type == MT_REDSHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_JAWZ) || (mobj->type == MT_BANANASHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_BANANA) || (mobj->type == MT_MINESHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_MINE) - || (mobj->type == MT_FAKESHIELD && !mobj->target->player->kartstuff[k_fakeitem]) + || (mobj->type == MT_FAKESHIELD && !mobj->target->player->kartstuff[k_eggmanheld]) || (mobj->type != MT_FAKESHIELD && !mobj->target->player->kartstuff[k_itemheld]) || (mobj->lastlook > 0 && mobj->target->player->kartstuff[k_itemamount] < mobj->lastlook)) { From ee977ca8db887c69b2cdefcf8b91766373135411 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 14 Mar 2018 16:37:42 -0400 Subject: [PATCH 12/14] missed something --- src/info.c | 12 ++++++------ src/p_map.c | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/info.c b/src/info.c index 95b7f716..67b9fddb 100644 --- a/src/info.c +++ b/src/info.c @@ -14688,7 +14688,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_MINESHIELD -1, // doomednum - S_BOMBSHIELD1, // spawnstate + S_MINESHIELD1, // spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -14699,7 +14699,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BOMBEXPLODE, // deathstate + S_MINEEXPLODE, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 10*FRACUNIT, // speed @@ -14715,7 +14715,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_MINEITEM -1, // doomednum - S_BOMBAIR1, // spawnstate + S_MINEAIR1, // spawnstate 1, // spawnhealth S_NULL, // seestate sfx_tossed, // seesound @@ -14726,7 +14726,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BOMBEXPLODE, // deathstate + S_MINEEXPLODE, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed @@ -14742,7 +14742,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_MINEEXPLOSION -1, // doomednum - S_BOMBEXPLOSION1, // spawnstate + S_MINEEXPLOSION1, // spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -14915,7 +14915,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_BOMBEXPLODE, // deathstate + S_MINEEXPLODE, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed diff --git a/src/p_map.c b/src/p_map.c index 2fba1002..bdd97655 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -841,7 +841,7 @@ static boolean PIT_CheckThing(mobj_t *thing) if (thing->type == MT_PLAYER && thing->player) { - if (tmthing->state == &states[S_BOMBEXPLOSION1]) + if (tmthing->state == &states[S_MINEEXPLOSION1]) K_ExplodePlayer(thing->player, tmthing->target); else K_SpinPlayer(thing->player, tmthing->target); @@ -1167,7 +1167,7 @@ static boolean PIT_CheckThing(mobj_t *thing) else if (thing->type == MT_MINEEXPLOSION && tmthing->player) { // Player Damage - if (thing->state == &states[S_BOMBEXPLOSION1]) + if (thing->state == &states[S_MINEEXPLOSION1]) K_ExplodePlayer(tmthing->player, thing->target); else K_SpinPlayer(tmthing->player, thing->target); From eaaf708381c15753f655982edaa485f6e6c64d6c Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 2 Apr 2018 06:43:03 -0400 Subject: [PATCH 13/14] This little thing slipped by the merge --- src/d_player.h | 2 +- src/p_user.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 5c901f24..5ab83e55 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -292,7 +292,7 @@ typedef enum k_boostcharge, // Charge-up for boosting at the start of the race, or when Lakitu drops you k_jmp, // In Mario Kart, letting go of the jump button stops the drift k_offroad, // In Super Mario Kart, going offroad has lee-way of about 1 second before you start losing speed - k_pogospring, // Pogo spring effect + k_pogospring, // Pogo spring bounce effect k_itemroulette, // Used for the roulette when deciding what item to give you (was "pw_kartitem") diff --git a/src/p_user.c b/src/p_user.c index fad03b87..3ac1a9d8 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -8858,7 +8858,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall && thiscam->z < thiscam->subsector->sector->floorheight + 256*FRACUNIT && FixedMul(z - thiscam->z, camspeed) < 0) #if 0 - || player->kartstuff[k_feather] & 2 // SRB2Kart: don't follow while bouncing, experimental + || player->kartstuff[k_pogospring] // SRB2Kart: don't follow while bouncing, experimental #endif ) thiscam->momz = 0; // Don't go down a death pit From 35774d4f13f6ed095ee3f3d082a06ce8c5b029e7 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 4 Jun 2018 16:30:16 -0400 Subject: [PATCH 14/14] Revert "Merge branch 'master' into sonicitems" This reverts commit 4c0f64ff4fce179bd0315acb9d52e3b9ab52b986, reversing changes made to eaaf708381c15753f655982edaa485f6e6c64d6c. --- src/console.c | 7 +- src/d_clisrv.c | 43 +- src/d_main.c | 19 +- src/d_netcmd.c | 28 +- src/d_netfil.c | 38 +- src/dehacked.c | 11 + src/f_finale.c | 18 +- src/g_game.c | 23 +- src/g_input.c | 40 +- src/g_input.h | 1 - src/hardware/hw_defs.h | 9 +- src/hardware/hw_draw.c | 290 ++------- src/hardware/hw_drv.h | 2 - src/hardware/hw_glob.h | 2 +- src/hardware/hw_main.c | 974 +++++++++++++++---------------- src/hardware/r_opengl/r_opengl.c | 256 +++----- src/lua_script.c | 31 +- src/m_menu.c | 66 +-- src/m_misc.c | 26 +- src/p_setup.c | 13 +- src/r_things.h | 2 +- src/sdl/hwsym_sdl.c | 1 - src/sdl/i_system.c | 28 +- src/sdl/i_video.c | 1 - src/sdl/ogl_sdl.c | 7 +- src/sdl/sdl_sound.c | 9 + src/sdl12/hwsym_sdl.c | 1 - src/sdl12/i_video.c | 1 - src/v_video.c | 8 + src/win32/win_dll.c | 2 - 30 files changed, 714 insertions(+), 1243 deletions(-) diff --git a/src/console.c b/src/console.c index c0f12055..5a7605d0 100644 --- a/src/console.c +++ b/src/console.c @@ -836,9 +836,8 @@ boolean CON_Responder(event_t *ev) return true; } - // ...why shouldn't it eat the key? if it doesn't, it just means you - // can control Sonic from the console, which is silly - return true; //return false; + // don't eat the key + return false; } // command completion forward (tab) and backward (shift-tab) @@ -1037,7 +1036,7 @@ boolean CON_Responder(event_t *ev) // enter a char into the command prompt if (key < 32 || key > 127) - return true; // even if key can't be printed, eat it anyway + return false; // add key to cmd line here if (key >= 'A' && key <= 'Z' && !shiftdown) //this is only really necessary for dedicated servers diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 9190853e..9485e910 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -1214,37 +1214,22 @@ static inline void CL_DrawConnectionStatus(void) if (lastfilenum != -1) { INT32 dldlength; - static char tempname[28]; - fileneeded_t *file = &fileneeded[lastfilenum]; - char *filename = file->filename; + static char tempname[32]; Net_GetNetStat(); - dldlength = (INT32)((file->currentsize/(double)file->totalsize) * 256); + dldlength = (INT32)((fileneeded[lastfilenum].currentsize/(double)fileneeded[lastfilenum].totalsize) * 256); if (dldlength > 256) dldlength = 256; V_DrawFill(BASEVIDWIDTH/2-128, BASEVIDHEIGHT-24, 256, 8, 175); V_DrawFill(BASEVIDWIDTH/2-128, BASEVIDHEIGHT-24, dldlength, 8, 160); memset(tempname, 0, sizeof(tempname)); - // offset filename to just the name only part - filename += strlen(filename) - nameonlylength(filename); - - if (strlen(filename) > sizeof(tempname)-1) // too long to display fully - { - size_t endhalfpos = strlen(filename)-10; - // display as first 14 chars + ... + last 10 chars - // which should add up to 27 if our math(s) is correct - snprintf(tempname, sizeof(tempname), "%.14s...%.10s", filename, filename+endhalfpos); - } - else // we can copy the whole thing in safely - { - strncpy(tempname, filename, sizeof(tempname)-1); - } + nameonly(strncpy(tempname, fileneeded[lastfilenum].filename, 31)); V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT-24-32, V_YELLOWMAP, va(M_GetText("Downloading \"%s\""), tempname)); V_DrawString(BASEVIDWIDTH/2-128, BASEVIDHEIGHT-24, V_20TRANS|V_MONOSPACE, - va(" %4uK/%4uK",fileneeded[lastfilenum].currentsize>>10,file->totalsize>>10)); + va(" %4uK/%4uK",fileneeded[lastfilenum].currentsize>>10,fileneeded[lastfilenum].totalsize>>10)); V_DrawRightAlignedString(BASEVIDWIDTH/2+128, BASEVIDHEIGHT-24, V_20TRANS|V_MONOSPACE, va("%3.1fK/s ", ((double)getbps)/1024)); } @@ -2309,7 +2294,7 @@ static void Command_connect(void) // Assume we connect directly. boolean viams = false; - if (COM_Argc() < 2 || *COM_Argv(1) == 0) + if (COM_Argc() < 2) { CONS_Printf(M_GetText( "Connect (port): connect to a server\n" @@ -4163,8 +4148,7 @@ FILESTAMP INT32 k = *txtpak++; // playernum const size_t txtsize = txtpak[0]+1; - if (i >= gametic) // Don't copy old net commands - M_Memcpy(D_GetTextcmd(i, k), txtpak, txtsize); + M_Memcpy(D_GetTextcmd(i, k), txtpak, txtsize); txtpak += txtsize; } } @@ -4666,7 +4650,6 @@ static void Local_Maketic(INT32 realtics) void SV_SpawnPlayer(INT32 playernum, INT32 x, INT32 y, angle_t angle) { tic_t tic; - UINT8 numadjust = 0; (void)x; (void)y; @@ -4676,21 +4659,7 @@ void SV_SpawnPlayer(INT32 playernum, INT32 x, INT32 y, angle_t angle) // spawning, but will be applied afterwards. for (tic = server ? maketic : (neededtic - 1); tic >= gametic; tic--) - { - if (numadjust++ == BACKUPTICS) - { - DEBFILE(va("SV_SpawnPlayer: All netcmds for player %d adjusted!\n", playernum)); - // We already adjusted them all, waste of time doing the same thing over and over - // This shouldn't happen normally though, either gametic was 0 (which is handled now anyway) - // or maketic >= gametic + BACKUPTICS - // -- Monster Iestyn 16/01/18 - break; - } netcmds[tic%BACKUPTICS][playernum].angleturn = (INT16)((angle>>16) | TICCMD_RECEIVED); - - if (!tic) // failsafe for gametic == 0 -- Monster Iestyn 16/01/18 - break; - } } // create missed tic diff --git a/src/d_main.c b/src/d_main.c index c0de6133..8548ac49 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1168,7 +1168,7 @@ void D_SRB2Main(void) // add any files specified on the command line with -file wadfile // to the wad list - if (!(M_CheckParm("-connect") && !M_CheckParm("-server"))) + if (!(M_CheckParm("-connect"))) { if (M_CheckParm("-file")) { @@ -1325,16 +1325,8 @@ void D_SRB2Main(void) CONS_Printf("R_Init(): Init SRB2 refresh daemon.\n"); R_Init(); - // setting up sound - if (dedicated) - { - nosound = true; - nomidimusic = nodigimusic = true; - } - else - { - CONS_Printf("S_Init(): Setting up sound.\n"); - } + // setting up sound + CONS_Printf("S_Init(): Setting up sound.\n"); if (M_CheckParm("-nosound")) nosound = true; if (M_CheckParm("-nomusic")) // combines -nomidimusic and -nodigmusic @@ -1433,7 +1425,7 @@ void D_SRB2Main(void) ultimatemode = true; }*/ - if (autostart || netgame) + if (autostart || netgame || M_CheckParm("+connect") || M_CheckParm("-connect")) { gameaction = ga_nothing; @@ -1471,7 +1463,8 @@ void D_SRB2Main(void) } } - if (server && !M_CheckParm("+map")) + if (server && !M_CheckParm("+map") && !M_CheckParm("+connect") + && !M_CheckParm("-connect")) { // Prevent warping to nonexistent levels if (W_CheckNumForName(G_BuildMapName(pstartmap)) == LUMPERROR) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 05b5ee4f..d3ed20c9 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -252,17 +252,17 @@ consvar_t cv_allowseenames = {"allowseenames", "Yes", CV_NETVAR, CV_YesNo, NULL, consvar_t cv_playername = {"name", "Sonic", CV_SAVE|CV_CALL|CV_NOINIT, NULL, Name_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_playername2 = {"name2", "Tails", CV_SAVE|CV_CALL|CV_NOINIT, NULL, Name2_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_playername3 = {"name3", "Knuckles", CV_SAVE|CV_CALL|CV_NOINIT, NULL, Name3_OnChange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_playername4 = {"name4", "Dr. Eggman", CV_SAVE|CV_CALL|CV_NOINIT, NULL, Name4_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_playername4 = { "name4", "Metal Sonic", CV_SAVE|CV_CALL|CV_NOINIT, NULL, Name4_OnChange, 0, NULL, NULL, 0, 0, NULL}; // player colors -consvar_t cv_playercolor = {"color", "Blue", CV_SAVE|CV_CALL|CV_NOINIT, Color_cons_t, Color_OnChange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_playercolor2 = {"color2", "Orange", CV_SAVE|CV_CALL|CV_NOINIT, Color_cons_t, Color2_OnChange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_playercolor3 = {"color3", "Red", CV_SAVE|CV_CALL|CV_NOINIT, Color_cons_t, Color3_OnChange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_playercolor4 = {"color4", "Red", CV_SAVE|CV_CALL|CV_NOINIT, Color_cons_t, Color4_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_playercolor = {"color", "Blue", CV_CALL|CV_NOINIT, Color_cons_t, Color_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_playercolor2 = {"color2", "Orange", CV_CALL|CV_NOINIT, Color_cons_t, Color2_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_playercolor3 = {"color3", "Red", CV_CALL|CV_NOINIT, Color_cons_t, Color3_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_playercolor4 = {"color4", "Blue", CV_CALL|CV_NOINIT, Color_cons_t, Color4_OnChange, 0, NULL, NULL, 0, 0, NULL}; // player's skin, saved for commodity, when using a favorite skins wad.. -consvar_t cv_skin = {"skin", DEFAULTSKIN, CV_SAVE|CV_CALL|CV_NOINIT, NULL, Skin_OnChange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_skin2 = {"skin2", DEFAULTSKIN2, CV_SAVE|CV_CALL|CV_NOINIT, NULL, Skin2_OnChange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_skin3 = {"skin3", DEFAULTSKIN3, CV_SAVE|CV_CALL|CV_NOINIT, NULL, Skin3_OnChange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_skin4 = {"skin4", DEFAULTSKIN4, CV_SAVE|CV_CALL|CV_NOINIT, NULL, Skin4_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_skin = {"skin", DEFAULTSKIN, CV_CALL|CV_NOINIT, NULL, Skin_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_skin2 = {"skin2", DEFAULTSKIN2, CV_CALL|CV_NOINIT, NULL, Skin2_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_skin3 = {"skin3", DEFAULTSKIN3, CV_CALL|CV_NOINIT, NULL, Skin3_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_skin4 = {"skin4", DEFAULTSKIN4, CV_CALL|CV_NOINIT, NULL, Skin4_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_skipmapcheck = {"skipmapcheck", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -682,6 +682,7 @@ void D_RegisterServerCommands(void) */ void D_RegisterClientCommands(void) { + const char *username; INT32 i; for (i = 0; i < MAXSKINCOLORS; i++) @@ -742,6 +743,8 @@ void D_RegisterClientCommands(void) #endif // register these so it is saved to config + if ((username = I_GetUserName())) + cv_playername.defaultvalue = username; CV_RegisterVar(&cv_playername); CV_RegisterVar(&cv_playercolor); CV_RegisterVar(&cv_skin); // r_things.c (skin NAME) @@ -1802,12 +1805,7 @@ static void Command_Playdemo_f(void) CONS_Printf(M_GetText("Playing back demo '%s'.\n"), name); - // Internal if no extension, external if one exists - // If external, convert the file name to a path in SRB2's home directory - if (FIL_CheckExtension(name)) - G_DoPlayDemo(va("%s"PATHSEP"%s", srb2home, name)); - else - G_DoPlayDemo(name); + G_DoPlayDemo(name); } static void Command_Timedemo_f(void) diff --git a/src/d_netfil.c b/src/d_netfil.c index 6742cfe2..172624ad 100644 --- a/src/d_netfil.c +++ b/src/d_netfil.c @@ -990,41 +990,19 @@ filestatus_t checkfilemd5(char *filename, const UINT8 *wantedmd5sum) return FS_FOUND; // will never happen, but makes the compiler shut up } -// Rewritten by Monster Iestyn to be less stupid -// Note: if completepath is true, "filename" is modified, but only if FS_FOUND is going to be returned -// (Don't worry about WinCE's version of filesearch, nobody cares about that OS anymore) filestatus_t findfile(char *filename, const UINT8 *wantedmd5sum, boolean completepath) { - filestatus_t homecheck; // store result of last file search - boolean badmd5 = false; // store whether md5 was bad from either of the first two searches (if nothing was found in the third) + filestatus_t homecheck = filesearch(filename, srb2home, wantedmd5sum, false, 10); + if (homecheck == FS_FOUND) + return filesearch(filename, srb2home, wantedmd5sum, completepath, 10); - // first, check SRB2's "home" directory - homecheck = filesearch(filename, srb2home, wantedmd5sum, completepath, 10); + homecheck = filesearch(filename, srb2path, wantedmd5sum, false, 10); + if (homecheck == FS_FOUND) + return filesearch(filename, srb2path, wantedmd5sum, completepath, 10); - if (homecheck == FS_FOUND) // we found the file, so return that we have :) - return FS_FOUND; - else if (homecheck == FS_MD5SUMBAD) // file has a bad md5; move on and look for a file with the right md5 - badmd5 = true; - // if not found at all, just move on without doing anything - - // next, check SRB2's "path" directory - homecheck = filesearch(filename, srb2path, wantedmd5sum, completepath, 10); - - if (homecheck == FS_FOUND) // we found the file, so return that we have :) - return FS_FOUND; - else if (homecheck == FS_MD5SUMBAD) // file has a bad md5; move on and look for a file with the right md5 - badmd5 = true; - // if not found at all, just move on without doing anything - - // finally check "." directory #ifdef _arch_dreamcast - homecheck = filesearch(filename, "/cd", wantedmd5sum, completepath, 10); + return filesearch(filename, "/cd", wantedmd5sum, completepath, 10); #else - homecheck = filesearch(filename, ".", wantedmd5sum, completepath, 10); + return filesearch(filename, ".", wantedmd5sum, completepath, 10); #endif - - if (homecheck != FS_NOTFOUND) // if not found this time, fall back on the below return statement - return homecheck; // otherwise return the result we got - - return (badmd5 ? FS_MD5SUMBAD : FS_NOTFOUND); // md5 sum bad or file not found } diff --git a/src/dehacked.c b/src/dehacked.c index 09a892cd..f2caf154 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1883,6 +1883,7 @@ static void readframe(MYFILE *f, INT32 num) char *word1; char *word2 = NULL; char *tmp; + INT32 j; do { @@ -1897,6 +1898,16 @@ static void readframe(MYFILE *f, INT32 num) if (s == tmp) continue; // Skip comment lines, but don't break. + for (j = 0; s[j] != '\n'; j++) + { + if (s[j] == '=') + { + j += 2; + j = atoi(&s[j]); + break; + } + } + word1 = strtok(s, " "); if (word1) strupr(word1); diff --git a/src/f_finale.c b/src/f_finale.c index 913d7625..e6cd6d0e 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -222,19 +222,11 @@ static void F_SkyScroll(INT32 scrollspeed) #ifdef HWRENDER else if (rendermode != render_none) { // if only software rendering could be this simple and retarded - INT32 dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy); - INT32 y, pw = SHORT(pat->width) * dupz, ph = SHORT(pat->height) * dupz; - scrolled = animtimer * dupz; - for (x = 0; x < vid.width; x += pw) - { - for (y = 0; y < vid.height; y += ph) - { - if (scrolled > 0) - V_DrawScaledPatch(scrolled - pw, y, V_NOSCALESTART, pat); - - V_DrawScaledPatch(x + scrolled, y, V_NOSCALESTART, pat); - } - } + scrolled = animtimer; + if (scrolled > 0) + V_DrawScaledPatch(scrolled - SHORT(pat->width), 0, 0, pat); + for (x = 0; x < fakedwidth; x += SHORT(pat->width)) + V_DrawScaledPatch(x + scrolled, 0, 0, pat); } #endif diff --git a/src/g_game.c b/src/g_game.c index 4d04052a..0263b2a7 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1159,14 +1159,13 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) INT32 laim, th, tspeed, forward, side, axis; //i const INT32 speed = 1; // these ones used for multiple conditions - boolean turnleft, turnright, invertmouse, mouseaiming, lookaxis, analog, analogjoystickmove, gamepadjoystickmove, kbl, rd; + boolean turnleft, turnright, invertmouse, mouseaiming, lookaxis, analog, analogjoystickmove, gamepadjoystickmove, kbl; player_t *player; camera_t *thiscam; angle_t lang; static INT32 turnheld, turnheld2, turnheld3, turnheld4; // for accelerative turning static boolean keyboard_look, keyboard_look2, keyboard_look3, keyboard_look4; // true if lookup/down using keyboard - static boolean resetdown, resetdown2, resetdown3, resetdown4; // don't cam reset every frame switch (ssplayer) { @@ -1177,7 +1176,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) laim = localaiming2; th = turnheld2; kbl = keyboard_look2; - rd = resetdown2; G_CopyTiccmd(cmd, I_BaseTiccmd2(), 1); break; case 3: @@ -1187,7 +1185,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) laim = localaiming3; th = turnheld3; kbl = keyboard_look3; - rd = resetdown3; G_CopyTiccmd(cmd, I_BaseTiccmd3(), 1); break; case 4: @@ -1197,7 +1194,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) laim = localaiming4; th = turnheld4; kbl = keyboard_look4; - rd = resetdown4; G_CopyTiccmd(cmd, I_BaseTiccmd4(), 1); break; case 1: @@ -1208,7 +1204,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) laim = localaiming; th = turnheld; kbl = keyboard_look; - rd = resetdown; G_CopyTiccmd(cmd, I_BaseTiccmd(), 1); // empty, or external driver break; } @@ -1405,15 +1400,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) if (InputDown(gc_custom3, ssplayer)) cmd->buttons |= BT_CUSTOM3; - if (InputDown(gc_camreset, ssplayer)) - { - if (thiscam->chase && !rd) - P_ResetCamera(player, thiscam); - rd = true; - } - else - rd = false; - // player aiming shit, ahhhh... { INT32 player_invert = invertmouse ? -1 : 1; @@ -1569,7 +1555,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) localaiming2 = laim; keyboard_look2 = kbl; turnheld2 = th; - resetdown2 = rd; camspin2 = InputDown(gc_lookback, ssplayer); break; case 3: @@ -1577,7 +1562,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) localaiming3 = laim; keyboard_look3 = kbl; turnheld3 = th; - resetdown3 = rd; camspin3 = InputDown(gc_lookback, ssplayer); break; case 4: @@ -1585,7 +1569,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) localaiming4 = laim; keyboard_look4 = kbl; turnheld4 = th; - resetdown4 = rd; camspin4 = InputDown(gc_lookback, ssplayer); break; case 1: @@ -1594,7 +1577,6 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) localaiming = laim; keyboard_look = kbl; turnheld = th; - resetdown = rd; camspin = InputDown(gc_lookback, ssplayer); break; } @@ -4086,8 +4068,7 @@ void G_InitNew(UINT8 pultmode, const char *mapname, boolean resetplayer, boolean unlocktriggers = 0; // clear itemfinder, just in case - if (!dedicated) // except in dedicated servers, where it is not registered and can actually I_Error debug builds - CV_StealthSetValue(&cv_itemfinder, 0); + CV_StealthSetValue(&cv_itemfinder, 0); } // internal game map diff --git a/src/g_input.c b/src/g_input.c index df0ee776..485263cb 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -1293,6 +1293,7 @@ void G_Controldefault(void) gamecontrol[gc_lookback ][1] = KEY_JOY1+5; // RB // Extra controls + gamecontrol[gc_camtoggle ][0] = KEY_BACKSPACE; gamecontrol[gc_pause ][0] = KEY_PAUSE; gamecontrol[gc_console ][0] = KEY_CONSOLE; gamecontrol[gc_talkkey ][0] = 't'; @@ -1303,47 +1304,10 @@ void G_Controldefault(void) gamecontrol[gc_scores ][1] = KEY_JOY1+6; // Back gamecontrol[gc_spectate ][1] = KEY_JOY1+7; // Start (This is sort of like MP's pause...?) + // Spectator controls gamecontrol[gc_lookup ][0] = KEY_PGUP; gamecontrol[gc_lookdown ][0] = KEY_PGDN; gamecontrol[gc_centerview ][0] = KEY_END; - gamecontrol[gc_camreset ][0] = KEY_HOME; - gamecontrol[gc_camtoggle ][0] = KEY_BACKSPACE; - - // Player 2 controls - gamecontrolbis[gc_aimforward ][0] = KEY_2HAT1+0; - gamecontrolbis[gc_aimbackward][0] = KEY_2HAT1+1; - gamecontrolbis[gc_turnleft ][0] = KEY_2HAT1+2; - gamecontrolbis[gc_turnright ][0] = KEY_2HAT1+3; - gamecontrolbis[gc_accelerate ][0] = KEY_2JOY1+0; // A - gamecontrolbis[gc_drift ][0] = KEY_2JOY1+1; // X - gamecontrolbis[gc_brake ][0] = KEY_2JOY1+2; // B - gamecontrolbis[gc_fire ][0] = KEY_2JOY1+4; // LB - gamecontrolbis[gc_lookback ][0] = KEY_2JOY1+5; // RB - gamecontrolbis[gc_spectate ][0] = KEY_2JOY1+7; // Start - - // Player 3 controls - gamecontrol3[gc_aimforward ][0] = KEY_3HAT1+0; - gamecontrol3[gc_aimbackward][0] = KEY_3HAT1+1; - gamecontrol3[gc_turnleft ][0] = KEY_3HAT1+2; - gamecontrol3[gc_turnright ][0] = KEY_3HAT1+3; - gamecontrol3[gc_accelerate ][0] = KEY_3JOY1+0; // A - gamecontrol3[gc_drift ][0] = KEY_3JOY1+1; // X - gamecontrol3[gc_brake ][0] = KEY_3JOY1+2; // B - gamecontrol3[gc_fire ][0] = KEY_3JOY1+4; // LB - gamecontrol3[gc_lookback ][0] = KEY_3JOY1+5; // RB - gamecontrol3[gc_spectate ][0] = KEY_3JOY1+7; // Start - - // Player 4 controls - gamecontrol4[gc_aimforward ][0] = KEY_4HAT1+0; - gamecontrol4[gc_aimbackward][0] = KEY_4HAT1+1; - gamecontrol4[gc_turnleft ][0] = KEY_4HAT1+2; - gamecontrol4[gc_turnright ][0] = KEY_4HAT1+3; - gamecontrol4[gc_accelerate ][0] = KEY_4JOY1+0; // A - gamecontrol4[gc_drift ][0] = KEY_4JOY1+1; // X - gamecontrol4[gc_brake ][0] = KEY_4JOY1+2; // B - gamecontrol4[gc_fire ][0] = KEY_4JOY1+4; // LB - gamecontrol4[gc_lookback ][0] = KEY_4JOY1+5; // RB - gamecontrol4[gc_spectate ][0] = KEY_4JOY1+7; // Start } //#endif diff --git a/src/g_input.h b/src/g_input.h index 7e49fff3..6f2c6516 100644 --- a/src/g_input.h +++ b/src/g_input.h @@ -103,7 +103,6 @@ typedef enum gc_brake, gc_fire, gc_lookback, - gc_camreset, gc_camtoggle, gc_spectate, gc_lookup, diff --git a/src/hardware/hw_defs.h b/src/hardware/hw_defs.h index 9a490a96..48029138 100644 --- a/src/hardware/hw_defs.h +++ b/src/hardware/hw_defs.h @@ -20,8 +20,8 @@ #define _HWR_DEFS_ #include "../doomtype.h" -#define ZCLIP_PLANE 4.0f // Used for the actual game drawing -#define NZCLIP_PLANE 0.9f // Seems to be only used for the HUD and screen textures +#define ZCLIP_PLANE 4.0f +#define NZCLIP_PLANE 0.9f // ========================================================================== // SIMPLE TYPES @@ -134,13 +134,12 @@ enum EPolyFlags PF_Masked = 0x00000001, // Poly is alpha scaled and 0 alpha pels are discarded (holes in texture) PF_Translucent = 0x00000002, // Poly is transparent, alpha = level of transparency - PF_Additive = 0x00000004, // Poly is added to the frame buffer + PF_Additive = 0x00000024, // Poly is added to the frame buffer PF_Environment = 0x00000008, // Poly should be drawn environment mapped. // Hurdler: used for text drawing PF_Substractive = 0x00000010, // for splat PF_NoAlphaTest = 0x00000020, // hiden param - PF_Fog = 0x00000040, // Fog blocks - PF_Blending = (PF_Environment|PF_Additive|PF_Translucent|PF_Masked|PF_Substractive|PF_Fog)&~PF_NoAlphaTest, + PF_Blending = (PF_Environment|PF_Additive|PF_Translucent|PF_Masked|PF_Substractive)&~PF_NoAlphaTest, // other flag bits diff --git a/src/hardware/hw_draw.c b/src/hardware/hw_draw.c index c142e74c..108482a5 100644 --- a/src/hardware/hw_draw.c +++ b/src/hardware/hw_draw.c @@ -147,7 +147,10 @@ void HWR_DrawFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale, // | /| // |/ | // 0--1 - float dupx, dupy, fscale, fwidth, fheight; + float sdupx = FIXED_TO_FLOAT(vid.fdupx)*2.0f; + float sdupy = FIXED_TO_FLOAT(vid.fdupy)*2.0f; + float pdupx = FIXED_TO_FLOAT(vid.fdupx)*2.0f*FIXED_TO_FLOAT(pscale); + float pdupy = FIXED_TO_FLOAT(vid.fdupy)*2.0f*FIXED_TO_FLOAT(pscale); if (alphalevel >= 10 && alphalevel < 13) return; @@ -158,40 +161,23 @@ void HWR_DrawFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscale, else HWR_GetMappedPatch(gpatch, colormap); - dupx = (float)vid.dupx; - dupy = (float)vid.dupy; - switch (option & V_SCALEPATCHMASK) { case V_NOSCALEPATCH: - dupx = dupy = 1.0f; + pdupx = pdupy = 2.0f; break; case V_SMALLSCALEPATCH: - dupx = (float)vid.smalldupx; - dupy = (float)vid.smalldupy; + pdupx = 2.0f * FIXED_TO_FLOAT(vid.fsmalldupx); + pdupy = 2.0f * FIXED_TO_FLOAT(vid.fsmalldupy); break; case V_MEDSCALEPATCH: - dupx = (float)vid.meddupx; - dupy = (float)vid.meddupy; + pdupx = 2.0f * FIXED_TO_FLOAT(vid.fmeddupx); + pdupy = 2.0f * FIXED_TO_FLOAT(vid.fmeddupy); break; } - dupx = dupy = (dupx < dupy ? dupx : dupy); - fscale = FIXED_TO_FLOAT(pscale); - - if (option & V_OFFSET) - { - cx -= (float)gpatch->leftoffset * dupx * fscale; - cy -= (float)gpatch->topoffset * dupy * fscale; - } - else - { - cy -= (float)gpatch->topoffset * fscale; - if (option & V_FLIP) - cx -= ((float)gpatch->width - (float)gpatch->leftoffset) * fscale; - else - cx -= (float)gpatch->leftoffset * fscale; - } + if (option & V_NOSCALESTART) + sdupx = sdupy = 2.0f; if (option & V_SPLITSCREEN) cy += FIXED_TO_FLOAT((BASEVIDHEIGHT/2)<= -0.1f && cx <= 0.1f && SHORT(gpatch->width) == BASEVIDWIDTH && cy >= -0.1f && cy <= 0.1f && SHORT(gpatch->height) == BASEVIDHEIGHT) - { - // Need to temporarily cache the real patch to get the colour of the top left pixel - patch_t *realpatch = W_CacheLumpNumPwad(gpatch->wadnum, gpatch->lumpnum, PU_STATIC); - const column_t *column = (const column_t *)((const UINT8 *)(realpatch) + LONG((realpatch)->columnofs[0])); - const UINT8 *source = (const UINT8 *)(column) + 3; - HWR_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, (column->topdelta == 0xff ? 31 : source[0])); - Z_Free(realpatch); - } - // centre screen - if (vid.width != BASEVIDWIDTH * vid.dupx) - { - if (option & V_SNAPTORIGHT) - cx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx)); - else if (!(option & V_SNAPTOLEFT)) - cx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx))/2; - } - if (vid.height != BASEVIDHEIGHT * vid.dupy) - { - if ((option & (V_SPLITSCREEN|V_SNAPTOBOTTOM)) == (V_SPLITSCREEN|V_SNAPTOBOTTOM)) - cy += ((float)vid.height/2 - ((float)BASEVIDHEIGHT/2 * dupy)); - else if (option & V_SNAPTOBOTTOM) - cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)); - else if (!(option & V_SNAPTOTOP)) - cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy))/2; - } - } - } - - if (pscale != FRACUNIT) - { - fwidth = (float)gpatch->width * fscale * dupx; - fheight = (float)gpatch->height * fscale * dupy; + v[0].x = v[3].x = (cx*sdupx-(gpatch->width-gpatch->leftoffset)*pdupx)/vid.width - 1; + v[2].x = v[1].x = (cx*sdupx+gpatch->leftoffset*pdupx)/vid.width - 1; } else { - fwidth = (float)gpatch->width * dupx; - fheight = (float)gpatch->height * dupy; + v[0].x = v[3].x = (cx*sdupx-gpatch->leftoffset*pdupx)/vid.width - 1; + v[2].x = v[1].x = (cx*sdupx+(gpatch->width-gpatch->leftoffset)*pdupx)/vid.width - 1; } - // positions of the cx, cy, are between 0 and vid.width/vid.height now, we need them to be between -1 and 1 - cx = -1 + (cx / (vid.width/2)); - cy = 1 - (cy / (vid.height/2)); - - // fwidth and fheight are similar - fwidth /= vid.width / 2; - fheight /= vid.height / 2; - - // set the polygon vertices to the right positions - v[0].x = v[3].x = cx; - v[2].x = v[1].x = cx + fwidth; - - v[0].y = v[1].y = cy; - v[2].y = v[3].y = cy - fheight; + v[0].y = v[1].y = 1-(cy*sdupy-gpatch->topoffset*pdupy)/vid.height; + v[2].y = v[3].y = 1-(cy*sdupy+(gpatch->height-gpatch->topoffset)*pdupy)/vid.height; v[0].z = v[1].z = v[2].z = v[3].z = 1.0f; @@ -315,7 +250,10 @@ void HWR_DrawCroppedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscal // | /| // |/ | // 0--1 - float dupx, dupy, fscale, fwidth, fheight; + float sdupx = FIXED_TO_FLOAT(vid.fdupx)*2.0f; + float sdupy = FIXED_TO_FLOAT(vid.fdupy)*2.0f; + float pdupx = FIXED_TO_FLOAT(vid.fdupx)*2.0f*FIXED_TO_FLOAT(pscale); + float pdupy = FIXED_TO_FLOAT(vid.fdupy)*2.0f*FIXED_TO_FLOAT(pscale); if (alphalevel >= 10 && alphalevel < 13) return; @@ -323,109 +261,28 @@ void HWR_DrawCroppedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscal // make patch ready in hardware cache HWR_GetPatch(gpatch); - dupx = (float)vid.dupx; - dupy = (float)vid.dupy; - switch (option & V_SCALEPATCHMASK) { case V_NOSCALEPATCH: - dupx = dupy = 1.0f; + pdupx = pdupy = 2.0f; break; case V_SMALLSCALEPATCH: - dupx = (float)vid.smalldupx; - dupy = (float)vid.smalldupy; + pdupx = 2.0f * FIXED_TO_FLOAT(vid.fsmalldupx); + pdupy = 2.0f * FIXED_TO_FLOAT(vid.fsmalldupy); break; case V_MEDSCALEPATCH: - dupx = (float)vid.meddupx; - dupy = (float)vid.meddupy; + pdupx = 2.0f * FIXED_TO_FLOAT(vid.fmeddupx); + pdupy = 2.0f * FIXED_TO_FLOAT(vid.fmeddupy); break; } - dupx = dupy = (dupx < dupy ? dupx : dupy); - fscale = FIXED_TO_FLOAT(pscale); + if (option & V_NOSCALESTART) + sdupx = sdupy = 2.0f; - cy -= (float)gpatch->topoffset * fscale; - cx -= (float)gpatch->leftoffset * fscale; - - if (!(option & V_NOSCALESTART)) - { - cx = cx * dupx; - cy = cy * dupy; - - if (!(option & V_SCALEPATCHMASK)) - { - // if it's meant to cover the whole screen, black out the rest - // cx and cy are possibly *slightly* off from float maths - // This is done before here compared to software because we directly alter cx and cy to centre - if (cx >= -0.1f && cx <= 0.1f && SHORT(gpatch->width) == BASEVIDWIDTH && cy >= -0.1f && cy <= 0.1f && SHORT(gpatch->height) == BASEVIDHEIGHT) - { - // Need to temporarily cache the real patch to get the colour of the top left pixel - patch_t *realpatch = W_CacheLumpNumPwad(gpatch->wadnum, gpatch->lumpnum, PU_STATIC); - const column_t *column = (const column_t *)((const UINT8 *)(realpatch) + LONG((realpatch)->columnofs[0])); - const UINT8 *source = (const UINT8 *)(column) + 3; - HWR_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, (column->topdelta == 0xff ? 31 : source[0])); - Z_Free(realpatch); - } - // centre screen - if (vid.width != BASEVIDWIDTH * vid.dupx) - { - if (option & V_SNAPTORIGHT) - cx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx)); - else if (!(option & V_SNAPTOLEFT)) - cx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx))/2; - } - if (vid.height != BASEVIDHEIGHT * vid.dupy) - { - if ((option & (V_SPLITSCREEN|V_SNAPTOBOTTOM)) == (V_SPLITSCREEN|V_SNAPTOBOTTOM)) - cy += ((float)vid.height/2 - ((float)BASEVIDHEIGHT/2 * dupy)); - else if (option & V_SNAPTOBOTTOM) - cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)); - else if (!(option & V_SNAPTOTOP)) - cy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy))/2; - } - } - } - - fwidth = w; - fheight = h; - - if (fwidth > w - sx) - fwidth = w - sx; - - if (fheight > h - sy) - fheight = h - sy; - - if (fwidth > gpatch->width) - fwidth = gpatch->width; - - if (fheight > gpatch->height) - fheight = gpatch->height; - - if (pscale != FRACUNIT) - { - fwidth *= fscale * dupx; - fheight *= fscale * dupy; - } - else - { - fwidth *= dupx; - fheight *= dupy; - } - - // positions of the cx, cy, are between 0 and vid.width/vid.height now, we need them to be between -1 and 1 - cx = -1 + (cx / (vid.width/2)); - cy = 1 - (cy / (vid.height/2)); - - // fwidth and fheight are similar - fwidth /= vid.width / 2; - fheight /= vid.height / 2; - - // set the polygon vertices to the right positions - v[0].x = v[3].x = cx; - v[2].x = v[1].x = cx + fwidth; - - v[0].y = v[1].y = cy; - v[2].y = v[3].y = cy - fheight; + v[0].x = v[3].x = (cx*sdupx - gpatch->leftoffset * pdupx) / vid.width - 1; + v[2].x = v[1].x = (cx*sdupx + ((w-sx) - gpatch->leftoffset) * pdupx) / vid.width - 1; + v[0].y = v[1].y = 1 - (cy*sdupy - gpatch->topoffset * pdupy) / vid.height; + v[2].y = v[3].y = 1 - (cy*sdupy + ((h-sy) - gpatch->topoffset) * pdupy) / vid.height; v[0].z = v[1].z = v[2].z = v[3].z = 1.0f; @@ -802,7 +659,7 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color) { FOutVector v[4]; FSurfaceInfo Surf; - float fx, fy, fw, fh; + float sdupx, sdupy; if (w < 0 || h < 0) return; // consistency w/ software @@ -811,79 +668,16 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color) // | /| // |/ | // 0--1 + sdupx = FIXED_TO_FLOAT(vid.fdupx)*2.0f; + sdupy = FIXED_TO_FLOAT(vid.fdupy)*2.0f; - fx = (float)x; - fy = (float)y; - fw = (float)w; - fh = (float)h; + if (color & V_NOSCALESTART) + sdupx = sdupy = 2.0f; - if (!(color & V_NOSCALESTART)) - { - float dupx = (float)vid.dupx, dupy = (float)vid.dupy; - - if (x == 0 && y == 0 && w == BASEVIDWIDTH && h == BASEVIDHEIGHT) - { - RGBA_t rgbaColour = V_GetColor(color); - FRGBAFloat clearColour; - clearColour.red = (float)rgbaColour.s.red / 255; - clearColour.green = (float)rgbaColour.s.green / 255; - clearColour.blue = (float)rgbaColour.s.blue / 255; - clearColour.alpha = 1; - HWD.pfnClearBuffer(true, false, &clearColour); - return; - } - - fx *= dupx; - fy *= dupy; - fw *= dupx; - fh *= dupy; - - if (vid.width != BASEVIDWIDTH * vid.dupx) - { - if (color & V_SNAPTORIGHT) - fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx)); - else if (!(color & V_SNAPTOLEFT)) - fx += ((float)vid.width - ((float)BASEVIDWIDTH * dupx)) / 2; - } - if (vid.height != BASEVIDHEIGHT * dupy) - { - // same thing here - if (color & V_SNAPTOBOTTOM) - fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)); - else if (!(color & V_SNAPTOTOP)) - fy += ((float)vid.height - ((float)BASEVIDHEIGHT * dupy)) / 2; - } - } - - if (fx >= vid.width || fy >= vid.height) - return; - if (fx < 0) - { - fw += fx; - fx = 0; - } - if (fy < 0) - { - fh += fy; - fy = 0; - } - - if (fw <= 0 || fh <= 0) - return; - if (fx + fw > vid.width) - fw = (float)vid.width - fx; - if (fy + fh > vid.height) - fh = (float)vid.height - fy; - - fx = -1 + fx / (vid.width / 2); - fy = 1 - fy / (vid.height / 2); - fw = fw / (vid.width / 2); - fh = fh / (vid.height / 2); - - v[0].x = v[3].x = fx; - v[2].x = v[1].x = fx + fw; - v[0].y = v[1].y = fy; - v[2].y = v[3].y = fy - fh; + v[0].x = v[3].x = (x*sdupx)/vid.width - 1; + v[2].x = v[1].x = (x*sdupx + w*sdupx)/vid.width - 1; + v[0].y = v[1].y = 1-(y*sdupy)/vid.height; + v[2].y = v[3].y = 1-(y*sdupy + h*sdupy)/vid.height; //Hurdler: do we still use this argb color? if not, we should remove it v[0].argb = v[1].argb = v[2].argb = v[3].argb = 0xff00ff00; //; diff --git a/src/hardware/hw_drv.h b/src/hardware/hw_drv.h index a5ac8200..7672f47c 100644 --- a/src/hardware/hw_drv.h +++ b/src/hardware/hw_drv.h @@ -79,7 +79,6 @@ EXPORT char *HWRAPI(GetRenderer) (void); #define SCREENVERTS 10 EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2]); #endif -EXPORT void HWRAPI(FlushScreenTextures) (void); EXPORT void HWRAPI(StartScreenWipe) (void); EXPORT void HWRAPI(EndScreenWipe) (void); EXPORT void HWRAPI(DoScreenWipe) (float alpha); @@ -125,7 +124,6 @@ struct hwdriver_s #ifdef SHUFFLE PostImgRedraw pfnPostImgRedraw; #endif - FlushScreenTextures pfnFlushScreenTextures; StartScreenWipe pfnStartScreenWipe; EndScreenWipe pfnEndScreenWipe; DoScreenWipe pfnDoScreenWipe; diff --git a/src/hardware/hw_glob.h b/src/hardware/hw_glob.h index fea06caf..5d1a81d4 100644 --- a/src/hardware/hw_glob.h +++ b/src/hardware/hw_glob.h @@ -68,7 +68,6 @@ typedef struct gr_vissprite_s struct gr_vissprite_s *prev; struct gr_vissprite_s *next; float x1, x2; - float z1, z2; float tz, ty; lumpnum_t patchlumpnum; boolean flip; @@ -79,6 +78,7 @@ typedef struct gr_vissprite_s //Hurdler: 25/04/2000: now support colormap in hardware mode UINT8 *colormap; INT32 dispoffset; // copy of info->dispoffset, affects ordering but not drawing + float z1, z2; } gr_vissprite_t; // -------- diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index b7797e54..d990f59a 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -117,7 +117,7 @@ consvar_t cv_grfiltermode = {"gr_filtermode", "Nearest", CV_CALL, grfiltermode_c consvar_t cv_granisotropicmode = {"gr_anisotropicmode", "1", CV_CALL, granisotropicmode_cons_t, CV_anisotropic_ONChange, 0, NULL, NULL, 0, 0, NULL}; //static consvar_t cv_grzbuffer = {"gr_zbuffer", "On", 0, CV_OnOff}; -consvar_t cv_grcorrecttricks = {"gr_correcttricks", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_grcorrecttricks = {"gr_correcttricks", "On", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_grsolvetjoin = {"gr_solvetjoin", "On", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static void CV_FogDensity_ONChange(void) @@ -493,10 +493,10 @@ UINT32 HWR_Lighting(INT32 light, UINT32 color, UINT32 fadecolor, boolean fogbloc } -static UINT8 HWR_FogBlockAlpha(INT32 light, UINT32 color) // Let's see if this can work +static UINT8 HWR_FogBlockAlpha(INT32 light, UINT32 color, UINT32 fadecolor) // Let's see if this can work { - RGBA_t realcolor, surfcolor; - INT32 alpha; + RGBA_t realcolor, fogcolor, surfcolor; + INT32 alpha, fogalpha; // Don't go out of bounds if (light < 0) @@ -505,11 +505,13 @@ static UINT8 HWR_FogBlockAlpha(INT32 light, UINT32 color) // Let's see if this c light = 255; realcolor.rgba = color; + fogcolor.rgba = fadecolor; alpha = (realcolor.s.alpha*255)/25; + fogalpha = (fogcolor.s.alpha*255)/25; - // at 255 brightness, alpha is between 0 and 127, at 0 brightness alpha will always be 255 - surfcolor.s.alpha = (alpha*light)/(2*256)+255-light; + // Fog blocks seem to get slightly more opaque with more opaque colourmap opacity, and much more opaque with darker brightness + surfcolor.s.alpha = (UINT8)(CALCLIGHT(light, ((0xFF-light)+alpha)/2)+CALCLIGHT(0xFF-light, ((light)+fogalpha)/2)); return surfcolor.s.alpha; } @@ -775,10 +777,10 @@ static void HWR_RenderPlane(sector_t *sector, extrasubsector_t *xsub, boolean is Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, true); } - if (PolyFlags & (PF_Translucent|PF_Fog)) + if (PolyFlags & PF_Translucent) { Surf.FlatColor.s.alpha = (UINT8)alpha; - PolyFlags |= PF_Modulated|PF_Clip; + PolyFlags |= PF_Modulated|PF_Occlude|PF_Clip; } else PolyFlags |= PF_Masked|PF_Modulated|PF_Clip; @@ -1069,11 +1071,12 @@ static float HWR_ClipViewSegment(INT32 x, polyvertex_t *v1, polyvertex_t *v2) // // HWR_SplitWall // -static void HWR_SplitWall(sector_t *sector, wallVert3D *wallVerts, INT32 texnum, FSurfaceInfo* Surf, UINT32 cutflag, ffloor_t *pfloor) +static void HWR_SplitWall(sector_t *sector, wallVert3D *wallVerts, INT32 texnum, FSurfaceInfo* Surf, UINT32 cutflag) { /* SoM: split up and light walls according to the lightlist. This may also include leaving out parts of the wall that can't be seen */ + GLTexture_t * glTex; float realtop, realbot, top, bot; float pegt, pegb, pegmul; @@ -1096,8 +1099,8 @@ static void HWR_SplitWall(sector_t *sector, wallVert3D *wallVerts, INT32 texnum, INT32 solid, i; lightlist_t * list = sector->lightlist; const UINT8 alpha = Surf->FlatColor.s.alpha; - FUINT lightnum = sector->lightlevel; - extracolormap_t *colormap = NULL; + FUINT lightnum; + extracolormap_t *colormap; realtop = top = wallVerts[3].y; realbot = bot = wallVerts[0].y; @@ -1113,7 +1116,7 @@ static void HWR_SplitWall(sector_t *sector, wallVert3D *wallVerts, INT32 texnum, endpegmul = (endpegb - endpegt) / (endtop - endbot); #endif - for (i = 0; i < sector->numlights; i++) + for (i = 1; i < sector->numlights; i++) { #ifdef ESLOPE if (endtop < endrealbot) @@ -1121,38 +1124,35 @@ static void HWR_SplitWall(sector_t *sector, wallVert3D *wallVerts, INT32 texnum, if (top < realbot) return; - // There's a compiler warning here if this comment isn't here because of indentation - if (!(list[i].flags & FF_NOSHADE)) - { - if (pfloor && (pfloor->flags & FF_FOG)) - { - lightnum = pfloor->master->frontsector->lightlevel; - colormap = pfloor->master->frontsector->extra_colormap; - } - else - { - lightnum = *list[i].lightlevel; - colormap = list[i].extra_colormap; - } - } + //Hurdler: fix a crashing bug, but is it correct? +// if (!list[i].caster) +// continue; solid = false; - if ((sector->lightlist[i].flags & FF_CUTSOLIDS) && !(cutflag & FF_EXTRA)) - solid = true; - else if ((sector->lightlist[i].flags & FF_CUTEXTRA) && (cutflag & FF_EXTRA)) + if (list[i].caster) { - if (sector->lightlist[i].flags & FF_EXTRA) + if (sector->lightlist[i].caster->flags & FF_CUTSOLIDS && !(cutflag & FF_EXTRA)) + solid = true; + else if (sector->lightlist[i].caster->flags & FF_CUTEXTRA && cutflag & FF_EXTRA) { - if ((sector->lightlist[i].flags & (FF_FOG|FF_SWIMMABLE)) == (cutflag & (FF_FOG|FF_SWIMMABLE))) // Only merge with your own types + if (sector->lightlist[i].caster->flags & FF_EXTRA) + { + if (sector->lightlist[i].caster->flags == cutflag) // Only merge with your own types + solid = true; + } + else solid = true; } else - solid = true; + solid = false; } else solid = false; + if (cutflag == FF_CUTSOLIDS) // These are regular walls sent in from StoreWallRange, they shouldn't be cut from this + solid = false; + #ifdef ESLOPE if (list[i].slope) { @@ -1192,55 +1192,34 @@ static void HWR_SplitWall(sector_t *sector, wallVert3D *wallVerts, INT32 texnum, if (solid && endtop > endbheight) endtop = endbheight; #endif - } - -#ifdef ESLOPE - if (i + 1 < sector->numlights) - { - if (list[i+1].slope) - { - temp = P_GetZAt(list[i+1].slope, v1x, v1y); - bheight = FIXED_TO_FLOAT(temp); - temp = P_GetZAt(list[i+1].slope, v2x, v2y); - endbheight = FIXED_TO_FLOAT(temp); - } - else - bheight = endbheight = FIXED_TO_FLOAT(list[i+1].height); - } - else - { - bheight = realbot; - endbheight = endrealbot; - } -#else - if (i + 1 < sector->numlights) - { - bheight = FIXED_TO_FLOAT(list[i+1].height); - } - else - { - bheight = realbot; - } -#endif - -#ifdef ESLOPE - if (endbheight >= endtop) -#endif - if (bheight >= top) continue; + } //Found a break; - bot = bheight; + bot = height; if (bot < realbot) bot = realbot; #ifdef ESLOPE - endbot = endbheight; + endbot = endheight; if (endbot < endrealbot) endbot = endrealbot; #endif + + // colormap test + if (list[i-1].caster) + { + lightnum = *list[i-1].lightlevel; + colormap = list[i-1].extra_colormap; + } + else + { + lightnum = sector->lightlevel; + colormap = sector->extra_colormap; + } + Surf->FlatColor.s.alpha = alpha; #ifdef ESLOPE @@ -1263,16 +1242,23 @@ static void HWR_SplitWall(sector_t *sector, wallVert3D *wallVerts, INT32 texnum, wallVerts[0].y = wallVerts[1].y = bot; #endif - if (cutflag & FF_FOG) - HWR_AddTransparentWall(wallVerts, Surf, texnum, PF_Fog|PF_NoTexture, true, lightnum, colormap); - else if (cutflag & FF_TRANSLUCENT) + glTex = HWR_GetTexture(texnum); + if (cutflag & FF_TRANSLUCENT) HWR_AddTransparentWall(wallVerts, Surf, texnum, PF_Translucent, false, lightnum, colormap); + else if (glTex->mipmap.flags & TF_TRANSPARENT) + HWR_AddTransparentWall(wallVerts, Surf, texnum, PF_Environment, false, lightnum, colormap); else HWR_ProjectWall(wallVerts, Surf, PF_Masked, lightnum, colormap); - top = bot; + if (solid) + top = bheight; + else + top = height; #ifdef ESLOPE - endtop = endbot; + if (solid) + endtop = endbheight; + else + endtop = endheight; #endif } @@ -1284,7 +1270,17 @@ static void HWR_SplitWall(sector_t *sector, wallVert3D *wallVerts, INT32 texnum, if (top <= realbot) return; - Surf->FlatColor.s.alpha = alpha; + if (list[i-1].caster) + { + lightnum = *list[i-1].lightlevel; + colormap = list[i-1].extra_colormap; + } + else + { + lightnum = sector->lightlevel; + colormap = sector->extra_colormap; + } + Surf->FlatColor.s.alpha = alpha; #ifdef ESLOPE wallVerts[3].t = pegt + ((realtop - top) * pegmul); @@ -1306,14 +1302,119 @@ static void HWR_SplitWall(sector_t *sector, wallVert3D *wallVerts, INT32 texnum, wallVerts[0].y = wallVerts[1].y = bot; #endif - if (cutflag & FF_FOG) - HWR_AddTransparentWall(wallVerts, Surf, texnum, PF_Fog|PF_NoTexture, true, lightnum, colormap); - else if (cutflag & FF_TRANSLUCENT) + glTex = HWR_GetTexture(texnum); + if (cutflag & FF_TRANSLUCENT) HWR_AddTransparentWall(wallVerts, Surf, texnum, PF_Translucent, false, lightnum, colormap); + else if (glTex->mipmap.flags & TF_TRANSPARENT) + HWR_AddTransparentWall(wallVerts, Surf, texnum, PF_Environment, false, lightnum, colormap); else HWR_ProjectWall(wallVerts, Surf, PF_Masked, lightnum, colormap); } +// +// HWR_SplitFog +// Exclusively for fog +// +static void HWR_SplitFog(sector_t *sector, wallVert3D *wallVerts, FSurfaceInfo* Surf, UINT32 cutflag, FUINT lightnum, extracolormap_t *colormap) +{ + /* SoM: split up and light walls according to the + lightlist. This may also include leaving out parts + of the wall that can't be seen */ + float realtop, realbot, top, bot; + float pegt, pegb, pegmul; + float height = 0.0f, bheight = 0.0f; + INT32 solid, i; + lightlist_t * list = sector->lightlist; + const UINT8 alpha = Surf->FlatColor.s.alpha; + + realtop = top = wallVerts[2].y; + realbot = bot = wallVerts[0].y; + pegt = wallVerts[2].t; + pegb = wallVerts[0].t; + pegmul = (pegb - pegt) / (top - bot); + + for (i = 1; i < sector->numlights; i++) + { + if (top < realbot) + return; + + //Hurdler: fix a crashing bug, but is it correct? +// if (!list[i].caster) +// continue; + + solid = false; + + if (list[i].caster) + { + if (sector->lightlist[i].caster->flags & FF_FOG && cutflag & FF_FOG) // Only fog cuts fog + { + if (sector->lightlist[i].caster->flags & FF_EXTRA) + { + if (sector->lightlist[i].caster->flags == cutflag) // only cut by the same + solid = true; + } + else + solid = true; + } + } + + height = FIXED_TO_FLOAT(list[i].height); + + if (solid) + bheight = FIXED_TO_FLOAT(*list[i].caster->bottomheight); + + if (height >= top) + { + if (solid && top > bheight) + top = bheight; + continue; + } + + //Found a break; + bot = height; + + if (bot < realbot) + bot = realbot; + + { + + + + Surf->FlatColor.s.alpha = alpha; + } + + wallVerts[3].t = wallVerts[2].t = pegt + ((realtop - top) * pegmul); + wallVerts[0].t = wallVerts[1].t = pegt + ((realtop - bot) * pegmul); + + // set top/bottom coords + wallVerts[2].y = wallVerts[3].y = top; + wallVerts[0].y = wallVerts[1].y = bot; + + if (!solid) // Don't draw it if there's more fog behind it + HWR_AddTransparentWall(wallVerts, Surf, 0, PF_Translucent|PF_NoTexture, true, lightnum, colormap); + + top = height; + } + + bot = realbot; + if (top <= realbot) + return; + + { + + Surf->FlatColor.s.alpha = alpha; + } + + wallVerts[3].t = wallVerts[2].t = pegt + ((realtop - top) * pegmul); + wallVerts[0].t = wallVerts[1].t = pegt + ((realtop - bot) * pegmul); + + // set top/bottom coords + wallVerts[2].y = wallVerts[3].y = top; + wallVerts[0].y = wallVerts[1].y = bot; + + HWR_AddTransparentWall(wallVerts, Surf, 0, PF_Translucent|PF_NoTexture, true, lightnum, colormap); +} + // HWR_DrawSkyWalls // Draw walls into the depth buffer so that anything behind is culled properly static void HWR_DrawSkyWall(wallVert3D *wallVerts, FSurfaceInfo *Surf, fixed_t bottom, fixed_t top) @@ -1590,7 +1691,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) #endif if (gr_frontsector->numlights) - HWR_SplitWall(gr_frontsector, wallVerts, gr_toptexture, &Surf, FF_CUTLEVEL, NULL); + HWR_SplitWall(gr_frontsector, wallVerts, gr_toptexture, &Surf, FF_CUTSOLIDS); else if (grTex->mipmap.flags & TF_TRANSPARENT) HWR_AddTransparentWall(wallVerts, &Surf, gr_toptexture, PF_Environment, false, lightnum, colormap); else @@ -1673,7 +1774,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) #endif if (gr_frontsector->numlights) - HWR_SplitWall(gr_frontsector, wallVerts, gr_bottomtexture, &Surf, FF_CUTLEVEL, NULL); + HWR_SplitWall(gr_frontsector, wallVerts, gr_bottomtexture, &Surf, FF_CUTSOLIDS); else if (grTex->mipmap.flags & TF_TRANSPARENT) HWR_AddTransparentWall(wallVerts, &Surf, gr_bottomtexture, PF_Environment, false, lightnum, colormap); else @@ -1936,14 +2037,15 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) } #endif + if (grTex->mipmap.flags & TF_TRANSPARENT) + blendmode = PF_Translucent; + if (gr_frontsector->numlights) { if (!(blendmode & PF_Masked)) - HWR_SplitWall(gr_frontsector, wallVerts, gr_midtexture, &Surf, FF_TRANSLUCENT, NULL); + HWR_SplitWall(gr_frontsector, wallVerts, gr_midtexture, &Surf, FF_TRANSLUCENT); else - { - HWR_SplitWall(gr_frontsector, wallVerts, gr_midtexture, &Surf, FF_CUTLEVEL, NULL); - } + HWR_SplitWall(gr_frontsector, wallVerts, gr_midtexture, &Surf, FF_CUTSOLIDS); } else if (!(blendmode & PF_Masked)) HWR_AddTransparentWall(wallVerts, &Surf, gr_midtexture, blendmode, false, lightnum, colormap); @@ -2094,7 +2196,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) #endif // I don't think that solid walls can use translucent linedef types... if (gr_frontsector->numlights) - HWR_SplitWall(gr_frontsector, wallVerts, gr_midtexture, &Surf, FF_CUTLEVEL, NULL); + HWR_SplitWall(gr_frontsector, wallVerts, gr_midtexture, &Surf, FF_CUTSOLIDS); else { if (grTex->mipmap.flags & TF_TRANSPARENT) @@ -2216,7 +2318,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) { FBITFIELD blendmode; - blendmode = PF_Fog|PF_NoTexture; + blendmode = PF_Translucent|PF_NoTexture; lightnum = rover->master->frontsector->lightlevel; colormap = rover->master->frontsector->extra_colormap; @@ -2224,15 +2326,15 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) if (rover->master->frontsector->extra_colormap) { - Surf.FlatColor.s.alpha = HWR_FogBlockAlpha(rover->master->frontsector->lightlevel,rover->master->frontsector->extra_colormap->rgba); + Surf.FlatColor.s.alpha = HWR_FogBlockAlpha(rover->master->frontsector->lightlevel,rover->master->frontsector->extra_colormap->rgba,rover->master->frontsector->extra_colormap->fadergba); } else { - Surf.FlatColor.s.alpha = HWR_FogBlockAlpha(rover->master->frontsector->lightlevel,NORMALFOG); + Surf.FlatColor.s.alpha = HWR_FogBlockAlpha(rover->master->frontsector->lightlevel,NORMALFOG,FADEFOG); } if (gr_frontsector->numlights) - HWR_SplitWall(gr_frontsector, wallVerts, 0, &Surf, rover->flags, rover); + HWR_SplitFog(gr_frontsector, wallVerts, &Surf, rover->flags, lightnum, colormap); else HWR_AddTransparentWall(wallVerts, &Surf, 0, blendmode, true, lightnum, colormap); } @@ -2240,14 +2342,18 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) { FBITFIELD blendmode = PF_Masked; - if (rover->flags & FF_TRANSLUCENT && rover->alpha < 256) + if (rover->flags & FF_TRANSLUCENT) { blendmode = PF_Translucent; Surf.FlatColor.s.alpha = (UINT8)rover->alpha-1 > 255 ? 255 : rover->alpha-1; } + else if (grTex->mipmap.flags & TF_TRANSPARENT) + { + blendmode = PF_Environment; + } if (gr_frontsector->numlights) - HWR_SplitWall(gr_frontsector, wallVerts, texnum, &Surf, rover->flags, rover); + HWR_SplitWall(gr_frontsector, wallVerts, texnum, &Surf, rover->flags); else { if (blendmode != PF_Masked) @@ -2336,22 +2442,22 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) { FBITFIELD blendmode; - blendmode = PF_Fog|PF_NoTexture; + blendmode = PF_Translucent|PF_NoTexture; lightnum = rover->master->frontsector->lightlevel; colormap = rover->master->frontsector->extra_colormap; if (rover->master->frontsector->extra_colormap) { - Surf.FlatColor.s.alpha = HWR_FogBlockAlpha(rover->master->frontsector->lightlevel,rover->master->frontsector->extra_colormap->rgba); + Surf.FlatColor.s.alpha = HWR_FogBlockAlpha(rover->master->frontsector->lightlevel,rover->master->frontsector->extra_colormap->rgba,rover->master->frontsector->extra_colormap->fadergba); } else { - Surf.FlatColor.s.alpha = HWR_FogBlockAlpha(rover->master->frontsector->lightlevel,NORMALFOG); + Surf.FlatColor.s.alpha = HWR_FogBlockAlpha(rover->master->frontsector->lightlevel,NORMALFOG,FADEFOG); } if (gr_backsector->numlights) - HWR_SplitWall(gr_backsector, wallVerts, 0, &Surf, rover->flags, rover); + HWR_SplitFog(gr_backsector, wallVerts, &Surf, rover->flags, lightnum, colormap); else HWR_AddTransparentWall(wallVerts, &Surf, 0, blendmode, true, lightnum, colormap); } @@ -2359,14 +2465,18 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) { FBITFIELD blendmode = PF_Masked; - if (rover->flags & FF_TRANSLUCENT && rover->alpha < 256) + if (rover->flags & FF_TRANSLUCENT) { blendmode = PF_Translucent; Surf.FlatColor.s.alpha = (UINT8)rover->alpha-1 > 255 ? 255 : rover->alpha-1; } + else if (grTex->mipmap.flags & TF_TRANSPARENT) + { + blendmode = PF_Environment; + } if (gr_backsector->numlights) - HWR_SplitWall(gr_backsector, wallVerts, texnum, &Surf, rover->flags, rover); + HWR_SplitWall(gr_backsector, wallVerts, texnum, &Surf, rover->flags); else { if (blendmode != PF_Masked) @@ -2680,7 +2790,7 @@ static void HWR_AddLine(seg_t * line) angle_t span, tspan; // SoM: Backsector needs to be run through R_FakeFlat - static sector_t tempsec; + sector_t tempsec; if (line->polyseg && !(line->polyseg->flags & POF_RENDERSIDES)) return; @@ -3239,7 +3349,7 @@ static void HWR_Subsector(size_t num) INT16 count; seg_t *line; subsector_t *sub; - static sector_t tempsec; //SoM: 4/7/2000 + sector_t tempsec; //SoM: 4/7/2000 INT32 floorlightlevel; INT32 ceilinglightlevel; INT32 locFloorHeight, locCeilingHeight; @@ -3422,6 +3532,8 @@ static void HWR_Subsector(size_t num) { /// \todo fix light, xoffs, yoffs, extracolormap ? ffloor_t * rover; + + R_Prep3DFloors(gr_frontsector); for (rover = gr_frontsector->ffloors; rover; rover = rover->next) { @@ -3455,19 +3567,19 @@ static void HWR_Subsector(size_t num) light = R_GetPlaneLight(gr_frontsector, centerHeight, dup_viewz < cullHeight ? true : false); if (rover->master->frontsector->extra_colormap) - alpha = HWR_FogBlockAlpha(*gr_frontsector->lightlist[light].lightlevel, rover->master->frontsector->extra_colormap->rgba); + alpha = HWR_FogBlockAlpha(*gr_frontsector->lightlist[light].lightlevel, rover->master->frontsector->extra_colormap->rgba, rover->master->frontsector->extra_colormap->fadergba); else - alpha = HWR_FogBlockAlpha(*gr_frontsector->lightlist[light].lightlevel, NORMALFOG); + alpha = HWR_FogBlockAlpha(*gr_frontsector->lightlist[light].lightlevel, NORMALFOG, FADEFOG); HWR_AddTransparentFloor(0, &extrasubsectors[num], false, *rover->bottomheight, *gr_frontsector->lightlist[light].lightlevel, - alpha, rover->master->frontsector, PF_Fog|PF_NoTexture, + alpha, rover->master->frontsector, PF_Translucent|PF_NoTexture, true, rover->master->frontsector->extra_colormap); } - else if (rover->flags & FF_TRANSLUCENT && rover->alpha < 256) // SoM: Flags are more efficient + else if (rover->flags & FF_TRANSLUCENT) // SoM: Flags are more efficient { light = R_GetPlaneLight(gr_frontsector, centerHeight, dup_viewz < cullHeight ? true : false); #ifndef SORTING @@ -3518,19 +3630,19 @@ static void HWR_Subsector(size_t num) light = R_GetPlaneLight(gr_frontsector, centerHeight, dup_viewz < cullHeight ? true : false); if (rover->master->frontsector->extra_colormap) - alpha = HWR_FogBlockAlpha(*gr_frontsector->lightlist[light].lightlevel, rover->master->frontsector->extra_colormap->rgba); + alpha = HWR_FogBlockAlpha(*gr_frontsector->lightlist[light].lightlevel, rover->master->frontsector->extra_colormap->rgba, rover->master->frontsector->extra_colormap->fadergba); else - alpha = HWR_FogBlockAlpha(*gr_frontsector->lightlist[light].lightlevel, NORMALFOG); + alpha = HWR_FogBlockAlpha(*gr_frontsector->lightlist[light].lightlevel, NORMALFOG, FADEFOG); HWR_AddTransparentFloor(0, &extrasubsectors[num], true, *rover->topheight, *gr_frontsector->lightlist[light].lightlevel, - alpha, rover->master->frontsector, PF_Fog|PF_NoTexture, + alpha, rover->master->frontsector, PF_Translucent|PF_NoTexture, true, rover->master->frontsector->extra_colormap); } - else if (rover->flags & FF_TRANSLUCENT && rover->alpha < 256) + else if (rover->flags & FF_TRANSLUCENT) { light = R_GetPlaneLight(gr_frontsector, centerHeight, dup_viewz < cullHeight ? true : false); #ifndef SORTING @@ -3932,10 +4044,12 @@ static boolean HWR_DoCulling(line_t *cullheight, line_t *viewcullheight, float v static void HWR_DrawSpriteShadow(gr_vissprite_t *spr, GLPatch_t *gpatch, float this_scale) { + UINT8 i; + float tr_x, tr_y; + FOutVector *wv; FOutVector swallVerts[4]; FSurfaceInfo sSurf; fixed_t floorheight, mobjfloor; - float offset = 0; mobjfloor = HWR_OpaqueFloorAtPos( spr->mobj->x, spr->mobj->y, @@ -3978,8 +4092,6 @@ static void HWR_DrawSpriteShadow(gr_vissprite_t *spr, GLPatch_t *gpatch, float t } floorheight = FixedInt(spr->mobj->z - floorheight); - - offset = floorheight; } else floorheight = FixedInt(spr->mobj->z - mobjfloor); @@ -3992,42 +4104,47 @@ static void HWR_DrawSpriteShadow(gr_vissprite_t *spr, GLPatch_t *gpatch, float t // 0--1 // x1/x2 were already scaled in HWR_ProjectSprite - // First match the normal sprite swallVerts[0].x = swallVerts[3].x = spr->x1; swallVerts[2].x = swallVerts[1].x = spr->x2; - swallVerts[0].z = swallVerts[3].z = spr->z1; - swallVerts[2].z = swallVerts[1].z = spr->z2; if (spr->mobj && this_scale != 1.0f) { // Always a pixel above the floor, perfectly flat. swallVerts[0].y = swallVerts[1].y = swallVerts[2].y = swallVerts[3].y = spr->ty - gpatch->topoffset * this_scale - (floorheight+3); - // Now transform the TOP vertices along the floor in the direction of the camera - swallVerts[3].x = spr->x1 + ((gpatch->height * this_scale) + offset) * gr_viewcos; - swallVerts[2].x = spr->x2 + ((gpatch->height * this_scale) + offset) * gr_viewcos; - swallVerts[3].z = spr->z1 + ((gpatch->height * this_scale) + offset) * gr_viewsin; - swallVerts[2].z = spr->z2 + ((gpatch->height * this_scale) + offset) * gr_viewsin; + swallVerts[0].z = swallVerts[1].z = spr->tz - (gpatch->height-gpatch->topoffset) * this_scale; + swallVerts[2].z = swallVerts[3].z = spr->tz + gpatch->topoffset * this_scale; } else { // Always a pixel above the floor, perfectly flat. swallVerts[0].y = swallVerts[1].y = swallVerts[2].y = swallVerts[3].y = spr->ty - gpatch->topoffset - (floorheight+3); - // Now transform the TOP vertices along the floor in the direction of the camera - swallVerts[3].x = spr->x1 + (gpatch->height + offset) * gr_viewcos; - swallVerts[2].x = spr->x2 + (gpatch->height + offset) * gr_viewcos; - swallVerts[3].z = spr->z1 + (gpatch->height + offset) * gr_viewsin; - swallVerts[2].z = spr->z2 + (gpatch->height + offset) * gr_viewsin; + // Spread out top away from the camera. (Fixme: Make it always move out in the same direction!... somehow.) + swallVerts[0].z = swallVerts[1].z = spr->tz - (gpatch->height-gpatch->topoffset); + swallVerts[2].z = swallVerts[3].z = spr->tz + gpatch->topoffset; } - // We also need to move the bottom ones away when shadowoffs is on - if (cv_shadowoffs.value) + // transform + wv = swallVerts; + + for (i = 0; i < 4; i++,wv++) { - swallVerts[0].x = spr->x1 + offset * gr_viewcos; - swallVerts[1].x = spr->x2 + offset * gr_viewcos; - swallVerts[0].z = spr->z1 + offset * gr_viewsin; - swallVerts[1].z = spr->z2 + offset * gr_viewsin; + // Offset away from the camera based on height from floor. + if (cv_shadowoffs.value) + wv->z += floorheight; + wv->z += 3; + + //look up/down ----TOTAL SUCKS!!!--- do the 2 in one!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + tr_x = wv->z; + tr_y = wv->y; + wv->y = (tr_x * gr_viewludcos) + (tr_y * gr_viewludsin); + wv->z = (tr_x * gr_viewludsin) - (tr_y * gr_viewludcos); + // ---------------------- mega lame test ---------------------------------- + + //scale y before frustum so that frustum can be scaled to screen height + wv->y *= ORIGINAL_ASPECT * gr_fovlud; + wv->x *= gr_fovlud; } if (spr->flip) @@ -4107,285 +4224,6 @@ static void HWR_DrawSpriteShadow(gr_vissprite_t *spr, GLPatch_t *gpatch, float t } } -static void HWR_SplitSprite(gr_vissprite_t *spr) -{ - float this_scale = 1.0f; - FOutVector wallVerts[4]; - GLPatch_t *gpatch; - FSurfaceInfo Surf; - const boolean hires = (spr->mobj && spr->mobj->skin && ((skin_t *)spr->mobj->skin)->flags & SF_HIRES); - extracolormap_t *colormap; - FUINT lightlevel; - FBITFIELD blend = 0; - UINT8 alpha; - - INT32 i; - float realtop, realbot, top, bot; - float towtop, towbot, towmult; - float bheight; - const sector_t *sector = spr->mobj->subsector->sector; - const lightlist_t *list = sector->lightlist; -#ifdef ESLOPE - float endrealtop, endrealbot, endtop, endbot; - float endbheight; - fixed_t temp; - fixed_t v1x, v1y, v2x, v2y; -#endif - - this_scale = FIXED_TO_FLOAT(spr->mobj->scale); - - if (hires) - this_scale = this_scale * FIXED_TO_FLOAT(((skin_t *)spr->mobj->skin)->highresscale); - - gpatch = W_CachePatchNum(spr->patchlumpnum, PU_CACHE); - - // cache the patch in the graphics card memory - //12/12/99: Hurdler: same comment as above (for md2) - //Hurdler: 25/04/2000: now support colormap in hardware mode - HWR_GetMappedPatch(gpatch, spr->colormap); - - // Draw shadow BEFORE sprite - if (cv_shadow.value // Shadows enabled - && (spr->mobj->flags & (MF_SCENERY|MF_SPAWNCEILING|MF_NOGRAVITY)) != (MF_SCENERY|MF_SPAWNCEILING|MF_NOGRAVITY) // Ceiling scenery have no shadow. - && !(spr->mobj->flags2 & MF2_DEBRIS) // Debris have no corona or shadow. -#ifdef ALAM_LIGHTING - && !(t_lspr[spr->mobj->sprite]->type // Things with dynamic lights have no shadow. - && (!spr->mobj->player || spr->mobj->player->powers[pw_super])) // Except for non-super players. -#endif - && (spr->mobj->z >= spr->mobj->floorz)) // Without this, your shadow shows on the floor, even after you die and fall through the ground. - { - //////////////////// - // SHADOW SPRITE! // - //////////////////// - HWR_DrawSpriteShadow(spr, gpatch, this_scale); - } - - wallVerts[0].x = wallVerts[3].x = spr->x1; - wallVerts[2].x = wallVerts[1].x = spr->x2; - wallVerts[0].z = wallVerts[3].z = spr->z1; - wallVerts[1].z = wallVerts[2].z = spr->z2; - - wallVerts[2].y = wallVerts[3].y = spr->ty; - if (spr->mobj && this_scale != 1.0f) - wallVerts[0].y = wallVerts[1].y = spr->ty - gpatch->height * this_scale; - else - wallVerts[0].y = wallVerts[1].y = spr->ty - gpatch->height; - - v1x = FLOAT_TO_FIXED(spr->x1); - v1y = FLOAT_TO_FIXED(spr->z1); - v2x = FLOAT_TO_FIXED(spr->x2); - v2y = FLOAT_TO_FIXED(spr->z2); - - if (spr->flip) - { - wallVerts[0].sow = wallVerts[3].sow = gpatch->max_s; - wallVerts[2].sow = wallVerts[1].sow = 0; - }else{ - wallVerts[0].sow = wallVerts[3].sow = 0; - wallVerts[2].sow = wallVerts[1].sow = gpatch->max_s; - } - - // flip the texture coords (look familiar?) - if (spr->vflip) - { - wallVerts[3].tow = wallVerts[2].tow = gpatch->max_t; - wallVerts[0].tow = wallVerts[1].tow = 0; - }else{ - wallVerts[3].tow = wallVerts[2].tow = 0; - wallVerts[0].tow = wallVerts[1].tow = gpatch->max_t; - } - - realtop = top = wallVerts[3].y; - realbot = bot = wallVerts[0].y; - towtop = wallVerts[3].tow; - towbot = wallVerts[0].tow; - towmult = (towbot - towtop) / (top - bot); - -#ifdef ESLOPE - endrealtop = endtop = wallVerts[2].y; - endrealbot = endbot = wallVerts[1].y; -#endif - - if (!cv_translucency.value) // translucency disabled - { - Surf.FlatColor.s.alpha = 0xFF; - blend = PF_Translucent|PF_Occlude; - } - else if (spr->mobj->flags2 & MF2_SHADOW) - { - Surf.FlatColor.s.alpha = 0x40; - blend = PF_Translucent; - } - else if (spr->mobj->frame & FF_TRANSMASK) - blend = HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf); - else - { - // BP: i agree that is little better in environement but it don't - // work properly under glide nor with fogcolor to ffffff :( - // Hurdler: PF_Environement would be cool, but we need to fix - // the issue with the fog before - Surf.FlatColor.s.alpha = 0xFF; - blend = PF_Translucent|PF_Occlude; - } - - alpha = Surf.FlatColor.s.alpha; - - // Start with the lightlevel and colormap from the top of the sprite - lightlevel = *list[sector->numlights - 1].lightlevel; - colormap = list[sector->numlights - 1].extra_colormap; - i = 0; - temp = FLOAT_TO_FIXED(realtop); - -#ifdef ESLOPE - for (i = 1; i < sector->numlights; i++) - { - fixed_t h = sector->lightlist[i].slope ? P_GetZAt(sector->lightlist[i].slope, spr->mobj->x, spr->mobj->y) - : sector->lightlist[i].height; - if (h <= temp) - { - lightlevel = *list[i-1].lightlevel; - colormap = list[i-1].extra_colormap; - break; - } - } -#else - i = R_GetPlaneLight(sector, temp, false); - lightlevel = *list[i].lightlevel; - colormap = list[i].extra_colormap; -#endif - - for (i = 0; i < sector->numlights; i++) - { -#ifdef ESLOPE - if (endtop < endrealbot) -#endif - if (top < realbot) - return; - - // even if we aren't changing colormap or lightlevel, we still need to continue drawing down the sprite - if (!(list[i].flags & FF_NOSHADE) && (list[i].flags & FF_CUTSPRITES)) - { - lightlevel = *list[i].lightlevel; - colormap = list[i].extra_colormap; - } - -#ifdef ESLOPE - if (i + 1 < sector->numlights) - { - if (list[i+1].slope) - { - temp = P_GetZAt(list[i+1].slope, v1x, v1y); - bheight = FIXED_TO_FLOAT(temp); - temp = P_GetZAt(list[i+1].slope, v2x, v2y); - endbheight = FIXED_TO_FLOAT(temp); - } - else - bheight = endbheight = FIXED_TO_FLOAT(list[i+1].height); - } - else - { - bheight = realbot; - endbheight = endrealbot; - } -#else - if (i + 1 < sector->numlights) - { - bheight = FIXED_TO_FLOAT(list[i+1].height); - } - else - { - bheight = realbot; - } -#endif - -#ifdef ESLOPE - if (endbheight >= endtop) -#endif - if (bheight >= top) - continue; - - bot = bheight; - - if (bot < realbot) - bot = realbot; - -#ifdef ESLOPE - endbot = endbheight; - - if (endbot < endrealbot) - endbot = endrealbot; -#endif - -#ifdef ESLOPE - wallVerts[3].tow = towtop + ((realtop - top) * towmult); - wallVerts[2].tow = towtop + ((endrealtop - endtop) * towmult); - wallVerts[0].tow = towtop + ((realtop - bot) * towmult); - wallVerts[1].tow = towtop + ((endrealtop - endbot) * towmult); - - wallVerts[3].y = top; - wallVerts[2].y = endtop; - wallVerts[0].y = bot; - wallVerts[1].y = endbot; -#else - wallVerts[3].tow = wallVerts[2].tow = towtop + ((realtop - top) * towmult); - wallVerts[0].tow = wallVerts[1].tow = towtop + ((realtop - bot) * towmult); - - wallVerts[2].y = wallVerts[3].y = top; - wallVerts[0].y = wallVerts[1].y = bot; -#endif - - if (colormap) - Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false); - else - Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, false); - - Surf.FlatColor.s.alpha = alpha; - - HWD.pfnDrawPolygon(&Surf, wallVerts, 4, blend|PF_Modulated|PF_Clip); - - top = bot; -#ifdef ESLOPE - endtop = endbot; -#endif - } - - bot = realbot; -#ifdef ESLOPE - endbot = endrealbot; - if (endtop <= endrealbot) -#endif - if (top <= realbot) - return; - - // If we're ever down here, somehow the above loop hasn't draw all the light levels of sprite -#ifdef ESLOPE - wallVerts[3].tow = towtop + ((realtop - top) * towmult); - wallVerts[2].tow = towtop + ((endrealtop - endtop) * towmult); - wallVerts[0].tow = towtop + ((realtop - bot) * towmult); - wallVerts[1].tow = towtop + ((endrealtop - endbot) * towmult); - - wallVerts[3].y = top; - wallVerts[2].y = endtop; - wallVerts[0].y = bot; - wallVerts[1].y = endbot; -#else - wallVerts[3].tow = wallVerts[2].tow = towtop + ((realtop - top) * towmult); - wallVerts[0].tow = wallVerts[1].tow = towtop + ((realtop - bot) * towmult); - - wallVerts[2].y = wallVerts[3].y = top; - wallVerts[0].y = wallVerts[1].y = bot; -#endif - - if (colormap) - Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false); - else - Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, false); - - Surf.FlatColor.s.alpha = alpha; - - HWD.pfnDrawPolygon(&Surf, wallVerts, 4, blend|PF_Modulated|PF_Clip); -} - // -----------------+ // HWR_DrawSprite : Draw flat sprites // : (monsters, bonuses, weapons, lights, ...) @@ -4393,8 +4231,10 @@ static void HWR_SplitSprite(gr_vissprite_t *spr) // -----------------+ static void HWR_DrawSprite(gr_vissprite_t *spr) { - float this_scale = 1.0f; + UINT8 i; + float tr_x, tr_y, this_scale = 1.0f; FOutVector wallVerts[4]; + FOutVector *wv; GLPatch_t *gpatch; // sprite patch converted to hardware FSurfaceInfo Surf; const boolean hires = (spr->mobj && spr->mobj->skin && ((skin_t *)spr->mobj->skin)->flags & SF_HIRES); @@ -4410,12 +4250,6 @@ static void HWR_DrawSprite(gr_vissprite_t *spr) if (!spr->mobj->subsector) return; - if (spr->mobj->subsector->sector->numlights) - { - HWR_SplitSprite(spr); - return; - } - // cache sprite graphics //12/12/99: Hurdler: // OK, I don't change anything for MD2 support because I want to be @@ -4449,7 +4283,24 @@ static void HWR_DrawSprite(gr_vissprite_t *spr) // make a wall polygon (with 2 triangles), using the floor/ceiling heights, // and the 2d map coords of start/end vertices wallVerts[0].z = wallVerts[3].z = spr->z1; - wallVerts[1].z = wallVerts[2].z = spr->z2; + wallVerts[2].z = wallVerts[1].z = spr->z2; + + // transform + wv = wallVerts; + + for (i = 0; i < 4; i++,wv++) + { + //look up/down ----TOTAL SUCKS!!!--- do the 2 in one!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + tr_x = wv->z; + tr_y = wv->y; + wv->y = (tr_x * gr_viewludcos) + (tr_y * gr_viewludsin); + wv->z = (tr_x * gr_viewludsin) - (tr_y * gr_viewludcos); + // ---------------------- mega lame test ---------------------------------- + + //scale y before frustum so that frustum can be scaled to screen height + wv->y *= ORIGINAL_ASPECT * gr_fovlud; + wv->x *= gr_fovlud; + } if (spr->flip) { @@ -4501,8 +4352,26 @@ static void HWR_DrawSprite(gr_vissprite_t *spr) UINT8 lightlevel = 255; extracolormap_t *colormap = sector->extra_colormap; - if (!(spr->mobj->frame & FF_FULLBRIGHT)) - lightlevel = sector->lightlevel; + if (sector->numlights) + { + INT32 light; + + light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); // Always use the light at the top instead of whatever I was doing before + + if (!(spr->mobj->frame & FF_FULLBRIGHT)) + lightlevel = *sector->lightlist[light].lightlevel; + + if (sector->lightlist[light].extra_colormap) + colormap = sector->lightlist[light].extra_colormap; + } + else + { + if (!(spr->mobj->frame & FF_FULLBRIGHT)) + lightlevel = sector->lightlevel; + + if (sector->extra_colormap) + colormap = sector->extra_colormap; + } if (colormap) Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false); @@ -4542,8 +4411,11 @@ static void HWR_DrawSprite(gr_vissprite_t *spr) // Sprite drawer for precipitation static inline void HWR_DrawPrecipitationSprite(gr_vissprite_t *spr) { + UINT8 i; FBITFIELD blend = 0; + float tr_x, tr_y; FOutVector wallVerts[4]; + FOutVector *wv; GLPatch_t *gpatch; // sprite patch converted to hardware FSurfaceInfo Surf; @@ -4569,8 +4441,24 @@ static inline void HWR_DrawPrecipitationSprite(gr_vissprite_t *spr) // make a wall polygon (with 2 triangles), using the floor/ceiling heights, // and the 2d map coords of start/end vertices - wallVerts[0].z = wallVerts[3].z = spr->z1; - wallVerts[1].z = wallVerts[2].z = spr->z2; + wallVerts[0].z = wallVerts[1].z = wallVerts[2].z = wallVerts[3].z = spr->tz; + + // transform + wv = wallVerts; + + for (i = 0; i < 4; i++, wv++) + { + //look up/down ----TOTAL SUCKS!!!--- do the 2 in one!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + tr_x = wv->z; + tr_y = wv->y; + wv->y = (tr_x * gr_viewludcos) + (tr_y * gr_viewludsin); + wv->z = (tr_x * gr_viewludsin) - (tr_y * gr_viewludcos); + // ---------------------- mega lame test ---------------------------------- + + //scale y before frustum so that frustum can be scaled to screen height + wv->y *= ORIGINAL_ASPECT * gr_fovlud; + wv->x *= gr_fovlud; + } wallVerts[0].sow = wallVerts[3].sow = 0; wallVerts[2].sow = wallVerts[1].sow = gpatch->max_s; @@ -4703,33 +4591,6 @@ static void HWR_SortVisSprites(void) gr_vsprsortedhead.prev->next = best; gr_vsprsortedhead.prev = best; } - - // Sryder: Oh boy, while it's nice having ALL the sprites sorted properly, it fails when we bring MD2's into the - // mix and they want to be translucent. So let's place all the translucent sprites and MD2's AFTER - // everything else, but still ordered of course, the depth buffer can handle the opaque ones plenty fine. - // We just need to move all translucent ones to the end in order - // TODO: Fully sort all sprites and MD2s with walls and floors, this part will be unnecessary after that - best = gr_vsprsortedhead.next; - for (i = 0; i < gr_visspritecount; i++) - { - if ((best->mobj->flags2 & MF2_SHADOW) || (best->mobj->frame & FF_TRANSMASK)) - { - if (best == gr_vsprsortedhead.next) - { - gr_vsprsortedhead.next = best->next; - } - best->prev->next = best->next; - best->next->prev = best->prev; - best->prev = gr_vsprsortedhead.prev; - gr_vsprsortedhead.prev->next = best; - gr_vsprsortedhead.prev = best; - ds = best; - best = best->next; - ds->next = &gr_vsprsortedhead; - } - else - best = best->next; - } } // A drawnode is something that points to a 3D floor, 3D side, or masked @@ -5063,7 +4924,6 @@ static void HWR_CreateDrawNodes(void) // Draw all vissprites // -------------------------------------------------------------------------- #ifdef SORTING -// added the stransform so they can be switched as drawing happenes so MD2s and sprites are sorted correctly with each other static void HWR_DrawSprites(void) { if (gr_visspritecount > 0) @@ -5084,20 +4944,44 @@ static void HWR_DrawSprites(void) { if (!cv_grmd2.value || md2_playermodels[(skin_t*)spr->mobj->skin-skins].notfound || md2_playermodels[(skin_t*)spr->mobj->skin-skins].scale < 0.0f) HWR_DrawSprite(spr); - else - HWR_DrawMD2(spr); - } - else - { - if (!cv_grmd2.value || md2_models[spr->mobj->sprite].notfound || md2_models[spr->mobj->sprite].scale < 0.0f) - HWR_DrawSprite(spr); - else - HWR_DrawMD2(spr); } + else if (!cv_grmd2.value || md2_models[spr->mobj->sprite].notfound || md2_models[spr->mobj->sprite].scale < 0.0f) + HWR_DrawSprite(spr); } } } #endif +// -------------------------------------------------------------------------- +// Draw all MD2 +// -------------------------------------------------------------------------- +static void HWR_DrawMD2S(void) +{ + if (gr_visspritecount > 0) + { + gr_vissprite_t *spr; + + // draw all MD2 back to front + for (spr = gr_vsprsortedhead.next; + spr != &gr_vsprsortedhead; + spr = spr->next) + { +#ifdef HWPRECIP + if (!spr->precip) + { +#endif + if (spr->mobj && spr->mobj->skin && spr->mobj->sprite == SPR_PLAY) + { + if (md2_playermodels[(skin_t*)spr->mobj->skin-skins].notfound == false && md2_playermodels[(skin_t*)spr->mobj->skin-skins].scale > 0.0f) + HWR_DrawMD2(spr); + } + else if (md2_models[spr->mobj->sprite].notfound == false && md2_models[spr->mobj->sprite].scale > 0.0f) + HWR_DrawMD2(spr); +#ifdef HWPRECIP + } +#endif + } + } +} // -------------------------------------------------------------------------- // HWR_AddSprites @@ -5182,10 +5066,8 @@ static void HWR_ProjectSprite(mobj_t *thing) { gr_vissprite_t *vis; float tr_x, tr_y; - float tz; + float tx, tz; float x1, x2; - float z1, z2; - float rightsin, rightcos; float this_scale; float gz, gzt; spritedef_t *sprdef; @@ -5196,7 +5078,9 @@ static void HWR_ProjectSprite(mobj_t *thing) angle_t ang; INT32 heightsec, phs; const boolean papersprite = (thing->frame & FF_PAPERSPRITE); + float offset; float ang_scale = 1.0f, ang_scalez = 0.0f; + float z1, z2; if (!thing) return; @@ -5214,9 +5098,7 @@ static void HWR_ProjectSprite(mobj_t *thing) if (tz < ZCLIP_PLANE && !papersprite && (!cv_grmd2.value || md2_models[thing->sprite].notfound == true)) //Yellow: Only MD2's dont disappear return; - // The above can stay as it works for cutting sprites that are too close - tr_x = FIXED_TO_FLOAT(thing->x); - tr_y = FIXED_TO_FLOAT(thing->y); + tx = (tr_x * gr_viewsin) - (tr_y * gr_viewcos); // decide which patch to use for sprite relative to player #ifdef RANGECHECK @@ -5302,27 +5184,33 @@ static void HWR_ProjectSprite(mobj_t *thing) if (thing->skin && ((skin_t *)thing->skin)->flags & SF_HIRES) this_scale = this_scale * FIXED_TO_FLOAT(((skin_t *)thing->skin)->highresscale); - rightsin = FIXED_TO_FLOAT(FINESINE((viewangle + ANGLE_90)>>ANGLETOFINESHIFT)); - rightcos = FIXED_TO_FLOAT(FINECOSINE((viewangle + ANGLE_90)>>ANGLETOFINESHIFT)); + // calculate edges of the shape if (flip) - { - x1 = (FIXED_TO_FLOAT(spritecachedinfo[lumpoff].width - spritecachedinfo[lumpoff].offset) * this_scale); - x2 = (FIXED_TO_FLOAT(spritecachedinfo[lumpoff].offset) * this_scale); - } + offset = FIXED_TO_FLOAT(spritecachedinfo[lumpoff].width - spritecachedinfo[lumpoff].offset) * this_scale; else - { - x1 = (FIXED_TO_FLOAT(spritecachedinfo[lumpoff].offset) * this_scale); - x2 = (FIXED_TO_FLOAT(spritecachedinfo[lumpoff].width - spritecachedinfo[lumpoff].offset) * this_scale); - } + offset = FIXED_TO_FLOAT(spritecachedinfo[lumpoff].offset) * this_scale; - z1 = tr_y + x1 * rightsin; - z2 = tr_y - x2 * rightsin; + z1 = tz - (offset * ang_scalez); + tx -= offset * ang_scale; + + // project x + x1 = gr_windowcenterx + (tx * gr_centerx / tz); + + //faB : tr_x doesnt matter + // hurdler: it's used in cliptosolidsegs + tr_x = x1; + + x1 = tx; + + offset = FIXED_TO_FLOAT(spritecachedinfo[lumpoff].width) * this_scale; + + z2 = z1 + (offset * ang_scalez); + tx += offset * ang_scale; if (papersprite && max(z1, z2) < ZCLIP_PLANE) return; - x1 = tr_x + x1 * rightcos; - x2 = tr_x - x2 * rightcos; + x2 = gr_windowcenterx + (tx * gr_centerx / tz); if (thing->eflags & MFE_VERTICALFLIP) { @@ -5359,10 +5247,13 @@ static void HWR_ProjectSprite(mobj_t *thing) // store information in a vissprite vis = HWR_NewVisSprite(); vis->x1 = x1; +#if 0 vis->x2 = x2; - vis->z1 = z1; - vis->z2 = z2; - vis->tz = tz; // Keep tz for the simple sprite sorting that happens +#else + (void)x2; +#endif + vis->x2 = tx; + vis->tz = tz; vis->dispoffset = thing->info->dispoffset; // Monster Iestyn: 23/11/15: HARDWARE SUPPORT AT LAST vis->patchlumpnum = sprframe->lumppat[rot]; vis->flip = flip; @@ -5405,7 +5296,7 @@ static void HWR_ProjectSprite(mobj_t *thing) vis->colormap = colormaps; // set top/bottom coords - vis->ty = gzt; + vis->ty = gzt - gr_viewz; //CONS_Debug(DBG_RENDER, "------------------\nH: sprite : %d\nH: frame : %x\nH: type : %d\nH: sname : %s\n\n", // thing->sprite, thing->frame, thing->type, sprnames[thing->sprite]); @@ -5424,10 +5315,8 @@ static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing) { gr_vissprite_t *vis; float tr_x, tr_y; - float tz; + float tx, tz; float x1, x2; - float z1, z2; - float rightsin, rightcos; spritedef_t *sprdef; spriteframe_t *sprframe; size_t lumpoff; @@ -5445,8 +5334,7 @@ static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing) if (tz < ZCLIP_PLANE) return; - tr_x = FIXED_TO_FLOAT(thing->x); - tr_y = FIXED_TO_FLOAT(thing->y); + tx = (tr_x * gr_viewsin) - (tr_y * gr_viewcos); // decide which patch to use for sprite relative to player if ((unsigned)thing->sprite >= numsprites) @@ -5473,32 +5361,32 @@ static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing) lumpoff = sprframe->lumpid[0]; flip = sprframe->flip; // Will only be 0x00 or 0xFF - rightsin = FIXED_TO_FLOAT(FINESINE((viewangle + ANGLE_90)>>ANGLETOFINESHIFT)); - rightcos = FIXED_TO_FLOAT(FINECOSINE((viewangle + ANGLE_90)>>ANGLETOFINESHIFT)); - if (flip) - { - x1 = FIXED_TO_FLOAT(spritecachedinfo[lumpoff].width - spritecachedinfo[lumpoff].offset); - x2 = FIXED_TO_FLOAT(spritecachedinfo[lumpoff].offset); - } - else - { - x1 = FIXED_TO_FLOAT(spritecachedinfo[lumpoff].offset); - x2 = FIXED_TO_FLOAT(spritecachedinfo[lumpoff].width - spritecachedinfo[lumpoff].offset); - } + // calculate edges of the shape + tx -= FIXED_TO_FLOAT(spritecachedinfo[lumpoff].offset); - z1 = tr_y + x1 * rightsin; - z2 = tr_y - x2 * rightsin; - x1 = tr_x + x1 * rightcos; - x2 = tr_x - x2 * rightcos; + // project x + x1 = gr_windowcenterx + (tx * gr_centerx / tz); + + //faB : tr_x doesnt matter + // hurdler: it's used in cliptosolidsegs + tr_x = x1; + + x1 = tx; + + tx += FIXED_TO_FLOAT(spritecachedinfo[lumpoff].width); + x2 = gr_windowcenterx + (tx * gr_centerx / tz); // // store information in a vissprite // vis = HWR_NewVisSprite(); vis->x1 = x1; +#if 0 vis->x2 = x2; - vis->z1 = z1; - vis->z2 = z2; +#else + (void)x2; +#endif + vis->x2 = tx; vis->tz = tz; vis->dispoffset = 0; // Monster Iestyn: 23/11/15: HARDWARE SUPPORT AT LAST vis->patchlumpnum = sprframe->lumppat[rot]; @@ -5508,7 +5396,7 @@ static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing) vis->colormap = colormaps; // set top/bottom coords - vis->ty = FIXED_TO_FLOAT(thing->z + spritecachedinfo[lumpoff].topoffset); + vis->ty = FIXED_TO_FLOAT(thing->z + spritecachedinfo[lumpoff].topoffset) - gr_viewz; vis->precip = true; } @@ -5536,13 +5424,12 @@ static void HWR_DrawSkyBackground(player_t *player) //Hurdler: the sky is the only texture who need 4.0f instead of 1.0 // because it's called just after clearing the screen // and thus, the near clipping plane is set to 3.99 - // Sryder: Just use the near clipping plane value then - v[0].x = v[3].x = -ZCLIP_PLANE-1; - v[1].x = v[2].x = ZCLIP_PLANE+1; - v[0].y = v[1].y = -ZCLIP_PLANE-1; - v[2].y = v[3].y = ZCLIP_PLANE+1; + v[0].x = v[3].x = -4.0f; + v[1].x = v[2].x = 4.0f; + v[0].y = v[1].y = -4.0f; + v[2].y = v[3].y = 4.0f; - v[0].z = v[1].z = v[2].z = v[3].z = ZCLIP_PLANE+1; + v[0].z = v[1].z = v[2].z = v[3].z = 4.0f; // X @@ -5615,7 +5502,7 @@ static inline void HWR_ClearView(void) (INT32)gr_viewwindowy, (INT32)(gr_viewwindowx + gr_viewwidth), (INT32)(gr_viewwindowy + gr_viewheight), - ZCLIP_PLANE); + 3.99f); HWD.pfnClearBuffer(false, true, 0); //disable clip window - set to full size @@ -5650,8 +5537,6 @@ void HWR_SetViewSize(void) gr_pspritexscale = ((vid.width*gr_pspriteyscale*BASEVIDHEIGHT)/BASEVIDWIDTH)/vid.height; gr_pspriteyscale = ((vid.height*gr_pspritexscale*BASEVIDWIDTH)/BASEVIDHEIGHT)/vid.width; - - HWD.pfnFlushScreenTextures(); } // ========================================================================== @@ -5660,6 +5545,7 @@ void HWR_SetViewSize(void) void HWR_RenderSkyboxView(INT32 viewnumber, player_t *player) { const float fpov = FIXED_TO_FLOAT(cv_grfov.value+player->fovadd); + FTransform stransform; postimg_t *type; if (splitscreen && player == &players[secondarydisplayplayer]) @@ -5742,12 +5628,36 @@ void HWR_RenderSkyboxView(INT32 viewnumber, player_t *player) atransform.y = gr_viewy; // FIXED_TO_FLOAT(viewy) atransform.z = gr_viewz; // FIXED_TO_FLOAT(viewz) atransform.scalex = 1; - atransform.scaley = (float)vid.width/vid.height; + atransform.scaley = ORIGINAL_ASPECT; atransform.scalez = 1; atransform.fovxangle = fpov; // Tails atransform.fovyangle = fpov; // Tails atransform.splitscreen = splitscreen; + // Transform for sprites + stransform.anglex = 0.0f; + stransform.angley = -270.0f; + + if (*type == postimg_flip) + stransform.flip = true; + else + stransform.flip = false; + + if (*type == postimg_mirror) + stransform.mirror = true; + else + stransform.mirror = false; + + stransform.x = 0.0f; + stransform.y = 0.0f; + stransform.z = 0.0f; + stransform.scalex = 1; + stransform.scaley = 1; + stransform.scalez = 1; + stransform.fovxangle = 90.0f; + stransform.fovyangle = 90.0f; + stransform.splitscreen = splitscreen; + gr_fovlud = (float)(1.0l/tan((double)(fpov*M_PIl/360l))); //------------------------------------------------------------------------ @@ -5830,7 +5740,10 @@ if (0) #ifdef SORTING HWR_SortVisSprites(); #endif + HWR_DrawMD2S(); + // Draw the sprites with trivial transform + HWD.pfnSetTransform(&stransform); #ifdef SORTING HWR_DrawSprites(); #endif @@ -5875,6 +5788,7 @@ if (0) void HWR_RenderPlayerView(INT32 viewnumber, player_t *player) { const float fpov = FIXED_TO_FLOAT(cv_grfov.value+player->fovadd); + FTransform stransform; postimg_t *type; const boolean skybox = (skyboxmo[0] && cv_skybox.value); // True if there's a skybox object and skyboxes are on @@ -5972,12 +5886,36 @@ void HWR_RenderPlayerView(INT32 viewnumber, player_t *player) atransform.y = gr_viewy; // FIXED_TO_FLOAT(viewy) atransform.z = gr_viewz; // FIXED_TO_FLOAT(viewz) atransform.scalex = 1; - atransform.scaley = (float)vid.width/vid.height; + atransform.scaley = ORIGINAL_ASPECT; atransform.scalez = 1; atransform.fovxangle = fpov; // Tails atransform.fovyangle = fpov; // Tails atransform.splitscreen = splitscreen; + // Transform for sprites + stransform.anglex = 0.0f; + stransform.angley = -270.0f; + + if (*type == postimg_flip) + stransform.flip = true; + else + stransform.flip = false; + + if (*type == postimg_mirror) + stransform.mirror = true; + else + stransform.mirror = false; + + stransform.x = 0.0f; + stransform.y = 0.0f; + stransform.z = 0.0f; + stransform.scalex = 1; + stransform.scaley = 1; + stransform.scalez = 1; + stransform.fovxangle = 90.0f; + stransform.fovyangle = 90.0f; + stransform.splitscreen = splitscreen; + gr_fovlud = (float)(1.0l/tan((double)(fpov*M_PIl/360l))); //------------------------------------------------------------------------ @@ -6060,7 +5998,10 @@ if (0) #ifdef SORTING HWR_SortVisSprites(); #endif + HWR_DrawMD2S(); + // Draw the sprites with trivial transform + HWD.pfnSetTransform(&stransform); #ifdef SORTING HWR_DrawSprites(); #endif @@ -6251,7 +6192,6 @@ void HWR_Shutdown(void) HWR_FreeExtraSubsectors(); HWR_FreePolyPool(); HWR_FreeTextureCache(); - HWD.pfnFlushScreenTextures(); } void transform(float *cx, float *cy, float *cz) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 8316397c..7bab2dbc 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -59,7 +59,7 @@ typedef struct GLRGBAFloat GLRGBAFloat; #define N_PI_DEMI (M_PIl/2.0f) //(1.5707963268f) #define ASPECT_RATIO (1.0f) //(320.0f/200.0f) -#define FAR_CLIPPING_PLANE 32768.0f // Draw further! Tails 01-21-2001 +#define FAR_CLIPPING_PLANE 150000.0f // Draw further! Tails 01-21-2001 static float NEAR_CLIPPING_PLANE = NZCLIP_PLANE; // ************************************************************************** @@ -107,19 +107,10 @@ static GLint viewport[4]; #endif // Yay for arbitrary numbers! NextTexAvail is buggy for some reason. -// Sryder: NextTexAvail is broken for these because palette changes or changes to the texture filter or antialiasing -// flush all of the stored textures, leaving them unavailable at times such as between levels -// These need to start at 0 and be set to their number, and be reset to 0 when deleted so that intel GPUs -// can know when the textures aren't there, as textures are always considered resident in their virtual memory -// TODO: Store them in a more normal way -#define SCRTEX_SCREENTEXTURE 65535 -#define SCRTEX_STARTSCREENWIPE 65534 -#define SCRTEX_ENDSCREENWIPE 65533 -#define SCRTEX_FINALSCREENTEXTURE 65532 -static GLuint screentexture = 0; -static GLuint startScreenWipe = 0; -static GLuint endScreenWipe = 0; -static GLuint finalScreenTexture = 0; +static GLuint screentexture = 60000; +static GLuint startScreenWipe = 60001; +static GLuint endScreenWipe = 60002; +static GLuint finalScreenTexture = 60003; #if 0 GLuint screentexture = FIRST_TEX_AVAIL; #endif @@ -272,7 +263,6 @@ FUNCPRINTF void DBG_Printf(const char *lpFmt, ...) /* texture mapping */ //GL_EXT_copy_texture #ifndef KOS_GL_COMPATIBILITY #define pglCopyTexImage2D glCopyTexImage2D -#define pglCopyTexSubImage2D glCopyTexSubImage2D #endif #else //!STATIC_OPENGL @@ -397,8 +387,6 @@ static PFNglBindTexture pglBindTexture; /* texture mapping */ //GL_EXT_copy_texture typedef void (APIENTRY * PFNglCopyTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); static PFNglCopyTexImage2D pglCopyTexImage2D; -typedef void (APIENTRY * PFNglCopyTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -static PFNglCopyTexSubImage2D pglCopyTexSubImage2D; #endif /* GLU functions */ typedef GLint (APIENTRY * PFNgluBuild2DMipmaps) (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data); @@ -515,7 +503,6 @@ boolean SetupGLfunc(void) GETOPENGLFUNC(pglBindTexture , glBindTexture) GETOPENGLFUNC(pglCopyTexImage2D , glCopyTexImage2D) - GETOPENGLFUNC(pglCopyTexSubImage2D , glCopyTexSubImage2D) #undef GETOPENGLFUNC @@ -667,10 +654,6 @@ void SetModelView(GLint w, GLint h) { // DBG_Printf("SetModelView(): %dx%d\n", (int)w, (int)h); - // The screen textures need to be flushed if the width or height change so that they be remade for the correct size - if (screen_width != w || screen_height != h) - FlushScreenTextures(); - screen_width = w; screen_height = h; @@ -818,7 +801,6 @@ void Flush(void) screentexture = FIRST_TEX_AVAIL; } #endif - tex_downloaded = 0; } @@ -1074,56 +1056,30 @@ EXPORT void HWRAPI(SetBlend) (FBITFIELD PolyFlags) switch (PolyFlags & PF_Blending) { case PF_Translucent & PF_Blending: pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha = level of transparency -#ifndef KOS_GL_COMPATIBILITY - pglAlphaFunc(GL_NOTEQUAL, 0.0f); -#endif break; case PF_Masked & PF_Blending: // Hurdler: does that mean lighting is only made by alpha src? // it sounds ok, but not for polygonsmooth pglBlendFunc(GL_SRC_ALPHA, GL_ZERO); // 0 alpha = holes in texture -#ifndef KOS_GL_COMPATIBILITY - pglAlphaFunc(GL_GREATER, 0.5f); -#endif break; case PF_Additive & PF_Blending: #ifdef ATI_RAGE_PRO_COMPATIBILITY pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha = level of transparency #else pglBlendFunc(GL_SRC_ALPHA, GL_ONE); // src * alpha + dest -#endif -#ifndef KOS_GL_COMPATIBILITY - pglAlphaFunc(GL_NOTEQUAL, 0.0f); #endif break; case PF_Environment & PF_Blending: pglBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); -#ifndef KOS_GL_COMPATIBILITY - pglAlphaFunc(GL_NOTEQUAL, 0.0f); -#endif break; case PF_Substractive & PF_Blending: // good for shadow // not realy but what else ? pglBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR); -#ifndef KOS_GL_COMPATIBILITY - pglAlphaFunc(GL_NOTEQUAL, 0.0f); -#endif - break; - case PF_Fog & PF_Fog: - // Sryder: Fog - // multiplies input colour by input alpha, and destination colour by input colour, then adds them - pglBlendFunc(GL_SRC_ALPHA, GL_SRC_COLOR); -#ifndef KOS_GL_COMPATIBILITY - pglAlphaFunc(GL_NOTEQUAL, 0.0f); -#endif break; default : // must be 0, otherwise it's an error // No blending pglBlendFunc(GL_ONE, GL_ZERO); // the same as no blending -#ifndef KOS_GL_COMPATIBILITY - pglAlphaFunc(GL_GREATER, 0.5f); -#endif break; } } @@ -1383,7 +1339,6 @@ EXPORT void HWRAPI(SetTexture) (FTextureInfo *pTexInfo) tex[w*j+i].s.green = 0; tex[w*j+i].s.blue = 0; tex[w*j+i].s.alpha = 0; - pTexInfo->flags |= TF_TRANSPARENT; // there is a hole in it } else { @@ -1454,22 +1409,8 @@ EXPORT void HWRAPI(SetTexture) (FTextureInfo *pTexInfo) tex_downloaded = pTexInfo->downloaded; pglBindTexture(GL_TEXTURE_2D, pTexInfo->downloaded); - // disable texture filtering on any texture that has holes so there's no dumb borders or blending issues - if (pTexInfo->flags & TF_TRANSPARENT) - { -#ifdef KOS_GL_COMPATIBILITY - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NONE); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NONE); -#else - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); -#endif - } - else - { - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter); - } + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter); #ifdef KOS_GL_COMPATIBILITY pglTexImage2D(GL_TEXTURE_2D, 0, GL_ARGB4444, w, h, 0, GL_ARGB4444, GL_UNSIGNED_BYTE, ptex); @@ -1923,6 +1864,12 @@ static void DrawMD2Ex(INT32 *gl_cmd_buffer, md2_frame_t *frame, INT32 duration, ambient[1] = 0.75f; if (ambient[2] > 0.75f) ambient[2] = 0.75f; + + if (color[3] < 255) + { + pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + pglDepthMask(GL_FALSE); + } } pglEnable(GL_CULL_FACE); @@ -1951,12 +1898,10 @@ static void DrawMD2Ex(INT32 *gl_cmd_buffer, md2_frame_t *frame, INT32 duration, pglMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient); pglMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse); #endif - if (color[3] < 255) - SetBlend(PF_Translucent|PF_Modulated|PF_Clip); - else - SetBlend(PF_Masked|PF_Modulated|PF_Occlude|PF_Clip); } + DrawPolygon(NULL, NULL, 0, PF_Masked|PF_Modulated|PF_Occlude|PF_Clip); + pglPushMatrix(); // should be the same as glLoadIdentity //Hurdler: now it seems to work pglTranslatef(pos->x, pos->z, pos->y); @@ -1964,6 +1909,14 @@ static void DrawMD2Ex(INT32 *gl_cmd_buffer, md2_frame_t *frame, INT32 duration, scaley = -scaley; pglRotatef(pos->angley, 0.0f, -1.0f, 0.0f); pglRotatef(pos->anglex, -1.0f, 0.0f, 0.0f); + //pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha = level of transparency + + // Remove depth mask when the model is transparent so it doesn't cut thorugh sprites // SRB2CBTODO: For all stuff too?! + if (color && color[3] < 255) + { + pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha = level of transparency + pglDepthMask(GL_FALSE); + } val = *gl_cmd_buffer++; @@ -2031,6 +1984,7 @@ static void DrawMD2Ex(INT32 *gl_cmd_buffer, md2_frame_t *frame, INT32 duration, if (color) pglDisable(GL_LIGHTING); pglShadeModel(GL_FLAT); + pglDepthMask(GL_TRUE); pglDisable(GL_CULL_FACE); } @@ -2185,25 +2139,10 @@ EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2]) } #endif //SHUFFLE -// Sryder: This needs to be called whenever the screen changes resolution in order to reset the screen textures to use -// a new size -EXPORT void HWRAPI(FlushScreenTextures) (void) -{ - pglDeleteTextures(1, &screentexture); - pglDeleteTextures(1, &startScreenWipe); - pglDeleteTextures(1, &endScreenWipe); - pglDeleteTextures(1, &finalScreenTexture); - screentexture = 0; - startScreenWipe = 0; - endScreenWipe = 0; - finalScreenTexture = 0; -} - // Create Screen to fade from EXPORT void HWRAPI(StartScreenWipe) (void) { INT32 texsize = 2048; - boolean firstTime = (startScreenWipe == 0); // Use a power of two texture, dammit if(screen_width <= 512) @@ -2212,38 +2151,27 @@ EXPORT void HWRAPI(StartScreenWipe) (void) texsize = 1024; // Create screen texture - if (firstTime) - startScreenWipe = SCRTEX_STARTSCREENWIPE; pglBindTexture(GL_TEXTURE_2D, startScreenWipe); - - if (firstTime) - { #ifdef KOS_GL_COMPATIBILITY - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE); #else - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); #endif - Clamp2D(GL_TEXTURE_WRAP_S); - Clamp2D(GL_TEXTURE_WRAP_T); + Clamp2D(GL_TEXTURE_WRAP_S); + Clamp2D(GL_TEXTURE_WRAP_T); #ifndef KOS_GL_COMPATIBILITY - pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); -#endif - } - else -#ifndef KOS_GL_COMPATIBILITY - pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize); + pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); #endif - tex_downloaded = startScreenWipe; + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } // Create Screen to fade to EXPORT void HWRAPI(EndScreenWipe)(void) { INT32 texsize = 2048; - boolean firstTime = (endScreenWipe == 0); // Use a power of two texture, dammit if(screen_width <= 512) @@ -2252,32 +2180,21 @@ EXPORT void HWRAPI(EndScreenWipe)(void) texsize = 1024; // Create screen texture - if (firstTime) - endScreenWipe = SCRTEX_ENDSCREENWIPE; pglBindTexture(GL_TEXTURE_2D, endScreenWipe); - - if (firstTime) - { #ifdef KOS_GL_COMPATIBILITY - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE); #else - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); #endif - Clamp2D(GL_TEXTURE_WRAP_S); - Clamp2D(GL_TEXTURE_WRAP_T); + Clamp2D(GL_TEXTURE_WRAP_S); + Clamp2D(GL_TEXTURE_WRAP_T); #ifndef KOS_GL_COMPATIBILITY - pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); -#endif - } - else -#ifndef KOS_GL_COMPATIBILITY - pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize); + pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); #endif - - tex_downloaded = endScreenWipe; + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } @@ -2319,7 +2236,7 @@ EXPORT void HWRAPI(DrawIntermissionBG)(void) pglEnd(); - tex_downloaded = screentexture; + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } // Do screen fades! @@ -2410,7 +2327,6 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha) pglDisable(GL_TEXTURE_2D); // disable the texture in the 2nd texture unit pglActiveTexture(GL_TEXTURE0); - tex_downloaded = endScreenWipe; } else { @@ -2436,10 +2352,11 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha) pglTexCoord2f(xfix, 0.0f); pglVertex3f(1.0f, -1.0f, 1.0f); pglEnd(); - tex_downloaded = endScreenWipe; #ifndef MINI_GL_COMPATIBILITY } #endif + + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } @@ -2447,7 +2364,6 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha) EXPORT void HWRAPI(MakeScreenTexture) (void) { INT32 texsize = 2048; - boolean firstTime = (screentexture == 0); // Use a power of two texture, dammit if(screen_width <= 512) @@ -2456,37 +2372,26 @@ EXPORT void HWRAPI(MakeScreenTexture) (void) texsize = 1024; // Create screen texture - if (firstTime) - screentexture = SCRTEX_SCREENTEXTURE; pglBindTexture(GL_TEXTURE_2D, screentexture); - - if (firstTime) - { #ifdef KOS_GL_COMPATIBILITY - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE); #else - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); #endif - Clamp2D(GL_TEXTURE_WRAP_S); - Clamp2D(GL_TEXTURE_WRAP_T); + Clamp2D(GL_TEXTURE_WRAP_S); + Clamp2D(GL_TEXTURE_WRAP_T); #ifndef KOS_GL_COMPATIBILITY - pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); -#endif - } - else -#ifndef KOS_GL_COMPATIBILITY - pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize); + pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); #endif - tex_downloaded = screentexture; + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } EXPORT void HWRAPI(MakeScreenFinalTexture) (void) { INT32 texsize = 2048; - boolean firstTime = (finalScreenTexture == 0); // Use a power of two texture, dammit if(screen_width <= 512) @@ -2495,40 +2400,27 @@ EXPORT void HWRAPI(MakeScreenFinalTexture) (void) texsize = 1024; // Create screen texture - if (firstTime) - finalScreenTexture = SCRTEX_FINALSCREENTEXTURE; pglBindTexture(GL_TEXTURE_2D, finalScreenTexture); - - if (firstTime) - { #ifdef KOS_GL_COMPATIBILITY - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_FILTER_NONE); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_FILTER_NONE); #else - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); #endif - Clamp2D(GL_TEXTURE_WRAP_S); - Clamp2D(GL_TEXTURE_WRAP_T); + Clamp2D(GL_TEXTURE_WRAP_S); + Clamp2D(GL_TEXTURE_WRAP_T); #ifndef KOS_GL_COMPATIBILITY - pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); -#endif - } - else -#ifndef KOS_GL_COMPATIBILITY - pglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, texsize, texsize); + pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, texsize, texsize, 0); #endif - tex_downloaded = finalScreenTexture; + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } EXPORT void HWRAPI(DrawScreenFinalTexture)(int width, int height) { float xfix, yfix; - float origaspect, newaspect; - float xoff = 1, yoff = 1; // xoffset and yoffset for the polygon to have black bars around the screen - FRGBAFloat clearColour; INT32 texsize = 2048; if(screen_width <= 1024) @@ -2539,47 +2431,35 @@ EXPORT void HWRAPI(DrawScreenFinalTexture)(int width, int height) xfix = 1/((float)(texsize)/((float)((screen_width)))); yfix = 1/((float)(texsize)/((float)((screen_height)))); - origaspect = (float)screen_width / screen_height; - newaspect = (float)width / height; - if (origaspect < newaspect) - { - xoff = origaspect / newaspect; - yoff = 1; - } - else if (origaspect > newaspect) - { - xoff = 1; - yoff = newaspect / origaspect; - } - + //pglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); pglViewport(0, 0, width, height); - clearColour.red = clearColour.green = clearColour.blue = 0; - clearColour.alpha = 1; - ClearBuffer(true, false, &clearColour); pglBindTexture(GL_TEXTURE_2D, finalScreenTexture); pglBegin(GL_QUADS); pglColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Bottom left pglTexCoord2f(0.0f, 0.0f); - pglVertex3f(-xoff, -yoff, 1.0f); + pglVertex3f(-1, -1, 1.0f); // Top left pglTexCoord2f(0.0f, yfix); - pglVertex3f(-xoff, yoff, 1.0f); + pglVertex3f(-1, 1, 1.0f); // Top right pglTexCoord2f(xfix, yfix); - pglVertex3f(xoff, yoff, 1.0f); + pglVertex3f(1, 1, 1.0f); // Bottom right pglTexCoord2f(xfix, 0.0f); - pglVertex3f(xoff, -yoff, 1.0f); + pglVertex3f(1, -1, 1.0f); pglEnd(); - tex_downloaded = finalScreenTexture; + SetModelView(screen_width, screen_height); + SetStates(); + + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } #endif //HWRENDER diff --git a/src/lua_script.c b/src/lua_script.c index 7ed30367..b9c61ff9 100644 --- a/src/lua_script.c +++ b/src/lua_script.c @@ -479,10 +479,10 @@ static const struct { {NULL, ARCH_NULL} }; -static UINT8 GetUserdataArchType(int index) +static UINT8 GetUserdataArchType(void) { UINT8 i; - lua_getmetatable(gL, index); + lua_getmetatable(gL, -1); for (i = 0; meta2arch[i].meta; i++) { @@ -561,7 +561,7 @@ static UINT8 ArchiveValue(int TABLESINDEX, int myindex) break; } case LUA_TUSERDATA: - switch (GetUserdataArchType(myindex)) + switch (GetUserdataArchType()) { case ARCH_MOBJINFO: { @@ -768,25 +768,16 @@ static void ArchiveTables(void) lua_pushnil(gL); while (lua_next(gL, -2)) { - // Write key - e = ArchiveValue(TABLESINDEX, -2); // key should be either a number or a string, ArchiveValue can handle this. - if (e == 2) // invalid key type (function, thread, lightuserdata, or anything we don't recognise) - { - lua_pushvalue(gL, -2); - CONS_Alert(CONS_ERROR, "Index '%s' (%s) of table %d could not be archived!\n", lua_tostring(gL, -1), luaL_typename(gL, -1), i); - lua_pop(gL, 1); - } - // Write value + ArchiveValue(TABLESINDEX, -2); // key should be either a number or a string, ArchiveValue can handle this. e = ArchiveValue(TABLESINDEX, -1); if (e == 1) n++; // the table contained a new table we'll have to archive. :( - else if (e == 2) // invalid value type + else if (e == 2) { lua_pushvalue(gL, -2); CONS_Alert(CONS_ERROR, "Type of value for table %d entry '%s' (%s) could not be archived!\n", i, lua_tostring(gL, -1), luaL_typename(gL, -1)); lua_pop(gL, 1); } - lua_pop(gL, 1); } lua_pop(gL, 1); @@ -922,17 +913,11 @@ static void UnArchiveTables(void) lua_rawgeti(gL, TABLESINDEX, i); while (true) { - if (UnArchiveValue(TABLESINDEX) == 1) // read key + if (UnArchiveValue(TABLESINDEX) == 1) break; - if (UnArchiveValue(TABLESINDEX) == 2) // read value + if (UnArchiveValue(TABLESINDEX) == 2) n++; - if (lua_isnil(gL, -2)) // if key is nil (if a function etc was accidentally saved) - { - CONS_Alert(CONS_ERROR, "A nil key in table %d was found! (Invalid key type or corrupted save?)\n", i); - lua_pop(gL, 2); // pop key and value instead of setting them in the table, to prevent Lua panic errors - } - else - lua_rawset(gL, -3); + lua_rawset(gL, -3); } lua_pop(gL, 1); } diff --git a/src/m_menu.c b/src/m_menu.c index e7375a8d..007ea1d9 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1129,6 +1129,7 @@ static menuitem_t OP_MoveControlsMenu[] = {IT_CALL | IT_STRING2, NULL, "Use/Throw Item", M_ChangeControl, gc_fire }, {IT_CALL | IT_STRING2, NULL, "Look Backward", M_ChangeControl, gc_lookback }, + {IT_CALL | IT_STRING2, NULL, "Toggle Chasecam", M_ChangeControl, gc_camtoggle }, {IT_CALL | IT_STRING2, NULL, "Talk key", M_ChangeControl, gc_talkkey }, {IT_CALL | IT_STRING2, NULL, "Team-Talk key", M_ChangeControl, gc_teamkey }, {IT_CALL | IT_STRING2, NULL, "Rankings/Scores", M_ChangeControl, gc_scores }, @@ -1136,8 +1137,8 @@ static menuitem_t OP_MoveControlsMenu[] = {IT_CALL | IT_STRING2, NULL, "Pause", M_ChangeControl, gc_pause }, {IT_CALL | IT_STRING2, NULL, "Console", M_ChangeControl, gc_console }, - {IT_SUBMENU | IT_STRING, NULL, "Spectator Controls...", &OP_SpectateControlsDef, 112}, - {IT_SUBMENU | IT_STRING, NULL, "Custom Lua Actions...", &OP_CustomControlsDef, 120}, + {IT_SUBMENU | IT_STRING, NULL, "Spectator Controls...",&OP_SpectateControlsDef,120}, + {IT_SUBMENU | IT_STRING, NULL, "Custom Actions...", &OP_CustomControlsDef, 128}, }; static menuitem_t OP_SpectateControlsMenu[] = @@ -1146,8 +1147,6 @@ static menuitem_t OP_SpectateControlsMenu[] = {IT_CALL | IT_STRING2, NULL, "Look Up", M_ChangeControl, gc_lookup }, {IT_CALL | IT_STRING2, NULL, "Look Down", M_ChangeControl, gc_lookdown }, {IT_CALL | IT_STRING2, NULL, "Center View", M_ChangeControl, gc_centerview}, - {IT_CALL | IT_STRING2, NULL, "Reset Camera", M_ChangeControl, gc_camreset }, - {IT_CALL | IT_STRING2, NULL, "Toggle Chasecam", M_ChangeControl, gc_camtoggle }, }; static menuitem_t OP_CustomControlsMenu[] = @@ -6711,13 +6710,6 @@ static void M_DrawConnectIPMenu(void) static void M_ConnectIP(INT32 choice) { (void)choice; - - if (*setupm_ip == 0) - { - M_StartMessage("You must specify an IP address.\n", NULL, MM_NOTHING); - return; - } - COM_BufAddText(va("connect \"%s\"\n", setupm_ip)); // A little "please wait" message. @@ -7382,12 +7374,13 @@ static void M_Setup1PControlsMenu(INT32 choice) setupcontrols = gamecontrol; // was called from main Options (for console player, then) currentMenu->lastOn = itemOn; - // Unhide P1-only controls - OP_MoveControlsMenu[9].status = IT_CALL|IT_STRING2; // Talk - OP_MoveControlsMenu[10].status = IT_CALL|IT_STRING2; // Team talk - OP_MoveControlsMenu[11].status = IT_CALL|IT_STRING2; // Rankings - OP_MoveControlsMenu[12].status = IT_CALL|IT_STRING2; // Pause - OP_MoveControlsMenu[13].status = IT_CALL|IT_STRING2; // Console + // Unhide the three non-P2 controls + OP_MoveControlsMenu[12].status = IT_CALL|IT_STRING2; + OP_MoveControlsMenu[13].status = IT_CALL|IT_STRING2; + OP_MoveControlsMenu[14].status = IT_CALL|IT_STRING2; + // Unide the pause/console controls too + OP_MoveControlsMenu[10].status = IT_CALL|IT_STRING2; + OP_MoveControlsMenu[11].status = IT_CALL|IT_STRING2; OP_MoveControlsDef.prevMenu = &OP_P1ControlsDef; M_SetupNextMenu(&OP_MoveControlsDef); @@ -7402,12 +7395,13 @@ static void M_Setup2PControlsMenu(INT32 choice) setupcontrols = gamecontrolbis; currentMenu->lastOn = itemOn; - // Hide P1-only controls - OP_MoveControlsMenu[9].status = IT_GRAYEDOUT2; // Talk - OP_MoveControlsMenu[10].status = IT_GRAYEDOUT2; // Team talk - OP_MoveControlsMenu[11].status = IT_GRAYEDOUT2; // Rankings - OP_MoveControlsMenu[12].status = IT_GRAYEDOUT2; // Pause - OP_MoveControlsMenu[13].status = IT_GRAYEDOUT2; // Console + // Hide the three non-P2 controls + OP_MoveControlsMenu[12].status = IT_GRAYEDOUT2; + OP_MoveControlsMenu[13].status = IT_GRAYEDOUT2; + OP_MoveControlsMenu[14].status = IT_GRAYEDOUT2; + // Hide the pause/console controls too + OP_MoveControlsMenu[10].status = IT_GRAYEDOUT2; + OP_MoveControlsMenu[11].status = IT_GRAYEDOUT2; OP_MoveControlsDef.prevMenu = &OP_P2ControlsDef; M_SetupNextMenu(&OP_MoveControlsDef); @@ -7423,12 +7417,13 @@ static void M_Setup3PControlsMenu(INT32 choice) setupcontrols = gamecontrol3; currentMenu->lastOn = itemOn; - // Hide P1-only controls - OP_MoveControlsMenu[9].status = IT_GRAYEDOUT2; // Talk - OP_MoveControlsMenu[10].status = IT_GRAYEDOUT2; // Team talk - OP_MoveControlsMenu[11].status = IT_GRAYEDOUT2; // Rankings - OP_MoveControlsMenu[12].status = IT_GRAYEDOUT2; // Pause - OP_MoveControlsMenu[13].status = IT_GRAYEDOUT2; // Console + // Hide the three non-P3 controls + OP_MoveControlsMenu[12].status = IT_GRAYEDOUT2; + OP_MoveControlsMenu[13].status = IT_GRAYEDOUT2; + OP_MoveControlsMenu[14].status = IT_GRAYEDOUT2; + // Hide the pause/console controls too + OP_MoveControlsMenu[10].status = IT_GRAYEDOUT2; + OP_MoveControlsMenu[11].status = IT_GRAYEDOUT2; OP_MoveControlsDef.prevMenu = &OP_P3ControlsDef; M_SetupNextMenu(&OP_MoveControlsDef); @@ -7443,12 +7438,13 @@ static void M_Setup4PControlsMenu(INT32 choice) setupcontrols = gamecontrol4; currentMenu->lastOn = itemOn; - // Hide P1-only controls - OP_MoveControlsMenu[9].status = IT_GRAYEDOUT2; // Talk - OP_MoveControlsMenu[10].status = IT_GRAYEDOUT2; // Team talk - OP_MoveControlsMenu[11].status = IT_GRAYEDOUT2; // Rankings - OP_MoveControlsMenu[12].status = IT_GRAYEDOUT2; // Pause - OP_MoveControlsMenu[13].status = IT_GRAYEDOUT2; // Console + // Hide the three non-P4 controls + OP_MoveControlsMenu[12].status = IT_GRAYEDOUT2; + OP_MoveControlsMenu[13].status = IT_GRAYEDOUT2; + OP_MoveControlsMenu[14].status = IT_GRAYEDOUT2; + // Hide the pause/console controls too + OP_MoveControlsMenu[10].status = IT_GRAYEDOUT2; + OP_MoveControlsMenu[11].status = IT_GRAYEDOUT2; OP_MoveControlsDef.prevMenu = &OP_P4ControlsDef; M_SetupNextMenu(&OP_MoveControlsDef); diff --git a/src/m_misc.c b/src/m_misc.c index 573354f0..0d0be0f6 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -644,12 +644,13 @@ static void M_PNGhdr(png_structp png_ptr, png_infop png_info_ptr, PNG_CONST png_ static void M_PNGText(png_structp png_ptr, png_infop png_info_ptr, PNG_CONST png_byte movie) { #ifdef PNG_TEXT_SUPPORTED -#define SRB2PNGTXT 10 //PNG_KEYWORD_MAX_LENGTH(79) is the max +#define SRB2PNGTXT 11 //PNG_KEYWORD_MAX_LENGTH(79) is the max png_text png_infotext[SRB2PNGTXT]; char keytxt[SRB2PNGTXT][12] = { - "Title", "Description", "Playername", "Mapnum", "Mapname", + "Title", "Author", "Description", "Playername", "Mapnum", "Mapname", "Location", "Interface", "Revision", "Build Date", "Build Time"}; char titletxt[] = "SRB2Kart " VERSIONSTRING; + png_charp authortxt = I_GetUserName(); png_charp playertxt = cv_playername.zstring; char desctxt[] = "SRB2Kart Screenshot"; char Movietxt[] = "SRB2Kart Movie"; @@ -700,18 +701,19 @@ static void M_PNGText(png_structp png_ptr, png_infop png_info_ptr, PNG_CONST png png_infotext[i].key = keytxt[i]; png_infotext[0].text = titletxt; + png_infotext[1].text = authortxt; if (movie) - png_infotext[1].text = Movietxt; + png_infotext[2].text = Movietxt; else - png_infotext[1].text = desctxt; - png_infotext[2].text = playertxt; - png_infotext[3].text = maptext; - png_infotext[4].text = lvlttltext; - png_infotext[5].text = locationtxt; - png_infotext[6].text = interfacetxt; - png_infotext[7].text = strncpy(ctrevision, comprevision, sizeof(ctrevision)-1); - png_infotext[8].text = strncpy(ctdate, compdate, sizeof(ctdate)-1); - png_infotext[9].text = strncpy(cttime, comptime, sizeof(cttime)-1); + png_infotext[2].text = desctxt; + png_infotext[3].text = playertxt; + png_infotext[4].text = maptext; + png_infotext[5].text = lvlttltext; + png_infotext[6].text = locationtxt; + png_infotext[7].text = interfacetxt; + png_infotext[8].text = strncpy(ctrevision, comprevision, sizeof(ctrevision)-1); + png_infotext[9].text = strncpy(ctdate, compdate, sizeof(ctdate)-1); + png_infotext[10].text = strncpy(cttime, comptime, sizeof(cttime)-1); png_set_text(png_ptr, png_info_ptr, png_infotext, SRB2PNGTXT); #undef SRB2PNGTXT diff --git a/src/p_setup.c b/src/p_setup.c index 3071b224..1986380d 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2629,7 +2629,6 @@ boolean P_SetupLevel(boolean skipprecip) { tic_t starttime = I_GetTime(); tic_t endtime = starttime + (3*TICRATE)/2; - tic_t nowtime; S_StartSound(NULL, sfx_s3kaf); @@ -2639,17 +2638,9 @@ boolean P_SetupLevel(boolean skipprecip) F_WipeEndScreen(); F_RunWipe(wipedefs[wipe_speclevel_towhite], false); - nowtime = lastwipetic; // Hold on white for extra effect. - while (nowtime < endtime) - { - // wait loop - while (!((nowtime = I_GetTime()) - lastwipetic)) - I_Sleep(); - lastwipetic = nowtime; - if (moviemode) // make sure we save frames for the white hold too - M_SaveFrame(); - } + while (I_GetTime() < endtime) + I_Sleep(); ranspecialwipe = 1; } diff --git a/src/r_things.h b/src/r_things.h index 347f204f..7a9729a3 100644 --- a/src/r_things.h +++ b/src/r_things.h @@ -69,7 +69,7 @@ void R_DrawMasked(void); #define DEFAULTSKIN "sonic" #define DEFAULTSKIN2 "tails" // secondary player #define DEFAULTSKIN3 "knuckles" // third player -#define DEFAULTSKIN4 "eggman" // fourth player +#define DEFAULTSKIN4 "metalsonic" // fourth player typedef struct { diff --git a/src/sdl/hwsym_sdl.c b/src/sdl/hwsym_sdl.c index 05ac6450..f4686d2b 100644 --- a/src/sdl/hwsym_sdl.c +++ b/src/sdl/hwsym_sdl.c @@ -94,7 +94,6 @@ void *hwSym(const char *funcName,void *handle) #ifdef SHUFFLE GETFUNC(PostImgRedraw); #endif //SHUFFLE - GETFUNC(FlushScreenTextures); GETFUNC(StartScreenWipe); GETFUNC(EndScreenWipe); GETFUNC(DoScreenWipe); diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index 3575afa8..9ee17cc3 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -3371,7 +3371,7 @@ const char *I_LocateWad(void) return waddir; } -#ifdef __linux__ +#if defined(LINUX) || defined(LINUX64) #define MEMINFO_FILE "/proc/meminfo" #define MEMTOTAL "MemTotal:" #define MEMFREE "MemFree:" @@ -3391,23 +3391,20 @@ UINT32 I_GetFreeMem(UINT32 *total) }; if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open")) == NULL) { - if (total) - *total = 0L; + *total = 0L; return 0; } if (kvm_nlist(kd, namelist) != 0) { kvm_close (kd); - if (total) - *total = 0L; + *total = 0L; return 0; } if (kvm_read(kd, namelist[X_SUM].n_value, &sum, sizeof (sum)) != sizeof (sum)) { kvm_close(kd); - if (total) - *total = 0L; + *total = 0L; return 0; } kvm_close(kd); @@ -3438,7 +3435,7 @@ UINT32 I_GetFreeMem(UINT32 *total) (PVOID) &pr_arena, sizeof (UINT32)); return pr_arena; -#elif defined (__linux__) +#elif defined (LINUX) || defined (LINUX64) /* Linux */ char buf[1024]; char *memTag; @@ -3454,28 +3451,25 @@ UINT32 I_GetFreeMem(UINT32 *total) if (n < 0) { // Error - if (total) - *total = 0L; + *total = 0L; return 0; } buf[n] = '\0'; - if ((memTag = strstr(buf, MEMTOTAL)) == NULL) + if (NULL == (memTag = strstr(buf, MEMTOTAL))) { // Error - if (total) - *total = 0L; + *total = 0L; return 0; } memTag += sizeof (MEMTOTAL); totalKBytes = atoi(memTag); - if ((memTag = strstr(buf, MEMFREE)) == NULL) + if (NULL == (memTag = strstr(buf, MEMFREE))) { // Error - if (total) - *total = 0L; + *total = 0L; return 0; } @@ -3490,7 +3484,7 @@ UINT32 I_GetFreeMem(UINT32 *total) if (total) *total = 48<<20; return 48<<20; -#endif +#endif /* LINUX */ } const CPUInfoFlags *I_CPUInfo(void) diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index df8af61b..12103349 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -1506,7 +1506,6 @@ void I_StartupGraphics(void) #ifdef SHUFFLE HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL); #endif - HWD.pfnFlushScreenTextures=hwSym("FlushScreenTextures",NULL); HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL); HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL); HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL); diff --git a/src/sdl/ogl_sdl.c b/src/sdl/ogl_sdl.c index 4347b35b..cd7ced7c 100644 --- a/src/sdl/ogl_sdl.c +++ b/src/sdl/ogl_sdl.c @@ -214,11 +214,8 @@ void OglSdlFinishUpdate(boolean waitvbl) HWR_DrawScreenFinalTexture(sdlw, sdlh); SDL_GL_SwapWindow(window); - GClipRect(0, 0, realwidth, realheight, NZCLIP_PLANE); - - // Sryder: We need to draw the final screen texture again into the other buffer in the original position so that - // effects that want to take the old screen can do so after this - HWR_DrawScreenFinalTexture(realwidth, realheight); + SetModelView(realwidth, realheight); + SetStates(); } EXPORT void HWRAPI( OglSdlSetPalette) (RGBA_t *palette, RGBA_t *pgamma) diff --git a/src/sdl/sdl_sound.c b/src/sdl/sdl_sound.c index bc98ee2f..3e837267 100644 --- a/src/sdl/sdl_sound.c +++ b/src/sdl/sdl_sound.c @@ -1180,6 +1180,12 @@ void I_StartupSound(void) audio.callback = I_UpdateStream; audio.userdata = &localdata; + if (dedicated) + { + nosound = nomidimusic = nodigimusic = true; + return; + } + // Configure sound device CONS_Printf("I_StartupSound:\n"); @@ -1475,6 +1481,9 @@ void I_InitMusic(void) I_AddExitFunc(I_ShutdownGMEMusic); #endif + if ((nomidimusic && nodigimusic) || dedicated) + return; + #ifdef HAVE_MIXER MIX_VERSION(&MIXcompiled) MIXlinked = Mix_Linked_Version(); diff --git a/src/sdl12/hwsym_sdl.c b/src/sdl12/hwsym_sdl.c index 49340138..54f5da3a 100644 --- a/src/sdl12/hwsym_sdl.c +++ b/src/sdl12/hwsym_sdl.c @@ -100,7 +100,6 @@ void *hwSym(const char *funcName,void *handle) #ifdef SHUFFLE GETFUNC(PostImgRedraw); #endif //SHUFFLE - GETFUNC(FlushScreenTextures); GETFUNC(StartScreenWipe); GETFUNC(EndScreenWipe); GETFUNC(DoScreenWipe); diff --git a/src/sdl12/i_video.c b/src/sdl12/i_video.c index f44b60c8..8754587a 100644 --- a/src/sdl12/i_video.c +++ b/src/sdl12/i_video.c @@ -1972,7 +1972,6 @@ void I_StartupGraphics(void) #ifdef SHUFFLE HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL); #endif - HWD.pfnFlushScreenTextures=hwSym("FlushScreenTextures",NULL); HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL); HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL); HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL); diff --git a/src/v_video.c b/src/v_video.c index 801a577f..68998139 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -943,6 +943,14 @@ void V_DrawPatchFill(patch_t *pat) INT32 dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy); INT32 x, y, pw = SHORT(pat->width) * dupz, ph = SHORT(pat->height) * dupz; +#ifdef HWRENDER + if (rendermode == render_opengl) + { + pw = FixedMul(SHORT(pat->width)*FRACUNIT, vid.fdupx)>>FRACBITS; + ph = FixedMul(SHORT(pat->height)*FRACUNIT, vid.fdupy)>>FRACBITS; + } +#endif + for (x = 0; x < vid.width; x += pw) { for (y = 0; y < vid.height; y += ph) diff --git a/src/win32/win_dll.c b/src/win32/win_dll.c index c9b3fba4..8fa4d17f 100644 --- a/src/win32/win_dll.c +++ b/src/win32/win_dll.c @@ -117,7 +117,6 @@ static loadfunc_t hwdFuncTable[] = { #ifdef SHUFFLE {"PostImgRedraw@4", &hwdriver.pfnPostImgRedraw}, #endif - {"FlushScreenTextures@0",&hwdriver.pfnFlushScreenTextures}, {"StartScreenWipe@0", &hwdriver.pfnStartScreenWipe}, {"EndScreenWipe@0", &hwdriver.pfnEndScreenWipe}, {"DoScreenWipe@4", &hwdriver.pfnDoScreenWipe}, @@ -148,7 +147,6 @@ static loadfunc_t hwdFuncTable[] = { #ifdef SHUFFLE {"PostImgRedraw", &hwdriver.pfnPostImgRedraw}, #endif - {"FlushScreenTextures"},&hwdriver.pfnFlushScreenTextures}, {"StartScreenWipe", &hwdriver.pfnStartScreenWipe}, {"EndScreenWipe", &hwdriver.pfnEndScreenWipe}, {"DoScreenWipe", &hwdriver.pfnDoScreenWipe},