review code changes, add or adapt comments where appropriate

Fixes #41.
This commit is contained in:
Fabian Greffrath 2020-01-22 12:42:33 +01:00
parent 92d8eeb7a8
commit 81c920c96c
27 changed files with 101 additions and 58 deletions

View File

@ -1830,7 +1830,7 @@ void deh_procPointer(DEHFILE *fpin, FILE* fpout, char *line) // done
states[indexnum].action = deh_codeptr[value]; states[indexnum].action = deh_codeptr[value];
if (fpout) fprintf(fpout," - applied %p from codeptr[%ld] to states[%d]\n",deh_codeptr[value],value,indexnum); if (fpout) fprintf(fpout," - applied %p from codeptr[%ld] to states[%d]\n",deh_codeptr[value],value,indexnum);
// Write BEX-oriented line to match: // Write BEX-oriented line to match:
for (i=0;i<arrlen(deh_bexptrs);i++) for (i=0;i<arrlen(deh_bexptrs);i++) // [FG] array size!
{ {
if (deh_bexptrs[i].cptr == deh_codeptr[value]) if (deh_bexptrs[i].cptr == deh_codeptr[value])
{ {
@ -2575,7 +2575,7 @@ boolean deh_procStringSub(char *key, char *lookfor, char *newstring, FILE *fpout
if (!key) if (!key)
if (fpout) fprintf(fpout, if (fpout) fprintf(fpout,
"Assigned '%.12s%s' to'%.12s%s' at key %s\n", "Assigned '%.12s%s' to'%.12s%s' at key %s\n",
lookfor ? : "", (lookfor && strlen(lookfor) > 12) ? "..." : "", lookfor ? lookfor : "", (lookfor && strlen(lookfor) > 12) ? "..." : "", // [FG] NULL dereference
newstring, (strlen(newstring) > 12) ? "..." :"", newstring, (strlen(newstring) > 12) ? "..." :"",
deh_strlookup[i].lookup); deh_strlookup[i].lookup);

View File

@ -1103,6 +1103,7 @@ void FindResponseFile (void)
size = ftell(handle); size = ftell(handle);
fseek(handle,0,SEEK_SET); fseek(handle,0,SEEK_SET);
file = malloc (size); file = malloc (size);
// [FG] check return value
if (!fread(file,size,1,handle)) if (!fread(file,size,1,handle))
{ {
fclose(handle); fclose(handle);
@ -1809,6 +1810,7 @@ void D_DoomMain(void)
idmusnum = -1; //jff 3/17/98 insure idmus number is blank idmusnum = -1; //jff 3/17/98 insure idmus number is blank
// check for a driver that wants intermission stats // check for a driver that wants intermission stats
// [FG] replace with -statdump implementation from Chocolate Doom
if ((p = M_CheckParm ("-statdump")) && p<myargc-1) if ((p = M_CheckParm ("-statdump")) && p<myargc-1)
{ {
atexit(StatDump); atexit(StatDump);

View File

@ -40,7 +40,7 @@ void D_AddFile(char *file);
char *D_DoomExeDir(void); // killough 2/16/98: path to executable's dir char *D_DoomExeDir(void); // killough 2/16/98: path to executable's dir
char *D_DoomExeName(void); // killough 10/98: executable's name char *D_DoomExeName(void); // killough 10/98: executable's name
extern char basesavegame[]; // killough 2/16/98: savegame path extern char basesavegame[]; // killough 2/16/98: savegame path
char *D_DoomPrefDir(void); char *D_DoomPrefDir(void); // [FG] default configuration dir
//jff 1/24/98 make command line copies of play modes available //jff 1/24/98 make command line copies of play modes available
extern boolean clnomonsters; // checkparm of -nomonsters extern boolean clnomonsters; // checkparm of -nomonsters

View File

@ -459,7 +459,7 @@ void CheckAbort (void)
I_StartTic (); I_StartTic ();
I_StartTic (); I_StartTic ();
for ( ; eventtail != eventhead ; eventtail = (eventtail+1)&(MAXEVENTS-1) ) for ( ; eventtail != eventhead ; eventtail = (eventtail+1)&(MAXEVENTS-1) ) // [FG] fix increment
{ {
ev = &events[eventtail]; ev = &events[eventtail];
if (ev->type == ev_keydown && ev->data1 == key_escape) // phares if (ev->type == ev_keydown && ev->data1 == key_escape) // phares
@ -716,7 +716,7 @@ void TryRunTics (void)
// the key player does not adapt // the key player does not adapt
} }
else else
if (i < MAXPLAYERS) if (i < MAXPLAYERS) // [FG] avoid overflow
{ {
if (nettics[0] <= nettics[nodeforplayer[i]]) if (nettics[0] <= nettics[nodeforplayer[i]])
{ {
@ -752,6 +752,7 @@ void TryRunTics (void)
M_Ticker (); M_Ticker ();
return; return;
} }
// [FG] let the CPU sleep for 1 ms if there is no tic to proceed // [FG] let the CPU sleep for 1 ms if there is no tic to proceed
I_Sleep(1); I_Sleep(1);
} }

View File

@ -75,6 +75,7 @@ typedef struct {
// A LineDef, as used for editing, and as input to the BSP builder. // A LineDef, as used for editing, and as input to the BSP builder.
typedef struct { typedef struct {
// [FG] extended nodes
unsigned short v1; unsigned short v1;
unsigned short v2; unsigned short v2;
unsigned short flags; unsigned short flags;
@ -140,6 +141,7 @@ typedef struct {
// SubSector, as generated by BSP. // SubSector, as generated by BSP.
typedef struct { typedef struct {
// [FG] extended nodes
unsigned short numsegs; unsigned short numsegs;
unsigned short firstseg; // Index of first one; segs are stored sequentially. unsigned short firstseg; // Index of first one; segs are stored sequentially.
} mapsubsector_t; } mapsubsector_t;
@ -147,6 +149,7 @@ typedef struct {
// LineSeg, generated by splitting LineDefs // LineSeg, generated by splitting LineDefs
// using partition lines selected by BSP builder. // using partition lines selected by BSP builder.
typedef struct { typedef struct {
// [FG] extended nodes
unsigned short v1; unsigned short v1;
unsigned short v2; unsigned short v2;
short angle; short angle;

View File

@ -58,6 +58,8 @@ typedef int64_t Long64;
#define D_MAXINT INT_MAX #define D_MAXINT INT_MAX
#define D_MININT INT_MIN #define D_MININT INT_MIN
// [FG] common definitions from Chocolate Doom
#ifdef _WIN32 #ifdef _WIN32
#define DIR_SEPARATOR '\\' #define DIR_SEPARATOR '\\'

View File

@ -242,12 +242,10 @@ int defaultskill; //note 1-based
// killough 2/8/98: make corpse queue variable in size // killough 2/8/98: make corpse queue variable in size
int bodyqueslot, bodyquesize, default_bodyquesize; // killough 2/8/98, 10/98 int bodyqueslot, bodyquesize, default_bodyquesize; // killough 2/8/98, 10/98
// Set to -1 or +1 to switch to the previous or next weapon. // [FG] prev/next weapon handling from Chocolate Doom
static int next_weapon = 0; static int next_weapon = 0;
// Used for prev/next weapon keys.
static const struct static const struct
{ {
weapontype_t weapon; weapontype_t weapon;
@ -696,6 +694,7 @@ static void G_DoLoadLevel(void)
joyxmove = joyymove = 0; joyxmove = joyymove = 0;
mousex = mousey = 0; mousex = mousey = 0;
sendpause = sendsave = paused = false; sendpause = sendsave = paused = false;
// [FG] array size!
memset (mousearray, 0, sizeof(mousearray)); memset (mousearray, 0, sizeof(mousearray));
memset (joyarray, 0, sizeof(joyarray)); memset (joyarray, 0, sizeof(joyarray));
@ -718,10 +717,7 @@ static void G_DoLoadLevel(void)
} }
} }
// // [FG] mouse and joystick button handling adapted from Chocolate Doom
// G_Responder
// Get info needed to make ticcmd_ts for the players.
//
static void SetJoyButtons(unsigned int buttons_mask) static void SetJoyButtons(unsigned int buttons_mask)
{ {
@ -775,6 +771,11 @@ static void SetMouseButtons(unsigned int buttons_mask)
} }
} }
//
// G_Responder
// Get info needed to make ticcmd_ts for the players.
//
boolean G_Responder(event_t* ev) boolean G_Responder(event_t* ev)
{ {
// allow spy mode changes even during the demo // allow spy mode changes even during the demo
@ -845,8 +846,7 @@ boolean G_Responder(event_t* ev)
return true; // finale ate the event return true; // finale ate the event
} }
// If the next/previous weapon keys are pressed, set the next_weapon // [FG] prev/next weapon handling from Chocolate Doom
// variable to change weapons when the next ticcmd is generated.
if (ev->type == ev_keydown && ev->data1 == key_prevweapon) if (ev->type == ev_keydown && ev->data1 == key_prevweapon)
{ {
@ -873,8 +873,8 @@ boolean G_Responder(event_t* ev)
return false; // always let key up events filter down return false; // always let key up events filter down
case ev_mouse: case ev_mouse:
// [FG] mouse button and movement handling adapted from Chocolate Doom
SetMouseButtons(ev->data1); SetMouseButtons(ev->data1);
// [FG] mouse movement handling adapted from Chocolate Doom
if (mouseSensitivity_horiz) if (mouseSensitivity_horiz)
mousex = ev->data2*(mouseSensitivity_horiz+5)/10; mousex = ev->data2*(mouseSensitivity_horiz+5)/10;
if (mouseSensitivity_vert) if (mouseSensitivity_vert)
@ -882,6 +882,7 @@ boolean G_Responder(event_t* ev)
return true; // eat events return true; // eat events
case ev_joystick: case ev_joystick:
// [FG] joystick button and axis handling adapted from Chocolate Doom
SetJoyButtons(ev->data1); SetJoyButtons(ev->data1);
joyxmove = ev->data2; joyxmove = ev->data2;
joyymove = ev->data3; joyymove = ev->data3;
@ -1087,6 +1088,7 @@ static void G_DoCompleted(void)
viewactive = false; viewactive = false;
automapactive = false; automapactive = false;
// [FG] -statdump implementation from Chocolate Doom
if (gamemode == commercial || gamemap != 8) if (gamemode == commercial || gamemap != 8)
{ {
StatCopy(&wminfo); StatCopy(&wminfo);
@ -1440,8 +1442,9 @@ static void G_DoSaveGame(void)
save_p = G_WriteOptions(save_p); // killough 3/1/98: save game options save_p = G_WriteOptions(save_p); // killough 3/1/98: save game options
// [FG] fix copy size and pointer progression
memcpy(save_p, &leveltime, sizeof leveltime); //killough 11/98: save entire word memcpy(save_p, &leveltime, sizeof leveltime); //killough 11/98: save entire word
save_p += sizeof leveltime; // [FG] fix copy size and pointer progression save_p += sizeof leveltime;
// killough 11/98: save revenant tracer state // killough 11/98: save revenant tracer state
*save_p++ = (gametic-basetic) & 255; *save_p++ = (gametic-basetic) & 255;
@ -1546,8 +1549,9 @@ static void G_DoLoadGame(void)
// get the times // get the times
// killough 11/98: save entire word // killough 11/98: save entire word
// [FG] fix copy size and pointer progression
memcpy(&leveltime, save_p, sizeof leveltime); memcpy(&leveltime, save_p, sizeof leveltime);
save_p += sizeof leveltime; // [FG] fix copy size and pointer progression save_p += sizeof leveltime;
// killough 11/98: load revenant tracer state // killough 11/98: load revenant tracer state
basetic = gametic - (int) *save_p++; basetic = gametic - (int) *save_p++;

View File

@ -31,7 +31,10 @@
#include <stdarg.h> #include <stdarg.h>
#endif #endif
#ifndef _WIN32
#include <unistd.h> // [FG] isatty() #include <unistd.h> // [FG] isatty()
#endif
#include "SDL.h" #include "SDL.h"
#include "z_zone.h" #include "z_zone.h"
@ -56,6 +59,8 @@ void I_WaitVBL(int count)
SDL_Delay((count*500)/TICRATE); SDL_Delay((count*500)/TICRATE);
} }
// [FG] let the CPU sleep if there is no tic to proceed
void I_Sleep(int ms) void I_Sleep(int ms)
{ {
SDL_Delay(ms); SDL_Delay(ms);
@ -282,9 +287,8 @@ void I_Quit (void)
#endif #endif
} }
// // [FG] returns true if stdout is a real console, false if it is a file
// I_Error
//
static boolean I_ConsoleStdout(void) static boolean I_ConsoleStdout(void)
{ {
#ifdef _WIN32 #ifdef _WIN32
@ -295,6 +299,10 @@ static boolean I_ConsoleStdout(void)
#endif #endif
} }
//
// I_Error
//
void I_Error(const char *error, ...) // killough 3/20/98: add const void I_Error(const char *error, ...) // killough 3/20/98: add const
{ {
boolean exit_gui_popup; boolean exit_gui_popup;

View File

@ -43,7 +43,7 @@
#include "i_video.h" #include "i_video.h"
#include "i_savepng.h" // [FG] SavePNG() #include "i_savepng.h" // [FG] SavePNG()
// Set the application icon // [FG] set the application icon
#include "icon.c" #include "icon.c"
@ -75,7 +75,7 @@ int joystickSens_y;
extern SDL_Joystick *sdlJoystick; extern SDL_Joystick *sdlJoystick;
// Get a bitmask of all currently-pressed buttons // [FG] adapt joystick button and axis handling from Chocolate Doom 3.0
static int GetButtonsState(void) static int GetButtonsState(void)
{ {
@ -95,8 +95,6 @@ static int GetButtonsState(void)
return result; return result;
} }
// Read the state of an axis
static int GetAxisState(int axis, int sens) static int GetAxisState(int axis, int sens)
{ {
int result; int result;
@ -300,7 +298,8 @@ int I_DoomCode2ScanCode (int a)
return a; return a;
} }
// Bit mask of mouse button state. // [FG] mouse button and movement handling from Chocolate Doom 3.0
static unsigned int mouse_button_state = 0; static unsigned int mouse_button_state = 0;
static void UpdateMouseButtonState(unsigned int button, boolean on) static void UpdateMouseButtonState(unsigned int button, boolean on)
@ -408,6 +407,8 @@ static void I_HandleMouseEvent(SDL_Event *sdlevent)
} }
} }
// [FG] keyboard event handling from Chocolate Doom 3.0
static void I_HandleKeyboardEvent(SDL_Event *sdlevent) static void I_HandleKeyboardEvent(SDL_Event *sdlevent)
{ {
// XXX: passing pointers to event for access after this function // XXX: passing pointers to event for access after this function
@ -421,10 +422,7 @@ static void I_HandleKeyboardEvent(SDL_Event *sdlevent)
event.data1 = TranslateKey(&sdlevent->key.keysym); event.data1 = TranslateKey(&sdlevent->key.keysym);
event.data2 = 0; event.data2 = 0;
event.data3 = 0; event.data3 = 0;
/*
event.data2 = GetLocalizedKey(&sdlevent->key.keysym);
event.data3 = GetTypedChar(&sdlevent->key.keysym);
*/
if (event.data1 != 0) if (event.data1 != 0)
{ {
D_PostEvent(&event); D_PostEvent(&event);

View File

@ -51,7 +51,7 @@ void I_FinishUpdate (void);
// Wait for vertical retrace or pause a bit. // Wait for vertical retrace or pause a bit.
void I_WaitVBL(int count); void I_WaitVBL(int count);
void I_Sleep(int ms); void I_Sleep(int ms); // [FG] let the CPU sleep
void I_ReadScreen (byte* scr); void I_ReadScreen (byte* scr);
@ -59,14 +59,14 @@ int I_DoomCode2ScanCode(int); // killough
int I_ScanCode2DoomCode(int); // killough int I_ScanCode2DoomCode(int); // killough
void I_ResetScreen(void); // killough 10/98 void I_ResetScreen(void); // killough 10/98
void I_ToggleToggleFullScreen(void); void I_ToggleToggleFullScreen(void); // [FG] fullscreen mode menu toggle
extern int use_vsync; // killough 2/8/98: controls whether vsync is called extern int use_vsync; // killough 2/8/98: controls whether vsync is called
extern int page_flip; // killough 8/15/98: enables page flipping (320x200) extern int page_flip; // killough 8/15/98: enables page flipping (320x200)
extern int disk_icon; // killough 10/98 extern int disk_icon; // killough 10/98
extern int hires; // killough 11/98 extern int hires; // killough 11/98
boolean I_WritePNGfile(char *filename); boolean I_WritePNGfile(char *filename); // [FG] screenshots in PNG format
#endif #endif

View File

@ -715,7 +715,7 @@ boolean M_FindCheats(int key)
for (i=0;cheat[i].cheat;i++) for (i=0;cheat[i].cheat;i++)
{ {
ULong64 c=0, m=0; ULong64 c=0, m=0;
const char *p; const char *p; // [FG] char!
for (p=cheat[i].cheat; *p; p++) for (p=cheat[i].cheat; *p; p++)
{ {
unsigned key = tolower(*p)-'a'; // convert to 0-31 unsigned key = tolower(*p)-'a'; // convert to 0-31

View File

@ -34,7 +34,7 @@
// killough 4/16/98: Cheat table structure // killough 4/16/98: Cheat table structure
extern struct cheat_s { extern struct cheat_s {
const char *cheat; const char *cheat; // [FG] char!
const char *const deh_cheat; const char *const deh_cheat;
enum { enum {
always = 0, always = 0,

View File

@ -57,6 +57,7 @@ inline static fixed_t FixedMul(fixed_t a, fixed_t b)
inline static fixed_t FixedDiv(fixed_t a, fixed_t b) inline static fixed_t FixedDiv(fixed_t a, fixed_t b)
{ {
// [FG] avoid 31-bit shift (from Chocolate Doom)
return (abs(a)>>14) >= abs(b) ? ((a^b) < 0 ? D_MININT : D_MAXINT) : return (abs(a)>>14) >= abs(b) ? ((a^b) < 0 ? D_MININT : D_MAXINT) :
(fixed_t)(((Long64) a << FRACBITS) / b); (fixed_t)(((Long64) a << FRACBITS) / b);
} }

View File

@ -3729,7 +3729,7 @@ void M_ExtHelp(int choice)
void M_DrawExtHelp(void) void M_DrawExtHelp(void)
{ {
char namebfr[] = "HELPnn"; char namebfr[] = "HELPnn"; // [FG] char array!
inhelpscreens = true; // killough 5/1/98 inhelpscreens = true; // killough 5/1/98
namebfr[4] = extended_help_index/10 + 0x30; namebfr[4] = extended_help_index/10 + 0x30;
@ -4199,7 +4199,7 @@ boolean M_Responder (event_t* ev)
joywait = I_GetTime() + 5; joywait = I_GetTime() + 5;
} }
// [FG] Menu joystick button // [FG] main menu joystick button
if (joybmainmenu > -1 && (ev->data1 & (1 << joybmainmenu))) if (joybmainmenu > -1 && (ev->data1 & (1 << joybmainmenu)))
{ {
ch = menuactive ? key_menu_escape : key_escape; ch = menuactive ? key_menu_escape : key_escape;
@ -5632,12 +5632,14 @@ void M_Init(void)
M_InitExtendedHelp(); // init extended help screens // phares 3/30/98 M_InitExtendedHelp(); // init extended help screens // phares 3/30/98
// [FG] support the BFG Edition IWADs // [FG] support the BFG Edition IWADs
if (bfgedition) if (bfgedition)
{ {
strcpy(OptionsMenu[scrnsize].name, "M_DISP"); strcpy(OptionsMenu[scrnsize].name, "M_DISP");
} }
// [FG] save screenshots in PNG format // [FG] save screenshots in PNG format
if (SavePNG) if (SavePNG)
{ {
const char *bmp_text, *png_text; const char *bmp_text, *png_text;

View File

@ -91,7 +91,7 @@ extern int forceFlipPan;
extern int grabmouse; extern int grabmouse;
extern int cfg_scalefactor; // haleyjd 05/11/09 extern int cfg_scalefactor; // haleyjd 05/11/09
extern int cfg_aspectratio; // haleyjd 05/11/09 extern int cfg_aspectratio; // haleyjd 05/11/09
extern int fullscreen; extern int fullscreen; // [FG] save fullscren mode
extern char *chat_macros[], *wad_files[], *deh_files[]; // killough 10/98 extern char *chat_macros[], *wad_files[], *deh_files[]; // killough 10/98
@ -663,7 +663,8 @@ default_t defaults[] = {
"key to select from menu or review past messages" "key to select from menu or review past messages"
}, },
{ // [FG] clear key bindings with the DEL key // [FG] clear key bindings with the DEL key
{
"key_menu_clear", "key_menu_clear",
(config_t *) &key_menu_clear, NULL, (config_t *) &key_menu_clear, NULL,
{KEYD_DEL}, {0,255}, number, ss_keys, wad_no, {KEYD_DEL}, {0,255}, number, ss_keys, wad_no,
@ -964,7 +965,8 @@ default_t defaults[] = {
"key to toggle between two most preferred weapons with ammo" "key to toggle between two most preferred weapons with ammo"
}, },
{ // [FG] prev/next weapon keys and buttons // [FG] prev/next weapon keys and buttons
{
"key_prevweapon", "key_prevweapon",
(config_t *) &key_prevweapon, NULL, (config_t *) &key_prevweapon, NULL,
{0}, {0,255}, number, ss_keys, wad_no, {0}, {0,255}, number, ss_keys, wad_no,
@ -1090,7 +1092,8 @@ default_t defaults[] = {
"mouse button number to use for forward motion (-1 = disable)" "mouse button number to use for forward motion (-1 = disable)"
}, //jff 3/8/98 end of lower range change for -1 allowed in mouse binding }, //jff 3/8/98 end of lower range change for -1 allowed in mouse binding
{ // [FG] prev/next weapon keys and buttons // [FG] prev/next weapon keys and buttons
{
"mouseb_prevweapon", "mouseb_prevweapon",
(config_t *) &mousebprevweapon, NULL, (config_t *) &mousebprevweapon, NULL,
{4}, {-1,MAX_MB-1}, number, ss_keys, wad_no, {4}, {-1,MAX_MB-1}, number, ss_keys, wad_no,
@ -1139,7 +1142,8 @@ default_t defaults[] = {
"joystick button number to use for use/open" "joystick button number to use for use/open"
}, },
{ // [FG] strafe left/right joystick buttons // [FG] strafe left/right joystick buttons
{
"joyb_strafeleft", "joyb_strafeleft",
(config_t *) &joybstrafeleft, NULL, (config_t *) &joybstrafeleft, NULL,
{4}, {-1,MAX_JSB-1}, 0, ss_keys, wad_no, {4}, {-1,MAX_JSB-1}, 0, ss_keys, wad_no,
@ -1153,7 +1157,8 @@ default_t defaults[] = {
"joystick button number to strafe right (sideways right)" "joystick button number to strafe right (sideways right)"
}, },
{ // [FG] prev/next weapon joystick buttons // [FG] prev/next weapon joystick buttons
{
"joyb_prevweapon", "joyb_prevweapon",
(config_t *) &joybprevweapon, NULL, (config_t *) &joybprevweapon, NULL,
{2}, {-1,MAX_JSB-1}, 0, ss_keys, wad_no, {2}, {-1,MAX_JSB-1}, 0, ss_keys, wad_no,
@ -1167,14 +1172,16 @@ default_t defaults[] = {
"joystick button number to cycle to the next weapon" "joystick button number to cycle to the next weapon"
}, },
{ // [FG] automap joystick button // [FG] automap joystick button
{
"joyb_automap", "joyb_automap",
(config_t *) &joybautomap, NULL, (config_t *) &joybautomap, NULL,
{-1}, {-1,MAX_JSB-1}, 0, ss_keys, wad_no, {-1}, {-1,MAX_JSB-1}, 0, ss_keys, wad_no,
"joystick button number to open the automap" "joystick button number to open the automap"
}, },
{ // [FG] main menu joystick button // [FG] main menu joystick button
{
"joyb_mainmenu", "joyb_mainmenu",
(config_t *) &joybmainmenu, NULL, (config_t *) &joybmainmenu, NULL,
{-1}, {-1,MAX_JSB-1}, 0, ss_keys, wad_no, {-1}, {-1,MAX_JSB-1}, 0, ss_keys, wad_no,
@ -1751,6 +1758,7 @@ default_t defaults[] = {
"1 to perform aspect ratio correction" "1 to perform aspect ratio correction"
}, },
// [FG] save fullscren mode
{ {
"fullscreen", "fullscreen",
(config_t *) &fullscreen, NULL, (config_t *) &fullscreen, NULL,
@ -2439,6 +2447,7 @@ boolean WriteBMPfile(char *filename, byte *data, int width,
} }
// [FG] save screenshots in PNG format // [FG] save screenshots in PNG format
boolean WritePNGfile(char *filename, byte *data, int width, boolean WritePNGfile(char *filename, byte *data, int width,
int height, byte *palette) int height, byte *palette)
{ {
@ -2467,7 +2476,7 @@ void M_ScreenShot (void)
do do
sprintf(lbmname, //jff 3/30/98 pcx or bmp? sprintf(lbmname, //jff 3/30/98 pcx or bmp?
screenshot_pcx ? "doom%02d.pcx" : (SavePNG ? "doom%02d.png" : "doom%02d.bmp"), shot++); screenshot_pcx ? "doom%02d.pcx" : (SavePNG ? "doom%02d.png" : "doom%02d.bmp"), shot++); // [FG] PNG
while (!access(lbmname,0) && --tries); while (!access(lbmname,0) && --tries);
if (tries) if (tries)
@ -2485,7 +2494,7 @@ void M_ScreenShot (void)
// killough 10/98: detect failure and remove file if error // killough 10/98: detect failure and remove file if error
// killough 11/98: add hires support // killough 11/98: add hires support
if (!(success = (screenshot_pcx ? WritePCXfile : (SavePNG ? WritePNGfile : WriteBMPfile)) if (!(success = (screenshot_pcx ? WritePCXfile : (SavePNG ? WritePNGfile : WriteBMPfile)) // [FG] PNG
(lbmname,linear, SCREENWIDTH<<hires, SCREENHEIGHT<<hires,pal))) (lbmname,linear, SCREENWIDTH<<hires, SCREENHEIGHT<<hires,pal)))
{ {
int t = errno; int t = errno;

View File

@ -14,7 +14,7 @@
// GNU General Public License for more details. // GNU General Public License for more details.
// //
// DESCRIPTION: // DESCRIPTION:
// Miscellaneous helper functions from Chocolate Doom. // [FG] miscellaneous helper functions from Chocolate Doom.
// //
#include <stdlib.h> #include <stdlib.h>

View File

@ -13,7 +13,7 @@
// GNU General Public License for more details. // GNU General Public License for more details.
// //
// DESCRIPTION: // DESCRIPTION:
// Miscellaneous helper functions from Chocolate Doom. // [FG] miscellaneous helper functions from Chocolate Doom.
// //
#ifndef __M_MISC2__ #ifndef __M_MISC2__

View File

@ -29,7 +29,7 @@
#ifndef __M_SWAP__ #ifndef __M_SWAP__
#define __M_SWAP__ #define __M_SWAP__
#include "doomtype.h" #include "doomtype.h" // [FG] inline
// Endianess handling. // Endianess handling.
// WAD files are stored little endian. // WAD files are stored little endian.

View File

@ -601,6 +601,7 @@ int MidiToMIDI(UBYTE *mid,MIDI *mididata)
return 0; return 0;
} }
// [FG] disable dead static code
#if 0 #if 0
//#ifdef STANDALONE /* this code unused by BOOM provided for future portability */ //#ifdef STANDALONE /* this code unused by BOOM provided for future portability */
// /* it also provides a MUS to MID file converter*/ // /* it also provides a MUS to MID file converter*/
@ -758,6 +759,7 @@ int main(int argc,char **argv)
musst = fopen(musfile,"rb"); musst = fopen(musfile,"rb");
if (musst) if (musst)
{ {
// [FG] check return value
if(!fread(&MUSh,sizeof(MUSheader),1,musst)) if(!fread(&MUSh,sizeof(MUSheader),1,musst))
{ {
printf("Error reading MUS file\n"); printf("Error reading MUS file\n");

View File

@ -246,7 +246,7 @@ static boolean P_CheckMissileRange(mobj_t *actor)
static boolean P_IsOnLift(const mobj_t *actor) static boolean P_IsOnLift(const mobj_t *actor)
{ {
const sector_t *sec = actor->subsector->sector; const sector_t *sec = actor->subsector->sector;
line_t line = {0}; line_t line = {0}; // [FG] initialize
int l; int l;
// Short-circuit: it's on a lift which is active. // Short-circuit: it's on a lift which is active.
@ -2577,6 +2577,7 @@ void A_LineEffect(mobj_t *mo)
line_t junk = *lines; // Fake linedef set to 1st line_t junk = *lines; // Fake linedef set to 1st
if ((junk.special = (short)mo->state->misc1)) // Linedef type if ((junk.special = (short)mo->state->misc1)) // Linedef type
{ {
// [FG] made static
static player_t player; // Remember player status static player_t player; // Remember player status
player_t *oldplayer = mo->player; // Remember player status player_t *oldplayer = mo->player; // Remember player status
mo->player = &player; // Fake player mo->player = &player; // Fake player

View File

@ -164,12 +164,13 @@ void P_LoadSegs (int lump)
int side, linedef; int side, linedef;
line_t *ldef; line_t *ldef;
// [FG] extended nodes
li->v1 = &vertexes[(unsigned short)SHORT(ml->v1)]; li->v1 = &vertexes[(unsigned short)SHORT(ml->v1)];
li->v2 = &vertexes[(unsigned short)SHORT(ml->v2)]; li->v2 = &vertexes[(unsigned short)SHORT(ml->v2)];
li->angle = (SHORT(ml->angle))<<16; li->angle = (SHORT(ml->angle))<<16;
li->offset = (SHORT(ml->offset))<<16; li->offset = (SHORT(ml->offset))<<16;
linedef = (unsigned short)SHORT(ml->linedef); linedef = (unsigned short)SHORT(ml->linedef); // [FG] extended nodes
ldef = &lines[linedef]; ldef = &lines[linedef];
li->linedef = ldef; li->linedef = ldef;
side = SHORT(ml->side); side = SHORT(ml->side);
@ -204,6 +205,7 @@ void P_LoadSubsectors (int lump)
for (i=0; i<numsubsectors; i++) for (i=0; i<numsubsectors; i++)
{ {
// [FG] extended nodes
subsectors[i].numlines = (unsigned short)SHORT(((mapsubsector_t *) data)[i].numsegs ); subsectors[i].numlines = (unsigned short)SHORT(((mapsubsector_t *) data)[i].numsegs );
subsectors[i].firstline = (unsigned short)SHORT(((mapsubsector_t *) data)[i].firstseg); subsectors[i].firstline = (unsigned short)SHORT(((mapsubsector_t *) data)[i].firstseg);
} }
@ -311,7 +313,7 @@ void P_LoadNodes (int lump)
for (j=0 ; j<2 ; j++) for (j=0 ; j<2 ; j++)
{ {
int k; int k;
no->children[j] = (unsigned short)SHORT(mn->children[j]); no->children[j] = (unsigned short)SHORT(mn->children[j]); // [FG] extended nodes
// [FG] extended nodes // [FG] extended nodes
if (no->children[j] == 0xFFFF) if (no->children[j] == 0xFFFF)
@ -407,6 +409,7 @@ void P_LoadLineDefs (int lump)
line_t *ld = lines+i; line_t *ld = lines+i;
vertex_t *v1, *v2; vertex_t *v1, *v2;
// [FG] extended nodes
ld->flags = (unsigned short)SHORT(mld->flags); ld->flags = (unsigned short)SHORT(mld->flags);
ld->special = SHORT(mld->special); ld->special = SHORT(mld->special);
ld->tag = SHORT(mld->tag); ld->tag = SHORT(mld->tag);

View File

@ -54,7 +54,7 @@ typedef struct {
int P_DivlineSide(fixed_t x, fixed_t y, const divline_t *node) int P_DivlineSide(fixed_t x, fixed_t y, const divline_t *node)
{ {
fixed_t left = 0, right = 0; fixed_t left = 0, right = 0; // [FG] initialize
return return
!node->dx ? x == node->x ? 2 : x <= node->x ? node->dy > 0 : node->dy < 0 : !node->dx ? x == node->x ? 2 : x <= node->x ? node->dy > 0 : node->dy < 0 :
!node->dy ? x == node->y ? 2 : y <= node->y ? node->dx < 0 : node->dx > 0 : !node->dy ? x == node->y ? 2 : y <= node->y ? node->dx < 0 : node->dx > 0 :

View File

@ -71,6 +71,7 @@ typedef struct
// //
typedef PACKED_STRUCT ( typedef PACKED_STRUCT (
{ {
// [FG] signed char!
signed char istexture; //jff 3/23/98 make char for comparison signed char istexture; //jff 3/23/98 make char for comparison
char endname[9]; // if false, it is a flat char endname[9]; // if false, it is a flat
char startname[9]; char startname[9];

View File

@ -772,7 +772,7 @@ void R_InitTranMap(int progress)
char fname[PATH_MAX+1], *D_DoomPrefDir(void); char fname[PATH_MAX+1], *D_DoomPrefDir(void);
struct { struct {
unsigned char pct; unsigned char pct;
unsigned char playpal[256*3]; unsigned char playpal[256*3]; // [FG] a palette has 256 colors saved as byte triples
} cache; } cache;
FILE *cachefp = fopen(strcat(strcpy(fname, D_DoomPrefDir()), FILE *cachefp = fopen(strcat(strcpy(fname, D_DoomPrefDir()),
"/tranmap.dat"),"r+b"); "/tranmap.dat"),"r+b");
@ -781,7 +781,7 @@ void R_InitTranMap(int progress)
// Use cached translucency filter if it's available // Use cached translucency filter if it's available
if (!cachefp ? cachefp = fopen(fname,"w+b") , 1 : if (!cachefp ? cachefp = fopen(fname,"w+b") , 1 : // [FG] open for writing and reading
fread(&cache, 1, sizeof cache, cachefp) != sizeof cache || fread(&cache, 1, sizeof cache, cachefp) != sizeof cache ||
cache.pct != tran_filter_pct || cache.pct != tran_filter_pct ||
memcmp(cache.playpal, playpal, sizeof cache.playpal) || memcmp(cache.playpal, playpal, sizeof cache.playpal) ||
@ -853,7 +853,7 @@ void R_InitTranMap(int progress)
if (cachefp) // write out the cached translucency map if (cachefp) // write out the cached translucency map
{ {
cache.pct = tran_filter_pct; cache.pct = tran_filter_pct;
memcpy(cache.playpal, playpal, sizeof cache.playpal); memcpy(cache.playpal, playpal, sizeof cache.playpal); // [FG] a palette has 256 colors saved as byte triples
fseek(cachefp, 0, SEEK_SET); fseek(cachefp, 0, SEEK_SET);
fwrite(&cache, 1, sizeof cache, cachefp); fwrite(&cache, 1, sizeof cache, cachefp);
fwrite(main_tranmap, 256, 256, cachefp); fwrite(main_tranmap, 256, 256, cachefp);

View File

@ -181,9 +181,11 @@ typedef struct line_s
{ {
vertex_t *v1, *v2; // Vertices, from v1 to v2. vertex_t *v1, *v2; // Vertices, from v1 to v2.
fixed_t dx, dy; // Precalculated v2 - v1 for side checking. fixed_t dx, dy; // Precalculated v2 - v1 for side checking.
// [FG] extended nodes
unsigned short flags; // Animation related. unsigned short flags; // Animation related.
short special; short special;
short tag; short tag;
// [FG] extended nodes
unsigned short sidenum[2]; // Visual appearance: SideDefs. unsigned short sidenum[2]; // Visual appearance: SideDefs.
fixed_t bbox[4]; // A bounding box, for the linedef's extent fixed_t bbox[4]; // A bounding box, for the linedef's extent
slopetype_t slopetype; // To aid move clipping. slopetype_t slopetype; // To aid move clipping.
@ -206,7 +208,7 @@ typedef struct line_s
typedef struct subsector_s typedef struct subsector_s
{ {
sector_t *sector; sector_t *sector;
int numlines, firstline; int numlines, firstline; // [FG] extended nodes
} subsector_t; } subsector_t;
// phares 3/14/98 // phares 3/14/98
@ -262,6 +264,7 @@ typedef struct
{ {
fixed_t x, y, dx, dy; // Partition line. fixed_t x, y, dx, dy; // Partition line.
fixed_t bbox[2][4]; // Bounding box for each child. fixed_t bbox[2][4]; // Bounding box for each child.
// [FG] extended nodes
int children[2]; // If NF_SUBSECTOR its a subsector. int children[2]; // If NF_SUBSECTOR its a subsector.
} node_t; } node_t;

View File

@ -7,6 +7,7 @@
#include "version.h" #include "version.h"
// [FG] allow to build reproducibly
#ifndef BUILD_DATE #ifndef BUILD_DATE
#define BUILD_DATE __DATE__ #define BUILD_DATE __DATE__
#endif #endif

View File

@ -181,6 +181,7 @@ static void W_AddFile(const char *name) // killough 1/31/98: static, const
else else
{ {
// WAD file // WAD file
// [FG] check return value
if (!read(handle, &header, sizeof(header))) if (!read(handle, &header, sizeof(header)))
I_Error("Wad file %s doesn't have IWAD or PWAD id\n", filename); I_Error("Wad file %s doesn't have IWAD or PWAD id\n", filename);
if (strncmp(header.identification,"IWAD",4) && if (strncmp(header.identification,"IWAD",4) &&
@ -191,6 +192,7 @@ static void W_AddFile(const char *name) // killough 1/31/98: static, const
length = header.numlumps*sizeof(filelump_t); length = header.numlumps*sizeof(filelump_t);
fileinfo2free = fileinfo = malloc(length); // killough fileinfo2free = fileinfo = malloc(length); // killough
lseek(handle, header.infotableofs, SEEK_SET); lseek(handle, header.infotableofs, SEEK_SET);
// [FG] check return value
if (!read(handle, fileinfo, length)) if (!read(handle, fileinfo, length))
I_Error("Error reading lump directory from %s\n", filename); I_Error("Error reading lump directory from %s\n", filename);
numlumps += header.numlumps; numlumps += header.numlumps;
@ -320,7 +322,7 @@ unsigned W_LumpNameHash(const char *s)
// between different resources such as flats, sprites, colormaps // between different resources such as flats, sprites, colormaps
// //
int (W_CheckNumForName)(register const char *name, register int name_space) int (W_CheckNumForName)(register const char *name, register int name_space) // [FG] namespace is reserved in C++
{ {
// Hash function maps the name to one of possibly numlump chains. // Hash function maps the name to one of possibly numlump chains.
// It has been tuned so that the average chain length never exceeds 2. // It has been tuned so that the average chain length never exceeds 2.