Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Iskhodnyy_kod_Doom

.pdf
Скачиваний:
7
Добавлен:
13.02.2015
Размер:
1.01 Mб
Скачать

extern 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]