Skip to content

Commit

Permalink
Inlined and optimized random number functions. Always precache the le…
Browse files Browse the repository at this point in the history
…vels, even in the demos.
  • Loading branch information
viti95 committed May 31, 2020
1 parent 3093bf6 commit 1dc78c9
Show file tree
Hide file tree
Showing 24 changed files with 158 additions and 144 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,5 @@ usrhooks.obj
v_video.obj
w_wad.obj
wi_stuff.obj
z_zone.obj
z_zone.obj
i_random.obj
Binary file added I_RANDOM.OBJ
Binary file not shown.
1 change: 1 addition & 0 deletions d_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "f_finale.h"
#include "f_wipe.h"

#include "i_random.h"
#include "m_misc.h"
#include "m_menu.h"

Expand Down
4 changes: 0 additions & 4 deletions doomstat.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,9 +179,6 @@ extern int maxammo[NUMAMMO];
// File handling stuff.
extern char basedefault[1024];

// if true, load all graphics at level load
extern boolean precache;

// wipegamestate can be set to -1
// to force a wipe on the next draw
extern gamestate_t wipegamestate;
Expand All @@ -207,7 +204,6 @@ extern doomcom_t *doomcom;
extern doomdata_t *netbuffer;

extern ticcmd_t localcmds[BACKUPTICS];
extern int rndindex;

extern int maketic;
extern int nettics;
Expand Down
8 changes: 6 additions & 2 deletions f_wipe.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
// Mission begin melt/wipe screen special effect.
//

#include "doomstat.h"

#include "i_random.h"

#include "z_zone.h"
#include "i_system.h"
#include "v_video.h"
Expand Down Expand Up @@ -132,10 +136,10 @@ int wipe_initMelt(int width,
// setup initial column positions
// (y<0 => not ready to scroll yet)
y = (int *)Z_Malloc(width * sizeof(int), PU_STATIC, 0);
y[0] = -(M_Random() % 16);
y[0] = -(M_Random % 16);
for (i = 1; i < width; i++)
{
r = (M_Random() % 3) - 1;
r = (M_Random % 3) - 1;
y[i] = y[i - 1] + r;
if (y[i] > 0)
y[i] = 0;
Expand Down
6 changes: 1 addition & 5 deletions g_game.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,6 @@ byte *demo_p;
byte *demoend;
boolean singledemo; // quit after playing a demo from cmdline

boolean precache = true; // if true, load all graphics at start

wbstartstruct_t wminfo; // parms for world map / intermission

byte *savebuffer;
Expand Down Expand Up @@ -1025,7 +1023,7 @@ void G_InitNew(skill_t skill,
if ((map > 9) && (!commercial))
map = 9;

M_ClearRandom();
I_ClearRandom();

if (skill == sk_nightmare || respawnparm)
respawnmonsters = true;
Expand Down Expand Up @@ -1212,9 +1210,7 @@ void G_DoPlayDemo(void)
*demo_p++;

// don't spend a lot of time in loadlevel
precache = false;
G_InitNew(skill, episode, map);
precache = true;

usergame = false;
demoplayback = true;
Expand Down
30 changes: 30 additions & 0 deletions i_random.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include "i_random.h"

byte rndtable[256] = {
0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66,
74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36,
95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188,
52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224,
149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242,
145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0,
175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235,
25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113,
94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75,
136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196,
135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113,
80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241,
24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224,
145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95,
28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226,
71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36,
17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106,
197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136,
120, 163, 236, 249};

byte rndindex = 0;
byte prndindex = 0;

void I_ClearRandom(void)
{
rndindex = prndindex = 0;
}
21 changes: 21 additions & 0 deletions i_random.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include "doomtype.h"

//
// M_Random
// Returns a 0-255 number
//
extern byte rndtable[256];
extern byte rndindex;
extern byte prndindex;

// Which one is deterministic?

// Returns a number from 0 to 255,
// from a lookup table.
#define M_Random rndtable[++rndindex]

// As M_Random, but used only by the play simulation.
#define P_Random rndtable[++prndindex]

// Fix randoms for demos.
void I_ClearRandom(void);
46 changes: 0 additions & 46 deletions m_misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,52 +68,6 @@ int M_CheckParm(char *check)
return 0;
}

//
// M_Random
// Returns a 0-255 number
//
unsigned char rndtable[256] = {
0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66,
74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36,
95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188,
52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224,
149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242,
145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0,
175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235,
25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113,
94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75,
136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196,
135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113,
80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241,
24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224,
145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95,
28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226,
71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36,
17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106,
197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136,
120, 163, 236, 249};

int rndindex = 0;
int prndindex = 0;

// Which one is deterministic?
int P_Random(void)
{
prndindex = (prndindex + 1) & 0xff;
return rndtable[prndindex];
}

int M_Random(void)
{
rndindex = (rndindex + 1) & 0xff;
return rndtable[rndindex];
}

void M_ClearRandom(void)
{
rndindex = prndindex = 0;
}

void M_ClearBox(fixed_t *box)
{
box[BOXTOP] = box[BOXRIGHT] = MININT;
Expand Down
10 changes: 0 additions & 10 deletions m_misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,6 @@ M_WriteFile(char const *name,
int M_ReadFile(char const *name,
byte **buffer);

// Returns a number from 0 to 255,
// from a lookup table.
int M_Random(void);

// As M_Random, but used only by the play simulation.
int P_Random(void);

// Fix randoms for demos.
void M_ClearRandom(void);

// Bounding box coordinate storage.
enum
{
Expand Down
2 changes: 2 additions & 0 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
CCOPTS = /d2 /omaxet /zp8 /4r /ei /j /zq /i=dmx

GLOBOBJS = &
i_random.obj &
i_main.obj &
i_ibm.obj &
i_sound.obj &
Expand Down Expand Up @@ -99,6 +100,7 @@ clean : .SYMBOLIC
del *.exe
del *.map
del *.err
del i_random.obj
del am_map.obj
del d_main.obj
del d_net.obj
Expand Down
1 change: 1 addition & 0 deletions newdoom.lnk
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ lib audio_wf.lib
format os2 le
name newdoom

file i_random.obj
file i_main.obj
file i_ibm.obj
file i_sound.obj
Expand Down
Loading

0 comments on commit 1dc78c9

Please sign in to comment.