diff --git a/src/d_clisrv.c b/src/d_clisrv.c index c5cb0c70..96452c24 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -2956,6 +2956,7 @@ void SV_ResetServer(void) playeringame[i] = false; playernode[i] = UINT8_MAX; sprintf(player_names[i], "Player %d", i + 1); + adminplayers[i] = -1; // Populate the entire adminplayers array with -1. } mynode = 0; @@ -3223,10 +3224,6 @@ boolean Playing(void) boolean SV_SpawnServer(void) { - INT32 i; - for (i = 0; i < MAXPLAYERS; i++) - adminplayers[i] = -1; // Populate the entire adminplayers array with -1. - if (demoplayback) G_StopDemo(); // reset engine parameter if (metalplayback) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 552ebdf9..777c4764 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -320,12 +320,13 @@ consvar_t cv_feather = {"feathers", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NU consvar_t cv_karthud = {"karthud", "Default", CV_SAVE|CV_CALL, karthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartcheck = {"kartcheck", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t kartstarsfx_cons_t[] = {{0, "Music"}, {1, "SMK"}, {0, NULL}}; -consvar_t cv_kartstarsfx = {"kartstarsfx", "SMK", CV_SAVE, kartstarsfx_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // change default to "SMK"? +consvar_t cv_kartstarsfx = {"kartstarsfx", "SMK", CV_SAVE, kartstarsfx_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartcc = {"kartcc", "100cc", CV_NETVAR, kartcc_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {12, "MAX"}, {0, NULL}}; consvar_t cv_kartballoons = {"kartballoons", "3", CV_NETVAR, kartballoons_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartcomeback = {"kartcomeback", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_kartmirror = {"kartmirror", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t speedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}}; consvar_t cv_speedometer = {"speedometer", "Kilometers", CV_SAVE, speedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display diff --git a/src/d_netcmd.h b/src/d_netcmd.h index d5287ddf..ebda15d4 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -112,6 +112,7 @@ extern consvar_t cv_kartcc; extern consvar_t cv_kartballoons; extern consvar_t cv_kartfrantic; extern consvar_t cv_kartcomeback; +extern consvar_t cv_kartmirror; extern consvar_t cv_speedometer; extern consvar_t cv_collideminimum; diff --git a/src/doomtype.h b/src/doomtype.h index a711b466..3cd7b7da 100644 --- a/src/doomtype.h +++ b/src/doomtype.h @@ -259,7 +259,8 @@ typedef enum postimg_water, postimg_motion, postimg_flip, - postimg_heat + postimg_heat, + postimg_mirror } postimg_t; typedef UINT32 lumpnum_t; // 16 : 16 unsigned long (wad num: lump num) diff --git a/src/g_game.c b/src/g_game.c index 6f3bf3bb..72c3bf1b 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -981,6 +981,14 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics) gamepadjoystickmove = cv_usejoystick.value && Joystick.bGamepadStyle; axis = JoyAxis(AXISTURN); + + if (cv_kartmirror.value) + { + turnright = PLAYER1INPUTDOWN(gc_turnleft); + turnleft = PLAYER1INPUTDOWN(gc_turnright); + axis = -axis; + } + if (gamepadjoystickmove && axis != 0) { turnright = turnright || (axis > 0); @@ -1253,8 +1261,13 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics) cmd->forwardmove = (SINT8)(cmd->forwardmove + forward); cmd->sidemove = (SINT8)(cmd->sidemove + side); + if (cv_kartmirror.value) + cmd->sidemove = -cmd->sidemove; + //{ SRB2kart - Drift support axis = JoyAxis(AXISTURN); + if (cv_kartmirror.value) + axis = -axis; if (cmd->angleturn > 0) // Drifting to the left cmd->buttons |= BT_DRIFTLEFT; @@ -1329,6 +1342,14 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics) gamepadjoystickmove = cv_usejoystick2.value && Joystick2.bGamepadStyle; axis = Joy2Axis(AXISTURN); + + if (cv_kartmirror.value) + { + turnright = PLAYER2INPUTDOWN(gc_turnleft); + turnleft = PLAYER2INPUTDOWN(gc_turnright); + axis = -axis; + } + if (gamepadjoystickmove && axis != 0) { turnright = turnright || (axis > 0); @@ -1585,8 +1606,13 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics) cmd->forwardmove = (SINT8)(cmd->forwardmove + forward); cmd->sidemove = (SINT8)(cmd->sidemove + side); + if (cv_kartmirror.value) + cmd->sidemove = -cmd->sidemove; + //{ SRB2kart - Drift support axis = Joy2Axis(AXISTURN); + if (cv_kartmirror.value) + axis = -axis; if (cmd->angleturn > 0) // Drifting to the left cmd->buttons |= BT_DRIFTLEFT; diff --git a/src/k_kart.c b/src/k_kart.c index 1efe2814..c9b4e056 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -308,7 +308,8 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartcc); CV_RegisterVar(&cv_kartballoons); CV_RegisterVar(&cv_kartfrantic); - CV_RegisterVar(&cv_kartcomeback); + CV_RegisterVar(&cv_kartcomeback); + CV_RegisterVar(&cv_kartmirror); CV_RegisterVar(&cv_speedometer); CV_RegisterVar(&cv_collideminimum); CV_RegisterVar(&cv_collidesoundnum); diff --git a/src/p_mobj.c b/src/p_mobj.c index e2565a71..2f23c7c8 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3581,7 +3581,9 @@ boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled || (thiscam == &camera2 && players[secondarydisplayplayer].mo && (players[secondarydisplayplayer].mo->flags2 & MF2_TWOD))) itsatwodlevel = true; - if (player->pflags & PF_FLIPCAM && !(player->pflags & PF_NIGHTSMODE) && player->mo->eflags & MFE_VERTICALFLIP) + if (cv_kartmirror.value) + postimg = postimg_mirror; + else if (player->pflags & PF_FLIPCAM && !(player->pflags & PF_NIGHTSMODE) && player->mo->eflags & MFE_VERTICALFLIP) postimg = postimg_flip; else if (player->awayviewtics) { diff --git a/src/p_user.c b/src/p_user.c index bd0b8f49..72d74a3f 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -8992,6 +8992,9 @@ static void P_CalcPostImg(player_t *player) *param = 5; } #endif + + if (cv_kartmirror.value) // srb2kart + *type = postimg_mirror; } /*void P_DoPityCheck(player_t *player) diff --git a/src/v_video.c b/src/v_video.c index bda2f5e8..157edcbf 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -2121,6 +2121,21 @@ Unoptimized version heatindex[view]++; heatindex[view] %= vid.height; + VID_BlitLinearScreen(tmpscr+vid.width*vid.bpp*yoffset, screens[0]+vid.width*vid.bpp*yoffset, + vid.width*vid.bpp, height, vid.width*vid.bpp, vid.width); + } + else if (type == postimg_mirror) // Flip the screen on the x axis + { + UINT8 *tmpscr = screens[4]; + UINT8 *srcscr = screens[0]; + INT32 y, x, x2; + + for (y = yoffset; y < yoffset+height; y++) + { + for (x = 0, x2 = (vid.width*vid.bpp)-1; x < (vid.width*vid.bpp); x++, x2--) + tmpscr[y*vid.width + x2] = srcscr[y*vid.width + x]; + } + VID_BlitLinearScreen(tmpscr+vid.width*vid.bpp*yoffset, screens[0]+vid.width*vid.bpp*yoffset, vid.width*vid.bpp, height, vid.width*vid.bpp, vid.width); }