constructs.h (16370B)
1 /* 2 =========================================================================== 3 4 Doom 3 BFG Edition GPL Source Code 5 Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company. 6 7 This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code"). 8 9 Doom 3 BFG Edition Source Code is free software: you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation, either version 3 of the License, or 12 (at your option) any later version. 13 14 Doom 3 BFG Edition Source Code is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with Doom 3 BFG Edition Source Code. If not, see <http://www.gnu.org/licenses/>. 21 22 In addition, the Doom 3 BFG Edition Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 BFG Edition Source Code. If not, please request a copy in writing from id Software at the address below. 23 24 If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA. 25 26 =========================================================================== 27 */ 28 29 memset(::g, 0, sizeof(*::g)); 30 // am_map.constructs begin // 31 ::g->cheating = 0; 32 ::g->grid = 0; 33 ::g->leveljuststarted = 1; // kluge until AM_LevelInit() is called 34 ::g->automapactive = false; 35 ::g->finit_width = SCREENWIDTH; 36 ::g->finit_height = SCREENHEIGHT - (32 * GLOBAL_IMAGE_SCALER); 37 ::g->scale_mtof = (fixed_t)INITSCALEMTOF; 38 ::g->markpointnum = 0; // next point to be assigned 39 ::g->followplayer = 1; // specifies whether to follow the player around 40 ::g->stopped = true; 41 ::g->lastlevel = -1; 42 ::g->lastepisode = -1; 43 ::g->cheatstate=0; 44 ::g->bigstate=0; 45 ::g->nexttic = 0; 46 ::g->litelevelscnt = 0; 47 // am_map.constructs end // 48 // doomstat.constructs begin // 49 ::g->gamemode = indetermined; 50 ::g->gamemission = doom; 51 ::g->language = english; 52 // doomstat.constructs end // 53 // d_main.constructs begin // 54 ::g->singletics = false; // debug flag to cancel adaptiveness 55 ::g->oldgamestate = (gamestate_t)-1; 56 ::g->wipegamestate = GS_DEMOSCREEN; 57 ::g->viewactivestate = false; 58 ::g->menuactivestate = false; 59 ::g->inhelpscreensstate = false; 60 ::g->fullscreen = false; 61 ::g->wipe = false; 62 ::g->wipedone = true; 63 // d_main.constructs end // 64 // d_net.constructs begin // 65 doomcom_t temp_doomcom = { 66 0 67 }; 68 memcpy( &::g->doomcom, &temp_doomcom, sizeof(temp_doomcom) ); 69 // d_net.constructs end // 70 // f_wipe.constructs begin // 71 ::g->go = 0; 72 // f_wipe.constructs end // 73 // g_game.constructs begin // 74 ::g->precache = true; // if true, load all graphics at start 75 fixed_t temp_forwardmove[2] = { 76 0x19, 0x32 77 }; 78 memcpy( ::g->forwardmove, temp_forwardmove, sizeof(temp_forwardmove) ); 79 fixed_t temp_sidemove[2] = { 80 0x18, 0x28 81 }; 82 memcpy( ::g->sidemove, temp_sidemove, sizeof(temp_sidemove) ); 83 fixed_t temp_angleturn[3] = { 84 640, 1280, 320 // + slow turn 85 }; 86 memcpy( ::g->angleturn, temp_angleturn, sizeof(temp_angleturn) ); 87 ::g->mousebuttons = &::g->mousearray[1]; // allow [-1] 88 ::g->joybuttons = &::g->joyarray[1]; // allow [-1] 89 // g_game.constructs end // 90 // hu_lib.constructs begin // 91 ::g->lastautomapactive = true; 92 // hu_lib.constructs end // 93 // hu_stuff.constructs begin // 94 ::g->always_off = false; 95 ::g->headsupactive = false; 96 ::g->head = 0; 97 ::g->tail = 0; 98 ::g->shiftdown = false; 99 ::g->altdown = false; 100 ::g->num_nobrainers = 0; 101 // hu_stuff.constructs end // 102 // i_input.constructs begin // 103 // i_input.constructs end // 104 // i_system.constructs begin // 105 ::g->mb_used = 2; 106 ::g->current_time = 0; 107 // i_system.constructs end // 108 // m_cheat.constructs begin // 109 ::g->firsttime = 1; 110 ::g->usedcheatbuffer = 0; 111 // m_cheat.constructs end // 112 // m_menu.constructs begin // 113 114 menuitem_t temp_QuitMenu[3] = { 115 {1,"M_ACPT", M_ExitGame,'a'}, 116 {1,"M_CAN", M_CancelExit,'c'}, 117 {1,"M_CHG", M_GameSelection,'g'} 118 }; 119 memcpy( ::g->QuitMenu, temp_QuitMenu, sizeof(temp_QuitMenu) ); 120 menu_t temp_QuitDef = { 121 qut_end, // # of menu items 122 &::g->MainDef, // previous menu 123 ::g->QuitMenu, // menuitem_t -> 124 M_DrawQuit, // drawing routine -> 125 48,63, // x,y 126 g_accept // lastOn 127 }; 128 memcpy( &::g->QuitDef, &temp_QuitDef, sizeof(temp_QuitDef) ); 129 130 menuitem_t temp_MainMenu[5]= 131 { 132 {1,"M_NGAME",M_NewGame,'n'}, 133 {1,"M_OPTION",M_Options,'o'}, 134 {1,"M_LOADG",M_LoadGame,'l'}, 135 {1,"M_SAVEG",M_SaveGame,'m'}, 136 // Another hickup with Special edition. 137 //{1,"M_RDTHIS",M_ReadThis,'r'}, 138 {1,"M_QUITG",M_QuitDOOM,'q'} 139 }; 140 memcpy( &::g->MainMenu, temp_MainMenu, sizeof(temp_MainMenu) ); 141 menu_t temp_MainDef = { 142 main_end, 143 NULL, 144 ::g->MainMenu, 145 M_DrawMainMenu, 146 97,64, 147 0 148 }; 149 150 151 memcpy( &::g->MainDef, &temp_MainDef, sizeof(temp_MainDef) ); 152 menuitem_t temp_EpisodeMenu[4] = { 153 {1,"M_EPI1", M_Episode,'k'}, 154 {1,"M_EPI2", M_Episode,'t'}, 155 {1,"M_EPI3", M_Episode,'i'}, 156 {1,"M_EPI4", M_Episode,'t'} 157 }; 158 memcpy( ::g->EpisodeMenu, temp_EpisodeMenu, sizeof(temp_EpisodeMenu) ); 159 menu_t temp_EpiDef = { 160 ep_end, // # of menu items 161 &::g->MainDef, // previous menu 162 ::g->EpisodeMenu, // menuitem_t -> 163 M_DrawEpisode, // drawing routine -> 164 48,63, // x,y 165 ep1 // lastOn 166 }; 167 memcpy( &::g->EpiDef, &temp_EpiDef, sizeof(temp_EpiDef) ); 168 169 menuitem_t temp_ExpansionMenu[2] = { 170 {1,"M_EPI1", M_Expansion,'h'}, 171 {1,"M_EPI2", M_Expansion,'n'}, 172 }; 173 memcpy( ::g->ExpansionMenu, temp_ExpansionMenu, sizeof(temp_ExpansionMenu) ); 174 menu_t temp_ExpDef = { 175 ex_end, // # of menu items 176 &::g->MainDef, // previous menu 177 ::g->ExpansionMenu, // menuitem_t -> 178 M_DrawEpisode, // drawing routine -> 179 48,63, // x,y 180 ex1 // lastOn 181 }; 182 memcpy( &::g->ExpDef, &temp_ExpDef, sizeof(temp_ExpDef) ); 183 184 menuitem_t temp_LoadExpMenu[2] = { 185 {1,"M_EPI1", M_LoadExpansion,'h'}, 186 {1,"M_EPI2", M_LoadExpansion,'n'}, 187 }; 188 memcpy( ::g->LoadExpMenu, temp_LoadExpMenu, sizeof(temp_LoadExpMenu) ); 189 menu_t temp_LoadExpDef = { 190 ex_end, // # of menu items 191 &::g->MainDef, // previous menu 192 ::g->LoadExpMenu, // menuitem_t -> 193 M_DrawEpisode, // drawing routine -> 194 48,63, // x,y 195 ex1 // lastOn 196 }; 197 memcpy( &::g->LoadExpDef, &temp_LoadExpDef, sizeof(temp_LoadExpDef) ); 198 199 menuitem_t temp_NewGameMenu[5] = { 200 {1,"M_JKILL", M_ChooseSkill, 'i'}, 201 {1,"M_ROUGH", M_ChooseSkill, 'h'}, 202 {1,"M_HURT", M_ChooseSkill, 'h'}, 203 {1,"M_ULTRA", M_ChooseSkill, 'u'}, 204 {1,"M_NMARE", M_ChooseSkill, 'n'} 205 }; 206 memcpy( ::g->NewGameMenu, temp_NewGameMenu, sizeof(temp_NewGameMenu) ); 207 menu_t temp_NewDef = { 208 newg_end, // # of menu items 209 &::g->EpiDef, // previous menu 210 ::g->NewGameMenu, // menuitem_t -> 211 M_DrawNewGame, // drawing routine -> 212 48,63, // x,y 213 hurtme // lastOn 214 }; 215 memcpy( &::g->NewDef, &temp_NewDef, sizeof(temp_NewDef) ); 216 menuitem_t temp_OptionsMenu[8] = { 217 {1,"M_GDHIGH", M_FullScreen,'f'}, 218 {1,"M_SCRNSZ", M_ChangeGPad,'m'}, 219 {1,"M_MESSG", M_ChangeMessages,'m'}, 220 //{1,"M_DETAIL", M_ChangeDetail,'g'}, 221 //{2,"M_SCRNSZ", M_SizeDisplay,'s'}, 222 {-1,"",0}, 223 {2,"M_MSENS", M_ChangeSensitivity,'m'}, 224 {-1,"",0}, 225 {1,"M_SVOL", M_Sound,'s'} 226 }; 227 memcpy( ::g->OptionsMenu, temp_OptionsMenu, sizeof(temp_OptionsMenu) ); 228 menu_t temp_OptionsDef = { 229 opt_end, 230 &::g->MainDef, 231 ::g->OptionsMenu, 232 M_DrawOptions, 233 60,37, 234 0 235 }; 236 memcpy( &::g->OptionsDef, &temp_OptionsDef, sizeof(temp_OptionsDef) ); 237 menuitem_t temp_SoundMenu[4] = { 238 {2,"M_SFXVOL",M_SfxVol,'s'}, 239 {-1,"",0}, 240 {2,"M_MUSVOL",M_MusicVol,'m'}, 241 {-1,"",0} 242 }; 243 memcpy( ::g->SoundMenu, temp_SoundMenu, sizeof(temp_SoundMenu) ); 244 menu_t temp_SoundDef = { 245 sound_end, 246 &::g->OptionsDef, 247 ::g->SoundMenu, 248 M_DrawSound, 249 80,64, 250 0 251 }; 252 memcpy( &::g->SoundDef, &temp_SoundDef, sizeof(temp_SoundDef) ); 253 menuitem_t temp_LoadMenu[6] = { 254 {1,"", M_LoadSelect,'1'}, 255 {1,"", M_LoadSelect,'2'}, 256 {1,"", M_LoadSelect,'3'}, 257 {1,"", M_LoadSelect,'4'}, 258 {1,"", M_LoadSelect,'5'}, 259 {1,"", M_LoadSelect,'6'} 260 }; 261 memcpy( ::g->LoadMenu, temp_LoadMenu, sizeof(temp_LoadMenu) ); 262 menu_t temp_LoadDef = { 263 load_end, 264 &::g->MainDef, 265 ::g->LoadMenu, 266 M_DrawLoad, 267 80,54, 268 0 269 }; 270 memcpy( &::g->LoadDef, &temp_LoadDef, sizeof(temp_LoadDef) ); 271 menuitem_t temp_SaveMenu[6] = { 272 {1,"", M_SaveSelect,'1'}, 273 {1,"", M_SaveSelect,'2'}, 274 {1,"", M_SaveSelect,'3'}, 275 {1,"", M_SaveSelect,'4'}, 276 {1,"", M_SaveSelect,'5'}, 277 {1,"", M_SaveSelect,'6'} 278 }; 279 memcpy( ::g->SaveMenu, temp_SaveMenu, sizeof(temp_SaveMenu) ); 280 menu_t temp_SaveDef = { 281 load_end, 282 &::g->MainDef, 283 ::g->SaveMenu, 284 M_DrawSave, 285 80,54, 286 0 287 }; 288 memcpy( &::g->SaveDef, &temp_SaveDef, sizeof(temp_SaveDef) ); 289 int temp_quitsounds[8] = { 290 sfx_pldeth, 291 sfx_dmpain, 292 sfx_popain, 293 sfx_slop, 294 sfx_telept, 295 sfx_posit1, 296 sfx_posit3, 297 sfx_sgtatk 298 }; 299 memcpy( ::g->quitsounds, temp_quitsounds, sizeof(temp_quitsounds) ); 300 int temp_quitsounds2[8] = { 301 sfx_vilact, 302 sfx_getpow, 303 sfx_boscub, 304 sfx_slop, 305 sfx_skeswg, 306 sfx_kntdth, 307 sfx_bspact, 308 sfx_sgtatk 309 }; 310 memcpy( ::g->quitsounds2, temp_quitsounds2, sizeof(temp_quitsounds2) ); 311 ::g->joywait = 0; 312 ::g->mousewait = 0; 313 ::g->mmenu_mousey = 0; 314 ::g->lasty = 0; 315 ::g->mmenu_mousex = 0; 316 ::g->lastx = 0; 317 // m_menu.constructs end // 318 // m_misc.constructs begin // 319 ::g->g_pszSaveFile = "\\save.dat"; 320 ::g->g_pszImagePath = "d:\\saveimage.xbx"; 321 ::g->g_pszImageMeta = "saveimage.xbx"; 322 extern const char* const temp_chat_macros[]; 323 for (int i = 0; i < 10; i++) 324 { 325 chat_macros[i] = temp_chat_macros[i]; 326 } 327 default_t temp_defaults[35] = { 328 default_t( "mouse_sensitivity",&::g->mouseSensitivity, 7 ), 329 330 default_t( "show_messages",&::g->showMessages, 1 ), 331 332 default_t( "key_right",&::g->key_right, KEY_RIGHTARROW ), 333 default_t( "key_left",&::g->key_left, KEY_LEFTARROW ), 334 default_t( "key_up",&::g->key_up, KEY_UPARROW ), 335 default_t( "key_down",&::g->key_down, KEY_DOWNARROW ), 336 default_t( "key_strafeleft",&::g->key_strafeleft, ',' ), 337 default_t( "key_straferight",&::g->key_straferight, '.' ), 338 339 default_t( "key_fire",&::g->key_fire, KEY_RCTRL ), 340 default_t( "key_use",&::g->key_use, ' ' ), 341 default_t( "key_strafe",&::g->key_strafe, KEY_RALT ), 342 default_t( "key_speed",&::g->key_speed, KEY_RSHIFT ), 343 344 default_t( "use_mouse",&::g->usemouse, 1 ), 345 default_t( "mouseb_fire",&::g->mousebfire,0 ), 346 default_t( "mouseb_strafe",&::g->mousebstrafe,1 ), 347 default_t( "mouseb_forward",&::g->mousebforward,2 ), 348 349 default_t( "use_joystick",&::g->usejoystick, 0 ), 350 default_t( "joyb_fire",&::g->joybfire,0 ), 351 default_t( "joyb_strafe",&::g->joybstrafe,1 ), 352 default_t( "joyb_use",&::g->joybuse,3 ), 353 default_t( "joyb_speed",&::g->joybspeed,2 ), 354 355 default_t( "screenblocks",&::g->screenblocks, 10 ), 356 default_t( "detaillevel",&::g->detailLevel, 0 ), 357 358 default_t( "snd_channels",&::g->numChannels, S_NUMCHANNELS ), 359 360 361 362 default_t( "usegamma",&::g->usegamma, 0 ), 363 364 default_t( "chatmacro0", &::g->chat_macros[0], HUSTR_CHATMACRO0 ), 365 default_t( "chatmacro1", &::g->chat_macros[1], HUSTR_CHATMACRO1 ), 366 default_t( "chatmacro2", &::g->chat_macros[2], HUSTR_CHATMACRO2 ), 367 default_t( "chatmacro3", &::g->chat_macros[3], HUSTR_CHATMACRO3 ), 368 default_t( "chatmacro4", &::g->chat_macros[4], HUSTR_CHATMACRO4 ), 369 default_t( "chatmacro5", &::g->chat_macros[5], HUSTR_CHATMACRO5 ), 370 default_t( "chatmacro6", &::g->chat_macros[6], HUSTR_CHATMACRO6 ), 371 default_t( "chatmacro7", &::g->chat_macros[7], HUSTR_CHATMACRO7 ), 372 default_t( "chatmacro8", &::g->chat_macros[8], HUSTR_CHATMACRO8 ), 373 default_t( "chatmacro9", &::g->chat_macros[9], HUSTR_CHATMACRO9 ) 374 375 }; 376 memcpy( ::g->defaults, temp_defaults, sizeof(temp_defaults) ); 377 // m_misc.constructs end // 378 // m_random.constructs begin // 379 ::g->rndindex = 0; 380 ::g->prndindex = 0; 381 // m_random.constructs end // 382 // p_enemy.constructs begin // 383 ::g->TRACEANGLE = 0xc000000; 384 ::g->easy = 0; 385 // p_enemy.constructs end // 386 // r_bsp.constructs begin // 387 int temp_checkcoord[12][4] = { 388 {3,0,2,1}, 389 {3,0,2,0}, 390 {3,1,2,0}, 391 {0}, 392 {2,0,2,1}, 393 {0,0,0,0}, 394 {3,1,3,0}, 395 {0}, 396 {2,0,3,1}, 397 {2,1,3,1}, 398 {2,1,3,0} 399 }; 400 memcpy( ::g->checkcoord, temp_checkcoord, sizeof(temp_checkcoord) ); 401 // r_bsp.constructs end // 402 // r_draw.constructs begin // 403 int temp_fuzzoffset[FUZZTABLE] = { 404 FUZZOFF,-FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF, 405 FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF, 406 FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF, 407 FUZZOFF,-FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF, 408 FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF,-FUZZOFF,FUZZOFF, 409 FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF, 410 FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF 411 }; 412 memcpy( ::g->fuzzoffset, temp_fuzzoffset, sizeof(temp_fuzzoffset) ); 413 ::g->fuzzpos = 0; 414 // r_draw.constructs end // 415 // r_main.constructs begin // 416 ::g->validcount = 1; 417 // r_main.constructs end // 418 // sounds.constructs begin // 419 musicinfo_t temp_S_music[80] = { 420 { 0 }, 421 { "e1m1", 0 }, 422 { "e1m2", 0 }, 423 { "e1m3", 0 }, 424 { "e1m4", 0 }, 425 { "e1m5", 0 }, 426 { "e1m6", 0 }, 427 { "e1m7", 0 }, 428 { "e1m8", 0 }, 429 { "e1m9", 0 }, 430 { "e2m1", 0 }, 431 { "e2m2", 0 }, 432 { "e2m3", 0 }, 433 { "e2m4", 0 }, 434 { "e2m5", 0 }, 435 { "e2m6", 0 }, 436 { "e2m7", 0 }, 437 { "e2m8", 0 }, 438 { "e2m9", 0 }, 439 { "e3m1", 0 }, 440 { "e3m2", 0 }, 441 { "e3m3", 0 }, 442 { "e3m4", 0 }, 443 { "e3m5", 0 }, 444 { "e3m6", 0 }, 445 { "e3m7", 0 }, 446 { "e3m8", 0 }, 447 { "e3m9", 0 }, 448 { "inter", 0 }, 449 { "intro", 0 }, 450 { "bunny", 0 }, 451 { "victor", 0 }, 452 { "introa", 0 }, 453 { "runnin", 0 }, 454 { "stalks", 0 }, 455 { "countd", 0 }, 456 { "betwee", 0 }, 457 { "doom", 0 }, 458 { "the_da", 0 }, 459 { "shawn", 0 }, 460 { "ddtblu", 0 }, 461 { "in_cit", 0 }, 462 { "dead", 0 }, 463 { "stlks2", 0 }, 464 { "theda2", 0 }, 465 { "doom2", 0 }, 466 { "ddtbl2", 0 }, 467 { "runni2", 0 }, 468 { "dead2", 0 }, 469 { "stlks3", 0 }, 470 { "romero", 0 }, 471 { "shawn2", 0 }, 472 { "messag", 0 }, 473 { "count2", 0 }, 474 { "ddtbl3", 0 }, 475 { "ampie", 0 }, 476 { "theda3", 0 }, 477 { "adrian", 0 }, 478 { "messg2", 0 }, 479 { "romer2", 0 }, 480 { "tense", 0 }, 481 { "shawn3", 0 }, 482 { "openin", 0 }, 483 { "evil", 0 }, 484 { "ultima", 0 }, 485 { "read_m", 0 }, 486 { "dm2ttl", 0 }, 487 { "dm2int", 0 } 488 }; 489 memcpy( ::g->S_music, temp_S_music, sizeof(temp_S_music) ); 490 // sounds.constructs end // 491 // st_stuff.constructs begin // 492 ::g->veryfirsttime = 1; 493 ::g->st_msgcounter=0; 494 ::g->st_oldhealth = -1; 495 ::g->st_facecount = 0; 496 ::g->st_faceindex = 0; 497 ::g->oldhealth = -1; 498 ::g->lastattackdown = -1; 499 ::g->priority = 0; 500 ::g->largeammo = 1994; // means "n/a" 501 ::g->st_palette = 0; 502 ::g->st_stopped = true; 503 // st_stuff.constructs end // 504 // s_sound.constructs begin // 505 ::g->mus_playing=0; 506 // s_sound.constructs end // 507 // wi_stuff.constructs begin // 508 int temp_NUMANIMS[NUMEPISODES] = { 509 sizeof(epsd0animinfo)/sizeof(anim_t), 510 sizeof(epsd1animinfo)/sizeof(anim_t), 511 sizeof(epsd2animinfo)/sizeof(anim_t) 512 }; 513 memcpy( ::g->NUMANIMS, temp_NUMANIMS, sizeof(temp_NUMANIMS) ); 514 ::g->snl_pointeron = false; 515 extern const anim_t temp_epsd0animinfo[10]; 516 extern const anim_t temp_epsd1animinfo[9]; 517 extern const anim_t temp_epsd2animinfo[6]; 518 memcpy(::g->epsd0animinfo, temp_epsd0animinfo, sizeof(temp_epsd0animinfo)); 519 memcpy(::g->epsd1animinfo, temp_epsd1animinfo, sizeof(temp_epsd1animinfo)); 520 memcpy(::g->epsd2animinfo, temp_epsd2animinfo, sizeof(temp_epsd2animinfo)); 521 wi_stuff_anims[0] = ::g->epsd0animinfo; 522 wi_stuff_anims[1] = ::g->epsd1animinfo; 523 wi_stuff_anims[2] = ::g->epsd2animinfo; 524 // wi_stuff.constructs end // 525 // z_zone.constructs begin // 526 ::g->zones[NUM_ZONES] = NULL; 527 ::g->NumAlloc = 0; 528 // z_zone.constructs end // 529 // info constructs begin // 530 extern const state_t tempStates[NUMSTATES]; 531 memcpy(::g->states, tempStates, sizeof(tempStates)); 532 // info constructs end // 533 // p_local begin // 534 ::g->rejectmatrix = NULL; 535 // p_local end // 536 // r_data begin //] 537 ::g->s_numtextures = 0; 538 // r_data end // 539 540