diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 33697e97c..6043141b3 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -484,6 +484,10 @@ consvar_t cv_mute = {"mute", "Off", CV_NETVAR|CV_CALL, CV_OnOff, Mute_OnChange, consvar_t cv_sleep = {"cpusleep", "1", CV_SAVE, sleeping_cons_t, NULL, -1, NULL, NULL, 0, 0, NULL}; +static CV_PossibleValue_t skinselectspin_cons_t[] = { + {0, "Off"}, {1, "Slow"}, {2, "2"}, {3, "3"}, {4, "4"}, {5, "5"}, {6, "6"}, {7, "7"}, {8, "8"}, {9, "9"}, {10, "Fast"}, {SKINSELECTSPIN_PAIN, "Pain"}, {0, NULL}}; +consvar_t cv_skinselectspin = {"skinselectspin", "5", CV_SAVE, skinselectspin_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; + static CV_PossibleValue_t perfstats_cons_t[] = { {0, "Off"}, {1, "Rendering"}, {2, "Logic"}, {3, "ThinkFrame"}, {0, NULL}}; consvar_t cv_perfstats = {"perfstats", "Off", CV_CALL, perfstats_cons_t, PS_PerfStats_OnChange, 0, NULL, NULL, 0, 0, NULL}; @@ -1072,6 +1076,8 @@ void D_RegisterClientCommands(void) CV_RegisterVar(&cv_scr_height); CV_RegisterVar(&cv_soundtest); + + CV_RegisterVar(&cv_skinselectspin); CV_RegisterVar(&cv_perfstats); CV_RegisterVar(&cv_ps_thinkframe_page); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index b45756aac..e92289397 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -156,6 +156,9 @@ extern consvar_t cv_skipmapcheck; extern consvar_t cv_sleep; +#define SKINSELECTSPIN_PAIN 25 +extern consvar_t cv_skinselectspin; + extern consvar_t cv_perfstats; extern consvar_t cv_ps_thinkframe_page; extern consvar_t cv_ps_samplesize; diff --git a/src/m_menu.c b/src/m_menu.c index 104dc18c8..33e3decbd 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1688,9 +1688,11 @@ static menuitem_t OP_SaturnMenu[] = {IT_STRING | IT_CVAR, NULL, "Serverqueue waittime", &cv_connectawaittime, 40}, {IT_STRING | IT_CVAR, NULL, "Addon Download Speed", &cv_downloadspeed, 55}, {IT_STRING | IT_CVAR, NULL, "Less Flicker effects", &cv_lessflicker, 70}, - {IT_STRING | IT_CVAR, NULL, "Min Shader Brightness", &cv_secbright, 80}, - {IT_SUBMENU|IT_STRING, NULL, "Player distortion...", &OP_PlayerDistortDef, 100}, - {IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 115}, + {IT_STRING | IT_CVAR, NULL, "Skin Select Spinning Speed", &cv_skinselectspin, 80}, + {IT_STRING | IT_CVAR, NULL, "Min Shader Brightness", &cv_secbright, 90}, + + {IT_SUBMENU|IT_STRING, NULL, "Player distortion...", &OP_PlayerDistortDef, 110}, + {IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 125}, //{IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 130}, }; @@ -9904,6 +9906,7 @@ static void M_DrawSetupMultiPlayerMenu(void) UINT8 s, w; const UINT8 *flashcol = V_GetStringColormap(highlightflags); INT32 statx, staty; + UINT32 speenframe; INT32 sltw, actw, hetw; UINT8 skintodisplay; INT32 nameboxaddy = 0; @@ -10313,7 +10316,7 @@ static void M_DrawSetupMultiPlayerMenu(void) multi_tics -= renderdeltatics; while (multi_tics <= 0) { - st = multi_state->nextstate; + st = cv_skinselectspin.value == SKINSELECTSPIN_PAIN ? S_KART_PAIN : multi_state->nextstate; if (st != S_NULL) multi_state = &states[st]; @@ -10362,9 +10365,17 @@ static void M_DrawSetupMultiPlayerMenu(void) frame = 0; // Try to use standing frame sprframe = &sprdef->spriteframes[frame]; - patch = W_CachePatchNum(sprframe->lumppat[1], PU_CACHE); - if (sprframe->flip & 1) // Only for first sprite - flags |= V_FLIP; // This sprite is left/right flipped! + + //minenice's speen css, it's a piece of shit but hey + //patch = W_CachePatchNum(sprframe->lumppat[1], PU_CACHE); + speenframe = (I_GetTime()*cv_skinselectspin.value/TICRATE + 1)%8; + + //this is a very shitty solution for checking if a sprite needs flipping + //but it works + if ((sprframe->lumppat[speenframe] == sprframe->lumppat[8-speenframe]) && (speenframe > 4)) { + flags = V_FLIP; // This sprite is left/right flipped! + } + patch = W_CachePatchNum(sprframe->lumppat[speenframe], PU_CACHE); // draw box around guy V_DrawFill(mx + 43 - (charw/2), my+65, charw, 84, 239); @@ -10742,7 +10753,7 @@ static void M_SetupMultiPlayer(INT32 choice) { (void)choice; - multi_state = &states[mobjinfo[MT_PLAYER].seestate]; + multi_state = cv_skinselectspin.value == SKINSELECTSPIN_PAIN ? &states[S_KART_PAIN] : &states[mobjinfo[MT_PLAYER].seestate]; multi_tics = multi_state->tics*FRACUNIT; strcpy(setupm_name, cv_playername.string); @@ -10779,7 +10790,7 @@ static void M_SetupMultiPlayer2(INT32 choice) { (void)choice; - multi_state = &states[mobjinfo[MT_PLAYER].seestate]; + multi_state = cv_skinselectspin.value == SKINSELECTSPIN_PAIN ? &states[S_KART_PAIN] : &states[mobjinfo[MT_PLAYER].seestate]; multi_tics = multi_state->tics*FRACUNIT; strcpy (setupm_name, cv_playername2.string); @@ -10816,7 +10827,7 @@ static void M_SetupMultiPlayer3(INT32 choice) { (void)choice; - multi_state = &states[mobjinfo[MT_PLAYER].seestate]; + multi_state = cv_skinselectspin.value == SKINSELECTSPIN_PAIN ? &states[S_KART_PAIN] : &states[mobjinfo[MT_PLAYER].seestate]; multi_tics = multi_state->tics; strcpy(setupm_name, cv_playername3.string); @@ -10853,7 +10864,7 @@ static void M_SetupMultiPlayer4(INT32 choice) { (void)choice; - multi_state = &states[mobjinfo[MT_PLAYER].seestate]; + multi_state = cv_skinselectspin.value == SKINSELECTSPIN_PAIN ? &states[S_KART_PAIN] : &states[mobjinfo[MT_PLAYER].seestate]; multi_tics = multi_state->tics; strcpy(setupm_name, cv_playername4.string);