diff --git a/src/Makefile b/src/Makefile index f7a8c1b85effd05aa269687578e9ec39a085e808..73be4816418eb9e739a3d9b85347fbee683950e1 100644 --- a/src/Makefile +++ b/src/Makefile @@ -409,6 +409,7 @@ DBGNAME?=$(EXENAME).debug # $(OBJDIR)/dstrings.o \ # not too sophisticated dependency +# SRB2kart kart.o on line 433 below OBJS:=$(i_main_o) \ $(OBJDIR)/comptime.o \ $(OBJDIR)/string.o \ @@ -429,6 +430,7 @@ OBJS:=$(i_main_o) \ $(OBJDIR)/hu_stuff.o \ $(OBJDIR)/y_inter.o \ $(OBJDIR)/st_stuff.o \ + $(OBJDIR)/k_kart.o \ $(OBJDIR)/m_anigif.o \ $(OBJDIR)/m_argv.o \ $(OBJDIR)/m_bbox.o \ diff --git a/src/d_clisrv.h b/src/d_clisrv.h index 14b590926fdd476cf3705d2c63fd30f803d041e7..79ade64fc6157592c88b03f2ca19ce5363798ad1 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -154,6 +154,8 @@ typedef struct INT32 ringweapons; UINT16 powers[NUMPOWERS]; + INT32 kartstuff[NUMKARTSTUFF]; // SRB2kart + // Score is resynched in the confirm resync packet INT32 health; SINT8 lives; diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 4f73a25648db4c56d99f8fbb97e7c3e2773a7dc6..fa95274d7b0e9fdd42df207a9ed215c293684419 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -44,6 +44,7 @@ #include "lua_hook.h" #include "m_cond.h" #include "m_anigif.h" +#include "k_kart.h" // SRB2kart #ifdef NETGAME_DEVMODE #define CV_RESTRICT CV_NETVAR @@ -551,7 +552,7 @@ void D_RegisterClientCommands(void) for (i = 0; i < MAXSKINCOLORS; i++) { Color_cons_t[i].value = i; - Color_cons_t[i].strvalue = Color_Names[i]; + Color_cons_t[i].strvalue = KartColor_Names[i]; // SRB2kart } Color_cons_t[MAXSKINCOLORS].value = 0; Color_cons_t[MAXSKINCOLORS].strvalue = NULL; @@ -1107,7 +1108,7 @@ static void SendNameAndColor(void) { CV_StealthSetValue(&cv_playercolor, skins[cv_skin.value].prefcolor); - players[consoleplayer].skincolor = (cv_playercolor.value&0x1F) % MAXSKINCOLORS; + players[consoleplayer].skincolor = (cv_playercolor.value&0x3F) % MAXSKINCOLORS; if (players[consoleplayer].mo) players[consoleplayer].mo->color = (UINT8)players[consoleplayer].skincolor; @@ -1231,7 +1232,7 @@ static void SendNameAndColor2(void) { CV_StealthSetValue(&cv_playercolor2, skins[players[secondplaya].skin].prefcolor); - players[secondplaya].skincolor = (cv_playercolor2.value&0x1F) % MAXSKINCOLORS; + players[secondplaya].skincolor = (cv_playercolor2.value&0x3F) % MAXSKINCOLORS; if (players[secondplaya].mo) players[secondplaya].mo->color = players[secondplaya].skincolor; diff --git a/src/d_player.h b/src/d_player.h index 5a4ebc1de1de080287be645e6d6188a08c79b5ff..6a32c3169a955abd3cb44dcb22f1b1be6f16ed68 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -29,6 +29,9 @@ // as commands per game tick. #include "d_ticcmd.h" +// SRB2kart stuff +#include "k_kart.h" + // Extra abilities/settings for skins (combinable stuff) typedef enum { @@ -286,6 +289,9 @@ typedef struct player_s // Power ups. invinc and invis are tic counters. UINT16 powers[NUMPOWERS]; + // SRB2kart stuff + INT32 kartstuff[NUMKARTSTUFF]; + // Bit flags. // See pflags_t, above. pflags_t pflags; @@ -365,6 +371,7 @@ typedef struct player_s INT16 totalring; // Total number of rings obtained for Race Mode tic_t realtime; // integer replacement for leveltime UINT8 laps; // Number of laps (optional) + tic_t checkpointtimes[256]; // Individual checkpoint times // SRB2kart //////////////////// // CTF Mode Stuff // diff --git a/src/dehacked.c b/src/dehacked.c index 199ea43ca89160879676a05f2325806d2301ab07..b93220072ee65039d65fb0288dd33a2eedb8cf4d 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6817,33 +6817,72 @@ static const char *const ML_LIST[16] = { // This DOES differ from r_draw's Color_Names, unfortunately. // Also includes Super colors -static const char *COLOR_ENUMS[] = { - "NONE", // SKINCOLOR_NONE - "WHITE", // SKINCOLOR_WHITE - "SILVER", // SKINCOLOR_SILVER - "GREY", // SKINCOLOR_GREY - "BLACK", // SKINCOLOR_BLACK - "CYAN", // SKINCOLOR_CYAN - "TEAL", // SKINCOLOR_TEAL - "STEELBLUE", // SKINCOLOR_STEELBLUE - "BLUE", // SKINCOLOR_BLUE - "PEACH", // SKINCOLOR_PEACH - "TAN", // SKINCOLOR_TAN - "PINK", // SKINCOLOR_PINK - "LAVENDER", // SKINCOLOR_LAVENDER - "PURPLE", // SKINCOLOR_PURPLE - "ORANGE", // SKINCOLOR_ORANGE - "ROSEWOOD", // SKINCOLOR_ROSEWOOD - "BEIGE", // SKINCOLOR_BEIGE - "BROWN", // SKINCOLOR_BROWN - "RED", // SKINCOLOR_RED - "DARKRED", // SKINCOLOR_DARKRED - "NEONGREEN", // SKINCOLOR_NEONGREEN - "GREEN", // SKINCOLOR_GREEN - "ZIM", // SKINCOLOR_ZIM - "OLIVE", // SKINCOLOR_OLIVE - "YELLOW", // SKINCOLOR_YELLOW - "GOLD", // SKINCOLOR_GOLD +static const char *COLOR_ENUMS[] = { // Rejigged for Kart. + "NONE", // 00 // SKINCOLOR_NONE + "IVORY", // 01 // SKINCOLOR_IVORY + "WHITE", // 02 // SKINCOLOR_WHITE + "SILVER", // 03 // SKINCOLOR_SILVER + "CLOUDY", // 04 // SKINCOLOR_CLOUDY + "GREY", // 05 // SKINCOLOR_GREY + "DARKGREY", // 06 // SKINCOLOR_DARKGREY + "BLACK", // 07 // SKINCOLOR_BLACK + "SALMON", // 08 // SKINCOLOR_SALMON + "PINK", // 09 // SKINCOLOR_PINK + "LIGHTRED", // 10 // SKINCOLOR_LIGHTRED + "FULLRANGERED", // 11 // SKINCOLOR_FULLRANGERED + "RED", // 12 // SKINCOLOR_RED + "DARKPINK", // 13 // SKINCOLOR_DARKPINK + "DARKRED", // 14 // SKINCOLOR_DARKRED + "DAWN", // 15 // SKINCOLOR_DAWN + "ORANGE", // 16 // SKINCOLOR_ORANGE + "FULLRANGEORANGE", // 17 // SKINCOLOR_FULLRANGEORANGE + "DARKORANGE", // 18 // SKINCOLOR_DARKORANGE + "GOLDENBROWN", // 19 // SKINCOLOR_GOLDENBROWN + "ROSEWOOD", // 20 // SKINCOLOR_ROSEWOOD + "DARKROSEWOOD", // 21 // SKINCOLOR_DARKROSEWOOD + "SEPIA", // 22 // SKINCOLOR_SEPIA + "BEIGE", // 23 // SKINCOLOR_BEIGE + "BROWN", // 24 // SKINCOLOR_BROWN + "LEATHER", // 25 // SKINCOLOR_LEATHER + "YELLOW", // 26 // SKINCOLOR_YELLOW + "PEACH", // 27 // SKINCOLOR_PEACH + "LIGHTORANGE", // 28 // SKINCOLOR_LIGHTORANGE + "PEACHBROWN", // 29 // SKINCOLOR_PEACHBROWN + "GOLD", // 30 // SKINCOLOR_GOLD + "FULLRANGEPEACHBROWN", // 31 // SKINCOLOR_FULLRANGEPEACHBROWN + "GYPSYVOMIT", // 32 // SKINCOLOR_GYPSYVOMIT + "GARDEN", // 33 // SKINCOLOR_GARDEN + "LIGHTARMY", // 34 // SKINCOLOR_LIGHTARMY + "ARMY", // 35 // SKINCOLOR_ARMY + "PISTACHIO", // 36 // SKINCOLOR_PISTACHIO + "ROBOHOODGREEN", // 37 // SKINCOLOR_ROBOHOODGREEN + "OLIVE", // 38 // SKINCOLOR_OLIVE + "DARKARMY", // 39 // SKINCOLOR_DARKARMY + "LIGHTGREEN", // 40 // SKINCOLOR_LIGHTGREEN + "UGLYGREEN", // 41 // SKINCOLOR_UGLYGREEN + "NEONGREEN", // 42 // SKINCOLOR_NEONGREEN + "GREEN", // 43 // SKINCOLOR_GREEN + "DARKGREEN", // 44 // SKINCOLOR_DARKGREEN + "DARKNEONGREEN", // 45 // SKINCOLOR_DARKNEONGREEN + "FROST", // 46 // SKINCOLOR_FROST + "LIGHTSTEELBLUE", // 47 // SKINCOLOR_LIGHTSTEELBLUE + "LIGHTBLUE", // 48 // SKINCOLOR_LIGHTBLUE + "CYAN", // 49 // SKINCOLOR_CYAN + "CERULEAN", // 50 // SKINCOLOR_CERULEAN + "TURQUOISE", // 51 // SKINCOLOR_TURQUOISE + "TEAL", // 52 // SKINCOLOR_TEAL + "STEELBLUE", // 53 // SKINCOLOR_STEELBLUE + "BLUE", // 54 // SKINCOLOR_BLUE + "FULLRANGEBLUE", // 55 // SKINCOLOR_FULLRANGEBLUE + "DARKSTEELBLUE", // 56 // SKINCOLOR_DARKSTEELBLUE + "DARKBLUE", // 57 // SKINCOLOR_DARKBLUE + "JETBLACK", // 58 // SKINCOLOR_JETBLACK + "LILAC", // 59 // SKINCOLOR_LILAC + "PURPLE", // 60 // SKINCOLOR_PURPLE + "LAVENDER", // 61 // SKINCOLOR_LAVENDER + "BYZANTIUM", // 62 // SKINCOLOR_BYZANTIUM + "INDIGO", // 63 // SKINCOLOR_INDIGO + // Super special awesome Super flashing colors! "SUPER1", // SKINCOLOR_SUPER1 "SUPER2", // SKINCOLOR_SUPER2, @@ -7718,7 +7757,7 @@ static fixed_t find_const(const char **rword) free(word); return r; } - else if (fastncmp("SKINCOLOR_",word,10)) { + else if (fastncmp("SKINCOLOR_",word,20)) { char *p = word+10; for (i = 0; i < MAXTRANSLATIONS; i++) if (fastcmp(p, COLOR_ENUMS[i])) { @@ -8128,7 +8167,7 @@ static inline int lib_getenum(lua_State *L) if (mathlib) return luaL_error(L, "huditem '%s' could not be found.\n", word); return 0; } - else if (fastncmp("SKINCOLOR_",word,10)) { + else if (fastncmp("SKINCOLOR_",word,20)) { p = word+10; for (i = 0; i < MAXTRANSLATIONS; i++) if (fastcmp(p, COLOR_ENUMS[i])) { diff --git a/src/doomdef.h b/src/doomdef.h index 9a1e5af9ee5a6e5ce5c1bc7063a918354a4b17ab..af7ed97b298b8631a542545b5875dd22d235a1cb 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -228,33 +228,71 @@ extern FILE *logstream; typedef enum { SKINCOLOR_NONE = 0, + SKINCOLOR_IVORY, SKINCOLOR_WHITE, SKINCOLOR_SILVER, + SKINCOLOR_CLOUDY, SKINCOLOR_GREY, + SKINCOLOR_DARKGREY, SKINCOLOR_BLACK, - SKINCOLOR_CYAN, - SKINCOLOR_TEAL, - SKINCOLOR_STEELBLUE, - SKINCOLOR_BLUE, - SKINCOLOR_PEACH, - SKINCOLOR_TAN, + SKINCOLOR_SALMON, SKINCOLOR_PINK, - SKINCOLOR_LAVENDER, - SKINCOLOR_PURPLE, + SKINCOLOR_LIGHTRED, + SKINCOLOR_FULLRANGERED, + SKINCOLOR_RED, + SKINCOLOR_DARKPINK, + SKINCOLOR_DARKRED, + SKINCOLOR_DAWN, SKINCOLOR_ORANGE, + SKINCOLOR_FULLRANGEORANGE, + SKINCOLOR_DARKORANGE, + SKINCOLOR_GOLDENBROWN, SKINCOLOR_ROSEWOOD, + SKINCOLOR_DARKROSEWOOD, + SKINCOLOR_SEPIA, SKINCOLOR_BEIGE, SKINCOLOR_BROWN, - SKINCOLOR_RED, - SKINCOLOR_DARKRED, - SKINCOLOR_NEONGREEN, - SKINCOLOR_GREEN, - SKINCOLOR_ZIM, - SKINCOLOR_OLIVE, + SKINCOLOR_LEATHER, SKINCOLOR_YELLOW, + SKINCOLOR_PEACH, + SKINCOLOR_LIGHTORANGE, + SKINCOLOR_PEACHBROWN, SKINCOLOR_GOLD, + SKINCOLOR_FULLRANGEPEACHBROWN, + SKINCOLOR_GYPSYVOMIT, + SKINCOLOR_GARDEN, + SKINCOLOR_LIGHTARMY, + SKINCOLOR_ARMY, + SKINCOLOR_PISTACHIO, + SKINCOLOR_ROBOHOODGREEN, + SKINCOLOR_OLIVE, + SKINCOLOR_DARKARMY, + SKINCOLOR_LIGHTGREEN, + SKINCOLOR_UGLYGREEN, + SKINCOLOR_NEONGREEN, + SKINCOLOR_GREEN, + SKINCOLOR_DARKGREEN, + SKINCOLOR_DARKNEONGREEN, + SKINCOLOR_FROST, + SKINCOLOR_LIGHTSTEELBLUE, + SKINCOLOR_LIGHTBLUE, + SKINCOLOR_CYAN, + SKINCOLOR_CERULEAN, + SKINCOLOR_TURQUOISE, + SKINCOLOR_TEAL, + SKINCOLOR_STEELBLUE, + SKINCOLOR_BLUE, + SKINCOLOR_FULLRANGEBLUE, + SKINCOLOR_DARKSTEELBLUE, + SKINCOLOR_DARKBLUE, + SKINCOLOR_JETBLACK, + SKINCOLOR_LILAC, + SKINCOLOR_PURPLE, + SKINCOLOR_LAVENDER, + SKINCOLOR_BYZANTIUM, + SKINCOLOR_INDIGO, - // Careful! MAXSKINCOLORS cannot be greater than 0x20! + // Careful! MAXSKINCOLORS cannot be greater than 0x40 -- Which it is now. MAXSKINCOLORS, // Super special awesome Super flashing colors! diff --git a/src/g_game.c b/src/g_game.c index 8931f8b6b23ff57decef67ce57c9aaf4a8b3b0ae..4b8fa81e856d915d504dc5b039d9c2c32a9e1131 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -45,6 +45,7 @@ #include "b_bot.h" #include "m_cond.h" // condition sets #include "md5.h" // demo checksums +#include "k_kart.h" // SRB2kart gameaction_t gameaction; gamestate_t gamestate = GS_NULL; @@ -2078,6 +2079,14 @@ void G_PlayerReborn(INT32 player) INT16 bot; SINT8 pity; + // SRB2kart + INT32 x; + tic_t checkpointtimes[256]; + INT32 playerahead; + INT32 starpostwp; + INT32 lakitu; + + score = players[player].score; lives = players[player].lives; continues = players[player].continues; @@ -2124,6 +2133,12 @@ void G_PlayerReborn(INT32 player) bot = players[player].bot; pity = players[player].pity; + // SRB2kart + for (x = 0; x < (256); x++) checkpointtimes[x] = players[player].checkpointtimes[x]; + playerahead = players[player].kartstuff[k_playerahead]; + starpostwp = players[player].kartstuff[k_starpostwp]; + lakitu = players[player].kartstuff[k_lakitu]; + p = &players[player]; memset(p, 0, sizeof (*p)); @@ -2171,6 +2186,12 @@ void G_PlayerReborn(INT32 player) p->bot = 1; // reset to AI-controlled p->pity = pity; + // SRB2kart + for (x = 0; x < 256; x++) p->checkpointtimes[x] = checkpointtimes[x]; + p->kartstuff[k_playerahead] = playerahead; + p->kartstuff[k_starpostwp] = starpostwp; + p->kartstuff[k_lakitu] = lakitu; + // Don't do anything immediately p->pflags |= PF_USEDOWN; p->pflags |= PF_ATTACKDOWN; @@ -2191,9 +2212,15 @@ void G_PlayerReborn(INT32 player) mapmusname[6] = 0; mapmusflags = mapheaderinfo[gamemap-1]->mustrack & MUSIC_TRACKMASK; } - S_ChangeMusic(mapmusname, mapmusflags, true); + //SRB2kart - leveltime stuff + if (leveltime > 157) + { + S_ChangeMusic(mapmusname, mapmusflags, true); + if (p->laps == (unsigned)(cv_numlaps.value - 1)) + S_SpeedMusic(1.2f); + } } - + if (gametype == GT_COOP) P_FindEmerald(); // scan for emeralds to hunt for @@ -5106,7 +5133,7 @@ void G_DoPlayDemo(char *defdemoname) // Set color for (i = 0; i < MAXSKINCOLORS; i++) - if (!stricmp(Color_Names[i],color)) + if (!stricmp(KartColor_Names[i],color)) // SRB2kart { players[0].skincolor = i; break; @@ -5352,7 +5379,7 @@ void G_AddGhost(char *defdemoname) // Set color gh->mo->color = ((skin_t*)gh->mo->skin)->prefcolor; for (i = 0; i < MAXSKINCOLORS; i++) - if (!stricmp(Color_Names[i],color)) + if (!stricmp(KartColor_Names[i],color)) // SRB2kart { gh->mo->color = (UINT8)i; break; diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 8e48ec110388c6f3082b7a0b928a7b83c58af81b..e2cd70d6b42aa817650f41b6c9ccc6bb35fdfb7a 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -975,9 +975,11 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, case SKINCOLOR_PEACH: blendcolor = V_GetColor(71); break; + /* case SKINCOLOR_TAN: blendcolor = V_GetColor(79); break; + */ case SKINCOLOR_PINK: blendcolor = V_GetColor(147); break; @@ -1011,9 +1013,11 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, case SKINCOLOR_GREEN: blendcolor = V_GetColor(166); break; + /* case SKINCOLOR_ZIM: blendcolor = V_GetColor(180); break; + */ case SKINCOLOR_OLIVE: blendcolor = V_GetColor(108); break; diff --git a/src/k_kart.c b/src/k_kart.c new file mode 100644 index 0000000000000000000000000000000000000000..703bc929dd39d34c968d368edbf8a774e04587f1 --- /dev/null +++ b/src/k_kart.c @@ -0,0 +1,390 @@ +// SONIC ROBO BLAST 2 KART ~ ZarroTsu +//----------------------------------------------------------------------------- +/// \file k_kart.c +/// \brief SRB2kart general. +/// All of the SRB2kart-unique stuff. + +#include "doomdef.h" +#include "r_draw.h" +#include "r_local.h" + +//{ SRB2kart Color Code + +#define SKIN_RAMP_LENGTH 16 +#define DEFAULT_STARTTRANSCOLOR 160 +#define NUM_PALETTE_ENTRIES 256 + +const char *KartColor_Names[MAXSKINCOLORS] = +{ + "None", // 00 // SKINCOLOR_NONE + "Ivory", // 01 // SKINCOLOR_IVORY + "White", // 02 // SKINCOLOR_WHITE + "Silver", // 03 // SKINCOLOR_SILVER + "Cloudy", // 04 // SKINCOLOR_CLOUDY + "Grey", // 05 // SKINCOLOR_GREY + "Dark Grey", // 06 // SKINCOLOR_DARKGREY + "Black", // 07 // SKINCOLOR_BLACK + "Salmon", // 08 // SKINCOLOR_SALMON + "Pink", // 09 // SKINCOLOR_PINK + "Light Red", // 10 // SKINCOLOR_LIGHTRED + "Full-Range Red", // 11 // SKINCOLOR_FULLRANGERED + "Red", // 12 // SKINCOLOR_RED + "Dark Pink", // 13 // SKINCOLOR_DARKPINK + "Dark Red", // 14 // SKINCOLOR_DARKRED + "Dawn", // 15 // SKINCOLOR_DAWN + "Orange", // 16 // SKINCOLOR_ORANGE + "Full-Range Orange", // 17 // SKINCOLOR_FULLRANGEORANGE + "Dark Orange", // 18 // SKINCOLOR_DARKORANGE + "Golden Brown", // 19 // SKINCOLOR_GOLDENBROWN + "Rosewood", // 20 // SKINCOLOR_ROSEWOOD + "Dark Rosewood", // 21 // SKINCOLOR_DARKROSEWOOD + "Sepia", // 22 // SKINCOLOR_SEPIA + "Beige", // 23 // SKINCOLOR_BEIGE + "Brown", // 24 // SKINCOLOR_BROWN + "Leather", // 25 // SKINCOLOR_LEATHER + "Yellow", // 26 // SKINCOLOR_YELLOW + "Peach", // 27 // SKINCOLOR_PEACH + "Light Orange", // 28 // SKINCOLOR_LIGHTORANGE + "Peach-Brown", // 29 // SKINCOLOR_PEACHBROWN + "Gold", // 30 // SKINCOLOR_GOLD + "Full-Range Peach-Brown", // 31 // SKINCOLOR_FULLRANGEPEACHBROWN + "Gypsy Vomit", // 32 // SKINCOLOR_GYPSYVOMIT + "Garden", // 33 // SKINCOLOR_GARDEN + "Light Army", // 34 // SKINCOLOR_LIGHTARMY + "Army", // 35 // SKINCOLOR_ARMY + "Pistachio", // 36 // SKINCOLOR_PISTACHIO + "Robo-Hood Green", // 37 // SKINCOLOR_ROBOHOODGREEN + "Olive", // 38 // SKINCOLOR_OLIVE + "Dark Army", // 39 // SKINCOLOR_DARKARMY + "Light Green", // 40 // SKINCOLOR_LIGHTGREEN + "Ugly Green", // 41 // SKINCOLOR_UGLYGREEN + "Neon Green", // 42 // SKINCOLOR_NEONGREEN + "Green", // 43 // SKINCOLOR_GREEN + "Dark Green", // 44 // SKINCOLOR_DARKGREEN + "Dark Neon Green", // 45 // SKINCOLOR_DARKNEONGREEN + "Frost", // 46 // SKINCOLOR_FROST + "Light Steel Blue", // 47 // SKINCOLOR_LIGHTSTEELBLUE + "Light Blue", // 48 // SKINCOLOR_LIGHTBLUE + "Cyan", // 49 // SKINCOLOR_CYAN + "Cerulean", // 50 // SKINCOLOR_CERULEAN + "Turquoise", // 51 // SKINCOLOR_TURQUOISE + "Teal", // 52 // SKINCOLOR_TEAL + "Steel Blue", // 53 // SKINCOLOR_STEELBLUE + "Blue", // 54 // SKINCOLOR_BLUE + "Full-Range Blue", // 55 // SKINCOLOR_FULLRANGEBLUE + "Dark Steel Blue", // 56 // SKINCOLOR_DARKSTEELBLUE + "Dark Blue", // 57 // SKINCOLOR_DARKBLUE + "Jet Black", // 58 // SKINCOLOR_JETBLACK + "Lilac", // 59 // SKINCOLOR_LILAC + "Purple", // 60 // SKINCOLOR_PURPLE + "Lavender", // 61 // SKINCOLOR_LAVENDER + "Byzantium", // 62 // SKINCOLOR_BYZANTIUM + "Indigo" // 63 // SKINCOLOR_INDIGO +}; + +/** \brief Generates a simple case table for given values. Not very optimal, but makes it easy to read in K_GenerateKartColormap. + + \param i loop iteration + \param cNumber Numeric color value, from Zero to Fifteen + + \return INT32 Returns the pulled value of the sixteen fed to it +*/ +static INT32 R_KartColorSetter(UINT8 i, + INT32 cZero, INT32 cOne, INT32 cTwo, INT32 cThree, + INT32 cFour, INT32 cFive, INT32 cSix, INT32 cSeven, + INT32 cEight, INT32 cNine, INT32 cTen, INT32 cEleven, + INT32 cTwelve, INT32 cThirteen, INT32 cFourteen, INT32 cFifteen) +{ + INT32 ThisColorIs = 0; + + switch (i) + { + case 0: ThisColorIs = cZero; break; + case 1: ThisColorIs = cOne; break; + case 2: ThisColorIs = cTwo; break; + case 3: ThisColorIs = cThree; break; + case 4: ThisColorIs = cFour; break; + case 5: ThisColorIs = cFive; break; + case 6: ThisColorIs = cSix; break; + case 7: ThisColorIs = cSeven; break; + case 8: ThisColorIs = cEight; break; + case 9: ThisColorIs = cNine; break; + case 10: ThisColorIs = cTen; break; + case 11: ThisColorIs = cEleven; break; + case 12: ThisColorIs = cTwelve; break; + case 13: ThisColorIs = cThirteen; break; + case 14: ThisColorIs = cFourteen; break; + case 15: ThisColorIs = cFifteen; break; + } + + return ThisColorIs; +} + +/** \brief Generates a translation colormap for Kart, to replace R_GenerateTranslationColormap in r_draw.c + + \param dest_colormap colormap to populate + \param skinnum number of skin, TC_DEFAULT or TC_BOSS + \param color translation color + + \return void +*/ +void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color) +{ + INT32 i; + INT32 starttranscolor; + + // Handle a couple of simple special cases + if (skinnum == TC_BOSS || skinnum == TC_ALLWHITE || skinnum == TC_METALSONIC || color == SKINCOLOR_NONE) + { + for (i = 0; i < NUM_PALETTE_ENTRIES; i++) + { + if (skinnum == TC_ALLWHITE) dest_colormap[i] = 0; + else dest_colormap[i] = (UINT8)i; + } + + // White! + if (skinnum == TC_BOSS) + dest_colormap[31] = 0; + else if (skinnum == TC_METALSONIC) + dest_colormap[239] = 0; + + return; + } + + starttranscolor = (skinnum != TC_DEFAULT) ? skins[skinnum].starttranscolor : DEFAULT_STARTTRANSCOLOR; + + // Fill in the entries of the palette that are fixed + for (i = 0; i < starttranscolor; i++) + dest_colormap[i] = (UINT8)i; + + for (i = (UINT8)(starttranscolor + 16); i < NUM_PALETTE_ENTRIES; i++) + dest_colormap[i] = (UINT8)i; + + // Build the translated ramp + for (i = 0; i < SKIN_RAMP_LENGTH; i++) + switch (color) + { + case SKINCOLOR_IVORY: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 120, 120, 120, 120, 0, 0, 0, 0, 1, 1, 2, 2, 4, 6, 8, 10); break; + case SKINCOLOR_WHITE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7); break; + case SKINCOLOR_SILVER: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); break; + case SKINCOLOR_CLOUDY: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31); break; + case SKINCOLOR_GREY: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23); break; + case SKINCOLOR_DARKGREY: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31); break; + case SKINCOLOR_BLACK: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31); break; + case SKINCOLOR_SALMON: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 120, 120, 121, 121, 122, 122, 123, 123, 124, 124, 125, 125, 126, 126, 127, 127); break; + case SKINCOLOR_PINK: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 144, 144, 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, 150, 150, 151, 151); break; + case SKINCOLOR_LIGHTRED: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135); break; + case SKINCOLOR_FULLRANGERED: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 120, 121, 123, 124, 126, 127, 129, 130, 132, 133, 135, 136, 138, 139, 141, 143); break; + case SKINCOLOR_RED: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140); break; + case SKINCOLOR_DARKPINK: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 144, 145, 146, 147, 148, 149, 150, 151, 134, 135, 136, 137, 138, 139, 140, 141); break; + case SKINCOLOR_DARKRED: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 136, 136, 137, 137, 138, 138, 139, 139, 140, 140, 141, 141, 142, 142, 143, 143); break; + case SKINCOLOR_DAWN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 120, 121, 122, 123, 124, 147, 88, 89, 149, 91, 92, 151, 94, 95, 152, 153); break; + case SKINCOLOR_ORANGE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95); break; + case SKINCOLOR_FULLRANGEORANGE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 80, 81, 83, 85, 86, 88, 90, 91, 93, 95, 152, 153, 154, 156, 157, 159); break; + case SKINCOLOR_DARKORANGE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 88, 89, 90, 91, 92, 93, 94, 95, 152, 153, 154, 155, 156, 157, 158, 159); break; + case SKINCOLOR_GOLDENBROWN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 112, 113, 114, 115, 116, 117, 118, 119, 156, 156, 157, 157, 158, 158, 159, 159); break; + case SKINCOLOR_ROSEWOOD: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 152, 152, 153, 153, 154, 154, 155, 155, 156, 156, 157, 157, 158, 158, 159, 159); break; + case SKINCOLOR_DARKROSEWOOD: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 152, 153, 154, 155, 156, 157, 158, 159, 139, 140, 141, 142, 143, 31, 31, 31); break; + case SKINCOLOR_SEPIA: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 3, 5, 7, 32, 9, 34, 36, 37, 39, 42, 45, 59, 60, 61, 62, 63); break; + case SKINCOLOR_BEIGE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47); break; + case SKINCOLOR_BROWN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63); break; + case SKINCOLOR_LEATHER: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 57, 58, 59, 59, 60, 60, 61, 61, 62, 62, 63, 63, 28, 29, 30, 31); break; + case SKINCOLOR_YELLOW: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 97, 98, 99, 100, 101, 102, 103, 104, 113, 113, 114, 115, 115, 115, 116, 117); break; + case SKINCOLOR_PEACH: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79); break; + case SKINCOLOR_LIGHTORANGE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 80, 80, 81, 81, 82, 82, 83, 83, 84, 84, 85, 85, 86, 86, 87, 87); break; + case SKINCOLOR_PEACHBROWN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 72, 73, 74, 75, 76, 77, 78, 79, 48, 49, 50, 51, 52, 53, 54, 55); break; + case SKINCOLOR_GOLD: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 112, 112, 113, 113, 114, 114, 115, 115, 116, 116, 117, 117, 118, 118, 119, 119); break; + case SKINCOLOR_FULLRANGEPEACHBROWN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 64, 66, 68, 70, 72, 74, 76, 78, 48, 50, 52, 54, 56, 58, 60, 62); break; + case SKINCOLOR_GYPSYVOMIT: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 121, 144, 145, 72, 73, 84, 114, 115, 107, 108, 109, 183, 223, 207, 30, 246); break; + case SKINCOLOR_GARDEN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 98, 99, 112, 101, 113, 114, 106, 179, 180, 181, 182, 172, 183, 173, 174, 175); break; + case SKINCOLOR_LIGHTARMY: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 176, 176, 176, 176, 177, 177, 177, 177, 178, 178, 178, 178, 179, 179, 179, 179); break; + case SKINCOLOR_ARMY: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 176, 176, 177, 177, 178, 178, 179, 179, 180, 180, 181, 181, 182, 182, 183, 183); break; + case SKINCOLOR_PISTACHIO: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 176, 176, 177, 177, 178, 178, 179, 179, 166, 167, 168, 169, 170, 171, 172, 173); break; + case SKINCOLOR_ROBOHOODGREEN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 177, 177, 178, 178, 165, 165, 167, 167, 182, 182, 171, 171, 183, 183, 173, 173); break; + case SKINCOLOR_OLIVE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 105, 105, 106, 106, 107, 107, 108, 108, 109, 109, 110, 110, 111, 111, 31, 31); break; + case SKINCOLOR_DARKARMY: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 176, 177, 178, 179, 170, 181, 182, 183, 173, 173, 174, 174, 175, 175, 31, 31); break; + case SKINCOLOR_LIGHTGREEN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 160, 160, 161, 161, 162, 162, 163, 163, 164, 164, 165, 165, 166, 166, 167, 167); break; + case SKINCOLOR_UGLYGREEN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 184, 184, 184, 184, 185, 185, 185, 185, 186, 186, 186, 186, 187, 187, 187, 187); break; + case SKINCOLOR_NEONGREEN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 184, 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, 189, 190, 190, 191, 191); break; + case SKINCOLOR_GREEN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175); break; + case SKINCOLOR_DARKGREEN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 168, 168, 169, 169, 170, 170, 171, 171, 172, 172, 173, 173, 174, 174, 175, 175); break; + case SKINCOLOR_DARKNEONGREEN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 187, 187, 188, 188, 189, 189, 190, 190, 191, 191, 175, 175, 30, 30, 31, 31); break; + case SKINCOLOR_FROST: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 224, 225, 226, 212, 213, 213, 214, 215, 220, 221, 172, 222, 173, 223, 174, 175); break; + case SKINCOLOR_LIGHTSTEELBLUE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 200, 200, 200, 200, 201, 201, 201, 201, 202, 202, 202, 202, 203, 203, 203, 203); break; + case SKINCOLOR_LIGHTBLUE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 224, 224, 225, 225, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231); break; + case SKINCOLOR_CYAN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 208, 208, 209, 210, 210, 211, 212, 213, 213, 214, 215, 216, 216, 217, 218, 219); break; + case SKINCOLOR_CERULEAN: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 216, 216, 216, 216, 217, 217, 217, 217, 218, 218, 218, 218, 219, 219, 219, 219); break; + case SKINCOLOR_TURQUOISE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 208, 208, 209, 210, 210, 211, 212, 213, 213, 214, 215, 220, 220, 221, 222, 223); break; + case SKINCOLOR_TEAL: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 220, 220, 220, 220, 221, 221, 221, 221, 222, 222, 222, 222, 223, 223, 223, 223); break; + case SKINCOLOR_STEELBLUE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 200, 200, 201, 201, 202, 202, 203, 203, 204, 204, 205, 205, 206, 206, 207, 207); break; + case SKINCOLOR_BLUE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239); break; + case SKINCOLOR_FULLRANGEBLUE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 224, 225, 226, 228, 229, 231, 232, 234, 235, 237, 238, 240, 241, 243, 244, 246); break; + case SKINCOLOR_DARKSTEELBLUE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 200, 201, 202, 203, 204, 205, 206, 238, 239, 240, 241, 242, 243, 244, 245, 246); break; + case SKINCOLOR_DARKBLUE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246); break; + case SKINCOLOR_JETBLACK: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 200, 201, 202, 203, 204, 205, 206, 207, 28, 28, 29, 29, 30, 30, 31, 31); break; + case SKINCOLOR_LILAC: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 120, 120, 121, 121, 122, 122, 123, 123, 192, 192, 248, 248, 249, 249, 250, 250); break; + case SKINCOLOR_PURPLE: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 192, 192, 193, 193, 194, 194, 195, 195, 196, 196, 197, 197, 198, 198, 199, 199); break; + case SKINCOLOR_LAVENDER: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, 254, 255, 255); break; + case SKINCOLOR_BYZANTIUM: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 192, 248, 249, 250, 251, 252, 253, 254, 255, 255, 29, 29, 30, 30, 31, 31); break; + case SKINCOLOR_INDIGO: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 192, 193, 194, 195, 196, 197, 198, 199, 255, 255, 29, 29, 30, 30, 31, 31); break; + /* + * Removed Colors: + * case SKINCOLOR_DUSK: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 192, 192, 248, 249, 250, 251, 229, 204, 230, 205, 206, 239, 240, 241, 242, 243); break; + * case SKINCOLOR_RAINBOW: dest_colormap[starttranscolor + i] = R_KartColorSetter(i, 1, 145, 125, 73, 83, 114, 106, 180, 187, 168, 219, 205, 236, 206, 199, 255); break; + */ + default: + I_Error("Invalid skin color #%hu.", (UINT16)color); + return; + } +} + +/** \brief Pulls kart color by name, to replace R_GetColorByName in r_draw.c + + \param name color name + + \return 0 +*/ +UINT8 K_GetKartColorByName(const char *name) +{ + UINT8 color = (UINT8)atoi(name); + if (color > 0 && color < MAXSKINCOLORS) + return color; + for (color = 1; color < MAXSKINCOLORS; color++) + if (!stricmp(KartColor_Names[color], name)) + return color; + return 0; +} + +//} + + +//{ P_KartPlayerThink - for p_user.c + +/** \brief Decreases various kart timers and powers per frame. Called in P_PlayerThink in p_user.c + + \param player player object passed from P_PlayerThink + \param cmd control input from player + + \return void +*/ +void P_KartPlayerThink(player_t *player, ticcmd_t *cmd) +{ + // This spawns the drift sparks when k_driftcharge hits 30. Its own AI handles life/death and color + //if ((player->kartstuff[k_drift] == 1 || player->kartstuff[k_drift] == -1) + // && player->kartstuff[k_driftcharge] == 30) + // P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFT)->target = player->mo; + + if (player->kartstuff[k_itemclose]) + player->kartstuff[k_itemclose]--; + + if (player->kartstuff[k_spinout]) + player->kartstuff[k_spinout]--; + + if (player->kartstuff[k_spinouttimer]) + player->kartstuff[k_spinouttimer]--; + + if (player->kartstuff[k_magnettimer]) + player->kartstuff[k_magnettimer]--; + + if (player->kartstuff[k_mushroomtimer]) + player->kartstuff[k_mushroomtimer]--; + + if (player->kartstuff[k_startimer]) + player->kartstuff[k_startimer]--; + + if (player->kartstuff[k_growshrinktimer] > 0) + player->kartstuff[k_growshrinktimer]--; + + if (player->kartstuff[k_growshrinktimer] < 0) + player->kartstuff[k_growshrinktimer]++; + + if (player->kartstuff[k_growshrinktimer] == 1 || player->kartstuff[k_growshrinktimer] == -1) + { + player->mo->destscale = 100; + 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_bootaketimer] == 0 && player->kartstuff[k_boostolentimer] == 0 + && player->kartstuff[k_fireflowertimer]) + player->kartstuff[k_fireflowertimer]--; + + if (player->kartstuff[k_bootaketimer]) + player->kartstuff[k_bootaketimer]--; + + if (player->kartstuff[k_boostolentimer]) + player->kartstuff[k_boostolentimer]--; + + if (player->kartstuff[k_squishedtimer]) + player->kartstuff[k_squishedtimer]--; + + if (player->kartstuff[k_laserwisptimer]) + player->kartstuff[k_laserwisptimer]--; + + // Restores music if too many sounds are playing (?) + if (player->kartstuff[k_sounds] >= 1 && player->kartstuff[k_sounds] < 120) + player->kartstuff[k_sounds] += 1; + if ((player->kartstuff[k_sounds] < 120 && player->kartstuff[k_sounds] > 116) + && P_IsLocalPlayer(player)) + P_RestoreMusic(player); + + // ??? + /* + if (player->kartstuff[k_jmp] > 1 && onground) + { + S_StartSound(player->mo, sfx_spring); + P_DoJump(player, false); + player->mo->momz *= player->kartstuff[k_jmp]; + player->kartstuff[k_jmp] = 0; + } + */ + + if (cmd->buttons & BT_JUMP) + player->kartstuff[k_jmp] = 1; + else + player->kartstuff[k_jmp] = 0; + + P_KartItemRoulette(player); // Roulette Code + + // Looping and stopping of the horrible horrible star SFX ~Sryder + if (player->mo->health > 0 && player->mo->player->kartstuff[k_startimer])// If you have invincibility + { + if (!P_IsLocalPlayer(player)) // If it isn't the current player + { + if (!S_SoundPlaying(NULL, sfx_star)) // and it isn't still playing + S_StartSound(player->mo, sfx_star); // play it again + } + } + else if (player->mo->health <= 0 || player->mo->player->kartstuff[k_startimer] <= 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 now the same for the mega mushroom SFX ~Sryder + if (player->mo->health > 0 && player->mo->player->kartstuff[k_growshrinktimer] > 0) // If you are big + { + if (!P_IsLocalPlayer(player)) // If it isn't the current player + { + if (!S_SoundPlaying(NULL, sfx_mega)) // and it isn't still playing + S_StartSound(player->mo, sfx_mega); // play it again + } + } + else // 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 + } +} + +//} + + + + + + + diff --git a/src/k_kart.h b/src/k_kart.h new file mode 100644 index 0000000000000000000000000000000000000000..0312638b6f152aaf99ac8ce57288a99fec049f3f --- /dev/null +++ b/src/k_kart.h @@ -0,0 +1,88 @@ +// SONIC ROBO BLAST 2 KART ~ ZarroTsu +//----------------------------------------------------------------------------- +/// \file k_kart.h +/// \brief SRB2kart stuff. + +#ifndef __K_KART__ +#define __K_KART__ + +extern const char *KartColor_Names[MAXSKINCOLORS]; +void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color); +UINT8 K_GetKartColorByName(const char *name); + +//{ SRB2kart Player structure - kartstuff + +typedef enum +{ + // Basic gameplay things + k_position, // Used for Kart positions, mostly for deterministic stuff + k_playerahead, // Is someone ahead of me or not? + k_oldposition, // Used for taunting when you pass someone + k_prevcheck, // Previous checkpoint distance; for p_user.c (was "pw_pcd") + k_nextcheck, // Next checkpoint distance; for p_user.c (was "pw_ncd") + k_waypoint, // Waypoints. + k_starpostwp, // Temporarily stores player waypoint for... some reason. Used when respawning and finishing. + + k_throwdir, // Held dir of controls; 1 = forward, 0 = none, -1 = backward (was "player->heldDir") + k_turndir, // Turn direction for drifting; -1 = Left, 1 = Right, 0 = none + k_sounds, // Used this to avoid sounds being played every tic + + k_boosting, // Determines if you're currently shroom-boosting to change how drifting works + 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 + + k_drift, // Drifting Left or Right, plus a bigger counter = sharper turn + k_driftcharge, // Charge your drift so you can release a burst of speed + k_jmp, // In Mario Kart, letting go of the jump button stops the drift + k_lakitu, // > 0 = Lakitu fishing, < 0 = Lakitu lap counter (was "player->airtime") // NOTE: Check for ->lakitu, replace with this + + k_itemroulette, // Used for the roulette when deciding what item to give you (was "pw_kartitem") + k_itemslot, // If you have X item, and kartitem chose X too, save it + 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_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, // Wipe-out from a banana peel or oil slick (was "pw_bananacam") + k_laserwisptimer, // The duration and relative angle of the laser + k_fireflowertimer, // Duration of Fire Flower + + // Each item needs its own power slot, for the HUD and held use + 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 + + NUMKARTSTUFF +} kartstufftype_t; + +//} + +// ========================================================================= +#endif // __K_KART__ diff --git a/src/m_cond.c b/src/m_cond.c index a56efd3ae11a38854b8f12514832912d4881d45c..2ec30f42b13d7095811b8b38c8b65b5599e4dd77 100644 --- a/src/m_cond.c +++ b/src/m_cond.c @@ -19,7 +19,8 @@ #include "g_game.h" // record info #include "r_things.h" // numskins -#include "r_draw.h" // R_GetColorByName +//#include "r_draw.h" // R_GetColorByName +#include "k_kart.h" // K_GetKartColorByName // Map triggers for linedef executors // 32 triggers, one bit each diff --git a/src/m_menu.c b/src/m_menu.c index 6c12944444983cebec788b92f5afce699f35eda8..dd7d142afbf37aee2ceaad8c3b73615413382c0f 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -53,6 +53,7 @@ #include "byteptr.h" #include "st_stuff.h" #include "i_sound.h" +#include "k_kart.h" // SRB2kart // Condition Sets #include "m_cond.h" @@ -6403,7 +6404,7 @@ static void M_DrawSetupMultiPlayerMenu(void) // draw the name of the color you have chosen // Just so people don't go thinking that "Default" is Green. - V_DrawString(208, 72, V_YELLOWMAP|V_ALLOWLOWERCASE, Color_Names[setupm_fakecolor]); + V_DrawString(208, 72, V_YELLOWMAP|V_ALLOWLOWERCASE, KartColor_Names[setupm_fakecolor]); // SRB2kart // draw text cursor for name if (!itemOn && skullAnimCounter < 4) // blink cursor diff --git a/src/p_user.c b/src/p_user.c index 0ee5a36b463b645f63c610b5293377f951d79370..2f6911fe1382623ae84b416cb525ac7b1d8ce80a 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7794,13 +7794,13 @@ static CV_PossibleValue_t rotation_cons_t[] = {{1, "MIN"}, {45, "MAX"}, {0, NULL static CV_PossibleValue_t CV_CamRotate[] = {{-720, "MIN"}, {720, "MAX"}, {0, NULL}}; consvar_t cv_cam_dist = {"cam_dist", "128", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_cam_height = {"cam_height", "20", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_cam_height = {"cam_height", "40", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam_still = {"cam_still", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam_speed = {"cam_speed", "0.25", CV_FLOAT, CV_CamSpeed, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam_rotate = {"cam_rotate", "0", CV_CALL|CV_NOINIT, CV_CamRotate, CV_CamRotate_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam_rotspeed = {"cam_rotspeed", "10", 0, rotation_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam2_dist = {"cam2_dist", "128", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_cam2_height = {"cam2_height", "20", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_cam2_height = {"cam2_height", "40", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam2_still = {"cam2_still", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam2_speed = {"cam2_speed", "0.25", CV_FLOAT, CV_CamSpeed, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam2_rotate = {"cam2_rotate", "0", CV_CALL|CV_NOINIT, CV_CamRotate, CV_CamRotate2_OnChange, 0, NULL, NULL, 0, 0, NULL}; @@ -9124,6 +9124,8 @@ void P_PlayerThink(player_t *player) } player->pflags &= ~PF_SLIDING; + + P_KartPlayerThink(player); // SRB2kart /* // Colormap verification diff --git a/src/r_draw.c b/src/r_draw.c index c7bd077e406e8695d75ab4b6c4a9c6f017682b6d..2100b272b02f6db76627168f9de31376b88b4b2d 100644 --- a/src/r_draw.c +++ b/src/r_draw.c @@ -25,6 +25,7 @@ #include "w_wad.h" #include "z_zone.h" #include "console.h" // Until buffering gets finished +#include "k_kart.h" // SRB2kart #ifdef HWRENDER #include "hardware/hw_main.h" @@ -135,6 +136,7 @@ static UINT8** translationtablecache[MAXSKINS + 4] = {NULL}; // See also the enum skincolors_t // TODO Callum: Can this be translated? +/* const char *Color_Names[MAXSKINCOLORS] = { "None", // SKINCOLOR_NONE @@ -164,6 +166,7 @@ const char *Color_Names[MAXSKINCOLORS] = "Yellow", // SKINCOLOR_YELLOW "Gold" // SKINCOLOR_GOLD }; +*/ const UINT8 Color_Opposite[MAXSKINCOLORS*2] = { @@ -234,6 +237,7 @@ void R_InitTranslationTables(void) \return void */ +/* static void R_GenerateTranslationColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color) { // Table of indices into the palette of the first entries of each translated ramp @@ -496,7 +500,7 @@ static void R_GenerateTranslationColormap(UINT8 *dest_colormap, INT32 skinnum, U break; } } - +*/ /** \brief Retrieves a translation colormap from the cache. @@ -534,7 +538,7 @@ UINT8* R_GetTranslationColormap(INT32 skinnum, skincolors_t color, UINT8 flags) if (!ret) { ret = Z_MallocAlign(NUM_PALETTE_ENTRIES, (flags & GTC_CACHE) ? PU_LEVEL : PU_STATIC, NULL, 8); - R_GenerateTranslationColormap(ret, skinnum, color); + K_GenerateKartColormap(ret, skinnum, color); //R_GenerateTranslationColormap(ret, skinnum, color); // SRB2kart // Cache the colormap if desired if (flags & GTC_CACHE) @@ -561,6 +565,7 @@ void R_FlushTranslationColormapCache(void) memset(translationtablecache[i], 0, MAXTRANSLATIONS * sizeof(UINT8**)); } +/* UINT8 R_GetColorByName(const char *name) { UINT8 color = (UINT8)atoi(name); @@ -571,6 +576,7 @@ UINT8 R_GetColorByName(const char *name) return color; return 0; } +*/ // ========================================================================== // COMMON DRAWER FOR 8 AND 16 BIT COLOR MODES diff --git a/src/r_things.c b/src/r_things.c index eaab536137177b46388bf9ed56c51c24a8f4a00a..44883f2ceac7a2b1d7d9de79030876c962e39a30 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -28,6 +28,7 @@ #include "dehacked.h" // get_number (for thok) #include "d_netfil.h" // blargh. for nameonly(). #include "m_cheat.h" // objectplace +#include "k_kart.h" // SRB2kart #ifdef HWRENDER #include "hardware/hw_md2.h" #endif @@ -2653,7 +2654,7 @@ void R_AddSkins(UINT16 wadnum) skin->starttranscolor = atoi(value); else if (!stricmp(stoken, "prefcolor")) - skin->prefcolor = R_GetColorByName(value); + skin->prefcolor = K_GetKartColorByName(value); else if (!stricmp(stoken, "jumpfactor")) skin->jumpfactor = FLOAT_TO_FIXED(atof(value)); else if (!stricmp(stoken, "highresscale"))