Iskhodnyy_kod_Doom
.pdfextern char* |
sndserver_filename; |
|
extern int |
mb_used; |
|
#endif |
|
|
#ifdef LINUX |
|
|
char* |
mousetype; |
|
char* |
mousedev; |
|
#endif |
|
|
extern char* |
chat_macros[]; |
|
typedef struct |
|
|
{ |
|
|
char* |
name; |
|
int* |
location; |
|
int |
defaultvalue; |
|
int |
scantranslate; |
// PC scan code hack |
int |
untranslated; |
// lousy hack |
} default_t; |
|
|
default_t |
defaults[] = |
|
{ |
|
|
{"mouse_sensitivity",&mouseSensitivity, 5}, {"sfx_volume",&snd_SfxVolume, 8}, {"music_volume",&snd_MusicVolume, 8}, {"show_messages",&showMessages, 1},
#ifdef NORMALUNIX
{"key_right",&key_right, KEY_RIGHTARROW}, {"key_left",&key_left, KEY_LEFTARROW}, {"key_up",&key_up, KEY_UPARROW}, {"key_down",&key_down, KEY_DOWNARROW}, {"key_strafeleft",&key_strafeleft, ’,’}, {"key_straferight",&key_straferight, ’.’},
{"key_fire",&key_fire, KEY_RCTRL}, {"key_use",&key_use, ’ ’}, {"key_strafe",&key_strafe, KEY_RALT}, {"key_speed",&key_speed, KEY_RSHIFT},
// UNIX hack, to be removed. #ifdef SNDSERV
{"sndserver", (int *) &sndserver_filename, (int) "sndserver"}, {"mb_used", &mb_used, 2},
#endif
#endif
#ifdef LINUX
{"mousedev", (int*)&mousedev, (int)"/dev/ttyS0"}, {"mousetype", (int*)&mousetype, (int)"microsoft"},
#endif
{"use_mouse",&usemouse, 1}, {"mouseb_fire",&mousebfire,0}, {"mouseb_strafe",&mousebstrafe,1}, {"mouseb_forward",&mousebforward,2},
{"use_joystick",&usejoystick, 0}, {"joyb_fire",&joybfire,0}, {"joyb_strafe",&joybstrafe,1}, {"joyb_use",&joybuse,3},
261
{"joyb_speed",&joybspeed,2},
{"screenblocks",&screenblocks, 9}, {"detaillevel",&detailLevel, 0},
{"snd_channels",&numChannels, 3},
{"usegamma",&usegamma, 0},
{"chatmacro0", (int *) &chat_macros[0], (int) HUSTR_CHATMACRO0 }, {"chatmacro1", (int *) &chat_macros[1], (int) HUSTR_CHATMACRO1 }, {"chatmacro2", (int *) &chat_macros[2], (int) HUSTR_CHATMACRO2 }, {"chatmacro3", (int *) &chat_macros[3], (int) HUSTR_CHATMACRO3 }, {"chatmacro4", (int *) &chat_macros[4], (int) HUSTR_CHATMACRO4 }, {"chatmacro5", (int *) &chat_macros[5], (int) HUSTR_CHATMACRO5 }, {"chatmacro6", (int *) &chat_macros[6], (int) HUSTR_CHATMACRO6 }, {"chatmacro7", (int *) &chat_macros[7], (int) HUSTR_CHATMACRO7 }, {"chatmacro8", (int *) &chat_macros[8], (int) HUSTR_CHATMACRO8 }, {"chatmacro9", (int *) &chat_macros[9], (int) HUSTR_CHATMACRO9 }
};
int |
numdefaults; |
char* |
defaultfile; |
//
// M_SaveDefaults
//
void M_SaveDefaults (void)
{
int |
i; |
int |
v; |
FILE* |
f; |
f = fopen (defaultfile, "w"); if (!f)
return; // can’t write the file, but don’t complain
for (i=0 ; i<numdefaults ; i++)
{
if (defaults[i].defaultvalue > -0xfff
&& defaults[i].defaultvalue < 0xfff)
{
v = *defaults[i].location;
fprintf (f,"%s\t\t%i\n",defaults[i].name,v); } else {
fprintf (f,"%s\t\t\"%s\"\n",defaults[i].name, * (char **) (defaults[i].location));
}
}
fclose (f);
} |
|
// |
|
// M_LoadDefaults |
|
// |
|
extern byte |
scantokey[128]; |
void M_LoadDefaults (void)
{
262
int |
i; |
int |
len; |
FILE* |
f; |
char |
def[80]; |
char |
strparm[100]; |
char* |
newstring; |
int |
parm; |
boolean |
isstring; |
// set everything to base values
numdefaults = sizeof(defaults)/sizeof(defaults[0]); for (i=0 ; i<numdefaults ; i++)
*defaults[i].location = defaults[i].defaultvalue;
// check for a custom default file i = M_CheckParm ("-config");
if (i && i<myargc-1)
{
defaultfile = myargv[i+1];
printf (" default file: %s\n",defaultfile);
}
else
defaultfile = basedefault;
// read the file in, overriding any set defaults f = fopen (defaultfile, "r");
if (f)
{
while (!feof(f))
{
isstring = false;
if (fscanf (f, "%79s %[^\n]\n", def, strparm) == 2)
{
if (strparm[0] == ’"’)
{
// get a string default isstring = true;
len = strlen(strparm);
newstring = (char *) malloc(len); strparm[len-1] = 0; strcpy(newstring, strparm+1);
}
else if (strparm[0] == ’0’ && strparm[1] == ’x’) sscanf(strparm+2, "%x", &parm);
else
sscanf(strparm, "%i", &parm); for (i=0 ; i<numdefaults ; i++)
if (!strcmp(def, defaults[i].name))
{
if (!isstring) *defaults[i].location = parm;
else
*defaults[i].location = (int) newstring;
break;
}
}
}
fclose (f);
}
}
//
263
// SCREEN SHOTS
//
typedef struct |
|
|
|
{ |
|
|
|
char |
|
manufacturer; |
|
char |
|
version; |
|
char |
|
encoding; |
|
char |
|
bits_per_pixel; |
|
unsigned short |
xmin; |
|
|
unsigned short |
ymin; |
|
|
unsigned short |
xmax; |
|
|
unsigned short |
ymax; |
|
|
unsigned short |
hres; |
|
|
unsigned short |
vres; |
|
|
unsigned char |
|
palette[48]; |
|
char |
|
reserved; |
|
char |
|
color_planes; |
|
unsigned short |
bytes_per_line; |
|
|
unsigned short |
palette_type; |
|
|
char |
|
filler[58]; |
|
unsigned char |
|
data; |
// unbounded |
} pcx_t; |
|
|
|
// |
|
|
|
// WritePCXfile |
|
|
|
// |
|
|
|
void |
|
|
|
WritePCXfile |
|
|
|
( char* |
|
filename, |
|
byte* |
|
data, |
|
int |
|
width, |
|
int |
|
height, |
|
byte* |
|
palette ) |
|
{ |
|
|
|
int |
|
i; |
|
int |
|
length; |
|
pcx_t* |
pcx; |
|
|
byte* |
pack; |
|
|
pcx = Z_Malloc (width*height*2+1000, PU_STATIC, NULL); |
|||
pcx->manufacturer = 0x0a; |
// PCX id |
||
pcx->version = 5; |
|
// 256 color |
|
pcx->encoding = 1; |
// uncompressed |
||
pcx->bits_per_pixel = 8; |
// 256 color |
||
pcx->xmin = 0; |
|
|
|
pcx->ymin = 0; |
|
|
|
pcx->xmax = SHORT(width-1); |
|
pcx->ymax = SHORT(height-1); pcx->hres = SHORT(width);
pcx->vres = SHORT(height);
memset (pcx->palette,0,sizeof(pcx->palette));
pcx->color_planes |
= 1; |
// chunky image |
|
pcx->bytes_per_line |
= SHORT(width); |
|
|
pcx->palette_type |
= |
SHORT(2); |
// not a grey scale |
memset (pcx->filler,0,sizeof(pcx->filler));
264
// pack the image pack = &pcx->data;
for (i=0 ; i<width*height ; i++)
{
if ( |
(*data |
& 0xc0) != 0xc0) |
|
*pack++ |
= *data++; |
else |
|
|
{ |
|
|
|
*pack++ |
= 0xc1; |
|
*pack++ |
= *data++; |
} |
|
|
} |
|
|
// write |
the palette |
|
*pack++ = 0x0c; |
// palette ID byte |
|
for (i=0 |
; i<768 ; i++) |
|
*pack++ = *palette++; |
||
// write |
output |
file |
length = |
pack - |
(byte *)pcx; |
M_WriteFile (filename, pcx, length);
Z_Free (pcx);
}
//
// M_ScreenShot
//
void M_ScreenShot (void)
{
int |
i; |
byte* |
linear; |
char |
lbmname[12]; |
//munge planar buffer to linear linear = screens[2]; I_ReadScreen (linear);
//find a file name to save it to strcpy(lbmname,"DOOM00.pcx");
for (i=0 ; i<=99 ; i++)
{
lbmname[4] = i/10 + ’0’; lbmname[5] = i%10 + ’0’;
if (access(lbmname,0) == -1)
break; |
// file doesn’t exist |
} |
|
if (i==100)
I_Error ("M_ScreenShot: Couldn’t create a PCX");
// save the pcx file WritePCXfile (lbmname, linear,
SCREENWIDTH, SCREENHEIGHT,
W_CacheLumpName ("PLAYPAL",PU_CACHE));
players[consoleplayer].message = "screen shot";
}
265
8.12 m misc.h
// Emacs style mode select -*- C++ -*- //-----------------------------------------------------------------------------
//
//$Id:$
//Copyright (C) 1993-1996 by id Software, Inc.
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
// DESCRIPTION:
//
//
//-----------------------------------------------------------------------------
#ifndef __M_MISC__ #define __M_MISC__
#include "doomtype.h"
//
// MISC
//
boolean |
|
M_WriteFile |
|
( char const* |
name, |
void* |
source, |
int |
length ); |
int |
|
M_ReadFile |
|
( char const* |
name, |
byte** |
buffer ); |
void M_ScreenShot (void);
void M_LoadDefaults (void);
void M_SaveDefaults (void);
int |
|
M_DrawText |
|
( int |
x, |
int |
y, |
boolean |
direct, |
char* |
string ); |
#endif |
|
//----------------------------------------------------------------------------- |
|
// |
|
// $Log:$ |
|
266
//
//-----------------------------------------------------------------------------
8.13 m random.c
// Emacs style mode select -*- C++ -*- //-----------------------------------------------------------------------------
//
//$Id:$
//Copyright (C) 1993-1996 by id Software, Inc.
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//$Log:$
//DESCRIPTION:
//Random number LUT.
//-----------------------------------------------------------------------------
static const char rcsid[] = "$Id: m_random.c,v 1.1 1997/02/03 22:45:11 b1 Exp $";
//
//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;
267
return rndtable[prndindex];
}
int M_Random (void)
{
rndindex = (rndindex+1)&0xff; return rndtable[rndindex];
}
void M_ClearRandom (void)
{
rndindex = prndindex = 0;
}
8.14 m random.h
// Emacs style mode select -*- C++ -*- //-----------------------------------------------------------------------------
//
//$Id:$
//Copyright (C) 1993-1996 by id Software, Inc.
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
// DESCRIPTION:
//
//
//-----------------------------------------------------------------------------
#ifndef __M_RANDOM__ #define __M_RANDOM__
#include "doomtype.h"
//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);
#endif //-----------------------------------------------------------------------------
//
268
// $Log:$
//
//-----------------------------------------------------------------------------
8.15 m swap.c
// Emacs style mode select -*- C++ -*- //-----------------------------------------------------------------------------
//
//$Id:$
//Copyright (C) 1993-1996 by id Software, Inc.
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//$Log:$
//DESCRIPTION:
//Endianess handling, swapping 16bit and 32bit.
//-----------------------------------------------------------------------------
static const char
rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $";
#ifdef __GNUG__
#pragma implementation "m_swap.h" #endif
#include "m_swap.h"
//Not needed with big endian. #ifndef __BIG_ENDIAN__
//Swap 16bit, that is, MSB and LSB byte. unsigned short SwapSHORT(unsigned short x)
{
//No masking with 0xFF should be necessary. return (x>>8) | (x<<8);
}
// Swapping 32bit.
unsigned long SwapLONG( unsigned long x)
{
return (x>>24)
| ((x>>8) & 0xff00) | ((x<<8) & 0xff0000) | (x<<24);
}
#endif
269
8.16 m swap.h
// Emacs style mode select -*- C++ -*- //-----------------------------------------------------------------------------
//
//$Id:$
//Copyright (C) 1993-1996 by id Software, Inc.
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//DESCRIPTION:
//Endianess handling, swapping 16bit and 32bit.
//-----------------------------------------------------------------------------
#ifndef __M_SWAP__ #define __M_SWAP__
#ifdef __GNUG__ #pragma interface #endif
//Endianess handling.
//WAD files are stored little endian. #ifdef __BIG_ENDIAN__
short |
SwapSHORT(short); |
|
long |
SwapLONG(long); |
|
#define SHORT(x) |
((short)SwapSHORT((unsigned short) (x))) |
|
#define LONG(x) |
((long)SwapLONG((unsigned long) (x))) |
|
#else |
|
|
#define SHORT(x) |
(x) |
|
#define LONG(x) |
(x) |
|
#endif |
|
|
#endif //-----------------------------------------------------------------------------
//
// $Log:$
//
//-----------------------------------------------------------------------------
9Game logic/behaviour
9.1info.c
// Emacs style mode select -*- C++ -*- //-----------------------------------------------------------------------------
//
// $Id:$
//
270