doom

a minimalistic implementation of doom
git clone git://ssnf.xyz/doom
Log | Files | Refs

commit 5791c4d6cf6bf639083cf29256f673054c4bb345
parent 181908bd2667000b6139f92c8834059b4ec3f98a
Author: ssnf <ssnf@ssnf.xyz>
Date:   Thu, 17 Jun 2021 01:37:22 +0000

delete all comments

Diffstat:
Msrc/am_map.c | 432++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/am_map.h | 64++++++++++++++++++++++++++++++++--------------------------------
Msrc/d_englsh.h | 146++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/d_event.h | 98++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/d_french.h | 128++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/d_items.c | 86++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/d_items.h | 52++++++++++++++++++++++++++--------------------------
Msrc/d_main.c | 372++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/d_main.h | 64++++++++++++++++++++++++++++++++--------------------------------
Msrc/d_net.c | 248++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/d_net.h | 134++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/d_player.h | 176++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/d_textur.h | 60++++++++++++++++++++++++++++++------------------------------
Msrc/d_think.h | 74+++++++++++++++++++++++++++++++++++++-------------------------------------
Msrc/d_ticcmd.h | 66+++++++++++++++++++++++++++++++++---------------------------------
Msrc/doomdata.h | 180++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/doomdef.c | 50+++++++++++++++++++++++++-------------------------
Msrc/doomdef.h | 272++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/doomstat.c | 50+++++++++++++++++++++++++-------------------------
Msrc/doomstat.h | 256++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/doomtype.h | 60++++++++++++++++++++++++++++++------------------------------
Msrc/dstrings.c | 52++++++++++++++++++++++++++--------------------------
Msrc/dstrings.h | 78+++++++++++++++++++++++++++++++++++++++---------------------------------------
Msrc/f_finale.c | 190++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/f_finale.h | 62+++++++++++++++++++++++++++++++-------------------------------
Msrc/f_wipe.c | 74+++++++++++++++++++++++++++++++++++++-------------------------------------
Msrc/f_wipe.h | 60++++++++++++++++++++++++++++++------------------------------
Msrc/g_game.c | 472++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/g_game.h | 70+++++++++++++++++++++++++++++++++++-----------------------------------
Msrc/hu_lib.c | 94++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/hu_lib.h | 158++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/hu_stuff.c | 188++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/hu_stuff.h | 70+++++++++++++++++++++++++++++++++++-----------------------------------
Msrc/i_main.c | 44++++++++++++++++++++++----------------------
Msrc/i_net.c | 122++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/i_net.h | 52++++++++++++++++++++++++++--------------------------
Msrc/i_sound.c | 634++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/i_sound.h | 108++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/i_system.c | 76++++++++++++++++++++++++++++++++++++++--------------------------------------
Msrc/i_system.h | 110++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/i_video.c | 260++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/i_video.h | 60++++++++++++++++++++++++++++++------------------------------
Msrc/info.c | 9106++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/info.h | 58+++++++++++++++++++++++++++++-----------------------------
Msrc/m_argv.c | 54+++++++++++++++++++++++++++---------------------------
Msrc/m_argv.h | 60++++++++++++++++++++++++++++++------------------------------
Msrc/m_bbox.c | 50+++++++++++++++++++++++++-------------------------
Msrc/m_bbox.h | 56++++++++++++++++++++++++++++----------------------------
Msrc/m_cheat.c | 62+++++++++++++++++++++++++++++++-------------------------------
Msrc/m_cheat.h | 56++++++++++++++++++++++++++++----------------------------
Msrc/m_fixed.c | 52++++++++++++++++++++++++++--------------------------
Msrc/m_fixed.h | 56++++++++++++++++++++++++++++----------------------------
Msrc/m_menu.c | 508++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/m_menu.h | 82++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/m_misc.c | 162++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/m_misc.h | 56++++++++++++++++++++++++++++----------------------------
Msrc/m_random.c | 54+++++++++++++++++++++++++++---------------------------
Msrc/m_random.h | 58+++++++++++++++++++++++++++++-----------------------------
Msrc/m_swap.c | 52++++++++++++++++++++++++++--------------------------
Msrc/m_swap.h | 54+++++++++++++++++++++++++++---------------------------
Msrc/p_ceilng.c | 108++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_doors.c | 206++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_enemy.c | 514++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_floor.c | 118++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_inter.c | 254++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_inter.h | 50+++++++++++++++++++++++++-------------------------
Msrc/p_lights.c | 154++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_local.h | 148++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_map.c | 616++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_maputl.c | 334++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_mobj.c | 336++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_mobj.h | 354++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_plats.c | 68++++++++++++++++++++++++++++++++++----------------------------------
Msrc/p_pspr.c | 354++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_pspr.h | 90++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_saveg.c | 164++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_saveg.h | 54+++++++++++++++++++++++++++---------------------------
Msrc/p_setup.c | 254++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_setup.h | 54+++++++++++++++++++++++++++---------------------------
Msrc/p_sight.c | 172++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_spec.c | 538++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_spec.h | 172++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_switch.c | 266++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_telept.c | 74+++++++++++++++++++++++++++++++++++++-------------------------------------
Msrc/p_tick.c | 116++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/p_tick.h | 56++++++++++++++++++++++++++++----------------------------
Msrc/p_user.c | 156++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_bsp.c | 254++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_bsp.h | 54+++++++++++++++++++++++++++---------------------------
Msrc/r_data.c | 326++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_data.h | 66+++++++++++++++++++++++++++++++++---------------------------------
Msrc/r_defs.h | 358++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_draw.c | 388++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_draw.h | 82++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_local.h | 66+++++++++++++++++++++++++++++++++---------------------------------
Msrc/r_main.c | 330++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_main.h | 106++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_plane.c | 180++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_plane.h | 52++++++++++++++++++++++++++--------------------------
Msrc/r_segs.c | 218++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_segs.h | 50+++++++++++++++++++++++++-------------------------
Msrc/r_sky.c | 72++++++++++++++++++++++++++++++++++++------------------------------------
Msrc/r_sky.h | 56++++++++++++++++++++++++++++----------------------------
Msrc/r_state.h | 88++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_things.c | 354++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/r_things.h | 56++++++++++++++++++++++++++++----------------------------
Msrc/s_sound.c | 326++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/s_sound.h | 98++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/sounds.c | 60++++++++++++++++++++++++++++++------------------------------
Msrc/sounds.h | 110++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/st_lib.c | 80++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/st_lib.h | 146++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/st_stuff.c | 492++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/st_stuff.h | 78+++++++++++++++++++++++++++++++++++++++---------------------------------------
Msrc/tables.c | 72++++++++++++++++++++++++++++++++++++------------------------------------
Msrc/tables.h | 96++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/v_video.c | 126++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/v_video.h | 72++++++++++++++++++++++++++++++++++++------------------------------------
Msrc/w_wad.c | 232++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/w_wad.h | 64++++++++++++++++++++++++++++++++--------------------------------
Msrc/wi_stuff.c | 476++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/wi_stuff.h | 62+++++++++++++++++++++++++++++++-------------------------------
Msrc/z_zone.c | 198++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/z_zone.h | 94++++++++++++++++++++++++++++++++++++++++----------------------------------------
124 files changed, 14278 insertions(+), 14278 deletions(-)

diff --git a/src/am_map.c b/src/am_map.c @@ -1,25 +1,25 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// -// $Log:$ -// -// DESCRIPTION: the automap code -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: am_map.c,v 1.4 1997/02/03 21:24:33 b1 Exp $"; @@ -35,20 +35,20 @@ static const char rcsid[] = "$Id: am_map.c,v 1.4 1997/02/03 21:24:33 b1 Exp $"; #include "m_cheat.h" #include "i_system.h" -// Needs access to LFB. + #include "v_video.h" -// State. + #include "doomstat.h" #include "r_state.h" -// Data. + #include "dstrings.h" #include "am_map.h" -// For use if I do walls with outsides/insides + #define REDS (256-5*16) #define REDRANGE 16 #define BLUES (256-4*16+8) @@ -64,7 +64,7 @@ static const char rcsid[] = "$Id: am_map.c,v 1.4 1997/02/03 21:24:33 b1 Exp $"; #define BLACK 0 #define WHITE (256-47) -// Automap colors + #define BACKGROUND BLACK #define YOURCOLORS WHITE #define YOURRANGE 0 @@ -84,7 +84,7 @@ static const char rcsid[] = "$Id: am_map.c,v 1.4 1997/02/03 21:24:33 b1 Exp $"; #define GRIDRANGE 0 #define XHAIRCOLORS GRAYS -// drawing stuff + #define FB 0 #define AM_PANDOWNKEY KEY_DOWNARROW @@ -103,26 +103,26 @@ static const char rcsid[] = "$Id: am_map.c,v 1.4 1997/02/03 21:24:33 b1 Exp $"; #define AM_NUMMARKPOINTS 10 -// scale on entry + #define INITSCALEMTOF (.2*FRACUNIT) -// how much the automap moves window per tic in frame-buffer coordinates -// moves 140 pixels in 1 second + + #define F_PANINC 4 -// how much zoom-in per tic -// goes to 2x in 1 second + + #define M_ZOOMIN ((int) (1.02*FRACUNIT)) -// how much zoom-out per tic -// pulls out to 0.5x in 1 second + + #define M_ZOOMOUT ((int) (FRACUNIT/1.02)) -// translates between frame-buffer and map distances + #define FTOM(x) FixedMul(((x)<<16),scale_ftom) #define MTOF(x) (FixedMul((x),scale_mtof)>>16) -// translates between frame-buffer and map coordinates + #define CXMTOF(x) (f_x + MTOF((x)-m_x)) #define CYMTOF(y) (f_y + (f_h - MTOF((y)-m_y))) -// the following is crap + #define LINE_NEVERSEE ML_DONTDRAW typedef struct @@ -152,19 +152,19 @@ typedef struct -// -// The vector graphics for the automap. -// A line drawing of the player pointing right, -// starting from the middle. -// + + + + + #define R ((8*PLAYERRADIUS)/7) mline_t player_arrow[] = { - { { -R+R/8, 0 }, { R, 0 } }, // ----- - { { R, 0 }, { R-R/2, R/4 } }, // -----> + { { -R+R/8, 0 }, { R, 0 } }, + { { R, 0 }, { R-R/2, R/4 } }, { { R, 0 }, { R-R/2, -R/4 } }, - { { -R+R/8, 0 }, { -R-R/8, R/4 } }, // >----> + { { -R+R/8, 0 }, { -R-R/8, R/4 } }, { { -R+R/8, 0 }, { -R-R/8, -R/4 } }, - { { -R+3*R/8, 0 }, { -R+R/8, R/4 } }, // >>---> + { { -R+3*R/8, 0 }, { -R+R/8, R/4 } }, { { -R+3*R/8, 0 }, { -R+R/8, -R/4 } } }; #undef R @@ -172,20 +172,20 @@ mline_t player_arrow[] = { #define R ((8*PLAYERRADIUS)/7) mline_t cheat_player_arrow[] = { - { { -R+R/8, 0 }, { R, 0 } }, // ----- - { { R, 0 }, { R-R/2, R/6 } }, // -----> + { { -R+R/8, 0 }, { R, 0 } }, + { { R, 0 }, { R-R/2, R/6 } }, { { R, 0 }, { R-R/2, -R/6 } }, - { { -R+R/8, 0 }, { -R-R/8, R/6 } }, // >-----> + { { -R+R/8, 0 }, { -R-R/8, R/6 } }, { { -R+R/8, 0 }, { -R-R/8, -R/6 } }, - { { -R+3*R/8, 0 }, { -R+R/8, R/6 } }, // >>-----> + { { -R+3*R/8, 0 }, { -R+R/8, R/6 } }, { { -R+3*R/8, 0 }, { -R+R/8, -R/6 } }, - { { -R/2, 0 }, { -R/2, -R/6 } }, // >>-d---> + { { -R/2, 0 }, { -R/2, -R/6 } }, { { -R/2, -R/6 }, { -R/2+R/6, -R/6 } }, { { -R/2+R/6, -R/6 }, { -R/2+R/6, R/4 } }, - { { -R/6, 0 }, { -R/6, -R/6 } }, // >>-dd--> + { { -R/6, 0 }, { -R/6, -R/6 } }, { { -R/6, -R/6 }, { 0, -R/6 } }, { { 0, -R/6 }, { 0, R/4 } }, - { { R/6, R/4 }, { R/6, -R/7 } }, // >>-ddt-> + { { R/6, R/4 }, { R/6, -R/7 } }, { { R/6, -R/7 }, { R/6+R/32, -R/7-R/32 } }, { { R/6+R/32, -R/7-R/32 }, { R/6+R/10, -R/7 } } }; @@ -216,73 +216,73 @@ mline_t thintriangle_guy[] = { static int cheating = 0; static int grid = 0; -static int leveljuststarted = 1; // kluge until AM_LevelInit() is called +static int leveljuststarted = 1; boolean automapactive = false; static int finit_width = SCREENWIDTH; static int finit_height = SCREENHEIGHT - 32; -// location of window on screen + static int f_x; static int f_y; -// size of window on screen + static int f_w; static int f_h; -static int lightlev; // used for funky strobing effect -static byte* fb; // pseudo-frame buffer +static int lightlev; +static byte* fb; static int amclock; -static mpoint_t m_paninc; // how far the window pans each tic (map coords) -static fixed_t mtof_zoommul; // how far the window zooms in each tic (map coords) -static fixed_t ftom_zoommul; // how far the window zooms in each tic (fb coords) +static mpoint_t m_paninc; +static fixed_t mtof_zoommul; +static fixed_t ftom_zoommul; + +static fixed_t m_x, m_y; +static fixed_t m_x2, m_y2; + + -static fixed_t m_x, m_y; // LL x,y where the window is on the map (map coords) -static fixed_t m_x2, m_y2; // UR x,y where the window is on the map (map coords) -// -// width/height of window on map (map coords) -// static fixed_t m_w; static fixed_t m_h; -// based on level size + static fixed_t min_x; static fixed_t min_y; static fixed_t max_x; static fixed_t max_y; -static fixed_t max_w; // max_x-min_x, -static fixed_t max_h; // max_y-min_y +static fixed_t max_w; +static fixed_t max_h; + -// based on player size static fixed_t min_w; static fixed_t min_h; -static fixed_t min_scale_mtof; // used to tell when to stop zooming out -static fixed_t max_scale_mtof; // used to tell when to stop zooming in +static fixed_t min_scale_mtof; +static fixed_t max_scale_mtof; + -// old stuff for recovery later static fixed_t old_m_w, old_m_h; static fixed_t old_m_x, old_m_y; -// old location used by the Follower routine + static mpoint_t f_oldloc; -// used by MTOF to scale from map-to-frame-buffer coords + static fixed_t scale_mtof = INITSCALEMTOF; -// used by FTOM to scale from frame-buffer-to-map coords (=1/scale_mtof) + static fixed_t scale_ftom; -static player_t *plr; // the player represented by an arrow +static player_t *plr; -static patch_t *marknums[10]; // numbers used for marking by the automap -static mpoint_t markpoints[AM_NUMMARKPOINTS]; // where the points are -static int markpointnum = 0; // next point to be assigned +static patch_t *marknums[10]; +static mpoint_t markpoints[AM_NUMMARKPOINTS]; +static int markpointnum = 0; -static int followplayer = 1; // specifies whether to follow the player around +static int followplayer = 1; static unsigned char cheat_amap_seq[] = { 0xb2, 0x26, 0x26, 0x2e, 0xff }; static cheatseq_t cheat_amap = { cheat_amap_seq, 0 }; @@ -290,7 +290,7 @@ static cheatseq_t cheat_amap = { cheat_amap_seq, 0 }; static boolean stopped = true; extern boolean viewactive; -//extern byte screens[][SCREENWIDTH*SCREENHEIGHT]; + @@ -301,9 +301,9 @@ V_MarkRect int width, int height ); -// Calculates the slope and slope according to the x-axis of a line -// segment in map coordinates (with the upright y-axis n' all) so -// that it can be used with the brain-dead drawing stuff. + + + void AM_getIslope @@ -321,9 +321,9 @@ AM_getIslope } -// -// -// + + + void AM_activateNewScale(void) { m_x += m_w/2; @@ -336,9 +336,9 @@ void AM_activateNewScale(void) m_y2 = m_y + m_h; } -// -// -// + + + void AM_saveScaleAndLoc(void) { old_m_x = m_x; @@ -347,9 +347,9 @@ void AM_saveScaleAndLoc(void) old_m_h = m_h; } -// -// -// + + + void AM_restoreScaleAndLoc(void) { @@ -366,14 +366,14 @@ void AM_restoreScaleAndLoc(void) m_x2 = m_x + m_w; m_y2 = m_y + m_h; - // Change the scaling multipliers + scale_mtof = FixedDiv(f_w<<FRACBITS, m_w); scale_ftom = FixedDiv(FRACUNIT, scale_mtof); } -// -// adds a marker at the current location -// + + + void AM_addMark(void) { markpoints[markpointnum].x = m_x + m_w/2; @@ -382,10 +382,10 @@ void AM_addMark(void) } -// -// Determines bounding box of all vertices, -// sets global variables controlling zoom range. -// + + + + void AM_findMinMaxBoundaries(void) { int i; @@ -411,7 +411,7 @@ void AM_findMinMaxBoundaries(void) max_w = max_x - min_x; max_h = max_y - min_y; - min_w = 2*PLAYERRADIUS; // const? never changed? + min_w = 2*PLAYERRADIUS; min_h = 2*PLAYERRADIUS; a = FixedDiv(f_w<<FRACBITS, max_w); @@ -423,9 +423,9 @@ void AM_findMinMaxBoundaries(void) } -// -// -// + + + void AM_changeWindowLoc(void) { if (m_paninc.x || m_paninc.y) @@ -452,9 +452,9 @@ void AM_changeWindowLoc(void) } -// -// -// + + + void AM_initVariables(void) { int pnum; @@ -474,7 +474,7 @@ void AM_initVariables(void) m_w = FTOM(f_w); m_h = FTOM(f_h); - // find player to center on initially + if (!playeringame[pnum = consoleplayer]) for (pnum=0;pnum<MAXPLAYERS;pnum++) if (playeringame[pnum]) @@ -485,20 +485,20 @@ void AM_initVariables(void) m_y = plr->mo->y - m_h/2; AM_changeWindowLoc(); - // for saving & restoring + old_m_x = m_x; old_m_y = m_y; old_m_w = m_w; old_m_h = m_h; - // inform the status bar of the change + ST_Responder(&st_notify); } -// -// -// + + + void AM_loadPics(void) { int i; @@ -526,14 +526,14 @@ void AM_clearMarks(void) int i; for (i=0;i<AM_NUMMARKPOINTS;i++) - markpoints[i].x = -1; // means empty + markpoints[i].x = -1; markpointnum = 0; } -// -// should be called at the start of every level -// right now, i figure it out myself -// + + + + void AM_LevelInit(void) { leveljuststarted = 0; @@ -554,9 +554,9 @@ void AM_LevelInit(void) -// -// -// + + + void AM_Stop (void) { static event_t st_notify = { 0, ev_keyup, AM_MSGEXITED }; @@ -567,9 +567,9 @@ void AM_Stop (void) stopped = true; } -// -// -// + + + void AM_Start (void) { static int lastlevel = -1, lastepisode = -1; @@ -586,9 +586,9 @@ void AM_Start (void) AM_loadPics(); } -// -// set the window scale to the maximum size -// + + + void AM_minOutWindowScale(void) { scale_mtof = min_scale_mtof; @@ -596,9 +596,9 @@ void AM_minOutWindowScale(void) AM_activateNewScale(); } -// -// set the window scale to the minimum size -// + + + void AM_maxOutWindowScale(void) { scale_mtof = max_scale_mtof; @@ -607,9 +607,9 @@ void AM_maxOutWindowScale(void) } -// -// Handle events (user inputs) in automap mode -// + + + boolean AM_Responder ( event_t* ev ) @@ -638,27 +638,27 @@ AM_Responder rc = true; switch(ev->data1) { - case AM_PANRIGHTKEY: // pan right + case AM_PANRIGHTKEY: if (!followplayer) m_paninc.x = FTOM(F_PANINC); else rc = false; break; - case AM_PANLEFTKEY: // pan left + case AM_PANLEFTKEY: if (!followplayer) m_paninc.x = -FTOM(F_PANINC); else rc = false; break; - case AM_PANUPKEY: // pan up + case AM_PANUPKEY: if (!followplayer) m_paninc.y = FTOM(F_PANINC); else rc = false; break; - case AM_PANDOWNKEY: // pan down + case AM_PANDOWNKEY: if (!followplayer) m_paninc.y = -FTOM(F_PANINC); else rc = false; break; - case AM_ZOOMOUTKEY: // zoom out + case AM_ZOOMOUTKEY: mtof_zoommul = M_ZOOMOUT; ftom_zoommul = M_ZOOMIN; break; - case AM_ZOOMINKEY: // zoom in + case AM_ZOOMINKEY: mtof_zoommul = M_ZOOMIN; ftom_zoommul = M_ZOOMOUT; break; @@ -735,13 +735,13 @@ AM_Responder } -// -// Zooming -// + + + void AM_changeWindowScale(void) { - // Change the scaling multipliers + scale_mtof = FixedMul(scale_mtof, mtof_zoommul); scale_ftom = FixedDiv(FRACUNIT, scale_mtof); @@ -754,9 +754,9 @@ void AM_changeWindowScale(void) } -// -// -// + + + void AM_doFollowPlayer(void) { @@ -769,26 +769,26 @@ void AM_doFollowPlayer(void) f_oldloc.x = plr->mo->x; f_oldloc.y = plr->mo->y; - // m_x = FTOM(MTOF(plr->mo->x - m_w/2)); - // m_y = FTOM(MTOF(plr->mo->y - m_h/2)); - // m_x = plr->mo->x - m_w/2; - // m_y = plr->mo->y - m_h/2; + + + + } } -// -// -// + + + void AM_updateLightLev(void) { static nexttic = 0; - //static int litelevels[] = { 0, 3, 5, 6, 6, 7, 7, 7 }; + static int litelevels[] = { 0, 4, 7, 10, 12, 14, 15, 15 }; static int litelevelscnt = 0; - // Change light level + if (amclock>nexttic) { lightlev = litelevels[litelevelscnt++]; @@ -799,9 +799,9 @@ void AM_updateLightLev(void) } -// -// Updates on Game Tick -// + + + void AM_Ticker (void) { @@ -813,36 +813,36 @@ void AM_Ticker (void) if (followplayer) AM_doFollowPlayer(); - // Change the zoom if necessary + if (ftom_zoommul != FRACUNIT) AM_changeWindowScale(); - // Change x,y location + if (m_paninc.x || m_paninc.y) AM_changeWindowLoc(); - // Update light level - // AM_updateLightLev(); + + } -// -// Clear automap frame buffer. -// + + + void AM_clearFB(int color) { memset(fb, color, f_w*f_h); } -// -// Automap clipping of lines. -// -// Based on Cohen-Sutherland clipping algorithm but with a slightly -// faster reject and precalculated slopes. If the speed is needed, -// use a hash algorithm to handle the common cases. -// + + + + + + + boolean AM_clipMline ( mline_t* ml, @@ -873,7 +873,7 @@ AM_clipMline else if ((mx) >= f_w) (oc) |= RIGHT; - // do trivial rejects and outcodes + if (ml->a.y > m_y2) outcode1 = TOP; else if (ml->a.y < m_y) @@ -885,7 +885,7 @@ AM_clipMline outcode2 = BOTTOM; if (outcode1 & outcode2) - return false; // trivially outside + return false; if (ml->a.x < m_x) outcode1 |= LEFT; @@ -898,9 +898,9 @@ AM_clipMline outcode2 |= RIGHT; if (outcode1 & outcode2) - return false; // trivially outside + return false; - // transform to frame-buffer coordinates. + fl->a.x = CXMTOF(ml->a.x); fl->a.y = CYMTOF(ml->a.y); fl->b.x = CXMTOF(ml->b.x); @@ -914,14 +914,14 @@ AM_clipMline while (outcode1 | outcode2) { - // may be partially inside box - // find an outside point + + if (outcode1) outside = outcode1; else outside = outcode2; - // clip to each side + if (outside & TOP) { dy = fl->a.y - fl->b.y; @@ -963,7 +963,7 @@ AM_clipMline } if (outcode1 & outcode2) - return false; // trivially outside + return false; } return true; @@ -971,9 +971,9 @@ AM_clipMline #undef DOOUTCODE -// -// Classic Bresenham w/ whatever optimizations needed for speed -// + + + void AM_drawFline ( fline_t* fl, @@ -991,7 +991,7 @@ AM_drawFline static fuck = 0; - // For debugging only + if ( fl->a.x < 0 || fl->a.x >= f_w || fl->a.y < 0 || fl->a.y >= f_h || fl->b.x < 0 || fl->b.x >= f_w @@ -1049,9 +1049,9 @@ AM_drawFline } -// -// Clip lines, draw visible part sof lines. -// + + + void AM_drawMline ( mline_t* ml, @@ -1060,28 +1060,28 @@ AM_drawMline static fline_t fl; if (AM_clipMline(ml, &fl)) - AM_drawFline(&fl, color); // draws it on frame buffer using fb coords + AM_drawFline(&fl, color); } -// -// Draws flat (floor/ceiling tile) aligned grid lines. -// + + + void AM_drawGrid(int color) { fixed_t x, y; fixed_t start, end; mline_t ml; - // Figure out start of vertical gridlines + start = m_x; if ((start-bmaporgx)%(MAPBLOCKUNITS<<FRACBITS)) start += (MAPBLOCKUNITS<<FRACBITS) - ((start-bmaporgx)%(MAPBLOCKUNITS<<FRACBITS)); end = m_x + m_w; - // draw vertical gridlines + ml.a.y = m_y; ml.b.y = m_y+m_h; for (x=start; x<end; x+=(MAPBLOCKUNITS<<FRACBITS)) @@ -1091,14 +1091,14 @@ void AM_drawGrid(int color) AM_drawMline(&ml, color); } - // Figure out start of horizontal gridlines + start = m_y; if ((start-bmaporgy)%(MAPBLOCKUNITS<<FRACBITS)) start += (MAPBLOCKUNITS<<FRACBITS) - ((start-bmaporgy)%(MAPBLOCKUNITS<<FRACBITS)); end = m_y + m_h; - // draw horizontal gridlines + ml.a.x = m_x; ml.b.x = m_x + m_w; for (y=start; y<end; y+=(MAPBLOCKUNITS<<FRACBITS)) @@ -1110,10 +1110,10 @@ void AM_drawGrid(int color) } -// -// Determines visible lines, draws them. -// This is LineDef based, not LineSeg based. -// + + + + void AM_drawWalls(void) { int i; @@ -1136,21 +1136,21 @@ void AM_drawWalls(void) else { if (lines[i].special == 39) - { // teleporters + { AM_drawMline(&l, WALLCOLORS+WALLRANGE/2); } - else if (lines[i].flags & ML_SECRET) // secret door + else if (lines[i].flags & ML_SECRET) { if (cheating) AM_drawMline(&l, SECRETWALLCOLORS + lightlev); else AM_drawMline(&l, WALLCOLORS+lightlev); } else if (lines[i].backsector->floorheight != lines[i].frontsector->floorheight) { - AM_drawMline(&l, FDWALLCOLORS + lightlev); // floor level change + AM_drawMline(&l, FDWALLCOLORS + lightlev); } else if (lines[i].backsector->ceilingheight != lines[i].frontsector->ceilingheight) { - AM_drawMline(&l, CDWALLCOLORS+lightlev); // ceiling level change + AM_drawMline(&l, CDWALLCOLORS+lightlev); } else if (cheating) { AM_drawMline(&l, TSWALLCOLORS+lightlev); @@ -1165,10 +1165,10 @@ void AM_drawWalls(void) } -// -// Rotation in 2D. -// Used to rotate player arrow line character. -// + + + + void AM_rotate ( fixed_t* x, @@ -1270,7 +1270,7 @@ void AM_drawPlayers(void) continue; if (p->powers[pw_invisibility]) - color = 246; // *close* to black + color = 246; else color = their_colors[their_color]; @@ -1310,10 +1310,10 @@ void AM_drawMarks(void) { if (markpoints[i].x != -1) { - // w = SHORT(marknums[i]->width); - // h = SHORT(marknums[i]->height); - w = 5; // because something's wrong with the wad, i guess - h = 6; // because something's wrong with the wad, i guess + + + w = 5; + h = 6; fx = CXMTOF(markpoints[i].x); fy = CYMTOF(markpoints[i].y); if (fx >= f_x && fx <= f_w - w && fy >= f_y && fy <= f_h - h) @@ -1325,7 +1325,7 @@ void AM_drawMarks(void) void AM_drawCrosshair(int color) { - fb[(f_w*(f_h+1))/2] = color; // single point for now + fb[(f_w*(f_h+1))/2] = color; } diff --git a/src/am_map.h b/src/am_map.h @@ -1,52 +1,52 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// AutoMap module. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __AMMAP_H__ #define __AMMAP_H__ -// Used by ST StatusBar stuff. + #define AM_MSGHEADER (('a'<<24)+('m'<<16)) #define AM_MSGENTERED (AM_MSGHEADER | ('e'<<8)) #define AM_MSGEXITED (AM_MSGHEADER | ('x'<<8)) -// Called by main loop. + boolean AM_Responder (event_t* ev); -// Called by main loop. + void AM_Ticker (void); -// Called by main loop, -// called instead of view drawer if automap active. + + void AM_Drawer (void); -// Called to force the automap to quit -// if the level is completed while it is up. + + void AM_Stop (void); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/d_englsh.h b/src/d_englsh.h @@ -1,41 +1,41 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// Printed strings for translation. -// English language support (default). -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + #ifndef __D_ENGLSH__ #define __D_ENGLSH__ -// -// Printed strings for translation -// -// -// D_Main.C -// + + + + + + #define D_DEVSTR "Development mode ON.\n" #define D_CDROM "CD-ROM Version: default.cfg from c:\\doomdata\n" -// -// M_Menu.C -// + + + #define PRESSKEY "press a key." #define PRESSYN "press y or n." #define QUITMSG "are you sure you want to\nquit this great game?" @@ -74,9 +74,9 @@ #define GAMMALVL4 "Gamma correction level 4" #define EMPTYSTRING "empty slot" -// -// P_inter.C -// + + + #define GOTARMOR "Picked up the armor." #define GOTMEGA "Picked up the MegaArmor!" #define GOTHTHBONUS "Picked up a health bonus." @@ -119,9 +119,9 @@ #define GOTSHOTGUN "You got the shotgun!" #define GOTSHOTGUN2 "You got the super shotgun!" -// -// P_Doors.C -// + + + #define PD_BLUEO "You need a blue key to activate this object" #define PD_REDO "You need a red key to activate this object" #define PD_YELLOWO "You need a yellow key to activate this object" @@ -129,14 +129,14 @@ #define PD_REDK "You need a red key to open this door" #define PD_YELLOWK "You need a yellow key to open this door" -// -// G_game.C -// + + + #define GGSAVED "game saved." -// -// HU_stuff.C -// + + + #define HUSTR_MSGU "[Message unsent]" #define HUSTR_E1M1 "E1M1: Hangar" @@ -306,8 +306,8 @@ #define HUSTR_MESSAGESENT "[Message Sent]" -// The following should NOT be changed unless it seems -// just AWFULLY necessary + + #define HUSTR_PLRGREEN "Green: " #define HUSTR_PLRINDIGO "Indigo: " @@ -319,9 +319,9 @@ #define HUSTR_KEYBROWN 'b' #define HUSTR_KEYRED 'r' -// -// AM_map.C -// + + + #define AMSTR_FOLLOWON "Follow Mode ON" #define AMSTR_FOLLOWOFF "Follow Mode OFF" @@ -332,9 +332,9 @@ #define AMSTR_MARKEDSPOT "Marked Spot" #define AMSTR_MARKSCLEARED "All Marks Cleared" -// -// ST_stuff.C -// + + + #define STSTR_MUS "Music Change" #define STSTR_NOMUS "IMPOSSIBLE SELECTION" @@ -353,9 +353,9 @@ #define STSTR_CHOPPERS "... doesn't suck - GM" #define STSTR_CLEV "Changing Level..." -// -// F_Finale.C -// + + + #define E1TEXT \ "Once you beat the big badasses and\n"\ "clean out the moon base you're supposed\n"\ @@ -433,7 +433,7 @@ "next stop, hell on earth!" -// after level 6, put this: + #define C1TEXT \ "YOU HAVE ENTERED DEEPLY INTO THE INFESTED\n" \ @@ -449,7 +449,7 @@ "SWITCH WHICH HOLDS EARTH'S POPULATION\n" \ "HOSTAGE." -// After level 11, put this: + #define C2TEXT \ "YOU HAVE WON! YOUR VICTORY HAS ENABLED\n" \ @@ -471,7 +471,7 @@ "UP AND RETURN TO THE FRAY." -// After level 20, put this: + #define C3TEXT \ "YOU ARE AT THE CORRUPT HEART OF THE CITY,\n"\ @@ -485,7 +485,7 @@ "GOT TO GO THROUGH HELL TO GET TO IT?" -// After level 29, put this: + #define C4TEXT \ "THE HORRENDOUS VISAGE OF THE BIGGEST\n"\ @@ -506,7 +506,7 @@ -// Before level 31, put this: + #define C5TEXT \ "CONGRATULATIONS, YOU'VE FOUND THE SECRET\n"\ @@ -516,7 +516,7 @@ "WILL BE." -// Before level 32, put this: + #define C6TEXT \ "CONGRATULATIONS, YOU'VE FOUND THE\n"\ @@ -524,7 +524,7 @@ "BLAZE THROUGH THIS ONE!\n" -// after map 06 + #define P1TEXT \ "You gloat over the steaming carcass of the\n"\ @@ -541,7 +541,7 @@ "Oh yes, keep living, too." -// after map 11 + #define P2TEXT \ "Even the deadly Arch-Vile labyrinth could\n"\ @@ -552,7 +552,7 @@ "You're good at that kind of thing." -// after map 20 + #define P3TEXT \ "You've bashed and battered your way into\n"\ @@ -566,7 +566,7 @@ "get ready to give the bastard a little Hell\n"\ "of your own making!" -// after map 30 + #define P4TEXT \ "The Gatekeeper's evil face is splattered\n"\ @@ -582,7 +582,7 @@ "when you die, you'll need it for some\n"\ "final cleaning-up ..." -// before map 31 + #define P5TEXT \ "You've found the second-hardest level we\n"\ @@ -590,7 +590,7 @@ "two previous. If not, be prepared to die\n"\ "aplenty. For master marines only." -// before map 32 + #define P6TEXT \ "Betcha wondered just what WAS the hardest\n"\ @@ -671,9 +671,9 @@ -// -// Character cast strings F_FINALE.C -// + + + #define CC_ZOMBIE "ZOMBIEMAN" #define CC_SHOTGUN "SHOTGUN GUY" #define CC_HEAVY "HEAVY WEAPON DUDE" @@ -694,8 +694,8 @@ #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/d_event.h b/src/d_event.h @@ -1,23 +1,23 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __D_EVENT__ @@ -27,11 +27,11 @@ #include "doomtype.h" -// -// Event handling. -// -// Input event types. + + + + typedef enum { ev_keydown, @@ -40,13 +40,13 @@ typedef enum ev_joystick } evtype_t; -// Event structure. + typedef struct { evtype_t type; - int data1; // keys / mouse/joystick buttons - int data2; // mouse/joystick x move - int data3; // mouse/joystick y move + int data1; + int data2; + int data3; } event_t; @@ -66,34 +66,34 @@ typedef enum -// -// Button/action code definitions. -// + + + typedef enum { - // Press "Fire". + BT_ATTACK = 1, - // Use button, to open doors, activate switches. + BT_USE = 2, - // Flag: game events, not really buttons. + BT_SPECIAL = 128, BT_SPECIALMASK = 3, - // Flag, weapon change pending. - // If true, the next 3 bits hold weapon num. + + BT_CHANGE = 4, - // The 3bit weapon mask and shift, convenience. + BT_WEAPONMASK = (8+16+32), BT_WEAPONSHIFT = 3, - // Pause the game. + BTS_PAUSE = 1, - // Save the game at each console. + BTS_SAVEGAME = 2, - // Savegame slot numbers - // occupy the second byte of buttons. + + BTS_SAVEMASK = (4+8+16), BTS_SAVESHIFT = 2, @@ -102,9 +102,9 @@ typedef enum -// -// GLOBAL VARIABLES -// + + + #define MAXEVENTS 64 extern event_t events[MAXEVENTS]; @@ -115,8 +115,8 @@ extern gameaction_t gameaction; #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/d_french.h b/src/d_french.h @@ -1,37 +1,37 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// Printed strings, french translation. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __D_FRENCH__ #define __D_FRENCH__ -// -// D_Main.C -// + + + #define D_DEVSTR "MODE DEVELOPPEMENT ON.\n" #define D_CDROM "VERSION CD-ROM: DEFAULT.CFG DANS C:\\DOOMDATA\n" -// -// M_Menu.C -// + + + #define PRESSKEY "APPUYEZ SUR UNE TOUCHE." #define PRESSYN "APPUYEZ SUR Y OU N" #define QUITMSG "VOUS VOULEZ VRAIMENT\nQUITTER CE SUPER JEU?" @@ -66,9 +66,9 @@ #define GAMMALVL4 "CORRECTION GAMMA NIVEAU 4" #define EMPTYSTRING "EMPLACEMENT VIDE" -// -// P_inter.C -// + + + #define GOTARMOR "ARMURE RECUPEREE." #define GOTMEGA "MEGA-ARMURE RECUPEREE!" #define GOTHTHBONUS "BONUS DE SANTE RECUPERE." @@ -111,9 +111,9 @@ #define GOTSHOTGUN "VOUS AVEZ UN FUSIL!" #define GOTSHOTGUN2 "VOUS AVEZ UN SUPER FUSIL!" -// -// P_Doors.C -// + + + #define PD_BLUEO "IL VOUS FAUT UNE CLEF BLEUE" #define PD_REDO "IL VOUS FAUT UNE CLEF ROUGE" #define PD_YELLOWO "IL VOUS FAUT UNE CLEF JAUNE" @@ -121,14 +121,14 @@ #define PD_REDK PD_REDO #define PD_YELLOWK PD_YELLOWO -// -// G_game.C -// + + + #define GGSAVED "JEU SAUVEGARDE." -// -// HU_stuff.C -// + + + #define HUSTR_MSGU "[MESSAGE NON ENVOYE]" #define HUSTR_E1M1 "E1M1: HANGAR" @@ -217,22 +217,22 @@ #define HUSTR_MESSAGESENT "[MESSAGE ENVOYE]" -// The following should NOT be changed unless it seems -// just AWFULLY necessary + + #define HUSTR_PLRGREEN "VERT: " #define HUSTR_PLRINDIGO "INDIGO: " #define HUSTR_PLRBROWN "BRUN: " #define HUSTR_PLRRED "ROUGE: " -#define HUSTR_KEYGREEN 'g' // french key should be "V" +#define HUSTR_KEYGREEN 'g' #define HUSTR_KEYINDIGO 'i' #define HUSTR_KEYBROWN 'b' #define HUSTR_KEYRED 'r' -// -// AM_map.C -// + + + #define AMSTR_FOLLOWON "MODE POURSUITE ON" #define AMSTR_FOLLOWOFF "MODE POURSUITE OFF" @@ -243,9 +243,9 @@ #define AMSTR_MARKEDSPOT "REPERE MARQUE " #define AMSTR_MARKSCLEARED "REPERES EFFACES " -// -// ST_stuff.C -// + + + #define STSTR_MUS "CHANGEMENT DE MUSIQUE " #define STSTR_NOMUS "IMPOSSIBLE SELECTION" @@ -264,9 +264,9 @@ #define STSTR_CHOPPERS "... DOESN'T SUCK - GM" #define STSTR_CLEV "CHANGEMENT DE NIVEAU..." -// -// F_Finale.C -// + + + #define E1TEXT "APRES AVOIR VAINCU LES GROS MECHANTS\n"\ "ET NETTOYE LA BASE LUNAIRE, VOUS AVEZ\n"\ "GAGNE, NON? PAS VRAI? OU EST DONC VOTRE\n"\ @@ -321,7 +321,7 @@ -// after level 6, put this: + #define C1TEXT "VOUS ETES AU PLUS PROFOND DE L'ASTROPORT\n" \ "INFESTE DE MONSTRES, MAIS QUELQUE CHOSE\n" \ @@ -336,7 +336,7 @@ "L'INTERRUPTEUR DE CONTROLE QUI GARDE LA \n" \ "POPULATION DE LA TERRE EN OTAGE." -// After level 11, put this: + #define C2TEXT "VOUS AVEZ GAGNE! VOTRE VICTOIRE A PERMIS\n" \ "A L'HUMANITE D'EVACUER LA TERRE ET \n"\ @@ -356,7 +356,7 @@ "VOUS VOUS RELEVEZ LENTEMENT ET PENIBLEMENT\n"\ "ET VOUS REPARTEZ POUR LE FRONT." -// After level 20, put this: + #define C3TEXT "VOUS ETES AU COEUR DE LA CITE CORROMPUE,\n"\ "ENTOURE PAR LES CADAVRES DE VOS ENNEMIS.\n"\ @@ -368,7 +368,7 @@ "DE L'AUTRE COTE. VOUS ACCEPTEZ DE\n"\ "TRAVERSER L'ENFER POUR LE FAIRE?" -// After level 29, put this: + #define C4TEXT "LE VISAGE HORRIBLE D'UN DEMON D'UNE\n"\ "TAILLE INCROYABLE S'EFFONDRE DEVANT\n"\ @@ -386,7 +386,7 @@ "VERS LA TERRE. SA RECONSTRUCTION SERA\n"\ "BEAUCOUP PLUS DROLE QUE SA DESTRUCTION.\n" -// Before level 31, put this: + #define C5TEXT "FELICITATIONS! VOUS AVEZ TROUVE LE\n"\ "NIVEAU SECRET! IL SEMBLE AVOIR ETE\n"\ @@ -394,15 +394,15 @@ "DEMANDEZ QUELS PEUVENT ETRE LES\n"\ "HABITANTS DE CE COIN PERDU DE L'ENFER." -// Before level 32, put this: + #define C6TEXT "FELICITATIONS! VOUS AVEZ DECOUVERT\n"\ "LE NIVEAU SUPER SECRET! VOUS FERIEZ\n"\ "MIEUX DE FONCER DANS CELUI-LA!\n" -// -// Character cast strings F_FINALE.C -// + + + #define CC_ZOMBIE "ZOMBIE" #define CC_SHOTGUN "TYPE AU FUSIL" #define CC_HEAVY "MEC SUPER-ARME" @@ -424,10 +424,10 @@ #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/d_items.c b/src/d_items.c @@ -1,29 +1,29 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id:$"; -// We are referring to sprite numbers. + #include "info.h" #ifdef __GNUG__ @@ -32,22 +32,22 @@ rcsid[] = "$Id:$"; #include "d_items.h" -// -// PSPRITE ACTIONS for waepons. -// This struct controls the weapon animations. -// -// Each entry is: -// ammo/amunition type -// upstate -// downstate -// readystate -// atkstate, i.e. attack/fire/hit frame -// flashstate, muzzle flash -// + + + + + + + + + + + + weaponinfo_t weaponinfo[NUMWEAPONS] = { { - // fist + am_noammo, S_PUNCHUP, S_PUNCHDOWN, @@ -56,7 +56,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = S_NULL }, { - // pistol + am_clip, S_PISTOLUP, S_PISTOLDOWN, @@ -65,7 +65,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = S_PISTOLFLASH }, { - // shotgun + am_shell, S_SGUNUP, S_SGUNDOWN, @@ -74,7 +74,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = S_SGUNFLASH1 }, { - // chaingun + am_clip, S_CHAINUP, S_CHAINDOWN, @@ -83,7 +83,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = S_CHAINFLASH1 }, { - // missile launcher + am_misl, S_MISSILEUP, S_MISSILEDOWN, @@ -92,7 +92,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = S_MISSILEFLASH1 }, { - // plasma rifle + am_cell, S_PLASMAUP, S_PLASMADOWN, @@ -101,7 +101,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = S_PLASMAFLASH1 }, { - // bfg 9000 + am_cell, S_BFGUP, S_BFGDOWN, @@ -110,7 +110,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = S_BFGFLASH1 }, { - // chainsaw + am_noammo, S_SAWUP, S_SAWDOWN, @@ -119,7 +119,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = S_NULL }, { - // super shotgun + am_shell, S_DSGUNUP, S_DSGUNDOWN, diff --git a/src/d_items.h b/src/d_items.h @@ -1,23 +1,23 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// Items: key cards, artifacts, weapon, ammunition. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __D_ITEMS__ @@ -30,7 +30,7 @@ #endif -// Weapon info: sprite frames, ammunition use. + typedef struct { ammotype_t ammo; @@ -45,8 +45,8 @@ typedef struct extern weaponinfo_t weaponinfo[NUMWEAPONS]; #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/d_main.c b/src/d_main.c @@ -1,28 +1,28 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// DOOM main program (D_DoomMain) and game loop (D_DoomLoop), -// plus functions to determine game mode (shareware, registered), -// parse command line parameters, configure game parameters (turbo), -// and call the startup functions. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: d_main.c,v 1.8 1997/02/03 22:45:09 b1 Exp $"; @@ -77,35 +77,35 @@ static const char rcsid[] = "$Id: d_main.c,v 1.8 1997/02/03 22:45:09 b1 Exp $"; #include "d_main.h" -// -// D-DoomLoop() -// Not a globally visible function, -// just included for source reference, -// called by D_DoomMain, never exits. -// Manages timing and IO, -// calls all ?_Responder, ?_Ticker, and ?_Drawer, -// calls I_GetTime, I_StartFrame, and I_StartTic -// + + + + + + + + + void D_DoomLoop (void); char* wadfiles[MAXWADFILES]; -boolean devparm; // started game with -devparm -boolean nomonsters; // checkparm of -nomonsters -boolean respawnparm; // checkparm of -respawn -boolean fastparm; // checkparm of -fast +boolean devparm; +boolean nomonsters; +boolean respawnparm; +boolean fastparm; boolean drone; -boolean singletics = false; // debug flag to cancel adaptiveness +boolean singletics = false; + + + -//extern int soundVolume; -//extern int sfxVolume; -//extern int musicVolume; extern boolean inhelpscreens; @@ -121,9 +121,9 @@ boolean advancedemo; -char wadfile[1024]; // primary wad file -char mapdir[1024]; // directory of development maps -char basedefault[1024]; // default file +char wadfile[1024]; +char mapdir[1024]; +char basedefault[1024]; void D_CheckNetGame (void); @@ -132,21 +132,21 @@ void G_BuildTiccmd (ticcmd_t* cmd); void D_DoAdvanceDemo (void); -// -// EVENT HANDLING -// -// Events are asynchronous inputs generally generated by the game user. -// Events can be discarded if no responder claims them -// + + + + + + event_t events[MAXEVENTS]; int eventhead; int eventtail; -// -// D_PostEvent -// Called by the I/O functions when input is detected -// + + + + void D_PostEvent (event_t* ev) { events[eventhead] = *ev; @@ -154,15 +154,15 @@ void D_PostEvent (event_t* ev) } -// -// D_ProcessEvents -// Send all the events of the given timestamp down the responder chain -// + + + + void D_ProcessEvents (void) { event_t* ev; - // IF STORE DEMO, DO NOT ACCEPT INPUT + if ( ( gamemode == commercial ) && (W_CheckNumForName("map01")<0) ) return; @@ -171,7 +171,7 @@ void D_ProcessEvents (void) { ev = &events[eventtail]; if (M_Responder (ev)) - continue; // menu ate the event + continue; G_Responder (ev); } } @@ -179,12 +179,12 @@ void D_ProcessEvents (void) -// -// D_Display -// draw current display, possibly wiping it from the previous -// -// wipegamestate can be set to -1 to force a wipe on the next draw + + + + + gamestate_t wipegamestate = GS_DEMOSCREEN; extern boolean setsizeneeded; extern int showMessages; @@ -207,19 +207,19 @@ void D_Display (void) boolean redrawsbar; if (nodrawers) - return; // for comparative timing / profiling + return; redrawsbar = false; - // change the view size if needed + if (setsizeneeded) { R_ExecuteSetViewSize (); - oldgamestate = -1; // force background redraw + oldgamestate = -1; borderdrawcount = 3; } - // save the current screen if about to wipe + if (gamestate != wipegamestate) { wipe = true; @@ -231,7 +231,7 @@ void D_Display (void) if (gamestate == GS_LEVEL && gametic) HU_Erase(); - // do buffered drawing + switch (gamestate) { case GS_LEVEL: @@ -242,7 +242,7 @@ void D_Display (void) if (wipe || (viewheight != 200 && fullscreen) ) redrawsbar = true; if (inhelpscreensstate && !inhelpscreens) - redrawsbar = true; // just put away the help screen + redrawsbar = true; ST_Drawer (viewheight == 200, redrawsbar ); fullscreen = viewheight == 200; break; @@ -260,35 +260,35 @@ void D_Display (void) break; } - // draw buffered stuff to screen + I_UpdateNoBlit (); - // draw the view directly + if (gamestate == GS_LEVEL && !automapactive && gametic) R_RenderPlayerView (&players[displayplayer]); if (gamestate == GS_LEVEL && gametic) HU_Drawer (); - // clean up border stuff + if (gamestate != oldgamestate && gamestate != GS_LEVEL) I_SetPalette (W_CacheLumpName ("PLAYPAL",PU_CACHE)); - // see if the border needs to be initially drawn + if (gamestate == GS_LEVEL && oldgamestate != GS_LEVEL) { - viewactivestate = false; // view was not active - R_FillBackScreen (); // draw the pattern into the back screen + viewactivestate = false; + R_FillBackScreen (); } - // see if the border needs to be updated to the screen + if (gamestate == GS_LEVEL && !automapactive && scaledviewwidth != 320) { if (menuactive || menuactivestate || !viewactivestate) borderdrawcount = 3; if (borderdrawcount) { - R_DrawViewBorder (); // erase old menu stuff + R_DrawViewBorder (); borderdrawcount--; } @@ -299,7 +299,7 @@ void D_Display (void) inhelpscreensstate = inhelpscreens; oldgamestate = wipegamestate = gamestate; - // draw pause pic + if (paused) { if (automapactive) @@ -311,19 +311,19 @@ void D_Display (void) } - // menus go directly to the screen - M_Drawer (); // menu is drawn even on top of everything - NetUpdate (); // send out any new accumulation + + M_Drawer (); + NetUpdate (); - // normal update + if (!wipe) { - I_FinishUpdate (); // page flip or blit buffer + I_FinishUpdate (); return; } - // wipe update + wipe_EndScreen(0, 0, SCREENWIDTH, SCREENHEIGHT); wipestart = I_GetTime () - 1; @@ -339,16 +339,16 @@ void D_Display (void) done = wipe_ScreenWipe(wipe_Melt , 0, 0, SCREENWIDTH, SCREENHEIGHT, tics); I_UpdateNoBlit (); - M_Drawer (); // menu is drawn even on top of wipes - I_FinishUpdate (); // page flip or blit buffer + M_Drawer (); + I_FinishUpdate (); } while (!done); } -// -// D_DoomLoop -// + + + extern boolean demorecording; void D_DoomLoop (void) @@ -368,10 +368,10 @@ void D_DoomLoop (void) while (1) { - // frame syncronous IO operations + I_StartFrame (); - // process one or more tics + if (singletics) { I_StartTic (); @@ -386,21 +386,21 @@ void D_DoomLoop (void) } else { - TryRunTics (); // will run at least one tic + TryRunTics (); } - S_UpdateSounds (players[consoleplayer].mo);// move positional sounds + S_UpdateSounds (players[consoleplayer].mo); - // Update display, next frame, with current state. + D_Display (); #ifndef SNDSERV - // Sound mixing for the buffer is snychronous. + I_UpdateSound(); #endif - // Synchronous sound output is explicitly called. + #ifndef SNDINTR - // Update sound output. + I_SubmitSound(); #endif } @@ -408,18 +408,18 @@ void D_DoomLoop (void) -// -// DEMO LOOP -// + + + int demosequence; int pagetic; char *pagename; -// -// D_PageTicker -// Handles timing for warped projection -// + + + + void D_PageTicker (void) { if (--pagetic < 0) @@ -428,34 +428,34 @@ void D_PageTicker (void) -// -// D_PageDrawer -// + + + void D_PageDrawer (void) { V_DrawPatch (0,0, 0, W_CacheLumpName(pagename, PU_CACHE)); } -// -// D_AdvanceDemo -// Called after each demo or intro demosequence finishes -// + + + + void D_AdvanceDemo (void) { advancedemo = true; } -// -// This cycles through the demo sequences. -// FIXME - version dependend demo numbers? -// + + + + void D_DoAdvanceDemo (void) { - players[consoleplayer].playerstate = PST_LIVE; // not reborn + players[consoleplayer].playerstate = PST_LIVE; advancedemo = false; - usergame = false; // no save / end game here + usergame = false; paused = false; gameaction = ga_nothing; @@ -510,7 +510,7 @@ void D_AdvanceDemo (void) case 5: G_DeferedPlayDemo ("demo3"); break; - // THE DEFINITIVE DOOM Special Edition demo + case 6: G_DeferedPlayDemo ("demo4"); break; @@ -519,9 +519,9 @@ void D_AdvanceDemo (void) -// -// D_StartTitle -// + + + void D_StartTitle (void) { gameaction = ga_nothing; @@ -532,14 +532,14 @@ void D_StartTitle (void) -// print title for every printed line + char title[128]; -// -// D_AddFile -// + + + void D_AddFile (char *file) { int numwadfiles; @@ -554,12 +554,12 @@ void D_AddFile (char *file) wadfiles[numwadfiles] = newfile; } -// -// IdentifyVersion -// Checks availability of IWAD files by name, -// to determine whether registered/commercial features -// should be executed (notably loading PWAD's). -// + + + + + + void IdentifyVersion (void) { @@ -579,24 +579,24 @@ void IdentifyVersion (void) if (!doomwaddir) doomwaddir = "."; - // Commercial. + doom2wad = malloc(strlen(doomwaddir)+1+9+1); sprintf(doom2wad, "%s/doom2.wad", doomwaddir); - // Retail. + doomuwad = malloc(strlen(doomwaddir)+1+8+1); sprintf(doomuwad, "%s/doomu.wad", doomwaddir); - // Registered. + doomwad = malloc(strlen(doomwaddir)+1+8+1); sprintf(doomwad, "%s/doom.wad", doomwaddir); - // Shareware. + doom1wad = malloc(strlen(doomwaddir)+1+9+1); sprintf(doom1wad, "%s/doom1.wad", doomwaddir); - // Bug, dear Shawn. - // Insufficient malloc, caused spurious realloc errors. + + plutoniawad = malloc(strlen(doomwaddir)+1+/*9*/12+1); sprintf(plutoniawad, "%s/plutonia.wad", doomwaddir); @@ -604,7 +604,7 @@ void IdentifyVersion (void) sprintf(tntwad, "%s/tnt.wad", doomwaddir); - // French stuff. + doom2fwad = malloc(strlen(doomwaddir)+1+10+1); sprintf(doom2fwad, "%s/doom2f.wad", doomwaddir); @@ -658,8 +658,8 @@ void IdentifyVersion (void) if ( !access (doom2fwad,R_OK) ) { gamemode = commercial; - // C'est ridicule! - // Let's handle languages in config files, okay? + + language = french; printf("French version\n"); D_AddFile (doom2fwad); @@ -711,14 +711,14 @@ void IdentifyVersion (void) printf("Game mode indeterminate.\n"); gamemode = indetermined; - // We don't abort. Let's see what the PWAD contains. - //exit(1); - //I_Error ("Game mode indeterminate\n"); + + + } -// -// Find a Response File -// + + + void FindResponseFile (void) { int i; @@ -737,7 +737,7 @@ void FindResponseFile (void) char *moreargs[20]; char *firstargv; - // READ THE RESPONSE FILE INTO MEMORY + handle = fopen (&myargv[i][1],"rb"); if (!handle) { @@ -752,7 +752,7 @@ void FindResponseFile (void) fread (file,size,1,handle); fclose (handle); - // KEEP ALL CMDLINE ARGS FOLLOWING @RESPONSEFILE ARG + for (index = 0,k = i+1; k < myargc; k++) moreargs[index++] = myargv[k]; @@ -763,7 +763,7 @@ void FindResponseFile (void) infile = file; indexinfile = k = 0; - indexinfile++; // SKIP PAST ARGV[0] (KEEP IT) + indexinfile++; do { myargv[indexinfile++] = infile+k; @@ -780,7 +780,7 @@ void FindResponseFile (void) myargv[indexinfile++] = moreargs[k]; myargc = indexinfile; - // DISPLAY ARGS + printf("%d command-line args:\n",myargc); for (k=1;k<myargc;k++) printf("%s\n",myargv[k]); @@ -790,9 +790,9 @@ void FindResponseFile (void) } -// -// D_DoomMain -// + + + void D_DoomMain (void) { int p; @@ -881,7 +881,7 @@ void D_DoomMain (void) strcpy (basedefault,"c:/doomdata/default.cfg"); } - // turbo option + if ( (p=M_CheckParm ("-turbo")) ) { int scale = 200; @@ -901,17 +901,17 @@ void D_DoomMain (void) sidemove[1] = sidemove[1]*scale/100; } - // add any files specified on the command line with -file wadfile - // to the wad list - // - // convenience hack to allow -wart e m to add a wad file - // prepend a tilde to the filename so wadfile will be reloadable + + + + + p = M_CheckParm ("-wart"); if (p) { - myargv[p][4] = 'p'; // big hack, change to -warp + myargv[p][4] = 'p'; - // Map name handling. + switch (gamemode ) { case shareware: @@ -938,9 +938,9 @@ void D_DoomMain (void) p = M_CheckParm ("-file"); if (p) { - // the parms after p are wadfile/lump names, - // until end of parms or another - preceded parm - modifiedgame = true; // homebrew levels + + + modifiedgame = true; while (++p != myargc && myargv[p][0] != '-') D_AddFile (myargv[p]); } @@ -957,7 +957,7 @@ void D_DoomMain (void) printf("Playing demo %s.lmp.\n",myargv[p+1]); } - // get skill / episode / map from parms + startskill = sk_medium; startepisode = 1; startmap = 1; @@ -1007,12 +1007,12 @@ void D_DoomMain (void) autostart = true; } - // init subsystems + printf ("V_Init: allocate screens.\n"); V_Init (); printf ("M_LoadDefaults: Load system defaults.\n"); - M_LoadDefaults (); // load before initing other systems + M_LoadDefaults (); printf ("Z_Init: Init zone memory allocation daemon. \n"); Z_Init (); @@ -1021,11 +1021,11 @@ void D_DoomMain (void) W_InitMultipleFiles (wadfiles); - // Check for -file in shareware + if (modifiedgame) { - // These are the lumps that will be checked in IWAD, - // if any one is not present, execution will be aborted. + + char name[23][8]= { "e2m1","e2m2","e2m3","e2m4","e2m5","e2m6","e2m7","e2m8","e2m9", @@ -1038,15 +1038,15 @@ void D_DoomMain (void) I_Error("\nYou cannot -file with the shareware " "version. Register!"); - // Check for fake IWAD with right name, - // but w/o all the lumps of the registered version. + + if (gamemode == registered) for (i = 0;i < 23; i++) if (W_CheckNumForName(name[i])<0) I_Error("\nThis is not the registered version."); } - // Iff additonal PWAD files are used, print modified banner + if (modifiedgame) { /*m*/printf ( @@ -1061,7 +1061,7 @@ void D_DoomMain (void) } - // Check and print which version is executed. + switch ( gamemode ) { case shareware: @@ -1084,7 +1084,7 @@ void D_DoomMain (void) break; default: - // Ouch. + break; } @@ -1112,18 +1112,18 @@ void D_DoomMain (void) printf ("ST_Init: Init status bar.\n"); ST_Init (); - // check for a driver that wants intermission stats + p = M_CheckParm ("-statcopy"); if (p && p<myargc-1) { - // for statistics driver + extern void* statcopy; statcopy = (void*)atoi(myargv[p+1]); printf ("External statistics registered.\n"); } - // start the apropriate game based on parms + p = M_CheckParm ("-record"); if (p && p < myargc-1) @@ -1135,16 +1135,16 @@ void D_DoomMain (void) p = M_CheckParm ("-playdemo"); if (p && p < myargc-1) { - singledemo = true; // quit after one demo + singledemo = true; G_DeferedPlayDemo (myargv[p+1]); - D_DoomLoop (); // never returns + D_DoomLoop (); } p = M_CheckParm ("-timedemo"); if (p && p < myargc-1) { G_TimeDemo (myargv[p+1]); - D_DoomLoop (); // never returns + D_DoomLoop (); } p = M_CheckParm ("-loadgame"); @@ -1163,9 +1163,9 @@ void D_DoomMain (void) if (autostart || netgame) G_InitNew (startskill, startepisode, startmap); else - D_StartTitle (); // start up intro loop + D_StartTitle (); } - D_DoomLoop (); // never returns + D_DoomLoop (); } diff --git a/src/d_main.h b/src/d_main.h @@ -1,25 +1,25 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// System specific interface stuff. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + #ifndef __D_MAIN__ @@ -40,22 +40,22 @@ void D_AddFile (char *file); -// -// D_DoomMain() -// Not a globally visible function, just included for source reference, -// calls all startup code, parses command line options. -// If not overrided by user input, calls N_AdvanceDemo. -// + + + + + + void D_DoomMain (void); -// Called by IO functions when input is detected. + void D_PostEvent (event_t* ev); -// -// BASE LEVEL -// + + + void D_PageTicker (void); void D_PageDrawer (void); void D_AdvanceDemo (void); diff --git a/src/d_net.c b/src/d_net.c @@ -1,26 +1,26 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// DOOM Network game communication and protocol, -// all OS independend parts. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: d_net.c,v 1.3 1997/02/03 22:01:47 b1 Exp $"; @@ -37,33 +37,33 @@ static const char rcsid[] = "$Id: d_net.c,v 1.3 1997/02/03 22:01:47 b1 Exp $"; #define NCMD_EXIT 0x80000000 #define NCMD_RETRANSMIT 0x40000000 #define NCMD_SETUP 0x20000000 -#define NCMD_KILL 0x10000000 // kill game +#define NCMD_KILL 0x10000000 #define NCMD_CHECKSUM 0x0fffffff doomcom_t* doomcom; -doomdata_t* netbuffer; // points inside doomcom - - -// -// NETWORKING -// -// gametic is the tic about to (or currently being) run -// maketic is the tick that hasn't had control made for it yet -// nettics[] has the maketics for all players -// -// a gametic cannot be run until nettics[] > gametic for all players -// +doomdata_t* netbuffer; + + + + + + + + + + + #define RESENDCOUNT 10 -#define PL_DRONE 0x80 // bit flag in doomdata->player +#define PL_DRONE 0x80 ticcmd_t localcmds[BACKUPTICS]; ticcmd_t netcmds[MAXPLAYERS][BACKUPTICS]; int nettics[MAXNETNODES]; -boolean nodeingame[MAXNETNODES]; // set false as nodes leave game -boolean remoteresend[MAXNETNODES]; // set when local needs tics -int resendto[MAXNETNODES]; // set when remote needs tics +boolean nodeingame[MAXNETNODES]; +boolean remoteresend[MAXNETNODES]; +int resendto[MAXNETNODES]; int resendcount[MAXNETNODES]; int nodeforplayer[MAXPLAYERS]; @@ -72,7 +72,7 @@ int maketic; int lastnettic; int skiptics; int ticdup; -int maxsend; // BACKUPTICS/(2*ticdup)-1 +int maxsend; void D_ProcessEvents (void); @@ -84,17 +84,17 @@ doomdata_t reboundstore; -// -// -// + + + int NetbufferSize (void) { return (int)&(((doomdata_t *)0)->cmds[netbuffer->numtics]); } -// -// Checksum -// + + + unsigned NetbufferChecksum (void) { unsigned c; @@ -102,9 +102,9 @@ unsigned NetbufferChecksum (void) c = 0x1234567; - // FIXME -endianess? + #ifdef NORMALUNIX - return 0; // byte order problems + return 0; #endif l = (NetbufferSize () - (int)&(((doomdata_t *)0)->retransmitfrom))/4; @@ -114,9 +114,9 @@ unsigned NetbufferChecksum (void) return c & NCMD_CHECKSUM; } -// -// -// + + + int ExpandTics (int low) { int delta; @@ -136,9 +136,9 @@ int ExpandTics (int low) -// -// HSendPacket -// + + + void HSendPacket (int node, @@ -185,10 +185,10 @@ HSendPacket I_NetCmd (); } -// -// HGetPacket -// Returns false if no packet is waiting -// + + + + boolean HGetPacket (void) { if (reboundpacket) @@ -253,9 +253,9 @@ boolean HGetPacket (void) } -// -// GetPackets -// + + + char exitmsg[80]; void GetPackets (void) @@ -269,17 +269,17 @@ void GetPackets (void) while ( HGetPacket() ) { if (netbuffer->checksum & NCMD_SETUP) - continue; // extra setup packet + continue; netconsole = netbuffer->player & ~PL_DRONE; netnode = doomcom->remotenode; - // to save bytes, only the low byte of tic numbers are sent - // Figure out what the rest of the bytes are + + realstart = ExpandTics (netbuffer->starttic); realend = (realstart+netbuffer->numtics); - // check for exiting the game + if (netbuffer->checksum & NCMD_EXIT) { if (!nodeingame[netnode]) @@ -294,13 +294,13 @@ void GetPackets (void) continue; } - // check for a remote game kill + if (netbuffer->checksum & NCMD_KILL) I_Error ("Killed by network driver"); nodeforplayer[netconsole] = netnode; - // check for retransmit request + if ( resendcount[netnode] <= 0 && (netbuffer->checksum & NCMD_RETRANSMIT) ) { @@ -312,7 +312,7 @@ void GetPackets (void) else resendcount[netnode]--; - // check for out of order / duplicated packet + if (realend == nettics[netnode]) continue; @@ -325,10 +325,10 @@ void GetPackets (void) continue; } - // check for a missed packet + if (realstart > nettics[netnode]) { - // stop processing until the other system resends the missed tics + if (debugfile) fprintf (debugfile, "missed tics from %i (%i - %i)\n", @@ -337,7 +337,7 @@ void GetPackets (void) continue; } - // update command store from the packet + { int start; @@ -358,11 +358,11 @@ void GetPackets (void) } -// -// NetUpdate -// Builds ticcmds for console player, -// sends out a packet -// + + + + + int gametime; void NetUpdate (void) @@ -373,12 +373,12 @@ void NetUpdate (void) int realstart; int gameticdiv; - // check time + nowtime = I_GetTime ()/ticdup; newtics = nowtime - gametime; gametime = nowtime; - if (newtics <= 0) // nothing new to update + if (newtics <= 0) goto listen; if (skiptics <= newtics) @@ -395,25 +395,25 @@ void NetUpdate (void) netbuffer->player = consoleplayer; - // build new ticcmds for console player + gameticdiv = gametic/ticdup; for (i=0 ; i<newtics ; i++) { I_StartTic (); D_ProcessEvents (); if (maketic - gameticdiv >= BACKUPTICS/2-1) - break; // can't hold any more + break; + - //printf ("mk:%i ",maketic); G_BuildTiccmd (&localcmds[maketic%BACKUPTICS]); maketic++; } if (singletics) - return; // singletic update is syncronous + return; + - // send the packet to the other nodes for (i=0 ; i<doomcom->numnodes ; i++) if (nodeingame[i]) { @@ -440,16 +440,16 @@ void NetUpdate (void) } } - // listen for other packets + listen: GetPackets (); } -// -// CheckAbort -// + + + void CheckAbort (void) { event_t *ev; @@ -470,9 +470,9 @@ void CheckAbort (void) } -// -// D_ArbitrateNetStart -// + + + void D_ArbitrateNetStart (void) { int i; @@ -483,7 +483,7 @@ void D_ArbitrateNetStart (void) if (doomcom->consoleplayer) { - // listen for setup info from key player + printf ("listening for network start info...\n"); while (1) { @@ -506,7 +506,7 @@ void D_ArbitrateNetStart (void) } else { - // key player, send the setup info + printf ("sending network start info...\n"); do { @@ -546,10 +546,10 @@ void D_ArbitrateNetStart (void) } } -// -// D_CheckNetGame -// Works out player numbers among the net participants -// + + + + extern int viewangleoffset; void D_CheckNetGame (void) @@ -560,11 +560,11 @@ void D_CheckNetGame (void) { nodeingame[i] = false; nettics[i] = 0; - remoteresend[i] = false; // set when local needs tics - resendto[i] = 0; // which tic to start sending + remoteresend[i] = false; + resendto[i] = 0; } - // I_InitNetwork sets doomcom and netgame + I_InitNetwork (); if (doomcom->id != DOOMCOM_ID) I_Error ("Doomcom buffer invalid!"); @@ -577,7 +577,7 @@ void D_CheckNetGame (void) printf ("startskill %i deathmatch: %i startmap: %i startepisode: %i\n", startskill, deathmatch, startmap, startepisode); - // read values out of doomcom + ticdup = doomcom->ticdup; maxsend = BACKUPTICS/(2*ticdup)-1; if (maxsend<1) @@ -594,11 +594,11 @@ void D_CheckNetGame (void) } -// -// D_QuitNetGame -// Called before quitting to leave a net game -// without hanging the other players -// + + + + + void D_QuitNetGame (void) { int i, j; @@ -609,7 +609,7 @@ void D_QuitNetGame (void) if (!netgame || !usergame || consoleplayer == -1 || demoplayback) return; - // send a bunch of packets for security + netbuffer->player = consoleplayer; netbuffer->numtics = 0; for (i=0 ; i<4 ; i++) @@ -623,9 +623,9 @@ void D_QuitNetGame (void) -// -// TryRunTics -// + + + int frametics[4]; int frameon; int frameskip[4]; @@ -644,12 +644,12 @@ void TryRunTics (void) int counts; int numplaying; - // get real tics + entertic = I_GetTime ()/ticdup; realtics = entertic - oldentertics; oldentertics = entertic; - // get available tics + NetUpdate (); lowtic = MAXINT; @@ -665,7 +665,7 @@ void TryRunTics (void) } availabletics = lowtic - gametic/ticdup; - // decide how many tics to run + if (realtics < availabletics-1) counts = realtics+1; else if (realtics < availabletics) @@ -685,33 +685,33 @@ void TryRunTics (void) if (!demoplayback) { - // ideally nettics[0] should be 1 - 3 tics above lowtic - // if we are consistantly slower, speed up time + + for (i=0 ; i<MAXPLAYERS ; i++) if (playeringame[i]) break; if (consoleplayer == i) { - // the key player does not adapt + } else { if (nettics[0] <= nettics[nodeforplayer[i]]) { gametime--; - // printf ("-"); + } frameskip[frameon&3] = (oldnettics > nettics[nodeforplayer[i]]); oldnettics = nettics[0]; if (frameskip[0] && frameskip[1] && frameskip[2] && frameskip[3]) { skiptics = 1; - // printf ("+"); + } } - }// demoplayback + } - // wait for new tics if needed + while (lowtic < gametic/ticdup + counts) { NetUpdate (); @@ -724,7 +724,7 @@ void TryRunTics (void) if (lowtic < gametic/ticdup) I_Error ("TryRunTics: lowtic < gametic"); - // don't stay in here forever -- give the menu a chance to work + if (I_GetTime ()/ticdup - entertic >= 20) { M_Ticker (); @@ -732,7 +732,7 @@ void TryRunTics (void) } } - // run the count * ticdup dics + while (counts--) { for (i=0 ; i<ticdup ; i++) @@ -745,7 +745,7 @@ void TryRunTics (void) G_Ticker (); gametic++; - // modify command for duplicated tics + if (i != ticdup-1) { ticcmd_t *cmd; @@ -762,6 +762,6 @@ void TryRunTics (void) } } } - NetUpdate (); // check for new console commands + NetUpdate (); } } diff --git a/src/d_net.h b/src/d_net.h @@ -1,23 +1,23 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// Networking stuff. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __D_NET__ @@ -31,21 +31,21 @@ #endif -// -// Network play related stuff. -// There is a data struct that stores network -// communication related stuff, and another -// one that defines the actual packets to -// be transmitted. -// + + + + + + + #define DOOMCOM_ID 0x12345678l -// Max computers/players in a game. + #define MAXNETNODES 8 -// Networking and tick handling related. + #define BACKUPTICS 12 typedef enum @@ -56,14 +56,14 @@ typedef enum } command_t; -// -// Network packet data. -// + + + typedef struct { - // High bit is retransmit request. + unsigned checksum; - // Only valid if NCMD_RETRANSMIT. + byte retransmitfrom; byte starttic; @@ -78,72 +78,72 @@ typedef struct typedef struct { - // Supposed to be DOOMCOM_ID? + long id; - // DOOM executes an int to execute commands. + short intnum; - // Communication between DOOM and the driver. - // Is CMD_SEND or CMD_GET. + + short command; - // Is dest for send, set by get (-1 = no packet). + short remotenode; - // Number of bytes in doomdata to be sent + short datalength; - // Info common to all nodes. - // Console is allways node 0. + + short numnodes; - // Flag: 1 = no duplication, 2-5 = dup for slow nets. + short ticdup; - // Flag: 1 = send a backup tic in every packet. + short extratics; - // Flag: 1 = deathmatch. + short deathmatch; - // Flag: -1 = new game, 0-5 = load savegame + short savegame; - short episode; // 1-3 - short map; // 1-9 - short skill; // 1-5 + short episode; + short map; + short skill; - // Info specific to this node. + short consoleplayer; short numplayers; - // These are related to the 3-display mode, - // in which two drones looking left and right - // were used to render two additional views - // on two additional computers. - // Probably not operational anymore. - // 1 = left, 0 = center, -1 = right + + + + + + short angleoffset; - // 1 = drone + short drone; - // The packet data to be sent. + doomdata_t data; } doomcom_t; -// Create any new ticcmds and broadcast to other players. + void NetUpdate (void); -// Broadcasts special packets to other players -// to notify of game exit + + void D_QuitNetGame (void); -//? how many ticks to run? + void TryRunTics (void); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/d_player.h b/src/d_player.h @@ -1,43 +1,43 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __D_PLAYER__ #define __D_PLAYER__ -// The player data structure depends on a number -// of other structs: items (internal inventory), -// animation states (closely tied to the sprites -// used to represent them, unfortunately). + + + + #include "d_items.h" #include "p_pspr.h" -// In addition, the player is just a special -// case of the generic moving object/actor. + + #include "p_mobj.h" -// Finally, for odd reasons, the player input -// is buffered within the player data struct, -// as commands per game tick. + + + #include "d_ticcmd.h" #ifdef __GNUG__ @@ -47,151 +47,151 @@ -// -// Player states. -// + + + typedef enum { - // Playing or camping. + PST_LIVE, - // Dead on the ground, view follows killer. + PST_DEAD, - // Ready to restart/respawn??? + PST_REBORN } playerstate_t; -// -// Player internal flags, for cheats and debug. -// + + + typedef enum { - // No clipping, walk through barriers. + CF_NOCLIP = 1, - // No damage, no health loss. + CF_GODMODE = 2, - // Not really a cheat, just a debug aid. + CF_NOMOMENTUM = 4 } cheat_t; -// -// Extended player object info: player_t -// + + + typedef struct player_s { mobj_t* mo; playerstate_t playerstate; ticcmd_t cmd; - // Determine POV, - // including viewpoint bobbing during movement. - // Focal origin above r.z + + + fixed_t viewz; - // Base height above floor for viewz. + fixed_t viewheight; - // Bob/squat speed. + fixed_t deltaviewheight; - // bounded/scaled total momentum. + fixed_t bob; - // This is only used between levels, - // mo->health is used during levels. + + int health; int armorpoints; - // Armor type is 0-2. + int armortype; - // Power ups. invinc and invis are tic counters. + int powers[NUMPOWERS]; boolean cards[NUMCARDS]; boolean backpack; - // Frags, kills of other players. + int frags[MAXPLAYERS]; weapontype_t readyweapon; - // Is wp_nochange if not changing. + weapontype_t pendingweapon; boolean weaponowned[NUMWEAPONS]; int ammo[NUMAMMO]; int maxammo[NUMAMMO]; - // True if button down last tic. + int attackdown; int usedown; - // Bit flags, for cheats and debug. - // See cheat_t, above. + + int cheats; - // Refired shots are less accurate. + int refire; - // For intermission stats. + int killcount; int itemcount; int secretcount; - // Hint messages. + char* message; - // For screen flashing (red or bright). + int damagecount; int bonuscount; - // Who did damage (NULL for floors/ceilings). + mobj_t* attacker; - // So gun flashes light up areas. + int extralight; - // Current PLAYPAL, ??? - // can be set to REDCOLORMAP for pain, etc. + + int fixedcolormap; - // Player skin colorshift, - // 0-3 for which color to draw player. + + int colormap; - // Overlay view sprites (gun, etc). + pspdef_t psprites[NUMPSPRITES]; - // True if secret level has been done. + boolean didsecret; } player_t; -// -// INTERMISSION -// Structure passed e.g. to WI_Start(wb) -// + + + + typedef struct { - boolean in; // whether the player is in game + boolean in; + - // Player stats, kills, collected items etc. int skills; int sitems; int ssecret; int stime; int frags[4]; - int score; // current score on entry, modified on return + int score; } wbplayerstruct_t; typedef struct { - int epsd; // episode # (0-2) + int epsd; - // if true, splash the secret level + boolean didsecret; - // previous and next levels, origin 0 + int last; int next; @@ -200,10 +200,10 @@ typedef struct int maxsecret; int maxfrags; - // the par time + int partime; - // index of this player in game + int pnum; wbplayerstruct_t plyr[MAXPLAYERS]; @@ -212,8 +212,8 @@ typedef struct #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/d_textur.h b/src/d_textur.h @@ -1,24 +1,24 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// Typedefs related to to textures etc., -// isolated here to make it easier separating modules. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + #ifndef __D_TEXTUR__ @@ -29,10 +29,10 @@ -// -// Flats? -// -// a pic is an unmasked block of pixels + + + + typedef struct { byte width; @@ -44,8 +44,8 @@ typedef struct #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/d_think.h b/src/d_think.h @@ -1,25 +1,25 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// MapObj data. Map Objects or mobjs are actors, entities, -// thinker, take-your-pick... anything that moves, acts, or -// suffers state changes of more or less violent nature. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + #ifndef __D_THINK__ @@ -32,12 +32,12 @@ -// -// Experimental stuff. -// To compile this as "ANSI C with classes" -// we will need to handle the various -// action functions cleanly. -// + + + + + + typedef void (*actionf_v)(); typedef void (*actionf_p1)( void* ); typedef void (*actionf_p2)( void*, void* ); @@ -54,13 +54,13 @@ typedef union -// Historically, "think_t" is yet another -// function pointer to a routine to handle -// an actor. + + + typedef actionf_t think_t; -// Doubly linked list of actors. + typedef struct thinker_s { struct thinker_s* prev; @@ -72,8 +72,8 @@ typedef struct thinker_s #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/d_ticcmd.h b/src/d_ticcmd.h @@ -1,23 +1,23 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// System specific interface stuff. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __D_TICCMD__ @@ -29,16 +29,16 @@ #pragma interface #endif -// The data sampled per tick (single player) -// and transmitted to other peers (multiplayer). -// Mainly movements/button commands per game tick, -// plus a checksum for internal state consistency. + + + + typedef struct { - char forwardmove; // *2048 for move - char sidemove; // *2048 for move - short angleturn; // <<16 for angle delta - short consistancy; // checks for net game + char forwardmove; + char sidemove; + short angleturn; + short consistancy; byte chatchar; byte buttons; } ticcmd_t; @@ -46,8 +46,8 @@ typedef struct #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/doomdata.h b/src/doomdata.h @@ -1,62 +1,62 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// all external data is defined here -// most of the data is loaded into different structures at run time -// some internal structures shared by many modules are here -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + #ifndef __DOOMDATA__ #define __DOOMDATA__ -// The most basic types we use, portability. + #include "doomtype.h" -// Some global defines, that configure the game. + #include "doomdef.h" -// -// Map level types. -// The following data structures define the persistent format -// used in the lumps of the WAD files. -// -// Lump order in a map WAD: each map needs a couple of lumps -// to provide a complete scene geometry description. + + + + + + + enum { - ML_LABEL, // A separator, name, ExMx or MAPxx - ML_THINGS, // Monsters, items.. - ML_LINEDEFS, // LineDefs, from editing - ML_SIDEDEFS, // SideDefs, from editing - ML_VERTEXES, // Vertices, edited and BSP splits generated - ML_SEGS, // LineSegs, from LineDefs split by BSP - ML_SSECTORS, // SubSectors, list of LineSegs - ML_NODES, // BSP nodes - ML_SECTORS, // Sectors, from editing - ML_REJECT, // LUT, sector-sector visibility - ML_BLOCKMAP // LUT, motion clipping, walls/grid element + ML_LABEL, + ML_THINGS, + ML_LINEDEFS, + ML_SIDEDEFS, + ML_VERTEXES, + ML_SEGS, + ML_SSECTORS, + ML_NODES, + ML_SECTORS, + ML_REJECT, + ML_BLOCKMAP }; -// A single Vertex. + typedef struct { short x; @@ -64,8 +64,8 @@ typedef struct } mapvertex_t; -// A SideDef, defining the visual appearance of a wall, -// by setting textures and offsets. + + typedef struct { short textureoffset; @@ -73,14 +73,14 @@ typedef struct char toptexture[8]; char bottomtexture[8]; char midtexture[8]; - // Front sector, towards viewer. + short sector; } mapsidedef_t; -// A LineDef, as used for editing, and as input -// to the BSP builder. + + typedef struct { short v1; @@ -88,56 +88,56 @@ typedef struct short flags; short special; short tag; - // sidenum[1] will be -1 if one sided + short sidenum[2]; } maplinedef_t; -// -// LineDef attributes. -// -// Solid, is an obstacle. + + + + #define ML_BLOCKING 1 -// Blocks monsters only. + #define ML_BLOCKMONSTERS 2 -// Backside will not be present at all -// if not two sided. + + #define ML_TWOSIDED 4 -// If a texture is pegged, the texture will have -// the end exposed to air held constant at the -// top or bottom of the texture (stairs or pulled -// down things) and will move with a height change -// of one of the neighbor sectors. -// Unpegged textures allways have the first row of -// the texture at the top pixel of the line for both -// top and bottom textures (use next to windows). -// upper texture unpegged + + + + + + + + + #define ML_DONTPEGTOP 8 -// lower texture unpegged + #define ML_DONTPEGBOTTOM 16 -// In AutoMap: don't map as two sided: IT'S A SECRET! + #define ML_SECRET 32 -// Sound rendering: don't let sound cross two of these. + #define ML_SOUNDBLOCK 64 -// Don't draw on the automap at all. + #define ML_DONTDRAW 128 -// Set if already seen, thus drawn in automap. + #define ML_MAPPED 256 -// Sector definition, from editing. + typedef struct { short floorheight; @@ -149,17 +149,17 @@ typedef struct short tag; } mapsector_t; -// SubSector, as generated by BSP. + typedef struct { short numsegs; - // Index of first one, segs are stored sequentially. + short firstseg; } mapsubsector_t; -// LineSeg, generated by splitting LineDefs -// using partition lines selected by BSP builder. + + typedef struct { short v1; @@ -172,25 +172,25 @@ typedef struct -// BSP node structure. -// Indicate a leaf. + + #define NF_SUBSECTOR 0x8000 typedef struct { - // Partition line from (x,y) to x+dx,y+dy) + short x; short y; short dx; short dy; - // Bounding box for each child, - // clip against view frustum. + + short bbox[2][4]; - // If NF_SUBSECTOR its a subsector, - // else it's a node of another subtree. + + unsigned short children[2]; } mapnode_t; @@ -198,8 +198,8 @@ typedef struct -// Thing definition, position, orientation and type, -// plus skill/visibility flags and attributes. + + typedef struct { short x; @@ -213,10 +213,10 @@ typedef struct -#endif // __DOOMDATA__ -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- +#endif + + + + + diff --git a/src/doomdef.c b/src/doomdef.c @@ -1,26 +1,26 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// DoomDef - basic defines for DOOM, e.g. Version, game mode -// and skill level, and display parameters. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $"; @@ -31,8 +31,8 @@ rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $"; #endif #include "doomdef.h" -// Location for any defines turned variables. -// None. + + diff --git a/src/doomdef.h b/src/doomdef.h @@ -1,24 +1,24 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// Internally used data structures for virtually everything, -// key definitions, lots of other stuff. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + #ifndef __DOOMDEF__ #define __DOOMDEF__ @@ -26,40 +26,40 @@ #include <stdio.h> #include <string.h> -// -// Global parameters/defines. -// -// DOOM version + + + + enum { VERSION = 110 }; -// Game mode handling - identify IWAD version -// to handle IWAD dependend animations etc. + + typedef enum { - shareware, // DOOM 1 shareware, E1, M9 - registered, // DOOM 1 registered, E3, M27 - commercial, // DOOM 2 retail, E1 M34 - // DOOM 2 german edition not handled - retail, // DOOM 1 retail, E4, M36 - indetermined // Well, no IWAD found. + shareware, + registered, + commercial, + + retail, + indetermined } GameMode_t; -// Mission packs - might be useful for TC stuff? + typedef enum { - doom, // DOOM 1 - doom2, // DOOM 2 - pack_tnt, // TNT mission pack - pack_plut, // Plutonia pack + doom, + doom2, + pack_tnt, + pack_plut, none } GameMission_t; -// Identify language to use, software localization. + typedef enum { english, @@ -70,60 +70,60 @@ typedef enum } Language_t; -// If rangecheck is undefined, -// most parameter validation debugging code will not be compiled + + #define RANGECHECK -// Do or do not use external soundserver. -// The sndserver binary to be run separately -// has been introduced by Dave Taylor. -// The integrated sound support is experimental, -// and unfinished. Default is synchronous. -// Experimental asynchronous timer based is -// handled by SNDINTR. + + + + + + + #define SNDSERV 1 -//#define SNDINTR 1 -// This one switches between MIT SHM (no proper mouse) -// and XFree86 DGA (mickey sampling). The original -// linuxdoom used SHM, which is default. -//#define X11_DGA 1 -// -// For resize of screen, at start of game. -// It will not work dynamically, see visplanes. -// + + + + + + + + + #define BASE_WIDTH 320 -// It is educational but futile to change this -// scaling e.g. to 2. Drawing of status bar, -// menues etc. is tied to the scale implied -// by the graphics. + + + + #define SCREEN_MUL 1 -#define INV_ASPECT_RATIO 0.625 // 0.75, ideally +#define INV_ASPECT_RATIO 0.625 + + + -// Defines suck. C sucks. -// C++ might sucks for OOP, but it sure is a better C. -// So there. #define SCREENWIDTH 320 -//SCREEN_MUL*BASE_WIDTH //320 + #define SCREENHEIGHT 200 -//(int)(SCREEN_MUL*BASE_WIDTH*INV_ASPECT_RATIO) //200 -// The maximum number of players, multiplayer/networking. + + #define MAXPLAYERS 4 -// State updates, number of tics / second. + #define TICRATE 35 -// The current state of the game: whether we are -// playing, gazing at the intermission screen, -// the game final animation, or a demo. + + + typedef enum { GS_LEVEL, @@ -132,16 +132,16 @@ typedef enum GS_DEMOSCREEN } gamestate_t; -// -// Difficulty/skill settings/filters. -// -// Skill flags. + + + + #define MTF_EASY 1 #define MTF_NORMAL 2 #define MTF_HARD 4 -// Deaf monsters/do not react to sound. + #define MTF_AMBUSH 8 typedef enum @@ -156,9 +156,9 @@ typedef enum -// -// Key cards. -// + + + typedef enum { it_bluecard, @@ -174,9 +174,9 @@ typedef enum -// The defined weapons, -// including a marker indicating -// user has not changed weapon. + + + typedef enum { wp_fist, @@ -191,26 +191,26 @@ typedef enum NUMWEAPONS, - // No pending weapon change. + wp_nochange } weapontype_t; -// Ammunition types defined. + typedef enum { - am_clip, // Pistol / chaingun ammo. - am_shell, // Shotgun / double barreled shotgun. - am_cell, // Plasma rifle, BFG. - am_misl, // Missile launcher. + am_clip, + am_shell, + am_cell, + am_misl, NUMAMMO, - am_noammo // Unlimited for chainsaw / fist. + am_noammo } ammotype_t; -// Power up artifacts. + typedef enum { pw_invulnerability, @@ -225,11 +225,11 @@ typedef enum -// -// Power up durations, -// how many seconds till expiration, -// assuming TICRATE is 35 ticks/second. -// + + + + + typedef enum { INVULNTICS = (30*TICRATE), @@ -242,11 +242,11 @@ typedef enum -// -// DOOM keyboard definition. -// This is the stuff configured by Setup.Exe. -// Most key data are simple ascii (uppercased). -// + + + + + #define KEY_RIGHTARROW 0xae #define KEY_LEFTARROW 0xac #define KEY_UPARROW 0xad @@ -281,58 +281,58 @@ typedef enum -// DOOM basic types (boolean), -// and max/min values. -//#include "doomtype.h" -// Fixed point. -//#include "m_fixed.h" -// Endianess handling. -//#include "m_swap.h" -// Binary Angles, sine/cosine/atan lookups. -//#include "tables.h" -// Event type. -//#include "d_event.h" -// Game function, skills. -//#include "g_game.h" -// All external data is defined here. -//#include "doomdata.h" -// All important printed strings. -// Language selection (message strings). -//#include "dstrings.h" -// Player is a special actor. -//struct player_s; -//#include "d_items.h" -//#include "d_player.h" -//#include "p_mobj.h" -//#include "d_net.h" -// PLAY -//#include "p_tick.h" -// Header, generated by sound utility. -// The utility was written by Dave Taylor. -//#include "sounds.h" -#endif // __DOOMDEF__ -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#endif + + + + + diff --git a/src/doomstat.c b/src/doomstat.c @@ -1,25 +1,25 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// Put all global tate variables here. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $"; @@ -31,14 +31,14 @@ rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $"; #include "doomstat.h" -// Game Mode - identify IWAD as shareware, retail etc. + GameMode_t gamemode = indetermined; GameMission_t gamemission = doom; -// Language. + Language_t language = english; -// Set if homebrew PWAD stuff has been added. + boolean modifiedgame; diff --git a/src/doomstat.h b/src/doomstat.h @@ -1,39 +1,39 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// All the global variables that store the internal state. -// Theoretically speaking, the internal state of the engine -// should be found by looking at the variables collected -// here, and every relevant module will have to include -// this header file. -// In practice, things are a bit messy. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + + #ifndef __D_STATE__ #define __D_STATE__ -// We need globally shared data structures, -// for defining the global state variables. + + #include "doomdata.h" #include "d_net.h" -// We need the playr data structure as well. + #include "d_player.h" @@ -43,95 +43,95 @@ -// ------------------------ -// Command line parameters. -// -extern boolean nomonsters; // checkparm of -nomonsters -extern boolean respawnparm; // checkparm of -respawn -extern boolean fastparm; // checkparm of -fast -extern boolean devparm; // DEBUG: launched with -devparm + + +extern boolean nomonsters; +extern boolean respawnparm; +extern boolean fastparm; + +extern boolean devparm; + + + -// ----------------------------------------------------- -// Game Mode - identify IWAD as shareware, retail etc. -// extern GameMode_t gamemode; extern GameMission_t gamemission; -// Set if homebrew PWAD stuff has been added. + extern boolean modifiedgame; -// ------------------------------------------- -// Language. + + extern Language_t language; -// ------------------------------------------- -// Selected skill type, map etc. -// -// Defaults for menu, methinks. + + + + extern skill_t startskill; extern int startepisode; extern int startmap; extern boolean autostart; -// Selected by user. + extern skill_t gameskill; extern int gameepisode; extern int gamemap; -// Nightmare mode flag, single player. + extern boolean respawnmonsters; -// Netgame? Only true if >1 player. + extern boolean netgame; -// Flag: true only if started as net deathmatch. -// An enum might handle altdeath/cooperative better. + + extern boolean deathmatch; -// ------------------------- -// Internal parameters for sound rendering. -// These have been taken from the DOS version, -// but are not (yet) supported with Linux -// (e.g. no sound volume adjustment with menu. - -// These are not used, but should be (menu). -// From m_menu.c: -// Sound FX volume has default, 0 - 15 -// Music volume has default, 0 - 15 -// These are multiplied by 8. -extern int snd_SfxVolume; // maximum volume for sound -extern int snd_MusicVolume; // maximum volume for music - -// Current music/sfx card - index useless -// w/o a reference LUT in a sound module. -// Ideally, this would use indices found -// in: /usr/include/linux/soundcard.h + + + + + + + + + + + +extern int snd_SfxVolume; +extern int snd_MusicVolume; + + + + + extern int snd_MusicDevice; extern int snd_SfxDevice; -// Config file? Same disclaimer as above. + extern int snd_DesiredMusicDevice; extern int snd_DesiredSfxDevice; -// ------------------------- -// Status flags for refresh. -// -// Depending on view size - no status bar? -// Note that there is no way to disable the -// status bar explicitely. + + + + + + extern boolean statusbaractive; -extern boolean automapactive; // In AutoMap mode? -extern boolean menuactive; // Menu overlayed? -extern boolean paused; // Game Pause? +extern boolean automapactive; +extern boolean menuactive; +extern boolean paused; extern boolean viewactive; @@ -150,46 +150,46 @@ extern int scaledviewwidth; -// This one is related to the 3-screen display mode. -// ANG90 = left side, ANG270 = right + + extern int viewangleoffset; -// Player taking events, and displaying. + extern int consoleplayer; extern int displayplayer; -// ------------------------------------- -// Scores, rating. -// Statistics on a given map, for intermission. -// + + + + extern int totalkills; extern int totalitems; extern int totalsecret; -// Timer, for scores. -extern int levelstarttic; // gametic at level start -extern int leveltime; // tics in game play for par + +extern int levelstarttic; +extern int leveltime; + + + + -// -------------------------------------- -// DEMO playback/recording related stuff. -// No demo, there is a human player in charge? -// Disable save/end game? extern boolean usergame; -//? + extern boolean demoplayback; extern boolean demorecording; -// Quit after playing a demo from cmdline. + extern boolean singledemo; -//? + extern gamestate_t gamestate; @@ -197,83 +197,83 @@ extern gamestate_t gamestate; -//----------------------------- -// Internal parameters, fixed. -// These are set by the engine, and not changed -// according to user inputs. Partly load from -// WAD, partly set at startup time. + + + + + extern int gametic; -// Bookkeeping on players - state. + extern player_t players[MAXPLAYERS]; -// Alive? Disconnected? + extern boolean playeringame[MAXPLAYERS]; -// Player spawn spots for deathmatch. + #define MAX_DM_STARTS 10 extern mapthing_t deathmatchstarts[MAX_DM_STARTS]; extern mapthing_t* deathmatch_p; -// Player spawn spots. + extern mapthing_t playerstarts[MAXPLAYERS]; -// Intermission stats. -// Parameters for world map / intermission. + + extern wbstartstruct_t wminfo; -// LUT of ammunition limits for each kind. -// This doubles with BackPack powerup item. + + extern int maxammo[NUMAMMO]; -//----------------------------------------- -// Internal parameters, used for engine. -// -// File handling stuff. + + + + extern char basedefault[1024]; extern FILE* debugfile; -// 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; extern int mouseSensitivity; -//? -// debug flag to cancel adaptiveness + + extern boolean singletics; extern int bodyqueslot; -// Needed to store the number of the dummy sky flat. -// Used for rendering, -// as well as tracking projectiles etc. + + + extern int skyflatnum; -// Netgame stuff (buffers and pointers, i.e. indices). -// This is ??? + + extern doomcom_t* doomcom; -// This points inside doomcom. + extern doomdata_t* netbuffer; @@ -289,8 +289,8 @@ extern int ticdup; #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/doomtype.h b/src/doomtype.h @@ -1,24 +1,24 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// Simple basic typedefs, isolated here to make it easier -// separating modules. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + #ifndef __DOOMTYPE__ @@ -27,7 +27,7 @@ #ifndef __BYTEBOOL__ #define __BYTEBOOL__ -// Fixed to use builtin bool type with C++. + #ifdef __cplusplus typedef bool boolean; #else @@ -37,20 +37,20 @@ typedef unsigned char byte; #endif -// Predefined with some OS. + #ifdef LINUX #include <values.h> #else #define MAXCHAR ((char)0x7f) #define MAXSHORT ((short)0x7fff) -// Max pos 32-bit int. + #define MAXINT ((int)0x7fffffff) #define MAXLONG ((long)0x7fffffff) #define MINCHAR ((char)0x80) #define MINSHORT ((short)0x8000) -// Max negative 32-bit integer. + #define MININT ((int)0x80000000) #define MINLONG ((long)0x80000000) #endif @@ -59,8 +59,8 @@ typedef unsigned char byte; #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/dstrings.c b/src/dstrings.c @@ -1,25 +1,25 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// Globally defined strings. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $"; @@ -34,7 +34,7 @@ rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $"; char* endmsg[NUM_QUITMESSAGES+1]= { - // DOOM1 + QUITMSG, "please don't leave, there's more\ndemons to toast!", "let's beat it -- this is turning\ninto a bloodbath!", @@ -44,7 +44,7 @@ char* endmsg[NUM_QUITMESSAGES+1]= "ya know, next time you come in here\ni'm gonna toast ya.", "go ahead and leave. see if i care." - // QuitDOOM II messages + "you want to quit?\nthen, thou hast lost an eighth!", "don't go now, there's a \ndimensional shambler waiting\nat the dos prompt!", "get outta here and go back\nto your boring programs.", @@ -53,7 +53,7 @@ char* endmsg[NUM_QUITMESSAGES+1]= "just leave. when you come\nback, i'll be waiting with a bat.", "you're lucky i don't smack\nyou for thinking about leaving." - // FinalDOOM? + "fuck you, pussy!\nget the fuck out!", "you quit and i'll jizz\nin your cystholes!", "if you leave, i'll make\nthe lord drink my jizz.", @@ -62,7 +62,7 @@ char* endmsg[NUM_QUITMESSAGES+1]= "suck it down, asshole!\nyou're a fucking wimp!", "don't quit now! we're \nstill spending your money!", - // Internal debug. Different style, too. + "THIS IS NO MESSAGE!\nPage intentionally left blank." }; diff --git a/src/dstrings.h b/src/dstrings.h @@ -1,35 +1,35 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// -// $Log:$ -// -// DESCRIPTION: -// DOOM strings, by language. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + #ifndef __DSTRINGS__ #define __DSTRINGS__ -// All important printed strings. -// Language selection (message strings). -// Use -DFRENCH etc. + + + #ifdef FRENCH #include "d_french.h" @@ -37,30 +37,30 @@ #include "d_englsh.h" #endif -// Misc. other strings. + #define SAVEGAMENAME "doomsav" -// -// File locations, -// relative to current position. -// Path names are OS-sensitive. -// + + + + + #define DEVMAPS "devmaps" #define DEVDATA "devdata" -// Not done in french? -// QuitDOOM messages + + #define NUM_QUITMESSAGES 22 extern char* endmsg[]; #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/f_finale.c b/src/f_finale.c @@ -1,25 +1,25 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// Game completion, final screen animation. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + static const char @@ -27,7 +27,7 @@ rcsid[] = "$Id: f_finale.c,v 1.5 1997/02/03 21:26:34 b1 Exp $"; #include <ctype.h> -// Functions. + #include "i_system.h" #include "m_swap.h" #include "z_zone.h" @@ -35,20 +35,20 @@ rcsid[] = "$Id: f_finale.c,v 1.5 1997/02/03 21:26:34 b1 Exp $"; #include "w_wad.h" #include "s_sound.h" -// Data. + #include "dstrings.h" #include "sounds.h" #include "doomstat.h" #include "r_state.h" -// ? -//#include "doomstat.h" -//#include "r_local.h" -//#include "f_finale.h" -// Stage of animation: -// 0 = text, 1 = art screen, 2 = character cast + + + + + + int finalestage; int finalecount; @@ -90,9 +90,9 @@ void F_CastTicker (void); boolean F_CastResponder (event_t *ev); void F_CastDrawer (void); -// -// F_StartFinale -// + + + void F_StartFinale (void) { gameaction = ga_nothing; @@ -100,13 +100,13 @@ void F_StartFinale (void) viewactive = false; automapactive = false; - // Okay - IWAD dependend stuff. - // This has been changed severly, and - // some stuff might have changed in the process. + + + switch ( gamemode ) { - // DOOM 1 - E1, E3 or E4, but each nine missions + case shareware: case registered: case retail: @@ -132,13 +132,13 @@ void F_StartFinale (void) finaletext = e4text; break; default: - // Ouch. + break; } break; } - // DOOM II and missions packs with E1, M34 + case commercial: { S_ChangeMusic(mus_read_m, true); @@ -170,18 +170,18 @@ void F_StartFinale (void) finaletext = c6text; break; default: - // Ouch. + break; } break; } - // Indeterminate. + default: S_ChangeMusic(mus_read_m, true); - finaleflat = "F_SKY1"; // Not used anywhere else. - finaletext = c1text; // FIXME - other text, music? + finaleflat = "F_SKY1"; + finaletext = c1text; break; } @@ -201,18 +201,18 @@ boolean F_Responder (event_t *event) } -// -// F_Ticker -// + + + void F_Ticker (void) { int i; - // check for skipping + if ( (gamemode == commercial) && ( finalecount > 50) ) { - // go on to the next level + for (i=0 ; i<MAXPLAYERS ; i++) if (players[i].cmd.buttons) break; @@ -226,7 +226,7 @@ void F_Ticker (void) } } - // advance animation + finalecount++; if (finalestage == 2) @@ -242,7 +242,7 @@ void F_Ticker (void) { finalecount = 0; finalestage = 1; - wipegamestate = -1; // force a wipe + wipegamestate = -1; if (gameepisode == 3) S_StartMusic (mus_bunny); } @@ -250,9 +250,9 @@ void F_Ticker (void) -// -// F_TextWrite -// + + + #include "hu_stuff.h" extern patch_t *hu_font[HU_FONTSIZE]; @@ -270,7 +270,7 @@ void F_TextWrite (void) int cx; int cy; - // erase the entire screen to a tiled background + src = W_CacheLumpName ( finaleflat , PU_CACHE); dest = screens[0]; @@ -290,7 +290,7 @@ void F_TextWrite (void) V_MarkRect (0, 0, SCREENWIDTH, SCREENHEIGHT); - // draw some of the text onto the screen + cx = 10; cy = 10; ch = finaletext; @@ -326,11 +326,11 @@ void F_TextWrite (void) } -// -// Final DOOM 2 animation -// Casting by id Software. -// in order of appearance -// + + + + + typedef struct { char *name; @@ -368,15 +368,15 @@ int castonmelee; boolean castattacking; -// -// F_StartCast -// + + + extern gamestate_t wipegamestate; void F_StartCast (void) { - wipegamestate = -1; // force a screen wipe + wipegamestate = -1; castnum = 0; caststate = &states[mobjinfo[castorder[castnum].type].seestate]; casttics = caststate->tics; @@ -389,20 +389,20 @@ void F_StartCast (void) } -// -// F_CastTicker -// + + + void F_CastTicker (void) { int st; int sfx; if (--casttics > 0) - return; // not time to change state yet + return; if (caststate->tics == -1 || caststate->nextstate == S_NULL) { - // switch from deathstate to next monster + castnum++; castdeath = false; if (castorder[castnum].name == NULL) @@ -414,14 +414,14 @@ void F_CastTicker (void) } else { - // just advance to next state in animation + if (caststate == &states[S_PLAY_ATK1]) - goto stopattack; // Oh, gross hack! + goto stopattack; st = caststate->nextstate; caststate = &states[st]; castframes++; - // sound hacks.... + switch (st) { case S_PLAY_ATK1: sfx = sfx_dshtgn; break; @@ -459,7 +459,7 @@ void F_CastTicker (void) if (castframes == 12) { - // go into attack frame + castattacking = true; if (castonmelee) caststate=&states[mobjinfo[castorder[castnum].type].meleestate]; @@ -495,9 +495,9 @@ void F_CastTicker (void) } -// -// F_CastResponder -// + + + boolean F_CastResponder (event_t* ev) { @@ -505,9 +505,9 @@ boolean F_CastResponder (event_t* ev) return false; if (castdeath) - return true; // already in dying frames + return true; - // go into death frame + castdeath = true; caststate = &states[mobjinfo[castorder[castnum].type].deathstate]; casttics = caststate->tics; @@ -528,7 +528,7 @@ void F_CastPrint (char* text) int w; int width; - // find width + ch = text; width = 0; @@ -548,7 +548,7 @@ void F_CastPrint (char* text) width += w; } - // draw it + cx = 160-width/2; ch = text; while (ch) @@ -571,9 +571,9 @@ void F_CastPrint (char* text) } -// -// F_CastDrawer -// + + + void V_DrawPatchFlipped (int x, int y, int scrn, patch_t *patch); void F_CastDrawer (void) @@ -584,12 +584,12 @@ void F_CastDrawer (void) boolean flip; patch_t* patch; - // erase the entire screen to a background + V_DrawPatch (0,0,0, W_CacheLumpName ("BOSSBACK", PU_CACHE)); F_CastPrint (castorder[castnum].name); - // draw the current frame in the middle of the screen + sprdef = &sprites[caststate->sprite]; sprframe = &sprdef->spriteframes[ caststate->frame & FF_FRAMEMASK]; lump = sprframe->lump[0]; @@ -603,9 +603,9 @@ void F_CastDrawer (void) } -// -// F_DrawPatchCol -// + + + void F_DrawPatchCol ( int x, @@ -621,7 +621,7 @@ F_DrawPatchCol column = (column_t *)((byte *)patch + LONG(patch->columnofs[col])); desttop = screens[0]+x; - // step through the posts in a column + while (column->topdelta != 0xff ) { source = (byte *)column + 3; @@ -638,9 +638,9 @@ F_DrawPatchCol } -// -// F_BunnyScroll -// + + + void F_BunnyScroll (void) { int scrolled; @@ -694,9 +694,9 @@ void F_BunnyScroll (void) } -// -// F_Drawer -// + + + void F_Drawer (void) { if (finalestage == 2) diff --git a/src/f_finale.h b/src/f_finale.h @@ -1,23 +1,23 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __F_FINALE__ @@ -26,17 +26,17 @@ #include "doomtype.h" #include "d_event.h" -// -// FINALE -// -// Called by main loop. + + + + boolean F_Responder (event_t* ev); -// Called by main loop. + void F_Ticker (void); -// Called by main loop. + void F_Drawer (void); @@ -46,8 +46,8 @@ void F_StartFinale (void); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/f_wipe.c b/src/f_wipe.c @@ -1,25 +1,25 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// Mission begin melt/wipe screen special effect. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: f_wipe.c,v 1.2 1997/02/03 22:45:09 b1 Exp $"; @@ -35,11 +35,11 @@ static const char rcsid[] = "$Id: f_wipe.c,v 1.2 1997/02/03 22:45:09 b1 Exp $"; #include "f_wipe.h" -// -// SCREEN WIPE PACKAGE -// -// when zero, stop the wipe + + + + static boolean go = 0; static byte* wipe_scr_start; @@ -145,16 +145,16 @@ wipe_initMelt { int i, r; - // copy start screen to main screen + memcpy(wipe_scr, wipe_scr_start, width*height); - // makes this wipe faster (in theory) - // to have stuff in column-major format + + wipe_shittyColMajorXform((short*)wipe_scr_start, width/2, height); wipe_shittyColMajorXform((short*)wipe_scr_end, width/2, height); - // 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); for (i=1;i<width;i++) @@ -254,7 +254,7 @@ wipe_EndScreen { wipe_scr_end = screens[3]; I_ReadScreen(wipe_scr_end); - V_DrawBlock(x, y, 0, width, height, wipe_scr_start); // restore start scr. + V_DrawBlock(x, y, 0, width, height, wipe_scr_start); return 0; } @@ -276,21 +276,21 @@ wipe_ScreenWipe void V_MarkRect(int, int, int, int); - // initial stuff + if (!go) { go = 1; - // wipe_scr = (byte *) Z_Malloc(width*height, PU_STATIC, 0); // DEBUG + wipe_scr = screens[0]; (*wipes[wipeno*3])(width, height, ticks); } - // do a piece of wipe-in + V_MarkRect(0, 0, width, height); rc = (*wipes[wipeno*3+1])(width, height, ticks); - // V_DrawBlock(x, y, 0, width, height, wipe_scr); // DEBUG + - // final stuff + if (rc) { go = 0; diff --git a/src/f_wipe.h b/src/f_wipe.h @@ -1,38 +1,38 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// Mission start screen wipe/melt, special effects. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __F_WIPE_H__ #define __F_WIPE_H__ -// -// SCREEN WIPE PACKAGE -// + + + enum { - // simple gradual pixel change for 8-bit only + wipe_ColorXForm, - // weird screen melt + wipe_Melt, wipe_NUMWIPES @@ -64,8 +64,8 @@ wipe_ScreenWipe int ticks ); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/g_game.c b/src/g_game.c @@ -1,24 +1,24 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: none -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + static const char @@ -49,7 +49,7 @@ rcsid[] = "$Id: g_game.c,v 1.8 1997/02/03 22:45:09 b1 Exp $"; #include "st_stuff.h" #include "am_map.h" -// Needs access to LFB. + #include "v_video.h" #include "w_wad.h" @@ -58,11 +58,11 @@ rcsid[] = "$Id: g_game.c,v 1.8 1997/02/03 22:45:09 b1 Exp $"; #include "s_sound.h" -// Data. + #include "dstrings.h" #include "sounds.h" -// SKY handling - still the wrong place. + #include "r_data.h" #include "r_sky.h" @@ -102,27 +102,27 @@ int gameepisode; int gamemap; boolean paused; -boolean sendpause; // send a pause event next tic -boolean sendsave; // send a save event next tic -boolean usergame; // ok to save / end game +boolean sendpause; +boolean sendsave; +boolean usergame; -boolean timingdemo; // if true, exit with report on completion -boolean nodrawers; // for comparative timing purposes -boolean noblit; // for comparative timing purposes -int starttime; // for comparative timing purposes +boolean timingdemo; +boolean nodrawers; +boolean noblit; +int starttime; boolean viewactive; -boolean deathmatch; // only if started as net death -boolean netgame; // only true if packets are broadcast +boolean deathmatch; +boolean netgame; boolean playeringame[MAXPLAYERS]; player_t players[MAXPLAYERS]; -int consoleplayer; // player taking events and displaying -int displayplayer; // view being displayed +int consoleplayer; +int displayplayer; int gametic; -int levelstarttic; // gametic at level start -int totalkills, totalitems, totalsecret; // for intermission +int levelstarttic; +int totalkills, totalitems, totalsecret; char demoname[32]; boolean demorecording; @@ -131,20 +131,20 @@ boolean netdemo; byte* demobuffer; byte* demo_p; byte* demoend; -boolean singledemo; // quit after playing a demo from cmdline +boolean singledemo; -boolean precache = true; // if true, load all graphics at start +boolean precache = true; -wbstartstruct_t wminfo; // parms for world map / intermission +wbstartstruct_t wminfo; short consistancy[MAXPLAYERS][BACKUPTICS]; byte* savebuffer; -// -// controls (have defaults) -// + + + int key_right; int key_left; @@ -174,19 +174,19 @@ int joybspeed; fixed_t forwardmove[2] = {0x19, 0x32}; fixed_t sidemove[2] = {0x18, 0x28}; -fixed_t angleturn[3] = {640, 1280, 320}; // + slow turn +fixed_t angleturn[3] = {640, 1280, 320}; #define SLOWTURNTICS 6 #define NUMKEYS 256 boolean gamekeydown[NUMKEYS]; -int turnheld; // for accelerative turning +int turnheld; boolean mousearray[4]; -boolean* mousebuttons = &mousearray[1]; // allow [-1] +boolean* mousebuttons = &mousearray[1]; + -// mouse values are used once int mousex; int mousey; @@ -197,11 +197,11 @@ int dclicktime2; int dclickstate2; int dclicks2; -// joystick values are repeated + int joyxmove; int joyymove; boolean joyarray[5]; -boolean* joybuttons = &joyarray[1]; // allow [-1] +boolean* joybuttons = &joyarray[1]; int savegameslot; char savedescription[32]; @@ -212,7 +212,7 @@ char savedescription[32]; mobj_t* bodyque[BODYQUESIZE]; int bodyqueslot; -void* statcopy; // for statistics driver +void* statcopy; @@ -228,12 +228,12 @@ int G_CmdChecksum (ticcmd_t* cmd) } -// -// G_BuildTiccmd -// Builds a ticcmd from all of the available inputs -// or reads it from the demo buffer. -// If recording a demo, write it out -// + + + + + + void G_BuildTiccmd (ticcmd_t* cmd) { int i; @@ -246,7 +246,7 @@ void G_BuildTiccmd (ticcmd_t* cmd) ticcmd_t* base; - base = I_BaseTiccmd (); // empty, or external driver + base = I_BaseTiccmd (); memcpy (cmd,base,sizeof(*cmd)); cmd->consistancy = @@ -259,8 +259,8 @@ void G_BuildTiccmd (ticcmd_t* cmd) forward = side = 0; - // use two stage accelerative turning - // on the keyboard and joystick + + if (joyxmove < 0 || joyxmove > 0 || gamekeydown[key_right] @@ -270,21 +270,21 @@ void G_BuildTiccmd (ticcmd_t* cmd) turnheld = 0; if (turnheld < SLOWTURNTICS) - tspeed = 2; // slow turn + tspeed = 2; else tspeed = speed; - // let movement keys cancel each other out + if (strafe) { if (gamekeydown[key_right]) { - // fprintf(stderr, "strafe right\n"); + side += sidemove[speed]; } if (gamekeydown[key_left]) { - // fprintf(stderr, "strafe left\n"); + side -= sidemove[speed]; } if (joyxmove > 0) @@ -307,12 +307,12 @@ void G_BuildTiccmd (ticcmd_t* cmd) if (gamekeydown[key_up]) { - // fprintf(stderr, "up\n"); + forward += forwardmove[speed]; } if (gamekeydown[key_down]) { - // fprintf(stderr, "down\n"); + forward -= forwardmove[speed]; } if (joyymove < 0) @@ -324,7 +324,7 @@ void G_BuildTiccmd (ticcmd_t* cmd) if (gamekeydown[key_strafeleft]) side -= sidemove[speed]; - // buttons + cmd->chatchar = HU_dequeueChatChar(); if (gamekeydown[key_fire] || mousebuttons[mousebfire] @@ -334,11 +334,11 @@ void G_BuildTiccmd (ticcmd_t* cmd) if (gamekeydown[key_use] || joybuttons[joybuse] ) { cmd->buttons |= BT_USE; - // clear double clicks if hit use button + dclicks = 0; } - // chainsaw overrides + for (i=0 ; i<NUMWEAPONS-1 ; i++) if (gamekeydown['1'+i]) { @@ -347,11 +347,11 @@ void G_BuildTiccmd (ticcmd_t* cmd) break; } - // mouse + if (mousebuttons[mousebforward]) forward += forwardmove[speed]; - // forward double click + if (mousebuttons[mousebforward] != dclickstate && dclicktime > 1 ) { dclickstate = mousebuttons[mousebforward]; @@ -375,7 +375,7 @@ void G_BuildTiccmd (ticcmd_t* cmd) } } - // strafe double click + bstrafe = mousebuttons[mousebstrafe] || joybuttons[joybstrafe]; @@ -422,7 +422,7 @@ void G_BuildTiccmd (ticcmd_t* cmd) cmd->forwardmove += forward; cmd->sidemove += side; - // special buttons + if (sendpause) { sendpause = false; @@ -437,24 +437,24 @@ void G_BuildTiccmd (ticcmd_t* cmd) } -// -// G_DoLoadLevel -// + + + extern gamestate_t wipegamestate; void G_DoLoadLevel (void) { int i; - // Set the sky map. - // First thing, we have a dummy sky texture name, - // a flat. The data is in the WAD only because - // we look for an actual index, instead of simply - // setting one. + + + + + skyflatnum = R_FlatNumForName ( SKYFLATNAME ); - // DOOM determines the sky texture to be used - // depending on the current episode, and the game version. + + if ( (gamemode == commercial) || ( gamemode == pack_tnt ) || ( gamemode == pack_plut ) ) @@ -467,10 +467,10 @@ void G_DoLoadLevel (void) skytexture = R_TextureNumForName ("SKY2"); } - levelstarttic = gametic; // for time calculation + levelstarttic = gametic; if (wipegamestate == GS_LEVEL) - wipegamestate = -1; // force a wipe + wipegamestate = -1; gamestate = GS_LEVEL; @@ -482,12 +482,12 @@ void G_DoLoadLevel (void) } P_SetupLevel (gameepisode, gamemap, 0, gameskill); - displayplayer = consoleplayer; // view the guy you are playing + displayplayer = consoleplayer; starttime = I_GetTime (); gameaction = ga_nothing; Z_CheckHeap (); - // clear cmd building stuff + memset (gamekeydown, 0, sizeof(gamekeydown)); joyxmove = joyymove = 0; mousex = mousey = 0; @@ -497,17 +497,17 @@ void G_DoLoadLevel (void) } -// -// G_Responder -// Get info needed to make ticcmd_ts for the players. -// + + + + boolean G_Responder (event_t* ev) { - // allow spy mode changes even during the demo + if (gamestate == GS_LEVEL && ev->type == ev_keydown && ev->data1 == KEY_F12 && (singledemo || !deathmatch) ) { - // spy mode + do { displayplayer++; @@ -517,7 +517,7 @@ boolean G_Responder (event_t* ev) return true; } - // any other key pops up menu if in demos + if (gameaction == ga_nothing && !singledemo && (demoplayback || gamestate == GS_DEMOSCREEN) ) @@ -542,17 +542,17 @@ boolean G_Responder (event_t* ev) } #endif if (HU_Responder (ev)) - return true; // chat ate the event + return true; if (ST_Responder (ev)) - return true; // status window ate it + return true; if (AM_Responder (ev)) - return true; // automap ate it + return true; } if (gamestate == GS_FINALE) { if (F_Responder (ev)) - return true; // finale ate the event + return true; } switch (ev->type) @@ -565,12 +565,12 @@ boolean G_Responder (event_t* ev) } if (ev->data1 <NUMKEYS) gamekeydown[ev->data1] = true; - return true; // eat key down events + return true; case ev_keyup: if (ev->data1 <NUMKEYS) gamekeydown[ev->data1] = false; - return false; // always let key up events filter down + return false; case ev_mouse: mousebuttons[0] = ev->data1 & 1; @@ -578,7 +578,7 @@ boolean G_Responder (event_t* ev) mousebuttons[2] = ev->data1 & 4; mousex = ev->data2*(mouseSensitivity+5)/10; mousey = ev->data3*(mouseSensitivity+5)/10; - return true; // eat events + return true; case ev_joystick: joybuttons[0] = ev->data1 & 1; @@ -587,7 +587,7 @@ boolean G_Responder (event_t* ev) joybuttons[3] = ev->data1 & 8; joyxmove = ev->data2; joyymove = ev->data3; - return true; // eat events + return true; default: break; @@ -598,22 +598,22 @@ boolean G_Responder (event_t* ev) -// -// G_Ticker -// Make ticcmd_ts for the players. -// + + + + void G_Ticker (void) { int i; int buf; ticcmd_t* cmd; - // do player reborns if needed + for (i=0 ; i<MAXPLAYERS ; i++) if (playeringame[i] && players[i].playerstate == PST_REBORN) G_DoReborn (i); - // do things to change the game state + while (gameaction != ga_nothing) { switch (gameaction) @@ -651,8 +651,8 @@ void G_Ticker (void) } } - // get commands, check consistancy, - // and build new consistancy check + + buf = (gametic/ticdup)%BACKUPTICS; for (i=0 ; i<MAXPLAYERS ; i++) @@ -668,7 +668,7 @@ void G_Ticker (void) if (demorecording) G_WriteDemoTiccmd (cmd); - // check for turbo cheats + if (cmd->forwardmove > TURBOTHRESHOLD && !(gametic&31) && ((gametic>>5)&3) == i ) { @@ -694,7 +694,7 @@ void G_Ticker (void) } } - // check for special buttons + for (i=0 ; i<MAXPLAYERS ; i++) { if (playeringame[i]) @@ -723,7 +723,7 @@ void G_Ticker (void) } } - // do main actions + switch (gamestate) { case GS_LEVEL: @@ -748,34 +748,34 @@ void G_Ticker (void) } -// -// PLAYER STRUCTURE FUNCTIONS -// also see P_SpawnPlayer in P_Things -// -// -// G_InitPlayer -// Called at the start. -// Called by the game initialization functions. -// + + + + + + + + + void G_InitPlayer (int player) { player_t* p; - // set up the saved info + p = &players[player]; - // clear everything else to defaults + G_PlayerReborn (player); } -// -// G_PlayerFinishLevel -// Can when a player completes a level. -// + + + + void G_PlayerFinishLevel (int player) { player_t* p; @@ -784,19 +784,19 @@ void G_PlayerFinishLevel (int player) memset (p->powers, 0, sizeof (p->powers)); memset (p->cards, 0, sizeof (p->cards)); - p->mo->flags &= ~MF_SHADOW; // cancel invisibility - p->extralight = 0; // cancel gun flashes - p->fixedcolormap = 0; // cancel ir gogles - p->damagecount = 0; // no palette changes + p->mo->flags &= ~MF_SHADOW; + p->extralight = 0; + p->fixedcolormap = 0; + p->damagecount = 0; p->bonuscount = 0; } -// -// G_PlayerReborn -// Called after a player dies -// almost everything is cleared and initialized -// + + + + + void G_PlayerReborn (int player) { player_t* p; @@ -819,7 +819,7 @@ void G_PlayerReborn (int player) players[player].itemcount = itemcount; players[player].secretcount = secretcount; - p->usedown = p->attackdown = true; // don't do anything immediately + p->usedown = p->attackdown = true; p->playerstate = PST_LIVE; p->health = MAXHEALTH; p->readyweapon = p->pendingweapon = wp_pistol; @@ -832,12 +832,12 @@ void G_PlayerReborn (int player) } -// -// G_CheckSpot -// Returns false if the player cannot be respawned -// at the given mapthing_t spot -// because something is occupying it -// + + + + + + void P_SpawnPlayer (mapthing_t* mthing); boolean @@ -854,7 +854,7 @@ G_CheckSpot if (!players[playernum].mo) { - // first spawn of level, before corpses + for (i=0 ; i<playernum ; i++) if (players[i].mo->x == mthing->x << FRACBITS && players[i].mo->y == mthing->y << FRACBITS) @@ -868,13 +868,13 @@ G_CheckSpot if (!P_CheckPosition (players[playernum].mo, x, y) ) return false; - // flush an old corpse if needed + if (bodyqueslot >= BODYQUESIZE) P_RemoveMobj (bodyque[bodyqueslot%BODYQUESIZE]); bodyque[bodyqueslot%BODYQUESIZE] = players[playernum].mo; bodyqueslot++; - // spawn a teleport fog + ss = R_PointInSubsector (x,y); an = ( ANG45 * (mthing->angle/45) ) >> ANGLETOFINESHIFT; @@ -883,17 +883,17 @@ G_CheckSpot , MT_TFOG); if (players[consoleplayer].viewz != 1) - S_StartSound (mo, sfx_telept); // don't start sound on first frame + S_StartSound (mo, sfx_telept); return true; } -// -// G_DeathMatchSpawnPlayer -// Spawns a player at one of the random death match spots -// called at level load and each death -// + + + + + void G_DeathMatchSpawnPlayer (int playernum) { int i,j; @@ -914,30 +914,30 @@ void G_DeathMatchSpawnPlayer (int playernum) } } - // no good spot, so the player will probably get stuck + P_SpawnPlayer (&playerstarts[playernum]); } -// -// G_DoReborn -// + + + void G_DoReborn (int playernum) { int i; if (!netgame) { - // reload the level from scratch + gameaction = ga_loadlevel; } else { - // respawn at the start + - // first dissasociate the corpse + players[playernum].mo->player = NULL; - // spawn at random spot if in death match + if (deathmatch) { G_DeathMatchSpawnPlayer (playernum); @@ -950,17 +950,17 @@ void G_DoReborn (int playernum) return; } - // try to spawn at one of the other players spots + for (i=0 ; i<MAXPLAYERS ; i++) { if (G_CheckSpot (playernum, &playerstarts[i]) ) { - playerstarts[i].type = playernum+1; // fake as other player + playerstarts[i].type = playernum+1; P_SpawnPlayer (&playerstarts[i]); - playerstarts[i].type = i+1; // restore + playerstarts[i].type = i+1; return; } - // he's going to be inside something. Too bad. + } P_SpawnPlayer (&playerstarts[playernum]); } @@ -974,7 +974,7 @@ void G_ScreenShot (void) -// DOOM Par Times + int pars[4][10] = { {0}, @@ -983,19 +983,19 @@ int pars[4][10] = {0,90,45,90,150,90,90,165,30,135} }; -// DOOM II Par Times + int cpars[32] = { - 30,90,120,120,90,150,120,120,270,90, // 1-10 - 210,150,150,150,210,150,420,150,210,150, // 11-20 - 240,150,180,150,150,300,330,420,300,180, // 21-30 - 120,30 // 31-32 + 30,90,120,120,90,150,120,120,270,90, + 210,150,150,150,210,150,420,150,210,150, + 240,150,180,150,150,300,330,420,300,180, + 120,30 }; -// -// G_DoCompleted -// + + + boolean secretexit; extern char* pagename; @@ -1005,10 +1005,10 @@ void G_ExitLevel (void) gameaction = ga_completed; } -// Here's for the german edition. + void G_SecretExitLevel (void) { - // IF NO WOLF3D LEVELS, NO SECRET EXIT! + if ( (gamemode == commercial) && (W_CheckNumForName("map31")<0)) secretexit = false; @@ -1025,7 +1025,7 @@ void G_DoCompleted (void) for (i=0 ; i<MAXPLAYERS ; i++) if (playeringame[i]) - G_PlayerFinishLevel (i); // take away cards and stuff + G_PlayerFinishLevel (i); if (automapactive) AM_Stop (); @@ -1042,11 +1042,11 @@ void G_DoCompleted (void) break; } -//#if 0 Hmmm - why? + if ( (gamemap == 8) && (gamemode != commercial) ) { - // victory + gameaction = ga_victory; return; } @@ -1054,18 +1054,18 @@ void G_DoCompleted (void) if ( (gamemap == 9) && (gamemode != commercial) ) { - // exit secret level + for (i=0 ; i<MAXPLAYERS ; i++) players[i].didsecret = true; } -//#endif + wminfo.didsecret = players[consoleplayer].didsecret; wminfo.epsd = gameepisode -1; wminfo.last = gamemap -1; - // wminfo.next is 0 biased, unlike gamemap + if ( gamemode == commercial) { if (secretexit) @@ -1085,10 +1085,10 @@ void G_DoCompleted (void) else { if (secretexit) - wminfo.next = 8; // go to secret level + wminfo.next = 8; else if (gamemap == 9) { - // returning from secret level + switch (gameepisode) { case 1: @@ -1106,7 +1106,7 @@ void G_DoCompleted (void) } } else - wminfo.next = gamemap; // go to next level + wminfo.next = gamemap; } wminfo.maxkills = totalkills; @@ -1141,9 +1141,9 @@ void G_DoCompleted (void) } -// -// G_WorldDone -// + + + void G_WorldDone (void) { gameaction = ga_worlddone; @@ -1180,10 +1180,10 @@ void G_DoWorldDone (void) -// -// G_InitFromSavegame -// Can be called by the startup code or the menu task. -// + + + + extern boolean setsizeneeded; void R_ExecuteSetViewSize (void); @@ -1210,11 +1210,11 @@ void G_DoLoadGame (void) length = M_ReadFile (savename, &savebuffer); save_p = savebuffer + SAVESTRINGSIZE; - // skip the description field + memset (vcheck,0,sizeof(vcheck)); sprintf (vcheck,"version %i",VERSION); if (strcmp (save_p, vcheck)) - return; // bad version + return; save_p += VERSIONSIZE; gameskill = *save_p++; @@ -1223,16 +1223,16 @@ void G_DoLoadGame (void) for (i=0 ; i<MAXPLAYERS ; i++) playeringame[i] = *save_p++; - // load a base level + G_InitNew (gameskill, gameepisode, gamemap); - // get the times + a = *save_p++; b = *save_p++; c = *save_p++; leveltime = (a<<16) + (b<<8) + c; - // dearchive all the modifications + P_UnArchivePlayers (); P_UnArchiveWorld (); P_UnArchiveThinkers (); @@ -1241,22 +1241,22 @@ void G_DoLoadGame (void) if (*save_p != 0x1d) I_Error ("Bad savegame"); - // done + Z_Free (savebuffer); if (setsizeneeded) R_ExecuteSetViewSize (); - // draw the pattern into the back screen + R_FillBackScreen (); } -// -// G_SaveGame -// Called by the menu task. -// Description is a 24 byte text string -// + + + + + void G_SaveGame ( int slot, @@ -1304,7 +1304,7 @@ void G_DoSaveGame (void) P_ArchiveThinkers (); P_ArchiveSpecials (); - *save_p++ = 0x1d; // consistancy marker + *save_p++ = 0x1d; length = save_p - savebuffer; if (length > SAVEGAMESIZE) @@ -1315,16 +1315,16 @@ void G_DoSaveGame (void) players[consoleplayer].message = GGSAVED; - // draw the pattern into the back screen + R_FillBackScreen (); } -// -// G_InitNew -// Can be called by the startup code or the menu task, -// consoleplayer, displayplayer, playeringame[] should be set. -// + + + + + skill_t d_skill; int d_episode; int d_map; @@ -1357,7 +1357,7 @@ void G_DoNewGame (void) gameaction = ga_nothing; } -// The sky texture to be used instead of the F_SKY1 dummy. + extern int skytexture; @@ -1380,9 +1380,9 @@ G_InitNew skill = sk_nightmare; - // This was quite messy with SPECIAL and commented parts. - // Supposedly hacks to make the latest edition work. - // It might not work properly. + + + if (episode < 1) episode = 1; @@ -1394,7 +1394,7 @@ G_InitNew else if ( gamemode == shareware ) { if (episode > 1) - episode = 1; // only start episode 1 on shareware + episode = 1; } else { @@ -1436,11 +1436,11 @@ G_InitNew } - // force players to be initialized upon first level load + for (i=0 ; i<MAXPLAYERS ; i++) players[i].playerstate = PST_REBORN; - usergame = true; // will be set false if a demo + usergame = true; paused = false; demoplayback = false; automapactive = false; @@ -1451,7 +1451,7 @@ G_InitNew viewactive = true; - // set the sky map for the episode + if ( gamemode == commercial) { skytexture = R_TextureNumForName ("SKY3"); @@ -1473,7 +1473,7 @@ G_InitNew case 3: skytexture = R_TextureNumForName ("SKY3"); break; - case 4: // Special Edition sky + case 4: skytexture = R_TextureNumForName ("SKY4"); break; } @@ -1482,9 +1482,9 @@ G_InitNew } -// -// DEMO RECORDING -// + + + #define DEMOMARKER 0x80 @@ -1492,7 +1492,7 @@ void G_ReadDemoTiccmd (ticcmd_t* cmd) { if (*demo_p == DEMOMARKER) { - // end of demo data stream + G_CheckDemoStatus (); return; } @@ -1505,7 +1505,7 @@ void G_ReadDemoTiccmd (ticcmd_t* cmd) void G_WriteDemoTiccmd (ticcmd_t* cmd) { - if (gamekeydown['q']) // press q to end demo recording + if (gamekeydown['q']) G_CheckDemoStatus (); *demo_p++ = cmd->forwardmove; *demo_p++ = cmd->sidemove; @@ -1514,19 +1514,19 @@ void G_WriteDemoTiccmd (ticcmd_t* cmd) demo_p -= 4; if (demo_p > demoend - 16) { - // no more space + G_CheckDemoStatus (); return; } - G_ReadDemoTiccmd (cmd); // make SURE it is exactly the same + G_ReadDemoTiccmd (cmd); } -// -// G_RecordDemo -// + + + void G_RecordDemo (char* name) { int i; @@ -1567,9 +1567,9 @@ void G_BeginRecording (void) } -// -// G_PlayDemo -// + + + char* defdemoname; @@ -1610,7 +1610,7 @@ void G_DoPlayDemo (void) netdemo = true; } - // don't spend a lot of time in loadlevel + precache = false; G_InitNew (skill, episode, map); precache = true; @@ -1619,9 +1619,9 @@ void G_DoPlayDemo (void) demoplayback = true; } -// -// G_TimeDemo -// + + + void G_TimeDemo (char* name) { nodrawers = M_CheckParm ("-nodraw"); diff --git a/src/g_game.h b/src/g_game.h @@ -1,23 +1,23 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// Duh. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __G_GAME__ @@ -28,30 +28,30 @@ -// -// GAME -// + + + void G_DeathMatchSpawnPlayer (int playernum); void G_InitNew (skill_t skill, int episode, int map); -// Can be called by the startup code or M_Responder. -// A normal game starts at map 1, -// but a warp test can start elsewhere + + + void G_DeferedInitNew (skill_t skill, int episode, int map); void G_DeferedPlayDemo (char* demo); -// Can be called by the startup code or M_Responder, -// calls P_SetupLevel or W_EnterWorld. + + void G_LoadGame (char* name); void G_DoLoadGame (void); -// Called by M_Responder. + void G_SaveGame (int slot, char* description); -// Only called by startup code. + void G_RecordDemo (char* name); void G_BeginRecording (void); @@ -72,8 +72,8 @@ void G_ScreenShot (void); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/hu_lib.c b/src/hu_lib.c @@ -1,24 +1,24 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: heads-up text and input code -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: hu_lib.c,v 1.3 1997/01/26 07:44:58 b1 Exp $"; @@ -34,10 +34,10 @@ rcsid[] = "$Id: hu_lib.c,v 1.3 1997/01/26 07:44:58 b1 Exp $"; #include "r_local.h" #include "r_draw.h" -// boolean : whether the screen is always erased + #define noterased viewwindowx -extern boolean automapactive; // in AM_map.c +extern boolean automapactive; void HUlib_init(void) { @@ -107,7 +107,7 @@ HUlib_drawTextLine int x; unsigned char c; - // draw the new stuff + x = l->x; for (i=0;i<l->len;i++) { @@ -130,7 +130,7 @@ HUlib_drawTextLine } } - // draw the cursor if requested + if (drawcursor && x + SHORT(l->f['_' - l->sc]->width) <= SCREENWIDTH) { @@ -139,7 +139,7 @@ HUlib_drawTextLine } -// sorta called by HU_Erase and just better darn get things straight + void HUlib_eraseTextLine(hu_textline_t* l) { int lh; @@ -147,9 +147,9 @@ void HUlib_eraseTextLine(hu_textline_t* l) int yoffset; static boolean lastautomapactive = true; - // Only erases when NOT in automap and the screen is reduced, - // and the text must either need updating or refreshing - // (because of a recent change back from the automap) + + + if (!automapactive && viewwindowx && l->needsupdate) @@ -158,12 +158,12 @@ void HUlib_eraseTextLine(hu_textline_t* l) for (y=l->y,yoffset=y*SCREENWIDTH ; y<l->y+lh ; y++,yoffset+=SCREENWIDTH) { if (y < viewwindowy || y >= viewwindowy + viewheight) - R_VideoErase(yoffset, SCREENWIDTH); // erase entire line + R_VideoErase(yoffset, SCREENWIDTH); else { - R_VideoErase(yoffset, viewwindowx); // erase left border + R_VideoErase(yoffset, viewwindowx); R_VideoErase(yoffset + viewwindowx + viewwidth, viewwindowx); - // erase right border + } } } @@ -202,12 +202,12 @@ void HUlib_addLineToSText(hu_stext_t* s) int i; - // add a clear line + if (++s->cl == s->h) s->cl = 0; HUlib_clearTextLine(&s->l[s->cl]); - // everything needs updating + for (i=0 ; i<s->h ; i++) s->l[i].needsupdate = 4; @@ -234,19 +234,19 @@ void HUlib_drawSText(hu_stext_t* s) hu_textline_t *l; if (!*s->on) - return; // if not on, don't draw + return; - // draw everything + for (i=0 ; i<s->h ; i++) { idx = s->cl - i; if (idx < 0) - idx += s->h; // handle queue of lines + idx += s->h; l = &s->l[idx]; - // need a decision made here on whether to skip the draw - HUlib_drawTextLine(l, false); // no cursor, please + + HUlib_drawTextLine(l, false); } } @@ -275,14 +275,14 @@ HUlib_initIText int startchar, boolean* on ) { - it->lm = 0; // default left margin is start of text + it->lm = 0; it->on = on; it->laston = true; HUlib_initTextLine(&it->l, x, y, font, startchar); } -// The following deletion routines adhere to the left margin restriction + void HUlib_delCharFromIText(hu_itext_t* it) { if (it->l.len != it->lm) @@ -295,7 +295,7 @@ void HUlib_eraseLineFromIText(hu_itext_t* it) HUlib_delCharFromTextLine(&it->l); } -// Resets left margin as well + void HUlib_resetIText(hu_itext_t* it) { it->lm = 0; @@ -312,8 +312,8 @@ HUlib_addPrefixToIText it->lm = it->l.len; } -// wrapper function for handling general keyed input. -// returns true if it ate the key + + boolean HUlib_keyInIText ( hu_itext_t* it, @@ -327,9 +327,9 @@ HUlib_keyInIText HUlib_delCharFromIText(it); else if (ch != KEY_ENTER) - return false; // did not eat key + return false; - return true; // ate the key + return true; } @@ -340,7 +340,7 @@ void HUlib_drawIText(hu_itext_t* it) if (!*it->on) return; - HUlib_drawTextLine(l, true); // draw the line w/ cursor + HUlib_drawTextLine(l, true); } diff --git a/src/hu_lib.h b/src/hu_lib.h @@ -1,131 +1,131 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: none -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + #ifndef __HULIB__ #define __HULIB__ -// We are referring to patches. + #include "r_defs.h" -// background and foreground screen numbers -// different from other modules. + + #define BG 1 #define FG 0 -// font stuff + #define HU_CHARERASE KEY_BACKSPACE #define HU_MAXLINES 4 #define HU_MAXLINELENGTH 80 -// -// Typedefs of widgets -// -// Text Line widget -// (parent of Scrolling Text and Input Text widgets) + + + + + typedef struct { - // left-justified position of scrolling text window + int x; int y; - patch_t** f; // font - int sc; // start character - char l[HU_MAXLINELENGTH+1]; // line of text - int len; // current line length + patch_t** f; + int sc; + char l[HU_MAXLINELENGTH+1]; + int len; - // whether this line needs to be udpated + int needsupdate; } hu_textline_t; -// Scrolling Text window widget -// (child of Text Line widget) + + typedef struct { - hu_textline_t l[HU_MAXLINES]; // text lines to draw - int h; // height in lines - int cl; // current line number + hu_textline_t l[HU_MAXLINES]; + int h; + int cl; - // pointer to boolean stating whether to update window + boolean* on; - boolean laston; // last value of *->on. + boolean laston; } hu_stext_t; -// Input Text Line widget -// (child of Text Line widget) + + typedef struct { - hu_textline_t l; // text line to input on + hu_textline_t l; - // left margin past which I am not to delete characters + int lm; - // pointer to boolean stating whether to update window + boolean* on; - boolean laston; // last value of *->on; + boolean laston; } hu_itext_t; -// -// Widget creation, access, and update routines -// -// initializes heads-up widget library + + + + void HUlib_init(void); -// -// textline code -// -// clear a line of text + + + + void HUlib_clearTextLine(hu_textline_t *t); void HUlib_initTextLine(hu_textline_t *t, int x, int y, patch_t **f, int sc); -// returns success + boolean HUlib_addCharToTextLine(hu_textline_t *t, char ch); -// returns success + boolean HUlib_delCharFromTextLine(hu_textline_t *t); -// draws tline + void HUlib_drawTextLine(hu_textline_t *l, boolean drawcursor); -// erases text line + void HUlib_eraseTextLine(hu_textline_t *l); -// -// Scrolling Text window widget routines -// -// ? + + + + void HUlib_initSText ( hu_stext_t* s, @@ -136,23 +136,23 @@ HUlib_initSText int startchar, boolean* on ); -// add a new line + void HUlib_addLineToSText(hu_stext_t* s); -// ? + void HUlib_addMessageToSText ( hu_stext_t* s, char* prefix, char* msg ); -// draws stext + void HUlib_drawSText(hu_stext_t* s); -// erases all stext lines + void HUlib_eraseSText(hu_stext_t* s); -// Input Text Line widget routines + void HUlib_initIText ( hu_itext_t* it, @@ -162,22 +162,22 @@ HUlib_initIText int startchar, boolean* on ); -// enforces left margin + void HUlib_delCharFromIText(hu_itext_t* it); -// enforces left margin + void HUlib_eraseLineFromIText(hu_itext_t* it); -// resets line and left margin + void HUlib_resetIText(hu_itext_t* it); -// left of left-margin + void HUlib_addPrefixToIText ( hu_itext_t* it, char* str ); -// whether eaten + boolean HUlib_keyInIText ( hu_itext_t* it, @@ -185,12 +185,12 @@ HUlib_keyInIText void HUlib_drawIText(hu_itext_t* it); -// erases all itext lines + void HUlib_eraseIText(hu_itext_t* it); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/hu_stuff.c b/src/hu_stuff.c @@ -1,24 +1,24 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: Heads-up displays -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: hu_stuff.c,v 1.4 1997/02/03 16:47:52 b1 Exp $"; @@ -39,13 +39,13 @@ rcsid[] = "$Id: hu_stuff.c,v 1.4 1997/02/03 16:47:52 b1 Exp $"; #include "doomstat.h" -// Data. + #include "dstrings.h" #include "sounds.h" -// -// Locally used constants, shortcuts. -// + + + #define HU_TITLE (mapnames[(gameepisode-1)*9+gamemap-1]) #define HU_TITLE2 (mapnames2[gamemap-1]) #define HU_TITLEP (mapnamesp[gamemap-1]) @@ -85,7 +85,7 @@ char* player_names[] = }; -char chat_char; // remove later. +char chat_char; static player_t* plr; patch_t* hu_font[HU_FONTSIZE]; static hu_textline_t w_title; @@ -107,12 +107,12 @@ extern boolean automapactive; static boolean headsupactive = false; -// -// Builtin map names. -// The actual names can be found in DStrings.h. -// -char* mapnames[] = // DOOM shareware/registered/retail (Ultimate) names. + + + + +char* mapnames[] = { HUSTR_E1M1, @@ -166,7 +166,7 @@ char* mapnames[] = // DOOM shareware/registered/retail (Ultimate) names. "NEWLEVEL" }; -char* mapnames2[] = // DOOM 2 map names. +char* mapnames2[] = { HUSTR_1, HUSTR_2, @@ -205,7 +205,7 @@ char* mapnames2[] = // DOOM 2 map names. }; -char* mapnamesp[] = // Plutonia WAD map names. +char* mapnamesp[] = { PHUSTR_1, PHUSTR_2, @@ -244,7 +244,7 @@ char* mapnamesp[] = // Plutonia WAD map names. }; -char *mapnamest[] = // TNT WAD map names. +char *mapnamest[] = { THUSTR_1, THUSTR_2, @@ -293,34 +293,34 @@ const char french_shiftxform[] = 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, ' ', '!', '"', '#', '$', '%', '&', - '"', // shift-' + '"', '(', ')', '*', '+', - '?', // shift-, - '_', // shift-- - '>', // shift-. - '?', // shift-/ - '0', // shift-0 - '1', // shift-1 - '2', // shift-2 - '3', // shift-3 - '4', // shift-4 - '5', // shift-5 - '6', // shift-6 - '7', // shift-7 - '8', // shift-8 - '9', // shift-9 + '?', + '_', + '>', + '?', + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', '/', - '.', // shift-; + '.', '<', - '+', // shift-= + '+', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - '[', // shift-[ - '!', // shift-backslash - OH MY GOD DOES WATCOM SUCK - ']', // shift-] + '[', + '!', + ']', '"', '_', - '\'', // shift-` + '\'', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', 127 @@ -336,34 +336,34 @@ const char english_shiftxform[] = 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, ' ', '!', '"', '#', '$', '%', '&', - '"', // shift-' + '"', '(', ')', '*', '+', - '<', // shift-, - '_', // shift-- - '>', // shift-. - '?', // shift-/ - ')', // shift-0 - '!', // shift-1 - '@', // shift-2 - '#', // shift-3 - '$', // shift-4 - '%', // shift-5 - '^', // shift-6 - '&', // shift-7 - '*', // shift-8 - '(', // shift-9 + '<', + '_', + '>', + '?', + ')', + '!', + '@', + '#', + '$', + '%', + '^', + '&', + '*', + '(', ':', - ':', // shift-; + ':', '<', - '+', // shift-= + '+', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - '[', // shift-[ - '!', // shift-backslash - OH MY GOD DOES WATCOM SUCK - ']', // shift-] + '[', + '!', + ']', '"', '_', - '\'', // shift-` + '\'', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', 127 @@ -401,7 +401,7 @@ void HU_Init(void) else shiftxform = english_shiftxform; - // load the heads-up font + j = HU_FONTSTART; for (i=0;i<HU_FONTSIZE;i++) { @@ -431,13 +431,13 @@ void HU_Start(void) message_nottobefuckedwith = false; chat_on = false; - // create the message widget + HUlib_initSText(&w_message, HU_MSGX, HU_MSGY, HU_MSGHEIGHT, hu_font, HU_FONTSTART, &message_on); - // create the map title widget + HUlib_initTextLine(&w_title, HU_TITLEX, HU_TITLEY, hu_font, @@ -469,13 +469,13 @@ void HU_Start(void) while (*s) HUlib_addCharToTextLine(&w_title, *(s++)); - // create the chat widget + HUlib_initIText(&w_chat, HU_INPUTX, HU_INPUTY, hu_font, HU_FONTSTART, &chat_on); - // create the inputbuffer widgets + for (i=0 ; i<MAXPLAYERS ; i++) HUlib_initIText(&w_inputbuffer[i], 0, 0, 0, 0, &always_off); @@ -508,7 +508,7 @@ void HU_Ticker(void) int i, rc; char c; - // tick down message counter if message is up + if (message_counter && !--message_counter) { message_on = false; @@ -518,7 +518,7 @@ void HU_Ticker(void) if (showMessages || message_dontfuckwithme) { - // display message if necessary + if ((plr->message && !message_nottobefuckedwith) || (plr->message && message_dontfuckwithme)) { @@ -530,9 +530,9 @@ void HU_Ticker(void) message_dontfuckwithme = 0; } - } // else message_on = false; + } - // check for incoming chat characters + if (netgame) { for (i=0 ; i<MAXPLAYERS; i++) @@ -702,24 +702,24 @@ boolean HU_Responder(event_t *ev) else { c = ev->data1; - // send a macro + if (altdown) { c = c - '0'; if (c > 9) return false; - // fprintf(stderr, "got here\n"); + macromessage = chat_macros[c]; - // kill last message with a '\n' - HU_queueChatChar(KEY_ENTER); // DEBUG!!! - // send the macro message + HU_queueChatChar(KEY_ENTER); + + while (*macromessage) HU_queueChatChar(*macromessage++); HU_queueChatChar(KEY_ENTER); - // leave chat mode and notify that it was sent + chat_on = false; strcpy(lastmessage, chat_macros[c]); plr->message = lastmessage; @@ -734,11 +734,11 @@ boolean HU_Responder(event_t *ev) eatkey = HUlib_keyInIText(&w_chat, c); if (eatkey) { - // static unsigned char buf[20]; // DEBUG + HU_queueChatChar(c); - // sprintf(buf, "KEY: %d => %d", ev->data1, c); - // plr->message = buf; + + } if (c == KEY_ENTER) { diff --git a/src/hu_stuff.h b/src/hu_stuff.h @@ -1,22 +1,22 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: Head up display -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + #ifndef __HU_STUFF_H__ #define __HU_STUFF_H__ @@ -24,13 +24,13 @@ #include "d_event.h" -// -// Globally visible constants. -// -#define HU_FONTSTART '!' // the first font characters -#define HU_FONTEND '_' // the last font characters -// Calculate # of glyphs in font. + + +#define HU_FONTSTART '!' +#define HU_FONTEND '_' + + #define HU_FONTSIZE (HU_FONTEND - HU_FONTSTART + 1) #define HU_BROADCAST 5 @@ -38,14 +38,14 @@ #define HU_MSGREFRESH KEY_ENTER #define HU_MSGX 0 #define HU_MSGY 0 -#define HU_MSGWIDTH 64 // in characters -#define HU_MSGHEIGHT 1 // in lines +#define HU_MSGWIDTH 64 +#define HU_MSGHEIGHT 1 #define HU_MSGTIMEOUT (4*TICRATE) -// -// HEADS UP TEXT -// + + + void HU_Init(void); void HU_Start(void); @@ -59,8 +59,8 @@ void HU_Erase(void); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/i_main.c b/src/i_main.c @@ -1,25 +1,25 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// Main program, simply calls D_DoomMain high level loop. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: i_main.c,v 1.4 1997/02/03 22:45:10 b1 Exp $"; diff --git a/src/i_net.c b/src/i_net.c @@ -1,24 +1,24 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $"; @@ -51,7 +51,7 @@ rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $"; -// For some odd reason... + #define ntohl(x) \ ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \ (((unsigned long int)(x) & 0x0000ff00U) << 8) | \ @@ -69,9 +69,9 @@ void NetSend (void); boolean NetListen (void); -// -// NETWORKING -// + + + int DOOMPORT = (IPPORT_USERRESERVED +0x1d ); @@ -84,14 +84,14 @@ void (*netget) (void); void (*netsend) (void); -// -// UDPsocket -// + + + int UDPsocket (void) { int s; - // allocate a socket + s = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s<0) I_Error ("can't create socket: %s",strerror(errno)); @@ -99,9 +99,9 @@ int UDPsocket (void) return s; } -// -// BindToLocalPort -// + + + void BindToLocalPort ( int s, @@ -121,15 +121,15 @@ BindToLocalPort } -// -// PacketSend -// + + + void PacketSend (void) { int c; doomdata_t sw; - // byte swap + sw.checksum = htonl(netbuffer->checksum); sw.player = netbuffer->player; sw.retransmitfrom = netbuffer->retransmitfrom; @@ -145,19 +145,19 @@ void PacketSend (void) sw.cmds[c].buttons = netbuffer->cmds[c].buttons; } - //printf ("sending %i\n",gametic); + c = sendto (sendsocket , &sw, doomcom->datalength ,0,(void *)&sendaddress[doomcom->remotenode] ,sizeof(sendaddress[doomcom->remotenode])); - // if (c == -1) - // I_Error ("SendPacket error: %s",strerror(errno)); + + } -// -// PacketGet -// + + + void PacketGet (void) { int i; @@ -173,7 +173,7 @@ void PacketGet (void) { if (errno != EWOULDBLOCK) I_Error ("GetPacket: %s",strerror(errno)); - doomcom->remotenode = -1; // no packet + doomcom->remotenode = -1; return; } @@ -184,22 +184,22 @@ void PacketGet (void) first = 0; } - // find remote node number + for (i=0 ; i<doomcom->numnodes ; i++) if ( fromaddress.sin_addr.s_addr == sendaddress[i].sin_addr.s_addr ) break; if (i == doomcom->numnodes) { - // packet is not from one of the players (new game broadcast) - doomcom->remotenode = -1; // no packet + + doomcom->remotenode = -1; return; } - doomcom->remotenode = i; // good packet from a game player + doomcom->remotenode = i; doomcom->datalength = c; - // byte swap + netbuffer->checksum = ntohl(sw.checksum); netbuffer->player = sw.player; netbuffer->retransmitfrom = sw.retransmitfrom; @@ -222,10 +222,10 @@ void PacketGet (void) int GetLocalAddress (void) { char hostname[1024]; - struct hostent* hostentry; // host information entry + struct hostent* hostentry; int v; - // get local address + v = gethostname (hostname, sizeof(hostname)); if (v == -1) I_Error ("GetLocalAddress : gethostname: errno %d",errno); @@ -238,20 +238,20 @@ int GetLocalAddress (void) } -// -// I_InitNetwork -// + + + void I_InitNetwork (void) { boolean trueval = true; int i; int p; - struct hostent* hostentry; // host information entry + struct hostent* hostentry; doomcom = malloc (sizeof (*doomcom) ); memset (doomcom, 0, sizeof(*doomcom) ); - // set up for network + i = M_CheckParm ("-dup"); if (i && i< myargc-1) { @@ -276,12 +276,12 @@ void I_InitNetwork (void) printf ("using alternate port %i\n",DOOMPORT); } - // parse network game options, - // -net <consoleplayer> <host> <host> ... + + i = M_CheckParm ("-net"); if (!i) { - // single player game + netgame = false; doomcom->id = DOOMCOM_ID; doomcom->numplayers = doomcom->numnodes = 1; @@ -294,10 +294,10 @@ void I_InitNetwork (void) netget = PacketGet; netgame = true; - // parse player number and host list + doomcom->consoleplayer = myargv[i+1][0]-'1'; - doomcom->numnodes = 1; // this node for sure + doomcom->numnodes = 1; i++; while (++i < myargc && myargv[i][0] != '-') @@ -323,7 +323,7 @@ void I_InitNetwork (void) doomcom->id = DOOMCOM_ID; doomcom->numplayers = doomcom->numnodes; - // build message to receive + insocket = UDPsocket (); BindToLocalPort (insocket,htons(DOOMPORT)); ioctl (insocket, FIONBIO, &trueval); diff --git a/src/i_net.h b/src/i_net.h @@ -1,23 +1,23 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// System specific network interface stuff. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __I_NET__ @@ -30,7 +30,7 @@ -// Called by D_DoomMain. + void I_InitNetwork (void); @@ -38,8 +38,8 @@ void I_NetCmd (void); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/i_sound.c b/src/i_sound.c @@ -1,25 +1,25 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// System interface for sound. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: i_unix.c,v 1.5 1997/02/03 22:45:10 b1 Exp $"; @@ -41,10 +41,10 @@ rcsid[] = "$Id: i_unix.c,v 1.5 1997/02/03 22:45:10 b1 Exp $"; #include <unistd.h> #include <sys/ioctl.h> -// Linux voxware output. + #include <linux/soundcard.h> -// Timer stuff. Experimental. + #include <time.h> #include <signal.h> @@ -58,104 +58,104 @@ rcsid[] = "$Id: i_unix.c,v 1.5 1997/02/03 22:45:10 b1 Exp $"; #include "doomdef.h" -// UNIX hack, to be removed. + #ifdef SNDSERV -// Separate sound server process. + FILE* sndserver=0; char* sndserver_filename = "./sndserver "; #elif SNDINTR -// Update all 30 millisecs, approx. 30fps synchronized. -// Linux resolution is allegedly 10 millisecs, -// scale is microseconds. + + + #define SOUND_INTERVAL 500 -// Get the interrupt. Set duration in millisecs. + int I_SoundSetTimer( int duration_of_tick ); void I_SoundDelTimer( void ); #else -// None? + #endif -// A quick hack to establish a protocol between -// synchronous mix buffer updates and asynchronous -// audio writes. Probably redundant with gametic. + + + static int flag = 0; -// The number of internal mixing channels, -// the samples calculated for each mixing step, -// the size of the 16bit, 2 hardware channel (stereo) -// mixing buffer, and the samplerate of the raw data. -// Needed for calling the actual sound output. + + + + + #define SAMPLECOUNT 512 #define NUM_CHANNELS 8 -// It is 2 for 16bit, and 2 for two channels. + #define BUFMUL 4 #define MIXBUFFERSIZE (SAMPLECOUNT*BUFMUL) -#define SAMPLERATE 11025 // Hz -#define SAMPLESIZE 2 // 16bit +#define SAMPLERATE 11025 +#define SAMPLESIZE 2 + -// The actual lengths of all sound effects. int lengths[NUMSFX]; -// The actual output device. + int audio_fd; -// The global mixing buffer. -// Basically, samples from all active internal channels -// are modifed and added, and stored in the buffer -// that is submitted to the audio device. + + + + signed short mixbuffer[MIXBUFFERSIZE]; -// The channel step amount... + unsigned int channelstep[NUM_CHANNELS]; -// ... and a 0.16 bit remainder of last step. + unsigned int channelstepremainder[NUM_CHANNELS]; -// The channel data pointers, start and end. + unsigned char* channels[NUM_CHANNELS]; unsigned char* channelsend[NUM_CHANNELS]; -// Time/gametic that the channel started playing, -// used to determine oldest, which automatically -// has lowest priority. -// In case number of active sounds exceeds -// available channels. + + + + + int channelstart[NUM_CHANNELS]; -// The sound in channel handles, -// determined on registration, -// might be used to unregister/stop/modify, -// currently unused. + + + + int channelhandles[NUM_CHANNELS]; -// SFX id of the playing sound effect. -// Used to catch duplicates (like chainsaw). + + int channelids[NUM_CHANNELS]; -// Pitch to stepping lookup, unused. + int steptable[256]; -// Volume lookups. + int vol_lookup[128*256]; -// Hardware left and right channel volume lookup. + int* channelleftvol_lookup[NUM_CHANNELS]; int* channelrightvol_lookup[NUM_CHANNELS]; -// -// Safe ioctl, convenience. -// + + + void myioctl ( int fd, @@ -177,10 +177,10 @@ myioctl -// -// This function loads the sound data from the WAD lump, -// for single sound. -// + + + + void* getsfx ( char* sfxname, @@ -195,20 +195,20 @@ getsfx int sfxlump; - // Get the sound data from the WAD, allocate lump - // in zone memory. + + sprintf(name, "ds%s", sfxname); - // Now, there is a severe problem with the - // sound handling, in it is not (yet/anymore) - // gamemode aware. That means, sounds from - // DOOM II will be requested even with DOOM - // shareware. - // The sound list is wired into sounds.c, - // which sets the external variable. - // I do not do runtime patches to that - // variable. Instead, we will use a - // default sound for replacement. + + + + + + + + + + if ( W_CheckNumForName(name) == -1 ) sfxlump = W_GetNumForName("dspistol"); else @@ -216,36 +216,36 @@ getsfx size = W_LumpLength( sfxlump ); - // Debug. - // fprintf( stderr, "." ); - //fprintf( stderr, " -loading %s (lump %d, %d bytes)\n", - // sfxname, sfxlump, size ); - //fflush( stderr ); + + + + + sfx = (unsigned char*)W_CacheLumpNum( sfxlump, PU_STATIC ); - // Pads the sound effect out to the mixing buffer size. - // The original realloc would interfere with zone memory. + + paddedsize = ((size-8 + (SAMPLECOUNT-1)) / SAMPLECOUNT) * SAMPLECOUNT; - // Allocate from zone memory. + paddedsfx = (unsigned char*)Z_Malloc( paddedsize+8, PU_STATIC, 0 ); - // ddt: (unsigned char *) realloc(sfx, paddedsize+8); - // This should interfere with zone memory handling, - // which does not kick in in the soundserver. + + + - // Now copy and pad. + memcpy( paddedsfx, sfx, size ); for (i=size ; i<paddedsize+8 ; i++) paddedsfx[i] = 128; - // Remove the cached lump. + Z_Free( sfx ); - // Preserve padded length. + *len = paddedsize; - // Return allocated padded data. + return (void *) (paddedsfx + 8); } @@ -253,13 +253,13 @@ getsfx -// -// This function adds a sound to the -// list of currently active sounds, -// which is maintained as a given number -// (eight, usually) of internal channels. -// Returns a handle. -// + + + + + + + int addsfx ( int sfxid, @@ -279,8 +279,8 @@ addsfx int rightvol; int leftvol; - // Chainsaw troubles. - // Play these sound effects only one at a time. + + if ( sfxid == sfx_sawup || sfxid == sfx_sawidl || sfxid == sfx_sawful @@ -288,23 +288,23 @@ addsfx || sfxid == sfx_stnmov || sfxid == sfx_pistol ) { - // Loop all channels, check. + for (i=0 ; i<NUM_CHANNELS ; i++) { - // Active, and using the same SFX? + if ( (channels[i]) && (channelids[i] == sfxid) ) { - // Reset. + channels[i] = 0; - // We are sure that iff, - // there will only be one. + + break; } } } - // Loop all channels to find oldest SFX. + for (i=0; (i<NUM_CHANNELS) && (channels[i]); i++) { if (channelstart[i] < oldest) @@ -314,68 +314,68 @@ addsfx } } - // Tales from the cryptic. - // If we found a channel, fine. - // If not, we simply overwrite the first one, 0. - // Probably only happens at startup. + + + + if (i == NUM_CHANNELS) slot = oldestnum; else slot = i; - // Okay, in the less recent channel, - // we will handle the new SFX. - // Set pointer to raw data. + + + channels[slot] = (unsigned char *) S_sfx[sfxid].data; - // Set pointer to end of raw data. + channelsend[slot] = channels[slot] + lengths[sfxid]; - // Reset current handle number, limited to 0..100. + if (!handlenums) handlenums = 100; - // Assign current handle number. - // Preserved so sounds could be stopped (unused). + + channelhandles[slot] = rc = handlenums++; - // Set stepping??? - // Kinda getting the impression this is never used. + + channelstep[slot] = step; - // ??? + channelstepremainder[slot] = 0; - // Should be gametic, I presume. + channelstart[slot] = gametic; - // Separation, that is, orientation/stereo. - // range is: 1 - 256 + + seperation += 1; - // Per left/right channel. - // x^2 seperation, - // adjust volume properly. + + + leftvol = - volume - ((volume*seperation*seperation) >> 16); ///(256*256); + volume - ((volume*seperation*seperation) >> 16); seperation = seperation - 257; rightvol = volume - ((volume*seperation*seperation) >> 16); - // Sanity check, clamp volume. + if (rightvol < 0 || rightvol > 127) I_Error("rightvol out of bounds"); if (leftvol < 0 || leftvol > 127) I_Error("leftvol out of bounds"); - // Get the proper lookup table piece - // for this volume level??? + + channelleftvol_lookup[slot] = &vol_lookup[leftvol*256]; channelrightvol_lookup[slot] = &vol_lookup[rightvol*256]; - // Preserve sound SFX id, - // e.g. for avoiding duplicates of chainsaw. + + channelids[slot] = sfxid; - // You tell me. + return rc; } @@ -383,40 +383,40 @@ addsfx -// -// SFX API -// Note: this was called by S_Init. -// However, whatever they did in the -// old DPMS based DOS version, this -// were simply dummies in the Linux -// version. -// See soundserver initdata(). -// + + + + + + + + + void I_SetChannels() { - // Init internal lookups (raw data, mixing buffer, channels). - // This function sets up internal lookups used during - // the mixing process. + + + int i; int j; int* steptablemid = steptable + 128; - // Okay, reset internal mixing channels to zero. + /*for (i=0; i<NUM_CHANNELS; i++) { channels[i] = 0; }*/ - // This table provides step widths for pitch parameters. - // I fail to see that this is currently used. + + for (i=-128 ; i<128 ; i++) steptablemid[i] = (int)(pow(2.0, (i/64.0))*65536.0); - // Generates volume lookup tables - // which also turn the unsigned samples - // into signed samples. + + + for (i=0 ; i<128 ; i++) for (j=0 ; j<256 ; j++) vol_lookup[i*256+j] = (i*(j-128)*256)/127; @@ -425,28 +425,28 @@ void I_SetChannels() void I_SetSfxVolume(int volume) { - // Identical to DOS. - // Basically, this should propagate - // the menu/config file setting - // to the state variable used in - // the mixing. + + + + + snd_SfxVolume = volume; } -// MUSIC API - dummy. Some code from DOS version. + void I_SetMusicVolume(int volume) { - // Internal state variable. + snd_MusicVolume = volume; - // Now set volume on output device. - // Whatever( snd_MusciVolume ); + + } -// -// Retrieve the raw data lump index -// for a given SFX name. -// + + + + int I_GetSfxLumpNum(sfxinfo_t* sfx) { char namebuf[9]; @@ -454,18 +454,18 @@ int I_GetSfxLumpNum(sfxinfo_t* sfx) return W_GetNumForName(namebuf); } -// -// Starting a sound means adding it -// to the current list of active sounds -// in the internal channels. -// As the SFX info struct contains -// e.g. a pointer to the raw data, -// it is ignored. -// As our sound handling does not handle -// priority, it is ignored. -// Pitching (that is, increased speed of playback) -// is set, but currently not used by mixing. -// + + + + + + + + + + + + int I_StartSound ( int id, @@ -475,7 +475,7 @@ I_StartSound int priority ) { - // UNUSED + priority = 0; #ifdef SNDSERV @@ -484,16 +484,16 @@ I_StartSound fprintf(sndserver, "p%2.2x%2.2x%2.2x%2.2x\n", id, pitch, vol, sep); fflush(sndserver); } - // warning: control reaches end of non-void function. + return id; #else - // Debug. - //fprintf( stderr, "starting sound %d", id ); - // Returns a handle (not used). + + + id = addsfx( id, vol, steptable[pitch], sep ); - // fprintf( stderr, "/handle is %d\n", id ); + return id; #endif @@ -503,115 +503,115 @@ I_StartSound void I_StopSound (int handle) { - // You need the handle returned by StartSound. - // Would be looping all channels, - // tracking down the handle, - // an setting the channel to zero. - // UNUSED. + + + + + handle = 0; } int I_SoundIsPlaying(int handle) { - // Ouch. + return gametic < handle; } -// -// This function loops all active (internal) sound -// channels, retrieves a given number of samples -// from the raw sound data, modifies it according -// to the current (internal) channel parameters, -// mixes the per channel samples into the global -// mixbuffer, clamping it to the allowed range, -// and sets up everything for transferring the -// contents of the mixbuffer to the (two) -// hardware channels (left and right, that is). -// -// This function currently supports only 16bit. -// + + + + + + + + + + + + + void I_UpdateSound( void ) { #ifdef SNDINTR - // Debug. Count buffer misses with interrupt. + static int misses = 0; #endif - // Mix current sound data. - // Data, from raw sound, for right and left. + + register unsigned int sample; register int dl; register int dr; - // Pointers in global mixbuffer, left, right, end. + signed short* leftout; signed short* rightout; signed short* leftend; - // Step in mixbuffer, left and right, thus two. + int step; - // Mixing channel index. + int chan; - // Left and right channel - // are in global mixbuffer, alternating. + + leftout = mixbuffer; rightout = mixbuffer+1; step = 2; - // Determine end, for left channel only - // (right channel is implicit). + + leftend = mixbuffer + SAMPLECOUNT*step; - // Mix sounds into the mixing buffer. - // Loop over step*SAMPLECOUNT, - // that is 512 values for two channels. + + + while (leftout != leftend) { - // Reset left/right value. + dl = 0; dr = 0; - // Love thy L2 chache - made this a loop. - // Now more channels could be set at compile time - // as well. Thus loop those channels. + + + for ( chan = 0; chan < NUM_CHANNELS; chan++ ) { - // Check channel, if active. + if (channels[ chan ]) { - // Get the raw data from the channel. + sample = *channels[ chan ]; - // Add left and right part - // for this channel (sound) - // to the current data. - // Adjust volume accordingly. + + + + dl += channelleftvol_lookup[ chan ][sample]; dr += channelrightvol_lookup[ chan ][sample]; - // Increment index ??? + channelstepremainder[ chan ] += channelstep[ chan ]; - // MSB is next sample??? + channels[ chan ] += channelstepremainder[ chan ] >> 16; - // Limit to LSB??? + channelstepremainder[ chan ] &= 65536-1; - // Check whether we are done. + if (channels[ chan ] >= channelsend[ chan ]) channels[ chan ] = 0; } } - // Clamp to range. Left hardware channel. - // Has been char instead of short. - // if (dl > 127) *leftout = 127; - // else if (dl < -128) *leftout = -128; - // else *leftout = dl; + + + + + if (dl > 0x7fff) *leftout = 0x7fff; @@ -620,7 +620,7 @@ void I_UpdateSound( void ) else *leftout = dl; - // Same for right hardware channel. + if (dr > 0x7fff) *rightout = 0x7fff; else if (dr < -0x8000) @@ -628,13 +628,13 @@ void I_UpdateSound( void ) else *rightout = dr; - // Increment current pointers in mixbuffer. + leftout += step; rightout += step; } #ifdef SNDINTR - // Debug check. + if ( flag ) { misses += flag; @@ -647,24 +647,24 @@ void I_UpdateSound( void ) misses = 0; } - // Increment flag for update. + flag++; #endif } -// -// This would be used to write out the mixbuffer -// during each game loop update. -// Updates sound buffer and audio device at runtime. -// It is called during Timer interrupt with SNDINTR. -// Mixing now done synchronous, and -// only output be done asynchronous? -// + + + + + + + + void I_SubmitSound(void) { - // Write it to DSP device. + write(audio_fd, mixbuffer, SAMPLECOUNT*BUFMUL); } @@ -677,12 +677,12 @@ I_UpdateSoundParams int sep, int pitch) { - // I fail too see that this is used. - // Would be using the handle to identify - // on which channel the sound might be active, - // and resetting the channel parameters. + + + + - // UNUSED. + handle = vol = sep = pitch = 0; } @@ -694,17 +694,17 @@ void I_ShutdownSound(void) #ifdef SNDSERV if (sndserver) { - // Send a "quit" command. + fprintf(sndserver, "q\n"); fflush(sndserver); } #else - // Wait till all pending sounds are finished. + int done = 0; int i; - // FIXME (below). + fprintf( stderr, "I_ShutdownSound: NOT finishing pending sounds\n"); fflush( stderr ); @@ -712,19 +712,19 @@ void I_ShutdownSound(void) { for( i=0 ; i<8 && !channels[i] ; i++); - // FIXME. No proper channel output. - //if (i==8) + + done=1; } #ifdef SNDINTR I_SoundDelTimer(); #endif - // Cleaning up -releasing the DSP device. + close ( audio_fd ); #endif - // Done. + return; } @@ -746,7 +746,7 @@ I_InitSound() else sprintf(buffer, "%s", sndserver_filename); - // start sound process + if ( !access(buffer, X_OK) ) { strcat(buffer, " -quiet"); @@ -763,7 +763,7 @@ I_InitSound() I_SoundSetTimer( SOUND_INTERVAL ); #endif - // Secure and configure sound device first. + fprintf( stderr, "I_InitSound: "); audio_fd = open("/dev/dsp", O_WRONLY); @@ -792,20 +792,20 @@ I_InitSound() fprintf(stderr, " configured audio device\n" ); - // Initialize external data (all sounds) at start, keep static. + fprintf( stderr, "I_InitSound: "); for (i=1 ; i<NUMSFX ; i++) { - // Alias? Example is the chaingun sound linked to pistol. + if (!S_sfx[i].link) { - // Load data from WAD file. + S_sfx[i].data = getsfx( S_sfx[i].name, &lengths[i] ); } else { - // Previously loaded already? + S_sfx[i].data = S_sfx[i].link->data; lengths[i] = lengths[(S_sfx[i].link - S_sfx)/sizeof(sfxinfo_t)]; } @@ -813,11 +813,11 @@ I_InitSound() fprintf( stderr, " pre-cached all sound data\n"); - // Now initialize mixbuffer with zero. + for ( i = 0; i< MIXBUFFERSIZE; i++ ) mixbuffer[i] = 0; - // Finished initialization. + fprintf(stderr, "I_InitSound: sound module ready\n"); #endif @@ -826,11 +826,11 @@ I_InitSound() -// -// MUSIC API. -// Still no music done. -// Remains. Dummies. -// + + + + + void I_InitMusic(void) { } void I_ShutdownMusic(void) { } @@ -839,26 +839,26 @@ static int musicdies=-1; void I_PlaySong(int handle, int looping) { - // UNUSED. + handle = looping = 0; musicdies = gametic + TICRATE*30; } void I_PauseSong (int handle) { - // UNUSED. + handle = 0; } void I_ResumeSong (int handle) { - // UNUSED. + handle = 0; } void I_StopSong(int handle) { - // UNUSED. + handle = 0; looping = 0; @@ -867,36 +867,36 @@ void I_StopSong(int handle) void I_UnRegisterSong(int handle) { - // UNUSED. + handle = 0; } int I_RegisterSong(void* data) { - // UNUSED. + data = NULL; return 1; } -// Is the song playing? + int I_QrySongPlaying(int handle) { - // UNUSED. + handle = 0; return looping || musicdies > gametic; } -// -// Experimental stuff. -// A Linux timer interrupt, for asynchronous -// sound output. -// I ripped this out of the Timer class in -// our Difference Engine, including a few -// SUN remains... -// + + + + + + + + #ifdef sun typedef sigset_t tSigSet; #else @@ -904,42 +904,42 @@ int I_QrySongPlaying(int handle) #endif -// We might use SIGVTALRM and ITIMER_VIRTUAL, if the process -// time independend timer happens to get lost due to heavy load. -// SIGALRM and ITIMER_REAL doesn't really work well. -// There are issues with profiling as well. + + + + static int /*__itimer_which*/ itimer = ITIMER_REAL; static int sig = SIGALRM; -// Interrupt handler. + void I_HandleSoundTimer( int ignore ) { - // Debug. - //fprintf( stderr, "%c", '+' ); fflush( stderr ); - // Feed sound device if necesary. + + + if ( flag ) { - // See I_SubmitSound(). - // Write it to DSP device. + + write(audio_fd, mixbuffer, SAMPLECOUNT*BUFMUL); - // Reset flag counter. + flag = 0; } else return; - // UNUSED, but required. + ignore = 0; return; } -// Get the interrupt. Set duration in millisecs. + int I_SoundSetTimer( int duration_of_tick ) { - // Needed for gametick clockwork. + struct itimerval value; struct itimerval ovalue; struct sigaction act; @@ -947,13 +947,13 @@ int I_SoundSetTimer( int duration_of_tick ) int res; - // This sets to SA_ONESHOT and SA_NOMASK, thus we can not use it. - // signal( _sig, handle_SIG_TICK ); - // Now we have to change this attribute for repeated calls. + + + act.sa_handler = I_HandleSoundTimer; #ifndef sun - //ac t.sa_mask = _sig; + #endif act.sa_flags = SA_RESTART; @@ -964,10 +964,10 @@ int I_SoundSetTimer( int duration_of_tick ) value.it_value.tv_sec = 0; value.it_value.tv_usec = duration_of_tick; - // Error is -1. + res = setitimer( itimer, &value, &ovalue ); - // Debug. + if ( res == -1 ) fprintf( stderr, "I_SoundSetTimer: interrupt n.a.\n"); @@ -975,10 +975,10 @@ int I_SoundSetTimer( int duration_of_tick ) } -// Remove the interrupt. Set duration to zero. + void I_SoundDelTimer() { - // Debug. + if ( I_SoundSetTimer( 0 ) == -1) fprintf( stderr, "I_SoundDelTimer: failed to remove interrupt. Doh!\n"); } diff --git a/src/i_sound.h b/src/i_sound.h @@ -1,31 +1,31 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// -// DESCRIPTION: -// System interface, sound. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + #ifndef __I_SOUND__ #define __I_SOUND__ #include "doomdef.h" -// UNIX hack, to be removed. + #ifdef SNDSERV #include <stdio.h> extern FILE* sndserver; @@ -37,29 +37,29 @@ extern char* sndserver_filename; -// Init at program start... + void I_InitSound(); -// ... update sound buffer and audio device at runtime... + void I_UpdateSound(void); void I_SubmitSound(void); -// ... shut down and relase at program termination. + void I_ShutdownSound(void); -// -// SFX I/O -// -// Initialize channels? + + + + void I_SetChannels(); -// Get raw data lump index for sound descriptor. + int I_GetSfxLumpNum (sfxinfo_t* sfxinfo ); -// Starts a sound in a particular sound channel. + int I_StartSound ( int id, @@ -69,16 +69,16 @@ I_StartSound int priority ); -// Stops a sound channel. + void I_StopSound(int handle); -// Called by S_*() functions -// to see if a channel is still playing. -// Returns 0 if no longer playing, 1 if playing. + + + int I_SoundIsPlaying(int handle); -// Updates the volume, separation, -// and pitch of a sound channel. + + void I_UpdateSoundParams ( int handle, @@ -87,36 +87,36 @@ I_UpdateSoundParams int pitch ); -// -// MUSIC I/O -// + + + void I_InitMusic(void); void I_ShutdownMusic(void); -// Volume. + void I_SetMusicVolume(int volume); -// PAUSE game handling. + void I_PauseSong(int handle); void I_ResumeSong(int handle); -// Registers a song handle to song data. + int I_RegisterSong(void *data); -// Called by anything that wishes to start music. -// plays a song, and when the song is done, -// starts playing it again in an endless loop. -// Horrible thing to do, considering. + + + + void I_PlaySong ( int handle, int looping ); -// Stops a song over 3 seconds. + void I_StopSong(int handle); -// See above (register), then think backwards + void I_UnRegisterSong(int handle); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/i_system.c b/src/i_system.c @@ -1,24 +1,24 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $"; @@ -57,7 +57,7 @@ I_Tactile int off, int total ) { - // UNUSED. + on = off = total = 0; } @@ -81,10 +81,10 @@ byte* I_ZoneBase (int* size) -// -// I_GetTime -// returns time in 1/70th second tics -// + + + + int I_GetTime (void) { struct timeval tp; @@ -101,18 +101,18 @@ int I_GetTime (void) -// -// I_Init -// + + + void I_Init (void) { I_InitSound(); - // I_InitGraphics(); + } -// -// I_Quit -// + + + void I_Quit (void) { D_QuitNetGame (); @@ -154,16 +154,16 @@ byte* I_AllocLow(int length) } -// -// I_Error -// + + + extern boolean demorecording; void I_Error (char *error, ...) { va_list argptr; - // Message first. + va_start (argptr,error); fprintf (stderr, "Error: "); vfprintf (stderr,error,argptr); @@ -172,7 +172,7 @@ void I_Error (char *error, ...) fflush( stderr ); - // Shutdown. Here might be other errors. + if (demorecording) G_CheckDemoStatus(); diff --git a/src/i_system.h b/src/i_system.h @@ -1,23 +1,23 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// System specific interface stuff. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __I_SYSTEM__ @@ -31,56 +31,56 @@ #endif -// Called by DoomMain. + void I_Init (void); -// Called by startup code -// to get the ammount of memory to malloc -// for the zone management. + + + byte* I_ZoneBase (int *size); -// Called by D_DoomLoop, -// returns current time in tics. + + int I_GetTime (void); -// -// Called by D_DoomLoop, -// called before processing any tics in a frame -// (just after displaying a frame). -// Time consuming syncronous operations -// are performed here (joystick reading). -// Can call D_PostEvent. -// + + + + + + + + void I_StartFrame (void); -// -// Called by D_DoomLoop, -// called before processing each tic in a frame. -// Quick syncronous operations are performed here. -// Can call D_PostEvent. + + + + + void I_StartTic (void); -// Asynchronous interrupt functions should maintain private queues -// that are read by the synchronous functions -// to be converted into events. -// Either returns a null ticcmd, -// or calls a loadable driver to build it. -// This ticcmd will then be modified by the gameloop -// for normal input. + + + + + + + ticcmd_t* I_BaseTiccmd (void); -// Called by M_Responder when quit is selected. -// Clean exit, displays sell blurb. + + void I_Quit (void); -// Allocates from low memory under dos, -// just mallocs under unix + + byte* I_AllocLow (int length); void I_Tactile (int on, int off, int total); @@ -90,8 +90,8 @@ void I_Error (char *error, ...); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/i_video.c b/src/i_video.c @@ -1,25 +1,25 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// DOOM graphics stuff for X11, UNIX. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: i_x.c,v 1.6 1997/02/03 22:45:10 b1 Exp $"; @@ -34,10 +34,10 @@ rcsid[] = "$Id: i_x.c,v 1.6 1997/02/03 22:45:10 b1 Exp $"; #include <X11/keysym.h> #include <X11/extensions/XShm.h> -// Had to dig up XShm.c for this one. -// It is in the libXext, but not in the XFree86 headers. + + #ifdef LINUX -int XShmGetEventBase( Display* dpy ); // problems with g++? +int XShmGetEventBase( Display* dpy ); #endif #include <stdarg.h> @@ -71,28 +71,28 @@ XImage* image; int X_width; int X_height; -// MIT SHared Memory extension. + boolean doShm; XShmSegmentInfo X_shminfo; int X_shmeventtype; -// Fake mouse handling. -// This cannot work properly w/o DGA. -// Needs an invisible mouse cursor at least. + + + boolean grabMouse; int doPointerWarp = POINTER_WARP_COUNTDOWN; -// Blocky mode, -// replace each 320x200 pixel with multiply*multiply pixels. -// According to Dave Taylor, it still is a bonehead thing -// to use .... + + + + static int multiply=1; -// -// Translates the key currently in X_event -// + + + int xlatekey(void) { @@ -163,26 +163,26 @@ int xlatekey(void) void I_ShutdownGraphics(void) { - // Detach from X server + if (!XShmDetach(X_display, &X_shminfo)) I_Error("XShmDetach() failed in I_ShutdownGraphics()"); - // Release shared memory. + shmdt(X_shminfo.shmaddr); shmctl(X_shminfo.shmid, IPC_RMID, 0); - // Paranoia. + image->data = NULL; } -// -// I_StartFrame -// + + + void I_StartFrame (void) { - // er? + } @@ -196,7 +196,7 @@ void I_GetEvent(void) event_t event; - // put event-grabbing stuff in here + XNextEvent(X_display, &X_event); switch (X_event.type) { @@ -204,13 +204,13 @@ void I_GetEvent(void) event.type = ev_keydown; event.data1 = xlatekey(); D_PostEvent(&event); - // fprintf(stderr, "k"); + break; case KeyRelease: event.type = ev_keyup; event.data1 = xlatekey(); D_PostEvent(&event); - // fprintf(stderr, "ku"); + break; case ButtonPress: event.type = ev_mouse; @@ -223,7 +223,7 @@ void I_GetEvent(void) | (X_event.xbutton.button == Button3 ? 4 : 0); event.data2 = event.data3 = 0; D_PostEvent(&event); - // fprintf(stderr, "b"); + break; case ButtonRelease: event.type = ev_mouse; @@ -231,7 +231,7 @@ void I_GetEvent(void) (X_event.xbutton.state & Button1Mask) | (X_event.xbutton.state & Button2Mask ? 2 : 0) | (X_event.xbutton.state & Button3Mask ? 4 : 0); - // suggest parentheses around arithmetic in operand of | + event.data1 = event.data1 ^ (X_event.xbutton.button == Button1 ? 1 : 0) @@ -239,7 +239,7 @@ void I_GetEvent(void) ^ (X_event.xbutton.button == Button3 ? 4 : 0); event.data2 = event.data3 = 0; D_PostEvent(&event); - // fprintf(stderr, "bu"); + break; case MotionNotify: event.type = ev_mouse; @@ -258,7 +258,7 @@ void I_GetEvent(void) X_event.xmotion.y != X_height/2) { D_PostEvent(&event); - // fprintf(stderr, "m"); + mousemoved = false; } else { @@ -303,9 +303,9 @@ createnullcursor return cursor; } -// -// I_StartTic -// + + + void I_StartTic (void) { @@ -315,9 +315,9 @@ void I_StartTic (void) while (XPending(X_display)) I_GetEvent(); - // Warp the pointer back to the middle of the window - // or it will wander off - that is, the game will - // loose input focus within X11. + + + if (grabMouse) { if (!--doPointerWarp) @@ -338,26 +338,26 @@ void I_StartTic (void) } -// -// I_UpdateNoBlit -// + + + void I_UpdateNoBlit (void) { - // what is this? + } -// -// I_FinishUpdate -// + + + void I_FinishUpdate (void) { static int lasttic; int tics; int i; - // UNUSED static unsigned char *bigscreen=0; + - // draws little dots on the bottom of the screen + if (devparm) { @@ -373,7 +373,7 @@ void I_FinishUpdate (void) } - // scales the screen size before blitting it + if (multiply == 2) { unsigned int *olineptrs[2]; @@ -475,7 +475,7 @@ void I_FinishUpdate (void) } else if (multiply == 4) { - // Broken. Gotta fix this some day. + void Expand4(unsigned *, double *); Expand4 ((unsigned *)(screens[0]), (double *) (image->data)); } @@ -493,7 +493,7 @@ void I_FinishUpdate (void) True )) I_Error("XShmPutImage() failed\n"); - // wait for it to finish and processes all input events + shmFinished = false; do { @@ -504,7 +504,7 @@ void I_FinishUpdate (void) else { - // draw the image + XPutImage( X_display, X_mainWindow, X_gc, @@ -513,7 +513,7 @@ void I_FinishUpdate (void) 0, 0, X_width, X_height ); - // sync up with server + XSync(X_display, False); } @@ -521,18 +521,18 @@ void I_FinishUpdate (void) } -// -// I_ReadScreen -// + + + void I_ReadScreen (byte* scr) { memcpy (scr, screens[0], SCREENWIDTH*SCREENHEIGHT); } -// -// Palette stuff. -// + + + static XColor colors[256]; void UploadNewPalette(Colormap cmap, byte *palette) @@ -548,7 +548,7 @@ void UploadNewPalette(Colormap cmap, byte *palette) if (X_visualinfo.class == PseudoColor && X_visualinfo.depth == 8) #endif { - // initialize the colormap + if (firstcall) { firstcall = false; @@ -559,7 +559,7 @@ void UploadNewPalette(Colormap cmap, byte *palette) } } - // set the X colormap entries + for (i=0 ; i<256 ; i++) { c = gammatable[usegamma][*palette++]; @@ -570,28 +570,28 @@ void UploadNewPalette(Colormap cmap, byte *palette) colors[i].blue = (c<<8) + c; } - // store the colors to the current colormap + XStoreColors(X_display, cmap, colors, 256); } } -// -// I_SetPalette -// + + + void I_SetPalette (byte* palette) { UploadNewPalette(X_cmap, palette); } -// -// This function is probably redundant, -// if XShmDetach works properly. -// ddt never detached the XShm memory, -// thus there might have been stale -// handles accumulating. -// + + + + + + + void grabsharedmemory(int size) { @@ -600,16 +600,16 @@ void grabsharedmemory(int size) int minsize = 320*200; int id; int rc; - // UNUSED int done=0; + int pollution=5; - // try to use what was here before + do { - id = shmget((key_t) key, minsize, 0777); // just get the id + id = shmget((key_t) key, minsize, 0777); if (id != -1) { - rc=shmctl(id, IPC_STAT, &shminfo); // get stats on it + rc=shmctl(id, IPC_STAT, &shminfo); if (!rc) { if (shminfo.shm_nattch) @@ -682,7 +682,7 @@ void grabsharedmemory(int size) X_shminfo.shmid = id; - // attach to the shared memory segment + image->data = X_shminfo.shmaddr = shmat(id, 0, 0); fprintf(stderr, "shared memory id=%d, addr=0x%x\n", id, @@ -699,7 +699,7 @@ void I_InitGraphics(void) int x=0; int y=0; - // warning: char format, different type arg + char xsign=' '; char ysign=' '; @@ -728,19 +728,19 @@ void I_InitGraphics(void) X_width = SCREENWIDTH * multiply; X_height = SCREENHEIGHT * multiply; - // check for command-line display name - if ( (pnum=M_CheckParm("-disp")) ) // suggest parentheses around assignment + + if ( (pnum=M_CheckParm("-disp")) ) displayname = myargv[pnum+1]; else displayname = 0; - // check if the user wants to grab the mouse (quite unnice) + grabMouse = !!M_CheckParm("-grabmouse"); - // check for command-line geometry - if ( (pnum=M_CheckParm("-geom")) ) // suggest parentheses around assignment + + if ( (pnum=M_CheckParm("-geom")) ) { - // warning: char format, different type arg 3,5 + n = sscanf(myargv[pnum+1], "%c%d%c%d", &xsign, &x, &ysign, &y); if (n==2) @@ -756,7 +756,7 @@ void I_InitGraphics(void) I_Error("bad -geom parameter"); } - // open the display + X_display = XOpenDisplay(displayname); if (!X_display) { @@ -766,16 +766,16 @@ void I_InitGraphics(void) I_Error("Could not open display (DISPLAY=[%s])", getenv("DISPLAY")); } - // use the default visual + X_screen = DefaultScreen(X_display); if (!XMatchVisualInfo(X_display, X_screen, 8, PseudoColor, &X_visualinfo)) I_Error("xdoom currently only supports 256-color PseudoColor screens"); X_visual = X_visualinfo.visual; - // check for the MITSHM extension + doShm = XShmQueryExtension(X_display); - // even if it's available, make sure it's a local connection + if (doShm) { if (!displayname) displayname = (char *) getenv("DISPLAY"); @@ -790,28 +790,28 @@ void I_InitGraphics(void) fprintf(stderr, "Using MITSHM extension\n"); - // create the colormap + X_cmap = XCreateColormap(X_display, RootWindow(X_display, X_screen), X_visual, AllocAll); - // setup attributes for main window + attribmask = CWEventMask | CWColormap | CWBorderPixel; attribs.event_mask = KeyPressMask | KeyReleaseMask - // | PointerMotionMask | ButtonPressMask | ButtonReleaseMask + | ExposureMask; attribs.colormap = X_cmap; attribs.border_pixel = 0; - // create the main window + X_mainWindow = XCreateWindow( X_display, RootWindow(X_display, X_screen), x, y, X_width, X_height, - 0, // borderwidth - 8, // depth + 0, + 8, InputOutput, X_visual, attribmask, @@ -820,7 +820,7 @@ void I_InitGraphics(void) XDefineCursor(X_display, X_mainWindow, createnullcursor( X_display, X_mainWindow ) ); - // create the GC + valuemask = GCGraphicsExposures; xgcvalues.graphics_exposures = False; X_gc = XCreateGC( X_display, @@ -828,10 +828,10 @@ void I_InitGraphics(void) valuemask, &xgcvalues ); - // map the window + XMapWindow(X_display, X_mainWindow); - // wait until it is OK to draw + oktodraw = 0; while (!oktodraw) { @@ -843,7 +843,7 @@ void I_InitGraphics(void) } } - // grabs the pointer so it is restricted to this window + if (grabMouse) XGrabPointer(X_display, X_mainWindow, True, ButtonPressMask|ButtonReleaseMask|PointerMotionMask, @@ -855,7 +855,7 @@ void I_InitGraphics(void) X_shmeventtype = XShmGetEventBase(X_display) + ShmCompletion; - // create the image + image = XShmCreateImage( X_display, X_visual, 8, @@ -868,18 +868,18 @@ void I_InitGraphics(void) grabsharedmemory(image->bytes_per_line * image->height); - // UNUSED - // create the shared memory segment - // X_shminfo.shmid = shmget (IPC_PRIVATE, - // image->bytes_per_line * image->height, IPC_CREAT | 0777); - // if (X_shminfo.shmid < 0) - // { - // perror(""); - // I_Error("shmget() failed in InitGraphics()"); - // } - // fprintf(stderr, "shared memory id=%d\n", X_shminfo.shmid); - // attach to the shared memory segment - // image->data = X_shminfo.shmaddr = shmat(X_shminfo.shmid, 0, 0); + + + + + + + + + + + + if (!image->data) @@ -888,7 +888,7 @@ void I_InitGraphics(void) I_Error("shmat() failed in InitGraphics()"); } - // get the X server to attach to it + if (!XShmAttach(X_display, &X_shminfo)) I_Error("XShmAttach() failed in InitGraphics()"); @@ -931,7 +931,7 @@ void InitExpand2 (void) { int i; int j; - // UNUSED unsigned iexp, jexp; + double* exp; union { diff --git a/src/i_video.h b/src/i_video.h @@ -1,23 +1,23 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// DESCRIPTION: -// System specific interface stuff. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + #ifndef __I_VIDEO__ @@ -31,21 +31,21 @@ #endif -// Called by D_DoomMain, -// determines the hardware configuration -// and sets up the video mode + + + void I_InitGraphics (void); void I_ShutdownGraphics(void); -// Takes full 8 bit values. + void I_SetPalette (byte* palette); void I_UpdateNoBlit (void); void I_FinishUpdate (void); -// Wait for vertical retrace or pause a bit. + void I_WaitVBL(int count); void I_ReadScreen (byte* scr); @@ -56,8 +56,8 @@ void I_EndRead (void); #endif -//----------------------------------------------------------------------------- -// -// $Log:$ -// -//----------------------------------------------------------------------------- + + + + + diff --git a/src/info.c b/src/info.c @@ -1,32 +1,32 @@ -// Emacs style mode select -*- C++ -*- -//----------------------------------------------------------------------------- -// -// $Id:$ -// -// Copyright (C) 1993-1996 by id Software, Inc. -// -// This source is available for distribution and/or modification -// only under the terms of the DOOM Source Code License as -// published by id Software. All rights reserved. -// -// The source is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License -// for more details. -// -// $Log:$ -// -// DESCRIPTION: -// Thing frame/state LUT, -// generated by multigen utilitiy. -// This one is the original DOOM version, preserved. -// -//----------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + static const char rcsid[] = "$Id: info.c,v 1.3 1997/01/26 07:45:00 b1 Exp $"; -// Data. + #include "sounds.h" #include "m_fixed.h" @@ -55,7 +55,7 @@ char *sprnames[NUMSPRITES] = { }; -// Doesn't work with g++, needs actionf_p1 + void A_Light0(); void A_WeaponReady(); void A_Lower(); @@ -133,4538 +133,4538 @@ void A_BrainExplode(); state_t states[NUMSTATES] = { - {SPR_TROO,0,-1,{NULL},S_NULL,0,0}, // S_NULL - {SPR_SHTG,4,0,{A_Light0},S_NULL,0,0}, // S_LIGHTDONE - {SPR_PUNG,0,1,{A_WeaponReady},S_PUNCH,0,0}, // S_PUNCH - {SPR_PUNG,0,1,{A_Lower},S_PUNCHDOWN,0,0}, // S_PUNCHDOWN - {SPR_PUNG,0,1,{A_Raise},S_PUNCHUP,0,0}, // S_PUNCHUP - {SPR_PUNG,1,4,{NULL},S_PUNCH2,0,0}, // S_PUNCH1 - {SPR_PUNG,2,4,{A_Punch},S_PUNCH3,0,0}, // S_PUNCH2 - {SPR_PUNG,3,5,{NULL},S_PUNCH4,0,0}, // S_PUNCH3 - {SPR_PUNG,2,4,{NULL},S_PUNCH5,0,0}, // S_PUNCH4 - {SPR_PUNG,1,5,{A_ReFire},S_PUNCH,0,0}, // S_PUNCH5 - {SPR_PISG,0,1,{A_WeaponReady},S_PISTOL,0,0},// S_PISTOL - {SPR_PISG,0,1,{A_Lower},S_PISTOLDOWN,0,0}, // S_PISTOLDOWN - {SPR_PISG,0,1,{A_Raise},S_PISTOLUP,0,0}, // S_PISTOLUP - {SPR_PISG,0,4,{NULL},S_PISTOL2,0,0}, // S_PISTOL1 - {SPR_PISG,1,6,{A_FirePistol},S_PISTOL3,0,0},// S_PISTOL2 - {SPR_PISG,2,4,{NULL},S_PISTOL4,0,0}, // S_PISTOL3 - {SPR_PISG,1,5,{A_ReFire},S_PISTOL,0,0}, // S_PISTOL4 - {SPR_PISF,32768,7,{A_Light1},S_LIGHTDONE,0,0}, // S_PISTOLFLASH - {SPR_SHTG,0,1,{A_WeaponReady},S_SGUN,0,0}, // S_SGUN - {SPR_SHTG,0,1,{A_Lower},S_SGUNDOWN,0,0}, // S_SGUNDOWN - {SPR_SHTG,0,1,{A_Raise},S_SGUNUP,0,0}, // S_SGUNUP - {SPR_SHTG,0,3,{NULL},S_SGUN2,0,0}, // S_SGUN1 - {SPR_SHTG,0,7,{A_FireShotgun},S_SGUN3,0,0}, // S_SGUN2 - {SPR_SHTG,1,5,{NULL},S_SGUN4,0,0}, // S_SGUN3 - {SPR_SHTG,2,5,{NULL},S_SGUN5,0,0}, // S_SGUN4 - {SPR_SHTG,3,4,{NULL},S_SGUN6,0,0}, // S_SGUN5 - {SPR_SHTG,2,5,{NULL},S_SGUN7,0,0}, // S_SGUN6 - {SPR_SHTG,1,5,{NULL},S_SGUN8,0,0}, // S_SGUN7 - {SPR_SHTG,0,3,{NULL},S_SGUN9,0,0}, // S_SGUN8 - {SPR_SHTG,0,7,{A_ReFire},S_SGUN,0,0}, // S_SGUN9 - {SPR_SHTF,32768,4,{A_Light1},S_SGUNFLASH2,0,0}, // S_SGUNFLASH1 - {SPR_SHTF,32769,3,{A_Light2},S_LIGHTDONE,0,0}, // S_SGUNFLASH2 - {SPR_SHT2,0,1,{A_WeaponReady},S_DSGUN,0,0}, // S_DSGUN - {SPR_SHT2,0,1,{A_Lower},S_DSGUNDOWN,0,0}, // S_DSGUNDOWN - {SPR_SHT2,0,1,{A_Raise},S_DSGUNUP,0,0}, // S_DSGUNUP - {SPR_SHT2,0,3,{NULL},S_DSGUN2,0,0}, // S_DSGUN1 - {SPR_SHT2,0,7,{A_FireShotgun2},S_DSGUN3,0,0}, // S_DSGUN2 - {SPR_SHT2,1,7,{NULL},S_DSGUN4,0,0}, // S_DSGUN3 - {SPR_SHT2,2,7,{A_CheckReload},S_DSGUN5,0,0}, // S_DSGUN4 - {SPR_SHT2,3,7,{A_OpenShotgun2},S_DSGUN6,0,0}, // S_DSGUN5 - {SPR_SHT2,4,7,{NULL},S_DSGUN7,0,0}, // S_DSGUN6 - {SPR_SHT2,5,7,{A_LoadShotgun2},S_DSGUN8,0,0}, // S_DSGUN7 - {SPR_SHT2,6,6,{NULL},S_DSGUN9,0,0}, // S_DSGUN8 - {SPR_SHT2,7,6,{A_CloseShotgun2},S_DSGUN10,0,0}, // S_DSGUN9 - {SPR_SHT2,0,5,{A_ReFire},S_DSGUN,0,0}, // S_DSGUN10 - {SPR_SHT2,1,7,{NULL},S_DSNR2,0,0}, // S_DSNR1 - {SPR_SHT2,0,3,{NULL},S_DSGUNDOWN,0,0}, // S_DSNR2 - {SPR_SHT2,32776,5,{A_Light1},S_DSGUNFLASH2,0,0}, // S_DSGUNFLASH1 - {SPR_SHT2,32777,4,{A_Light2},S_LIGHTDONE,0,0}, // S_DSGUNFLASH2 - {SPR_CHGG,0,1,{A_WeaponReady},S_CHAIN,0,0}, // S_CHAIN - {SPR_CHGG,0,1,{A_Lower},S_CHAINDOWN,0,0}, // S_CHAINDOWN - {SPR_CHGG,0,1,{A_Raise},S_CHAINUP,0,0}, // S_CHAINUP - {SPR_CHGG,0,4,{A_FireCGun},S_CHAIN2,0,0}, // S_CHAIN1 - {SPR_CHGG,1,4,{A_FireCGun},S_CHAIN3,0,0}, // S_CHAIN2 - {SPR_CHGG,1,0,{A_ReFire},S_CHAIN,0,0}, // S_CHAIN3 - {SPR_CHGF,32768,5,{A_Light1},S_LIGHTDONE,0,0}, // S_CHAINFLASH1 - {SPR_CHGF,32769,5,{A_Light2},S_LIGHTDONE,0,0}, // S_CHAINFLASH2 - {SPR_MISG,0,1,{A_WeaponReady},S_MISSILE,0,0}, // S_MISSILE - {SPR_MISG,0,1,{A_Lower},S_MISSILEDOWN,0,0}, // S_MISSILEDOWN - {SPR_MISG,0,1,{A_Raise},S_MISSILEUP,0,0}, // S_MISSILEUP - {SPR_MISG,1,8,{A_GunFlash},S_MISSILE2,0,0}, // S_MISSILE1 - {SPR_MISG,1,12,{A_FireMissile},S_MISSILE3,0,0}, // S_MISSILE2 - {SPR_MISG,1,0,{A_ReFire},S_MISSILE,0,0}, // S_MISSILE3 - {SPR_MISF,32768,3,{A_Light1},S_MISSILEFLASH2,0,0}, // S_MISSILEFLASH1 - {SPR_MISF,32769,4,{NULL},S_MISSILEFLASH3,0,0}, // S_MISSILEFLASH2 - {SPR_MISF,32770,4,{A_Light2},S_MISSILEFLASH4,0,0}, // S_MISSILEFLASH3 - {SPR_MISF,32771,4,{A_Light2},S_LIGHTDONE,0,0}, // S_MISSILEFLASH4 - {SPR_SAWG,2,4,{A_WeaponReady},S_SAWB,0,0}, // S_SAW - {SPR_SAWG,3,4,{A_WeaponReady},S_SAW,0,0}, // S_SAWB - {SPR_SAWG,2,1,{A_Lower},S_SAWDOWN,0,0}, // S_SAWDOWN - {SPR_SAWG,2,1,{A_Raise},S_SAWUP,0,0}, // S_SAWUP - {SPR_SAWG,0,4,{A_Saw},S_SAW2,0,0}, // S_SAW1 - {SPR_SAWG,1,4,{A_Saw},S_SAW3,0,0}, // S_SAW2 - {SPR_SAWG,1,0,{A_ReFire},S_SAW,0,0}, // S_SAW3 - {SPR_PLSG,0,1,{A_WeaponReady},S_PLASMA,0,0}, // S_PLASMA - {SPR_PLSG,0,1,{A_Lower},S_PLASMADOWN,0,0}, // S_PLASMADOWN - {SPR_PLSG,0,1,{A_Raise},S_PLASMAUP,0,0}, // S_PLASMAUP - {SPR_PLSG,0,3,{A_FirePlasma},S_PLASMA2,0,0}, // S_PLASMA1 - {SPR_PLSG,1,20,{A_ReFire},S_PLASMA,0,0}, // S_PLASMA2 - {SPR_PLSF,32768,4,{A_Light1},S_LIGHTDONE,0,0}, // S_PLASMAFLASH1 - {SPR_PLSF,32769,4,{A_Light1},S_LIGHTDONE,0,0}, // S_PLASMAFLASH2 - {SPR_BFGG,0,1,{A_WeaponReady},S_BFG,0,0}, // S_BFG - {SPR_BFGG,0,1,{A_Lower},S_BFGDOWN,0,0}, // S_BFGDOWN - {SPR_BFGG,0,1,{A_Raise},S_BFGUP,0,0}, // S_BFGUP - {SPR_BFGG,0,20,{A_BFGsound},S_BFG2,0,0}, // S_BFG1 - {SPR_BFGG,1,10,{A_GunFlash},S_BFG3,0,0}, // S_BFG2 - {SPR_BFGG,1,10,{A_FireBFG},S_BFG4,0,0}, // S_BFG3 - {SPR_BFGG,1,20,{A_ReFire},S_BFG,0,0}, // S_BFG4 - {SPR_BFGF,32768,11,{A_Light1},S_BFGFLASH2,0,0}, // S_BFGFLASH1 - {SPR_BFGF,32769,6,{A_Light2},S_LIGHTDONE,0,0}, // S_BFGFLASH2 - {SPR_BLUD,2,8,{NULL},S_BLOOD2,0,0}, // S_BLOOD1 - {SPR_BLUD,1,8,{NULL},S_BLOOD3,0,0}, // S_BLOOD2 - {SPR_BLUD,0,8,{NULL},S_NULL,0,0}, // S_BLOOD3 - {SPR_PUFF,32768,4,{NULL},S_PUFF2,0,0}, // S_PUFF1 - {SPR_PUFF,1,4,{NULL},S_PUFF3,0,0}, // S_PUFF2 - {SPR_PUFF,2,4,{NULL},S_PUFF4,0,0}, // S_PUFF3 - {SPR_PUFF,3,4,{NULL},S_NULL,0,0}, // S_PUFF4 - {SPR_BAL1,32768,4,{NULL},S_TBALL2,0,0}, // S_TBALL1 - {SPR_BAL1,32769,4,{NULL},S_TBALL1,0,0}, // S_TBALL2 - {SPR_BAL1,32770,6,{NULL},S_TBALLX2,0,0}, // S_TBALLX1 - {SPR_BAL1,32771,6,{NULL},S_TBALLX3,0,0}, // S_TBALLX2 - {SPR_BAL1,32772,6,{NULL},S_NULL,0,0}, // S_TBALLX3 - {SPR_BAL2,32768,4,{NULL},S_RBALL2,0,0}, // S_RBALL1 - {SPR_BAL2,32769,4,{NULL},S_RBALL1,0,0}, // S_RBALL2 - {SPR_BAL2,32770,6,{NULL},S_RBALLX2,0,0}, // S_RBALLX1 - {SPR_BAL2,32771,6,{NULL},S_RBALLX3,0,0}, // S_RBALLX2 - {SPR_BAL2,32772,6,{NULL},S_NULL,0,0}, // S_RBALLX3 - {SPR_PLSS,32768,6,{NULL},S_PLASBALL2,0,0}, // S_PLASBALL - {SPR_PLSS,32769,6,{NULL},S_PLASBALL,0,0}, // S_PLASBALL2 - {SPR_PLSE,32768,4,{NULL},S_PLASEXP2,0,0}, // S_PLASEXP - {SPR_PLSE,32769,4,{NULL},S_PLASEXP3,0,0}, // S_PLASEXP2 - {SPR_PLSE,32770,4,{NULL},S_PLASEXP4,0,0}, // S_PLASEXP3 - {SPR_PLSE,32771,4,{NULL},S_PLASEXP5,0,0}, // S_PLASEXP4 - {SPR_PLSE,32772,4,{NULL},S_NULL,0,0}, // S_PLASEXP5 - {SPR_MISL,32768,1,{NULL},S_ROCKET,0,0}, // S_ROCKET - {SPR_BFS1,32768,4,{NULL},S_BFGSHOT2,0,0}, // S_BFGSHOT - {SPR_BFS1,32769,4,{NULL},S_BFGSHOT,0,0}, // S_BFGSHOT2 - {SPR_BFE1,32768,8,{NULL},S_BFGLAND2,0,0}, // S_BFGLAND - {SPR_BFE1,32769,8,{NULL},S_BFGLAND3,0,0}, // S_BFGLAND2 - {SPR_BFE1,32770,8,{A_BFGSpray},S_BFGLAND4,0,0}, // S_BFGLAND3 - {SPR_BFE1,32771,8,{NULL},S_BFGLAND5,0,0}, // S_BFGLAND4 - {SPR_BFE1,32772,8,{NULL},S_BFGLAND6,0,0}, // S_BFGLAND5 - {SPR_BFE1,32773,8,{NULL},S_NULL,0,0}, // S_BFGLAND6 - {SPR_BFE2,32768,8,{NULL},S_BFGEXP2,0,0}, // S_BFGEXP - {SPR_BFE2,32769,8,{NULL},S_BFGEXP3,0,0}, // S_BFGEXP2 - {SPR_BFE2,32770,8,{NULL},S_BFGEXP4,0,0}, // S_BFGEXP3 - {SPR_BFE2,32771,8,{NULL},S_NULL,0,0}, // S_BFGEXP4 - {SPR_MISL,32769,8,{A_Explode},S_EXPLODE2,0,0}, // S_EXPLODE1 - {SPR_MISL,32770,6,{NULL},S_EXPLODE3,0,0}, // S_EXPLODE2 - {SPR_MISL,32771,4,{NULL},S_NULL,0,0}, // S_EXPLODE3 - {SPR_TFOG,32768,6,{NULL},S_TFOG01,0,0}, // S_TFOG - {SPR_TFOG,32769,6,{NULL},S_TFOG02,0,0}, // S_TFOG01 - {SPR_TFOG,32768,6,{NULL},S_TFOG2,0,0}, // S_TFOG02 - {SPR_TFOG,32769,6,{NULL},S_TFOG3,0,0}, // S_TFOG2 - {SPR_TFOG,32770,6,{NULL},S_TFOG4,0,0}, // S_TFOG3 - {SPR_TFOG,32771,6,{NULL},S_TFOG5,0,0}, // S_TFOG4 - {SPR_TFOG,32772,6,{NULL},S_TFOG6,0,0}, // S_TFOG5 - {SPR_TFOG,32773,6,{NULL},S_TFOG7,0,0}, // S_TFOG6 - {SPR_TFOG,32774,6,{NULL},S_TFOG8,0,0}, // S_TFOG7 - {SPR_TFOG,32775,6,{NULL},S_TFOG9,0,0}, // S_TFOG8 - {SPR_TFOG,32776,6,{NULL},S_TFOG10,0,0}, // S_TFOG9 - {SPR_TFOG,32777,6,{NULL},S_NULL,0,0}, // S_TFOG10 - {SPR_IFOG,32768,6,{NULL},S_IFOG01,0,0}, // S_IFOG - {SPR_IFOG,32769,6,{NULL},S_IFOG02,0,0}, // S_IFOG01 - {SPR_IFOG,32768,6,{NULL},S_IFOG2,0,0}, // S_IFOG02 - {SPR_IFOG,32769,6,{NULL},S_IFOG3,0,0}, // S_IFOG2 - {SPR_IFOG,32770,6,{NULL},S_IFOG4,0,0}, // S_IFOG3 - {SPR_IFOG,32771,6,{NULL},S_IFOG5,0,0}, // S_IFOG4 - {SPR_IFOG,32772,6,{NULL},S_NULL,0,0}, // S_IFOG5 - {SPR_PLAY,0,-1,{NULL},S_NULL,0,0}, // S_PLAY - {SPR_PLAY,0,4,{NULL},S_PLAY_RUN2,0,0}, // S_PLAY_RUN1 - {SPR_PLAY,1,4,{NULL},S_PLAY_RUN3,0,0}, // S_PLAY_RUN2 - {SPR_PLAY,2,4,{NULL},S_PLAY_RUN4,0,0}, // S_PLAY_RUN3 - {SPR_PLAY,3,4,{NULL},S_PLAY_RUN1,0,0}, // S_PLAY_RUN4 - {SPR_PLAY,4,12,{NULL},S_PLAY,0,0}, // S_PLAY_ATK1 - {SPR_PLAY,32773,6,{NULL},S_PLAY_ATK1,0,0}, // S_PLAY_ATK2 - {SPR_PLAY,6,4,{NULL},S_PLAY_PAIN2,0,0}, // S_PLAY_PAIN - {SPR_PLAY,6,4,{A_Pain},S_PLAY,0,0}, // S_PLAY_PAIN2 - {SPR_PLAY,7,10,{NULL},S_PLAY_DIE2,0,0}, // S_PLAY_DIE1 - {SPR_PLAY,8,10,{A_PlayerScream},S_PLAY_DIE3,0,0}, // S_PLAY_DIE2 - {SPR_PLAY,9,10,{A_Fall},S_PLAY_DIE4,0,0}, // S_PLAY_DIE3 - {SPR_PLAY,10,10,{NULL},S_PLAY_DIE5,0,0}, // S_PLAY_DIE4 - {SPR_PLAY,11,10,{NULL},S_PLAY_DIE6,0,0}, // S_PLAY_DIE5 - {SPR_PLAY,12,10,{NULL},S_PLAY_DIE7,0,0}, // S_PLAY_DIE6 - {SPR_PLAY,13,-1,{NULL},S_NULL,0,0}, // S_PLAY_DIE7 - {SPR_PLAY,14,5,{NULL},S_PLAY_XDIE2,0,0}, // S_PLAY_XDIE1 - {SPR_PLAY,15,5,{A_XScream},S_PLAY_XDIE3,0,0}, // S_PLAY_XDIE2 - {SPR_PLAY,16,5,{A_Fall},S_PLAY_XDIE4,0,0}, // S_PLAY_XDIE3 - {SPR_PLAY,17,5,{NULL},S_PLAY_XDIE5,0,0}, // S_PLAY_XDIE4 - {SPR_PLAY,18,5,{NULL},S_PLAY_XDIE6,0,0}, // S_PLAY_XDIE5 - {SPR_PLAY,19,5,{NULL},S_PLAY_XDIE7,0,0}, // S_PLAY_XDIE6 - {SPR_PLAY,20,5,{NULL},S_PLAY_XDIE8,0,0}, // S_PLAY_XDIE7 - {SPR_PLAY,21,5,{NULL},S_PLAY_XDIE9,0,0}, // S_PLAY_XDIE8 - {SPR_PLAY,22,-1,{NULL},S_NULL,0,0}, // S_PLAY_XDIE9 - {SPR_POSS,0,10,{A_Look},S_POSS_STND2,0,0}, // S_POSS_STND - {SPR_POSS,1,10,{A_Look},S_POSS_STND,0,0}, // S_POSS_STND2 - {SPR_POSS,0,4,{A_Chase},S_POSS_RUN2,0,0}, // S_POSS_RUN1 - {SPR_POSS,0,4,{A_Chase},S_POSS_RUN3,0,0}, // S_POSS_RUN2 - {SPR_POSS,1,4,{A_Chase},S_POSS_RUN4,0,0}, // S_POSS_RUN3 - {SPR_POSS,1,4,{A_Chase},S_POSS_RUN5,0,0}, // S_POSS_RUN4 - {SPR_POSS,2,4,{A_Chase},S_POSS_RUN6,0,0}, // S_POSS_RUN5 - {SPR_POSS,2,4,{A_Chase},S_POSS_RUN7,0,0}, // S_POSS_RUN6 - {SPR_POSS,3,4,{A_Chase},S_POSS_RUN8,0,0}, // S_POSS_RUN7 - {SPR_POSS,3,4,{A_Chase},S_POSS_RUN1,0,0}, // S_POSS_RUN8 - {SPR_POSS,4,10,{A_FaceTarget},S_POSS_ATK2,0,0}, // S_POSS_ATK1 - {SPR_POSS,5,8,{A_PosAttack},S_POSS_ATK3,0,0}, // S_POSS_ATK2 - {SPR_POSS,4,8,{NULL},S_POSS_RUN1,0,0}, // S_POSS_ATK3 - {SPR_POSS,6,3,{NULL},S_POSS_PAIN2,0,0}, // S_POSS_PAIN - {SPR_POSS,6,3,{A_Pain},S_POSS_RUN1,0,0}, // S_POSS_PAIN2 - {SPR_POSS,7,5,{NULL},S_POSS_DIE2,0,0}, // S_POSS_DIE1 - {SPR_POSS,8,5,{A_Scream},S_POSS_DIE3,0,0}, // S_POSS_DIE2 - {SPR_POSS,9,5,{A_Fall},S_POSS_DIE4,0,0}, // S_POSS_DIE3 - {SPR_POSS,10,5,{NULL},S_POSS_DIE5,0,0}, // S_POSS_DIE4 - {SPR_POSS,11,-1,{NULL},S_NULL,0,0}, // S_POSS_DIE5 - {SPR_POSS,12,5,{NULL},S_POSS_XDIE2,0,0}, // S_POSS_XDIE1 - {SPR_POSS,13,5,{A_XScream},S_POSS_XDIE3,0,0}, // S_POSS_XDIE2 - {SPR_POSS,14,5,{A_Fall},S_POSS_XDIE4,0,0}, // S_POSS_XDIE3 - {SPR_POSS,15,5,{NULL},S_POSS_XDIE5,0,0}, // S_POSS_XDIE4 - {SPR_POSS,16,5,{NULL},S_POSS_XDIE6,0,0}, // S_POSS_XDIE5 - {SPR_POSS,17,5,{NULL},S_POSS_XDIE7,0,0}, // S_POSS_XDIE6 - {SPR_POSS,18,5,{NULL},S_POSS_XDIE8,0,0}, // S_POSS_XDIE7 - {SPR_POSS,19,5,{NULL},S_POSS_XDIE9,0,0}, // S_POSS_XDIE8 - {SPR_POSS,20,-1,{NULL},S_NULL,0,0}, // S_POSS_XDIE9 - {SPR_POSS,10,5,{NULL},S_POSS_RAISE2,0,0}, // S_POSS_RAISE1 - {SPR_POSS,9,5,{NULL},S_POSS_RAISE3,0,0}, // S_POSS_RAISE2 - {SPR_POSS,8,5,{NULL},S_POSS_RAISE4,0,0}, // S_POSS_RAISE3 - {SPR_POSS,7,5,{NULL},S_POSS_RUN1,0,0}, // S_POSS_RAISE4 - {SPR_SPOS,0,10,{A_Look},S_SPOS_STND2,0,0}, // S_SPOS_STND - {SPR_SPOS,1,10,{A_Look},S_SPOS_STND,0,0}, // S_SPOS_STND2 - {SPR_SPOS,0,3,{A_Chase},S_SPOS_RUN2,0,0}, // S_SPOS_RUN1 - {SPR_SPOS,0,3,{A_Chase},S_SPOS_RUN3,0,0}, // S_SPOS_RUN2 - {SPR_SPOS,1,3,{A_Chase},S_SPOS_RUN4,0,0}, // S_SPOS_RUN3 - {SPR_SPOS,1,3,{A_Chase},S_SPOS_RUN5,0,0}, // S_SPOS_RUN4 - {SPR_SPOS,2,3,{A_Chase},S_SPOS_RUN6,0,0}, // S_SPOS_RUN5 - {SPR_SPOS,2,3,{A_Chase},S_SPOS_RUN7,0,0}, // S_SPOS_RUN6 - {SPR_SPOS,3,3,{A_Chase},S_SPOS_RUN8,0,0}, // S_SPOS_RUN7 - {SPR_SPOS,3,3,{A_Chase},S_SPOS_RUN1,0,0}, // S_SPOS_RUN8 - {SPR_SPOS,4,10,{A_FaceTarget},S_SPOS_ATK2,0,0}, // S_SPOS_ATK1 - {SPR_SPOS,32773,10,{A_SPosAttack},S_SPOS_ATK3,0,0}, // S_SPOS_ATK2 - {SPR_SPOS,4,10,{NULL},S_SPOS_RUN1,0,0}, // S_SPOS_ATK3 - {SPR_SPOS,6,3,{NULL},S_SPOS_PAIN2,0,0}, // S_SPOS_PAIN - {SPR_SPOS,6,3,{A_Pain},S_SPOS_RUN1,0,0}, // S_SPOS_PAIN2 - {SPR_SPOS,7,5,{NULL},S_SPOS_DIE2,0,0}, // S_SPOS_DIE1 - {SPR_SPOS,8,5,{A_Scream},S_SPOS_DIE3,0,0}, // S_SPOS_DIE2 - {SPR_SPOS,9,5,{A_Fall},S_SPOS_DIE4,0,0}, // S_SPOS_DIE3 - {SPR_SPOS,10,5,{NULL},S_SPOS_DIE5,0,0}, // S_SPOS_DIE4 - {SPR_SPOS,11,-1,{NULL},S_NULL,0,0}, // S_SPOS_DIE5 - {SPR_SPOS,12,5,{NULL},S_SPOS_XDIE2,0,0}, // S_SPOS_XDIE1 - {SPR_SPOS,13,5,{A_XScream},S_SPOS_XDIE3,0,0}, // S_SPOS_XDIE2 - {SPR_SPOS,14,5,{A_Fall},S_SPOS_XDIE4,0,0}, // S_SPOS_XDIE3 - {SPR_SPOS,15,5,{NULL},S_SPOS_XDIE5,0,0}, // S_SPOS_XDIE4 - {SPR_SPOS,16,5,{NULL},S_SPOS_XDIE6,0,0}, // S_SPOS_XDIE5 - {SPR_SPOS,17,5,{NULL},S_SPOS_XDIE7,0,0}, // S_SPOS_XDIE6 - {SPR_SPOS,18,5,{NULL},S_SPOS_XDIE8,0,0}, // S_SPOS_XDIE7 - {SPR_SPOS,19,5,{NULL},S_SPOS_XDIE9,0,0}, // S_SPOS_XDIE8 - {SPR_SPOS,20,-1,{NULL},S_NULL,0,0}, // S_SPOS_XDIE9 - {SPR_SPOS,11,5,{NULL},S_SPOS_RAISE2,0,0}, // S_SPOS_RAISE1 - {SPR_SPOS,10,5,{NULL},S_SPOS_RAISE3,0,0}, // S_SPOS_RAISE2 - {SPR_SPOS,9,5,{NULL},S_SPOS_RAISE4,0,0}, // S_SPOS_RAISE3 - {SPR_SPOS,8,5,{NULL},S_SPOS_RAISE5,0,0}, // S_SPOS_RAISE4 - {SPR_SPOS,7,5,{NULL},S_SPOS_RUN1,0,0}, // S_SPOS_RAISE5 - {SPR_VILE,0,10,{A_Look},S_VILE_STND2,0,0}, // S_VILE_STND - {SPR_VILE,1,10,{A_Look},S_VILE_STND,0,0}, // S_VILE_STND2 - {SPR_VILE,0,2,{A_VileChase},S_VILE_RUN2,0,0}, // S_VILE_RUN1 - {SPR_VILE,0,2,{A_VileChase},S_VILE_RUN3,0,0}, // S_VILE_RUN2 - {SPR_VILE,1,2,{A_VileChase},S_VILE_RUN4,0,0}, // S_VILE_RUN3 - {SPR_VILE,1,2,{A_VileChase},S_VILE_RUN5,0,0}, // S_VILE_RUN4 - {SPR_VILE,2,2,{A_VileChase},S_VILE_RUN6,0,0}, // S_VILE_RUN5 - {SPR_VILE,2,2,{A_VileChase},S_VILE_RUN7,0,0}, // S_VILE_RUN6 - {SPR_VILE,3,2,{A_VileChase},S_VILE_RUN8,0,0}, // S_VILE_RUN7 - {SPR_VILE,3,2,{A_VileChase},S_VILE_RUN9,0,0}, // S_VILE_RUN8 - {SPR_VILE,4,2,{A_VileChase},S_VILE_RUN10,0,0}, // S_VILE_RUN9 - {SPR_VILE,4,2,{A_VileChase},S_VILE_RUN11,0,0}, // S_VILE_RUN10 - {SPR_VILE,5,2,{A_VileChase},S_VILE_RUN12,0,0}, // S_VILE_RUN11 - {SPR_VILE,5,2,{A_VileChase},S_VILE_RUN1,0,0}, // S_VILE_RUN12 - {SPR_VILE,32774,0,{A_VileStart},S_VILE_ATK2,0,0}, // S_VILE_ATK1 - {SPR_VILE,32774,10,{A_FaceTarget},S_VILE_ATK3,0,0}, // S_VILE_ATK2 - {SPR_VILE,32775,8,{A_VileTarget},S_VILE_ATK4,0,0}, // S_VILE_ATK3 - {SPR_VILE,32776,8,{A_FaceTarget},S_VILE_ATK5,0,0}, // S_VILE_ATK4 - {SPR_VILE,32777,8,{A_FaceTarget},S_VILE_ATK6,0,0}, // S_VILE_ATK5 - {SPR_VILE,32778,8,{A_FaceTarget},S_VILE_ATK7,0,0}, // S_VILE_ATK6 - {SPR_VILE,32779,8,{A_FaceTarget},S_VILE_ATK8,0,0}, // S_VILE_ATK7 - {SPR_VILE,32780,8,{A_FaceTarget},S_VILE_ATK9,0,0}, // S_VILE_ATK8 - {SPR_VILE,32781,8,{A_FaceTarget},S_VILE_ATK10,0,0}, // S_VILE_ATK9 - {SPR_VILE,32782,8,{A_VileAttack},S_VILE_ATK11,0,0}, // S_VILE_ATK10 - {SPR_VILE,32783,20,{NULL},S_VILE_RUN1,0,0}, // S_VILE_ATK11 - {SPR_VILE,32794,10,{NULL},S_VILE_HEAL2,0,0}, // S_VILE_HEAL1 - {SPR_VILE,32795,10,{NULL},S_VILE_HEAL3,0,0}, // S_VILE_HEAL2 - {SPR_VILE,32796,10,{NULL},S_VILE_RUN1,0,0}, // S_VILE_HEAL3 - {SPR_VILE,16,5,{NULL},S_VILE_PAIN2,0,0}, // S_VILE_PAIN - {SPR_VILE,16,5,{A_Pain},S_VILE_RUN1,0,0}, // S_VILE_PAIN2 - {SPR_VILE,16,7,{NULL},S_VILE_DIE2,0,0}, // S_VILE_DIE1 - {SPR_VILE,17,7,{A_Scream},S_VILE_DIE3,0,0}, // S_VILE_DIE2 - {SPR_VILE,18,7,{A_Fall},S_VILE_DIE4,0,0}, // S_VILE_DIE3 - {SPR_VILE,19,7,{NULL},S_VILE_DIE5,0,0}, // S_VILE_DIE4 - {SPR_VILE,20,7,{NULL},S_VILE_DIE6,0,0}, // S_VILE_DIE5 - {SPR_VILE,21,7,{NULL},S_VILE_DIE7,0,0}, // S_VILE_DIE6 - {SPR_VILE,22,7,{NULL},S_VILE_DIE8,0,0}, // S_VILE_DIE7 - {SPR_VILE,23,5,{NULL},S_VILE_DIE9,0,0}, // S_VILE_DIE8 - {SPR_VILE,24,5,{NULL},S_VILE_DIE10,0,0}, // S_VILE_DIE9 - {SPR_VILE,25,-1,{NULL},S_NULL,0,0}, // S_VILE_DIE10 - {SPR_FIRE,32768,2,{A_StartFire},S_FIRE2,0,0}, // S_FIRE1 - {SPR_FIRE,32769,2,{A_Fire},S_FIRE3,0,0}, // S_FIRE2 - {SPR_FIRE,32768,2,{A_Fire},S_FIRE4,0,0}, // S_FIRE3 - {SPR_FIRE,32769,2,{A_Fire},S_FIRE5,0,0}, // S_FIRE4 - {SPR_FIRE,32770,2,{A_FireCrackle},S_FIRE6,0,0}, // S_FIRE5 - {SPR_FIRE,32769,2,{A_Fire},S_FIRE7,0,0}, // S_FIRE6 - {SPR_FIRE,32770,2,{A_Fire},S_FIRE8,0,0}, // S_FIRE7 - {SPR_FIRE,32769,2,{A_Fire},S_FIRE9,0,0}, // S_FIRE8 - {SPR_FIRE,32770,2,{A_Fire},S_FIRE10,0,0}, // S_FIRE9 - {SPR_FIRE,32771,2,{A_Fire},S_FIRE11,0,0}, // S_FIRE10 - {SPR_FIRE,32770,2,{A_Fire},S_FIRE12,0,0}, // S_FIRE11 - {SPR_FIRE,32771,2,{A_Fire},S_FIRE13,0,0}, // S_FIRE12 - {SPR_FIRE,32770,2,{A_Fire},S_FIRE14,0,0}, // S_FIRE13 - {SPR_FIRE,32771,2,{A_Fire},S_FIRE15,0,0}, // S_FIRE14 - {SPR_FIRE,32772,2,{A_Fire},S_FIRE16,0,0}, // S_FIRE15 - {SPR_FIRE,32771,2,{A_Fire},S_FIRE17,0,0}, // S_FIRE16 - {SPR_FIRE,32772,2,{A_Fire},S_FIRE18,0,0}, // S_FIRE17 - {SPR_FIRE,32771,2,{A_Fire},S_FIRE19,0,0}, // S_FIRE18 - {SPR_FIRE,32772,2,{A_FireCrackle},S_FIRE20,0,0}, // S_FIRE19 - {SPR_FIRE,32773,2,{A_Fire},S_FIRE21,0,0}, // S_FIRE20 - {SPR_FIRE,32772,2,{A_Fire},S_FIRE22,0,0}, // S_FIRE21 - {SPR_FIRE,32773,2,{A_Fire},S_FIRE23,0,0}, // S_FIRE22 - {SPR_FIRE,32772,2,{A_Fire},S_FIRE24,0,0}, // S_FIRE23 - {SPR_FIRE,32773,2,{A_Fire},S_FIRE25,0,0}, // S_FIRE24 - {SPR_FIRE,32774,2,{A_Fire},S_FIRE26,0,0}, // S_FIRE25 - {SPR_FIRE,32775,2,{A_Fire},S_FIRE27,0,0}, // S_FIRE26 - {SPR_FIRE,32774,2,{A_Fire},S_FIRE28,0,0}, // S_FIRE27 - {SPR_FIRE,32775,2,{A_Fire},S_FIRE29,0,0}, // S_FIRE28 - {SPR_FIRE,32774,2,{A_Fire},S_FIRE30,0,0}, // S_FIRE29 - {SPR_FIRE,32775,2,{A_Fire},S_NULL,0,0}, // S_FIRE30 - {SPR_PUFF,1,4,{NULL},S_SMOKE2,0,0}, // S_SMOKE1 - {SPR_PUFF,2,4,{NULL},S_SMOKE3,0,0}, // S_SMOKE2 - {SPR_PUFF,1,4,{NULL},S_SMOKE4,0,0}, // S_SMOKE3 - {SPR_PUFF,2,4,{NULL},S_SMOKE5,0,0}, // S_SMOKE4 - {SPR_PUFF,3,4,{NULL},S_NULL,0,0}, // S_SMOKE5 - {SPR_FATB,32768,2,{A_Tracer},S_TRACER2,0,0}, // S_TRACER - {SPR_FATB,32769,2,{A_Tracer},S_TRACER,0,0}, // S_TRACER2 - {SPR_FBXP,32768,8,{NULL},S_TRACEEXP2,0,0}, // S_TRACEEXP1 - {SPR_FBXP,32769,6,{NULL},S_TRACEEXP3,0,0}, // S_TRACEEXP2 - {SPR_FBXP,32770,4,{NULL},S_NULL,0,0}, // S_TRACEEXP3 - {SPR_SKEL,0,10,{A_Look},S_SKEL_STND2,0,0}, // S_SKEL_STND - {SPR_SKEL,1,10,{A_Look},S_SKEL_STND,0,0}, // S_SKEL_STND2 - {SPR_SKEL,0,2,{A_Chase},S_SKEL_RUN2,0,0}, // S_SKEL_RUN1 - {SPR_SKEL,0,2,{A_Chase},S_SKEL_RUN3,0,0}, // S_SKEL_RUN2 - {SPR_SKEL,1,2,{A_Chase},S_SKEL_RUN4,0,0}, // S_SKEL_RUN3 - {SPR_SKEL,1,2,{A_Chase},S_SKEL_RUN5,0,0}, // S_SKEL_RUN4 - {SPR_SKEL,2,2,{A_Chase},S_SKEL_RUN6,0,0}, // S_SKEL_RUN5 - {SPR_SKEL,2,2,{A_Chase},S_SKEL_RUN7,0,0}, // S_SKEL_RUN6 - {SPR_SKEL,3,2,{A_Chase},S_SKEL_RUN8,0,0}, // S_SKEL_RUN7 - {SPR_SKEL,3,2,{A_Chase},S_SKEL_RUN9,0,0}, // S_SKEL_RUN8 - {SPR_SKEL,4,2,{A_Chase},S_SKEL_RUN10,0,0}, // S_SKEL_RUN9 - {SPR_SKEL,4,2,{A_Chase},S_SKEL_RUN11,0,0}, // S_SKEL_RUN10 - {SPR_SKEL,5,2,{A_Chase},S_SKEL_RUN12,0,0}, // S_SKEL_RUN11 - {SPR_SKEL,5,2,{A_Chase},S_SKEL_RUN1,0,0}, // S_SKEL_RUN12 - {SPR_SKEL,6,0,{A_FaceTarget},S_SKEL_FIST2,0,0}, // S_SKEL_FIST1 - {SPR_SKEL,6,6,{A_SkelWhoosh},S_SKEL_FIST3,0,0}, // S_SKEL_FIST2 - {SPR_SKEL,7,6,{A_FaceTarget},S_SKEL_FIST4,0,0}, // S_SKEL_FIST3 - {SPR_SKEL,8,6,{A_SkelFist},S_SKEL_RUN1,0,0}, // S_SKEL_FIST4 - {SPR_SKEL,32777,0,{A_FaceTarget},S_SKEL_MISS2,0,0}, // S_SKEL_MISS1 - {SPR_SKEL,32777,10,{A_FaceTarget},S_SKEL_MISS3,0,0}, // S_SKEL_MISS2 - {SPR_SKEL,10,10,{A_SkelMissile},S_SKEL_MISS4,0,0}, // S_SKEL_MISS3 - {SPR_SKEL,10,10,{A_FaceTarget},S_SKEL_RUN1,0,0}, // S_SKEL_MISS4 - {SPR_SKEL,11,5,{NULL},S_SKEL_PAIN2,0,0}, // S_SKEL_PAIN - {SPR_SKEL,11,5,{A_Pain},S_SKEL_RUN1,0,0}, // S_SKEL_PAIN2 - {SPR_SKEL,11,7,{NULL},S_SKEL_DIE2,0,0}, // S_SKEL_DIE1 - {SPR_SKEL,12,7,{NULL},S_SKEL_DIE3,0,0}, // S_SKEL_DIE2 - {SPR_SKEL,13,7,{A_Scream},S_SKEL_DIE4,0,0}, // S_SKEL_DIE3 - {SPR_SKEL,14,7,{A_Fall},S_SKEL_DIE5,0,0}, // S_SKEL_DIE4 - {SPR_SKEL,15,7,{NULL},S_SKEL_DIE6,0,0}, // S_SKEL_DIE5 - {SPR_SKEL,16,-1,{NULL},S_NULL,0,0}, // S_SKEL_DIE6 - {SPR_SKEL,16,5,{NULL},S_SKEL_RAISE2,0,0}, // S_SKEL_RAISE1 - {SPR_SKEL,15,5,{NULL},S_SKEL_RAISE3,0,0}, // S_SKEL_RAISE2 - {SPR_SKEL,14,5,{NULL},S_SKEL_RAISE4,0,0}, // S_SKEL_RAISE3 - {SPR_SKEL,13,5,{NULL},S_SKEL_RAISE5,0,0}, // S_SKEL_RAISE4 - {SPR_SKEL,12,5,{NULL},S_SKEL_RAISE6,0,0}, // S_SKEL_RAISE5 - {SPR_SKEL,11,5,{NULL},S_SKEL_RUN1,0,0}, // S_SKEL_RAISE6 - {SPR_MANF,32768,4,{NULL},S_FATSHOT2,0,0}, // S_FATSHOT1 - {SPR_MANF,32769,4,{NULL},S_FATSHOT1,0,0}, // S_FATSHOT2 - {SPR_MISL,32769,8,{NULL},S_FATSHOTX2,0,0}, // S_FATSHOTX1 - {SPR_MISL,32770,6,{NULL},S_FATSHOTX3,0,0}, // S_FATSHOTX2 - {SPR_MISL,32771,4,{NULL},S_NULL,0,0}, // S_FATSHOTX3 - {SPR_FATT,0,15,{A_Look},S_FATT_STND2,0,0}, // S_FATT_STND - {SPR_FATT,1,15,{A_Look},S_FATT_STND,0,0}, // S_FATT_STND2 - {SPR_FATT,0,4,{A_Chase},S_FATT_RUN2,0,0}, // S_FATT_RUN1 - {SPR_FATT,0,4,{A_Chase},S_FATT_RUN3,0,0}, // S_FATT_RUN2 - {SPR_FATT,1,4,{A_Chase},S_FATT_RUN4,0,0}, // S_FATT_RUN3 - {SPR_FATT,1,4,{A_Chase},S_FATT_RUN5,0,0}, // S_FATT_RUN4 - {SPR_FATT,2,4,{A_Chase},S_FATT_RUN6,0,0}, // S_FATT_RUN5 - {SPR_FATT,2,4,{A_Chase},S_FATT_RUN7,0,0}, // S_FATT_RUN6 - {SPR_FATT,3,4,{A_Chase},S_FATT_RUN8,0,0}, // S_FATT_RUN7 - {SPR_FATT,3,4,{A_Chase},S_FATT_RUN9,0,0}, // S_FATT_RUN8 - {SPR_FATT,4,4,{A_Chase},S_FATT_RUN10,0,0}, // S_FATT_RUN9 - {SPR_FATT,4,4,{A_Chase},S_FATT_RUN11,0,0}, // S_FATT_RUN10 - {SPR_FATT,5,4,{A_Chase},S_FATT_RUN12,0,0}, // S_FATT_RUN11 - {SPR_FATT,5,4,{A_Chase},S_FATT_RUN1,0,0}, // S_FATT_RUN12 - {SPR_FATT,6,20,{A_FatRaise},S_FATT_ATK2,0,0}, // S_FATT_ATK1 - {SPR_FATT,32775,10,{A_FatAttack1},S_FATT_ATK3,0,0}, // S_FATT_ATK2 - {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK4,0,0}, // S_FATT_ATK3 - {SPR_FATT,6,5,{A_FaceTarget},S_FATT_ATK5,0,0}, // S_FATT_ATK4 - {SPR_FATT,32775,10,{A_FatAttack2},S_FATT_ATK6,0,0}, // S_FATT_ATK5 - {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK7,0,0}, // S_FATT_ATK6 - {SPR_FATT,6,5,{A_FaceTarget},S_FATT_ATK8,0,0}, // S_FATT_ATK7 - {SPR_FATT,32775,10,{A_FatAttack3},S_FATT_ATK9,0,0}, // S_FATT_ATK8 - {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK10,0,0}, // S_FATT_ATK9 - {SPR_FATT,6,5,{A_FaceTarget},S_FATT_RUN1,0,0}, // S_FATT_ATK10 - {SPR_FATT,9,3,{NULL},S_FATT_PAIN2,0,0}, // S_FATT_PAIN - {SPR_FATT,9,3,{A_Pain},S_FATT_RUN1,0,0}, // S_FATT_PAIN2 - {SPR_FATT,10,6,{NULL},S_FATT_DIE2,0,0}, // S_FATT_DIE1 - {SPR_FATT,11,6,{A_Scream},S_FATT_DIE3,0,0}, // S_FATT_DIE2 - {SPR_FATT,12,6,{A_Fall},S_FATT_DIE4,0,0}, // S_FATT_DIE3 - {SPR_FATT,13,6,{NULL},S_FATT_DIE5,0,0}, // S_FATT_DIE4 - {SPR_FATT,14,6,{NULL},S_FATT_DIE6,0,0}, // S_FATT_DIE5 - {SPR_FATT,15,6,{NULL},S_FATT_DIE7,0,0}, // S_FATT_DIE6 - {SPR_FATT,16,6,{NULL},S_FATT_DIE8,0,0}, // S_FATT_DIE7 - {SPR_FATT,17,6,{NULL},S_FATT_DIE9,0,0}, // S_FATT_DIE8 - {SPR_FATT,18,6,{NULL},S_FATT_DIE10,0,0}, // S_FATT_DIE9 - {SPR_FATT,19,-1,{A_BossDeath},S_NULL,0,0}, // S_FATT_DIE10 - {SPR_FATT,17,5,{NULL},S_FATT_RAISE2,0,0}, // S_FATT_RAISE1 - {SPR_FATT,16,5,{NULL},S_FATT_RAISE3,0,0}, // S_FATT_RAISE2 - {SPR_FATT,15,5,{NULL},S_FATT_RAISE4,0,0}, // S_FATT_RAISE3 - {SPR_FATT,14,5,{NULL},S_FATT_RAISE5,0,0}, // S_FATT_RAISE4 - {SPR_FATT,13,5,{NULL},S_FATT_RAISE6,0,0}, // S_FATT_RAISE5 - {SPR_FATT,12,5,{NULL},S_FATT_RAISE7,0,0}, // S_FATT_RAISE6 - {SPR_FATT,11,5,{NULL},S_FATT_RAISE8,0,0}, // S_FATT_RAISE7 - {SPR_FATT,10,5,{NULL},S_FATT_RUN1,0,0}, // S_FATT_RAISE8 - {SPR_CPOS,0,10,{A_Look},S_CPOS_STND2,0,0}, // S_CPOS_STND - {SPR_CPOS,1,10,{A_Look},S_CPOS_STND,0,0}, // S_CPOS_STND2 - {SPR_CPOS,0,3,{A_Chase},S_CPOS_RUN2,0,0}, // S_CPOS_RUN1 - {SPR_CPOS,0,3,{A_Chase},S_CPOS_RUN3,0,0}, // S_CPOS_RUN2 - {SPR_CPOS,1,3,{A_Chase},S_CPOS_RUN4,0,0}, // S_CPOS_RUN3 - {SPR_CPOS,1,3,{A_Chase},S_CPOS_RUN5,0,0}, // S_CPOS_RUN4 - {SPR_CPOS,2,3,{A_Chase},S_CPOS_RUN6,0,0}, // S_CPOS_RUN5 - {SPR_CPOS,2,3,{A_Chase},S_CPOS_RUN7,0,0}, // S_CPOS_RUN6 - {SPR_CPOS,3,3,{A_Chase},S_CPOS_RUN8,0,0}, // S_CPOS_RUN7 - {SPR_CPOS,3,3,{A_Chase},S_CPOS_RUN1,0,0}, // S_CPOS_RUN8 - {SPR_CPOS,4,10,{A_FaceTarget},S_CPOS_ATK2,0,0}, // S_CPOS_ATK1 - {SPR_CPOS,32773,4,{A_CPosAttack},S_CPOS_ATK3,0,0}, // S_CPOS_ATK2 - {SPR_CPOS,32772,4,{A_CPosAttack},S_CPOS_ATK4,0,0}, // S_CPOS_ATK3 - {SPR_CPOS,5,1,{A_CPosRefire},S_CPOS_ATK2,0,0}, // S_CPOS_ATK4 - {SPR_CPOS,6,3,{NULL},S_CPOS_PAIN2,0,0}, // S_CPOS_PAIN - {SPR_CPOS,6,3,{A_Pain},S_CPOS_RUN1,0,0}, // S_CPOS_PAIN2 - {SPR_CPOS,7,5,{NULL},S_CPOS_DIE2,0,0}, // S_CPOS_DIE1 - {SPR_CPOS,8,5,{A_Scream},S_CPOS_DIE3,0,0}, // S_CPOS_DIE2 - {SPR_CPOS,9,5,{A_Fall},S_CPOS_DIE4,0,0}, // S_CPOS_DIE3 - {SPR_CPOS,10,5,{NULL},S_CPOS_DIE5,0,0}, // S_CPOS_DIE4 - {SPR_CPOS,11,5,{NULL},S_CPOS_DIE6,0,0}, // S_CPOS_DIE5 - {SPR_CPOS,12,5,{NULL},S_CPOS_DIE7,0,0}, // S_CPOS_DIE6 - {SPR_CPOS,13,-1,{NULL},S_NULL,0,0}, // S_CPOS_DIE7 - {SPR_CPOS,14,5,{NULL},S_CPOS_XDIE2,0,0}, // S_CPOS_XDIE1 - {SPR_CPOS,15,5,{A_XScream},S_CPOS_XDIE3,0,0}, // S_CPOS_XDIE2 - {SPR_CPOS,16,5,{A_Fall},S_CPOS_XDIE4,0,0}, // S_CPOS_XDIE3 - {SPR_CPOS,17,5,{NULL},S_CPOS_XDIE5,0,0}, // S_CPOS_XDIE4 - {SPR_CPOS,18,5,{NULL},S_CPOS_XDIE6,0,0}, // S_CPOS_XDIE5 - {SPR_CPOS,19,-1,{NULL},S_NULL,0,0}, // S_CPOS_XDIE6 - {SPR_CPOS,13,5,{NULL},S_CPOS_RAISE2,0,0}, // S_CPOS_RAISE1 - {SPR_CPOS,12,5,{NULL},S_CPOS_RAISE3,0,0}, // S_CPOS_RAISE2 - {SPR_CPOS,11,5,{NULL},S_CPOS_RAISE4,0,0}, // S_CPOS_RAISE3 - {SPR_CPOS,10,5,{NULL},S_CPOS_RAISE5,0,0}, // S_CPOS_RAISE4 - {SPR_CPOS,9,5,{NULL},S_CPOS_RAISE6,0,0}, // S_CPOS_RAISE5 - {SPR_CPOS,8,5,{NULL},S_CPOS_RAISE7,0,0}, // S_CPOS_RAISE6 - {SPR_CPOS,7,5,{NULL},S_CPOS_RUN1,0,0}, // S_CPOS_RAISE7 - {SPR_TROO,0,10,{A_Look},S_TROO_STND2,0,0}, // S_TROO_STND - {SPR_TROO,1,10,{A_Look},S_TROO_STND,0,0}, // S_TROO_STND2 - {SPR_TROO,0,3,{A_Chase},S_TROO_RUN2,0,0}, // S_TROO_RUN1 - {SPR_TROO,0,3,{A_Chase},S_TROO_RUN3,0,0}, // S_TROO_RUN2 - {SPR_TROO,1,3,{A_Chase},S_TROO_RUN4,0,0}, // S_TROO_RUN3 - {SPR_TROO,1,3,{A_Chase},S_TROO_RUN5,0,0}, // S_TROO_RUN4 - {SPR_TROO,2,3,{A_Chase},S_TROO_RUN6,0,0}, // S_TROO_RUN5 - {SPR_TROO,2,3,{A_Chase},S_TROO_RUN7,0,0}, // S_TROO_RUN6 - {SPR_TROO,3,3,{A_Chase},S_TROO_RUN8,0,0}, // S_TROO_RUN7 - {SPR_TROO,3,3,{A_Chase},S_TROO_RUN1,0,0}, // S_TROO_RUN8 - {SPR_TROO,4,8,{A_FaceTarget},S_TROO_ATK2,0,0}, // S_TROO_ATK1 - {SPR_TROO,5,8,{A_FaceTarget},S_TROO_ATK3,0,0}, // S_TROO_ATK2 - {SPR_TROO,6,6,{A_TroopAttack},S_TROO_RUN1,0,0}, // S_TROO_ATK3 - {SPR_TROO,7,2,{NULL},S_TROO_PAIN2,0,0}, // S_TROO_PAIN - {SPR_TROO,7,2,{A_Pain},S_TROO_RUN1,0,0}, // S_TROO_PAIN2 - {SPR_TROO,8,8,{NULL},S_TROO_DIE2,0,0}, // S_TROO_DIE1 - {SPR_TROO,9,8,{A_Scream},S_TROO_DIE3,0,0}, // S_TROO_DIE2 - {SPR_TROO,10,6,{NULL},S_TROO_DIE4,0,0}, // S_TROO_DIE3 - {SPR_TROO,11,6,{A_Fall},S_TROO_DIE5,0,0}, // S_TROO_DIE4 - {SPR_TROO,12,-1,{NULL},S_NULL,0,0}, // S_TROO_DIE5 - {SPR_TROO,13,5,{NULL},S_TROO_XDIE2,0,0}, // S_TROO_XDIE1 - {SPR_TROO,14,5,{A_XScream},S_TROO_XDIE3,0,0}, // S_TROO_XDIE2 - {SPR_TROO,15,5,{NULL},S_TROO_XDIE4,0,0}, // S_TROO_XDIE3 - {SPR_TROO,16,5,{A_Fall},S_TROO_XDIE5,0,0}, // S_TROO_XDIE4 - {SPR_TROO,17,5,{NULL},S_TROO_XDIE6,0,0}, // S_TROO_XDIE5 - {SPR_TROO,18,5,{NULL},S_TROO_XDIE7,0,0}, // S_TROO_XDIE6 - {SPR_TROO,19,5,{NULL},S_TROO_XDIE8,0,0}, // S_TROO_XDIE7 - {SPR_TROO,20,-1,{NULL},S_NULL,0,0}, // S_TROO_XDIE8 - {SPR_TROO,12,8,{NULL},S_TROO_RAISE2,0,0}, // S_TROO_RAISE1 - {SPR_TROO,11,8,{NULL},S_TROO_RAISE3,0,0}, // S_TROO_RAISE2 - {SPR_TROO,10,6,{NULL},S_TROO_RAISE4,0,0}, // S_TROO_RAISE3 - {SPR_TROO,9,6,{NULL},S_TROO_RAISE5,0,0}, // S_TROO_RAISE4 - {SPR_TROO,8,6,{NULL},S_TROO_RUN1,0,0}, // S_TROO_RAISE5 - {SPR_SARG,0,10,{A_Look},S_SARG_STND2,0,0}, // S_SARG_STND - {SPR_SARG,1,10,{A_Look},S_SARG_STND,0,0}, // S_SARG_STND2 - {SPR_SARG,0,2,{A_Chase},S_SARG_RUN2,0,0}, // S_SARG_RUN1 - {SPR_SARG,0,2,{A_Chase},S_SARG_RUN3,0,0}, // S_SARG_RUN2 - {SPR_SARG,1,2,{A_Chase},S_SARG_RUN4,0,0}, // S_SARG_RUN3 - {SPR_SARG,1,2,{A_Chase},S_SARG_RUN5,0,0}, // S_SARG_RUN4 - {SPR_SARG,2,2,{A_Chase},S_SARG_RUN6,0,0}, // S_SARG_RUN5 - {SPR_SARG,2,2,{A_Chase},S_SARG_RUN7,0,0}, // S_SARG_RUN6 - {SPR_SARG,3,2,{A_Chase},S_SARG_RUN8,0,0}, // S_SARG_RUN7 - {SPR_SARG,3,2,{A_Chase},S_SARG_RUN1,0,0}, // S_SARG_RUN8 - {SPR_SARG,4,8,{A_FaceTarget},S_SARG_ATK2,0,0}, // S_SARG_ATK1 - {SPR_SARG,5,8,{A_FaceTarget},S_SARG_ATK3,0,0}, // S_SARG_ATK2 - {SPR_SARG,6,8,{A_SargAttack},S_SARG_RUN1,0,0}, // S_SARG_ATK3 - {SPR_SARG,7,2,{NULL},S_SARG_PAIN2,0,0}, // S_SARG_PAIN - {SPR_SARG,7,2,{A_Pain},S_SARG_RUN1,0,0}, // S_SARG_PAIN2 - {SPR_SARG,8,8,{NULL},S_SARG_DIE2,0,0}, // S_SARG_DIE1 - {SPR_SARG,9,8,{A_Scream},S_SARG_DIE3,0,0}, // S_SARG_DIE2 - {SPR_SARG,10,4,{NULL},S_SARG_DIE4,0,0}, // S_SARG_DIE3 - {SPR_SARG,11,4,{A_Fall},S_SARG_DIE5,0,0}, // S_SARG_DIE4 - {SPR_SARG,12,4,{NULL},S_SARG_DIE6,0,0}, // S_SARG_DIE5 - {SPR_SARG,13,-1,{NULL},S_NULL,0,0}, // S_SARG_DIE6 - {SPR_SARG,13,5,{NULL},S_SARG_RAISE2,0,0}, // S_SARG_RAISE1 - {SPR_SARG,12,5,{NULL},S_SARG_RAISE3,0,0}, // S_SARG_RAISE2 - {SPR_SARG,11,5,{NULL},S_SARG_RAISE4,0,0}, // S_SARG_RAISE3 - {SPR_SARG,10,5,{NULL},S_SARG_RAISE5,0,0}, // S_SARG_RAISE4 - {SPR_SARG,9,5,{NULL},S_SARG_RAISE6,0,0}, // S_SARG_RAISE5 - {SPR_SARG,8,5,{NULL},S_SARG_RUN1,0,0}, // S_SARG_RAISE6 - {SPR_HEAD,0,10,{A_Look},S_HEAD_STND,0,0}, // S_HEAD_STND - {SPR_HEAD,0,3,{A_Chase},S_HEAD_RUN1,0,0}, // S_HEAD_RUN1 - {SPR_HEAD,1,5,{A_FaceTarget},S_HEAD_ATK2,0,0}, // S_HEAD_ATK1 - {SPR_HEAD,2,5,{A_FaceTarget},S_HEAD_ATK3,0,0}, // S_HEAD_ATK2 - {SPR_HEAD,32771,5,{A_HeadAttack},S_HEAD_RUN1,0,0}, // S_HEAD_ATK3 - {SPR_HEAD,4,3,{NULL},S_HEAD_PAIN2,0,0}, // S_HEAD_PAIN - {SPR_HEAD,4,3,{A_Pain},S_HEAD_PAIN3,0,0}, // S_HEAD_PAIN2 - {SPR_HEAD,5,6,{NULL},S_HEAD_RUN1,0,0}, // S_HEAD_PAIN3 - {SPR_HEAD,6,8,{NULL},S_HEAD_DIE2,0,0}, // S_HEAD_DIE1 - {SPR_HEAD,7,8,{A_Scream},S_HEAD_DIE3,0,0}, // S_HEAD_DIE2 - {SPR_HEAD,8,8,{NULL},S_HEAD_DIE4,0,0}, // S_HEAD_DIE3 - {SPR_HEAD,9,8,{NULL},S_HEAD_DIE5,0,0}, // S_HEAD_DIE4 - {SPR_HEAD,10,8,{A_Fall},S_HEAD_DIE6,0,0}, // S_HEAD_DIE5 - {SPR_HEAD,11,-1,{NULL},S_NULL,0,0}, // S_HEAD_DIE6 - {SPR_HEAD,11,8,{NULL},S_HEAD_RAISE2,0,0}, // S_HEAD_RAISE1 - {SPR_HEAD,10,8,{NULL},S_HEAD_RAISE3,0,0}, // S_HEAD_RAISE2 - {SPR_HEAD,9,8,{NULL},S_HEAD_RAISE4,0,0}, // S_HEAD_RAISE3 - {SPR_HEAD,8,8,{NULL},S_HEAD_RAISE5,0,0}, // S_HEAD_RAISE4 - {SPR_HEAD,7,8,{NULL},S_HEAD_RAISE6,0,0}, // S_HEAD_RAISE5 - {SPR_HEAD,6,8,{NULL},S_HEAD_RUN1,0,0}, // S_HEAD_RAISE6 - {SPR_BAL7,32768,4,{NULL},S_BRBALL2,0,0}, // S_BRBALL1 - {SPR_BAL7,32769,4,{NULL},S_BRBALL1,0,0}, // S_BRBALL2 - {SPR_BAL7,32770,6,{NULL},S_BRBALLX2,0,0}, // S_BRBALLX1 - {SPR_BAL7,32771,6,{NULL},S_BRBALLX3,0,0}, // S_BRBALLX2 - {SPR_BAL7,32772,6,{NULL},S_NULL,0,0}, // S_BRBALLX3 - {SPR_BOSS,0,10,{A_Look},S_BOSS_STND2,0,0}, // S_BOSS_STND - {SPR_BOSS,1,10,{A_Look},S_BOSS_STND,0,0}, // S_BOSS_STND2 - {SPR_BOSS,0,3,{A_Chase},S_BOSS_RUN2,0,0}, // S_BOSS_RUN1 - {SPR_BOSS,0,3,{A_Chase},S_BOSS_RUN3,0,0}, // S_BOSS_RUN2 - {SPR_BOSS,1,3,{A_Chase},S_BOSS_RUN4,0,0}, // S_BOSS_RUN3 - {SPR_BOSS,1,3,{A_Chase},S_BOSS_RUN5,0,0}, // S_BOSS_RUN4 - {SPR_BOSS,2,3,{A_Chase},S_BOSS_RUN6,0,0}, // S_BOSS_RUN5 - {SPR_BOSS,2,3,{A_Chase},S_BOSS_RUN7,0,0}, // S_BOSS_RUN6 - {SPR_BOSS,3,3,{A_Chase},S_BOSS_RUN8,0,0}, // S_BOSS_RUN7 - {SPR_BOSS,3,3,{A_Chase},S_BOSS_RUN1,0,0}, // S_BOSS_RUN8 - {SPR_BOSS,4,8,{A_FaceTarget},S_BOSS_ATK2,0,0}, // S_BOSS_ATK1 - {SPR_BOSS,5,8,{A_FaceTarget},S_BOSS_ATK3,0,0}, // S_BOSS_ATK2 - {SPR_BOSS,6,8,{A_BruisAttack},S_BOSS_RUN1,0,0}, // S_BOSS_ATK3 - {SPR_BOSS,7,2,{NULL},S_BOSS_PAIN2,0,0}, // S_BOSS_PAIN - {SPR_BOSS,7,2,{A_Pain},S_BOSS_RUN1,0,0}, // S_BOSS_PAIN2 - {SPR_BOSS,8,8,{NULL},S_BOSS_DIE2,0,0}, // S_BOSS_DIE1 - {SPR_BOSS,9,8,{A_Scream},S_BOSS_DIE3,0,0}, // S_BOSS_DIE2 - {SPR_BOSS,10,8,{NULL},S_BOSS_DIE4,0,0}, // S_BOSS_DIE3 - {SPR_BOSS,11,8,{A_Fall},S_BOSS_DIE5,0,0}, // S_BOSS_DIE4 - {SPR_BOSS,12,8,{NULL},S_BOSS_DIE6,0,0}, // S_BOSS_DIE5 - {SPR_BOSS,13,8,{NULL},S_BOSS_DIE7,0,0}, // S_BOSS_DIE6 - {SPR_BOSS,14,-1,{A_BossDeath},S_NULL,0,0}, // S_BOSS_DIE7 - {SPR_BOSS,14,8,{NULL},S_BOSS_RAISE2,0,0}, // S_BOSS_RAISE1 - {SPR_BOSS,13,8,{NULL},S_BOSS_RAISE3,0,0}, // S_BOSS_RAISE2 - {SPR_BOSS,12,8,{NULL},S_BOSS_RAISE4,0,0}, // S_BOSS_RAISE3 - {SPR_BOSS,11,8,{NULL},S_BOSS_RAISE5,0,0}, // S_BOSS_RAISE4 - {SPR_BOSS,10,8,{NULL},S_BOSS_RAISE6,0,0}, // S_BOSS_RAISE5 - {SPR_BOSS,9,8,{NULL},S_BOSS_RAISE7,0,0}, // S_BOSS_RAISE6 - {SPR_BOSS,8,8,{NULL},S_BOSS_RUN1,0,0}, // S_BOSS_RAISE7 - {SPR_BOS2,0,10,{A_Look},S_BOS2_STND2,0,0}, // S_BOS2_STND - {SPR_BOS2,1,10,{A_Look},S_BOS2_STND,0,0}, // S_BOS2_STND2 - {SPR_BOS2,0,3,{A_Chase},S_BOS2_RUN2,0,0}, // S_BOS2_RUN1 - {SPR_BOS2,0,3,{A_Chase},S_BOS2_RUN3,0,0}, // S_BOS2_RUN2 - {SPR_BOS2,1,3,{A_Chase},S_BOS2_RUN4,0,0}, // S_BOS2_RUN3 - {SPR_BOS2,1,3,{A_Chase},S_BOS2_RUN5,0,0}, // S_BOS2_RUN4 - {SPR_BOS2,2,3,{A_Chase},S_BOS2_RUN6,0,0}, // S_BOS2_RUN5 - {SPR_BOS2,2,3,{A_Chase},S_BOS2_RUN7,0,0}, // S_BOS2_RUN6 - {SPR_BOS2,3,3,{A_Chase},S_BOS2_RUN8,0,0}, // S_BOS2_RUN7 - {SPR_BOS2,3,3,{A_Chase},S_BOS2_RUN1,0,0}, // S_BOS2_RUN8 - {SPR_BOS2,4,8,{A_FaceTarget},S_BOS2_ATK2,0,0}, // S_BOS2_ATK1 - {SPR_BOS2,5,8,{A_FaceTarget},S_BOS2_ATK3,0,0}, // S_BOS2_ATK2 - {SPR_BOS2,6,8,{A_BruisAttack},S_BOS2_RUN1,0,0}, // S_BOS2_ATK3 - {SPR_BOS2,7,2,{NULL},S_BOS2_PAIN2,0,0}, // S_BOS2_PAIN - {SPR_BOS2,7,2,{A_Pain},S_BOS2_RUN1,0,0}, // S_BOS2_PAIN2 - {SPR_BOS2,8,8,{NULL},S_BOS2_DIE2,0,0}, // S_BOS2_DIE1 - {SPR_BOS2,9,8,{A_Scream},S_BOS2_DIE3,0,0}, // S_BOS2_DIE2 - {SPR_BOS2,10,8,{NULL},S_BOS2_DIE4,0,0}, // S_BOS2_DIE3 - {SPR_BOS2,11,8,{A_Fall},S_BOS2_DIE5,0,0}, // S_BOS2_DIE4 - {SPR_BOS2,12,8,{NULL},S_BOS2_DIE6,0,0}, // S_BOS2_DIE5 - {SPR_BOS2,13,8,{NULL},S_BOS2_DIE7,0,0}, // S_BOS2_DIE6 - {SPR_BOS2,14,-1,{NULL},S_NULL,0,0}, // S_BOS2_DIE7 - {SPR_BOS2,14,8,{NULL},S_BOS2_RAISE2,0,0}, // S_BOS2_RAISE1 - {SPR_BOS2,13,8,{NULL},S_BOS2_RAISE3,0,0}, // S_BOS2_RAISE2 - {SPR_BOS2,12,8,{NULL},S_BOS2_RAISE4,0,0}, // S_BOS2_RAISE3 - {SPR_BOS2,11,8,{NULL},S_BOS2_RAISE5,0,0}, // S_BOS2_RAISE4 - {SPR_BOS2,10,8,{NULL},S_BOS2_RAISE6,0,0}, // S_BOS2_RAISE5 - {SPR_BOS2,9,8,{NULL},S_BOS2_RAISE7,0,0}, // S_BOS2_RAISE6 - {SPR_BOS2,8,8,{NULL},S_BOS2_RUN1,0,0}, // S_BOS2_RAISE7 - {SPR_SKUL,32768,10,{A_Look},S_SKULL_STND2,0,0}, // S_SKULL_STND - {SPR_SKUL,32769,10,{A_Look},S_SKULL_STND,0,0}, // S_SKULL_STND2 - {SPR_SKUL,32768,6,{A_Chase},S_SKULL_RUN2,0,0}, // S_SKULL_RUN1 - {SPR_SKUL,32769,6,{A_Chase},S_SKULL_RUN1,0,0}, // S_SKULL_RUN2 - {SPR_SKUL,32770,10,{A_FaceTarget},S_SKULL_ATK2,0,0}, // S_SKULL_ATK1 - {SPR_SKUL,32771,4,{A_SkullAttack},S_SKULL_ATK3,0,0}, // S_SKULL_ATK2 - {SPR_SKUL,32770,4,{NULL},S_SKULL_ATK4,0,0}, // S_SKULL_ATK3 - {SPR_SKUL,32771,4,{NULL},S_SKULL_ATK3,0,0}, // S_SKULL_ATK4 - {SPR_SKUL,32772,3,{NULL},S_SKULL_PAIN2,0,0}, // S_SKULL_PAIN - {SPR_SKUL,32772,3,{A_Pain},S_SKULL_RUN1,0,0}, // S_SKULL_PAIN2 - {SPR_SKUL,32773,6,{NULL},S_SKULL_DIE2,0,0}, // S_SKULL_DIE1 - {SPR_SKUL,32774,6,{A_Scream},S_SKULL_DIE3,0,0}, // S_SKULL_DIE2 - {SPR_SKUL,32775,6,{NULL},S_SKULL_DIE4,0,0}, // S_SKULL_DIE3 - {SPR_SKUL,32776,6,{A_Fall},S_SKULL_DIE5,0,0}, // S_SKULL_DIE4 - {SPR_SKUL,9,6,{NULL},S_SKULL_DIE6,0,0}, // S_SKULL_DIE5 - {SPR_SKUL,10,6,{NULL},S_NULL,0,0}, // S_SKULL_DIE6 - {SPR_SPID,0,10,{A_Look},S_SPID_STND2,0,0}, // S_SPID_STND - {SPR_SPID,1,10,{A_Look},S_SPID_STND,0,0}, // S_SPID_STND2 - {SPR_SPID,0,3,{A_Metal},S_SPID_RUN2,0,0}, // S_SPID_RUN1 - {SPR_SPID,0,3,{A_Chase},S_SPID_RUN3,0,0}, // S_SPID_RUN2 - {SPR_SPID,1,3,{A_Chase},S_SPID_RUN4,0,0}, // S_SPID_RUN3 - {SPR_SPID,1,3,{A_Chase},S_SPID_RUN5,0,0}, // S_SPID_RUN4 - {SPR_SPID,2,3,{A_Metal},S_SPID_RUN6,0,0}, // S_SPID_RUN5 - {SPR_SPID,2,3,{A_Chase},S_SPID_RUN7,0,0}, // S_SPID_RUN6 - {SPR_SPID,3,3,{A_Chase},S_SPID_RUN8,0,0}, // S_SPID_RUN7 - {SPR_SPID,3,3,{A_Chase},S_SPID_RUN9,0,0}, // S_SPID_RUN8 - {SPR_SPID,4,3,{A_Metal},S_SPID_RUN10,0,0}, // S_SPID_RUN9 - {SPR_SPID,4,3,{A_Chase},S_SPID_RUN11,0,0}, // S_SPID_RUN10 - {SPR_SPID,5,3,{A_Chase},S_SPID_RUN12,0,0}, // S_SPID_RUN11 - {SPR_SPID,5,3,{A_Chase},S_SPID_RUN1,0,0}, // S_SPID_RUN12 - {SPR_SPID,32768,20,{A_FaceTarget},S_SPID_ATK2,0,0}, // S_SPID_ATK1 - {SPR_SPID,32774,4,{A_SPosAttack},S_SPID_ATK3,0,0}, // S_SPID_ATK2 - {SPR_SPID,32775,4,{A_SPosAttack},S_SPID_ATK4,0,0}, // S_SPID_ATK3 - {SPR_SPID,32775,1,{A_SpidRefire},S_SPID_ATK2,0,0}, // S_SPID_ATK4 - {SPR_SPID,8,3,{NULL},S_SPID_PAIN2,0,0}, // S_SPID_PAIN - {SPR_SPID,8,3,{A_Pain},S_SPID_RUN1,0,0}, // S_SPID_PAIN2 - {SPR_SPID,9,20,{A_Scream},S_SPID_DIE2,0,0}, // S_SPID_DIE1 - {SPR_SPID,10,10,{A_Fall},S_SPID_DIE3,0,0}, // S_SPID_DIE2 - {SPR_SPID,11,10,{NULL},S_SPID_DIE4,0,0}, // S_SPID_DIE3 - {SPR_SPID,12,10,{NULL},S_SPID_DIE5,0,0}, // S_SPID_DIE4 - {SPR_SPID,13,10,{NULL},S_SPID_DIE6,0,0}, // S_SPID_DIE5 - {SPR_SPID,14,10,{NULL},S_SPID_DIE7,0,0}, // S_SPID_DIE6 - {SPR_SPID,15,10,{NULL},S_SPID_DIE8,0,0}, // S_SPID_DIE7 - {SPR_SPID,16,10,{NULL},S_SPID_DIE9,0,0}, // S_SPID_DIE8 - {SPR_SPID,17,10,{NULL},S_SPID_DIE10,0,0}, // S_SPID_DIE9 - {SPR_SPID,18,30,{NULL},S_SPID_DIE11,0,0}, // S_SPID_DIE10 - {SPR_SPID,18,-1,{A_BossDeath},S_NULL,0,0}, // S_SPID_DIE11 - {SPR_BSPI,0,10,{A_Look},S_BSPI_STND2,0,0}, // S_BSPI_STND - {SPR_BSPI,1,10,{A_Look},S_BSPI_STND,0,0}, // S_BSPI_STND2 - {SPR_BSPI,0,20,{NULL},S_BSPI_RUN1,0,0}, // S_BSPI_SIGHT - {SPR_BSPI,0,3,{A_BabyMetal},S_BSPI_RUN2,0,0}, // S_BSPI_RUN1 - {SPR_BSPI,0,3,{A_Chase},S_BSPI_RUN3,0,0}, // S_BSPI_RUN2 - {SPR_BSPI,1,3,{A_Chase},S_BSPI_RUN4,0,0}, // S_BSPI_RUN3 - {SPR_BSPI,1,3,{A_Chase},S_BSPI_RUN5,0,0}, // S_BSPI_RUN4 - {SPR_BSPI,2,3,{A_Chase},S_BSPI_RUN6,0,0}, // S_BSPI_RUN5 - {SPR_BSPI,2,3,{A_Chase},S_BSPI_RUN7,0,0}, // S_BSPI_RUN6 - {SPR_BSPI,3,3,{A_BabyMetal},S_BSPI_RUN8,0,0}, // S_BSPI_RUN7 - {SPR_BSPI,3,3,{A_Chase},S_BSPI_RUN9,0,0}, // S_BSPI_RUN8 - {SPR_BSPI,4,3,{A_Chase},S_BSPI_RUN10,0,0}, // S_BSPI_RUN9 - {SPR_BSPI,4,3,{A_Chase},S_BSPI_RUN11,0,0}, // S_BSPI_RUN10 - {SPR_BSPI,5,3,{A_Chase},S_BSPI_RUN12,0,0}, // S_BSPI_RUN11 - {SPR_BSPI,5,3,{A_Chase},S_BSPI_RUN1,0,0}, // S_BSPI_RUN12 - {SPR_BSPI,32768,20,{A_FaceTarget},S_BSPI_ATK2,0,0}, // S_BSPI_ATK1 - {SPR_BSPI,32774,4,{A_BspiAttack},S_BSPI_ATK3,0,0}, // S_BSPI_ATK2 - {SPR_BSPI,32775,4,{NULL},S_BSPI_ATK4,0,0}, // S_BSPI_ATK3 - {SPR_BSPI,32775,1,{A_SpidRefire},S_BSPI_ATK2,0,0}, // S_BSPI_ATK4 - {SPR_BSPI,8,3,{NULL},S_BSPI_PAIN2,0,0}, // S_BSPI_PAIN - {SPR_BSPI,8,3,{A_Pain},S_BSPI_RUN1,0,0}, // S_BSPI_PAIN2 - {SPR_BSPI,9,20,{A_Scream},S_BSPI_DIE2,0,0}, // S_BSPI_DIE1 - {SPR_BSPI,10,7,{A_Fall},S_BSPI_DIE3,0,0}, // S_BSPI_DIE2 - {SPR_BSPI,11,7,{NULL},S_BSPI_DIE4,0,0}, // S_BSPI_DIE3 - {SPR_BSPI,12,7,{NULL},S_BSPI_DIE5,0,0}, // S_BSPI_DIE4 - {SPR_BSPI,13,7,{NULL},S_BSPI_DIE6,0,0}, // S_BSPI_DIE5 - {SPR_BSPI,14,7,{NULL},S_BSPI_DIE7,0,0}, // S_BSPI_DIE6 - {SPR_BSPI,15,-1,{A_BossDeath},S_NULL,0,0}, // S_BSPI_DIE7 - {SPR_BSPI,15,5,{NULL},S_BSPI_RAISE2,0,0}, // S_BSPI_RAISE1 - {SPR_BSPI,14,5,{NULL},S_BSPI_RAISE3,0,0}, // S_BSPI_RAISE2 - {SPR_BSPI,13,5,{NULL},S_BSPI_RAISE4,0,0}, // S_BSPI_RAISE3 - {SPR_BSPI,12,5,{NULL},S_BSPI_RAISE5,0,0}, // S_BSPI_RAISE4 - {SPR_BSPI,11,5,{NULL},S_BSPI_RAISE6,0,0}, // S_BSPI_RAISE5 - {SPR_BSPI,10,5,{NULL},S_BSPI_RAISE7,0,0}, // S_BSPI_RAISE6 - {SPR_BSPI,9,5,{NULL},S_BSPI_RUN1,0,0}, // S_BSPI_RAISE7 - {SPR_APLS,32768,5,{NULL},S_ARACH_PLAZ2,0,0}, // S_ARACH_PLAZ - {SPR_APLS,32769,5,{NULL},S_ARACH_PLAZ,0,0}, // S_ARACH_PLAZ2 - {SPR_APBX,32768,5,{NULL},S_ARACH_PLEX2,0,0}, // S_ARACH_PLEX - {SPR_APBX,32769,5,{NULL},S_ARACH_PLEX3,0,0}, // S_ARACH_PLEX2 - {SPR_APBX,32770,5,{NULL},S_ARACH_PLEX4,0,0}, // S_ARACH_PLEX3 - {SPR_APBX,32771,5,{NULL},S_ARACH_PLEX5,0,0}, // S_ARACH_PLEX4 - {SPR_APBX,32772,5,{NULL},S_NULL,0,0}, // S_ARACH_PLEX5 - {SPR_CYBR,0,10,{A_Look},S_CYBER_STND2,0,0}, // S_CYBER_STND - {SPR_CYBR,1,10,{A_Look},S_CYBER_STND,0,0}, // S_CYBER_STND2 - {SPR_CYBR,0,3,{A_Hoof},S_CYBER_RUN2,0,0}, // S_CYBER_RUN1 - {SPR_CYBR,0,3,{A_Chase},S_CYBER_RUN3,0,0}, // S_CYBER_RUN2 - {SPR_CYBR,1,3,{A_Chase},S_CYBER_RUN4,0,0}, // S_CYBER_RUN3 - {SPR_CYBR,1,3,{A_Chase},S_CYBER_RUN5,0,0}, // S_CYBER_RUN4 - {SPR_CYBR,2,3,{A_Chase},S_CYBER_RUN6,0,0}, // S_CYBER_RUN5 - {SPR_CYBR,2,3,{A_Chase},S_CYBER_RUN7,0,0}, // S_CYBER_RUN6 - {SPR_CYBR,3,3,{A_Metal},S_CYBER_RUN8,0,0}, // S_CYBER_RUN7 - {SPR_CYBR,3,3,{A_Chase},S_CYBER_RUN1,0,0}, // S_CYBER_RUN8 - {SPR_CYBR,4,6,{A_FaceTarget},S_CYBER_ATK2,0,0}, // S_CYBER_ATK1 - {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_ATK3,0,0}, // S_CYBER_ATK2 - {SPR_CYBR,4,12,{A_FaceTarget},S_CYBER_ATK4,0,0}, // S_CYBER_ATK3 - {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_ATK5,0,0}, // S_CYBER_ATK4 - {SPR_CYBR,4,12,{A_FaceTarget},S_CYBER_ATK6,0,0}, // S_CYBER_ATK5 - {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_RUN1,0,0}, // S_CYBER_ATK6 - {SPR_CYBR,6,10,{A_Pain},S_CYBER_RUN1,0,0}, // S_CYBER_PAIN - {SPR_CYBR,7,10,{NULL},S_CYBER_DIE2,0,0}, // S_CYBER_DIE1 - {SPR_CYBR,8,10,{A_Scream},S_CYBER_DIE3,0,0}, // S_CYBER_DIE2 - {SPR_CYBR,9,10,{NULL},S_CYBER_DIE4,0,0}, // S_CYBER_DIE3 - {SPR_CYBR,10,10,{NULL},S_CYBER_DIE5,0,0}, // S_CYBER_DIE4 - {SPR_CYBR,11,10,{NULL},S_CYBER_DIE6,0,0}, // S_CYBER_DIE5 - {SPR_CYBR,12,10,{A_Fall},S_CYBER_DIE7,0,0}, // S_CYBER_DIE6 - {SPR_CYBR,13,10,{NULL},S_CYBER_DIE8,0,0}, // S_CYBER_DIE7 - {SPR_CYBR,14,10,{NULL},S_CYBER_DIE9,0,0}, // S_CYBER_DIE8 - {SPR_CYBR,15,30,{NULL},S_CYBER_DIE10,0,0}, // S_CYBER_DIE9 - {SPR_CYBR,15,-1,{A_BossDeath},S_NULL,0,0}, // S_CYBER_DIE10 - {SPR_PAIN,0,10,{A_Look},S_PAIN_STND,0,0}, // S_PAIN_STND - {SPR_PAIN,0,3,{A_Chase},S_PAIN_RUN2,0,0}, // S_PAIN_RUN1 - {SPR_PAIN,0,3,{A_Chase},S_PAIN_RUN3,0,0}, // S_PAIN_RUN2 - {SPR_PAIN,1,3,{A_Chase},S_PAIN_RUN4,0,0}, // S_PAIN_RUN3 - {SPR_PAIN,1,3,{A_Chase},S_PAIN_RUN5,0,0}, // S_PAIN_RUN4 - {SPR_PAIN,2,3,{A_Chase},S_PAIN_RUN6,0,0}, // S_PAIN_RUN5 - {SPR_PAIN,2,3,{A_Chase},S_PAIN_RUN1,0,0}, // S_PAIN_RUN6 - {SPR_PAIN,3,5,{A_FaceTarget},S_PAIN_ATK2,0,0}, // S_PAIN_ATK1 - {SPR_PAIN,4,5,{A_FaceTarget},S_PAIN_ATK3,0,0}, // S_PAIN_ATK2 - {SPR_PAIN,32773,5,{A_FaceTarget},S_PAIN_ATK4,0,0}, // S_PAIN_ATK3 - {SPR_PAIN,32773,0,{A_PainAttack},S_PAIN_RUN1,0,0}, // S_PAIN_ATK4 - {SPR_PAIN,6,6,{NULL},S_PAIN_PAIN2,0,0}, // S_PAIN_PAIN - {SPR_PAIN,6,6,{A_Pain},S_PAIN_RUN1,0,0}, // S_PAIN_PAIN2 - {SPR_PAIN,32775,8,{NULL},S_PAIN_DIE2,0,0}, // S_PAIN_DIE1 - {SPR_PAIN,32776,8,{A_Scream},S_PAIN_DIE3,0,0}, // S_PAIN_DIE2 - {SPR_PAIN,32777,8,{NULL},S_PAIN_DIE4,0,0}, // S_PAIN_DIE3 - {SPR_PAIN,32778,8,{NULL},S_PAIN_DIE5,0,0}, // S_PAIN_DIE4 - {SPR_PAIN,32779,8,{A_PainDie},S_PAIN_DIE6,0,0}, // S_PAIN_DIE5 - {SPR_PAIN,32780,8,{NULL},S_NULL,0,0}, // S_PAIN_DIE6 - {SPR_PAIN,12,8,{NULL},S_PAIN_RAISE2,0,0}, // S_PAIN_RAISE1 - {SPR_PAIN,11,8,{NULL},S_PAIN_RAISE3,0,0}, // S_PAIN_RAISE2 - {SPR_PAIN,10,8,{NULL},S_PAIN_RAISE4,0,0}, // S_PAIN_RAISE3 - {SPR_PAIN,9,8,{NULL},S_PAIN_RAISE5,0,0}, // S_PAIN_RAISE4 - {SPR_PAIN,8,8,{NULL},S_PAIN_RAISE6,0,0}, // S_PAIN_RAISE5 - {SPR_PAIN,7,8,{NULL},S_PAIN_RUN1,0,0}, // S_PAIN_RAISE6 - {SPR_SSWV,0,10,{A_Look},S_SSWV_STND2,0,0}, // S_SSWV_STND - {SPR_SSWV,1,10,{A_Look},S_SSWV_STND,0,0}, // S_SSWV_STND2 - {SPR_SSWV,0,3,{A_Chase},S_SSWV_RUN2,0,0}, // S_SSWV_RUN1 - {SPR_SSWV,0,3,{A_Chase},S_SSWV_RUN3,0,0}, // S_SSWV_RUN2 - {SPR_SSWV,1,3,{A_Chase},S_SSWV_RUN4,0,0}, // S_SSWV_RUN3 - {SPR_SSWV,1,3,{A_Chase},S_SSWV_RUN5,0,0}, // S_SSWV_RUN4 - {SPR_SSWV,2,3,{A_Chase},S_SSWV_RUN6,0,0}, // S_SSWV_RUN5 - {SPR_SSWV,2,3,{A_Chase},S_SSWV_RUN7,0,0}, // S_SSWV_RUN6 - {SPR_SSWV,3,3,{A_Chase},S_SSWV_RUN8,0,0}, // S_SSWV_RUN7 - {SPR_SSWV,3,3,{A_Chase},S_SSWV_RUN1,0,0}, // S_SSWV_RUN8 - {SPR_SSWV,4,10,{A_FaceTarget},S_SSWV_ATK2,0,0}, // S_SSWV_ATK1 - {SPR_SSWV,5,10,{A_FaceTarget},S_SSWV_ATK3,0,0}, // S_SSWV_ATK2 - {SPR_SSWV,32774,4,{A_CPosAttack},S_SSWV_ATK4,0,0}, // S_SSWV_ATK3 - {SPR_SSWV,5,6,{A_FaceTarget},S_SSWV_ATK5,0,0}, // S_SSWV_ATK4 - {SPR_SSWV,32774,4,{A_CPosAttack},S_SSWV_ATK6,0,0}, // S_SSWV_ATK5 - {SPR_SSWV,5,1,{A_CPosRefire},S_SSWV_ATK2,0,0}, // S_SSWV_ATK6 - {SPR_SSWV,7,3,{NULL},S_SSWV_PAIN2,0,0}, // S_SSWV_PAIN - {SPR_SSWV,7,3,{A_Pain},S_SSWV_RUN1,0,0}, // S_SSWV_PAIN2 - {SPR_SSWV,8,5,{NULL},S_SSWV_DIE2,0,0}, // S_SSWV_DIE1 - {SPR_SSWV,9,5,{A_Scream},S_SSWV_DIE3,0,0}, // S_SSWV_DIE2 - {SPR_SSWV,10,5,{A_Fall},S_SSWV_DIE4,0,0}, // S_SSWV_DIE3 - {SPR_SSWV,11,5,{NULL},S_SSWV_DIE5,0,0}, // S_SSWV_DIE4 - {SPR_SSWV,12,-1,{NULL},S_NULL,0,0}, // S_SSWV_DIE5 - {SPR_SSWV,13,5,{NULL},S_SSWV_XDIE2,0,0}, // S_SSWV_XDIE1 - {SPR_SSWV,14,5,{A_XScream},S_SSWV_XDIE3,0,0}, // S_SSWV_XDIE2 - {SPR_SSWV,15,5,{A_Fall},S_SSWV_XDIE4,0,0}, // S_SSWV_XDIE3 - {SPR_SSWV,16,5,{NULL},S_SSWV_XDIE5,0,0}, // S_SSWV_XDIE4 - {SPR_SSWV,17,5,{NULL},S_SSWV_XDIE6,0,0}, // S_SSWV_XDIE5 - {SPR_SSWV,18,5,{NULL},S_SSWV_XDIE7,0,0}, // S_SSWV_XDIE6 - {SPR_SSWV,19,5,{NULL},S_SSWV_XDIE8,0,0}, // S_SSWV_XDIE7 - {SPR_SSWV,20,5,{NULL},S_SSWV_XDIE9,0,0}, // S_SSWV_XDIE8 - {SPR_SSWV,21,-1,{NULL},S_NULL,0,0}, // S_SSWV_XDIE9 - {SPR_SSWV,12,5,{NULL},S_SSWV_RAISE2,0,0}, // S_SSWV_RAISE1 - {SPR_SSWV,11,5,{NULL},S_SSWV_RAISE3,0,0}, // S_SSWV_RAISE2 - {SPR_SSWV,10,5,{NULL},S_SSWV_RAISE4,0,0}, // S_SSWV_RAISE3 - {SPR_SSWV,9,5,{NULL},S_SSWV_RAISE5,0,0}, // S_SSWV_RAISE4 - {SPR_SSWV,8,5,{NULL},S_SSWV_RUN1,0,0}, // S_SSWV_RAISE5 - {SPR_KEEN,0,-1,{NULL},S_KEENSTND,0,0}, // S_KEENSTND - {SPR_KEEN,0,6,{NULL},S_COMMKEEN2,0,0}, // S_COMMKEEN - {SPR_KEEN,1,6,{NULL},S_COMMKEEN3,0,0}, // S_COMMKEEN2 - {SPR_KEEN,2,6,{A_Scream},S_COMMKEEN4,0,0}, // S_COMMKEEN3 - {SPR_KEEN,3,6,{NULL},S_COMMKEEN5,0,0}, // S_COMMKEEN4 - {SPR_KEEN,4,6,{NULL},S_COMMKEEN6,0,0}, // S_COMMKEEN5 - {SPR_KEEN,5,6,{NULL},S_COMMKEEN7,0,0}, // S_COMMKEEN6 - {SPR_KEEN,6,6,{NULL},S_COMMKEEN8,0,0}, // S_COMMKEEN7 - {SPR_KEEN,7,6,{NULL},S_COMMKEEN9,0,0}, // S_COMMKEEN8 - {SPR_KEEN,8,6,{NULL},S_COMMKEEN10,0,0}, // S_COMMKEEN9 - {SPR_KEEN,9,6,{NULL},S_COMMKEEN11,0,0}, // S_COMMKEEN10 - {SPR_KEEN,10,6,{A_KeenDie},S_COMMKEEN12,0,0},// S_COMMKEEN11 - {SPR_KEEN,11,-1,{NULL},S_NULL,0,0}, // S_COMMKEEN12 - {SPR_KEEN,12,4,{NULL},S_KEENPAIN2,0,0}, // S_KEENPAIN - {SPR_KEEN,12,8,{A_Pain},S_KEENSTND,0,0}, // S_KEENPAIN2 - {SPR_BBRN,0,-1,{NULL},S_NULL,0,0}, // S_BRAIN - {SPR_BBRN,1,36,{A_BrainPain},S_BRAIN,0,0}, // S_BRAIN_PAIN - {SPR_BBRN,0,100,{A_BrainScream},S_BRAIN_DIE2,0,0}, // S_BRAIN_DIE1 - {SPR_BBRN,0,10,{NULL},S_BRAIN_DIE3,0,0}, // S_BRAIN_DIE2 - {SPR_BBRN,0,10,{NULL},S_BRAIN_DIE4,0,0}, // S_BRAIN_DIE3 - {SPR_BBRN,0,-1,{A_BrainDie},S_NULL,0,0}, // S_BRAIN_DIE4 - {SPR_SSWV,0,10,{A_Look},S_BRAINEYE,0,0}, // S_BRAINEYE - {SPR_SSWV,0,181,{A_BrainAwake},S_BRAINEYE1,0,0}, // S_BRAINEYESEE - {SPR_SSWV,0,150,{A_BrainSpit},S_BRAINEYE1,0,0}, // S_BRAINEYE1 - {SPR_BOSF,32768,3,{A_SpawnSound},S_SPAWN2,0,0}, // S_SPAWN1 - {SPR_BOSF,32769,3,{A_SpawnFly},S_SPAWN3,0,0}, // S_SPAWN2 - {SPR_BOSF,32770,3,{A_SpawnFly},S_SPAWN4,0,0}, // S_SPAWN3 - {SPR_BOSF,32771,3,{A_SpawnFly},S_SPAWN1,0,0}, // S_SPAWN4 - {SPR_FIRE,32768,4,{A_Fire},S_SPAWNFIRE2,0,0}, // S_SPAWNFIRE1 - {SPR_FIRE,32769,4,{A_Fire},S_SPAWNFIRE3,0,0}, // S_SPAWNFIRE2 - {SPR_FIRE,32770,4,{A_Fire},S_SPAWNFIRE4,0,0}, // S_SPAWNFIRE3 - {SPR_FIRE,32771,4,{A_Fire},S_SPAWNFIRE5,0,0}, // S_SPAWNFIRE4 - {SPR_FIRE,32772,4,{A_Fire},S_SPAWNFIRE6,0,0}, // S_SPAWNFIRE5 - {SPR_FIRE,32773,4,{A_Fire},S_SPAWNFIRE7,0,0}, // S_SPAWNFIRE6 - {SPR_FIRE,32774,4,{A_Fire},S_SPAWNFIRE8,0,0}, // S_SPAWNFIRE7 - {SPR_FIRE,32775,4,{A_Fire},S_NULL,0,0}, // S_SPAWNFIRE8 - {SPR_MISL,32769,10,{NULL},S_BRAINEXPLODE2,0,0}, // S_BRAINEXPLODE1 - {SPR_MISL,32770,10,{NULL},S_BRAINEXPLODE3,0,0}, // S_BRAINEXPLODE2 - {SPR_MISL,32771,10,{A_BrainExplode},S_NULL,0,0}, // S_BRAINEXPLODE3 - {SPR_ARM1,0,6,{NULL},S_ARM1A,0,0}, // S_ARM1 - {SPR_ARM1,32769,7,{NULL},S_ARM1,0,0}, // S_ARM1A - {SPR_ARM2,0,6,{NULL},S_ARM2A,0,0}, // S_ARM2 - {SPR_ARM2,32769,6,{NULL},S_ARM2,0,0}, // S_ARM2A - {SPR_BAR1,0,6,{NULL},S_BAR2,0,0}, // S_BAR1 - {SPR_BAR1,1,6,{NULL},S_BAR1,0,0}, // S_BAR2 - {SPR_BEXP,32768,5,{NULL},S_BEXP2,0,0}, // S_BEXP - {SPR_BEXP,32769,5,{A_Scream},S_BEXP3,0,0}, // S_BEXP2 - {SPR_BEXP,32770,5,{NULL},S_BEXP4,0,0}, // S_BEXP3 - {SPR_BEXP,32771,10,{A_Explode},S_BEXP5,0,0}, // S_BEXP4 - {SPR_BEXP,32772,10,{NULL},S_NULL,0,0}, // S_BEXP5 - {SPR_FCAN,32768,4,{NULL},S_BBAR2,0,0}, // S_BBAR1 - {SPR_FCAN,32769,4,{NULL},S_BBAR3,0,0}, // S_BBAR2 - {SPR_FCAN,32770,4,{NULL},S_BBAR1,0,0}, // S_BBAR3 - {SPR_BON1,0,6,{NULL},S_BON1A,0,0}, // S_BON1 - {SPR_BON1,1,6,{NULL},S_BON1B,0,0}, // S_BON1A - {SPR_BON1,2,6,{NULL},S_BON1C,0,0}, // S_BON1B - {SPR_BON1,3,6,{NULL},S_BON1D,0,0}, // S_BON1C - {SPR_BON1,2,6,{NULL},S_BON1E,0,0}, // S_BON1D - {SPR_BON1,1,6,{NULL},S_BON1,0,0}, // S_BON1E - {SPR_BON2,0,6,{NULL},S_BON2A,0,0}, // S_BON2 - {SPR_BON2,1,6,{NULL},S_BON2B,0,0}, // S_BON2A - {SPR_BON2,2,6,{NULL},S_BON2C,0,0}, // S_BON2B - {SPR_BON2,3,6,{NULL},S_BON2D,0,0}, // S_BON2C - {SPR_BON2,2,6,{NULL},S_BON2E,0,0}, // S_BON2D - {SPR_BON2,1,6,{NULL},S_BON2,0,0}, // S_BON2E - {SPR_BKEY,0,10,{NULL},S_BKEY2,0,0}, // S_BKEY - {SPR_BKEY,32769,10,{NULL},S_BKEY,0,0}, // S_BKEY2 - {SPR_RKEY,0,10,{NULL},S_RKEY2,0,0}, // S_RKEY - {SPR_RKEY,32769,10,{NULL},S_RKEY,0,0}, // S_RKEY2 - {SPR_YKEY,0,10,{NULL},S_YKEY2,0,0}, // S_YKEY - {SPR_YKEY,32769,10,{NULL},S_YKEY,0,0}, // S_YKEY2 - {SPR_BSKU,0,10,{NULL},S_BSKULL2,0,0}, // S_BSKULL - {SPR_BSKU,32769,10,{NULL},S_BSKULL,0,0}, // S_BSKULL2 - {SPR_RSKU,0,10,{NULL},S_RSKULL2,0,0}, // S_RSKULL - {SPR_RSKU,32769,10,{NULL},S_RSKULL,0,0}, // S_RSKULL2 - {SPR_YSKU,0,10,{NULL},S_YSKULL2,0,0}, // S_YSKULL - {SPR_YSKU,32769,10,{NULL},S_YSKULL,0,0}, // S_YSKULL2 - {SPR_STIM,0,-1,{NULL},S_NULL,0,0}, // S_STIM - {SPR_MEDI,0,-1,{NULL},S_NULL,0,0}, // S_MEDI - {SPR_SOUL,32768,6,{NULL},S_SOUL2,0,0}, // S_SOUL - {SPR_SOUL,32769,6,{NULL},S_SOUL3,0,0}, // S_SOUL2 - {SPR_SOUL,32770,6,{NULL},S_SOUL4,0,0}, // S_SOUL3 - {SPR_SOUL,32771,6,{NULL},S_SOUL5,0,0}, // S_SOUL4 - {SPR_SOUL,32770,6,{NULL},S_SOUL6,0,0}, // S_SOUL5 - {SPR_SOUL,32769,6,{NULL},S_SOUL,0,0}, // S_SOUL6 - {SPR_PINV,32768,6,{NULL},S_PINV2,0,0}, // S_PINV - {SPR_PINV,32769,6,{NULL},S_PINV3,0,0}, // S_PINV2 - {SPR_PINV,32770,6,{NULL},S_PINV4,0,0}, // S_PINV3 - {SPR_PINV,32771,6,{NULL},S_PINV,0,0}, // S_PINV4 - {SPR_PSTR,32768,-1,{NULL},S_NULL,0,0}, // S_PSTR - {SPR_PINS,32768,6,{NULL},S_PINS2,0,0}, // S_PINS - {SPR_PINS,32769,6,{NULL},S_PINS3,0,0}, // S_PINS2 - {SPR_PINS,32770,6,{NULL},S_PINS4,0,0}, // S_PINS3 - {SPR_PINS,32771,6,{NULL},S_PINS,0,0}, // S_PINS4 - {SPR_MEGA,32768,6,{NULL},S_MEGA2,0,0}, // S_MEGA - {SPR_MEGA,32769,6,{NULL},S_MEGA3,0,0}, // S_MEGA2 - {SPR_MEGA,32770,6,{NULL},S_MEGA4,0,0}, // S_MEGA3 - {SPR_MEGA,32771,6,{NULL},S_MEGA,0,0}, // S_MEGA4 - {SPR_SUIT,32768,-1,{NULL},S_NULL,0,0}, // S_SUIT - {SPR_PMAP,32768,6,{NULL},S_PMAP2,0,0}, // S_PMAP - {SPR_PMAP,32769,6,{NULL},S_PMAP3,0,0}, // S_PMAP2 - {SPR_PMAP,32770,6,{NULL},S_PMAP4,0,0}, // S_PMAP3 - {SPR_PMAP,32771,6,{NULL},S_PMAP5,0,0}, // S_PMAP4 - {SPR_PMAP,32770,6,{NULL},S_PMAP6,0,0}, // S_PMAP5 - {SPR_PMAP,32769,6,{NULL},S_PMAP,0,0}, // S_PMAP6 - {SPR_PVIS,32768,6,{NULL},S_PVIS2,0,0}, // S_PVIS - {SPR_PVIS,1,6,{NULL},S_PVIS,0,0}, // S_PVIS2 - {SPR_CLIP,0,-1,{NULL},S_NULL,0,0}, // S_CLIP - {SPR_AMMO,0,-1,{NULL},S_NULL,0,0}, // S_AMMO - {SPR_ROCK,0,-1,{NULL},S_NULL,0,0}, // S_ROCK - {SPR_BROK,0,-1,{NULL},S_NULL,0,0}, // S_BROK - {SPR_CELL,0,-1,{NULL},S_NULL,0,0}, // S_CELL - {SPR_CELP,0,-1,{NULL},S_NULL,0,0}, // S_CELP - {SPR_SHEL,0,-1,{NULL},S_NULL,0,0}, // S_SHEL - {SPR_SBOX,0,-1,{NULL},S_NULL,0,0}, // S_SBOX - {SPR_BPAK,0,-1,{NULL},S_NULL,0,0}, // S_BPAK - {SPR_BFUG,0,-1,{NULL},S_NULL,0,0}, // S_BFUG - {SPR_MGUN,0,-1,{NULL},S_NULL,0,0}, // S_MGUN - {SPR_CSAW,0,-1,{NULL},S_NULL,0,0}, // S_CSAW - {SPR_LAUN,0,-1,{NULL},S_NULL,0,0}, // S_LAUN - {SPR_PLAS,0,-1,{NULL},S_NULL,0,0}, // S_PLAS - {SPR_SHOT,0,-1,{NULL},S_NULL,0,0}, // S_SHOT - {SPR_SGN2,0,-1,{NULL},S_NULL,0,0}, // S_SHOT2 - {SPR_COLU,32768,-1,{NULL},S_NULL,0,0}, // S_COLU - {SPR_SMT2,0,-1,{NULL},S_NULL,0,0}, // S_STALAG - {SPR_GOR1,0,10,{NULL},S_BLOODYTWITCH2,0,0}, // S_BLOODYTWITCH - {SPR_GOR1,1,15,{NULL},S_BLOODYTWITCH3,0,0}, // S_BLOODYTWITCH2 - {SPR_GOR1,2,8,{NULL},S_BLOODYTWITCH4,0,0}, // S_BLOODYTWITCH3 - {SPR_GOR1,1,6,{NULL},S_BLOODYTWITCH,0,0}, // S_BLOODYTWITCH4 - {SPR_PLAY,13,-1,{NULL},S_NULL,0,0}, // S_DEADTORSO - {SPR_PLAY,18,-1,{NULL},S_NULL,0,0}, // S_DEADBOTTOM - {SPR_POL2,0,-1,{NULL},S_NULL,0,0}, // S_HEADSONSTICK - {SPR_POL5,0,-1,{NULL},S_NULL,0,0}, // S_GIBS - {SPR_POL4,0,-1,{NULL},S_NULL,0,0}, // S_HEADONASTICK - {SPR_POL3,32768,6,{NULL},S_HEADCANDLES2,0,0}, // S_HEADCANDLES - {SPR_POL3,32769,6,{NULL},S_HEADCANDLES,0,0}, // S_HEADCANDLES2 - {SPR_POL1,0,-1,{NULL},S_NULL,0,0}, // S_DEADSTICK - {SPR_POL6,0,6,{NULL},S_LIVESTICK2,0,0}, // S_LIVESTICK - {SPR_POL6,1,8,{NULL},S_LIVESTICK,0,0}, // S_LIVESTICK2 - {SPR_GOR2,0,-1,{NULL},S_NULL,0,0}, // S_MEAT2 - {SPR_GOR3,0,-1,{NULL},S_NULL,0,0}, // S_MEAT3 - {SPR_GOR4,0,-1,{NULL},S_NULL,0,0}, // S_MEAT4 - {SPR_GOR5,0,-1,{NULL},S_NULL,0,0}, // S_MEAT5 - {SPR_SMIT,0,-1,{NULL},S_NULL,0,0}, // S_STALAGTITE - {SPR_COL1,0,-1,{NULL},S_NULL,0,0}, // S_TALLGRNCOL - {SPR_COL2,0,-1,{NULL},S_NULL,0,0}, // S_SHRTGRNCOL - {SPR_COL3,0,-1,{NULL},S_NULL,0,0}, // S_TALLREDCOL - {SPR_COL4,0,-1,{NULL},S_NULL,0,0}, // S_SHRTREDCOL - {SPR_CAND,32768,-1,{NULL},S_NULL,0,0}, // S_CANDLESTIK - {SPR_CBRA,32768,-1,{NULL},S_NULL,0,0}, // S_CANDELABRA - {SPR_COL6,0,-1,{NULL},S_NULL,0,0}, // S_SKULLCOL - {SPR_TRE1,0,-1,{NULL},S_NULL,0,0}, // S_TORCHTREE - {SPR_TRE2,0,-1,{NULL},S_NULL,0,0}, // S_BIGTREE - {SPR_ELEC,0,-1,{NULL},S_NULL,0,0}, // S_TECHPILLAR - {SPR_CEYE,32768,6,{NULL},S_EVILEYE2,0,0}, // S_EVILEYE - {SPR_CEYE,32769,6,{NULL},S_EVILEYE3,0,0}, // S_EVILEYE2 - {SPR_CEYE,32770,6,{NULL},S_EVILEYE4,0,0}, // S_EVILEYE3 - {SPR_CEYE,32769,6,{NULL},S_EVILEYE,0,0}, // S_EVILEYE4 - {SPR_FSKU,32768,6,{NULL},S_FLOATSKULL2,0,0}, // S_FLOATSKULL - {SPR_FSKU,32769,6,{NULL},S_FLOATSKULL3,0,0}, // S_FLOATSKULL2 - {SPR_FSKU,32770,6,{NULL},S_FLOATSKULL,0,0}, // S_FLOATSKULL3 - {SPR_COL5,0,14,{NULL},S_HEARTCOL2,0,0}, // S_HEARTCOL - {SPR_COL5,1,14,{NULL},S_HEARTCOL,0,0}, // S_HEARTCOL2 - {SPR_TBLU,32768,4,{NULL},S_BLUETORCH2,0,0}, // S_BLUETORCH - {SPR_TBLU,32769,4,{NULL},S_BLUETORCH3,0,0}, // S_BLUETORCH2 - {SPR_TBLU,32770,4,{NULL},S_BLUETORCH4,0,0}, // S_BLUETORCH3 - {SPR_TBLU,32771,4,{NULL},S_BLUETORCH,0,0}, // S_BLUETORCH4 - {SPR_TGRN,32768,4,{NULL},S_GREENTORCH2,0,0}, // S_GREENTORCH - {SPR_TGRN,32769,4,{NULL},S_GREENTORCH3,0,0}, // S_GREENTORCH2 - {SPR_TGRN,32770,4,{NULL},S_GREENTORCH4,0,0}, // S_GREENTORCH3 - {SPR_TGRN,32771,4,{NULL},S_GREENTORCH,0,0}, // S_GREENTORCH4 - {SPR_TRED,32768,4,{NULL},S_REDTORCH2,0,0}, // S_REDTORCH - {SPR_TRED,32769,4,{NULL},S_REDTORCH3,0,0}, // S_REDTORCH2 - {SPR_TRED,32770,4,{NULL},S_REDTORCH4,0,0}, // S_REDTORCH3 - {SPR_TRED,32771,4,{NULL},S_REDTORCH,0,0}, // S_REDTORCH4 - {SPR_SMBT,32768,4,{NULL},S_BTORCHSHRT2,0,0}, // S_BTORCHSHRT - {SPR_SMBT,32769,4,{NULL},S_BTORCHSHRT3,0,0}, // S_BTORCHSHRT2 - {SPR_SMBT,32770,4,{NULL},S_BTORCHSHRT4,0,0}, // S_BTORCHSHRT3 - {SPR_SMBT,32771,4,{NULL},S_BTORCHSHRT,0,0}, // S_BTORCHSHRT4 - {SPR_SMGT,32768,4,{NULL},S_GTORCHSHRT2,0,0}, // S_GTORCHSHRT - {SPR_SMGT,32769,4,{NULL},S_GTORCHSHRT3,0,0}, // S_GTORCHSHRT2 - {SPR_SMGT,32770,4,{NULL},S_GTORCHSHRT4,0,0}, // S_GTORCHSHRT3 - {SPR_SMGT,32771,4,{NULL},S_GTORCHSHRT,0,0}, // S_GTORCHSHRT4 - {SPR_SMRT,32768,4,{NULL},S_RTORCHSHRT2,0,0}, // S_RTORCHSHRT - {SPR_SMRT,32769,4,{NULL},S_RTORCHSHRT3,0,0}, // S_RTORCHSHRT2 - {SPR_SMRT,32770,4,{NULL},S_RTORCHSHRT4,0,0}, // S_RTORCHSHRT3 - {SPR_SMRT,32771,4,{NULL},S_RTORCHSHRT,0,0}, // S_RTORCHSHRT4 - {SPR_HDB1,0,-1,{NULL},S_NULL,0,0}, // S_HANGNOGUTS - {SPR_HDB2,0,-1,{NULL},S_NULL,0,0}, // S_HANGBNOBRAIN - {SPR_HDB3,0,-1,{NULL},S_NULL,0,0}, // S_HANGTLOOKDN - {SPR_HDB4,0,-1,{NULL},S_NULL,0,0}, // S_HANGTSKULL - {SPR_HDB5,0,-1,{NULL},S_NULL,0,0}, // S_HANGTLOOKUP - {SPR_HDB6,0,-1,{NULL},S_NULL,0,0}, // S_HANGTNOBRAIN - {SPR_POB1,0,-1,{NULL},S_NULL,0,0}, // S_COLONGIBS - {SPR_POB2,0,-1,{NULL},S_NULL,0,0}, // S_SMALLPOOL - {SPR_BRS1,0,-1,{NULL},S_NULL,0,0}, // S_BRAINSTEM - {SPR_TLMP,32768,4,{NULL},S_TECHLAMP2,0,0}, // S_TECHLAMP - {SPR_TLMP,32769,4,{NULL},S_TECHLAMP3,0,0}, // S_TECHLAMP2 - {SPR_TLMP,32770,4,{NULL},S_TECHLAMP4,0,0}, // S_TECHLAMP3 - {SPR_TLMP,32771,4,{NULL},S_TECHLAMP,0,0}, // S_TECHLAMP4 - {SPR_TLP2,32768,4,{NULL},S_TECH2LAMP2,0,0}, // S_TECH2LAMP - {SPR_TLP2,32769,4,{NULL},S_TECH2LAMP3,0,0}, // S_TECH2LAMP2 - {SPR_TLP2,32770,4,{NULL},S_TECH2LAMP4,0,0}, // S_TECH2LAMP3 - {SPR_TLP2,32771,4,{NULL},S_TECH2LAMP,0,0} // S_TECH2LAMP4 + {SPR_TROO,0,-1,{NULL},S_NULL,0,0}, + {SPR_SHTG,4,0,{A_Light0},S_NULL,0,0}, + {SPR_PUNG,0,1,{A_WeaponReady},S_PUNCH,0,0}, + {SPR_PUNG,0,1,{A_Lower},S_PUNCHDOWN,0,0}, + {SPR_PUNG,0,1,{A_Raise},S_PUNCHUP,0,0}, + {SPR_PUNG,1,4,{NULL},S_PUNCH2,0,0}, + {SPR_PUNG,2,4,{A_Punch},S_PUNCH3,0,0}, + {SPR_PUNG,3,5,{NULL},S_PUNCH4,0,0}, + {SPR_PUNG,2,4,{NULL},S_PUNCH5,0,0}, + {SPR_PUNG,1,5,{A_ReFire},S_PUNCH,0,0}, + {SPR_PISG,0,1,{A_WeaponReady},S_PISTOL,0,0}, + {SPR_PISG,0,1,{A_Lower},S_PISTOLDOWN,0,0}, + {SPR_PISG,0,1,{A_Raise},S_PISTOLUP,0,0}, + {SPR_PISG,0,4,{NULL},S_PISTOL2,0,0}, + {SPR_PISG,1,6,{A_FirePistol},S_PISTOL3,0,0}, + {SPR_PISG,2,4,{NULL},S_PISTOL4,0,0}, + {SPR_PISG,1,5,{A_ReFire},S_PISTOL,0,0}, + {SPR_PISF,32768,7,{A_Light1},S_LIGHTDONE,0,0}, + {SPR_SHTG,0,1,{A_WeaponReady},S_SGUN,0,0}, + {SPR_SHTG,0,1,{A_Lower},S_SGUNDOWN,0,0}, + {SPR_SHTG,0,1,{A_Raise},S_SGUNUP,0,0}, + {SPR_SHTG,0,3,{NULL},S_SGUN2,0,0}, + {SPR_SHTG,0,7,{A_FireShotgun},S_SGUN3,0,0}, + {SPR_SHTG,1,5,{NULL},S_SGUN4,0,0}, + {SPR_SHTG,2,5,{NULL},S_SGUN5,0,0}, + {SPR_SHTG,3,4,{NULL},S_SGUN6,0,0}, + {SPR_SHTG,2,5,{NULL},S_SGUN7,0,0}, + {SPR_SHTG,1,5,{NULL},S_SGUN8,0,0}, + {SPR_SHTG,0,3,{NULL},S_SGUN9,0,0}, + {SPR_SHTG,0,7,{A_ReFire},S_SGUN,0,0}, + {SPR_SHTF,32768,4,{A_Light1},S_SGUNFLASH2,0,0}, + {SPR_SHTF,32769,3,{A_Light2},S_LIGHTDONE,0,0}, + {SPR_SHT2,0,1,{A_WeaponReady},S_DSGUN,0,0}, + {SPR_SHT2,0,1,{A_Lower},S_DSGUNDOWN,0,0}, + {SPR_SHT2,0,1,{A_Raise},S_DSGUNUP,0,0}, + {SPR_SHT2,0,3,{NULL},S_DSGUN2,0,0}, + {SPR_SHT2,0,7,{A_FireShotgun2},S_DSGUN3,0,0}, + {SPR_SHT2,1,7,{NULL},S_DSGUN4,0,0}, + {SPR_SHT2,2,7,{A_CheckReload},S_DSGUN5,0,0}, + {SPR_SHT2,3,7,{A_OpenShotgun2},S_DSGUN6,0,0}, + {SPR_SHT2,4,7,{NULL},S_DSGUN7,0,0}, + {SPR_SHT2,5,7,{A_LoadShotgun2},S_DSGUN8,0,0}, + {SPR_SHT2,6,6,{NULL},S_DSGUN9,0,0}, + {SPR_SHT2,7,6,{A_CloseShotgun2},S_DSGUN10,0,0}, + {SPR_SHT2,0,5,{A_ReFire},S_DSGUN,0,0}, + {SPR_SHT2,1,7,{NULL},S_DSNR2,0,0}, + {SPR_SHT2,0,3,{NULL},S_DSGUNDOWN,0,0}, + {SPR_SHT2,32776,5,{A_Light1},S_DSGUNFLASH2,0,0}, + {SPR_SHT2,32777,4,{A_Light2},S_LIGHTDONE,0,0}, + {SPR_CHGG,0,1,{A_WeaponReady},S_CHAIN,0,0}, + {SPR_CHGG,0,1,{A_Lower},S_CHAINDOWN,0,0}, + {SPR_CHGG,0,1,{A_Raise},S_CHAINUP,0,0}, + {SPR_CHGG,0,4,{A_FireCGun},S_CHAIN2,0,0}, + {SPR_CHGG,1,4,{A_FireCGun},S_CHAIN3,0,0}, + {SPR_CHGG,1,0,{A_ReFire},S_CHAIN,0,0}, + {SPR_CHGF,32768,5,{A_Light1},S_LIGHTDONE,0,0}, + {SPR_CHGF,32769,5,{A_Light2},S_LIGHTDONE,0,0}, + {SPR_MISG,0,1,{A_WeaponReady},S_MISSILE,0,0}, + {SPR_MISG,0,1,{A_Lower},S_MISSILEDOWN,0,0}, + {SPR_MISG,0,1,{A_Raise},S_MISSILEUP,0,0}, + {SPR_MISG,1,8,{A_GunFlash},S_MISSILE2,0,0}, + {SPR_MISG,1,12,{A_FireMissile},S_MISSILE3,0,0}, + {SPR_MISG,1,0,{A_ReFire},S_MISSILE,0,0}, + {SPR_MISF,32768,3,{A_Light1},S_MISSILEFLASH2,0,0}, + {SPR_MISF,32769,4,{NULL},S_MISSILEFLASH3,0,0}, + {SPR_MISF,32770,4,{A_Light2},S_MISSILEFLASH4,0,0}, + {SPR_MISF,32771,4,{A_Light2},S_LIGHTDONE,0,0}, + {SPR_SAWG,2,4,{A_WeaponReady},S_SAWB,0,0}, + {SPR_SAWG,3,4,{A_WeaponReady},S_SAW,0,0}, + {SPR_SAWG,2,1,{A_Lower},S_SAWDOWN,0,0}, + {SPR_SAWG,2,1,{A_Raise},S_SAWUP,0,0}, + {SPR_SAWG,0,4,{A_Saw},S_SAW2,0,0}, + {SPR_SAWG,1,4,{A_Saw},S_SAW3,0,0}, + {SPR_SAWG,1,0,{A_ReFire},S_SAW,0,0}, + {SPR_PLSG,0,1,{A_WeaponReady},S_PLASMA,0,0}, + {SPR_PLSG,0,1,{A_Lower},S_PLASMADOWN,0,0}, + {SPR_PLSG,0,1,{A_Raise},S_PLASMAUP,0,0}, + {SPR_PLSG,0,3,{A_FirePlasma},S_PLASMA2,0,0}, + {SPR_PLSG,1,20,{A_ReFire},S_PLASMA,0,0}, + {SPR_PLSF,32768,4,{A_Light1},S_LIGHTDONE,0,0}, + {SPR_PLSF,32769,4,{A_Light1},S_LIGHTDONE,0,0}, + {SPR_BFGG,0,1,{A_WeaponReady},S_BFG,0,0}, + {SPR_BFGG,0,1,{A_Lower},S_BFGDOWN,0,0}, + {SPR_BFGG,0,1,{A_Raise},S_BFGUP,0,0}, + {SPR_BFGG,0,20,{A_BFGsound},S_BFG2,0,0}, + {SPR_BFGG,1,10,{A_GunFlash},S_BFG3,0,0}, + {SPR_BFGG,1,10,{A_FireBFG},S_BFG4,0,0}, + {SPR_BFGG,1,20,{A_ReFire},S_BFG,0,0}, + {SPR_BFGF,32768,11,{A_Light1},S_BFGFLASH2,0,0}, + {SPR_BFGF,32769,6,{A_Light2},S_LIGHTDONE,0,0}, + {SPR_BLUD,2,8,{NULL},S_BLOOD2,0,0}, + {SPR_BLUD,1,8,{NULL},S_BLOOD3,0,0}, + {SPR_BLUD,0,8,{NULL},S_NULL,0,0}, + {SPR_PUFF,32768,4,{NULL},S_PUFF2,0,0}, + {SPR_PUFF,1,4,{NULL},S_PUFF3,0,0}, + {SPR_PUFF,2,4,{NULL},S_PUFF4,0,0}, + {SPR_PUFF,3,4,{NULL},S_NULL,0,0}, + {SPR_BAL1,32768,4,{NULL},S_TBALL2,0,0}, + {SPR_BAL1,32769,4,{NULL},S_TBALL1,0,0}, + {SPR_BAL1,32770,6,{NULL},S_TBALLX2,0,0}, + {SPR_BAL1,32771,6,{NULL},S_TBALLX3,0,0}, + {SPR_BAL1,32772,6,{NULL},S_NULL,0,0}, + {SPR_BAL2,32768,4,{NULL},S_RBALL2,0,0}, + {SPR_BAL2,32769,4,{NULL},S_RBALL1,0,0}, + {SPR_BAL2,32770,6,{NULL},S_RBALLX2,0,0}, + {SPR_BAL2,32771,6,{NULL},S_RBALLX3,0,0}, + {SPR_BAL2,32772,6,{NULL},S_NULL,0,0}, + {SPR_PLSS,32768,6,{NULL},S_PLASBALL2,0,0}, + {SPR_PLSS,32769,6,{NULL},S_PLASBALL,0,0}, + {SPR_PLSE,32768,4,{NULL},S_PLASEXP2,0,0}, + {SPR_PLSE,32769,4,{NULL},S_PLASEXP3,0,0}, + {SPR_PLSE,32770,4,{NULL},S_PLASEXP4,0,0}, + {SPR_PLSE,32771,4,{NULL},S_PLASEXP5,0,0}, + {SPR_PLSE,32772,4,{NULL},S_NULL,0,0}, + {SPR_MISL,32768,1,{NULL},S_ROCKET,0,0}, + {SPR_BFS1,32768,4,{NULL},S_BFGSHOT2,0,0}, + {SPR_BFS1,32769,4,{NULL},S_BFGSHOT,0,0}, + {SPR_BFE1,32768,8,{NULL},S_BFGLAND2,0,0}, + {SPR_BFE1,32769,8,{NULL},S_BFGLAND3,0,0}, + {SPR_BFE1,32770,8,{A_BFGSpray},S_BFGLAND4,0,0}, + {SPR_BFE1,32771,8,{NULL},S_BFGLAND5,0,0}, + {SPR_BFE1,32772,8,{NULL},S_BFGLAND6,0,0}, + {SPR_BFE1,32773,8,{NULL},S_NULL,0,0}, + {SPR_BFE2,32768,8,{NULL},S_BFGEXP2,0,0}, + {SPR_BFE2,32769,8,{NULL},S_BFGEXP3,0,0}, + {SPR_BFE2,32770,8,{NULL},S_BFGEXP4,0,0}, + {SPR_BFE2,32771,8,{NULL},S_NULL,0,0}, + {SPR_MISL,32769,8,{A_Explode},S_EXPLODE2,0,0}, + {SPR_MISL,32770,6,{NULL},S_EXPLODE3,0,0}, + {SPR_MISL,32771,4,{NULL},S_NULL,0,0}, + {SPR_TFOG,32768,6,{NULL},S_TFOG01,0,0}, + {SPR_TFOG,32769,6,{NULL},S_TFOG02,0,0}, + {SPR_TFOG,32768,6,{NULL},S_TFOG2,0,0}, + {SPR_TFOG,32769,6,{NULL},S_TFOG3,0,0}, + {SPR_TFOG,32770,6,{NULL},S_TFOG4,0,0}, + {SPR_TFOG,32771,6,{NULL},S_TFOG5,0,0}, + {SPR_TFOG,32772,6,{NULL},S_TFOG6,0,0}, + {SPR_TFOG,32773,6,{NULL},S_TFOG7,0,0}, + {SPR_TFOG,32774,6,{NULL},S_TFOG8,0,0}, + {SPR_TFOG,32775,6,{NULL},S_TFOG9,0,0}, + {SPR_TFOG,32776,6,{NULL},S_TFOG10,0,0}, + {SPR_TFOG,32777,6,{NULL},S_NULL,0,0}, + {SPR_IFOG,32768,6,{NULL},S_IFOG01,0,0}, + {SPR_IFOG,32769,6,{NULL},S_IFOG02,0,0}, + {SPR_IFOG,32768,6,{NULL},S_IFOG2,0,0}, + {SPR_IFOG,32769,6,{NULL},S_IFOG3,0,0}, + {SPR_IFOG,32770,6,{NULL},S_IFOG4,0,0}, + {SPR_IFOG,32771,6,{NULL},S_IFOG5,0,0}, + {SPR_IFOG,32772,6,{NULL},S_NULL,0,0}, + {SPR_PLAY,0,-1,{NULL},S_NULL,0,0}, + {SPR_PLAY,0,4,{NULL},S_PLAY_RUN2,0,0}, + {SPR_PLAY,1,4,{NULL},S_PLAY_RUN3,0,0}, + {SPR_PLAY,2,4,{NULL},S_PLAY_RUN4,0,0}, + {SPR_PLAY,3,4,{NULL},S_PLAY_RUN1,0,0}, + {SPR_PLAY,4,12,{NULL},S_PLAY,0,0}, + {SPR_PLAY,32773,6,{NULL},S_PLAY_ATK1,0,0}, + {SPR_PLAY,6,4,{NULL},S_PLAY_PAIN2,0,0}, + {SPR_PLAY,6,4,{A_Pain},S_PLAY,0,0}, + {SPR_PLAY,7,10,{NULL},S_PLAY_DIE2,0,0}, + {SPR_PLAY,8,10,{A_PlayerScream},S_PLAY_DIE3,0,0}, + {SPR_PLAY,9,10,{A_Fall},S_PLAY_DIE4,0,0}, + {SPR_PLAY,10,10,{NULL},S_PLAY_DIE5,0,0}, + {SPR_PLAY,11,10,{NULL},S_PLAY_DIE6,0,0}, + {SPR_PLAY,12,10,{NULL},S_PLAY_DIE7,0,0}, + {SPR_PLAY,13,-1,{NULL},S_NULL,0,0}, + {SPR_PLAY,14,5,{NULL},S_PLAY_XDIE2,0,0}, + {SPR_PLAY,15,5,{A_XScream},S_PLAY_XDIE3,0,0}, + {SPR_PLAY,16,5,{A_Fall},S_PLAY_XDIE4,0,0}, + {SPR_PLAY,17,5,{NULL},S_PLAY_XDIE5,0,0}, + {SPR_PLAY,18,5,{NULL},S_PLAY_XDIE6,0,0}, + {SPR_PLAY,19,5,{NULL},S_PLAY_XDIE7,0,0}, + {SPR_PLAY,20,5,{NULL},S_PLAY_XDIE8,0,0}, + {SPR_PLAY,21,5,{NULL},S_PLAY_XDIE9,0,0}, + {SPR_PLAY,22,-1,{NULL},S_NULL,0,0}, + {SPR_POSS,0,10,{A_Look},S_POSS_STND2,0,0}, + {SPR_POSS,1,10,{A_Look},S_POSS_STND,0,0}, + {SPR_POSS,0,4,{A_Chase},S_POSS_RUN2,0,0}, + {SPR_POSS,0,4,{A_Chase},S_POSS_RUN3,0,0}, + {SPR_POSS,1,4,{A_Chase},S_POSS_RUN4,0,0}, + {SPR_POSS,1,4,{A_Chase},S_POSS_RUN5,0,0}, + {SPR_POSS,2,4,{A_Chase},S_POSS_RUN6,0,0}, + {SPR_POSS,2,4,{A_Chase},S_POSS_RUN7,0,0}, + {SPR_POSS,3,4,{A_Chase},S_POSS_RUN8,0,0}, + {SPR_POSS,3,4,{A_Chase},S_POSS_RUN1,0,0}, + {SPR_POSS,4,10,{A_FaceTarget},S_POSS_ATK2,0,0}, + {SPR_POSS,5,8,{A_PosAttack},S_POSS_ATK3,0,0}, + {SPR_POSS,4,8,{NULL},S_POSS_RUN1,0,0}, + {SPR_POSS,6,3,{NULL},S_POSS_PAIN2,0,0}, + {SPR_POSS,6,3,{A_Pain},S_POSS_RUN1,0,0}, + {SPR_POSS,7,5,{NULL},S_POSS_DIE2,0,0}, + {SPR_POSS,8,5,{A_Scream},S_POSS_DIE3,0,0}, + {SPR_POSS,9,5,{A_Fall},S_POSS_DIE4,0,0}, + {SPR_POSS,10,5,{NULL},S_POSS_DIE5,0,0}, + {SPR_POSS,11,-1,{NULL},S_NULL,0,0}, + {SPR_POSS,12,5,{NULL},S_POSS_XDIE2,0,0}, + {SPR_POSS,13,5,{A_XScream},S_POSS_XDIE3,0,0}, + {SPR_POSS,14,5,{A_Fall},S_POSS_XDIE4,0,0}, + {SPR_POSS,15,5,{NULL},S_POSS_XDIE5,0,0}, + {SPR_POSS,16,5,{NULL},S_POSS_XDIE6,0,0}, + {SPR_POSS,17,5,{NULL},S_POSS_XDIE7,0,0}, + {SPR_POSS,18,5,{NULL},S_POSS_XDIE8,0,0}, + {SPR_POSS,19,5,{NULL},S_POSS_XDIE9,0,0}, + {SPR_POSS,20,-1,{NULL},S_NULL,0,0}, + {SPR_POSS,10,5,{NULL},S_POSS_RAISE2,0,0}, + {SPR_POSS,9,5,{NULL},S_POSS_RAISE3,0,0}, + {SPR_POSS,8,5,{NULL},S_POSS_RAISE4,0,0}, + {SPR_POSS,7,5,{NULL},S_POSS_RUN1,0,0}, + {SPR_SPOS,0,10,{A_Look},S_SPOS_STND2,0,0}, + {SPR_SPOS,1,10,{A_Look},S_SPOS_STND,0,0}, + {SPR_SPOS,0,3,{A_Chase},S_SPOS_RUN2,0,0}, + {SPR_SPOS,0,3,{A_Chase},S_SPOS_RUN3,0,0}, + {SPR_SPOS,1,3,{A_Chase},S_SPOS_RUN4,0,0}, + {SPR_SPOS,1,3,{A_Chase},S_SPOS_RUN5,0,0}, + {SPR_SPOS,2,3,{A_Chase},S_SPOS_RUN6,0,0}, + {SPR_SPOS,2,3,{A_Chase},S_SPOS_RUN7,0,0}, + {SPR_SPOS,3,3,{A_Chase},S_SPOS_RUN8,0,0}, + {SPR_SPOS,3,3,{A_Chase},S_SPOS_RUN1,0,0}, + {SPR_SPOS,4,10,{A_FaceTarget},S_SPOS_ATK2,0,0}, + {SPR_SPOS,32773,10,{A_SPosAttack},S_SPOS_ATK3,0,0}, + {SPR_SPOS,4,10,{NULL},S_SPOS_RUN1,0,0}, + {SPR_SPOS,6,3,{NULL},S_SPOS_PAIN2,0,0}, + {SPR_SPOS,6,3,{A_Pain},S_SPOS_RUN1,0,0}, + {SPR_SPOS,7,5,{NULL},S_SPOS_DIE2,0,0}, + {SPR_SPOS,8,5,{A_Scream},S_SPOS_DIE3,0,0}, + {SPR_SPOS,9,5,{A_Fall},S_SPOS_DIE4,0,0}, + {SPR_SPOS,10,5,{NULL},S_SPOS_DIE5,0,0}, + {SPR_SPOS,11,-1,{NULL},S_NULL,0,0}, + {SPR_SPOS,12,5,{NULL},S_SPOS_XDIE2,0,0}, + {SPR_SPOS,13,5,{A_XScream},S_SPOS_XDIE3,0,0}, + {SPR_SPOS,14,5,{A_Fall},S_SPOS_XDIE4,0,0}, + {SPR_SPOS,15,5,{NULL},S_SPOS_XDIE5,0,0}, + {SPR_SPOS,16,5,{NULL},S_SPOS_XDIE6,0,0}, + {SPR_SPOS,17,5,{NULL},S_SPOS_XDIE7,0,0}, + {SPR_SPOS,18,5,{NULL},S_SPOS_XDIE8,0,0}, + {SPR_SPOS,19,5,{NULL},S_SPOS_XDIE9,0,0}, + {SPR_SPOS,20,-1,{NULL},S_NULL,0,0}, + {SPR_SPOS,11,5,{NULL},S_SPOS_RAISE2,0,0}, + {SPR_SPOS,10,5,{NULL},S_SPOS_RAISE3,0,0}, + {SPR_SPOS,9,5,{NULL},S_SPOS_RAISE4,0,0}, + {SPR_SPOS,8,5,{NULL},S_SPOS_RAISE5,0,0}, + {SPR_SPOS,7,5,{NULL},S_SPOS_RUN1,0,0}, + {SPR_VILE,0,10,{A_Look},S_VILE_STND2,0,0}, + {SPR_VILE,1,10,{A_Look},S_VILE_STND,0,0}, + {SPR_VILE,0,2,{A_VileChase},S_VILE_RUN2,0,0}, + {SPR_VILE,0,2,{A_VileChase},S_VILE_RUN3,0,0}, + {SPR_VILE,1,2,{A_VileChase},S_VILE_RUN4,0,0}, + {SPR_VILE,1,2,{A_VileChase},S_VILE_RUN5,0,0}, + {SPR_VILE,2,2,{A_VileChase},S_VILE_RUN6,0,0}, + {SPR_VILE,2,2,{A_VileChase},S_VILE_RUN7,0,0}, + {SPR_VILE,3,2,{A_VileChase},S_VILE_RUN8,0,0}, + {SPR_VILE,3,2,{A_VileChase},S_VILE_RUN9,0,0}, + {SPR_VILE,4,2,{A_VileChase},S_VILE_RUN10,0,0}, + {SPR_VILE,4,2,{A_VileChase},S_VILE_RUN11,0,0}, + {SPR_VILE,5,2,{A_VileChase},S_VILE_RUN12,0,0}, + {SPR_VILE,5,2,{A_VileChase},S_VILE_RUN1,0,0}, + {SPR_VILE,32774,0,{A_VileStart},S_VILE_ATK2,0,0}, + {SPR_VILE,32774,10,{A_FaceTarget},S_VILE_ATK3,0,0}, + {SPR_VILE,32775,8,{A_VileTarget},S_VILE_ATK4,0,0}, + {SPR_VILE,32776,8,{A_FaceTarget},S_VILE_ATK5,0,0}, + {SPR_VILE,32777,8,{A_FaceTarget},S_VILE_ATK6,0,0}, + {SPR_VILE,32778,8,{A_FaceTarget},S_VILE_ATK7,0,0}, + {SPR_VILE,32779,8,{A_FaceTarget},S_VILE_ATK8,0,0}, + {SPR_VILE,32780,8,{A_FaceTarget},S_VILE_ATK9,0,0}, + {SPR_VILE,32781,8,{A_FaceTarget},S_VILE_ATK10,0,0}, + {SPR_VILE,32782,8,{A_VileAttack},S_VILE_ATK11,0,0}, + {SPR_VILE,32783,20,{NULL},S_VILE_RUN1,0,0}, + {SPR_VILE,32794,10,{NULL},S_VILE_HEAL2,0,0}, + {SPR_VILE,32795,10,{NULL},S_VILE_HEAL3,0,0}, + {SPR_VILE,32796,10,{NULL},S_VILE_RUN1,0,0}, + {SPR_VILE,16,5,{NULL},S_VILE_PAIN2,0,0}, + {SPR_VILE,16,5,{A_Pain},S_VILE_RUN1,0,0}, + {SPR_VILE,16,7,{NULL},S_VILE_DIE2,0,0}, + {SPR_VILE,17,7,{A_Scream},S_VILE_DIE3,0,0}, + {SPR_VILE,18,7,{A_Fall},S_VILE_DIE4,0,0}, + {SPR_VILE,19,7,{NULL},S_VILE_DIE5,0,0}, + {SPR_VILE,20,7,{NULL},S_VILE_DIE6,0,0}, + {SPR_VILE,21,7,{NULL},S_VILE_DIE7,0,0}, + {SPR_VILE,22,7,{NULL},S_VILE_DIE8,0,0}, + {SPR_VILE,23,5,{NULL},S_VILE_DIE9,0,0}, + {SPR_VILE,24,5,{NULL},S_VILE_DIE10,0,0}, + {SPR_VILE,25,-1,{NULL},S_NULL,0,0}, + {SPR_FIRE,32768,2,{A_StartFire},S_FIRE2,0,0}, + {SPR_FIRE,32769,2,{A_Fire},S_FIRE3,0,0}, + {SPR_FIRE,32768,2,{A_Fire},S_FIRE4,0,0}, + {SPR_FIRE,32769,2,{A_Fire},S_FIRE5,0,0}, + {SPR_FIRE,32770,2,{A_FireCrackle},S_FIRE6,0,0}, + {SPR_FIRE,32769,2,{A_Fire},S_FIRE7,0,0}, + {SPR_FIRE,32770,2,{A_Fire},S_FIRE8,0,0}, + {SPR_FIRE,32769,2,{A_Fire},S_FIRE9,0,0}, + {SPR_FIRE,32770,2,{A_Fire},S_FIRE10,0,0}, + {SPR_FIRE,32771,2,{A_Fire},S_FIRE11,0,0}, + {SPR_FIRE,32770,2,{A_Fire},S_FIRE12,0,0}, + {SPR_FIRE,32771,2,{A_Fire},S_FIRE13,0,0}, + {SPR_FIRE,32770,2,{A_Fire},S_FIRE14,0,0}, + {SPR_FIRE,32771,2,{A_Fire},S_FIRE15,0,0}, + {SPR_FIRE,32772,2,{A_Fire},S_FIRE16,0,0}, + {SPR_FIRE,32771,2,{A_Fire},S_FIRE17,0,0}, + {SPR_FIRE,32772,2,{A_Fire},S_FIRE18,0,0}, + {SPR_FIRE,32771,2,{A_Fire},S_FIRE19,0,0}, + {SPR_FIRE,32772,2,{A_FireCrackle},S_FIRE20,0,0}, + {SPR_FIRE,32773,2,{A_Fire},S_FIRE21,0,0}, + {SPR_FIRE,32772,2,{A_Fire},S_FIRE22,0,0}, + {SPR_FIRE,32773,2,{A_Fire},S_FIRE23,0,0}, + {SPR_FIRE,32772,2,{A_Fire},S_FIRE24,0,0}, + {SPR_FIRE,32773,2,{A_Fire},S_FIRE25,0,0}, + {SPR_FIRE,32774,2,{A_Fire},S_FIRE26,0,0}, + {SPR_FIRE,32775,2,{A_Fire},S_FIRE27,0,0}, + {SPR_FIRE,32774,2,{A_Fire},S_FIRE28,0,0}, + {SPR_FIRE,32775,2,{A_Fire},S_FIRE29,0,0}, + {SPR_FIRE,32774,2,{A_Fire},S_FIRE30,0,0}, + {SPR_FIRE,32775,2,{A_Fire},S_NULL,0,0}, + {SPR_PUFF,1,4,{NULL},S_SMOKE2,0,0}, + {SPR_PUFF,2,4,{NULL},S_SMOKE3,0,0}, + {SPR_PUFF,1,4,{NULL},S_SMOKE4,0,0}, + {SPR_PUFF,2,4,{NULL},S_SMOKE5,0,0}, + {SPR_PUFF,3,4,{NULL},S_NULL,0,0}, + {SPR_FATB,32768,2,{A_Tracer},S_TRACER2,0,0}, + {SPR_FATB,32769,2,{A_Tracer},S_TRACER,0,0}, + {SPR_FBXP,32768,8,{NULL},S_TRACEEXP2,0,0}, + {SPR_FBXP,32769,6,{NULL},S_TRACEEXP3,0,0}, + {SPR_FBXP,32770,4,{NULL},S_NULL,0,0}, + {SPR_SKEL,0,10,{A_Look},S_SKEL_STND2,0,0}, + {SPR_SKEL,1,10,{A_Look},S_SKEL_STND,0,0}, + {SPR_SKEL,0,2,{A_Chase},S_SKEL_RUN2,0,0}, + {SPR_SKEL,0,2,{A_Chase},S_SKEL_RUN3,0,0}, + {SPR_SKEL,1,2,{A_Chase},S_SKEL_RUN4,0,0}, + {SPR_SKEL,1,2,{A_Chase},S_SKEL_RUN5,0,0}, + {SPR_SKEL,2,2,{A_Chase},S_SKEL_RUN6,0,0}, + {SPR_SKEL,2,2,{A_Chase},S_SKEL_RUN7,0,0}, + {SPR_SKEL,3,2,{A_Chase},S_SKEL_RUN8,0,0}, + {SPR_SKEL,3,2,{A_Chase},S_SKEL_RUN9,0,0}, + {SPR_SKEL,4,2,{A_Chase},S_SKEL_RUN10,0,0}, + {SPR_SKEL,4,2,{A_Chase},S_SKEL_RUN11,0,0}, + {SPR_SKEL,5,2,{A_Chase},S_SKEL_RUN12,0,0}, + {SPR_SKEL,5,2,{A_Chase},S_SKEL_RUN1,0,0}, + {SPR_SKEL,6,0,{A_FaceTarget},S_SKEL_FIST2,0,0}, + {SPR_SKEL,6,6,{A_SkelWhoosh},S_SKEL_FIST3,0,0}, + {SPR_SKEL,7,6,{A_FaceTarget},S_SKEL_FIST4,0,0}, + {SPR_SKEL,8,6,{A_SkelFist},S_SKEL_RUN1,0,0}, + {SPR_SKEL,32777,0,{A_FaceTarget},S_SKEL_MISS2,0,0}, + {SPR_SKEL,32777,10,{A_FaceTarget},S_SKEL_MISS3,0,0}, + {SPR_SKEL,10,10,{A_SkelMissile},S_SKEL_MISS4,0,0}, + {SPR_SKEL,10,10,{A_FaceTarget},S_SKEL_RUN1,0,0}, + {SPR_SKEL,11,5,{NULL},S_SKEL_PAIN2,0,0}, + {SPR_SKEL,11,5,{A_Pain},S_SKEL_RUN1,0,0}, + {SPR_SKEL,11,7,{NULL},S_SKEL_DIE2,0,0}, + {SPR_SKEL,12,7,{NULL},S_SKEL_DIE3,0,0}, + {SPR_SKEL,13,7,{A_Scream},S_SKEL_DIE4,0,0}, + {SPR_SKEL,14,7,{A_Fall},S_SKEL_DIE5,0,0}, + {SPR_SKEL,15,7,{NULL},S_SKEL_DIE6,0,0}, + {SPR_SKEL,16,-1,{NULL},S_NULL,0,0}, + {SPR_SKEL,16,5,{NULL},S_SKEL_RAISE2,0,0}, + {SPR_SKEL,15,5,{NULL},S_SKEL_RAISE3,0,0}, + {SPR_SKEL,14,5,{NULL},S_SKEL_RAISE4,0,0}, + {SPR_SKEL,13,5,{NULL},S_SKEL_RAISE5,0,0}, + {SPR_SKEL,12,5,{NULL},S_SKEL_RAISE6,0,0}, + {SPR_SKEL,11,5,{NULL},S_SKEL_RUN1,0,0}, + {SPR_MANF,32768,4,{NULL},S_FATSHOT2,0,0}, + {SPR_MANF,32769,4,{NULL},S_FATSHOT1,0,0}, + {SPR_MISL,32769,8,{NULL},S_FATSHOTX2,0,0}, + {SPR_MISL,32770,6,{NULL},S_FATSHOTX3,0,0}, + {SPR_MISL,32771,4,{NULL},S_NULL,0,0}, + {SPR_FATT,0,15,{A_Look},S_FATT_STND2,0,0}, + {SPR_FATT,1,15,{A_Look},S_FATT_STND,0,0}, + {SPR_FATT,0,4,{A_Chase},S_FATT_RUN2,0,0}, + {SPR_FATT,0,4,{A_Chase},S_FATT_RUN3,0,0}, + {SPR_FATT,1,4,{A_Chase},S_FATT_RUN4,0,0}, + {SPR_FATT,1,4,{A_Chase},S_FATT_RUN5,0,0}, + {SPR_FATT,2,4,{A_Chase},S_FATT_RUN6,0,0}, + {SPR_FATT,2,4,{A_Chase},S_FATT_RUN7,0,0}, + {SPR_FATT,3,4,{A_Chase},S_FATT_RUN8,0,0}, + {SPR_FATT,3,4,{A_Chase},S_FATT_RUN9,0,0}, + {SPR_FATT,4,4,{A_Chase},S_FATT_RUN10,0,0}, + {SPR_FATT,4,4,{A_Chase},S_FATT_RUN11,0,0}, + {SPR_FATT,5,4,{A_Chase},S_FATT_RUN12,0,0}, + {SPR_FATT,5,4,{A_Chase},S_FATT_RUN1,0,0}, + {SPR_FATT,6,20,{A_FatRaise},S_FATT_ATK2,0,0}, + {SPR_FATT,32775,10,{A_FatAttack1},S_FATT_ATK3,0,0}, + {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK4,0,0}, + {SPR_FATT,6,5,{A_FaceTarget},S_FATT_ATK5,0,0}, + {SPR_FATT,32775,10,{A_FatAttack2},S_FATT_ATK6,0,0}, + {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK7,0,0}, + {SPR_FATT,6,5,{A_FaceTarget},S_FATT_ATK8,0,0}, + {SPR_FATT,32775,10,{A_FatAttack3},S_FATT_ATK9,0,0}, + {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK10,0,0}, + {SPR_FATT,6,5,{A_FaceTarget},S_FATT_RUN1,0,0}, + {SPR_FATT,9,3,{NULL},S_FATT_PAIN2,0,0}, + {SPR_FATT,9,3,{A_Pain},S_FATT_RUN1,0,0}, + {SPR_FATT,10,6,{NULL},S_FATT_DIE2,0,0}, + {SPR_FATT,11,6,{A_Scream},S_FATT_DIE3,0,0}, + {SPR_FATT,12,6,{A_Fall},S_FATT_DIE4,0,0}, + {SPR_FATT,13,6,{NULL},S_FATT_DIE5,0,0}, + {SPR_FATT,14,6,{NULL},S_FATT_DIE6,0,0}, + {SPR_FATT,15,6,{NULL},S_FATT_DIE7,0,0}, + {SPR_FATT,16,6,{NULL},S_FATT_DIE8,0,0}, + {SPR_FATT,17,6,{NULL},S_FATT_DIE9,0,0}, + {SPR_FATT,18,6,{NULL},S_FATT_DIE10,0,0}, + {SPR_FATT,19,-1,{A_BossDeath},S_NULL,0,0}, + {SPR_FATT,17,5,{NULL},S_FATT_RAISE2,0,0}, + {SPR_FATT,16,5,{NULL},S_FATT_RAISE3,0,0}, + {SPR_FATT,15,5,{NULL},S_FATT_RAISE4,0,0}, + {SPR_FATT,14,5,{NULL},S_FATT_RAISE5,0,0}, + {SPR_FATT,13,5,{NULL},S_FATT_RAISE6,0,0}, + {SPR_FATT,12,5,{NULL},S_FATT_RAISE7,0,0}, + {SPR_FATT,11,5,{NULL},S_FATT_RAISE8,0,0}, + {SPR_FATT,10,5,{NULL},S_FATT_RUN1,0,0}, + {SPR_CPOS,0,10,{A_Look},S_CPOS_STND2,0,0}, + {SPR_CPOS,1,10,{A_Look},S_CPOS_STND,0,0}, + {SPR_CPOS,0,3,{A_Chase},S_CPOS_RUN2,0,0}, + {SPR_CPOS,0,3,{A_Chase},S_CPOS_RUN3,0,0}, + {SPR_CPOS,1,3,{A_Chase},S_CPOS_RUN4,0,0}, + {SPR_CPOS,1,3,{A_Chase},S_CPOS_RUN5,0,0}, + {SPR_CPOS,2,3,{A_Chase},S_CPOS_RUN6,0,0}, + {SPR_CPOS,2,3,{A_Chase},S_CPOS_RUN7,0,0}, + {SPR_CPOS,3,3,{A_Chase},S_CPOS_RUN8,0,0}, + {SPR_CPOS,3,3,{A_Chase},S_CPOS_RUN1,0,0}, + {SPR_CPOS,4,10,{A_FaceTarget},S_CPOS_ATK2,0,0}, + {SPR_CPOS,32773,4,{A_CPosAttack},S_CPOS_ATK3,0,0}, + {SPR_CPOS,32772,4,{A_CPosAttack},S_CPOS_ATK4,0,0}, + {SPR_CPOS,5,1,{A_CPosRefire},S_CPOS_ATK2,0,0}, + {SPR_CPOS,6,3,{NULL},S_CPOS_PAIN2,0,0}, + {SPR_CPOS,6,3,{A_Pain},S_CPOS_RUN1,0,0}, + {SPR_CPOS,7,5,{NULL},S_CPOS_DIE2,0,0}, + {SPR_CPOS,8,5,{A_Scream},S_CPOS_DIE3,0,0}, + {SPR_CPOS,9,5,{A_Fall},S_CPOS_DIE4,0,0}, + {SPR_CPOS,10,5,{NULL},S_CPOS_DIE5,0,0}, + {SPR_CPOS,11,5,{NULL},S_CPOS_DIE6,0,0}, + {SPR_CPOS,12,5,{NULL},S_CPOS_DIE7,0,0}, + {SPR_CPOS,13,-1,{NULL},S_NULL,0,0}, + {SPR_CPOS,14,5,{NULL},S_CPOS_XDIE2,0,0}, + {SPR_CPOS,15,5,{A_XScream},S_CPOS_XDIE3,0,0}, + {SPR_CPOS,16,5,{A_Fall},S_CPOS_XDIE4,0,0}, + {SPR_CPOS,17,5,{NULL},S_CPOS_XDIE5,0,0}, + {SPR_CPOS,18,5,{NULL},S_CPOS_XDIE6,0,0}, + {SPR_CPOS,19,-1,{NULL},S_NULL,0,0}, + {SPR_CPOS,13,5,{NULL},S_CPOS_RAISE2,0,0}, + {SPR_CPOS,12,5,{NULL},S_CPOS_RAISE3,0,0}, + {SPR_CPOS,11,5,{NULL},S_CPOS_RAISE4,0,0}, + {SPR_CPOS,10,5,{NULL},S_CPOS_RAISE5,0,0}, + {SPR_CPOS,9,5,{NULL},S_CPOS_RAISE6,0,0}, + {SPR_CPOS,8,5,{NULL},S_CPOS_RAISE7,0,0}, + {SPR_CPOS,7,5,{NULL},S_CPOS_RUN1,0,0}, + {SPR_TROO,0,10,{A_Look},S_TROO_STND2,0,0}, + {SPR_TROO,1,10,{A_Look},S_TROO_STND,0,0}, + {SPR_TROO,0,3,{A_Chase},S_TROO_RUN2,0,0}, + {SPR_TROO,0,3,{A_Chase},S_TROO_RUN3,0,0}, + {SPR_TROO,1,3,{A_Chase},S_TROO_RUN4,0,0}, + {SPR_TROO,1,3,{A_Chase},S_TROO_RUN5,0,0}, + {SPR_TROO,2,3,{A_Chase},S_TROO_RUN6,0,0}, + {SPR_TROO,2,3,{A_Chase},S_TROO_RUN7,0,0}, + {SPR_TROO,3,3,{A_Chase},S_TROO_RUN8,0,0}, + {SPR_TROO,3,3,{A_Chase},S_TROO_RUN1,0,0}, + {SPR_TROO,4,8,{A_FaceTarget},S_TROO_ATK2,0,0}, + {SPR_TROO,5,8,{A_FaceTarget},S_TROO_ATK3,0,0}, + {SPR_TROO,6,6,{A_TroopAttack},S_TROO_RUN1,0,0}, + {SPR_TROO,7,2,{NULL},S_TROO_PAIN2,0,0}, + {SPR_TROO,7,2,{A_Pain},S_TROO_RUN1,0,0}, + {SPR_TROO,8,8,{NULL},S_TROO_DIE2,0,0}, + {SPR_TROO,9,8,{A_Scream},S_TROO_DIE3,0,0}, + {SPR_TROO,10,6,{NULL},S_TROO_DIE4,0,0}, + {SPR_TROO,11,6,{A_Fall},S_TROO_DIE5,0,0}, + {SPR_TROO,12,-1,{NULL},S_NULL,0,0}, + {SPR_TROO,13,5,{NULL},S_TROO_XDIE2,0,0}, + {SPR_TROO,14,5,{A_XScream},S_TROO_XDIE3,0,0}, + {SPR_TROO,15,5,{NULL},S_TROO_XDIE4,0,0}, + {SPR_TROO,16,5,{A_Fall},S_TROO_XDIE5,0,0}, + {SPR_TROO,17,5,{NULL},S_TROO_XDIE6,0,0}, + {SPR_TROO,18,5,{NULL},S_TROO_XDIE7,0,0}, + {SPR_TROO,19,5,{NULL},S_TROO_XDIE8,0,0}, + {SPR_TROO,20,-1,{NULL},S_NULL,0,0}, + {SPR_TROO,12,8,{NULL},S_TROO_RAISE2,0,0}, + {SPR_TROO,11,8,{NULL},S_TROO_RAISE3,0,0}, + {SPR_TROO,10,6,{NULL},S_TROO_RAISE4,0,0}, + {SPR_TROO,9,6,{NULL},S_TROO_RAISE5,0,0}, + {SPR_TROO,8,6,{NULL},S_TROO_RUN1,0,0}, + {SPR_SARG,0,10,{A_Look},S_SARG_STND2,0,0}, + {SPR_SARG,1,10,{A_Look},S_SARG_STND,0,0}, + {SPR_SARG,0,2,{A_Chase},S_SARG_RUN2,0,0}, + {SPR_SARG,0,2,{A_Chase},S_SARG_RUN3,0,0}, + {SPR_SARG,1,2,{A_Chase},S_SARG_RUN4,0,0}, + {SPR_SARG,1,2,{A_Chase},S_SARG_RUN5,0,0}, + {SPR_SARG,2,2,{A_Chase},S_SARG_RUN6,0,0}, + {SPR_SARG,2,2,{A_Chase},S_SARG_RUN7,0,0}, + {SPR_SARG,3,2,{A_Chase},S_SARG_RUN8,0,0}, + {SPR_SARG,3,2,{A_Chase},S_SARG_RUN1,0,0}, + {SPR_SARG,4,8,{A_FaceTarget},S_SARG_ATK2,0,0}, + {SPR_SARG,5,8,{A_FaceTarget},S_SARG_ATK3,0,0}, + {SPR_SARG,6,8,{A_SargAttack},S_SARG_RUN1,0,0}, + {SPR_SARG,7,2,{NULL},S_SARG_PAIN2,0,0}, + {SPR_SARG,7,2,{A_Pain},S_SARG_RUN1,0,0}, + {SPR_SARG,8,8,{NULL},S_SARG_DIE2,0,0}, + {SPR_SARG,9,8,{A_Scream},S_SARG_DIE3,0,0}, + {SPR_SARG,10,4,{NULL},S_SARG_DIE4,0,0}, + {SPR_SARG,11,4,{A_Fall},S_SARG_DIE5,0,0}, + {SPR_SARG,12,4,{NULL},S_SARG_DIE6,0,0}, + {SPR_SARG,13,-1,{NULL},S_NULL,0,0}, + {SPR_SARG,13,5,{NULL},S_SARG_RAISE2,0,0}, + {SPR_SARG,12,5,{NULL},S_SARG_RAISE3,0,0}, + {SPR_SARG,11,5,{NULL},S_SARG_RAISE4,0,0}, + {SPR_SARG,10,5,{NULL},S_SARG_RAISE5,0,0}, + {SPR_SARG,9,5,{NULL},S_SARG_RAISE6,0,0}, + {SPR_SARG,8,5,{NULL},S_SARG_RUN1,0,0}, + {SPR_HEAD,0,10,{A_Look},S_HEAD_STND,0,0}, + {SPR_HEAD,0,3,{A_Chase},S_HEAD_RUN1,0,0}, + {SPR_HEAD,1,5,{A_FaceTarget},S_HEAD_ATK2,0,0}, + {SPR_HEAD,2,5,{A_FaceTarget},S_HEAD_ATK3,0,0}, + {SPR_HEAD,32771,5,{A_HeadAttack},S_HEAD_RUN1,0,0}, + {SPR_HEAD,4,3,{NULL},S_HEAD_PAIN2,0,0}, + {SPR_HEAD,4,3,{A_Pain},S_HEAD_PAIN3,0,0}, + {SPR_HEAD,5,6,{NULL},S_HEAD_RUN1,0,0}, + {SPR_HEAD,6,8,{NULL},S_HEAD_DIE2,0,0}, + {SPR_HEAD,7,8,{A_Scream},S_HEAD_DIE3,0,0}, + {SPR_HEAD,8,8,{NULL},S_HEAD_DIE4,0,0}, + {SPR_HEAD,9,8,{NULL},S_HEAD_DIE5,0,0}, + {SPR_HEAD,10,8,{A_Fall},S_HEAD_DIE6,0,0}, + {SPR_HEAD,11,-1,{NULL},S_NULL,0,0}, + {SPR_HEAD,11,8,{NULL},S_HEAD_RAISE2,0,0}, + {SPR_HEAD,10,8,{NULL},S_HEAD_RAISE3,0,0}, + {SPR_HEAD,9,8,{NULL},S_HEAD_RAISE4,0,0}, + {SPR_HEAD,8,8,{NULL},S_HEAD_RAISE5,0,0}, + {SPR_HEAD,7,8,{NULL},S_HEAD_RAISE6,0,0}, + {SPR_HEAD,6,8,{NULL},S_HEAD_RUN1,0,0}, + {SPR_BAL7,32768,4,{NULL},S_BRBALL2,0,0}, + {SPR_BAL7,32769,4,{NULL},S_BRBALL1,0,0}, + {SPR_BAL7,32770,6,{NULL},S_BRBALLX2,0,0}, + {SPR_BAL7,32771,6,{NULL},S_BRBALLX3,0,0}, + {SPR_BAL7,32772,6,{NULL},S_NULL,0,0}, + {SPR_BOSS,0,10,{A_Look},S_BOSS_STND2,0,0}, + {SPR_BOSS,1,10,{A_Look},S_BOSS_STND,0,0}, + {SPR_BOSS,0,3,{A_Chase},S_BOSS_RUN2,0,0}, + {SPR_BOSS,0,3,{A_Chase},S_BOSS_RUN3,0,0}, + {SPR_BOSS,1,3,{A_Chase},S_BOSS_RUN4,0,0}, + {SPR_BOSS,1,3,{A_Chase},S_BOSS_RUN5,0,0}, + {SPR_BOSS,2,3,{A_Chase},S_BOSS_RUN6,0,0}, + {SPR_BOSS,2,3,{A_Chase},S_BOSS_RUN7,0,0}, + {SPR_BOSS,3,3,{A_Chase},S_BOSS_RUN8,0,0}, + {SPR_BOSS,3,3,{A_Chase},S_BOSS_RUN1,0,0}, + {SPR_BOSS,4,8,{A_FaceTarget},S_BOSS_ATK2,0,0}, + {SPR_BOSS,5,8,{A_FaceTarget},S_BOSS_ATK3,0,0}, + {SPR_BOSS,6,8,{A_BruisAttack},S_BOSS_RUN1,0,0}, + {SPR_BOSS,7,2,{NULL},S_BOSS_PAIN2,0,0}, + {SPR_BOSS,7,2,{A_Pain},S_BOSS_RUN1,0,0}, + {SPR_BOSS,8,8,{NULL},S_BOSS_DIE2,0,0}, + {SPR_BOSS,9,8,{A_Scream},S_BOSS_DIE3,0,0}, + {SPR_BOSS,10,8,{NULL},S_BOSS_DIE4,0,0}, + {SPR_BOSS,11,8,{A_Fall},S_BOSS_DIE5,0,0}, + {SPR_BOSS,12,8,{NULL},S_BOSS_DIE6,0,0}, + {SPR_BOSS,13,8,{NULL},S_BOSS_DIE7,0,0}, + {SPR_BOSS,14,-1,{A_BossDeath},S_NULL,0,0}, + {SPR_BOSS,14,8,{NULL},S_BOSS_RAISE2,0,0}, + {SPR_BOSS,13,8,{NULL},S_BOSS_RAISE3,0,0}, + {SPR_BOSS,12,8,{NULL},S_BOSS_RAISE4,0,0}, + {SPR_BOSS,11,8,{NULL},S_BOSS_RAISE5,0,0}, + {SPR_BOSS,10,8,{NULL},S_BOSS_RAISE6,0,0}, + {SPR_BOSS,9,8,{NULL},S_BOSS_RAISE7,0,0}, + {SPR_BOSS,8,8,{NULL},S_BOSS_RUN1,0,0}, + {SPR_BOS2,0,10,{A_Look},S_BOS2_STND2,0,0}, + {SPR_BOS2,1,10,{A_Look},S_BOS2_STND,0,0}, + {SPR_BOS2,0,3,{A_Chase},S_BOS2_RUN2,0,0}, + {SPR_BOS2,0,3,{A_Chase},S_BOS2_RUN3,0,0}, + {SPR_BOS2,1,3,{A_Chase},S_BOS2_RUN4,0,0}, + {SPR_BOS2,1,3,{A_Chase},S_BOS2_RUN5,0,0}, + {SPR_BOS2,2,3,{A_Chase},S_BOS2_RUN6,0,0}, + {SPR_BOS2,2,3,{A_Chase},S_BOS2_RUN7,0,0}, + {SPR_BOS2,3,3,{A_Chase},S_BOS2_RUN8,0,0}, + {SPR_BOS2,3,3,{A_Chase},S_BOS2_RUN1,0,0}, + {SPR_BOS2,4,8,{A_FaceTarget},S_BOS2_ATK2,0,0}, + {SPR_BOS2,5,8,{A_FaceTarget},S_BOS2_ATK3,0,0}, + {SPR_BOS2,6,8,{A_BruisAttack},S_BOS2_RUN1,0,0}, + {SPR_BOS2,7,2,{NULL},S_BOS2_PAIN2,0,0}, + {SPR_BOS2,7,2,{A_Pain},S_BOS2_RUN1,0,0}, + {SPR_BOS2,8,8,{NULL},S_BOS2_DIE2,0,0}, + {SPR_BOS2,9,8,{A_Scream},S_BOS2_DIE3,0,0}, + {SPR_BOS2,10,8,{NULL},S_BOS2_DIE4,0,0}, + {SPR_BOS2,11,8,{A_Fall},S_BOS2_DIE5,0,0}, + {SPR_BOS2,12,8,{NULL},S_BOS2_DIE6,0,0}, + {SPR_BOS2,13,8,{NULL},S_BOS2_DIE7,0,0}, + {SPR_BOS2,14,-1,{NULL},S_NULL,0,0}, + {SPR_BOS2,14,8,{NULL},S_BOS2_RAISE2,0,0}, + {SPR_BOS2,13,8,{NULL},S_BOS2_RAISE3,0,0}, + {SPR_BOS2,12,8,{NULL},S_BOS2_RAISE4,0,0}, + {SPR_BOS2,11,8,{NULL},S_BOS2_RAISE5,0,0}, + {SPR_BOS2,10,8,{NULL},S_BOS2_RAISE6,0,0}, + {SPR_BOS2,9,8,{NULL},S_BOS2_RAISE7,0,0}, + {SPR_BOS2,8,8,{NULL},S_BOS2_RUN1,0,0}, + {SPR_SKUL,32768,10,{A_Look},S_SKULL_STND2,0,0}, + {SPR_SKUL,32769,10,{A_Look},S_SKULL_STND,0,0}, + {SPR_SKUL,32768,6,{A_Chase},S_SKULL_RUN2,0,0}, + {SPR_SKUL,32769,6,{A_Chase},S_SKULL_RUN1,0,0}, + {SPR_SKUL,32770,10,{A_FaceTarget},S_SKULL_ATK2,0,0}, + {SPR_SKUL,32771,4,{A_SkullAttack},S_SKULL_ATK3,0,0}, + {SPR_SKUL,32770,4,{NULL},S_SKULL_ATK4,0,0}, + {SPR_SKUL,32771,4,{NULL},S_SKULL_ATK3,0,0}, + {SPR_SKUL,32772,3,{NULL},S_SKULL_PAIN2,0,0}, + {SPR_SKUL,32772,3,{A_Pain},S_SKULL_RUN1,0,0}, + {SPR_SKUL,32773,6,{NULL},S_SKULL_DIE2,0,0}, + {SPR_SKUL,32774,6,{A_Scream},S_SKULL_DIE3,0,0}, + {SPR_SKUL,32775,6,{NULL},S_SKULL_DIE4,0,0}, + {SPR_SKUL,32776,6,{A_Fall},S_SKULL_DIE5,0,0}, + {SPR_SKUL,9,6,{NULL},S_SKULL_DIE6,0,0}, + {SPR_SKUL,10,6,{NULL},S_NULL,0,0}, + {SPR_SPID,0,10,{A_Look},S_SPID_STND2,0,0}, + {SPR_SPID,1,10,{A_Look},S_SPID_STND,0,0}, + {SPR_SPID,0,3,{A_Metal},S_SPID_RUN2,0,0}, + {SPR_SPID,0,3,{A_Chase},S_SPID_RUN3,0,0}, + {SPR_SPID,1,3,{A_Chase},S_SPID_RUN4,0,0}, + {SPR_SPID,1,3,{A_Chase},S_SPID_RUN5,0,0}, + {SPR_SPID,2,3,{A_Metal},S_SPID_RUN6,0,0}, + {SPR_SPID,2,3,{A_Chase},S_SPID_RUN7,0,0}, + {SPR_SPID,3,3,{A_Chase},S_SPID_RUN8,0,0}, + {SPR_SPID,3,3,{A_Chase},S_SPID_RUN9,0,0}, + {SPR_SPID,4,3,{A_Metal},S_SPID_RUN10,0,0}, + {SPR_SPID,4,3,{A_Chase},S_SPID_RUN11,0,0}, + {SPR_SPID,5,3,{A_Chase},S_SPID_RUN12,0,0}, + {SPR_SPID,5,3,{A_Chase},S_SPID_RUN1,0,0}, + {SPR_SPID,32768,20,{A_FaceTarget},S_SPID_ATK2,0,0}, + {SPR_SPID,32774,4,{A_SPosAttack},S_SPID_ATK3,0,0}, + {SPR_SPID,32775,4,{A_SPosAttack},S_SPID_ATK4,0,0}, + {SPR_SPID,32775,1,{A_SpidRefire},S_SPID_ATK2,0,0}, + {SPR_SPID,8,3,{NULL},S_SPID_PAIN2,0,0}, + {SPR_SPID,8,3,{A_Pain},S_SPID_RUN1,0,0}, + {SPR_SPID,9,20,{A_Scream},S_SPID_DIE2,0,0}, + {SPR_SPID,10,10,{A_Fall},S_SPID_DIE3,0,0}, + {SPR_SPID,11,10,{NULL},S_SPID_DIE4,0,0}, + {SPR_SPID,12,10,{NULL},S_SPID_DIE5,0,0}, + {SPR_SPID,13,10,{NULL},S_SPID_DIE6,0,0}, + {SPR_SPID,14,10,{NULL},S_SPID_DIE7,0,0}, + {SPR_SPID,15,10,{NULL},S_SPID_DIE8,0,0}, + {SPR_SPID,16,10,{NULL},S_SPID_DIE9,0,0}, + {SPR_SPID,17,10,{NULL},S_SPID_DIE10,0,0}, + {SPR_SPID,18,30,{NULL},S_SPID_DIE11,0,0}, + {SPR_SPID,18,-1,{A_BossDeath},S_NULL,0,0}, + {SPR_BSPI,0,10,{A_Look},S_BSPI_STND2,0,0}, + {SPR_BSPI,1,10,{A_Look},S_BSPI_STND,0,0}, + {SPR_BSPI,0,20,{NULL},S_BSPI_RUN1,0,0}, + {SPR_BSPI,0,3,{A_BabyMetal},S_BSPI_RUN2,0,0}, + {SPR_BSPI,0,3,{A_Chase},S_BSPI_RUN3,0,0}, + {SPR_BSPI,1,3,{A_Chase},S_BSPI_RUN4,0,0}, + {SPR_BSPI,1,3,{A_Chase},S_BSPI_RUN5,0,0}, + {SPR_BSPI,2,3,{A_Chase},S_BSPI_RUN6,0,0}, + {SPR_BSPI,2,3,{A_Chase},S_BSPI_RUN7,0,0}, + {SPR_BSPI,3,3,{A_BabyMetal},S_BSPI_RUN8,0,0}, + {SPR_BSPI,3,3,{A_Chase},S_BSPI_RUN9,0,0}, + {SPR_BSPI,4,3,{A_Chase},S_BSPI_RUN10,0,0}, + {SPR_BSPI,4,3,{A_Chase},S_BSPI_RUN11,0,0}, + {SPR_BSPI,5,3,{A_Chase},S_BSPI_RUN12,0,0}, + {SPR_BSPI,5,3,{A_Chase},S_BSPI_RUN1,0,0}, + {SPR_BSPI,32768,20,{A_FaceTarget},S_BSPI_ATK2,0,0}, + {SPR_BSPI,32774,4,{A_BspiAttack},S_BSPI_ATK3,0,0}, + {SPR_BSPI,32775,4,{NULL},S_BSPI_ATK4,0,0}, + {SPR_BSPI,32775,1,{A_SpidRefire},S_BSPI_ATK2,0,0}, + {SPR_BSPI,8,3,{NULL},S_BSPI_PAIN2,0,0}, + {SPR_BSPI,8,3,{A_Pain},S_BSPI_RUN1,0,0}, + {SPR_BSPI,9,20,{A_Scream},S_BSPI_DIE2,0,0}, + {SPR_BSPI,10,7,{A_Fall},S_BSPI_DIE3,0,0}, + {SPR_BSPI,11,7,{NULL},S_BSPI_DIE4,0,0}, + {SPR_BSPI,12,7,{NULL},S_BSPI_DIE5,0,0}, + {SPR_BSPI,13,7,{NULL},S_BSPI_DIE6,0,0}, + {SPR_BSPI,14,7,{NULL},S_BSPI_DIE7,0,0}, + {SPR_BSPI,15,-1,{A_BossDeath},S_NULL,0,0}, + {SPR_BSPI,15,5,{NULL},S_BSPI_RAISE2,0,0}, + {SPR_BSPI,14,5,{NULL},S_BSPI_RAISE3,0,0}, + {SPR_BSPI,13,5,{NULL},S_BSPI_RAISE4,0,0}, + {SPR_BSPI,12,5,{NULL},S_BSPI_RAISE5,0,0}, + {SPR_BSPI,11,5,{NULL},S_BSPI_RAISE6,0,0}, + {SPR_BSPI,10,5,{NULL},S_BSPI_RAISE7,0,0}, + {SPR_BSPI,9,5,{NULL},S_BSPI_RUN1,0,0}, + {SPR_APLS,32768,5,{NULL},S_ARACH_PLAZ2,0,0}, + {SPR_APLS,32769,5,{NULL},S_ARACH_PLAZ,0,0}, + {SPR_APBX,32768,5,{NULL},S_ARACH_PLEX2,0,0}, + {SPR_APBX,32769,5,{NULL},S_ARACH_PLEX3,0,0}, + {SPR_APBX,32770,5,{NULL},S_ARACH_PLEX4,0,0}, + {SPR_APBX,32771,5,{NULL},S_ARACH_PLEX5,0,0}, + {SPR_APBX,32772,5,{NULL},S_NULL,0,0}, + {SPR_CYBR,0,10,{A_Look},S_CYBER_STND2,0,0}, + {SPR_CYBR,1,10,{A_Look},S_CYBER_STND,0,0}, + {SPR_CYBR,0,3,{A_Hoof},S_CYBER_RUN2,0,0}, + {SPR_CYBR,0,3,{A_Chase},S_CYBER_RUN3,0,0}, + {SPR_CYBR,1,3,{A_Chase},S_CYBER_RUN4,0,0}, + {SPR_CYBR,1,3,{A_Chase},S_CYBER_RUN5,0,0}, + {SPR_CYBR,2,3,{A_Chase},S_CYBER_RUN6,0,0}, + {SPR_CYBR,2,3,{A_Chase},S_CYBER_RUN7,0,0}, + {SPR_CYBR,3,3,{A_Metal},S_CYBER_RUN8,0,0}, + {SPR_CYBR,3,3,{A_Chase},S_CYBER_RUN1,0,0}, + {SPR_CYBR,4,6,{A_FaceTarget},S_CYBER_ATK2,0,0}, + {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_ATK3,0,0}, + {SPR_CYBR,4,12,{A_FaceTarget},S_CYBER_ATK4,0,0}, + {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_ATK5,0,0}, + {SPR_CYBR,4,12,{A_FaceTarget},S_CYBER_ATK6,0,0}, + {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_RUN1,0,0}, + {SPR_CYBR,6,10,{A_Pain},S_CYBER_RUN1,0,0}, + {SPR_CYBR,7,10,{NULL},S_CYBER_DIE2,0,0}, + {SPR_CYBR,8,10,{A_Scream},S_CYBER_DIE3,0,0}, + {SPR_CYBR,9,10,{NULL},S_CYBER_DIE4,0,0}, + {SPR_CYBR,10,10,{NULL},S_CYBER_DIE5,0,0}, + {SPR_CYBR,11,10,{NULL},S_CYBER_DIE6,0,0}, + {SPR_CYBR,12,10,{A_Fall},S_CYBER_DIE7,0,0}, + {SPR_CYBR,13,10,{NULL},S_CYBER_DIE8,0,0}, + {SPR_CYBR,14,10,{NULL},S_CYBER_DIE9,0,0}, + {SPR_CYBR,15,30,{NULL},S_CYBER_DIE10,0,0}, + {SPR_CYBR,15,-1,{A_BossDeath},S_NULL,0,0}, + {SPR_PAIN,0,10,{A_Look},S_PAIN_STND,0,0}, + {SPR_PAIN,0,3,{A_Chase},S_PAIN_RUN2,0,0}, + {SPR_PAIN,0,3,{A_Chase},S_PAIN_RUN3,0,0}, + {SPR_PAIN,1,3,{A_Chase},S_PAIN_RUN4,0,0}, + {SPR_PAIN,1,3,{A_Chase},S_PAIN_RUN5,0,0}, + {SPR_PAIN,2,3,{A_Chase},S_PAIN_RUN6,0,0}, + {SPR_PAIN,2,3,{A_Chase},S_PAIN_RUN1,0,0}, + {SPR_PAIN,3,5,{A_FaceTarget},S_PAIN_ATK2,0,0}, + {SPR_PAIN,4,5,{A_FaceTarget},S_PAIN_ATK3,0,0}, + {SPR_PAIN,32773,5,{A_FaceTarget},S_PAIN_ATK4,0,0}, + {SPR_PAIN,32773,0,{A_PainAttack},S_PAIN_RUN1,0,0}, + {SPR_PAIN,6,6,{NULL},S_PAIN_PAIN2,0,0}, + {SPR_PAIN,6,6,{A_Pain},S_PAIN_RUN1,0,0}, + {SPR_PAIN,32775,8,{NULL},S_PAIN_DIE2,0,0}, + {SPR_PAIN,32776,8,{A_Scream},S_PAIN_DIE3,0,0}, + {SPR_PAIN,32777,8,{NULL},S_PAIN_DIE4,0,0}, + {SPR_PAIN,32778,8,{NULL},S_PAIN_DIE5,0,0}, + {SPR_PAIN,32779,8,{A_PainDie},S_PAIN_DIE6,0,0}, + {SPR_PAIN,32780,8,{NULL},S_NULL,0,0}, + {SPR_PAIN,12,8,{NULL},S_PAIN_RAISE2,0,0}, + {SPR_PAIN,11,8,{NULL},S_PAIN_RAISE3,0,0}, + {SPR_PAIN,10,8,{NULL},S_PAIN_RAISE4,0,0}, + {SPR_PAIN,9,8,{NULL},S_PAIN_RAISE5,0,0}, + {SPR_PAIN,8,8,{NULL},S_PAIN_RAISE6,0,0}, + {SPR_PAIN,7,8,{NULL},S_PAIN_RUN1,0,0}, + {SPR_SSWV,0,10,{A_Look},S_SSWV_STND2,0,0}, + {SPR_SSWV,1,10,{A_Look},S_SSWV_STND,0,0}, + {SPR_SSWV,0,3,{A_Chase},S_SSWV_RUN2,0,0}, + {SPR_SSWV,0,3,{A_Chase},S_SSWV_RUN3,0,0}, + {SPR_SSWV,1,3,{A_Chase},S_SSWV_RUN4,0,0}, + {SPR_SSWV,1,3,{A_Chase},S_SSWV_RUN5,0,0}, + {SPR_SSWV,2,3,{A_Chase},S_SSWV_RUN6,0,0}, + {SPR_SSWV,2,3,{A_Chase},S_SSWV_RUN7,0,0}, + {SPR_SSWV,3,3,{A_Chase},S_SSWV_RUN8,0,0}, + {SPR_SSWV,3,3,{A_Chase},S_SSWV_RUN1,0,0}, + {SPR_SSWV,4,10,{A_FaceTarget},S_SSWV_ATK2,0,0}, + {SPR_SSWV,5,10,{A_FaceTarget},S_SSWV_ATK3,0,0}, + {SPR_SSWV,32774,4,{A_CPosAttack},S_SSWV_ATK4,0,0}, + {SPR_SSWV,5,6,{A_FaceTarget},S_SSWV_ATK5,0,0}, + {SPR_SSWV,32774,4,{A_CPosAttack},S_SSWV_ATK6,0,0}, + {SPR_SSWV,5,1,{A_CPosRefire},S_SSWV_ATK2,0,0}, + {SPR_SSWV,7,3,{NULL},S_SSWV_PAIN2,0,0}, + {SPR_SSWV,7,3,{A_Pain},S_SSWV_RUN1,0,0}, + {SPR_SSWV,8,5,{NULL},S_SSWV_DIE2,0,0}, + {SPR_SSWV,9,5,{A_Scream},S_SSWV_DIE3,0,0}, + {SPR_SSWV,10,5,{A_Fall},S_SSWV_DIE4,0,0}, + {SPR_SSWV,11,5,{NULL},S_SSWV_DIE5,0,0}, + {SPR_SSWV,12,-1,{NULL},S_NULL,0,0}, + {SPR_SSWV,13,5,{NULL},S_SSWV_XDIE2,0,0}, + {SPR_SSWV,14,5,{A_XScream},S_SSWV_XDIE3,0,0}, + {SPR_SSWV,15,5,{A_Fall},S_SSWV_XDIE4,0,0}, + {SPR_SSWV,16,5,{NULL},S_SSWV_XDIE5,0,0}, + {SPR_SSWV,17,5,{NULL},S_SSWV_XDIE6,0,0}, + {SPR_SSWV,18,5,{NULL},S_SSWV_XDIE7,0,0}, + {SPR_SSWV,19,5,{NULL},S_SSWV_XDIE8,0,0}, + {SPR_SSWV,20,5,{NULL},S_SSWV_XDIE9,0,0}, + {SPR_SSWV,21,-1,{NULL},S_NULL,0,0}, + {SPR_SSWV,12,5,{NULL},S_SSWV_RAISE2,0,0}, + {SPR_SSWV,11,5,{NULL},S_SSWV_RAISE3,0,0}, + {SPR_SSWV,10,5,{NULL},S_SSWV_RAISE4,0,0}, + {SPR_SSWV,9,5,{NULL},S_SSWV_RAISE5,0,0}, + {SPR_SSWV,8,5,{NULL},S_SSWV_RUN1,0,0}, + {SPR_KEEN,0,-1,{NULL},S_KEENSTND,0,0}, + {SPR_KEEN,0,6,{NULL},S_COMMKEEN2,0,0}, + {SPR_KEEN,1,6,{NULL},S_COMMKEEN3,0,0}, + {SPR_KEEN,2,6,{A_Scream},S_COMMKEEN4,0,0}, + {SPR_KEEN,3,6,{NULL},S_COMMKEEN5,0,0}, + {SPR_KEEN,4,6,{NULL},S_COMMKEEN6,0,0}, + {SPR_KEEN,5,6,{NULL},S_COMMKEEN7,0,0}, + {SPR_KEEN,6,6,{NULL},S_COMMKEEN8,0,0}, + {SPR_KEEN,7,6,{NULL},S_COMMKEEN9,0,0}, + {SPR_KEEN,8,6,{NULL},S_COMMKEEN10,0,0}, + {SPR_KEEN,9,6,{NULL},S_COMMKEEN11,0,0}, + {SPR_KEEN,10,6,{A_KeenDie},S_COMMKEEN12,0,0}, + {SPR_KEEN,11,-1,{NULL},S_NULL,0,0}, + {SPR_KEEN,12,4,{NULL},S_KEENPAIN2,0,0}, + {SPR_KEEN,12,8,{A_Pain},S_KEENSTND,0,0}, + {SPR_BBRN,0,-1,{NULL},S_NULL,0,0}, + {SPR_BBRN,1,36,{A_BrainPain},S_BRAIN,0,0}, + {SPR_BBRN,0,100,{A_BrainScream},S_BRAIN_DIE2,0,0}, + {SPR_BBRN,0,10,{NULL},S_BRAIN_DIE3,0,0}, + {SPR_BBRN,0,10,{NULL},S_BRAIN_DIE4,0,0}, + {SPR_BBRN,0,-1,{A_BrainDie},S_NULL,0,0}, + {SPR_SSWV,0,10,{A_Look},S_BRAINEYE,0,0}, + {SPR_SSWV,0,181,{A_BrainAwake},S_BRAINEYE1,0,0}, + {SPR_SSWV,0,150,{A_BrainSpit},S_BRAINEYE1,0,0}, + {SPR_BOSF,32768,3,{A_SpawnSound},S_SPAWN2,0,0}, + {SPR_BOSF,32769,3,{A_SpawnFly},S_SPAWN3,0,0}, + {SPR_BOSF,32770,3,{A_SpawnFly},S_SPAWN4,0,0}, + {SPR_BOSF,32771,3,{A_SpawnFly},S_SPAWN1,0,0}, + {SPR_FIRE,32768,4,{A_Fire},S_SPAWNFIRE2,0,0}, + {SPR_FIRE,32769,4,{A_Fire},S_SPAWNFIRE3,0,0}, + {SPR_FIRE,32770,4,{A_Fire},S_SPAWNFIRE4,0,0}, + {SPR_FIRE,32771,4,{A_Fire},S_SPAWNFIRE5,0,0}, + {SPR_FIRE,32772,4,{A_Fire},S_SPAWNFIRE6,0,0}, + {SPR_FIRE,32773,4,{A_Fire},S_SPAWNFIRE7,0,0}, + {SPR_FIRE,32774,4,{A_Fire},S_SPAWNFIRE8,0,0}, + {SPR_FIRE,32775,4,{A_Fire},S_NULL,0,0}, + {SPR_MISL,32769,10,{NULL},S_BRAINEXPLODE2,0,0}, + {SPR_MISL,32770,10,{NULL},S_BRAINEXPLODE3,0,0}, + {SPR_MISL,32771,10,{A_BrainExplode},S_NULL,0,0}, + {SPR_ARM1,0,6,{NULL},S_ARM1A,0,0}, + {SPR_ARM1,32769,7,{NULL},S_ARM1,0,0}, + {SPR_ARM2,0,6,{NULL},S_ARM2A,0,0}, + {SPR_ARM2,32769,6,{NULL},S_ARM2,0,0}, + {SPR_BAR1,0,6,{NULL},S_BAR2,0,0}, + {SPR_BAR1,1,6,{NULL},S_BAR1,0,0}, + {SPR_BEXP,32768,5,{NULL},S_BEXP2,0,0}, + {SPR_BEXP,32769,5,{A_Scream},S_BEXP3,0,0}, + {SPR_BEXP,32770,5,{NULL},S_BEXP4,0,0}, + {SPR_BEXP,32771,10,{A_Explode},S_BEXP5,0,0}, + {SPR_BEXP,32772,10,{NULL},S_NULL,0,0}, + {SPR_FCAN,32768,4,{NULL},S_BBAR2,0,0}, + {SPR_FCAN,32769,4,{NULL},S_BBAR3,0,0}, + {SPR_FCAN,32770,4,{NULL},S_BBAR1,0,0}, + {SPR_BON1,0,6,{NULL},S_BON1A,0,0}, + {SPR_BON1,1,6,{NULL},S_BON1B,0,0}, + {SPR_BON1,2,6,{NULL},S_BON1C,0,0}, + {SPR_BON1,3,6,{NULL},S_BON1D,0,0}, + {SPR_BON1,2,6,{NULL},S_BON1E,0,0}, + {SPR_BON1,1,6,{NULL},S_BON1,0,0}, + {SPR_BON2,0,6,{NULL},S_BON2A,0,0}, + {SPR_BON2,1,6,{NULL},S_BON2B,0,0}, + {SPR_BON2,2,6,{NULL},S_BON2C,0,0}, + {SPR_BON2,3,6,{NULL},S_BON2D,0,0}, + {SPR_BON2,2,6,{NULL},S_BON2E,0,0}, + {SPR_BON2,1,6,{NULL},S_BON2,0,0}, + {SPR_BKEY,0,10,{NULL},S_BKEY2,0,0}, + {SPR_BKEY,32769,10,{NULL},S_BKEY,0,0}, + {SPR_RKEY,0,10,{NULL},S_RKEY2,0,0}, + {SPR_RKEY,32769,10,{NULL},S_RKEY,0,0}, + {SPR_YKEY,0,10,{NULL},S_YKEY2,0,0}, + {SPR_YKEY,32769,10,{NULL},S_YKEY,0,0}, + {SPR_BSKU,0,10,{NULL},S_BSKULL2,0,0}, + {SPR_BSKU,32769,10,{NULL},S_BSKULL,0,0}, + {SPR_RSKU,0,10,{NULL},S_RSKULL2,0,0}, + {SPR_RSKU,32769,10,{NULL},S_RSKULL,0,0}, + {SPR_YSKU,0,10,{NULL},S_YSKULL2,0,0}, + {SPR_YSKU,32769,10,{NULL},S_YSKULL,0,0}, + {SPR_STIM,0,-1,{NULL},S_NULL,0,0}, + {SPR_MEDI,0,-1,{NULL},S_NULL,0,0}, + {SPR_SOUL,32768,6,{NULL},S_SOUL2,0,0}, + {SPR_SOUL,32769,6,{NULL},S_SOUL3,0,0}, + {SPR_SOUL,32770,6,{NULL},S_SOUL4,0,0}, + {SPR_SOUL,32771,6,{NULL},S_SOUL5,0,0}, + {SPR_SOUL,32770,6,{NULL},S_SOUL6,0,0}, + {SPR_SOUL,32769,6,{NULL},S_SOUL,0,0}, + {SPR_PINV,32768,6,{NULL},S_PINV2,0,0}, + {SPR_PINV,32769,6,{NULL},S_PINV3,0,0}, + {SPR_PINV,32770,6,{NULL},S_PINV4,0,0}, + {SPR_PINV,32771,6,{NULL},S_PINV,0,0}, + {SPR_PSTR,32768,-1,{NULL},S_NULL,0,0}, + {SPR_PINS,32768,6,{NULL},S_PINS2,0,0}, + {SPR_PINS,32769,6,{NULL},S_PINS3,0,0}, + {SPR_PINS,32770,6,{NULL},S_PINS4,0,0}, + {SPR_PINS,32771,6,{NULL},S_PINS,0,0}, + {SPR_MEGA,32768,6,{NULL},S_MEGA2,0,0}, + {SPR_MEGA,32769,6,{NULL},S_MEGA3,0,0}, + {SPR_MEGA,32770,6,{NULL},S_MEGA4,0,0}, + {SPR_MEGA,32771,6,{NULL},S_MEGA,0,0}, + {SPR_SUIT,32768,-1,{NULL},S_NULL,0,0}, + {SPR_PMAP,32768,6,{NULL},S_PMAP2,0,0}, + {SPR_PMAP,32769,6,{NULL},S_PMAP3,0,0}, + {SPR_PMAP,32770,6,{NULL},S_PMAP4,0,0}, + {SPR_PMAP,32771,6,{NULL},S_PMAP5,0,0}, + {SPR_PMAP,32770,6,{NULL},S_PMAP6,0,0}, + {SPR_PMAP,32769,6,{NULL},S_PMAP,0,0}, + {SPR_PVIS,32768,6,{NULL},S_PVIS2,0,0}, + {SPR_PVIS,1,6,{NULL},S_PVIS,0,0}, + {SPR_CLIP,0,-1,{NULL},S_NULL,0,0}, + {SPR_AMMO,0,-1,{NULL},S_NULL,0,0}, + {SPR_ROCK,0,-1,{NULL},S_NULL,0,0}, + {SPR_BROK,0,-1,{NULL},S_NULL,0,0}, + {SPR_CELL,0,-1,{NULL},S_NULL,0,0}, + {SPR_CELP,0,-1,{NULL},S_NULL,0,0}, + {SPR_SHEL,0,-1,{NULL},S_NULL,0,0}, + {SPR_SBOX,0,-1,{NULL},S_NULL,0,0}, + {SPR_BPAK,0,-1,{NULL},S_NULL,0,0}, + {SPR_BFUG,0,-1,{NULL},S_NULL,0,0}, + {SPR_MGUN,0,-1,{NULL},S_NULL,0,0}, + {SPR_CSAW,0,-1,{NULL},S_NULL,0,0}, + {SPR_LAUN,0,-1,{NULL},S_NULL,0,0}, + {SPR_PLAS,0,-1,{NULL},S_NULL,0,0}, + {SPR_SHOT,0,-1,{NULL},S_NULL,0,0}, + {SPR_SGN2,0,-1,{NULL},S_NULL,0,0}, + {SPR_COLU,32768,-1,{NULL},S_NULL,0,0}, + {SPR_SMT2,0,-1,{NULL},S_NULL,0,0}, + {SPR_GOR1,0,10,{NULL},S_BLOODYTWITCH2,0,0}, + {SPR_GOR1,1,15,{NULL},S_BLOODYTWITCH3,0,0}, + {SPR_GOR1,2,8,{NULL},S_BLOODYTWITCH4,0,0}, + {SPR_GOR1,1,6,{NULL},S_BLOODYTWITCH,0,0}, + {SPR_PLAY,13,-1,{NULL},S_NULL,0,0}, + {SPR_PLAY,18,-1,{NULL},S_NULL,0,0}, + {SPR_POL2,0,-1,{NULL},S_NULL,0,0}, + {SPR_POL5,0,-1,{NULL},S_NULL,0,0}, + {SPR_POL4,0,-1,{NULL},S_NULL,0,0}, + {SPR_POL3,32768,6,{NULL},S_HEADCANDLES2,0,0}, + {SPR_POL3,32769,6,{NULL},S_HEADCANDLES,0,0}, + {SPR_POL1,0,-1,{NULL},S_NULL,0,0}, + {SPR_POL6,0,6,{NULL},S_LIVESTICK2,0,0}, + {SPR_POL6,1,8,{NULL},S_LIVESTICK,0,0}, + {SPR_GOR2,0,-1,{NULL},S_NULL,0,0}, + {SPR_GOR3,0,-1,{NULL},S_NULL,0,0}, + {SPR_GOR4,0,-1,{NULL},S_NULL,0,0}, + {SPR_GOR5,0,-1,{NULL},S_NULL,0,0}, + {SPR_SMIT,0,-1,{NULL},S_NULL,0,0}, + {SPR_COL1,0,-1,{NULL},S_NULL,0,0}, + {SPR_COL2,0,-1,{NULL},S_NULL,0,0}, + {SPR_COL3,0,-1,{NULL},S_NULL,0,0}, + {SPR_COL4,0,-1,{NULL},S_NULL,0,0}, + {SPR_CAND,32768,-1,{NULL},S_NULL,0,0}, + {SPR_CBRA,32768,-1,{NULL},S_NULL,0,0}, + {SPR_COL6,0,-1,{NULL},S_NULL,0,0}, + {SPR_TRE1,0,-1,{NULL},S_NULL,0,0}, + {SPR_TRE2,0,-1,{NULL},S_NULL,0,0}, + {SPR_ELEC,0,-1,{NULL},S_NULL,0,0}, + {SPR_CEYE,32768,6,{NULL},S_EVILEYE2,0,0}, + {SPR_CEYE,32769,6,{NULL},S_EVILEYE3,0,0}, + {SPR_CEYE,32770,6,{NULL},S_EVILEYE4,0,0}, + {SPR_CEYE,32769,6,{NULL},S_EVILEYE,0,0}, + {SPR_FSKU,32768,6,{NULL},S_FLOATSKULL2,0,0}, + {SPR_FSKU,32769,6,{NULL},S_FLOATSKULL3,0,0}, + {SPR_FSKU,32770,6,{NULL},S_FLOATSKULL,0,0}, + {SPR_COL5,0,14,{NULL},S_HEARTCOL2,0,0}, + {SPR_COL5,1,14,{NULL},S_HEARTCOL,0,0}, + {SPR_TBLU,32768,4,{NULL},S_BLUETORCH2,0,0}, + {SPR_TBLU,32769,4,{NULL},S_BLUETORCH3,0,0}, + {SPR_TBLU,32770,4,{NULL},S_BLUETORCH4,0,0}, + {SPR_TBLU,32771,4,{NULL},S_BLUETORCH,0,0}, + {SPR_TGRN,32768,4,{NULL},S_GREENTORCH2,0,0}, + {SPR_TGRN,32769,4,{NULL},S_GREENTORCH3,0,0}, + {SPR_TGRN,32770,4,{NULL},S_GREENTORCH4,0,0}, + {SPR_TGRN,32771,4,{NULL},S_GREENTORCH,0,0}, + {SPR_TRED,32768,4,{NULL},S_REDTORCH2,0,0}, + {SPR_TRED,32769,4,{NULL},S_REDTORCH3,0,0}, + {SPR_TRED,32770,4,{NULL},S_REDTORCH4,0,0}, + {SPR_TRED,32771,4,{NULL},S_REDTORCH,0,0}, + {SPR_SMBT,32768,4,{NULL},S_BTORCHSHRT2,0,0}, + {SPR_SMBT,32769,4,{NULL},S_BTORCHSHRT3,0,0}, + {SPR_SMBT,32770,4,{NULL},S_BTORCHSHRT4,0,0}, + {SPR_SMBT,32771,4,{NULL},S_BTORCHSHRT,0,0}, + {SPR_SMGT,32768,4,{NULL},S_GTORCHSHRT2,0,0}, + {SPR_SMGT,32769,4,{NULL},S_GTORCHSHRT3,0,0}, + {SPR_SMGT,32770,4,{NULL},S_GTORCHSHRT4,0,0}, + {SPR_SMGT,32771,4,{NULL},S_GTORCHSHRT,0,0}, + {SPR_SMRT,32768,4,{NULL},S_RTORCHSHRT2,0,0}, + {SPR_SMRT,32769,4,{NULL},S_RTORCHSHRT3,0,0}, + {SPR_SMRT,32770,4,{NULL},S_RTORCHSHRT4,0,0}, + {SPR_SMRT,32771,4,{NULL},S_RTORCHSHRT,0,0}, + {SPR_HDB1,0,-1,{NULL},S_NULL,0,0}, + {SPR_HDB2,0,-1,{NULL},S_NULL,0,0}, + {SPR_HDB3,0,-1,{NULL},S_NULL,0,0}, + {SPR_HDB4,0,-1,{NULL},S_NULL,0,0}, + {SPR_HDB5,0,-1,{NULL},S_NULL,0,0}, + {SPR_HDB6,0,-1,{NULL},S_NULL,0,0}, + {SPR_POB1,0,-1,{NULL},S_NULL,0,0}, + {SPR_POB2,0,-1,{NULL},S_NULL,0,0}, + {SPR_BRS1,0,-1,{NULL},S_NULL,0,0}, + {SPR_TLMP,32768,4,{NULL},S_TECHLAMP2,0,0}, + {SPR_TLMP,32769,4,{NULL},S_TECHLAMP3,0,0}, + {SPR_TLMP,32770,4,{NULL},S_TECHLAMP4,0,0}, + {SPR_TLMP,32771,4,{NULL},S_TECHLAMP,0,0}, + {SPR_TLP2,32768,4,{NULL},S_TECH2LAMP2,0,0}, + {SPR_TLP2,32769,4,{NULL},S_TECH2LAMP3,0,0}, + {SPR_TLP2,32770,4,{NULL},S_TECH2LAMP4,0,0}, + {SPR_TLP2,32771,4,{NULL},S_TECH2LAMP,0,0} }; mobjinfo_t mobjinfo[NUMMOBJTYPES] = { - { // MT_PLAYER - -1, // doomednum - S_PLAY, // spawnstate - 100, // spawnhealth - S_PLAY_RUN1, // seestate - sfx_None, // seesound - 0, // reactiontime - sfx_None, // attacksound - S_PLAY_PAIN, // painstate - 255, // painchance - sfx_plpain, // painsound - S_NULL, // meleestate - S_PLAY_ATK1, // missilestate - S_PLAY_DIE1, // deathstate - S_PLAY_XDIE1, // xdeathstate - sfx_pldeth, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_PICKUP|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_POSSESSED - 3004, // doomednum - S_POSS_STND, // spawnstate - 20, // spawnhealth - S_POSS_RUN1, // seestate - sfx_posit1, // seesound - 8, // reactiontime - sfx_pistol, // attacksound - S_POSS_PAIN, // painstate - 200, // painchance - sfx_popain, // painsound - 0, // meleestate - S_POSS_ATK1, // missilestate - S_POSS_DIE1, // deathstate - S_POSS_XDIE1, // xdeathstate - sfx_podth1, // deathsound - 8, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_posact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_POSS_RAISE1 // raisestate - }, - - { // MT_SHOTGUY - 9, // doomednum - S_SPOS_STND, // spawnstate - 30, // spawnhealth - S_SPOS_RUN1, // seestate - sfx_posit2, // seesound - 8, // reactiontime - 0, // attacksound - S_SPOS_PAIN, // painstate - 170, // painchance - sfx_popain, // painsound - 0, // meleestate - S_SPOS_ATK1, // missilestate - S_SPOS_DIE1, // deathstate - S_SPOS_XDIE1, // xdeathstate - sfx_podth2, // deathsound - 8, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_posact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_SPOS_RAISE1 // raisestate - }, - - { // MT_VILE - 64, // doomednum - S_VILE_STND, // spawnstate - 700, // spawnhealth - S_VILE_RUN1, // seestate - sfx_vilsit, // seesound - 8, // reactiontime - 0, // attacksound - S_VILE_PAIN, // painstate - 10, // painchance - sfx_vipain, // painsound - 0, // meleestate - S_VILE_ATK1, // missilestate - S_VILE_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_vildth, // deathsound - 15, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 500, // mass - 0, // damage - sfx_vilact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_NULL // raisestate - }, - - { // MT_FIRE - -1, // doomednum - S_FIRE1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_UNDEAD - 66, // doomednum - S_SKEL_STND, // spawnstate - 300, // spawnhealth - S_SKEL_RUN1, // seestate - sfx_skesit, // seesound - 8, // reactiontime - 0, // attacksound - S_SKEL_PAIN, // painstate - 100, // painchance - sfx_popain, // painsound - S_SKEL_FIST1, // meleestate - S_SKEL_MISS1, // missilestate - S_SKEL_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_skedth, // deathsound - 10, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 500, // mass - 0, // damage - sfx_skeact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_SKEL_RAISE1 // raisestate - }, - - { // MT_TRACER - -1, // doomednum - S_TRACER, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_skeatk, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_TRACEEXP1, // deathstate - S_NULL, // xdeathstate - sfx_barexp, // deathsound - 10*FRACUNIT, // speed - 11*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 10, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_SMOKE - -1, // doomednum - S_SMOKE1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_FATSO - 67, // doomednum - S_FATT_STND, // spawnstate - 600, // spawnhealth - S_FATT_RUN1, // seestate - sfx_mansit, // seesound - 8, // reactiontime - 0, // attacksound - S_FATT_PAIN, // painstate - 80, // painchance - sfx_mnpain, // painsound - 0, // meleestate - S_FATT_ATK1, // missilestate - S_FATT_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_mandth, // deathsound - 8, // speed - 48*FRACUNIT, // radius - 64*FRACUNIT, // height - 1000, // mass - 0, // damage - sfx_posact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_FATT_RAISE1 // raisestate - }, - - { // MT_FATSHOT - -1, // doomednum - S_FATSHOT1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_firsht, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_FATSHOTX1, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 20*FRACUNIT, // speed - 6*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 8, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_CHAINGUY - 65, // doomednum - S_CPOS_STND, // spawnstate - 70, // spawnhealth - S_CPOS_RUN1, // seestate - sfx_posit2, // seesound - 8, // reactiontime - 0, // attacksound - S_CPOS_PAIN, // painstate - 170, // painchance - sfx_popain, // painsound - 0, // meleestate - S_CPOS_ATK1, // missilestate - S_CPOS_DIE1, // deathstate - S_CPOS_XDIE1, // xdeathstate - sfx_podth2, // deathsound - 8, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_posact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_CPOS_RAISE1 // raisestate - }, - - { // MT_TROOP - 3001, // doomednum - S_TROO_STND, // spawnstate - 60, // spawnhealth - S_TROO_RUN1, // seestate - sfx_bgsit1, // seesound - 8, // reactiontime - 0, // attacksound - S_TROO_PAIN, // painstate - 200, // painchance - sfx_popain, // painsound - S_TROO_ATK1, // meleestate - S_TROO_ATK1, // missilestate - S_TROO_DIE1, // deathstate - S_TROO_XDIE1, // xdeathstate - sfx_bgdth1, // deathsound - 8, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_bgact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_TROO_RAISE1 // raisestate - }, - - { // MT_SERGEANT - 3002, // doomednum - S_SARG_STND, // spawnstate - 150, // spawnhealth - S_SARG_RUN1, // seestate - sfx_sgtsit, // seesound - 8, // reactiontime - sfx_sgtatk, // attacksound - S_SARG_PAIN, // painstate - 180, // painchance - sfx_dmpain, // painsound - S_SARG_ATK1, // meleestate - 0, // missilestate - S_SARG_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_sgtdth, // deathsound - 10, // speed - 30*FRACUNIT, // radius - 56*FRACUNIT, // height - 400, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_SARG_RAISE1 // raisestate - }, - - { // MT_SHADOWS - 58, // doomednum - S_SARG_STND, // spawnstate - 150, // spawnhealth - S_SARG_RUN1, // seestate - sfx_sgtsit, // seesound - 8, // reactiontime - sfx_sgtatk, // attacksound - S_SARG_PAIN, // painstate - 180, // painchance - sfx_dmpain, // painsound - S_SARG_ATK1, // meleestate - 0, // missilestate - S_SARG_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_sgtdth, // deathsound - 10, // speed - 30*FRACUNIT, // radius - 56*FRACUNIT, // height - 400, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_SHADOW|MF_COUNTKILL, // flags - S_SARG_RAISE1 // raisestate - }, - - { // MT_HEAD - 3005, // doomednum - S_HEAD_STND, // spawnstate - 400, // spawnhealth - S_HEAD_RUN1, // seestate - sfx_cacsit, // seesound - 8, // reactiontime - 0, // attacksound - S_HEAD_PAIN, // painstate - 128, // painchance - sfx_dmpain, // painsound - 0, // meleestate - S_HEAD_ATK1, // missilestate - S_HEAD_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_cacdth, // deathsound - 8, // speed - 31*FRACUNIT, // radius - 56*FRACUNIT, // height - 400, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY|MF_COUNTKILL, // flags - S_HEAD_RAISE1 // raisestate - }, - - { // MT_BRUISER - 3003, // doomednum - S_BOSS_STND, // spawnstate - 1000, // spawnhealth - S_BOSS_RUN1, // seestate - sfx_brssit, // seesound - 8, // reactiontime - 0, // attacksound - S_BOSS_PAIN, // painstate - 50, // painchance - sfx_dmpain, // painsound - S_BOSS_ATK1, // meleestate - S_BOSS_ATK1, // missilestate - S_BOSS_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_brsdth, // deathsound - 8, // speed - 24*FRACUNIT, // radius - 64*FRACUNIT, // height - 1000, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_BOSS_RAISE1 // raisestate - }, - - { // MT_BRUISERSHOT - -1, // doomednum - S_BRBALL1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_firsht, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BRBALLX1, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 15*FRACUNIT, // speed - 6*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 8, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_KNIGHT - 69, // doomednum - S_BOS2_STND, // spawnstate - 500, // spawnhealth - S_BOS2_RUN1, // seestate - sfx_kntsit, // seesound - 8, // reactiontime - 0, // attacksound - S_BOS2_PAIN, // painstate - 50, // painchance - sfx_dmpain, // painsound - S_BOS2_ATK1, // meleestate - S_BOS2_ATK1, // missilestate - S_BOS2_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_kntdth, // deathsound - 8, // speed - 24*FRACUNIT, // radius - 64*FRACUNIT, // height - 1000, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_BOS2_RAISE1 // raisestate - }, - - { // MT_SKULL - 3006, // doomednum - S_SKULL_STND, // spawnstate - 100, // spawnhealth - S_SKULL_RUN1, // seestate - 0, // seesound - 8, // reactiontime - sfx_sklatk, // attacksound - S_SKULL_PAIN, // painstate - 256, // painchance - sfx_dmpain, // painsound - 0, // meleestate - S_SKULL_ATK1, // missilestate - S_SKULL_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 8, // speed - 16*FRACUNIT, // radius - 56*FRACUNIT, // height - 50, // mass - 3, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_SPIDER - 7, // doomednum - S_SPID_STND, // spawnstate - 3000, // spawnhealth - S_SPID_RUN1, // seestate - sfx_spisit, // seesound - 8, // reactiontime - sfx_shotgn, // attacksound - S_SPID_PAIN, // painstate - 40, // painchance - sfx_dmpain, // painsound - 0, // meleestate - S_SPID_ATK1, // missilestate - S_SPID_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_spidth, // deathsound - 12, // speed - 128*FRACUNIT, // radius - 100*FRACUNIT, // height - 1000, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_NULL // raisestate - }, - - { // MT_BABY - 68, // doomednum - S_BSPI_STND, // spawnstate - 500, // spawnhealth - S_BSPI_SIGHT, // seestate - sfx_bspsit, // seesound - 8, // reactiontime - 0, // attacksound - S_BSPI_PAIN, // painstate - 128, // painchance - sfx_dmpain, // painsound - 0, // meleestate - S_BSPI_ATK1, // missilestate - S_BSPI_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_bspdth, // deathsound - 12, // speed - 64*FRACUNIT, // radius - 64*FRACUNIT, // height - 600, // mass - 0, // damage - sfx_bspact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_BSPI_RAISE1 // raisestate - }, - - { // MT_CYBORG - 16, // doomednum - S_CYBER_STND, // spawnstate - 4000, // spawnhealth - S_CYBER_RUN1, // seestate - sfx_cybsit, // seesound - 8, // reactiontime - 0, // attacksound - S_CYBER_PAIN, // painstate - 20, // painchance - sfx_dmpain, // painsound - 0, // meleestate - S_CYBER_ATK1, // missilestate - S_CYBER_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_cybdth, // deathsound - 16, // speed - 40*FRACUNIT, // radius - 110*FRACUNIT, // height - 1000, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_NULL // raisestate - }, - - { // MT_PAIN - 71, // doomednum - S_PAIN_STND, // spawnstate - 400, // spawnhealth - S_PAIN_RUN1, // seestate - sfx_pesit, // seesound - 8, // reactiontime - 0, // attacksound - S_PAIN_PAIN, // painstate - 128, // painchance - sfx_pepain, // painsound - 0, // meleestate - S_PAIN_ATK1, // missilestate - S_PAIN_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_pedth, // deathsound - 8, // speed - 31*FRACUNIT, // radius - 56*FRACUNIT, // height - 400, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY|MF_COUNTKILL, // flags - S_PAIN_RAISE1 // raisestate - }, - - { // MT_WOLFSS - 84, // doomednum - S_SSWV_STND, // spawnstate - 50, // spawnhealth - S_SSWV_RUN1, // seestate - sfx_sssit, // seesound - 8, // reactiontime - 0, // attacksound - S_SSWV_PAIN, // painstate - 170, // painchance - sfx_popain, // painsound - 0, // meleestate - S_SSWV_ATK1, // missilestate - S_SSWV_DIE1, // deathstate - S_SSWV_XDIE1, // xdeathstate - sfx_ssdth, // deathsound - 8, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_posact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_SSWV_RAISE1 // raisestate - }, - - { // MT_KEEN - 72, // doomednum - S_KEENSTND, // spawnstate - 100, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_KEENPAIN, // painstate - 256, // painchance - sfx_keenpn, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_COMMKEEN, // deathstate - S_NULL, // xdeathstate - sfx_keendt, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 72*FRACUNIT, // height - 10000000, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_NULL // raisestate - }, - - { // MT_BOSSBRAIN - 88, // doomednum - S_BRAIN, // spawnstate - 250, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_BRAIN_PAIN, // painstate - 255, // painchance - sfx_bospn, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BRAIN_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_bosdth, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 10000000, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE, // flags - S_NULL // raisestate - }, - - { // MT_BOSSSPIT - 89, // doomednum - S_BRAINEYE, // spawnstate - 1000, // spawnhealth - S_BRAINEYESEE, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 32*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOSECTOR, // flags - S_NULL // raisestate - }, - - { // MT_BOSSTARGET - 87, // doomednum - S_NULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 32*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOSECTOR, // flags - S_NULL // raisestate - }, - - { // MT_SPAWNSHOT - -1, // doomednum - S_SPAWN1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_bospit, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 10*FRACUNIT, // speed - 6*FRACUNIT, // radius - 32*FRACUNIT, // height - 100, // mass - 3, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY|MF_NOCLIP, // flags - S_NULL // raisestate - }, - - { // MT_SPAWNFIRE - -1, // doomednum - S_SPAWNFIRE1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_BARREL - 2035, // doomednum - S_BAR1, // spawnstate - 20, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BEXP, // deathstate - S_NULL, // xdeathstate - sfx_barexp, // deathsound - 0, // speed - 10*FRACUNIT, // radius - 42*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD, // flags - S_NULL // raisestate - }, - - { // MT_TROOPSHOT - -1, // doomednum - S_TBALL1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_firsht, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_TBALLX1, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 10*FRACUNIT, // speed - 6*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 3, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_HEADSHOT - -1, // doomednum - S_RBALL1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_firsht, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_RBALLX1, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 10*FRACUNIT, // speed - 6*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 5, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_ROCKET - -1, // doomednum - S_ROCKET, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_rlaunc, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_EXPLODE1, // deathstate - S_NULL, // xdeathstate - sfx_barexp, // deathsound - 20*FRACUNIT, // speed - 11*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 20, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_PLASMA - -1, // doomednum - S_PLASBALL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_plasma, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_PLASEXP, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 25*FRACUNIT, // speed - 13*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 5, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_BFG - -1, // doomednum - S_BFGSHOT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - 0, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BFGLAND, // deathstate - S_NULL, // xdeathstate - sfx_rxplod, // deathsound - 25*FRACUNIT, // speed - 13*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 100, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_ARACHPLAZ - -1, // doomednum - S_ARACH_PLAZ, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_plasma, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_ARACH_PLEX, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 25*FRACUNIT, // speed - 13*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 5, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_PUFF - -1, // doomednum - S_PUFF1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_BLOOD - -1, // doomednum - S_BLOOD1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP, // flags - S_NULL // raisestate - }, - - { // MT_TFOG - -1, // doomednum - S_TFOG, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_IFOG - -1, // doomednum - S_IFOG, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_TELEPORTMAN - 14, // doomednum - S_NULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOSECTOR, // flags - S_NULL // raisestate - }, - - { // MT_EXTRABFG - -1, // doomednum - S_BFGEXP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC0 - 2018, // doomednum - S_ARM1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC1 - 2019, // doomednum - S_ARM2, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC2 - 2014, // doomednum - S_BON1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MISC3 - 2015, // doomednum - S_BON2, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MISC4 - 5, // doomednum - S_BKEY, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC5 - 13, // doomednum - S_RKEY, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC6 - 6, // doomednum - S_YKEY, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC7 - 39, // doomednum - S_YSKULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC8 - 38, // doomednum - S_RSKULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC9 - 40, // doomednum - S_BSKULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC10 - 2011, // doomednum - S_STIM, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC11 - 2012, // doomednum - S_MEDI, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC12 - 2013, // doomednum - S_SOUL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_INV - 2022, // doomednum - S_PINV, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MISC13 - 2023, // doomednum - S_PSTR, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_INS - 2024, // doomednum - S_PINS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MISC14 - 2025, // doomednum - S_SUIT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC15 - 2026, // doomednum - S_PMAP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MISC16 - 2045, // doomednum - S_PVIS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MEGA - 83, // doomednum - S_MEGA, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_CLIP - 2007, // doomednum - S_CLIP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC17 - 2048, // doomednum - S_AMMO, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC18 - 2010, // doomednum - S_ROCK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC19 - 2046, // doomednum - S_BROK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC20 - 2047, // doomednum - S_CELL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC21 - 17, // doomednum - S_CELP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC22 - 2008, // doomednum - S_SHEL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC23 - 2049, // doomednum - S_SBOX, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC24 - 8, // doomednum - S_BPAK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC25 - 2006, // doomednum - S_BFUG, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_CHAINGUN - 2002, // doomednum - S_MGUN, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC26 - 2005, // doomednum - S_CSAW, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC27 - 2003, // doomednum - S_LAUN, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC28 - 2004, // doomednum - S_PLAS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_SHOTGUN - 2001, // doomednum - S_SHOT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_SUPERSHOTGUN - 82, // doomednum - S_SHOT2, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC29 - 85, // doomednum - S_TECHLAMP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC30 - 86, // doomednum - S_TECH2LAMP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC31 - 2028, // doomednum - S_COLU, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC32 - 30, // doomednum - S_TALLGRNCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC33 - 31, // doomednum - S_SHRTGRNCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC34 - 32, // doomednum - S_TALLREDCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC35 - 33, // doomednum - S_SHRTREDCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC36 - 37, // doomednum - S_SKULLCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC37 - 36, // doomednum - S_HEARTCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC38 - 41, // doomednum - S_EVILEYE, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC39 - 42, // doomednum - S_FLOATSKULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC40 - 43, // doomednum - S_TORCHTREE, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC41 - 44, // doomednum - S_BLUETORCH, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC42 - 45, // doomednum - S_GREENTORCH, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC43 - 46, // doomednum - S_REDTORCH, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC44 - 55, // doomednum - S_BTORCHSHRT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC45 - 56, // doomednum - S_GTORCHSHRT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC46 - 57, // doomednum - S_RTORCHSHRT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC47 - 47, // doomednum - S_STALAGTITE, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC48 - 48, // doomednum - S_TECHPILLAR, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC49 - 34, // doomednum - S_CANDLESTIK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC50 - 35, // doomednum - S_CANDELABRA, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC51 - 49, // doomednum - S_BLOODYTWITCH, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 68*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC52 - 50, // doomednum - S_MEAT2, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 84*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC53 - 51, // doomednum - S_MEAT3, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 84*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC54 - 52, // doomednum - S_MEAT4, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 68*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC55 - 53, // doomednum - S_MEAT5, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 52*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC56 - 59, // doomednum - S_MEAT2, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 84*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC57 - 60, // doomednum - S_MEAT4, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 68*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC58 - 61, // doomednum - S_MEAT3, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 52*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC59 - 62, // doomednum - S_MEAT5, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 52*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC60 - 63, // doomednum - S_BLOODYTWITCH, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 68*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC61 - 22, // doomednum - S_HEAD_DIE6, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC62 - 15, // doomednum - S_PLAY_DIE7, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC63 - 18, // doomednum - S_POSS_DIE5, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC64 - 21, // doomednum - S_SARG_DIE6, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC65 - 23, // doomednum - S_SKULL_DIE6, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC66 - 20, // doomednum - S_TROO_DIE5, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC67 - 19, // doomednum - S_SPOS_DIE5, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC68 - 10, // doomednum - S_PLAY_XDIE9, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC69 - 12, // doomednum - S_PLAY_XDIE9, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC70 - 28, // doomednum - S_HEADSONSTICK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC71 - 24, // doomednum - S_GIBS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC72 - 27, // doomednum - S_HEADONASTICK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC73 - 29, // doomednum - S_HEADCANDLES, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC74 - 25, // doomednum - S_DEADSTICK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC75 - 26, // doomednum - S_LIVESTICK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC76 - 54, // doomednum - S_BIGTREE, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 32*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC77 - 70, // doomednum - S_BBAR1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC78 - 73, // doomednum - S_HANGNOGUTS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 88*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC79 - 74, // doomednum - S_HANGBNOBRAIN, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 88*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC80 - 75, // doomednum - S_HANGTLOOKDN, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 64*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC81 - 76, // doomednum - S_HANGTSKULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 64*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC82 - 77, // doomednum - S_HANGTLOOKUP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 64*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC83 - 78, // doomednum - S_HANGTNOBRAIN, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 64*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC84 - 79, // doomednum - S_COLONGIBS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP, // flags - S_NULL // raisestate - }, - - { // MT_MISC85 - 80, // doomednum - S_SMALLPOOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP, // flags - S_NULL // raisestate - }, - - { // MT_MISC86 - 81, // doomednum - S_BRAINSTEM, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP, // flags - S_NULL // raisestate + { + -1, + S_PLAY, + 100, + S_PLAY_RUN1, + sfx_None, + 0, + sfx_None, + S_PLAY_PAIN, + 255, + sfx_plpain, + S_NULL, + S_PLAY_ATK1, + S_PLAY_DIE1, + S_PLAY_XDIE1, + sfx_pldeth, + 0, + 16*FRACUNIT, + 56*FRACUNIT, + 100, + 0, + sfx_None, + MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_PICKUP|MF_NOTDMATCH, + S_NULL + }, + + { + 3004, + S_POSS_STND, + 20, + S_POSS_RUN1, + sfx_posit1, + 8, + sfx_pistol, + S_POSS_PAIN, + 200,