Skip to content

Commit

Permalink
add 'restartvid' and 'vidmode' console commands
Browse files Browse the repository at this point in the history
  • Loading branch information
jonof committed Jan 2, 2021
1 parent 774d0f2 commit c7c25aa
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 22 deletions.
2 changes: 1 addition & 1 deletion Makefile.deps
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ $(SRC)/console.$o: $(SRC)/console.c $(build_h) $(INC)/mytypes.h $(INC)/keys.h $(
$(SRC)/coolg.$o: $(SRC)/coolg.c $(build_h) $(INC)/keys.h $(names2_h) $(game_h) $(tags_h) $(INC)/ai.h $(INC)/sprite.h $(INC)/actor.h $(INC)/weapon.h $(INC)/track.h $(INC)/saveable.h
$(SRC)/coolie.$o: $(SRC)/coolie.c $(build_h) $(INC)/keys.h $(names2_h) $(panel_h) $(game_h) $(tags_h) $(INC)/ai.h $(INC)/sprite.h $(INC)/actor.h $(INC)/track.h $(INC)/weapon.h $(INC)/saveable.h
$(SRC)/copysect.$o: $(SRC)/copysect.c $(build_h) $(names2_h) $(game_h) $(tags_h) $(INC)/weapon.h $(INC)/sprite.h $(INC)/track.h
$(SRC)/demo.$o: $(SRC)/demo.c $(build_h) $(INC)/keys.h $(names2_h) $(panel_h) $(game_h) $(INC)/net.h $(INC)/mytypes.h $(MACTROOT)/control.h $(INC)/function.h $(INC)/demo.h $(INC)/player.h $(INC)/menus.h
$(SRC)/demo.$o: $(SRC)/demo.c $(build_h) $(EINC)/osd.h $(INC)/keys.h $(names2_h) $(panel_h) $(game_h) $(INC)/net.h $(INC)/mytypes.h $(MACTROOT)/control.h $(INC)/function.h $(INC)/demo.h $(INC)/player.h $(INC)/menus.h
$(SRC)/draw.$o: $(SRC)/draw.c $(build_h) $(INC)/keys.h $(names2_h) $(panel_h) $(game_h) $(INC)/quake.h $(INC)/vis.h $(INC)/jsector.h $(INC)/reserve.h $(INC)/mytypes.h $(MACTROOT)/control.h $(INC)/function.h $(INC)/net.h $(INC)/pal.h $(INC)/player.h $(INC)/jtags.h $(INC)/parent.h $(INC)/cache.h $(INC)/text.h $(INC)/menus.h $(INC)/interp.h $(INC)/sector.h
$(SRC)/eel.$o: $(SRC)/eel.c $(build_h) $(INC)/keys.h $(names2_h) $(game_h) $(tags_h) $(INC)/ai.h $(INC)/actor.h $(INC)/weapon.h $(INC)/track.h $(INC)/saveable.h
$(SRC)/game.$o: $(SRC)/game.c $(build_h) $(INC)/keys.h $(names2_h) $(panel_h) $(game_h) $(tags_h) $(INC)/sector.h $(INC)/sprite.h $(INC)/weapon.h $(INC)/player.h $(INC)/lists.h $(INC)/net.h $(INC)/pal.h $(AUDIOLIBROOT)/include/fx_man.h $(INC)/mytypes.h $(INC)/menus.h $(MACTROOT)/control.h $(INC)/function.h $(INC)/demo.h $(INC)/cache.h $(INC)/anim.h $(INC)/colormap.h $(INC)/break.h $(INC)/ninja.h $(INC)/light.h $(INC)/track.h $(INC)/jsector.h $(MACTROOT)/keyboard.h $(INC)/text.h $(AUDIOLIBROOT)/include/music.h $(INC)/saveable.h $(INC)/version.h $(INC)/grpscan.h
Expand Down
2 changes: 2 additions & 0 deletions src/demo.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
//#define QUIET
#include "build.h"
#include "cache1d.h"
#include "osd.h"

#include "keys.h"
#include "names2.h"
Expand Down Expand Up @@ -451,6 +452,7 @@ DemoPlayBack(VOID)

domovethings();

OSD_DispatchQueued();
MNU_CheckForMenus();

// fast forward and slow mo
Expand Down
25 changes: 20 additions & 5 deletions src/draw.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ BOOL RedrawCompass=FALSE;
BOOL ScreenDidCapture = FALSE;
extern int Follow_posx,Follow_posy;
short LastCompassAngle = -1;
BOOL RestartVideo;
VMODE NewVideoMode;

int ConnectCopySprite(SPRITEp tsp);
void PreDrawStackedWater(void );
Expand Down Expand Up @@ -1552,9 +1554,19 @@ int COVERsetgamemode(int mode, int xdim, int ydim, int bpp)
return((int)setgamemode(mode,xdim,ydim,bpp));
}

void VideoRestart(void)
{
resetvideomode();
if (COVERsetgamemode(NewVideoMode.fs, NewVideoMode.x, NewVideoMode.y, NewVideoMode.bpp))
buildputs("video restart failed\n");

SetupAspectRatio();
SetRedrawScreen(Player + myconnectindex);
}

#if 0
void CheatResChange(void)
{
/*
extern char permanentupdate;
int i;

Expand Down Expand Up @@ -1588,11 +1600,8 @@ void CheatResChange(void)

sprintf(ds,"%d x %d mode selected.", xdim, ydim);
PutStringInfo(Player + myconnectindex, ds);
*/
PutStringInfo(Player + myconnectindex, "JonoF: Not now");
}

#if 0
void ResChange(void)
{
extern char permanentupdate;
Expand Down Expand Up @@ -1703,13 +1712,19 @@ VOID DrawCheckKeys(PLAYERp pp)
KEY_PRESSED(KEYSC_F5) = 0;
ResChange();
}
*/
if (ResCheat)
{
ResCheat = FALSE;
CheatResChange(); // allow all modes when cheating
}
*/

if (RestartVideo)
{
RestartVideo = FALSE;
VideoRestart();
}

if (ConPanel) return;

Expand Down
61 changes: 61 additions & 0 deletions src/game.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,8 @@ VOID MenuLevel(VOID);
VOID StatScreen(PLAYERp mpp);
VOID InitRunLevel(VOID);
VOID RunLevel(VOID);
static int osdcmd_restartvid(const osdfuncparm_t *parm);
static int osdcmd_vidmode(const osdfuncparm_t *parm);
/////////////////////////////////////////////////////////////////////////////////////////////

static FILE *debug_fout = NULL;
Expand Down Expand Up @@ -3506,6 +3508,9 @@ int app_main(int argc, char const * const argv[])

buildsetlogfile("sw.log");

OSD_RegisterFunction("restartvid", "restartvid: reinitialise the video mode", osdcmd_restartvid);
OSD_RegisterFunction("vidmode", "vidmode [xdim ydim] [bpp] [fullscreen]: change the video mode", osdcmd_vidmode);

wm_setapptitle("JFShadowWarrior");
buildprintf("\nJFShadowWarrior\n"
"Based on Shadow Warrior by 3D Realms Entertainment.\n"
Expand Down Expand Up @@ -6011,6 +6016,62 @@ NextScreenPeek(void)
while (screenpeek != startpeek);
}

static int
osdcmd_restartvid(const osdfuncparm_t *parm)
{
extern BOOL RestartVideo;
extern VMODE NewVideoMode;

RestartVideo = TRUE;
NewVideoMode.x = xdim;
NewVideoMode.y = ydim;
NewVideoMode.bpp = bpp;
NewVideoMode.fs = fullscreen;

return OSDCMD_OK;
}

static int
osdcmd_vidmode(const osdfuncparm_t *parm)
{
extern BOOL RestartVideo;
extern VMODE NewVideoMode;

int newx = xdim, newy = ydim, newbpp = bpp, newfullscreen = fullscreen;

if (parm->numparms < 1 || parm->numparms > 4) return OSDCMD_SHOWHELP;

switch (parm->numparms)
{
case 1: // bpp switch
newbpp = Batol(parm->parms[0]);
break;
case 2: // res switch
newx = Batol(parm->parms[0]);
newy = Batol(parm->parms[1]);
break;
case 3: // res & bpp switch
case 4:
newx = Batol(parm->parms[0]);
newy = Batol(parm->parms[1]);
newbpp = Batol(parm->parms[2]);
if (parm->numparms == 4)
newfullscreen = (Batol(parm->parms[3]) != 0);
break;
}

if (checkvideomode(&newx, &newy, newbpp, newfullscreen, 0) >= 0)
{
RestartVideo = TRUE;
NewVideoMode.x = newx;
NewVideoMode.y = newy;
NewVideoMode.bpp = newbpp;
NewVideoMode.fs = newfullscreen;
}

return OSDCMD_OK;
}

#include "saveable.h"

static saveable_data saveable_build_data[] = {
Expand Down
32 changes: 17 additions & 15 deletions src/menus.c
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ char playerbuflen = 0; // Current length of the string in
// the buffer
char maxtextlen; // max length allowed for current

static struct { int xdim,ydim; } validresolutions[MAXVALIDMODES];
static VMODE validresolutions[MAXVALIDMODES];
static int numvalidresolutions = 0, validbpps[8], numvalidbpps = 0;

static void UpdateValidModes(int bpp, int fs)
Expand All @@ -152,8 +152,10 @@ static void UpdateValidModes(int bpp, int fs)

if (validmode[i].bpp != bpp) continue;

validresolutions[numvalidresolutions].xdim = validmode[i].xdim;
validresolutions[numvalidresolutions].ydim = validmode[i].ydim;
validresolutions[numvalidresolutions].x = validmode[i].xdim;
validresolutions[numvalidresolutions].y = validmode[i].ydim;
validresolutions[numvalidresolutions].bpp = validmode[i].bpp;
validresolutions[numvalidresolutions].fs = validmode[i].fs;
numvalidresolutions++;
}
}
Expand Down Expand Up @@ -2169,7 +2171,7 @@ MNU_InitMenus(void)
i = checkvideomode(&newx, &newy, bpp, fullscreen, 1);
if (i != 0x7fffffff && i >= 0)
for (i=0; i<numvalidresolutions; i++)
if (validresolutions[i].xdim == newx && validresolutions[i].ydim == newy)
if (validresolutions[i].x == newx && validresolutions[i].y == newy)
slidersettings[sldr_videores] = i;
}

Expand Down Expand Up @@ -3304,8 +3306,8 @@ MNU_ApplyVideoModeSettings(void)
int newx, newy, newbpp, newfs;

lastx = xdim; lasty = ydim; lastbpp = bpp; lastfs = fullscreen;
newx = validresolutions[ slidersettings[sldr_videores] ].xdim;
newy = validresolutions[ slidersettings[sldr_videores] ].ydim;
newx = validresolutions[ slidersettings[sldr_videores] ].x;
newy = validresolutions[ slidersettings[sldr_videores] ].y;
newbpp = validbpps[ slidersettings[sldr_videobpp] ];
newfs = buttonsettings[btn_videofs];

Expand Down Expand Up @@ -3514,8 +3516,8 @@ MNU_DoButton(MenuItem_p item, BOOL draw)

state = buttonsettings[btn_videofs];

lastx = validresolutions[ slidersettings[sldr_videores] ].xdim;
lasty = validresolutions[ slidersettings[sldr_videores] ].ydim;
lastx = validresolutions[ slidersettings[sldr_videores] ].x;
lasty = validresolutions[ slidersettings[sldr_videores] ].y;
lastbpp = validbpps[ slidersettings[sldr_videobpp] ];
UpdateValidModes(lastbpp, buttonsettings[btn_videofs]);

Expand All @@ -3536,8 +3538,8 @@ MNU_DoButton(MenuItem_p item, BOOL draw)
newoffset = 0;
for (i=0; i<numvalidresolutions; i++)
{
if (abs(lastx * lasty - validresolutions[i].xdim * validresolutions[i].ydim) <
abs(lastx * lasty - validresolutions[newoffset].xdim * validresolutions[newoffset].ydim))
if (abs(lastx * lasty - validresolutions[i].x * validresolutions[i].y) <
abs(lastx * lasty - validresolutions[newoffset].x * validresolutions[newoffset].y))
newoffset = i;
}
slidersettings[sldr_videores] = newoffset;
Expand Down Expand Up @@ -3909,7 +3911,7 @@ MNU_DoSlider(short dir, MenuItem_p item, BOOL draw)

slidersettings[sldr_videores] = offset;

sprintf(tmp_text, "%dx%d", validresolutions[offset].xdim, validresolutions[offset].ydim);
sprintf(tmp_text, "%dx%d", validresolutions[offset].x, validresolutions[offset].y);
MNU_DrawString(OPT_XSIDE, item->y+OPT_YINC, tmp_text, 1, 16);
} break;

Expand All @@ -3927,13 +3929,13 @@ MNU_DoSlider(short dir, MenuItem_p item, BOOL draw)
slidersettings[sldr_videobpp] = offset;

// find the nearest resolution to the one last selected
lastx = validresolutions[ slidersettings[sldr_videores] ].xdim;
lasty = validresolutions[ slidersettings[sldr_videores] ].ydim;
lastx = validresolutions[ slidersettings[sldr_videores] ].x;
lasty = validresolutions[ slidersettings[sldr_videores] ].y;
UpdateValidModes(validbpps[offset], buttonsettings[btn_videofs]);
newoffset = 0;
for (i=0; i<numvalidresolutions; i++) {
if (abs(lastx * lasty - validresolutions[i].xdim * validresolutions[i].ydim) <
abs(lastx * lasty - validresolutions[newoffset].xdim * validresolutions[newoffset].ydim))
if (abs(lastx * lasty - validresolutions[i].x * validresolutions[i].y) <
abs(lastx * lasty - validresolutions[newoffset].x * validresolutions[newoffset].y))
newoffset = i;
}
slidersettings[sldr_videores] = newoffset;
Expand Down
2 changes: 1 addition & 1 deletion src/menus.h
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ BOOL MNU_ApplyVideoModeSettings(void);

typedef struct
{
int x,y;
int x,y,bpp,fs;
}VMODE;

#endif

0 comments on commit c7c25aa

Please sign in to comment.