Mirror Mode

- Added kartmirror cvar, flips the screen & player controls. The
post-processing effect is currently Software only; will need an OpenGL
implementation but I don't know enough to make that happen
- Moved adminplayer = -1 setting to SV_ResetServer instead of
SV_StartServer
This commit is contained in:
TehRealSalt 2017-12-12 00:07:14 -05:00
parent f5650eba09
commit ffbf6e8752
9 changed files with 55 additions and 8 deletions

View File

@ -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)

View File

@ -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

View File

@ -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;

View File

@ -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)

View File

@ -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;

View File

@ -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);

View File

@ -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)
{

View File

@ -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)

View File

@ -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);
}