From 9c9041484a4091fd6550376e826e3208d16d7158 Mon Sep 17 00:00:00 2001 From: GenericHeroGuy Date: Tue, 30 Sep 2025 17:37:45 +0200 Subject: [PATCH] Recursively renormalize line endings --- .gitattributes | 16 +- src/Makefile.d/features.mk | 142 +-- src/h_timers.cpp | 1080 +++++++++---------- src/info/sounds.h | 1998 ++++++++++++++++++------------------ 4 files changed, 1619 insertions(+), 1617 deletions(-) diff --git a/.gitattributes b/.gitattributes index 7751149ac..38c4c06fa 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,9 +1,13 @@ #Source code -/src/*.c text=auto -/src/*.h text=auto -/src/*.s text=auto -/src/*.m text=auto -/src/*.xpm text=auto +/src/**/*.c text=auto +/src/**/*.cpp text=auto +/src/**/*.h text=auto +/src/**/*.hpp text=auto +/src/**/*.s text=auto +/src/**/*.m text=auto +/src/**/*.xpm text=auto +/src/**/Sourcefile text=auto +/src/**/*.mk text=auto /src/Makefile text=auto /src/Make*.cfg text=auto /src/CMakeLists.txt text=auto @@ -20,8 +24,6 @@ *.csproj* -crlf -whitespace *.vcxproj* -crlf -whitespace *.manifest -crlf -whitespace -# Patches -/tools/SDL-1.2.14-gc/SDL-1.2.14-gc.patch -whitespace #Appveyor /appveyor.yml -crlf -whitespace # Other diff --git a/src/Makefile.d/features.mk b/src/Makefile.d/features.mk index 3326a39ff..33a8f04f7 100644 --- a/src/Makefile.d/features.mk +++ b/src/Makefile.d/features.mk @@ -1,71 +1,71 @@ -# -# Makefile for feature flags. -# - -passthru_opts+=\ - NO_IPV6 NOHW NOPOSTPROCESSING\ - MOBJCONSISTANCY PACKETDROP ZDEBUG\ - HAVE_MINIUPNPC\ - HAVE_DISCORDRPC DEVELOP - -# build with debugging information -ifdef DEBUGMODE -MOBJCONSISTANCY=1 -PACKETDROP=1 -opts+=-DPARANOIA -DRANGECHECK -endif - -ifndef NOHW -opts+=-DHWRENDER -sources+=$(call List,hardware/Sourcefile) -endif - -ifndef NOZLIB -ifndef NOPNG -ifdef PNG_PKGCONFIG -$(eval $(call Use_pkg_config,PNG_PKGCONFIG)) -else -PNG_CONFIG?=$(call Prefix,libpng-config) -$(eval $(call Configure,PNG,$(PNG_CONFIG) \ - $(if $(PNG_STATIC),--static),,--ldflags)) -endif -ifdef LINUX -opts+=-D_LARGEFILE64_SOURCE -endif -opts+=-DHAVE_PNG -sources+=apng.c -endif -endif - -ifndef NOCURL -CURLCONFIG?=curl-config -$(eval $(call Configure,CURL,$(CURLCONFIG))) -opts+=-DHAVE_CURL -endif - -ifdef HAVE_MINIUPNPC -libs+=-lminiupnpc -endif - -ifdef HAVE_DISCORDRPC -$(eval $(call Propogate_flags,DISCORDRPC)) -libs+=-ldiscord-rpc -opts+=-DUSE_STUN -sources+=discord.c stun.c -endif - -# (Valgrind is a memory debugger.) -ifdef VALGRIND -VALGRIND_PKGCONFIG?=valgrind -$(eval $(call Use_pkg_config,VALGRIND)) -ZDEBUG=1 -opts+=-DHAVE_VALGRIND -endif - -default_packages:=\ - GME/libgme/LIBGME\ - OPENMPT/libopenmpt/LIBOPENMPT\ - ZLIB/zlib\ - -$(foreach p,$(default_packages),\ - $(eval $(call Check_pkg_config,$(p)))) +# +# Makefile for feature flags. +# + +passthru_opts+=\ + NO_IPV6 NOHW NOPOSTPROCESSING\ + MOBJCONSISTANCY PACKETDROP ZDEBUG\ + HAVE_MINIUPNPC\ + HAVE_DISCORDRPC DEVELOP + +# build with debugging information +ifdef DEBUGMODE +MOBJCONSISTANCY=1 +PACKETDROP=1 +opts+=-DPARANOIA -DRANGECHECK +endif + +ifndef NOHW +opts+=-DHWRENDER +sources+=$(call List,hardware/Sourcefile) +endif + +ifndef NOZLIB +ifndef NOPNG +ifdef PNG_PKGCONFIG +$(eval $(call Use_pkg_config,PNG_PKGCONFIG)) +else +PNG_CONFIG?=$(call Prefix,libpng-config) +$(eval $(call Configure,PNG,$(PNG_CONFIG) \ + $(if $(PNG_STATIC),--static),,--ldflags)) +endif +ifdef LINUX +opts+=-D_LARGEFILE64_SOURCE +endif +opts+=-DHAVE_PNG +sources+=apng.c +endif +endif + +ifndef NOCURL +CURLCONFIG?=curl-config +$(eval $(call Configure,CURL,$(CURLCONFIG))) +opts+=-DHAVE_CURL +endif + +ifdef HAVE_MINIUPNPC +libs+=-lminiupnpc +endif + +ifdef HAVE_DISCORDRPC +$(eval $(call Propogate_flags,DISCORDRPC)) +libs+=-ldiscord-rpc +opts+=-DUSE_STUN +sources+=discord.c stun.c +endif + +# (Valgrind is a memory debugger.) +ifdef VALGRIND +VALGRIND_PKGCONFIG?=valgrind +$(eval $(call Use_pkg_config,VALGRIND)) +ZDEBUG=1 +opts+=-DHAVE_VALGRIND +endif + +default_packages:=\ + GME/libgme/LIBGME\ + OPENMPT/libopenmpt/LIBOPENMPT\ + ZLIB/zlib\ + +$(foreach p,$(default_packages),\ + $(eval $(call Check_pkg_config,$(p)))) diff --git a/src/h_timers.cpp b/src/h_timers.cpp index 678ed9a2e..599f2f499 100644 --- a/src/h_timers.cpp +++ b/src/h_timers.cpp @@ -1,540 +1,540 @@ -// BLANKART -//----------------------------------------------------------------------------- -// Copyright (C) 2025 by haya3218. -// Copyright (C) 2018-2024 by Kart Krew -// -// This program is free software distributed under the -// terms of the GNU General Public License, version 2. -// See the 'LICENSE' file for more details. -//----------------------------------------------------------------------------- -/// \file h_timers.cpp -/// \brief C++ port of Home's item timers - -#include "h_timers.h" -#include "k_hud.h" -#include "r_draw.h" -#include "z_zone.h" -#include "v_video.h" -#include "k_kart.h" -#include "k_color.h" -#include "g_game.h" -#include "p_local.h" -#include "k_kart.h" -#include "g_game.h" -#include "r_main.h" -#include "d_netcmd.h" -#include "m_easing.h" -#include "k_boss.h" -#include "st_stuff.h" -#include "lua_hud.h" -#include "r_main.h" -#include "r_fps.h" -#include "s_sound.h" -#include "fastcmp.h" -#include "m_cond.h" -#include -#include -#include - -consvar_t cv_itemtimers = CVAR_INIT ("itemtimers", "On", CV_SAVE, CV_OnOff, NULL); - -typedef struct itimer_s -{ - const char* name; // name of timer - INT32 timer; // current time - //std::vector patches; // timer graphics (big/freeplay) - std::vector patches_small; // timer graphics (small) - INT32 anim_frames; // tic duration for each graphic - //INT32 xoffs = 0, yoffs = 0; // offsets for freeplay mode - INT32 xoffs_small = 0, yoffs_small = 0; // offsets for normal mode - boolean counter; // not a timer, show a counter instead - boolean badtimer; // timer is colored red - INT32 *timer_p; // if defined, uses a pointer for the timer instead -} itimer_t; - -static bool sorttimers(itimer_t a, itimer_t b) -{ - return a.timer < b.timer; -} - -static inline INT32 G_TicsToDeciseconds(tic_t tics) -{ - return (INT32)((tics%TICRATE) * (10.00f/TICRATE)); -} - -tic_t spbTimers[MAXPLAYERS] = {0}; - -UINT8 K_GetBestRank(void) -{ - UINT8 best = UINT8_MAX; - INT32 i; - - for (i = 0; i < MAXPLAYERS; i++) - { - if (!playeringame[i] || players[i].exiting || players[i].spectator) - continue; - best = std::min(best, players[i].position); - } - - return best; -} - -// SPB Timer related -void K_UpdateSPBTimer(void) -{ - if (!(cv_itemtimers.value)) - { - // no need to attempt to account for the timers - memset(spbTimers, 0, sizeof spbTimers); - return; - } - INT32 i, bestrank = 255; - for (i = 0; i < MAXPLAYERS; i++) - { - if (!playeringame[i] || players[i].exiting || players[i].spectator) - continue; - spbTimers[i] = 0; - bestrank = std::min(bestrank, players[i].position); - - // check for spb - mobj_t *mobj, *next; - for (mobj = kitemcap; mobj; mobj = next) - { - next = mobj->itnext; - - // Look I don need other shit here besides the SPB - if (mobj->type != MT_SPB) - continue; - - // Don't bother SPBs with no player yet - if (mobj->tracer == NULL || P_MobjWasRemoved(mobj->tracer)) - continue; - if (mobj->tracer->player == NULL) - continue; - - player_t *spbplayer = mobj->tracer->player; - if (spbplayer->position > bestrank) - { - spbTimers[spbplayer-players] = mobj->extravalue2; - if (players[i].position == bestrank) - spbTimers[i] = mobj->extravalue2; - else if (&players[i] != spbplayer) - spbTimers[i] = 0; - } - else - spbTimers[i] = 0; - } - } -} - -static std::unordered_map cachedPatches; - -static patch_t *qche(const char* p) -{ - if (cachedPatches.find(p) != cachedPatches.end()) - return cachedPatches[p]; - cachedPatches[p] = (patch_t*)W_CachePatchLongName(p, PU_CACHE); - return cachedPatches[p]; -} - -static std::vector addTimers; -static std::vector addTimers_unsorted; - -void K_AddItemTimerEx( - const char *name, - INT32 *timer, - /*char **patches,*/ char **patches_small, - /*INT32 patches_size,*/ INT32 patches_small_size, - INT32 anim_duration, - INT32 xoffs, INT32 yoffs, - INT32 xoffs_small, INT32 yoffs_small, - boolean counter, boolean unsorted) -{ - itimer_t t; // woo yeah baby - - t.name = name; - t.timer_p = timer; - INT32 i; - - //for (i = 0; i < patches_size; i++) - //t.patches.push_back(qche(patches[i])); - for (i = 0; i < patches_small_size; i++) - t.patches_small.push_back(qche(patches_small[i])); - - t.anim_frames = anim_duration; - //t.xoffs = xoffs; t.yoffs = yoffs; - t.xoffs_small = xoffs_small; t.yoffs_small = yoffs_small; - t.counter = counter; - - // yeah - if (unsorted) - addTimers_unsorted.push_back(t); - else - addTimers.push_back(t); -} - -void K_getTimersDrawinfo(drawinfo_t *out) -{ - INT32 fx, fy, flags = V_HUDTRANS|V_SNAPTOBOTTOM|V_SPLITSCREEN; - - fx = 160 + cv_timers_xoffset.value; - fy = 170 + cv_timers_yoffset.value; - - if (r_splitscreen == 1) - { - flags &= ~V_SNAPTOBOTTOM; - fx = 160; - fy = 75; - } - else if (r_splitscreen > 1) - { - flags &= ~V_SNAPTOBOTTOM; - fy = 75; - fx = 80; - } - - if (r_splitscreen > 0) - { - flags &= ~V_HUDTRANS; - flags |= V_30TRANS; - } - - out->x = fx; - out->y = fy; - out->flags = flags; -} - -void K_DisplayItemTimers(void) -{ - if (!cv_itemtimers.value) return; - // nooope - if (stplyr->mo == NULL || P_MobjWasRemoved(stplyr->mo)) return; - // I love and hate you C++ - std::vector timers = - { - { // sneaker - "shoe", - stplyr->sneakertimer, - //{qche("K_ISSHOE")}, - {qche("K_TISHOE")}, - 1, /*-15, -15,*/ -4, -2, - }, - { // invinc - "invincible", - stplyr->invincibilitytimer, - //{qche("K_ISINV1"), qche("K_ISINV2"), qche("K_ISINV3"), qche("K_ISINV4"), qche("K_ISINV5"), qche("K_ISINV6")}, - {qche("K_TIINV1"), qche("K_TIINV2"), qche("K_TIINV3"), qche("K_TIINV4"), qche("K_TIINV5"), qche("K_TIINV6")}, - 3, /*-15, -15,*/ -4, -2, - }, - { // grow - "grow", - std::max(0, stplyr->growshrinktimer), - //{qche("K_ISGROW")}, - {qche("K_TIGROW")}, - 1, /*-15, -15,*/ -4, -2, - }, - { // rocket sneakers - "rocketsneakers", - stplyr->rocketsneakertimer, - //{qche("K_ISRSHE")}, - {qche("K_TIRSHE")}, - 1, /*-15, -15,*/ -4, -2, - }, - { // hyudoro - "hyudoro", - stplyr->hyudorotimer, - //{qche("K_ISHYUD")}, - {qche("K_TIHYUD")}, - 1, /*-15, -15,*/ -4, -2, - }, - { // drift boost - "driftsparkboost", - stplyr->driftboost, - //{qche("K_DRSP1"), qche("K_DRSP2")}, - {qche("K_TISRK1"), qche("K_TISRK2")}, - 2, /*-15, -15,*/ -4, -2, - }, - { // start boost - "startboost", - stplyr->startboost, - //{qche("K_ISSTB")}, - {qche("K_TISTB")}, - 1, /*-15, -15,*/ -4, -2, - }, - { // ring boost - "ringboost", - stplyr->ringboost, - //{qche("K_ISRING")}, - {qche("K_TIRING")}, - 1, /*-15, -15,*/ -4, -2, - }, - { // flameshield - "flameshield", - stplyr->flametimer, - //{qche("K_ISFLMS")}, - {qche("K_TIFLMS")}, - 1, /*-15, -15,*/ -4, -2, - }, - }; - - // insert sortable timers - timers.insert(timers.end(), addTimers.begin(), addTimers.end()); - - // Sort them based on time - std::sort(timers.begin(), timers.end(), sorttimers); - - // Spinout and shrink are always last - timers.push_back( - { // spinout - "spinout", - std::max(stplyr->spinouttimer, stplyr->wipeoutslow), - //{qche("K_DIZZ1"), qche("K_DIZZ2"), qche("K_DIZZ3"), qche("K_DIZZ4")}, - {qche("K_TISPN1"), qche("K_TISPN2"), qche("K_TISPN3"), qche("K_TISPN4")}, - 3, /*-15, -15,*/ -4, -2, - false, - true, - } - ); - timers.push_back( - { // shrink - "shrink", - std::max(0, -stplyr->growshrinktimer), - //{qche("K_ISSHRK")}, - {qche("K_TISHRK")}, - 1, - //-15, - //-15, - -4, - -2, - false, - true, - } - ); - timers.push_back( - { // spb - "spb", - (INT32)spbTimers[stplyr-players], - //{qche("K_ISSPB")}, - {qche("K_TISPB")}, - 1, - //-15, - //-15, - -4, - -2, - false, - (stplyr->position == K_GetBestRank()) - } - ); - // Same with boost stacks - timers.push_back( - { // boosts - "boosts", - K_StackingActive() ? stplyr->numboosts : 0, - //{qche("K_DRSP1"), qche("K_DRSP2")}, - {qche("K_TISRK1"), qche("K_TISRK2")}, - 2, /*-15, -15,*/ -3, -2, - true, - } - ); - - /*timers.push_back( - { // dead - "spr_realisticexplosion", - stplyr->deadtimer ? std::max(0, TICRATE - stplyr->deadtimer) : 0, - //{qche("IT_DED1"), qche("IT_DED2"), qche("IT_DED3"), qche("IT_DED4"), qche("IT_DED5"), qche("IT_DED6"), qche("IT_DED7"), qche("IT_DED8")}, - {qche("IT_DEAD1"), qche("IT_DEAD2"), qche("IT_DEAD3"), qche("IT_DEAD4"), qche("IT_DEAD5"), qche("IT_DEAD6"), qche("IT_DEAD7"), qche("IT_DEAD8")}, - 1, - //0, - //-4, - 0, - 0, - false, - true, - } - );*/ - - // insert unsortable timers - timers.insert(timers.end(), addTimers_unsorted.begin(), addTimers_unsorted.end()); - - if (!modeattacking) // "HOME" style, with icons at the bottom - { - INT32 itemx = 0, itemy = 0; - INT32 flags = 0; - INT32 stepx = 25; - INT32 viewnum = R_GetViewNumber(); - - drawinfo_t info; - K_getTimersDrawinfo(&info); - itemx = info.x; - itemy = info.y; - flags = info.flags; - - // Move it up to account for viewpoint text - if (cv_showviewpointtext.value && !demo.title && !P_IsLocalPlayer(stplyr) && !camera[viewnum].freecam && !r_splitscreen) - itemy -= 12; - - // flags |= V_HUDTRANS; - - INT32 offs = -stepx; - for (itimer_t& t : timers) - { - INT32 timer = t.timer; - if (t.timer_p) timer = *t.timer_p; - if (stplyr->deadtimer && !fastcmp(t.name, "spr_realisticexplosion")) continue; - if (timer > 0) - offs += stepx; - } - - itemx -= offs/2; - // draw relevant timers - for (itimer_t& t : timers) - { - if (t.timer <= 0) continue; - if (stplyr->deadtimer && !fastcmp(t.name, "spr_realisticexplosion")) continue; - INT32 timer = t.timer; - if (t.timer_p) timer = *t.timer_p; - INT32 seconds = timer / TICRATE, _centiseconds = G_TicsToCentiseconds(timer); - - const char* str = va("%d.%02d", seconds, _centiseconds); - if (seconds > 9) // exceeds 9 seconds? - str = va("%d.%01d", seconds, G_TicsToDeciseconds(timer)); - if (seconds > 99) // exceeds 100 seconds? - str = va("%d", seconds); - INT32 animsize = t.patches_small.size(); - INT32 patchnum = (leveltime % (t.anim_frames * animsize) / t.anim_frames); - UINT8 *cmap = NULL, *textcmap = NULL; - INT32 font = TINY_FONT; - - if (fastcmp(t.name, "driftsparkboost")) - { - if (timer > 85) // rainbow - cmap = R_GetTranslationColormap(TC_DEFAULT, (skincolornum_t)K_RainbowColor(leveltime), GTC_CACHE); - else if (timer > 50 && K_PurpleDriftActive()) // purple - cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_PURPLE, GTC_CACHE); - else if (timer > 25) // ketchup - cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_KETCHUP, GTC_CACHE); - else // blu - cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_SAPPHIRE, GTC_CACHE); - textcmap = cmap; - } - - if (fastcmp(t.name, "boosts")) - { - flags |= V_GREENMAP; - } - - if (t.counter) // don't show up as time - { - str = va("%d", timer); - font = HU_FONT; - } - INT32 width = V_StringScaledWidth(FRACUNIT, FRACUNIT, FRACUNIT, flags|V_MONOSPACE, font, str) >> FRACBITS; - - // very bad! - if (t.badtimer) - { - flags |= V_REDMAP; - //textcmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_CRIMSON, GTC_CACHE); - } - - patch_t *item = t.patches_small[patchnum]; - V_DrawFixedPatch((itemx - (item->width/2))<leftoffset) << FRACBITS, - (itemy + 12) << FRACBITS, - FRACUNIT, - FRACUNIT, - FRACUNIT, - FRACUNIT, - flags|V_MONOSPACE, - textcmap, - font, - str - ); - - itemx += stepx; - } - } - /*else // FREEPLAY - Move these to the left side, where the rankings usually are - { - if (r_splitscreen) // How? - return; - - INT32 fx = 9, fy = 92, step = 20; - INT32 flags = V_SNAPTOLEFT|V_SLIDEIN; - - // center it - INT32 offs = -step; - for (itimer_t& t : timers) - { - INT32 timer = t.timer; - if (t.timer_p) timer = *t.timer_p; - if (stplyr->deadtimer && !fastcmp(t.name, "spr_realisticexplosion")) continue; - if (timer > 0) - offs += step; - } - fy -= offs/2; - - // draw relevant timers - for (itimer_t& t : timers) - { - if (t.timer <= 0) continue; - if (stplyr->deadtimer && !fastcmp(t.name, "spr_realisticexplosion")) continue; - INT32 timer = t.timer; - if (t.timer_p) timer = *t.timer_p; - INT32 seconds = timer / TICRATE, _centiseconds = G_TicsToCentiseconds(timer); - INT32 patchnum = (leveltime % (t.anim_frames * t.patches.size()) / t.anim_frames); - UINT8 *cmap = NULL, *textcmap = NULL; - - const char* str = va("%d.%02d", seconds, _centiseconds); - if (seconds > 9) // exceeds 9 seconds? - str = va("%d.%01d", seconds, G_TicsToDeciseconds(timer)); - if (seconds > 99) // exceeds 100 seconds? - str = va("%d", seconds); - boolean bost = false; - if (fastcmp(t.name, "boosts")) // don't show up as time - { - str = va("%d", timer); - bost = true; - } - INT32 width = V_StringScaledWidth(FRACUNIT, FRACUNIT, FRACUNIT, flags|V_MONOSPACE, OPPRNK_FONT, str) >> FRACBITS; - - if (fastcmp(t.name, "driftsparkboost")) - { - if (timer > 85) // rainbow - cmap = R_GetTranslationColormap(TC_DEFAULT, (skincolornum_t)K_RainbowColor(leveltime), GTC_CACHE); - else if (timer > 50 && K_PurpleDriftActive()) // purple - cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_PURPLE, GTC_CACHE); - else if (timer > 25) // ketchup - cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_KETCHUP, GTC_CACHE); - else // blu - cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_SAPPHIRE, GTC_CACHE); - textcmap = cmap; - } - - // very bad! - if (t.badtimer) - textcmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_CRIMSON, GTC_CACHE); - - patch_t *item = t.patches[patchnum]; - V_DrawFixedPatch((fx+t.xoffs)<width/2) - (width/2) - item->leftoffset + t.xoffs) << FRACBITS, - (fy+5) << FRACBITS, - FRACUNIT, - FRACUNIT, - FRACUNIT, - FRACUNIT, - flags|V_MONOSPACE, - textcmap, - TINY_FONT, - str - ); - - - fy += step; - } - } - */ -} +// BLANKART +//----------------------------------------------------------------------------- +// Copyright (C) 2025 by haya3218. +// Copyright (C) 2018-2024 by Kart Krew +// +// This program is free software distributed under the +// terms of the GNU General Public License, version 2. +// See the 'LICENSE' file for more details. +//----------------------------------------------------------------------------- +/// \file h_timers.cpp +/// \brief C++ port of Home's item timers + +#include "h_timers.h" +#include "k_hud.h" +#include "r_draw.h" +#include "z_zone.h" +#include "v_video.h" +#include "k_kart.h" +#include "k_color.h" +#include "g_game.h" +#include "p_local.h" +#include "k_kart.h" +#include "g_game.h" +#include "r_main.h" +#include "d_netcmd.h" +#include "m_easing.h" +#include "k_boss.h" +#include "st_stuff.h" +#include "lua_hud.h" +#include "r_main.h" +#include "r_fps.h" +#include "s_sound.h" +#include "fastcmp.h" +#include "m_cond.h" +#include +#include +#include + +consvar_t cv_itemtimers = CVAR_INIT ("itemtimers", "On", CV_SAVE, CV_OnOff, NULL); + +typedef struct itimer_s +{ + const char* name; // name of timer + INT32 timer; // current time + //std::vector patches; // timer graphics (big/freeplay) + std::vector patches_small; // timer graphics (small) + INT32 anim_frames; // tic duration for each graphic + //INT32 xoffs = 0, yoffs = 0; // offsets for freeplay mode + INT32 xoffs_small = 0, yoffs_small = 0; // offsets for normal mode + boolean counter; // not a timer, show a counter instead + boolean badtimer; // timer is colored red + INT32 *timer_p; // if defined, uses a pointer for the timer instead +} itimer_t; + +static bool sorttimers(itimer_t a, itimer_t b) +{ + return a.timer < b.timer; +} + +static inline INT32 G_TicsToDeciseconds(tic_t tics) +{ + return (INT32)((tics%TICRATE) * (10.00f/TICRATE)); +} + +tic_t spbTimers[MAXPLAYERS] = {0}; + +UINT8 K_GetBestRank(void) +{ + UINT8 best = UINT8_MAX; + INT32 i; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i] || players[i].exiting || players[i].spectator) + continue; + best = std::min(best, players[i].position); + } + + return best; +} + +// SPB Timer related +void K_UpdateSPBTimer(void) +{ + if (!(cv_itemtimers.value)) + { + // no need to attempt to account for the timers + memset(spbTimers, 0, sizeof spbTimers); + return; + } + INT32 i, bestrank = 255; + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i] || players[i].exiting || players[i].spectator) + continue; + spbTimers[i] = 0; + bestrank = std::min(bestrank, players[i].position); + + // check for spb + mobj_t *mobj, *next; + for (mobj = kitemcap; mobj; mobj = next) + { + next = mobj->itnext; + + // Look I don need other shit here besides the SPB + if (mobj->type != MT_SPB) + continue; + + // Don't bother SPBs with no player yet + if (mobj->tracer == NULL || P_MobjWasRemoved(mobj->tracer)) + continue; + if (mobj->tracer->player == NULL) + continue; + + player_t *spbplayer = mobj->tracer->player; + if (spbplayer->position > bestrank) + { + spbTimers[spbplayer-players] = mobj->extravalue2; + if (players[i].position == bestrank) + spbTimers[i] = mobj->extravalue2; + else if (&players[i] != spbplayer) + spbTimers[i] = 0; + } + else + spbTimers[i] = 0; + } + } +} + +static std::unordered_map cachedPatches; + +static patch_t *qche(const char* p) +{ + if (cachedPatches.find(p) != cachedPatches.end()) + return cachedPatches[p]; + cachedPatches[p] = (patch_t*)W_CachePatchLongName(p, PU_CACHE); + return cachedPatches[p]; +} + +static std::vector addTimers; +static std::vector addTimers_unsorted; + +void K_AddItemTimerEx( + const char *name, + INT32 *timer, + /*char **patches,*/ char **patches_small, + /*INT32 patches_size,*/ INT32 patches_small_size, + INT32 anim_duration, + INT32 xoffs, INT32 yoffs, + INT32 xoffs_small, INT32 yoffs_small, + boolean counter, boolean unsorted) +{ + itimer_t t; // woo yeah baby + + t.name = name; + t.timer_p = timer; + INT32 i; + + //for (i = 0; i < patches_size; i++) + //t.patches.push_back(qche(patches[i])); + for (i = 0; i < patches_small_size; i++) + t.patches_small.push_back(qche(patches_small[i])); + + t.anim_frames = anim_duration; + //t.xoffs = xoffs; t.yoffs = yoffs; + t.xoffs_small = xoffs_small; t.yoffs_small = yoffs_small; + t.counter = counter; + + // yeah + if (unsorted) + addTimers_unsorted.push_back(t); + else + addTimers.push_back(t); +} + +void K_getTimersDrawinfo(drawinfo_t *out) +{ + INT32 fx, fy, flags = V_HUDTRANS|V_SNAPTOBOTTOM|V_SPLITSCREEN; + + fx = 160 + cv_timers_xoffset.value; + fy = 170 + cv_timers_yoffset.value; + + if (r_splitscreen == 1) + { + flags &= ~V_SNAPTOBOTTOM; + fx = 160; + fy = 75; + } + else if (r_splitscreen > 1) + { + flags &= ~V_SNAPTOBOTTOM; + fy = 75; + fx = 80; + } + + if (r_splitscreen > 0) + { + flags &= ~V_HUDTRANS; + flags |= V_30TRANS; + } + + out->x = fx; + out->y = fy; + out->flags = flags; +} + +void K_DisplayItemTimers(void) +{ + if (!cv_itemtimers.value) return; + // nooope + if (stplyr->mo == NULL || P_MobjWasRemoved(stplyr->mo)) return; + // I love and hate you C++ + std::vector timers = + { + { // sneaker + "shoe", + stplyr->sneakertimer, + //{qche("K_ISSHOE")}, + {qche("K_TISHOE")}, + 1, /*-15, -15,*/ -4, -2, + }, + { // invinc + "invincible", + stplyr->invincibilitytimer, + //{qche("K_ISINV1"), qche("K_ISINV2"), qche("K_ISINV3"), qche("K_ISINV4"), qche("K_ISINV5"), qche("K_ISINV6")}, + {qche("K_TIINV1"), qche("K_TIINV2"), qche("K_TIINV3"), qche("K_TIINV4"), qche("K_TIINV5"), qche("K_TIINV6")}, + 3, /*-15, -15,*/ -4, -2, + }, + { // grow + "grow", + std::max(0, stplyr->growshrinktimer), + //{qche("K_ISGROW")}, + {qche("K_TIGROW")}, + 1, /*-15, -15,*/ -4, -2, + }, + { // rocket sneakers + "rocketsneakers", + stplyr->rocketsneakertimer, + //{qche("K_ISRSHE")}, + {qche("K_TIRSHE")}, + 1, /*-15, -15,*/ -4, -2, + }, + { // hyudoro + "hyudoro", + stplyr->hyudorotimer, + //{qche("K_ISHYUD")}, + {qche("K_TIHYUD")}, + 1, /*-15, -15,*/ -4, -2, + }, + { // drift boost + "driftsparkboost", + stplyr->driftboost, + //{qche("K_DRSP1"), qche("K_DRSP2")}, + {qche("K_TISRK1"), qche("K_TISRK2")}, + 2, /*-15, -15,*/ -4, -2, + }, + { // start boost + "startboost", + stplyr->startboost, + //{qche("K_ISSTB")}, + {qche("K_TISTB")}, + 1, /*-15, -15,*/ -4, -2, + }, + { // ring boost + "ringboost", + stplyr->ringboost, + //{qche("K_ISRING")}, + {qche("K_TIRING")}, + 1, /*-15, -15,*/ -4, -2, + }, + { // flameshield + "flameshield", + stplyr->flametimer, + //{qche("K_ISFLMS")}, + {qche("K_TIFLMS")}, + 1, /*-15, -15,*/ -4, -2, + }, + }; + + // insert sortable timers + timers.insert(timers.end(), addTimers.begin(), addTimers.end()); + + // Sort them based on time + std::sort(timers.begin(), timers.end(), sorttimers); + + // Spinout and shrink are always last + timers.push_back( + { // spinout + "spinout", + std::max(stplyr->spinouttimer, stplyr->wipeoutslow), + //{qche("K_DIZZ1"), qche("K_DIZZ2"), qche("K_DIZZ3"), qche("K_DIZZ4")}, + {qche("K_TISPN1"), qche("K_TISPN2"), qche("K_TISPN3"), qche("K_TISPN4")}, + 3, /*-15, -15,*/ -4, -2, + false, + true, + } + ); + timers.push_back( + { // shrink + "shrink", + std::max(0, -stplyr->growshrinktimer), + //{qche("K_ISSHRK")}, + {qche("K_TISHRK")}, + 1, + //-15, + //-15, + -4, + -2, + false, + true, + } + ); + timers.push_back( + { // spb + "spb", + (INT32)spbTimers[stplyr-players], + //{qche("K_ISSPB")}, + {qche("K_TISPB")}, + 1, + //-15, + //-15, + -4, + -2, + false, + (stplyr->position == K_GetBestRank()) + } + ); + // Same with boost stacks + timers.push_back( + { // boosts + "boosts", + K_StackingActive() ? stplyr->numboosts : 0, + //{qche("K_DRSP1"), qche("K_DRSP2")}, + {qche("K_TISRK1"), qche("K_TISRK2")}, + 2, /*-15, -15,*/ -3, -2, + true, + } + ); + + /*timers.push_back( + { // dead + "spr_realisticexplosion", + stplyr->deadtimer ? std::max(0, TICRATE - stplyr->deadtimer) : 0, + //{qche("IT_DED1"), qche("IT_DED2"), qche("IT_DED3"), qche("IT_DED4"), qche("IT_DED5"), qche("IT_DED6"), qche("IT_DED7"), qche("IT_DED8")}, + {qche("IT_DEAD1"), qche("IT_DEAD2"), qche("IT_DEAD3"), qche("IT_DEAD4"), qche("IT_DEAD5"), qche("IT_DEAD6"), qche("IT_DEAD7"), qche("IT_DEAD8")}, + 1, + //0, + //-4, + 0, + 0, + false, + true, + } + );*/ + + // insert unsortable timers + timers.insert(timers.end(), addTimers_unsorted.begin(), addTimers_unsorted.end()); + + if (!modeattacking) // "HOME" style, with icons at the bottom + { + INT32 itemx = 0, itemy = 0; + INT32 flags = 0; + INT32 stepx = 25; + INT32 viewnum = R_GetViewNumber(); + + drawinfo_t info; + K_getTimersDrawinfo(&info); + itemx = info.x; + itemy = info.y; + flags = info.flags; + + // Move it up to account for viewpoint text + if (cv_showviewpointtext.value && !demo.title && !P_IsLocalPlayer(stplyr) && !camera[viewnum].freecam && !r_splitscreen) + itemy -= 12; + + // flags |= V_HUDTRANS; + + INT32 offs = -stepx; + for (itimer_t& t : timers) + { + INT32 timer = t.timer; + if (t.timer_p) timer = *t.timer_p; + if (stplyr->deadtimer && !fastcmp(t.name, "spr_realisticexplosion")) continue; + if (timer > 0) + offs += stepx; + } + + itemx -= offs/2; + // draw relevant timers + for (itimer_t& t : timers) + { + if (t.timer <= 0) continue; + if (stplyr->deadtimer && !fastcmp(t.name, "spr_realisticexplosion")) continue; + INT32 timer = t.timer; + if (t.timer_p) timer = *t.timer_p; + INT32 seconds = timer / TICRATE, _centiseconds = G_TicsToCentiseconds(timer); + + const char* str = va("%d.%02d", seconds, _centiseconds); + if (seconds > 9) // exceeds 9 seconds? + str = va("%d.%01d", seconds, G_TicsToDeciseconds(timer)); + if (seconds > 99) // exceeds 100 seconds? + str = va("%d", seconds); + INT32 animsize = t.patches_small.size(); + INT32 patchnum = (leveltime % (t.anim_frames * animsize) / t.anim_frames); + UINT8 *cmap = NULL, *textcmap = NULL; + INT32 font = TINY_FONT; + + if (fastcmp(t.name, "driftsparkboost")) + { + if (timer > 85) // rainbow + cmap = R_GetTranslationColormap(TC_DEFAULT, (skincolornum_t)K_RainbowColor(leveltime), GTC_CACHE); + else if (timer > 50 && K_PurpleDriftActive()) // purple + cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_PURPLE, GTC_CACHE); + else if (timer > 25) // ketchup + cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_KETCHUP, GTC_CACHE); + else // blu + cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_SAPPHIRE, GTC_CACHE); + textcmap = cmap; + } + + if (fastcmp(t.name, "boosts")) + { + flags |= V_GREENMAP; + } + + if (t.counter) // don't show up as time + { + str = va("%d", timer); + font = HU_FONT; + } + INT32 width = V_StringScaledWidth(FRACUNIT, FRACUNIT, FRACUNIT, flags|V_MONOSPACE, font, str) >> FRACBITS; + + // very bad! + if (t.badtimer) + { + flags |= V_REDMAP; + //textcmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_CRIMSON, GTC_CACHE); + } + + patch_t *item = t.patches_small[patchnum]; + V_DrawFixedPatch((itemx - (item->width/2))<leftoffset) << FRACBITS, + (itemy + 12) << FRACBITS, + FRACUNIT, + FRACUNIT, + FRACUNIT, + FRACUNIT, + flags|V_MONOSPACE, + textcmap, + font, + str + ); + + itemx += stepx; + } + } + /*else // FREEPLAY - Move these to the left side, where the rankings usually are + { + if (r_splitscreen) // How? + return; + + INT32 fx = 9, fy = 92, step = 20; + INT32 flags = V_SNAPTOLEFT|V_SLIDEIN; + + // center it + INT32 offs = -step; + for (itimer_t& t : timers) + { + INT32 timer = t.timer; + if (t.timer_p) timer = *t.timer_p; + if (stplyr->deadtimer && !fastcmp(t.name, "spr_realisticexplosion")) continue; + if (timer > 0) + offs += step; + } + fy -= offs/2; + + // draw relevant timers + for (itimer_t& t : timers) + { + if (t.timer <= 0) continue; + if (stplyr->deadtimer && !fastcmp(t.name, "spr_realisticexplosion")) continue; + INT32 timer = t.timer; + if (t.timer_p) timer = *t.timer_p; + INT32 seconds = timer / TICRATE, _centiseconds = G_TicsToCentiseconds(timer); + INT32 patchnum = (leveltime % (t.anim_frames * t.patches.size()) / t.anim_frames); + UINT8 *cmap = NULL, *textcmap = NULL; + + const char* str = va("%d.%02d", seconds, _centiseconds); + if (seconds > 9) // exceeds 9 seconds? + str = va("%d.%01d", seconds, G_TicsToDeciseconds(timer)); + if (seconds > 99) // exceeds 100 seconds? + str = va("%d", seconds); + boolean bost = false; + if (fastcmp(t.name, "boosts")) // don't show up as time + { + str = va("%d", timer); + bost = true; + } + INT32 width = V_StringScaledWidth(FRACUNIT, FRACUNIT, FRACUNIT, flags|V_MONOSPACE, OPPRNK_FONT, str) >> FRACBITS; + + if (fastcmp(t.name, "driftsparkboost")) + { + if (timer > 85) // rainbow + cmap = R_GetTranslationColormap(TC_DEFAULT, (skincolornum_t)K_RainbowColor(leveltime), GTC_CACHE); + else if (timer > 50 && K_PurpleDriftActive()) // purple + cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_PURPLE, GTC_CACHE); + else if (timer > 25) // ketchup + cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_KETCHUP, GTC_CACHE); + else // blu + cmap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_SAPPHIRE, GTC_CACHE); + textcmap = cmap; + } + + // very bad! + if (t.badtimer) + textcmap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_CRIMSON, GTC_CACHE); + + patch_t *item = t.patches[patchnum]; + V_DrawFixedPatch((fx+t.xoffs)<width/2) - (width/2) - item->leftoffset + t.xoffs) << FRACBITS, + (fy+5) << FRACBITS, + FRACUNIT, + FRACUNIT, + FRACUNIT, + FRACUNIT, + flags|V_MONOSPACE, + textcmap, + TINY_FONT, + str + ); + + + fy += step; + } + } + */ +} diff --git a/src/info/sounds.h b/src/info/sounds.h index 580360fba..8a692c256 100644 --- a/src/info/sounds.h +++ b/src/info/sounds.h @@ -1,999 +1,999 @@ -_(None) - -// Skin Sounds -_(altdi1) -_(altdi2) -_(altdi3) -_(altdi4) -_(altow1) -_(altow2) -_(altow3) -_(altow4) -_(victr1) -_(victr2) -_(victr3) -_(victr4) -_(gasp) -_(jump) -_(pudpud) -_(putput) -_(spin) -_(spndsh) -_(thok) -_(zoom) -_(skid) - -// Ambience/background objects/etc -_(ambint) - -_(alarm) -_(buzz1) -_(buzz2) -_(buzz3) -_(buzz4) -_(crumbl) -_(fire) -_(grind) -_(laser) -_(mswing) -_(pstart) -_(pstop) -_(steam1) -_(steam2) -_(wbreak) -_(ambmac) -_(spsmsh) - -_(rainin) -_(litng1) -_(litng2) -_(litng3) -_(litng4) -_(athun1) -_(athun2) - -_(amwtr1) -_(amwtr2) -_(amwtr3) -_(amwtr4) -_(amwtr5) -_(amwtr6) -_(amwtr7) -_(amwtr8) -_(bubbl1) -_(bubbl2) -_(bubbl3) -_(bubbl4) -_(bubbl5) -_(floush) -_(splash) -_(splish) -_(wdrip1) -_(wdrip2) -_(wdrip3) -_(wdrip4) -_(wdrip5) -_(wdrip6) -_(wdrip7) -_(wdrip8) -_(wslap) - -_(doora1) -_(doorb1) -_(doorc1) -_(doorc2) -_(doord1) -_(doord2) -_(eleva1) -_(eleva2) -_(eleva3) -_(elevb1) -_(elevb2) -_(elevb3) - -_(ambin2) -_(lavbub) -_(rocks1) -_(rocks2) -_(rocks3) -_(rocks4) -_(rumbam) -_(rumble) - -// Game objects, etc -_(appear) -_(bkpoof) -_(bnce1) -_(bnce2) -_(cannon) -_(cgot) -_(cybdth) -_(deton) -_(ding) // old sfx_appear sound -_(dmpain) -_(drown) -_(fizzle) -_(gbeep) -_(wepfir) -_(ghit) -_(gloop) -_(gspray) -_(gravch) -_(itemup) -_(jet) -_(jshard) -_(lose) -_(lvpass) -_(mindig) -_(mixup) -_(monton) -_(pogo) -_(pop) -_(rail1) -_(rail2) -_(rlaunc) -_(shield) -_(wirlsg) -_(forcsg) -_(frcssg) -_(elemsg) -_(armasg) -_(attrsg) -_(shldls) -_(spdpad) -_(spkdth) -_(spring) -_(statu1) -_(statu2) -_(strpst) -_(supert) -_(telept) -_(tink) -_(token) -_(trfire) -_(trpowr) -_(turhit) -_(wdjump) -_(shrpsp) -_(shrpgo) -_(mswarp) -_(mspogo) -_(boingf) -_(corkp) -_(corkh) -_(alart) -_(vwre) -_(bowl) -_(chuchu) -//sfx_bsnipe, -_(sprong) -_(lvfal1) -_(pscree) -_(iceb) -_(shattr) -_(antiri) - -// Menu, interface -_(chchng) -_(dwnind) -_(emfind) -_(flgcap) -_(menu1) -_(oneup) -_(ptally) -_(radio) -_(wepchg) -_(wtrdng) -_(zelda) -_(adderr) -_(notadd) -_(addfil) - -// NiGHTS -_(ideya) -_(xideya) // Xmas -_(nbmper) -_(nxbump) // Xmas -_(ncchip) -_(ncitem) -_(nxitem) // Xmas -_(ngdone) -_(nxdone) // Xmas -_(drill1) -_(drill2) -_(ncspec) -_(nghurt) -_(ngskid) -_(hoop1) -_(hoop2) -_(hoop3) -_(hidden) -_(prloop) -_(timeup) -_(ngjump) -_(peww) - -// Halloween -_(lntsit) -_(lntdie) -_(pumpkn) -_(ghosty) - -// Mario -_(koopfr) -_(mario1) -_(mario2) -_(mario3) -_(mario4) -_(mario5) -_(mario6) -_(mario7) -_(mario8) -_(mario9) -_(marioa) -_(thwomp) - -// Black Eggman -_(bebomb) -_(bechrg) -_(becrsh) -_(bedeen) -_(bedie1) -_(bedie2) -_(beeyow) -_(befall) -_(befire) -_(beflap) -_(begoop) -_(begrnd) -_(behurt) -_(bejet1) -_(belnch) -_(beoutb) -_(beragh) -_(beshot) -_(bestep) -_(bestp2) -_(bewar1) -_(bewar2) -_(bewar3) -_(bewar4) -_(bexpld) -_(bgxpld) - -// Cy-Brak-Demon -_(beelec) // Electric barrier ambience -_(brakrl) // Rocket launcher -_(brakrx) // Rocket explodes - -// S1 sounds -_(s1a0) -_(s1a1) -_(s1a2) -_(s1a3) -_(s1a4) -_(s1a5) -_(s1a6) -_(s1a7) -_(s1a8) -_(s1a9) -_(s1aa) -_(s1ab) -_(s1ac) -_(s1ad) -_(s1ae) -_(s1af) -_(s1b0) -_(s1b1) -_(s1b2) -_(s1b3) -_(s1b4) -_(s1b5) -_(s1b6) -_(s1b7) -_(s1b8) -_(s1b9) -_(s1ba) -_(s1bb) -_(s1bc) -_(s1bd) -_(s1be) -_(s1bf) -_(s1c0) -_(s1c1) -_(s1c2) -_(s1c3) -_(s1c4) -_(s1c5) -_(s1c6) -_(s1c7) -_(s1c8) -_(s1c9) -_(s1ca) -_(s1cb) -_(s1cc) -_(s1cd) -_(s1ce) -_(s1cf) - -// S2 sounds -_(s220) -_(s221) -_(s222) -_(s223) -_(s224) -_(s225) -_(s226) -_(s227) -_(s228) -_(s229) -_(s22a) -_(s22b) -_(s22c) -_(s22d) -_(s22e) -_(s22f) -_(s230) -_(s231) -_(s232) -_(s233) -_(s234) -_(s235) -_(s236) -_(s237) -_(s238) -_(s239) -_(s23a) -_(s23b) -_(s23c) -_(s23d) -_(s23e) -_(s23f) -_(s240) -_(s241) -_(s242) -_(s243) -_(s244) -_(s245) -_(s246) -_(s247) -_(s248) -_(s249) -_(s24a) -_(s24b) -_(s24c) -_(s24d) -_(s24e) -_(s24f) -_(s250) -_(s251) -_(s252) -_(s253) -_(s254) -_(s255) -_(s256) -_(s257) -_(s258) -_(s259) -_(s25a) -_(s25b) -_(s25c) -_(s25d) -_(s25e) -_(s25f) -_(s260) -_(s261) -_(s262) -_(s263) -_(s264) -_(s265) -_(s266) -_(s267) -_(s268) -_(s269) -_(s26a) -_(s26b) -_(s26c) -_(s26d) -_(s26e) -_(s26f) -_(s270) - -// S3&K sounds -_(s3k2b) -_(s3k33) -_(s3k34) -_(s3k35) -_(s3k36) -_(s3k37) -_(s3k38) -_(s3k39) -_(s3k3a) -_(s3k3b) -_(s3k3c) -_(s3k3d) -_(s3k3e) -_(s3k3f) -_(s3k40) -_(s3k41) -_(s3k42) -_(s3k43) -_(s3k44) -_(s3k45) -_(s3k46) -_(s3k47) -_(s3k48) -_(s3k49) -_(s3k4a) -_(s3k4b) -_(s3k4c) -_(s3k4d) -_(s3k4e) -_(s3k4f) -_(s3k50) -_(s3k51) -_(s3k52) -_(s3k53) -_(s3k54) -_(s3k55) -_(s3k56) -_(s3k57) -_(s3k58) -_(s3k59) -_(s3k5a) -_(s3k5b) -_(s3k5c) -_(s3k5d) -_(s3k5e) -_(s3k5f) -_(s3k60) -_(s3k61) -_(s3k62) -_(s3k63) -_(s3k64) -_(s3k65) -_(s3k66) -_(s3k67) -_(s3k68) -_(s3k69) -_(s3k6a) -_(s3k6b) -_(s3k6c) -_(s3k6d) -_(s3k6e) -_(s3k6f) -_(s3k70) -_(s3k71) -_(s3k72) -_(s3k73) -_(s3k74) -_(s3k75) -_(s3k76) -_(s3k77) -_(s3k78) -_(s3k79) -_(s3k7a) -_(s3k7b) -_(s3k7c) -_(s3k7d) -_(s3k7e) -_(s3k7f) -_(s3k80) -_(s3k81) -_(s3k82) -_(s3k83) -_(s3k84) -_(s3k85) -_(s3k86) -_(s3k87) -_(s3k88) -_(s3k89) -_(s3k8a) -_(s3k8b) -_(s3k8c) -_(s3k8d) -_(s3k8e) -_(s3k8f) -_(s3k90) -_(s3k91) -_(s3k92) -_(s3k93) -_(s3k94) -_(s3k95) -_(s3k96) -_(s3k97) -_(s3k98) -_(s3k99) -_(s3k9a) -_(s3k9b) -_(s3k9c) -_(s3k9d) -_(s3k9e) -_(s3k9f) -_(s3ka0) -_(s3ka1) -_(s3ka2) -_(s3ka3) -_(s3ka4) -_(s3ka5) -_(s3ka6) -_(s3ka7) -_(s3ka8) -_(s3ka9) -_(s3kaa) -_(s3kab) -_(s3kab1) -_(s3kab2) -_(s3kab3) -_(s3kab4) -_(s3kab5) -_(s3kab6) -_(s3kab7) -_(s3kab8) -_(s3kab9) -_(s3kaba) -_(s3kabb) -_(s3kabc) -_(s3kabd) -_(s3kabe) -_(s3kabf) -_(s3kac) -_(s3kad) -_(s3kae) -_(s3kaf) -_(s3kb0) -_(s3kb1) -_(s3kb2) -_(s3kb3) -_(s3kb4) -_(s3kb5) -_(s3kb6) -_(s3kb7) -_(s3kb8) -_(s3kb9) -_(s3kba) -_(s3kbb) -_(s3kbcs) -_(s3kbcl) -_(s3kbds) -_(s3kbdl) -_(s3kbes) -_(s3kbel) -_(s3kbfs) -_(s3kbfl) -_(s3kc0s) -_(s3kc0l) -_(s3kc1s) -_(s3kc1l) -_(s3kc2s) -_(s3kc2l) -_(s3kc3s) -_(s3kc3l) -_(s3kc4s) -_(s3kc4l) -_(s3kc5s) -_(s3kc5l) -_(s3kc6s) -_(s3kc6l) -_(s3kc7s) -_(s3kc7l) -_(s3kc8s) -_(s3kc8l) -_(s3kc9s) -_(s3kc9l) -_(s3kcas) -_(s3kcal) -_(s3kcbs) -_(s3kcbl) -_(s3kccs) -_(s3kccl) -_(s3kcds) -_(s3kcdl) -_(s3kces) -_(s3kcel) -_(s3kcfs) -_(s3kcfl) -_(s3kd0s) -_(s3kd0l) -_(s3kd1s) -_(s3kd1l) -_(s3kd2s) -_(s3kd2l) -_(s3kd3s) -_(s3kd3l) -_(s3kd4s) -_(s3kd4l) -_(s3kd5s) -_(s3kd5l) -_(s3kd6s) -_(s3kd6l) -_(s3kd7s) -_(s3kd7l) -_(s3kd8s) -_(s3kd8l) -_(s3kd9s) -_(s3kd9l) -_(s3kdas) -_(s3kdal) -_(s3kdbs) -_(s3kdbl) - -// 3DB sounds -_(3db06) -_(3db09) -_(3db14) -_(3db16) - -// SCD sounds -_(cdfm00) -_(cdfm01) -_(cdfm02) -_(cdfm03) -_(cdfm04) -_(cdfm05) -_(cdfm06) -_(cdfm07) -_(cdfm08) -_(cdfm09) -_(cdfm10) -_(cdfm11) -_(cdfm12) -_(cdfm13) -_(cdfm14) -_(cdfm15) -_(cdfm16) -_(cdfm17) -_(cdfm18) -_(cdfm19) -_(cdfm20) -_(cdfm21) -_(cdfm22) -_(cdfm23) -_(cdfm24) -_(cdfm25) -_(cdfm26) -_(cdfm27) -_(cdfm28) -_(cdfm29) -_(cdfm30) -_(cdfm31) -_(cdfm32) -_(cdfm33) -_(cdfm34) -_(cdfm35) -_(cdfm36) -_(cdfm37) -_(cdfm38) -_(cdfm39) -_(cdfm40) -_(cdfm41) -_(cdfm42) -_(cdfm43) -_(cdfm44) -_(cdfm45) -_(cdfm46) -_(cdfm47) -_(cdfm48) -_(cdfm49) -_(cdfm50) -_(cdfm51) -_(cdfm52) -_(cdfm53) -_(cdfm54) -_(cdfm55) -_(cdfm56) -_(cdfm57) -_(cdfm58) -_(cdfm59) -_(cdfm60) -_(cdfm61) -_(cdfm62) -_(cdfm63) -_(cdfm64) -_(cdfm65) -_(cdfm66) -_(cdfm67) -_(cdfm68) -_(cdfm69) -_(cdfm70) -_(cdfm71) -_(cdfm72) -_(cdfm73) -_(cdfm74) -_(cdfm75) -_(cdfm76) -_(cdfm77) -_(cdfm78) -_(cdfm79) -_(cdpcm0) -_(cdpcm1) -_(cdpcm2) -_(cdpcm3) -_(cdpcm4) -_(cdpcm5) -_(cdpcm6) -_(cdpcm7) -_(cdpcm8) -_(cdpcm9) - -// KC sounds -_(kc2a) -_(kc2b) -_(kc2c) -_(kc2d) -_(kc2e) -_(kc2f) -_(kc30) -_(kc31) -_(kc32) -_(kc33) -_(kc34) -_(kc35) -_(kc36) -_(kc37) -_(kc38) -_(kc39) -_(kc3a) -_(kc3b) -_(kc3c) -_(kc3d) -_(kc3e) -_(kc3f) -_(kc40) -_(kc41) -_(kc42) -_(kc43) -_(kc44) -_(kc45) -_(kc46) -_(kc47) -_(kc48) -_(kc49) -_(kc4a) -_(kc4b) -_(kc4c) -_(kc4d) -_(kc4e) -_(kc4f) -_(kc50) -_(kc51) -_(kc52) -_(kc53) -_(kc54) -_(kc55) -_(kc56) -_(kc57) -_(kc58) -_(kc59) -_(kc5a) -_(kc5b) -_(kc5c) -_(kc5d) -_(kc5e) -_(kc5f) -_(kc60) -_(kc61) -_(kc62) -_(kc63) -_(kc64) -_(kc65) -_(kc66) -_(kc67) -_(kc68) -_(kc69) -_(kc6b) -_(kc6c) -_(kc6d) -_(kc6e) - -// SRB2kart -_(slip) -_(screec) -_(drift) -_(ruburn) -_(ddash) -_(tossed) -_(itpick) -_(peel) -_(hogbom) -_(zio3) -_(kpogos) -_(alarmi) -_(alarmg) -_(kinvnc) -_(kgrow) -_(itrol1) -_(itrol2) -_(itrol3) -_(itrol4) -_(itrol5) -_(itrol6) -_(itrol7) -_(itrol8) -_(itrolf) -_(itrolm) -_(itrolk) -_(itrole) -_(vroom) -_(chaooo) -_(yeeeah) -_(noooo1) -_(noooo2) -_(ruby1) -_(ruby2) -_(tcart) -_(bfare) -_(merry) -_(bowlh) -_(tppop) -_(hsdoor) -_(hstrn) -_(aspkb) -_(wind1) -_(fire2) -_(chain) -_(mkuma) -_(toada) -_(gemhit) -_(wrink) -_(bsnipe) -_(join) -_(leave) -_(requst) -_(syfail) -_(itfree) -_(dbgsal) -_(bhurry) // mine: wasn't here already? - -// Chaining Sound -_(bstchn) - -// Low Ring Sound -_(ringlw) - -// Flip Over Sound -_(flipos) - -// Shout message sound effect -_(sysmsg) - -// Next up: UNIQUE ENGINE SOUNDS! Hoooooo boy... -// Engine class A - Low Speed, Low Weight -_(krta00) -_(krta01) -_(krta02) -_(krta03) -_(krta04) -_(krta05) -_(krta06) -_(krta07) -_(krta08) -_(krta09) -_(krta10) -_(krta11) -_(krta12) -// Engine class B - Average Speed, Low Weight -_(krtb00) -_(krtb01) -_(krtb02) -_(krtb03) -_(krtb04) -_(krtb05) -_(krtb06) -_(krtb07) -_(krtb08) -_(krtb09) -_(krtb10) -_(krtb11) -_(krtb12) -// Engine class C - High Speed, Low Weight -_(krtc00) -_(krtc01) -_(krtc02) -_(krtc03) -_(krtc04) -_(krtc05) -_(krtc06) -_(krtc07) -_(krtc08) -_(krtc09) -_(krtc10) -_(krtc11) -_(krtc12) -// Engine class D - Low Speed, Average Weight -_(krtd00) -_(krtd01) -_(krtd02) -_(krtd03) -_(krtd04) -_(krtd05) -_(krtd06) -_(krtd07) -_(krtd08) -_(krtd09) -_(krtd10) -_(krtd11) -_(krtd12) -// Engine class E - Average Speed, Average Weight -_(krte00) -_(krte01) -_(krte02) -_(krte03) -_(krte04) -_(krte05) -_(krte06) -_(krte07) -_(krte08) -_(krte09) -_(krte10) -_(krte11) -_(krte12) -// Engine class F - High Speed, Average Weight -_(krtf00) -_(krtf01) -_(krtf02) -_(krtf03) -_(krtf04) -_(krtf05) -_(krtf06) -_(krtf07) -_(krtf08) -_(krtf09) -_(krtf10) -_(krtf11) -_(krtf12) -// Engine class G - Low Speed, High Weight -_(krtg00) -_(krtg01) -_(krtg02) -_(krtg03) -_(krtg04) -_(krtg05) -_(krtg06) -_(krtg07) -_(krtg08) -_(krtg09) -_(krtg10) -_(krtg11) -_(krtg12) -// Engine class H - Average Speed, High Weight -_(krth00) -_(krth01) -_(krth02) -_(krth03) -_(krth04) -_(krth05) -_(krth06) -_(krth07) -_(krth08) -_(krth09) -_(krth10) -_(krth11) -_(krth12) -// Engine class I - High Speed, High Weight -_(krti00) -_(krti01) -_(krti02) -_(krti03) -_(krti04) -_(krti05) -_(krti06) -_(krti07) -_(krti08) -_(krti09) -_(krti10) -_(krti11) -_(krti12) - -// And LASTLY, Kart's skin sounds. -_(kwin) -_(klose) -_(khurt1) -_(khurt2) -_(kattk1) -_(kattk2) -_(kbost1) -_(kbost2) -_(kslow) -_(khitem) -_(kgloat) +_(None) + +// Skin Sounds +_(altdi1) +_(altdi2) +_(altdi3) +_(altdi4) +_(altow1) +_(altow2) +_(altow3) +_(altow4) +_(victr1) +_(victr2) +_(victr3) +_(victr4) +_(gasp) +_(jump) +_(pudpud) +_(putput) +_(spin) +_(spndsh) +_(thok) +_(zoom) +_(skid) + +// Ambience/background objects/etc +_(ambint) + +_(alarm) +_(buzz1) +_(buzz2) +_(buzz3) +_(buzz4) +_(crumbl) +_(fire) +_(grind) +_(laser) +_(mswing) +_(pstart) +_(pstop) +_(steam1) +_(steam2) +_(wbreak) +_(ambmac) +_(spsmsh) + +_(rainin) +_(litng1) +_(litng2) +_(litng3) +_(litng4) +_(athun1) +_(athun2) + +_(amwtr1) +_(amwtr2) +_(amwtr3) +_(amwtr4) +_(amwtr5) +_(amwtr6) +_(amwtr7) +_(amwtr8) +_(bubbl1) +_(bubbl2) +_(bubbl3) +_(bubbl4) +_(bubbl5) +_(floush) +_(splash) +_(splish) +_(wdrip1) +_(wdrip2) +_(wdrip3) +_(wdrip4) +_(wdrip5) +_(wdrip6) +_(wdrip7) +_(wdrip8) +_(wslap) + +_(doora1) +_(doorb1) +_(doorc1) +_(doorc2) +_(doord1) +_(doord2) +_(eleva1) +_(eleva2) +_(eleva3) +_(elevb1) +_(elevb2) +_(elevb3) + +_(ambin2) +_(lavbub) +_(rocks1) +_(rocks2) +_(rocks3) +_(rocks4) +_(rumbam) +_(rumble) + +// Game objects, etc +_(appear) +_(bkpoof) +_(bnce1) +_(bnce2) +_(cannon) +_(cgot) +_(cybdth) +_(deton) +_(ding) // old sfx_appear sound +_(dmpain) +_(drown) +_(fizzle) +_(gbeep) +_(wepfir) +_(ghit) +_(gloop) +_(gspray) +_(gravch) +_(itemup) +_(jet) +_(jshard) +_(lose) +_(lvpass) +_(mindig) +_(mixup) +_(monton) +_(pogo) +_(pop) +_(rail1) +_(rail2) +_(rlaunc) +_(shield) +_(wirlsg) +_(forcsg) +_(frcssg) +_(elemsg) +_(armasg) +_(attrsg) +_(shldls) +_(spdpad) +_(spkdth) +_(spring) +_(statu1) +_(statu2) +_(strpst) +_(supert) +_(telept) +_(tink) +_(token) +_(trfire) +_(trpowr) +_(turhit) +_(wdjump) +_(shrpsp) +_(shrpgo) +_(mswarp) +_(mspogo) +_(boingf) +_(corkp) +_(corkh) +_(alart) +_(vwre) +_(bowl) +_(chuchu) +//sfx_bsnipe, +_(sprong) +_(lvfal1) +_(pscree) +_(iceb) +_(shattr) +_(antiri) + +// Menu, interface +_(chchng) +_(dwnind) +_(emfind) +_(flgcap) +_(menu1) +_(oneup) +_(ptally) +_(radio) +_(wepchg) +_(wtrdng) +_(zelda) +_(adderr) +_(notadd) +_(addfil) + +// NiGHTS +_(ideya) +_(xideya) // Xmas +_(nbmper) +_(nxbump) // Xmas +_(ncchip) +_(ncitem) +_(nxitem) // Xmas +_(ngdone) +_(nxdone) // Xmas +_(drill1) +_(drill2) +_(ncspec) +_(nghurt) +_(ngskid) +_(hoop1) +_(hoop2) +_(hoop3) +_(hidden) +_(prloop) +_(timeup) +_(ngjump) +_(peww) + +// Halloween +_(lntsit) +_(lntdie) +_(pumpkn) +_(ghosty) + +// Mario +_(koopfr) +_(mario1) +_(mario2) +_(mario3) +_(mario4) +_(mario5) +_(mario6) +_(mario7) +_(mario8) +_(mario9) +_(marioa) +_(thwomp) + +// Black Eggman +_(bebomb) +_(bechrg) +_(becrsh) +_(bedeen) +_(bedie1) +_(bedie2) +_(beeyow) +_(befall) +_(befire) +_(beflap) +_(begoop) +_(begrnd) +_(behurt) +_(bejet1) +_(belnch) +_(beoutb) +_(beragh) +_(beshot) +_(bestep) +_(bestp2) +_(bewar1) +_(bewar2) +_(bewar3) +_(bewar4) +_(bexpld) +_(bgxpld) + +// Cy-Brak-Demon +_(beelec) // Electric barrier ambience +_(brakrl) // Rocket launcher +_(brakrx) // Rocket explodes + +// S1 sounds +_(s1a0) +_(s1a1) +_(s1a2) +_(s1a3) +_(s1a4) +_(s1a5) +_(s1a6) +_(s1a7) +_(s1a8) +_(s1a9) +_(s1aa) +_(s1ab) +_(s1ac) +_(s1ad) +_(s1ae) +_(s1af) +_(s1b0) +_(s1b1) +_(s1b2) +_(s1b3) +_(s1b4) +_(s1b5) +_(s1b6) +_(s1b7) +_(s1b8) +_(s1b9) +_(s1ba) +_(s1bb) +_(s1bc) +_(s1bd) +_(s1be) +_(s1bf) +_(s1c0) +_(s1c1) +_(s1c2) +_(s1c3) +_(s1c4) +_(s1c5) +_(s1c6) +_(s1c7) +_(s1c8) +_(s1c9) +_(s1ca) +_(s1cb) +_(s1cc) +_(s1cd) +_(s1ce) +_(s1cf) + +// S2 sounds +_(s220) +_(s221) +_(s222) +_(s223) +_(s224) +_(s225) +_(s226) +_(s227) +_(s228) +_(s229) +_(s22a) +_(s22b) +_(s22c) +_(s22d) +_(s22e) +_(s22f) +_(s230) +_(s231) +_(s232) +_(s233) +_(s234) +_(s235) +_(s236) +_(s237) +_(s238) +_(s239) +_(s23a) +_(s23b) +_(s23c) +_(s23d) +_(s23e) +_(s23f) +_(s240) +_(s241) +_(s242) +_(s243) +_(s244) +_(s245) +_(s246) +_(s247) +_(s248) +_(s249) +_(s24a) +_(s24b) +_(s24c) +_(s24d) +_(s24e) +_(s24f) +_(s250) +_(s251) +_(s252) +_(s253) +_(s254) +_(s255) +_(s256) +_(s257) +_(s258) +_(s259) +_(s25a) +_(s25b) +_(s25c) +_(s25d) +_(s25e) +_(s25f) +_(s260) +_(s261) +_(s262) +_(s263) +_(s264) +_(s265) +_(s266) +_(s267) +_(s268) +_(s269) +_(s26a) +_(s26b) +_(s26c) +_(s26d) +_(s26e) +_(s26f) +_(s270) + +// S3&K sounds +_(s3k2b) +_(s3k33) +_(s3k34) +_(s3k35) +_(s3k36) +_(s3k37) +_(s3k38) +_(s3k39) +_(s3k3a) +_(s3k3b) +_(s3k3c) +_(s3k3d) +_(s3k3e) +_(s3k3f) +_(s3k40) +_(s3k41) +_(s3k42) +_(s3k43) +_(s3k44) +_(s3k45) +_(s3k46) +_(s3k47) +_(s3k48) +_(s3k49) +_(s3k4a) +_(s3k4b) +_(s3k4c) +_(s3k4d) +_(s3k4e) +_(s3k4f) +_(s3k50) +_(s3k51) +_(s3k52) +_(s3k53) +_(s3k54) +_(s3k55) +_(s3k56) +_(s3k57) +_(s3k58) +_(s3k59) +_(s3k5a) +_(s3k5b) +_(s3k5c) +_(s3k5d) +_(s3k5e) +_(s3k5f) +_(s3k60) +_(s3k61) +_(s3k62) +_(s3k63) +_(s3k64) +_(s3k65) +_(s3k66) +_(s3k67) +_(s3k68) +_(s3k69) +_(s3k6a) +_(s3k6b) +_(s3k6c) +_(s3k6d) +_(s3k6e) +_(s3k6f) +_(s3k70) +_(s3k71) +_(s3k72) +_(s3k73) +_(s3k74) +_(s3k75) +_(s3k76) +_(s3k77) +_(s3k78) +_(s3k79) +_(s3k7a) +_(s3k7b) +_(s3k7c) +_(s3k7d) +_(s3k7e) +_(s3k7f) +_(s3k80) +_(s3k81) +_(s3k82) +_(s3k83) +_(s3k84) +_(s3k85) +_(s3k86) +_(s3k87) +_(s3k88) +_(s3k89) +_(s3k8a) +_(s3k8b) +_(s3k8c) +_(s3k8d) +_(s3k8e) +_(s3k8f) +_(s3k90) +_(s3k91) +_(s3k92) +_(s3k93) +_(s3k94) +_(s3k95) +_(s3k96) +_(s3k97) +_(s3k98) +_(s3k99) +_(s3k9a) +_(s3k9b) +_(s3k9c) +_(s3k9d) +_(s3k9e) +_(s3k9f) +_(s3ka0) +_(s3ka1) +_(s3ka2) +_(s3ka3) +_(s3ka4) +_(s3ka5) +_(s3ka6) +_(s3ka7) +_(s3ka8) +_(s3ka9) +_(s3kaa) +_(s3kab) +_(s3kab1) +_(s3kab2) +_(s3kab3) +_(s3kab4) +_(s3kab5) +_(s3kab6) +_(s3kab7) +_(s3kab8) +_(s3kab9) +_(s3kaba) +_(s3kabb) +_(s3kabc) +_(s3kabd) +_(s3kabe) +_(s3kabf) +_(s3kac) +_(s3kad) +_(s3kae) +_(s3kaf) +_(s3kb0) +_(s3kb1) +_(s3kb2) +_(s3kb3) +_(s3kb4) +_(s3kb5) +_(s3kb6) +_(s3kb7) +_(s3kb8) +_(s3kb9) +_(s3kba) +_(s3kbb) +_(s3kbcs) +_(s3kbcl) +_(s3kbds) +_(s3kbdl) +_(s3kbes) +_(s3kbel) +_(s3kbfs) +_(s3kbfl) +_(s3kc0s) +_(s3kc0l) +_(s3kc1s) +_(s3kc1l) +_(s3kc2s) +_(s3kc2l) +_(s3kc3s) +_(s3kc3l) +_(s3kc4s) +_(s3kc4l) +_(s3kc5s) +_(s3kc5l) +_(s3kc6s) +_(s3kc6l) +_(s3kc7s) +_(s3kc7l) +_(s3kc8s) +_(s3kc8l) +_(s3kc9s) +_(s3kc9l) +_(s3kcas) +_(s3kcal) +_(s3kcbs) +_(s3kcbl) +_(s3kccs) +_(s3kccl) +_(s3kcds) +_(s3kcdl) +_(s3kces) +_(s3kcel) +_(s3kcfs) +_(s3kcfl) +_(s3kd0s) +_(s3kd0l) +_(s3kd1s) +_(s3kd1l) +_(s3kd2s) +_(s3kd2l) +_(s3kd3s) +_(s3kd3l) +_(s3kd4s) +_(s3kd4l) +_(s3kd5s) +_(s3kd5l) +_(s3kd6s) +_(s3kd6l) +_(s3kd7s) +_(s3kd7l) +_(s3kd8s) +_(s3kd8l) +_(s3kd9s) +_(s3kd9l) +_(s3kdas) +_(s3kdal) +_(s3kdbs) +_(s3kdbl) + +// 3DB sounds +_(3db06) +_(3db09) +_(3db14) +_(3db16) + +// SCD sounds +_(cdfm00) +_(cdfm01) +_(cdfm02) +_(cdfm03) +_(cdfm04) +_(cdfm05) +_(cdfm06) +_(cdfm07) +_(cdfm08) +_(cdfm09) +_(cdfm10) +_(cdfm11) +_(cdfm12) +_(cdfm13) +_(cdfm14) +_(cdfm15) +_(cdfm16) +_(cdfm17) +_(cdfm18) +_(cdfm19) +_(cdfm20) +_(cdfm21) +_(cdfm22) +_(cdfm23) +_(cdfm24) +_(cdfm25) +_(cdfm26) +_(cdfm27) +_(cdfm28) +_(cdfm29) +_(cdfm30) +_(cdfm31) +_(cdfm32) +_(cdfm33) +_(cdfm34) +_(cdfm35) +_(cdfm36) +_(cdfm37) +_(cdfm38) +_(cdfm39) +_(cdfm40) +_(cdfm41) +_(cdfm42) +_(cdfm43) +_(cdfm44) +_(cdfm45) +_(cdfm46) +_(cdfm47) +_(cdfm48) +_(cdfm49) +_(cdfm50) +_(cdfm51) +_(cdfm52) +_(cdfm53) +_(cdfm54) +_(cdfm55) +_(cdfm56) +_(cdfm57) +_(cdfm58) +_(cdfm59) +_(cdfm60) +_(cdfm61) +_(cdfm62) +_(cdfm63) +_(cdfm64) +_(cdfm65) +_(cdfm66) +_(cdfm67) +_(cdfm68) +_(cdfm69) +_(cdfm70) +_(cdfm71) +_(cdfm72) +_(cdfm73) +_(cdfm74) +_(cdfm75) +_(cdfm76) +_(cdfm77) +_(cdfm78) +_(cdfm79) +_(cdpcm0) +_(cdpcm1) +_(cdpcm2) +_(cdpcm3) +_(cdpcm4) +_(cdpcm5) +_(cdpcm6) +_(cdpcm7) +_(cdpcm8) +_(cdpcm9) + +// KC sounds +_(kc2a) +_(kc2b) +_(kc2c) +_(kc2d) +_(kc2e) +_(kc2f) +_(kc30) +_(kc31) +_(kc32) +_(kc33) +_(kc34) +_(kc35) +_(kc36) +_(kc37) +_(kc38) +_(kc39) +_(kc3a) +_(kc3b) +_(kc3c) +_(kc3d) +_(kc3e) +_(kc3f) +_(kc40) +_(kc41) +_(kc42) +_(kc43) +_(kc44) +_(kc45) +_(kc46) +_(kc47) +_(kc48) +_(kc49) +_(kc4a) +_(kc4b) +_(kc4c) +_(kc4d) +_(kc4e) +_(kc4f) +_(kc50) +_(kc51) +_(kc52) +_(kc53) +_(kc54) +_(kc55) +_(kc56) +_(kc57) +_(kc58) +_(kc59) +_(kc5a) +_(kc5b) +_(kc5c) +_(kc5d) +_(kc5e) +_(kc5f) +_(kc60) +_(kc61) +_(kc62) +_(kc63) +_(kc64) +_(kc65) +_(kc66) +_(kc67) +_(kc68) +_(kc69) +_(kc6b) +_(kc6c) +_(kc6d) +_(kc6e) + +// SRB2kart +_(slip) +_(screec) +_(drift) +_(ruburn) +_(ddash) +_(tossed) +_(itpick) +_(peel) +_(hogbom) +_(zio3) +_(kpogos) +_(alarmi) +_(alarmg) +_(kinvnc) +_(kgrow) +_(itrol1) +_(itrol2) +_(itrol3) +_(itrol4) +_(itrol5) +_(itrol6) +_(itrol7) +_(itrol8) +_(itrolf) +_(itrolm) +_(itrolk) +_(itrole) +_(vroom) +_(chaooo) +_(yeeeah) +_(noooo1) +_(noooo2) +_(ruby1) +_(ruby2) +_(tcart) +_(bfare) +_(merry) +_(bowlh) +_(tppop) +_(hsdoor) +_(hstrn) +_(aspkb) +_(wind1) +_(fire2) +_(chain) +_(mkuma) +_(toada) +_(gemhit) +_(wrink) +_(bsnipe) +_(join) +_(leave) +_(requst) +_(syfail) +_(itfree) +_(dbgsal) +_(bhurry) // mine: wasn't here already? + +// Chaining Sound +_(bstchn) + +// Low Ring Sound +_(ringlw) + +// Flip Over Sound +_(flipos) + +// Shout message sound effect +_(sysmsg) + +// Next up: UNIQUE ENGINE SOUNDS! Hoooooo boy... +// Engine class A - Low Speed, Low Weight +_(krta00) +_(krta01) +_(krta02) +_(krta03) +_(krta04) +_(krta05) +_(krta06) +_(krta07) +_(krta08) +_(krta09) +_(krta10) +_(krta11) +_(krta12) +// Engine class B - Average Speed, Low Weight +_(krtb00) +_(krtb01) +_(krtb02) +_(krtb03) +_(krtb04) +_(krtb05) +_(krtb06) +_(krtb07) +_(krtb08) +_(krtb09) +_(krtb10) +_(krtb11) +_(krtb12) +// Engine class C - High Speed, Low Weight +_(krtc00) +_(krtc01) +_(krtc02) +_(krtc03) +_(krtc04) +_(krtc05) +_(krtc06) +_(krtc07) +_(krtc08) +_(krtc09) +_(krtc10) +_(krtc11) +_(krtc12) +// Engine class D - Low Speed, Average Weight +_(krtd00) +_(krtd01) +_(krtd02) +_(krtd03) +_(krtd04) +_(krtd05) +_(krtd06) +_(krtd07) +_(krtd08) +_(krtd09) +_(krtd10) +_(krtd11) +_(krtd12) +// Engine class E - Average Speed, Average Weight +_(krte00) +_(krte01) +_(krte02) +_(krte03) +_(krte04) +_(krte05) +_(krte06) +_(krte07) +_(krte08) +_(krte09) +_(krte10) +_(krte11) +_(krte12) +// Engine class F - High Speed, Average Weight +_(krtf00) +_(krtf01) +_(krtf02) +_(krtf03) +_(krtf04) +_(krtf05) +_(krtf06) +_(krtf07) +_(krtf08) +_(krtf09) +_(krtf10) +_(krtf11) +_(krtf12) +// Engine class G - Low Speed, High Weight +_(krtg00) +_(krtg01) +_(krtg02) +_(krtg03) +_(krtg04) +_(krtg05) +_(krtg06) +_(krtg07) +_(krtg08) +_(krtg09) +_(krtg10) +_(krtg11) +_(krtg12) +// Engine class H - Average Speed, High Weight +_(krth00) +_(krth01) +_(krth02) +_(krth03) +_(krth04) +_(krth05) +_(krth06) +_(krth07) +_(krth08) +_(krth09) +_(krth10) +_(krth11) +_(krth12) +// Engine class I - High Speed, High Weight +_(krti00) +_(krti01) +_(krti02) +_(krti03) +_(krti04) +_(krti05) +_(krti06) +_(krti07) +_(krti08) +_(krti09) +_(krti10) +_(krti11) +_(krti12) + +// And LASTLY, Kart's skin sounds. +_(kwin) +_(klose) +_(khurt1) +_(khurt2) +_(kattk1) +_(kattk2) +_(kbost1) +_(kbost2) +_(kslow) +_(khitem) +_(kgloat)