ref: c7ddc423f67236a99956960cf9fe89abf077839b
parent: 0774dce204c2c01622c59819e2a29590a1b50e46
author: Simon Howard <fraggle@gmail.com>
date: Thu Sep 4 20:02:14 EDT 2008
Reformat (beautify) Raven sources and add GPL headers. Subversion-branch: /branches/raven-branch Subversion-revision: 1197
--- a/src/heretic/am_data.h
+++ b/src/heretic/am_data.h
@@ -1,27 +1,49 @@
-// AM_data.h : The vector graphics for the automap
-
-#ifndef __AMDATA_H__
-#define __AMDATA_H__
-
-#pragma once
-
-// a line drawing of the player pointing right, starting from the middle.
-
-#define R ((8*PLAYERRADIUS)/7)
-
-mline_t player_arrow[] = {
- { { -R+R/4, 0 }, { 0, 0} }, // center line.
- { { -R+R/4, R/8 }, { R, 0} }, // blade
- { { -R+R/4, -R/8 }, { R, 0 } },
- { { -R+R/4, -R/4 }, { -R+R/4, R/4 } }, // crosspiece
- { { -R+R/8, -R/4 }, { -R+R/8, R/4 } },
- { { -R+R/8, -R/4 }, { -R+R/4, -R/4} }, //crosspiece connectors
- { { -R+R/8, R/4 }, { -R+R/4, R/4} },
- { { -R-R/4, R/8 }, { -R-R/4, -R/8 } }, //pommel
- { { -R-R/4, R/8 }, { -R+R/8, R/8 } },
- { { -R-R/4, -R/8}, { -R+R/8, -R/8 } }
- };
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
+// AM_data.h : The vector graphics for the automap
+#ifndef __AMDATA_H__
+#define __AMDATA_H__
+
+#pragma once
+
+// a line drawing of the player pointing right, starting from the middle.
+
+#define R ((8*PLAYERRADIUS)/7)
+
+mline_t player_arrow[] = {
+ { { -R+R/4, 0 }, { 0, 0} }, // center line.
+ { { -R+R/4, R/8 }, { R, 0} }, // blade
+ { { -R+R/4, -R/8 }, { R, 0 } },
+ { { -R+R/4, -R/4 }, { -R+R/4, R/4 } }, // crosspiece
+ { { -R+R/8, -R/4 }, { -R+R/8, R/4 } },
+ { { -R+R/8, -R/4 }, { -R+R/4, -R/4} }, //crosspiece connectors
+ { { -R+R/8, R/4 }, { -R+R/4, R/4} },
+ { { -R-R/4, R/8 }, { -R-R/4, -R/8 } }, //pommel
+ { { -R-R/4, R/8 }, { -R+R/8, R/8 } },
+ { { -R-R/4, -R/8}, { -R+R/8, -R/8 } }
+ };
+
mline_t keysquare[] = {
{ { 0, 0 }, { R/4, -R/2 } },
{ { R/4, -R/2 }, { R/2, -R/2 } },
@@ -32,59 +54,59 @@
{ { -R, 0 }, { -R, -R/2 } }, // end lockpick part
{ { -3*R/4, 0 }, { -3*R/4, -R/4 } }
};
-
-/*mline_t player_arrow[] = {
- { { -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+3*R/8, 0 }, { -R+R/8, R/4 } }, // >>--->
- { { -R+3*R/8, 0 }, { -R+R/8, -R/4 } }
- };
-*/
-#undef R
-#define NUMPLYRLINES (sizeof(player_arrow)/sizeof(mline_t))
+
+/*mline_t player_arrow[] = {
+ { { -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+3*R/8, 0 }, { -R+R/8, R/4 } }, // >>--->
+ { { -R+3*R/8, 0 }, { -R+R/8, -R/4 } }
+ };
+*/
+#undef R
+#define NUMPLYRLINES (sizeof(player_arrow)/sizeof(mline_t))
#define NUMKEYSQUARELINES (sizeof(keysquare)/sizeof(mline_t))
-
-#define R ((8*PLAYERRADIUS)/7)
-mline_t cheat_player_arrow[] = {
- { { -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+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, -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, -R/6 }, { 0, -R/6 } },
- { { 0, -R/6 }, { 0, R/4 } },
- { { R/6, R/4 }, { R/6, -R/7 } }, // >>-ddt->
- { { 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 } }
- };
-#undef R
-#define NUMCHEATPLYRLINES (sizeof(cheat_player_arrow)/sizeof(mline_t))
-
-#define R (FRACUNIT)
-mline_t triangle_guy[] = {
- { { -.867*R, -.5*R }, { .867*R, -.5*R } },
- { { .867*R, -.5*R } , { 0, R } },
- { { 0, R }, { -.867*R, -.5*R } }
- };
-#undef R
-#define NUMTRIANGLEGUYLINES (sizeof(triangle_guy)/sizeof(mline_t))
-
-#define R (FRACUNIT)
-mline_t thintriangle_guy[] = {
- { { -.5*R, -.7*R }, { R, 0 } },
- { { R, 0 }, { -.5*R, .7*R } },
- { { -.5*R, .7*R }, { -.5*R, -.7*R } }
- };
-#undef R
-#define NUMTHINTRIANGLEGUYLINES (sizeof(thintriangle_guy)/sizeof(mline_t))
-
-#endif
+
+#define R ((8*PLAYERRADIUS)/7)
+mline_t cheat_player_arrow[] = {
+ { { -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+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, -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, -R/6 }, { 0, -R/6 } },
+ { { 0, -R/6 }, { 0, R/4 } },
+ { { R/6, R/4 }, { R/6, -R/7 } }, // >>-ddt->
+ { { 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 } }
+ };
+#undef R
+#define NUMCHEATPLYRLINES (sizeof(cheat_player_arrow)/sizeof(mline_t))
+
+#define R (FRACUNIT)
+mline_t triangle_guy[] = {
+ { { -.867*R, -.5*R }, { .867*R, -.5*R } },
+ { { .867*R, -.5*R } , { 0, R } },
+ { { 0, R }, { -.867*R, -.5*R } }
+ };
+#undef R
+#define NUMTRIANGLEGUYLINES (sizeof(triangle_guy)/sizeof(mline_t))
+
+#define R (FRACUNIT)
+mline_t thintriangle_guy[] = {
+ { { -.5*R, -.7*R }, { R, 0 } },
+ { { R, 0 }, { -.5*R, .7*R } },
+ { { -.5*R, .7*R }, { -.5*R, -.7*R } }
+ };
+#undef R
+#define NUMTHINTRIANGLEGUYLINES (sizeof(thintriangle_guy)/sizeof(mline_t))
+
+#endif
--- a/src/heretic/am_map.c
+++ b/src/heretic/am_map.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// AM_map.c
@@ -9,91 +31,90 @@
vertex_t KeyPoints[NUMKEYS];
-#define NUMALIAS 3 // Number of antialiased lines.
+#define NUMALIAS 3 // Number of antialiased lines.
-char *LevelNames[] =
-{
- // EPISODE 1 - THE CITY OF THE DAMNED
- "E1M1: THE DOCKS",
- "E1M2: THE DUNGEONS",
- "E1M3: THE GATEHOUSE",
- "E1M4: THE GUARD TOWER",
- "E1M5: THE CITADEL",
- "E1M6: THE CATHEDRAL",
- "E1M7: THE CRYPTS",
- "E1M8: HELL'S MAW",
- "E1M9: THE GRAVEYARD",
- // EPISODE 2 - HELL'S MAW
- "E2M1: THE CRATER",
- "E2M2: THE LAVA PITS",
- "E2M3: THE RIVER OF FIRE",
- "E2M4: THE ICE GROTTO",
- "E2M5: THE CATACOMBS",
- "E2M6: THE LABYRINTH",
- "E2M7: THE GREAT HALL",
- "E2M8: THE PORTALS OF CHAOS",
- "E2M9: THE GLACIER",
- // EPISODE 3 - THE DOME OF D'SPARIL
- "E3M1: THE STOREHOUSE",
- "E3M2: THE CESSPOOL",
- "E3M3: THE CONFLUENCE",
- "E3M4: THE AZURE FORTRESS",
- "E3M5: THE OPHIDIAN LAIR",
- "E3M6: THE HALLS OF FEAR",
- "E3M7: THE CHASM",
- "E3M8: D'SPARIL'S KEEP",
- "E3M9: THE AQUIFER",
- // EPISODE 4: THE OSSUARY
- "E4M1: CATAFALQUE",
- "E4M2: BLOCKHOUSE",
- "E4M3: AMBULATORY",
- "E4M4: SEPULCHER",
- "E4M5: GREAT STAIR",
- "E4M6: HALLS OF THE APOSTATE",
- "E4M7: RAMPARTS OF PERDITION",
- "E4M8: SHATTERED BRIDGE",
- "E4M9: MAUSOLEUM",
- // EPISODE 5: THE STAGNANT DEMESNE
- "E5M1: OCHRE CLIFFS",
- "E5M2: RAPIDS",
- "E5M3: QUAY",
- "E5M4: COURTYARD",
- "E5M5: HYDRATYR",
- "E5M6: COLONNADE",
- "E5M7: FOETID MANSE",
- "E5M8: FIELD OF JUDGEMENT",
- "E5M9: SKEIN OF D'SPARIL"
+char *LevelNames[] = {
+ // EPISODE 1 - THE CITY OF THE DAMNED
+ "E1M1: THE DOCKS",
+ "E1M2: THE DUNGEONS",
+ "E1M3: THE GATEHOUSE",
+ "E1M4: THE GUARD TOWER",
+ "E1M5: THE CITADEL",
+ "E1M6: THE CATHEDRAL",
+ "E1M7: THE CRYPTS",
+ "E1M8: HELL'S MAW",
+ "E1M9: THE GRAVEYARD",
+ // EPISODE 2 - HELL'S MAW
+ "E2M1: THE CRATER",
+ "E2M2: THE LAVA PITS",
+ "E2M3: THE RIVER OF FIRE",
+ "E2M4: THE ICE GROTTO",
+ "E2M5: THE CATACOMBS",
+ "E2M6: THE LABYRINTH",
+ "E2M7: THE GREAT HALL",
+ "E2M8: THE PORTALS OF CHAOS",
+ "E2M9: THE GLACIER",
+ // EPISODE 3 - THE DOME OF D'SPARIL
+ "E3M1: THE STOREHOUSE",
+ "E3M2: THE CESSPOOL",
+ "E3M3: THE CONFLUENCE",
+ "E3M4: THE AZURE FORTRESS",
+ "E3M5: THE OPHIDIAN LAIR",
+ "E3M6: THE HALLS OF FEAR",
+ "E3M7: THE CHASM",
+ "E3M8: D'SPARIL'S KEEP",
+ "E3M9: THE AQUIFER",
+ // EPISODE 4: THE OSSUARY
+ "E4M1: CATAFALQUE",
+ "E4M2: BLOCKHOUSE",
+ "E4M3: AMBULATORY",
+ "E4M4: SEPULCHER",
+ "E4M5: GREAT STAIR",
+ "E4M6: HALLS OF THE APOSTATE",
+ "E4M7: RAMPARTS OF PERDITION",
+ "E4M8: SHATTERED BRIDGE",
+ "E4M9: MAUSOLEUM",
+ // EPISODE 5: THE STAGNANT DEMESNE
+ "E5M1: OCHRE CLIFFS",
+ "E5M2: RAPIDS",
+ "E5M3: QUAY",
+ "E5M4: COURTYARD",
+ "E5M5: HYDRATYR",
+ "E5M6: COLONNADE",
+ "E5M7: FOETID MANSE",
+ "E5M8: FIELD OF JUDGEMENT",
+ "E5M9: SKEIN OF D'SPARIL"
};
static int cheating = 0;
static int grid = 0;
-static int leveljuststarted = 1; // kluge until AM_LevelInit() is called
+static int leveljuststarted = 1; // kluge until AM_LevelInit() is called
-boolean automapactive = false;
+boolean automapactive = false;
static int finit_width = SCREENWIDTH;
-static int finit_height = SCREENHEIGHT-42;
-static int f_x, f_y; // location of window on screen
-static int f_w, f_h; // size of window on screen
-static int lightlev; // used for funky strobing effect
-static byte *fb; // pseudo-frame buffer
+static int finit_height = SCREENHEIGHT - 42;
+static int f_x, f_y; // location of window on screen
+static int f_w, f_h; // size of window on screen
+static int lightlev; // used for funky strobing effect
+static byte *fb; // pseudo-frame buffer
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; // 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 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)
+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, m_h;
-static fixed_t min_x, min_y; // based on level size
-static fixed_t max_x, max_y; // based on level size
-static fixed_t max_w, max_h; // max_x-min_x, max_y-min_y
-static fixed_t min_w, min_h; // based on player size
-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_x, min_y; // based on level size
+static fixed_t max_x, max_y; // based on level size
+static fixed_t max_w, max_h; // max_x-min_x, max_y-min_y
+static fixed_t min_w, min_h; // based on player size
+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
// old stuff for recovery later
static fixed_t old_m_w, old_m_h;
@@ -107,7 +128,7 @@
// 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; // the player represented by an arrow
static vertex_t oldplr;
//static patch_t *marknums[10]; // numbers used for marking by the automap
@@ -114,28 +135,28 @@
//static mpoint_t markpoints[AM_NUMMARKPOINTS]; // where the points are
//static int markpointnum = 0; // next point to be assigned
-static int followplayer = 1; // specifies whether to follow the player around
+static int followplayer = 1; // specifies whether to follow the player around
-static char cheat_amap[] = { 'r','a','v','m','a','p' };
+static char cheat_amap[] = { 'r', 'a', 'v', 'm', 'a', 'p' };
-static byte cheatcount=0;
+static byte cheatcount = 0;
extern boolean viewactive;
-static byte antialias[NUMALIAS][8]=
-{
- {96, 97, 98, 99, 100, 101, 102, 103},
- {110, 109, 108, 107, 106, 105, 104, 103},
- {75, 76, 77, 78, 79, 80, 81, 103}
+static byte antialias[NUMALIAS][8] = {
+ {96, 97, 98, 99, 100, 101, 102, 103},
+ {110, 109, 108, 107, 106, 105, 104, 103},
+ {75, 76, 77, 78, 79, 80, 81, 103}
};
+
/*
static byte *aliasmax[NUMALIAS] = {
&antialias[0][7], &antialias[1][7], &antialias[2][7]
};*/
-static byte *maplump; // pointer to the raw data for the automap background.
-static short mapystart=0; // y-value for the start of the map bitmap...used in the paralax stuff.
-static short mapxstart=0; //x-value for the bitmap.
+static byte *maplump; // pointer to the raw data for the automap background.
+static short mapystart = 0; // y-value for the start of the map bitmap...used in the paralax stuff.
+static short mapxstart = 0; //x-value for the bitmap.
//byte screens[][SCREENWIDTH*SCREENHEIGHT];
//void V_MarkRect (int x, int y, int width, int height);
@@ -142,8 +163,8 @@
// Functions
-void DrawWuLine(int X0, int Y0, int X1, int Y1, byte *BaseColor,
- int NumLevels, unsigned short IntensityBits);
+void DrawWuLine(int X0, int Y0, int X1, int Y1, byte * BaseColor,
+ int NumLevels, unsigned short IntensityBits);
// 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
@@ -166,43 +187,45 @@
void AM_activateNewScale(void)
{
- m_x += m_w/2;
- m_y += m_h/2;
- m_w = FTOM(f_w);
- m_h = FTOM(f_h);
- m_x -= m_w/2;
- m_y -= m_h/2;
- m_x2 = m_x + m_w;
- m_y2 = m_y + m_h;
+ m_x += m_w / 2;
+ m_y += m_h / 2;
+ m_w = FTOM(f_w);
+ m_h = FTOM(f_h);
+ m_x -= m_w / 2;
+ m_y -= m_h / 2;
+ m_x2 = m_x + m_w;
+ m_y2 = m_y + m_h;
}
void AM_saveScaleAndLoc(void)
{
- old_m_x = m_x;
- old_m_y = m_y;
- old_m_w = m_w;
- old_m_h = m_h;
+ old_m_x = m_x;
+ old_m_y = m_y;
+ old_m_w = m_w;
+ old_m_h = m_h;
}
void AM_restoreScaleAndLoc(void)
{
- m_w = old_m_w;
- m_h = old_m_h;
- if (!followplayer)
- {
- m_x = old_m_x;
- m_y = old_m_y;
- } else {
- m_x = plr->mo->x - m_w/2;
- m_y = plr->mo->y - m_h/2;
- }
- m_x2 = m_x + m_w;
- m_y2 = m_y + m_h;
+ m_w = old_m_w;
+ m_h = old_m_h;
+ if (!followplayer)
+ {
+ m_x = old_m_x;
+ m_y = old_m_y;
+ }
+ else
+ {
+ m_x = plr->mo->x - m_w / 2;
+ m_y = plr->mo->y - m_h / 2;
+ }
+ 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);
+ // 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
@@ -218,62 +241,66 @@
*/
void AM_findMinMaxBoundaries(void)
{
- int i;
- fixed_t a, b;
+ int i;
+ fixed_t a, b;
- min_x = min_y = MAXINT;
- max_x = max_y = -MAXINT;
- for (i=0;i<numvertexes;i++)
- {
- if (vertexes[i].x < min_x) min_x = vertexes[i].x;
- else if (vertexes[i].x > max_x) max_x = vertexes[i].x;
- if (vertexes[i].y < min_y) min_y = vertexes[i].y;
- else if (vertexes[i].y > max_y) max_y = vertexes[i].y;
- }
- max_w = max_x - min_x;
- max_h = max_y - min_y;
- min_w = 2*PLAYERRADIUS;
- min_h = 2*PLAYERRADIUS;
+ min_x = min_y = MAXINT;
+ max_x = max_y = -MAXINT;
+ for (i = 0; i < numvertexes; i++)
+ {
+ if (vertexes[i].x < min_x)
+ min_x = vertexes[i].x;
+ else if (vertexes[i].x > max_x)
+ max_x = vertexes[i].x;
+ if (vertexes[i].y < min_y)
+ min_y = vertexes[i].y;
+ else if (vertexes[i].y > max_y)
+ max_y = vertexes[i].y;
+ }
+ max_w = max_x - min_x;
+ max_h = max_y - min_y;
+ min_w = 2 * PLAYERRADIUS;
+ min_h = 2 * PLAYERRADIUS;
- a = FixedDiv(f_w<<FRACBITS, max_w);
- b = FixedDiv(f_h<<FRACBITS, max_h);
- min_scale_mtof = a < b ? a : b;
+ a = FixedDiv(f_w << FRACBITS, max_w);
+ b = FixedDiv(f_h << FRACBITS, max_h);
+ min_scale_mtof = a < b ? a : b;
- max_scale_mtof = FixedDiv(f_h<<FRACBITS, 2*PLAYERRADIUS);
+ max_scale_mtof = FixedDiv(f_h << FRACBITS, 2 * PLAYERRADIUS);
}
void AM_changeWindowLoc(void)
{
- if (m_paninc.x || m_paninc.y)
- {
- followplayer = 0;
- f_oldloc.x = MAXINT;
- }
+ if (m_paninc.x || m_paninc.y)
+ {
+ followplayer = 0;
+ f_oldloc.x = MAXINT;
+ }
- m_x += m_paninc.x;
- m_y += m_paninc.y;
+ m_x += m_paninc.x;
+ m_y += m_paninc.y;
- if (m_x + m_w/2 > max_x)
- {
- m_x = max_x - m_w/2;
- m_paninc.x=0;
- }
- else if (m_x + m_w/2 < min_x)
- {
- m_x = min_x - m_w/2;
- m_paninc.x=0;
- }
- if (m_y + m_h/2 > max_y)
- {
- m_y = max_y - m_h/2;
- m_paninc.y=0;
- }
- else if (m_y + m_h/2 < min_y)
- {
- m_y = min_y - m_h/2;
- m_paninc.y=0;
- }
+ if (m_x + m_w / 2 > max_x)
+ {
+ m_x = max_x - m_w / 2;
+ m_paninc.x = 0;
+ }
+ else if (m_x + m_w / 2 < min_x)
+ {
+ m_x = min_x - m_w / 2;
+ m_paninc.x = 0;
+ }
+ if (m_y + m_h / 2 > max_y)
+ {
+ m_y = max_y - m_h / 2;
+ m_paninc.y = 0;
+ }
+ else if (m_y + m_h / 2 < min_y)
+ {
+ m_y = min_y - m_h / 2;
+ m_paninc.y = 0;
+ }
/*
mapxstart += MTOF(m_paninc.x+FRACUNIT/2);
mapystart -= MTOF(m_paninc.y+FRACUNIT/2);
@@ -286,92 +313,95 @@
if(mapystart < 0)
mapystart += finit_height;
*/
- m_x2 = m_x + m_w;
- m_y2 = m_y + m_h;
+ m_x2 = m_x + m_w;
+ m_y2 = m_y + m_h;
}
void AM_initVariables(void)
{
- int pnum;
- thinker_t *think;
- mobj_t *mo;
+ int pnum;
+ thinker_t *think;
+ mobj_t *mo;
- //static event_t st_notify = { ev_keyup, AM_MSGENTERED };
+ //static event_t st_notify = { ev_keyup, AM_MSGENTERED };
- automapactive = true;
- fb = screen;
+ automapactive = true;
+ fb = screen;
- f_oldloc.x = MAXINT;
- amclock = 0;
- lightlev = 0;
+ f_oldloc.x = MAXINT;
+ amclock = 0;
+ lightlev = 0;
- m_paninc.x = m_paninc.y = 0;
- ftom_zoommul = FRACUNIT;
- mtof_zoommul = FRACUNIT;
+ m_paninc.x = m_paninc.y = 0;
+ ftom_zoommul = FRACUNIT;
+ mtof_zoommul = FRACUNIT;
- m_w = FTOM(f_w);
- m_h = FTOM(f_h);
+ 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]) break;
- plr = &players[pnum];
- oldplr.x = plr->mo->x;
- oldplr.y = plr->mo->y;
- m_x = plr->mo->x - m_w/2;
- m_y = plr->mo->y - m_h/2;
- AM_changeWindowLoc();
+ // find player to center on initially
+ if (!playeringame[pnum = consoleplayer])
+ for (pnum = 0; pnum < MAXPLAYERS; pnum++)
+ if (playeringame[pnum])
+ break;
+ plr = &players[pnum];
+ oldplr.x = plr->mo->x;
+ oldplr.y = plr->mo->y;
+ m_x = plr->mo->x - m_w / 2;
+ 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;
+ // for saving & restoring
+ old_m_x = m_x;
+ old_m_y = m_y;
+ old_m_w = m_w;
+ old_m_h = m_h;
- // load in the location of keys, if in baby mode
+ // load in the location of keys, if in baby mode
- memset(KeyPoints, 0, sizeof(vertex_t)*3);
- if(gameskill == sk_baby)
- {
- for(think = thinkercap.next; think != &thinkercap; think = think->next)
- {
- if(think->function != P_MobjThinker)
- { //not a mobj
- continue;
- }
- mo = (mobj_t *)think;
- if(mo->type == MT_CKEY)
- {
- KeyPoints[0].x = mo->x;
- KeyPoints[0].y = mo->y;
- }
- else if(mo->type == MT_AKYY)
- {
- KeyPoints[1].x = mo->x;
- KeyPoints[1].y = mo->y;
- }
- else if(mo->type == MT_BKYY)
- {
- KeyPoints[2].x = mo->x;
- KeyPoints[2].y = mo->y;
- }
- }
- }
+ memset(KeyPoints, 0, sizeof(vertex_t) * 3);
+ if (gameskill == sk_baby)
+ {
+ for (think = thinkercap.next; think != &thinkercap;
+ think = think->next)
+ {
+ if (think->function != P_MobjThinker)
+ { //not a mobj
+ continue;
+ }
+ mo = (mobj_t *) think;
+ if (mo->type == MT_CKEY)
+ {
+ KeyPoints[0].x = mo->x;
+ KeyPoints[0].y = mo->y;
+ }
+ else if (mo->type == MT_AKYY)
+ {
+ KeyPoints[1].x = mo->x;
+ KeyPoints[1].y = mo->y;
+ }
+ else if (mo->type == MT_BKYY)
+ {
+ KeyPoints[2].x = mo->x;
+ KeyPoints[2].y = mo->y;
+ }
+ }
+ }
- // inform the status bar of the change
+ // inform the status bar of the change
//c ST_Responder(&st_notify);
}
void AM_loadPics(void)
{
- //int i;
- //char namebuf[9];
+ //int i;
+ //char namebuf[9];
/* for (i=0;i<10;i++)
{
sprintf(namebuf, "AMMNUM%d", i);
marknums[i] = W_CacheLumpName(namebuf, PU_STATIC);
}*/
- maplump = W_CacheLumpName("AUTOPAGE", PU_STATIC);
+ maplump = W_CacheLumpName("AUTOPAGE", PU_STATIC);
}
/*void AM_unloadPics(void)
@@ -395,53 +425,55 @@
void AM_LevelInit(void)
{
- leveljuststarted = 0;
+ leveljuststarted = 0;
- f_x = f_y = 0;
- f_w = finit_width;
- f_h = finit_height;
- mapxstart = mapystart = 0;
+ f_x = f_y = 0;
+ f_w = finit_width;
+ f_h = finit_height;
+ mapxstart = mapystart = 0;
// AM_clearMarks();
- AM_findMinMaxBoundaries();
- scale_mtof = FixedDiv(min_scale_mtof, (int) (0.7*FRACUNIT));
- if (scale_mtof > max_scale_mtof) scale_mtof = min_scale_mtof;
- scale_ftom = FixedDiv(FRACUNIT, scale_mtof);
+ AM_findMinMaxBoundaries();
+ scale_mtof = FixedDiv(min_scale_mtof, (int) (0.7 * FRACUNIT));
+ if (scale_mtof > max_scale_mtof)
+ scale_mtof = min_scale_mtof;
+ scale_ftom = FixedDiv(FRACUNIT, scale_mtof);
}
static boolean stopped = true;
-void AM_Stop (void)
+void AM_Stop(void)
{
- //static event_t st_notify = { 0, ev_keyup, AM_MSGEXITED };
+ //static event_t st_notify = { 0, ev_keyup, AM_MSGEXITED };
// AM_unloadPics();
- automapactive = false;
+ automapactive = false;
// ST_Responder(&st_notify);
- stopped = true;
- BorderNeedRefresh = true;
+ stopped = true;
+ BorderNeedRefresh = true;
}
-void AM_Start (void)
+void AM_Start(void)
{
- static int lastlevel = -1, lastepisode = -1;
+ static int lastlevel = -1, lastepisode = -1;
- if (!stopped) AM_Stop();
- stopped = false;
- if(gamestate != GS_LEVEL)
- {
- return; // don't show automap if we aren't in a game!
- }
- if (lastlevel != gamemap || lastepisode != gameepisode)
- {
- AM_LevelInit();
- lastlevel = gamemap;
- lastepisode = gameepisode;
- }
- AM_initVariables();
- AM_loadPics();
+ if (!stopped)
+ AM_Stop();
+ stopped = false;
+ if (gamestate != GS_LEVEL)
+ {
+ return; // don't show automap if we aren't in a game!
+ }
+ if (lastlevel != gamemap || lastepisode != gameepisode)
+ {
+ AM_LevelInit();
+ lastlevel = gamemap;
+ lastepisode = gameepisode;
+ }
+ AM_initVariables();
+ AM_loadPics();
}
// set the window scale to the maximum size
@@ -448,9 +480,9 @@
void AM_minOutWindowScale(void)
{
- scale_mtof = min_scale_mtof;
- scale_ftom = FixedDiv(FRACUNIT, scale_mtof);
- AM_activateNewScale();
+ scale_mtof = min_scale_mtof;
+ scale_ftom = FixedDiv(FRACUNIT, scale_mtof);
+ AM_activateNewScale();
}
// set the window scale to the minimum size
@@ -457,78 +489,89 @@
void AM_maxOutWindowScale(void)
{
- scale_mtof = max_scale_mtof;
- scale_ftom = FixedDiv(FRACUNIT, scale_mtof);
- AM_activateNewScale();
+ scale_mtof = max_scale_mtof;
+ scale_ftom = FixedDiv(FRACUNIT, scale_mtof);
+ AM_activateNewScale();
}
-boolean AM_Responder (event_t *ev)
+boolean AM_Responder(event_t * ev)
{
- int rc;
- static int cheatstate=0;
- static int bigstate=0;
+ int rc;
+ static int cheatstate = 0;
+ static int bigstate = 0;
- rc = false;
- if (!automapactive)
- {
- if (ev->type == ev_keydown && ev->data1 == AM_STARTKEY
- && gamestate == GS_LEVEL)
+ rc = false;
+ if (!automapactive)
{
- AM_Start ();
- viewactive = false;
+ if (ev->type == ev_keydown && ev->data1 == AM_STARTKEY
+ && gamestate == GS_LEVEL)
+ {
+ AM_Start();
+ viewactive = false;
// viewactive = true;
- rc = true;
+ rc = true;
+ }
}
- }
- else if (ev->type == ev_keydown)
- {
-
- rc = true;
- switch(ev->data1)
+ else if (ev->type == ev_keydown)
{
- case AM_PANRIGHTKEY: // pan right
- if (!followplayer) m_paninc.x = FTOM(F_PANINC);
- else rc = false;
- break;
- case AM_PANLEFTKEY: // pan left
- if (!followplayer) m_paninc.x = -FTOM(F_PANINC);
- else rc = false;
- break;
- case AM_PANUPKEY: // pan up
- if (!followplayer) m_paninc.y = FTOM(F_PANINC);
- else rc = false;
- break;
- case AM_PANDOWNKEY: // pan down
- if (!followplayer) m_paninc.y = -FTOM(F_PANINC);
- else rc = false;
- break;
- case AM_ZOOMOUTKEY: // zoom out
- mtof_zoommul = M_ZOOMOUT;
- ftom_zoommul = M_ZOOMIN;
- break;
- case AM_ZOOMINKEY: // zoom in
- mtof_zoommul = M_ZOOMIN;
- ftom_zoommul = M_ZOOMOUT;
- break;
- case AM_ENDKEY:
- bigstate = 0;
- viewactive = true;
- AM_Stop ();
- break;
- case AM_GOBIGKEY:
- bigstate = !bigstate;
- if (bigstate)
- {
- AM_saveScaleAndLoc();
- AM_minOutWindowScale();
- }
- else AM_restoreScaleAndLoc();
- break;
- case AM_FOLLOWKEY:
- followplayer = !followplayer;
- f_oldloc.x = MAXINT;
- P_SetMessage(plr, followplayer ? AMSTR_FOLLOWON : AMSTR_FOLLOWOFF, true);
- break;
+
+ rc = true;
+ switch (ev->data1)
+ {
+ case AM_PANRIGHTKEY: // pan right
+ if (!followplayer)
+ m_paninc.x = FTOM(F_PANINC);
+ else
+ rc = false;
+ break;
+ case AM_PANLEFTKEY: // pan left
+ if (!followplayer)
+ m_paninc.x = -FTOM(F_PANINC);
+ else
+ rc = false;
+ break;
+ case AM_PANUPKEY: // pan up
+ if (!followplayer)
+ m_paninc.y = FTOM(F_PANINC);
+ else
+ rc = false;
+ break;
+ case AM_PANDOWNKEY: // pan down
+ if (!followplayer)
+ m_paninc.y = -FTOM(F_PANINC);
+ else
+ rc = false;
+ break;
+ case AM_ZOOMOUTKEY: // zoom out
+ mtof_zoommul = M_ZOOMOUT;
+ ftom_zoommul = M_ZOOMIN;
+ break;
+ case AM_ZOOMINKEY: // zoom in
+ mtof_zoommul = M_ZOOMIN;
+ ftom_zoommul = M_ZOOMOUT;
+ break;
+ case AM_ENDKEY:
+ bigstate = 0;
+ viewactive = true;
+ AM_Stop();
+ break;
+ case AM_GOBIGKEY:
+ bigstate = !bigstate;
+ if (bigstate)
+ {
+ AM_saveScaleAndLoc();
+ AM_minOutWindowScale();
+ }
+ else
+ AM_restoreScaleAndLoc();
+ break;
+ case AM_FOLLOWKEY:
+ followplayer = !followplayer;
+ f_oldloc.x = MAXINT;
+ P_SetMessage(plr,
+ followplayer ? AMSTR_FOLLOWON : AMSTR_FOLLOWOFF,
+ true);
+ break;
/*
case AM_GRIDKEY:
grid = !grid;
@@ -544,48 +587,52 @@
plr->message = AMSTR_MARKSCLEARED;
break;
*/
- default:
- cheatstate=0;
- rc = false;
+ default:
+ cheatstate = 0;
+ rc = false;
+ }
+ if (cheat_amap[cheatcount] == ev->data1 && !netgame)
+ cheatcount++;
+ else
+ cheatcount = 0;
+ if (cheatcount == 6)
+ {
+ cheatcount = 0;
+ rc = false;
+ cheating = (cheating + 1) % 3;
+ }
}
- if(cheat_amap[cheatcount]==ev->data1 && !netgame)
- cheatcount++;
- else
- cheatcount=0;
- if(cheatcount==6)
- {
- cheatcount=0;
- rc = false;
- cheating = (cheating+1) % 3;
- }
- }
- else if (ev->type == ev_keyup)
- {
- rc = false;
- switch (ev->data1)
+ else if (ev->type == ev_keyup)
{
- case AM_PANRIGHTKEY:
- if (!followplayer) m_paninc.x = 0;
- break;
- case AM_PANLEFTKEY:
- if (!followplayer) m_paninc.x = 0;
- break;
- case AM_PANUPKEY:
- if (!followplayer) m_paninc.y = 0;
- break;
- case AM_PANDOWNKEY:
- if (!followplayer) m_paninc.y = 0;
- break;
- case AM_ZOOMOUTKEY:
- case AM_ZOOMINKEY:
- mtof_zoommul = FRACUNIT;
- ftom_zoommul = FRACUNIT;
- break;
+ rc = false;
+ switch (ev->data1)
+ {
+ case AM_PANRIGHTKEY:
+ if (!followplayer)
+ m_paninc.x = 0;
+ break;
+ case AM_PANLEFTKEY:
+ if (!followplayer)
+ m_paninc.x = 0;
+ break;
+ case AM_PANUPKEY:
+ if (!followplayer)
+ m_paninc.y = 0;
+ break;
+ case AM_PANDOWNKEY:
+ if (!followplayer)
+ m_paninc.y = 0;
+ break;
+ case AM_ZOOMOUTKEY:
+ case AM_ZOOMINKEY:
+ mtof_zoommul = FRACUNIT;
+ ftom_zoommul = FRACUNIT;
+ break;
+ }
}
- }
- return rc;
+ return rc;
}
@@ -592,29 +639,32 @@
void AM_changeWindowScale(void)
{
- // Change the scaling multipliers
- scale_mtof = FixedMul(scale_mtof, mtof_zoommul);
- scale_ftom = FixedDiv(FRACUNIT, scale_mtof);
+ // Change the scaling multipliers
+ scale_mtof = FixedMul(scale_mtof, mtof_zoommul);
+ scale_ftom = FixedDiv(FRACUNIT, scale_mtof);
- if (scale_mtof < min_scale_mtof) AM_minOutWindowScale();
- else if (scale_mtof > max_scale_mtof) AM_maxOutWindowScale();
- else AM_activateNewScale();
+ if (scale_mtof < min_scale_mtof)
+ AM_minOutWindowScale();
+ else if (scale_mtof > max_scale_mtof)
+ AM_maxOutWindowScale();
+ else
+ AM_activateNewScale();
}
void AM_doFollowPlayer(void)
{
- if (f_oldloc.x != plr->mo->x || f_oldloc.y != plr->mo->y)
- {
+ if (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;
- m_x = FTOM(MTOF(plr->mo->x)) - m_w/2;
- m_y = FTOM(MTOF(plr->mo->y)) - m_h/2;
- m_x2 = m_x + m_w;
- m_y2 = m_y + m_h;
+ m_x = FTOM(MTOF(plr->mo->x)) - m_w / 2;
+ m_y = FTOM(MTOF(plr->mo->y)) - m_h / 2;
+ m_x2 = m_x + m_w;
+ m_y2 = m_y + m_h;
- // do the parallax parchment scrolling.
+ // do the parallax parchment scrolling.
/*
dmapx = (MTOF(plr->mo->x)-MTOF(f_oldloc.x)); //fixed point
dmapy = (MTOF(f_oldloc.y)-MTOF(plr->mo->y));
@@ -633,9 +683,9 @@
while(mapystart < 0)
mapystart += finit_height;
*/
- f_oldloc.x = plr->mo->x;
- f_oldloc.y = plr->mo->y;
- }
+ f_oldloc.x = plr->mo->x;
+ f_oldloc.y = plr->mo->y;
+ }
}
// Ripped out for Heretic
@@ -657,21 +707,25 @@
}
*/
-void AM_Ticker (void)
+void AM_Ticker(void)
{
- if (!automapactive) return;
+ if (!automapactive)
+ return;
- amclock++;
+ amclock++;
- if (followplayer) AM_doFollowPlayer();
+ if (followplayer)
+ AM_doFollowPlayer();
- // Change the zoom if necessary
- if (ftom_zoommul != FRACUNIT) AM_changeWindowScale();
+ // 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
+ // Change x,y location
+ if (m_paninc.x || m_paninc.y)
+ AM_changeWindowLoc();
+ // Update light level
// AM_updateLightLev();
}
@@ -678,57 +732,59 @@
void AM_clearFB(int color)
{
- int i, j;
- int dmapx;
- int dmapy;
+ int i, j;
+ int dmapx;
+ int dmapy;
- if(followplayer)
- {
- dmapx = (MTOF(plr->mo->x)-MTOF(oldplr.x)); //fixed point
- dmapy = (MTOF(oldplr.y)-MTOF(plr->mo->y));
+ if (followplayer)
+ {
+ dmapx = (MTOF(plr->mo->x) - MTOF(oldplr.x)); //fixed point
+ dmapy = (MTOF(oldplr.y) - MTOF(plr->mo->y));
- oldplr.x = plr->mo->x;
- oldplr.y = plr->mo->y;
-// if(f_oldloc.x == MAXINT) //to eliminate an error when the user first
-// dmapx=0; //goes into the automap.
- mapxstart += dmapx>>1;
- mapystart += dmapy>>1;
+ oldplr.x = plr->mo->x;
+ oldplr.y = plr->mo->y;
+// if(f_oldloc.x == MAXINT) //to eliminate an error when the user first
+// dmapx=0; //goes into the automap.
+ mapxstart += dmapx >> 1;
+ mapystart += dmapy >> 1;
- while(mapxstart >= finit_width)
- mapxstart -= finit_width;
- while(mapxstart < 0)
- mapxstart += finit_width;
- while(mapystart >= finit_height)
- mapystart -= finit_height;
- while(mapystart < 0)
- mapystart += finit_height;
- }
- else
- {
- mapxstart += (MTOF(m_paninc.x)>>1);
- mapystart -= (MTOF(m_paninc.y)>>1);
- if(mapxstart >= finit_width)
- mapxstart -= finit_width;
- if(mapxstart < 0)
- mapxstart += finit_width;
- if(mapystart >= finit_height)
- mapystart -= finit_height;
- if(mapystart < 0)
- mapystart += finit_height;
- }
+ while (mapxstart >= finit_width)
+ mapxstart -= finit_width;
+ while (mapxstart < 0)
+ mapxstart += finit_width;
+ while (mapystart >= finit_height)
+ mapystart -= finit_height;
+ while (mapystart < 0)
+ mapystart += finit_height;
+ }
+ else
+ {
+ mapxstart += (MTOF(m_paninc.x) >> 1);
+ mapystart -= (MTOF(m_paninc.y) >> 1);
+ if (mapxstart >= finit_width)
+ mapxstart -= finit_width;
+ if (mapxstart < 0)
+ mapxstart += finit_width;
+ if (mapystart >= finit_height)
+ mapystart -= finit_height;
+ if (mapystart < 0)
+ mapystart += finit_height;
+ }
+
+ //blit the automap background to the screen.
+ j = mapystart * finit_width;
+ for (i = 0; i < finit_height; i++)
+ {
+ memcpy(screen + i * finit_width, maplump + j + mapxstart,
+ finit_width - mapxstart);
+ memcpy(screen + i * finit_width + finit_width - mapxstart,
+ maplump + j, mapxstart);
+ j += finit_width;
+ if (j >= finit_height * finit_width)
+ j = 0;
+ }
- //blit the automap background to the screen.
- j=mapystart*finit_width;
- for(i=0;i<finit_height;i++)
- {
- memcpy(screen+i*finit_width, maplump+j+mapxstart, finit_width-mapxstart);
- memcpy(screen+i*finit_width+finit_width-mapxstart, maplump+j, mapxstart);
- j += finit_width;
- if(j >= finit_height*finit_width)
- j=0;
- }
-
-// memcpy(screen, maplump, finit_width*finit_height);
+// memcpy(screen, maplump, finit_width*finit_height);
// memset(fb, color, f_w*f_h);
}
@@ -736,12 +792,13 @@
// faster reject and precalculated slopes. If I need the speed, will
// hash algorithm to the common cases.
-boolean AM_clipMline(mline_t *ml, fline_t *fl)
+boolean AM_clipMline(mline_t * ml, fline_t * fl)
{
- enum { LEFT=1, RIGHT=2, BOTTOM=4, TOP=8 };
- register outcode1 = 0, outcode2 = 0, outside;
- fpoint_t tmp;
- int dx, dy;
+ enum
+ { LEFT = 1, RIGHT = 2, BOTTOM = 4, TOP = 8 };
+ register outcode1 = 0, outcode2 = 0, outside;
+ fpoint_t tmp;
+ int dx, dy;
#define DOOUTCODE(oc, mx, my) \
(oc) = 0; \
@@ -750,155 +807,179 @@
if ((mx) < 0) (oc) |= LEFT; \
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) outcode1 = BOTTOM;
- if (ml->b.y > m_y2) outcode2 = TOP;
- else if (ml->b.y < m_y) outcode2 = BOTTOM;
- if (outcode1 & outcode2) return false; // trivially outside
+ // do trivial rejects and outcodes
+ if (ml->a.y > m_y2)
+ outcode1 = TOP;
+ else if (ml->a.y < m_y)
+ outcode1 = BOTTOM;
+ if (ml->b.y > m_y2)
+ outcode2 = TOP;
+ else if (ml->b.y < m_y)
+ outcode2 = BOTTOM;
+ if (outcode1 & outcode2)
+ return false; // trivially outside
- if (ml->a.x < m_x) outcode1 |= LEFT;
- else if (ml->a.x > m_x2) outcode1 |= RIGHT;
- if (ml->b.x < m_x) outcode2 |= LEFT;
- else if (ml->b.x > m_x2) outcode2 |= RIGHT;
- if (outcode1 & outcode2) return false; // trivially outside
+ if (ml->a.x < m_x)
+ outcode1 |= LEFT;
+ else if (ml->a.x > m_x2)
+ outcode1 |= RIGHT;
+ if (ml->b.x < m_x)
+ outcode2 |= LEFT;
+ else if (ml->b.x > m_x2)
+ outcode2 |= RIGHT;
+ if (outcode1 & outcode2)
+ return false; // trivially outside
- // 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);
- fl->b.y = CYMTOF(ml->b.y);
- DOOUTCODE(outcode1, fl->a.x, fl->a.y);
- DOOUTCODE(outcode2, fl->b.x, fl->b.y);
- if (outcode1 & outcode2) 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);
+ fl->b.y = CYMTOF(ml->b.y);
+ DOOUTCODE(outcode1, fl->a.x, fl->a.y);
+ DOOUTCODE(outcode2, fl->b.x, fl->b.y);
+ if (outcode1 & outcode2)
+ return false;
- 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)
+ while (outcode1 | outcode2)
{
- dy = fl->a.y - fl->b.y;
- dx = fl->b.x - fl->a.x;
- tmp.x = fl->a.x + (dx*(fl->a.y))/dy;
- tmp.y = 0;
+ // 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;
+ dx = fl->b.x - fl->a.x;
+ tmp.x = fl->a.x + (dx * (fl->a.y)) / dy;
+ tmp.y = 0;
+ }
+ else if (outside & BOTTOM)
+ {
+ dy = fl->a.y - fl->b.y;
+ dx = fl->b.x - fl->a.x;
+ tmp.x = fl->a.x + (dx * (fl->a.y - f_h)) / dy;
+ tmp.y = f_h - 1;
+ }
+ else if (outside & RIGHT)
+ {
+ dy = fl->b.y - fl->a.y;
+ dx = fl->b.x - fl->a.x;
+ tmp.y = fl->a.y + (dy * (f_w - 1 - fl->a.x)) / dx;
+ tmp.x = f_w - 1;
+ }
+ else if (outside & LEFT)
+ {
+ dy = fl->b.y - fl->a.y;
+ dx = fl->b.x - fl->a.x;
+ tmp.y = fl->a.y + (dy * (-fl->a.x)) / dx;
+ tmp.x = 0;
+ }
+ if (outside == outcode1)
+ {
+ fl->a = tmp;
+ DOOUTCODE(outcode1, fl->a.x, fl->a.y);
+ }
+ else
+ {
+ fl->b = tmp;
+ DOOUTCODE(outcode2, fl->b.x, fl->b.y);
+ }
+ if (outcode1 & outcode2)
+ return false; // trivially outside
}
- else if (outside & BOTTOM)
- {
- dy = fl->a.y - fl->b.y;
- dx = fl->b.x - fl->a.x;
- tmp.x = fl->a.x + (dx*(fl->a.y-f_h))/dy;
- tmp.y = f_h-1;
- }
- else if (outside & RIGHT)
- {
- dy = fl->b.y - fl->a.y;
- dx = fl->b.x - fl->a.x;
- tmp.y = fl->a.y + (dy*(f_w-1 - fl->a.x))/dx;
- tmp.x = f_w-1;
- }
- else if (outside & LEFT)
- {
- dy = fl->b.y - fl->a.y;
- dx = fl->b.x - fl->a.x;
- tmp.y = fl->a.y + (dy*(-fl->a.x))/dx;
- tmp.x = 0;
- }
- if (outside == outcode1)
- {
- fl->a = tmp;
- DOOUTCODE(outcode1, fl->a.x, fl->a.y);
- } else {
- fl->b = tmp;
- DOOUTCODE(outcode2, fl->b.x, fl->b.y);
- }
- if (outcode1 & outcode2) return false; // trivially outside
- }
- return true;
+ return true;
}
+
#undef DOOUTCODE
// Classic Bresenham w/ whatever optimizations I need for speed
-void AM_drawFline(fline_t *fl, int color)
+void AM_drawFline(fline_t * fl, int color)
{
- register int x, y, dx, dy, sx, sy, ax, ay, d;
- static fuck = 0;
+ register int x, y, dx, dy, sx, sy, ax, ay, d;
+ static fuck = 0;
- switch(color)
- {
- case WALLCOLORS:
- DrawWuLine(fl->a.x, fl->a.y, fl->b.x, fl->b.y, &antialias[0][0], 8, 3);
- break;
- case FDWALLCOLORS:
- DrawWuLine(fl->a.x, fl->a.y, fl->b.x, fl->b.y, &antialias[1][0], 8, 3);
- break;
- case CDWALLCOLORS:
- DrawWuLine(fl->a.x, fl->a.y, fl->b.x, fl->b.y, &antialias[2][0], 8, 3);
- break;
- default:
- {
- // 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
- || fl->b.y < 0 || fl->b.y >= f_h)
- {
- fprintf(stderr, "fuck %d \r", fuck++);
- return;
- }
+ switch (color)
+ {
+ case WALLCOLORS:
+ DrawWuLine(fl->a.x, fl->a.y, fl->b.x, fl->b.y, &antialias[0][0],
+ 8, 3);
+ break;
+ case FDWALLCOLORS:
+ DrawWuLine(fl->a.x, fl->a.y, fl->b.x, fl->b.y, &antialias[1][0],
+ 8, 3);
+ break;
+ case CDWALLCOLORS:
+ DrawWuLine(fl->a.x, fl->a.y, fl->b.x, fl->b.y, &antialias[2][0],
+ 8, 3);
+ break;
+ default:
+ {
+ // 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
+ || fl->b.y < 0 || fl->b.y >= f_h)
+ {
+ fprintf(stderr, "fuck %d \r", fuck++);
+ return;
+ }
- #define DOT(xx,yy,cc) fb[(yy)*f_w+(xx)]=(cc) //the MACRO!
+#define DOT(xx,yy,cc) fb[(yy)*f_w+(xx)]=(cc) //the MACRO!
- dx = fl->b.x - fl->a.x;
- ax = 2 * (dx<0 ? -dx : dx);
- sx = dx<0 ? -1 : 1;
+ dx = fl->b.x - fl->a.x;
+ ax = 2 * (dx < 0 ? -dx : dx);
+ sx = dx < 0 ? -1 : 1;
- dy = fl->b.y - fl->a.y;
- ay = 2 * (dy<0 ? -dy : dy);
- sy = dy<0 ? -1 : 1;
+ dy = fl->b.y - fl->a.y;
+ ay = 2 * (dy < 0 ? -dy : dy);
+ sy = dy < 0 ? -1 : 1;
- x = fl->a.x;
- y = fl->a.y;
+ x = fl->a.x;
+ y = fl->a.y;
- if (ax > ay)
- {
- d = ay - ax/2;
- while (1)
- {
- DOT(x,y,color);
- if (x == fl->b.x) return;
- if (d>=0)
- {
- y += sy;
- d -= ax;
- }
- x += sx;
- d += ay;
- }
- } else {
- d = ax - ay/2;
- while (1)
- {
- DOT(x, y, color);
- if (y == fl->b.y) return;
- if (d >= 0)
- {
- x += sx;
- d -= ay;
- }
- y += sy;
- d += ax;
- }
- }
- }
- }
-}
+ if (ax > ay)
+ {
+ d = ay - ax / 2;
+ while (1)
+ {
+ DOT(x, y, color);
+ if (x == fl->b.x)
+ return;
+ if (d >= 0)
+ {
+ y += sy;
+ d -= ax;
+ }
+ x += sx;
+ d += ay;
+ }
+ }
+ else
+ {
+ d = ax - ay / 2;
+ while (1)
+ {
+ DOT(x, y, color);
+ if (y == fl->b.y)
+ return;
+ if (d >= 0)
+ {
+ x += sx;
+ d -= ay;
+ }
+ y += sy;
+ d += ax;
+ }
+ }
+ }
+ }
+}
/* Wu antialiased line drawer.
* (X0,Y0),(X1,Y1) = line to draw
@@ -909,375 +990,416 @@
* IntensityBits = log base 2 of NumLevels; the # of bits used to describe
* the intensity of the drawing color. 2**IntensityBits==NumLevels
*/
-void PUTDOT(short xx,short yy,byte *cc, byte *cm)
+void PUTDOT(short xx, short yy, byte * cc, byte * cm)
{
- static int oldyy;
- static int oldyyshifted;
- byte *oldcc=cc;
+ static int oldyy;
+ static int oldyyshifted;
+ byte *oldcc = cc;
- if(xx < 32)
- cc += 7-(xx>>2);
- else if(xx > (finit_width - 32))
- cc += 7-((finit_width-xx) >> 2);
-// if(cc==oldcc) //make sure that we don't double fade the corners.
-// {
- if(yy < 32)
- cc += 7-(yy>>2);
- else if(yy > (finit_height - 32))
- cc += 7-((finit_height-yy) >> 2);
-// }
- if(cc > cm && cm != NULL)
- {
- cc = cm;
- }
- else if(cc > oldcc+6) // don't let the color escape from the fade table...
- {
- cc=oldcc+6;
- }
- if(yy == oldyy+1)
- {
- oldyy++;
- oldyyshifted += 320;
- }
- else if(yy == oldyy-1)
- {
- oldyy--;
- oldyyshifted -= 320;
- }
- else if(yy != oldyy)
- {
- oldyy = yy;
- oldyyshifted = yy*320;
- }
- fb[oldyyshifted+xx] = *(cc);
-// fb[(yy)*f_w+(xx)]=*(cc);
+ if (xx < 32)
+ cc += 7 - (xx >> 2);
+ else if (xx > (finit_width - 32))
+ cc += 7 - ((finit_width - xx) >> 2);
+// if(cc==oldcc) //make sure that we don't double fade the corners.
+// {
+ if (yy < 32)
+ cc += 7 - (yy >> 2);
+ else if (yy > (finit_height - 32))
+ cc += 7 - ((finit_height - yy) >> 2);
+// }
+ if (cc > cm && cm != NULL)
+ {
+ cc = cm;
+ }
+ else if (cc > oldcc + 6) // don't let the color escape from the fade table...
+ {
+ cc = oldcc + 6;
+ }
+ if (yy == oldyy + 1)
+ {
+ oldyy++;
+ oldyyshifted += 320;
+ }
+ else if (yy == oldyy - 1)
+ {
+ oldyy--;
+ oldyyshifted -= 320;
+ }
+ else if (yy != oldyy)
+ {
+ oldyy = yy;
+ oldyyshifted = yy * 320;
+ }
+ fb[oldyyshifted + xx] = *(cc);
+// fb[(yy)*f_w+(xx)]=*(cc);
}
-void DrawWuLine(int X0, int Y0, int X1, int Y1, byte *BaseColor,
- int NumLevels, unsigned short IntensityBits)
+void DrawWuLine(int X0, int Y0, int X1, int Y1, byte * BaseColor,
+ int NumLevels, unsigned short IntensityBits)
{
- unsigned short IntensityShift, ErrorAdj, ErrorAcc;
- unsigned short ErrorAccTemp, Weighting, WeightingComplementMask;
- short DeltaX, DeltaY, Temp, XDir;
+ unsigned short IntensityShift, ErrorAdj, ErrorAcc;
+ unsigned short ErrorAccTemp, Weighting, WeightingComplementMask;
+ short DeltaX, DeltaY, Temp, XDir;
- /* Make sure the line runs top to bottom */
- if (Y0 > Y1) {
- Temp = Y0; Y0 = Y1; Y1 = Temp;
- Temp = X0; X0 = X1; X1 = Temp;
- }
- /* Draw the initial pixel, which is always exactly intersected by
- the line and so needs no weighting */
- PUTDOT(X0, Y0, &BaseColor[0], NULL);
+ /* Make sure the line runs top to bottom */
+ if (Y0 > Y1)
+ {
+ Temp = Y0;
+ Y0 = Y1;
+ Y1 = Temp;
+ Temp = X0;
+ X0 = X1;
+ X1 = Temp;
+ }
+ /* Draw the initial pixel, which is always exactly intersected by
+ the line and so needs no weighting */
+ PUTDOT(X0, Y0, &BaseColor[0], NULL);
- if ((DeltaX = X1 - X0) >= 0) {
- XDir = 1;
- } else {
- XDir = -1;
- DeltaX = -DeltaX; /* make DeltaX positive */
- }
- /* Special-case horizontal, vertical, and diagonal lines, which
- require no weighting because they go right through the center of
- every pixel */
- if ((DeltaY = Y1 - Y0) == 0) {
- /* Horizontal line */
- while (DeltaX-- != 0) {
- X0 += XDir;
- PUTDOT(X0, Y0, &BaseColor[0], NULL);
- }
- return;
- }
- if (DeltaX == 0) {
- /* Vertical line */
- do {
- Y0++;
- PUTDOT(X0, Y0, &BaseColor[0], NULL);
- } while (--DeltaY != 0);
- return;
- }
- //diagonal line.
- if (DeltaX == DeltaY) {
- do {
- X0 += XDir;
- Y0++;
- PUTDOT(X0, Y0, &BaseColor[0], NULL);
- } while (--DeltaY != 0);
- return;
- }
- /* Line is not horizontal, diagonal, or vertical */
- ErrorAcc = 0; /* initialize the line error accumulator to 0 */
- /* # of bits by which to shift ErrorAcc to get intensity level */
- IntensityShift = 16 - IntensityBits;
- /* Mask used to flip all bits in an intensity weighting, producing the
- result (1 - intensity weighting) */
- WeightingComplementMask = NumLevels - 1;
- /* Is this an X-major or Y-major line? */
- if (DeltaY > DeltaX) {
- /* Y-major line; calculate 16-bit fixed-point fractional part of a
- pixel that X advances each time Y advances 1 pixel, truncating the
- result so that we won't overrun the endpoint along the X axis */
- ErrorAdj = ((unsigned long) DeltaX << 16) / (unsigned long) DeltaY;
- /* Draw all pixels other than the first and last */
- while (--DeltaY) {
- ErrorAccTemp = ErrorAcc; /* remember currrent accumulated error */
- ErrorAcc += ErrorAdj; /* calculate error for next pixel */
- if (ErrorAcc <= ErrorAccTemp) {
- /* The error accumulator turned over, so advance the X coord */
+ if ((DeltaX = X1 - X0) >= 0)
+ {
+ XDir = 1;
+ }
+ else
+ {
+ XDir = -1;
+ DeltaX = -DeltaX; /* make DeltaX positive */
+ }
+ /* Special-case horizontal, vertical, and diagonal lines, which
+ require no weighting because they go right through the center of
+ every pixel */
+ if ((DeltaY = Y1 - Y0) == 0)
+ {
+ /* Horizontal line */
+ while (DeltaX-- != 0)
+ {
X0 += XDir;
- }
- Y0++; /* Y-major, so always advance Y */
- /* The IntensityBits most significant bits of ErrorAcc give us the
- intensity weighting for this pixel, and the complement of the
- weighting for the paired pixel */
- Weighting = ErrorAcc >> IntensityShift;
- PUTDOT(X0, Y0, &BaseColor[Weighting], &BaseColor[7]);
- PUTDOT(X0 + XDir, Y0,
- &BaseColor[(Weighting ^ WeightingComplementMask)], &BaseColor[7]);
- }
- /* Draw the final pixel, which is always exactly intersected by the line
- and so needs no weighting */
- PUTDOT(X1, Y1, &BaseColor[0], NULL);
- return;
- }
- /* It's an X-major line; calculate 16-bit fixed-point fractional part of a
- pixel that Y advances each time X advances 1 pixel, truncating the
- result to avoid overrunning the endpoint along the X axis */
- ErrorAdj = ((unsigned long) DeltaY << 16) / (unsigned long) DeltaX;
- /* Draw all pixels other than the first and last */
- while (--DeltaX) {
- ErrorAccTemp = ErrorAcc; /* remember currrent accumulated error */
- ErrorAcc += ErrorAdj; /* calculate error for next pixel */
- if (ErrorAcc <= ErrorAccTemp) {
- /* The error accumulator turned over, so advance the Y coord */
- Y0++;
- }
- X0 += XDir; /* X-major, so always advance X */
- /* The IntensityBits most significant bits of ErrorAcc give us the
- intensity weighting for this pixel, and the complement of the
- weighting for the paired pixel */
- Weighting = ErrorAcc >> IntensityShift;
- PUTDOT(X0, Y0, &BaseColor[Weighting], &BaseColor[7]);
- PUTDOT(X0, Y0 + 1,
- &BaseColor[(Weighting ^ WeightingComplementMask)], &BaseColor[7]);
+ PUTDOT(X0, Y0, &BaseColor[0], NULL);
+ }
+ return;
+ }
+ if (DeltaX == 0)
+ {
+ /* Vertical line */
+ do
+ {
+ Y0++;
+ PUTDOT(X0, Y0, &BaseColor[0], NULL);
+ }
+ while (--DeltaY != 0);
+ return;
+ }
+ //diagonal line.
+ if (DeltaX == DeltaY)
+ {
+ do
+ {
+ X0 += XDir;
+ Y0++;
+ PUTDOT(X0, Y0, &BaseColor[0], NULL);
+ }
+ while (--DeltaY != 0);
+ return;
+ }
+ /* Line is not horizontal, diagonal, or vertical */
+ ErrorAcc = 0; /* initialize the line error accumulator to 0 */
+ /* # of bits by which to shift ErrorAcc to get intensity level */
+ IntensityShift = 16 - IntensityBits;
+ /* Mask used to flip all bits in an intensity weighting, producing the
+ result (1 - intensity weighting) */
+ WeightingComplementMask = NumLevels - 1;
+ /* Is this an X-major or Y-major line? */
+ if (DeltaY > DeltaX)
+ {
+ /* Y-major line; calculate 16-bit fixed-point fractional part of a
+ pixel that X advances each time Y advances 1 pixel, truncating the
+ result so that we won't overrun the endpoint along the X axis */
+ ErrorAdj = ((unsigned long) DeltaX << 16) / (unsigned long) DeltaY;
+ /* Draw all pixels other than the first and last */
+ while (--DeltaY)
+ {
+ ErrorAccTemp = ErrorAcc; /* remember currrent accumulated error */
+ ErrorAcc += ErrorAdj; /* calculate error for next pixel */
+ if (ErrorAcc <= ErrorAccTemp)
+ {
+ /* The error accumulator turned over, so advance the X coord */
+ X0 += XDir;
+ }
+ Y0++; /* Y-major, so always advance Y */
+ /* The IntensityBits most significant bits of ErrorAcc give us the
+ intensity weighting for this pixel, and the complement of the
+ weighting for the paired pixel */
+ Weighting = ErrorAcc >> IntensityShift;
+ PUTDOT(X0, Y0, &BaseColor[Weighting], &BaseColor[7]);
+ PUTDOT(X0 + XDir, Y0,
+ &BaseColor[(Weighting ^ WeightingComplementMask)],
+ &BaseColor[7]);
+ }
+ /* Draw the final pixel, which is always exactly intersected by the line
+ and so needs no weighting */
+ PUTDOT(X1, Y1, &BaseColor[0], NULL);
+ return;
+ }
+ /* It's an X-major line; calculate 16-bit fixed-point fractional part of a
+ pixel that Y advances each time X advances 1 pixel, truncating the
+ result to avoid overrunning the endpoint along the X axis */
+ ErrorAdj = ((unsigned long) DeltaY << 16) / (unsigned long) DeltaX;
+ /* Draw all pixels other than the first and last */
+ while (--DeltaX)
+ {
+ ErrorAccTemp = ErrorAcc; /* remember currrent accumulated error */
+ ErrorAcc += ErrorAdj; /* calculate error for next pixel */
+ if (ErrorAcc <= ErrorAccTemp)
+ {
+ /* The error accumulator turned over, so advance the Y coord */
+ Y0++;
+ }
+ X0 += XDir; /* X-major, so always advance X */
+ /* The IntensityBits most significant bits of ErrorAcc give us the
+ intensity weighting for this pixel, and the complement of the
+ weighting for the paired pixel */
+ Weighting = ErrorAcc >> IntensityShift;
+ PUTDOT(X0, Y0, &BaseColor[Weighting], &BaseColor[7]);
+ PUTDOT(X0, Y0 + 1,
+ &BaseColor[(Weighting ^ WeightingComplementMask)],
+ &BaseColor[7]);
- }
- /* Draw the final pixel, which is always exactly intersected by the line
- and so needs no weighting */
- PUTDOT(X1, Y1, &BaseColor[0], NULL);
+ }
+ /* Draw the final pixel, which is always exactly intersected by the line
+ and so needs no weighting */
+ PUTDOT(X1, Y1, &BaseColor[0], NULL);
}
-void AM_drawMline(mline_t *ml, int color)
+void AM_drawMline(mline_t * ml, int color)
{
- static fline_t fl;
+ static fline_t fl;
- if (AM_clipMline(ml, &fl))
- AM_drawFline(&fl, color); // draws it on frame buffer using fb coords
+ if (AM_clipMline(ml, &fl))
+ AM_drawFline(&fl, color); // draws it on frame buffer using fb coords
}
void AM_drawGrid(int color)
{
- fixed_t x, y;
- fixed_t start, end;
- mline_t ml;
+ 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;
+ // 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))
- {
- ml.a.x = x;
- ml.b.x = x;
- AM_drawMline(&ml, color);
- }
+ // draw vertical gridlines
+ ml.a.y = m_y;
+ ml.b.y = m_y + m_h;
+ for (x = start; x < end; x += (MAPBLOCKUNITS << FRACBITS))
+ {
+ ml.a.x = x;
+ ml.b.x = x;
+ 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;
+ // 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))
- {
- ml.a.y = y;
- ml.b.y = y;
- AM_drawMline(&ml, color);
- }
+ // draw horizontal gridlines
+ ml.a.x = m_x;
+ ml.b.x = m_x + m_w;
+ for (y = start; y < end; y += (MAPBLOCKUNITS << FRACBITS))
+ {
+ ml.a.y = y;
+ ml.b.y = y;
+ AM_drawMline(&ml, color);
+ }
}
void AM_drawWalls(void)
{
- int i;
- static mline_t l;
+ int i;
+ static mline_t l;
- for (i=0;i<numlines;i++)
- {
- l.a.x = lines[i].v1->x;
- l.a.y = lines[i].v1->y;
- l.b.x = lines[i].v2->x;
- l.b.y = lines[i].v2->y;
- if (cheating || (lines[i].flags & ML_MAPPED))
+ for (i = 0; i < numlines; i++)
{
- if ((lines[i].flags & LINE_NEVERSEE) && !cheating)
- continue;
- if (!lines[i].backsector)
- {
- AM_drawMline(&l, WALLCOLORS+lightlev);
- } else {
- if (lines[i].special == 39)
- { // teleporters
- AM_drawMline(&l, WALLCOLORS+WALLRANGE/2);
- } else if (lines[i].flags & ML_SECRET) // secret door
- {
- if (cheating) AM_drawMline(&l, 0);
- else AM_drawMline(&l, WALLCOLORS+lightlev);
- }
- else if(lines[i].special > 25 && lines[i].special < 35)
- {
- switch(lines[i].special)
- {
- case 26:
- case 32:
- AM_drawMline(&l, BLUEKEY);
- break;
- case 27:
- case 34:
- AM_drawMline(&l, YELLOWKEY);
- break;
- case 28:
- case 33:
- AM_drawMline(&l, GREENKEY);
- break;
- default:
- break;
- }
- }
- else if (lines[i].backsector->floorheight
- != lines[i].frontsector->floorheight) {
- AM_drawMline(&l, FDWALLCOLORS + lightlev); // floor level change
- } else if (lines[i].backsector->ceilingheight
- != lines[i].frontsector->ceilingheight) {
- AM_drawMline(&l, CDWALLCOLORS+lightlev); // ceiling level change
- } else if (cheating) {
- AM_drawMline(&l, TSWALLCOLORS+lightlev);
- }
- }
- } else if (plr->powers[pw_allmap])
- {
- if (!(lines[i].flags & LINE_NEVERSEE)) AM_drawMline(&l, GRAYS+3);
- }
- }
+ l.a.x = lines[i].v1->x;
+ l.a.y = lines[i].v1->y;
+ l.b.x = lines[i].v2->x;
+ l.b.y = lines[i].v2->y;
+ if (cheating || (lines[i].flags & ML_MAPPED))
+ {
+ if ((lines[i].flags & LINE_NEVERSEE) && !cheating)
+ continue;
+ if (!lines[i].backsector)
+ {
+ AM_drawMline(&l, WALLCOLORS + lightlev);
+ }
+ else
+ {
+ if (lines[i].special == 39)
+ { // teleporters
+ AM_drawMline(&l, WALLCOLORS + WALLRANGE / 2);
+ }
+ else if (lines[i].flags & ML_SECRET) // secret door
+ {
+ if (cheating)
+ AM_drawMline(&l, 0);
+ else
+ AM_drawMline(&l, WALLCOLORS + lightlev);
+ }
+ else if (lines[i].special > 25 && lines[i].special < 35)
+ {
+ switch (lines[i].special)
+ {
+ case 26:
+ case 32:
+ AM_drawMline(&l, BLUEKEY);
+ break;
+ case 27:
+ case 34:
+ AM_drawMline(&l, YELLOWKEY);
+ break;
+ case 28:
+ case 33:
+ AM_drawMline(&l, GREENKEY);
+ break;
+ default:
+ break;
+ }
+ }
+ else if (lines[i].backsector->floorheight
+ != lines[i].frontsector->floorheight)
+ {
+ AM_drawMline(&l, FDWALLCOLORS + lightlev); // floor level change
+ }
+ else if (lines[i].backsector->ceilingheight
+ != lines[i].frontsector->ceilingheight)
+ {
+ AM_drawMline(&l, CDWALLCOLORS + lightlev); // ceiling level change
+ }
+ else if (cheating)
+ {
+ AM_drawMline(&l, TSWALLCOLORS + lightlev);
+ }
+ }
+ }
+ else if (plr->powers[pw_allmap])
+ {
+ if (!(lines[i].flags & LINE_NEVERSEE))
+ AM_drawMline(&l, GRAYS + 3);
+ }
+ }
}
-void AM_rotate(fixed_t *x, fixed_t *y, angle_t a)
+void AM_rotate(fixed_t * x, fixed_t * y, angle_t a)
{
- fixed_t tmpx;
+ fixed_t tmpx;
- tmpx = FixedMul(*x,finecosine[a>>ANGLETOFINESHIFT])
- - FixedMul(*y,finesine[a>>ANGLETOFINESHIFT]);
- *y = FixedMul(*x,finesine[a>>ANGLETOFINESHIFT])
- + FixedMul(*y,finecosine[a>>ANGLETOFINESHIFT]);
- *x = tmpx;
+ tmpx = FixedMul(*x, finecosine[a >> ANGLETOFINESHIFT])
+ - FixedMul(*y, finesine[a >> ANGLETOFINESHIFT]);
+ *y = FixedMul(*x, finesine[a >> ANGLETOFINESHIFT])
+ + FixedMul(*y, finecosine[a >> ANGLETOFINESHIFT]);
+ *x = tmpx;
}
-void AM_drawLineCharacter(mline_t *lineguy, int lineguylines, fixed_t scale,
- angle_t angle, int color, fixed_t x, fixed_t y)
+void AM_drawLineCharacter(mline_t * lineguy, int lineguylines, fixed_t scale,
+ angle_t angle, int color, fixed_t x, fixed_t y)
{
- int i;
- mline_t l;
+ int i;
+ mline_t l;
- for (i=0;i<lineguylines;i++)
- {
- l.a.x = lineguy[i].a.x;
- l.a.y = lineguy[i].a.y;
- if (scale)
+ for (i = 0; i < lineguylines; i++)
{
- l.a.x = FixedMul(scale, l.a.x);
- l.a.y = FixedMul(scale, l.a.y);
- }
- if (angle) AM_rotate(&l.a.x, &l.a.y, angle);
- l.a.x += x;
- l.a.y += y;
+ l.a.x = lineguy[i].a.x;
+ l.a.y = lineguy[i].a.y;
+ if (scale)
+ {
+ l.a.x = FixedMul(scale, l.a.x);
+ l.a.y = FixedMul(scale, l.a.y);
+ }
+ if (angle)
+ AM_rotate(&l.a.x, &l.a.y, angle);
+ l.a.x += x;
+ l.a.y += y;
- l.b.x = lineguy[i].b.x;
- l.b.y = lineguy[i].b.y;
- if (scale)
- {
- l.b.x = FixedMul(scale, l.b.x);
- l.b.y = FixedMul(scale, l.b.y);
+ l.b.x = lineguy[i].b.x;
+ l.b.y = lineguy[i].b.y;
+ if (scale)
+ {
+ l.b.x = FixedMul(scale, l.b.x);
+ l.b.y = FixedMul(scale, l.b.y);
+ }
+ if (angle)
+ AM_rotate(&l.b.x, &l.b.y, angle);
+ l.b.x += x;
+ l.b.y += y;
+
+ AM_drawMline(&l, color);
}
- if (angle) AM_rotate(&l.b.x, &l.b.y, angle);
- l.b.x += x;
- l.b.y += y;
- AM_drawMline(&l, color);
- }
-
}
void AM_drawPlayers(void)
{
- int i;
- player_t *p;
- static int their_colors[] = { GREENKEY, YELLOWKEY, BLOODRED, BLUEKEY };
- int their_color = -1;
- int color;
+ int i;
+ player_t *p;
+ static int their_colors[] = { GREENKEY, YELLOWKEY, BLOODRED, BLUEKEY };
+ int their_color = -1;
+ int color;
- if (!netgame)
- {
- /*
- if (cheating) AM_drawLineCharacter(cheat_player_arrow, NUMCHEATPLYRLINES, 0,
- plr->mo->angle, WHITE, plr->mo->x, plr->mo->y);
- */ //cheat key player pointer is the same as non-cheat pointer..
+ if (!netgame)
+ {
+ /*
+ if (cheating) AM_drawLineCharacter(cheat_player_arrow, NUMCHEATPLYRLINES, 0,
+ plr->mo->angle, WHITE, plr->mo->x, plr->mo->y);
+ *///cheat key player pointer is the same as non-cheat pointer..
- AM_drawLineCharacter(player_arrow, NUMPLYRLINES, 0, plr->mo->angle,
- WHITE, plr->mo->x, plr->mo->y);
- return;
- }
+ AM_drawLineCharacter(player_arrow, NUMPLYRLINES, 0, plr->mo->angle,
+ WHITE, plr->mo->x, plr->mo->y);
+ return;
+ }
- for (i=0;i<MAXPLAYERS;i++)
- {
- their_color++;
- p = &players[i];
- if(deathmatch && !singledemo && p != plr)
- {
- continue;
- }
- if (!playeringame[i]) continue;
- if (p->powers[pw_invisibility]) color = 102; // *close* to the automap color
- else color = their_colors[their_color];
- AM_drawLineCharacter(player_arrow, NUMPLYRLINES, 0, p->mo->angle,
- color, p->mo->x, p->mo->y);
- }
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ their_color++;
+ p = &players[i];
+ if (deathmatch && !singledemo && p != plr)
+ {
+ continue;
+ }
+ if (!playeringame[i])
+ continue;
+ if (p->powers[pw_invisibility])
+ color = 102; // *close* to the automap color
+ else
+ color = their_colors[their_color];
+ AM_drawLineCharacter(player_arrow, NUMPLYRLINES, 0, p->mo->angle,
+ color, p->mo->x, p->mo->y);
+ }
}
void AM_drawThings(int colors, int colorrange)
{
- int i;
- mobj_t *t;
+ int i;
+ mobj_t *t;
- for (i=0;i<numsectors;i++)
- {
- t = sectors[i].thinglist;
- while (t)
+ for (i = 0; i < numsectors; i++)
{
- AM_drawLineCharacter(thintriangle_guy, NUMTHINTRIANGLEGUYLINES,
- 16<<FRACBITS, t->angle, colors+lightlev, t->x, t->y);
- t = t->snext;
+ t = sectors[i].thinglist;
+ while (t)
+ {
+ AM_drawLineCharacter(thintriangle_guy, NUMTHINTRIANGLEGUYLINES,
+ 16 << FRACBITS, t->angle, colors + lightlev,
+ t->x, t->y);
+ t = t->snext;
+ }
}
- }
}
/*
@@ -1302,51 +1424,54 @@
void AM_drawkeys(void)
{
- if(KeyPoints[0].x != 0 || KeyPoints[0].y != 0)
- {
- AM_drawLineCharacter(keysquare, NUMKEYSQUARELINES, 0, 0, YELLOWKEY,
- KeyPoints[0].x, KeyPoints[0].y);
- }
- if(KeyPoints[1].x != 0 || KeyPoints[1].y != 0)
- {
- AM_drawLineCharacter(keysquare, NUMKEYSQUARELINES, 0, 0, GREENKEY,
- KeyPoints[1].x, KeyPoints[1].y);
- }
- if(KeyPoints[2].x != 0 || KeyPoints[2].y != 0)
- {
- AM_drawLineCharacter(keysquare, NUMKEYSQUARELINES, 0, 0, BLUEKEY,
- KeyPoints[2].x, KeyPoints[2].y);
- }
+ if (KeyPoints[0].x != 0 || KeyPoints[0].y != 0)
+ {
+ AM_drawLineCharacter(keysquare, NUMKEYSQUARELINES, 0, 0, YELLOWKEY,
+ KeyPoints[0].x, KeyPoints[0].y);
+ }
+ if (KeyPoints[1].x != 0 || KeyPoints[1].y != 0)
+ {
+ AM_drawLineCharacter(keysquare, NUMKEYSQUARELINES, 0, 0, GREENKEY,
+ KeyPoints[1].x, KeyPoints[1].y);
+ }
+ if (KeyPoints[2].x != 0 || KeyPoints[2].y != 0)
+ {
+ AM_drawLineCharacter(keysquare, NUMKEYSQUARELINES, 0, 0, BLUEKEY,
+ KeyPoints[2].x, KeyPoints[2].y);
+ }
}
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; // single point for now
}
void AM_Drawer(void)
{
- int highestEpisode;
+ int highestEpisode;
- if (!automapactive) return;
+ if (!automapactive)
+ return;
- UpdateState |= I_FULLSCRN;
- AM_clearFB(BACKGROUND);
- if (grid) AM_drawGrid(GRIDCOLORS);
- AM_drawWalls();
- AM_drawPlayers();
- if (cheating==2) AM_drawThings(THINGCOLORS, THINGRANGE);
+ UpdateState |= I_FULLSCRN;
+ AM_clearFB(BACKGROUND);
+ if (grid)
+ AM_drawGrid(GRIDCOLORS);
+ AM_drawWalls();
+ AM_drawPlayers();
+ if (cheating == 2)
+ AM_drawThings(THINGCOLORS, THINGRANGE);
// AM_drawCrosshair(XHAIRCOLORS);
// AM_drawMarks();
- if(gameskill == sk_baby)
- {
- AM_drawkeys();
- }
- if((gameepisode < (ExtendedWAD ? 6 : 4)) && gamemap < 10)
- {
- MN_DrTextA(LevelNames[(gameepisode-1)*9+gamemap-1], 20, 145);
- }
+ if (gameskill == sk_baby)
+ {
+ AM_drawkeys();
+ }
+ if ((gameepisode < (ExtendedWAD ? 6 : 4)) && gamemap < 10)
+ {
+ MN_DrTextA(LevelNames[(gameepisode - 1) * 9 + gamemap - 1], 20, 145);
+ }
// I_Update();
// V_MarkRect(f_x, f_y, f_w, f_h);
}
--- a/src/heretic/am_map.h
+++ b/src/heretic/am_map.h
@@ -1,121 +1,143 @@
-#ifndef __AMMAP_H__
-#define __AMMAP_H__
-
-#pragma once
-
-// For use if I do walls with outsides/insides
-#define REDS 12*8
-#define REDRANGE 1//16
-#define BLUES (256-4*16+8)
-#define BLUERANGE 1//8
-#define GREENS (33*8)
-#define GREENRANGE 1//16
-#define GRAYS (5*8)
-#define GRAYSRANGE 1//16
-#define BROWNS (14*8)
-#define BROWNRANGE 1//16
-#define YELLOWS 10*8
-#define YELLOWRANGE 1
-#define BLACK 0
-#define WHITE 4*8
-#define PARCH 13*8-1
-#define BLOODRED 150
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
+#ifndef __AMMAP_H__
+#define __AMMAP_H__
+
+#pragma once
+
+// For use if I do walls with outsides/insides
+#define REDS 12*8
+#define REDRANGE 1 //16
+#define BLUES (256-4*16+8)
+#define BLUERANGE 1 //8
+#define GREENS (33*8)
+#define GREENRANGE 1 //16
+#define GRAYS (5*8)
+#define GRAYSRANGE 1 //16
+#define BROWNS (14*8)
+#define BROWNRANGE 1 //16
+#define YELLOWS 10*8
+#define YELLOWRANGE 1
+#define BLACK 0
+#define WHITE 4*8
+#define PARCH 13*8-1
+#define BLOODRED 150
#define BLUEKEY 197
#define YELLOWKEY 144
#define GREENKEY 220
-
-// Automap colors
-#define BACKGROUND PARCH
-#define YOURCOLORS WHITE
-#define YOURRANGE 0
-#define WALLCOLORS REDS
-#define WALLRANGE REDRANGE
-#define TSWALLCOLORS GRAYS
-#define TSWALLRANGE GRAYSRANGE
-#define FDWALLCOLORS BROWNS
-#define FDWALLRANGE BROWNRANGE
-#define CDWALLCOLORS YELLOWS
-#define CDWALLRANGE YELLOWRANGE
-#define THINGCOLORS GREENS
-#define THINGRANGE GREENRANGE
-#define SECRETWALLCOLORS WALLCOLORS
-#define SECRETWALLRANGE WALLRANGE
-#define GRIDCOLORS (GRAYS + GRAYSRANGE/2)
-#define GRIDRANGE 0
-#define XHAIRCOLORS GRAYS
-
-// drawing stuff
-#define FB 0
+// Automap colors
+#define BACKGROUND PARCH
+#define YOURCOLORS WHITE
+#define YOURRANGE 0
+#define WALLCOLORS REDS
+#define WALLRANGE REDRANGE
+#define TSWALLCOLORS GRAYS
+#define TSWALLRANGE GRAYSRANGE
+#define FDWALLCOLORS BROWNS
+#define FDWALLRANGE BROWNRANGE
+#define CDWALLCOLORS YELLOWS
+#define CDWALLRANGE YELLOWRANGE
+#define THINGCOLORS GREENS
+#define THINGRANGE GREENRANGE
+#define SECRETWALLCOLORS WALLCOLORS
+#define SECRETWALLRANGE WALLRANGE
+#define GRIDCOLORS (GRAYS + GRAYSRANGE/2)
+#define GRIDRANGE 0
+#define XHAIRCOLORS GRAYS
+
+// drawing stuff
+#define FB 0
+
#define KEY_TAB 9
-#define AM_PANDOWNKEY KEY_DOWNARROW
-#define AM_PANUPKEY KEY_UPARROW
-#define AM_PANRIGHTKEY KEY_RIGHTARROW
-#define AM_PANLEFTKEY KEY_LEFTARROW
-//#define AM_PANDOWNKEY SC_DOWNARROW
-//#define AM_PANUPKEY SC_UPARROW
-//#define AM_PANRIGHTKEY SC_RIGHTARROW
-//#define AM_PANLEFTKEY SC_LEFTARROW
-
-#define AM_ZOOMINKEY '='
-//#define AM_ZOOMINKEY 13
-//#define AM_ZOOMOUTKEY 12
- #define AM_ZOOMOUTKEY '-'
-#define AM_STARTKEY KEY_TAB
-#define AM_ENDKEY KEY_TAB
-#define AM_GOBIGKEY '0'
-//#define AM_GOBIGKEY 11
-//#define AM_FOLLOWKEY 33
-//#define AM_GRIDKEY 34
-#define AM_FOLLOWKEY 'f'
-#define AM_GRIDKEY 'g'
-
-#define AM_NUMMARKPOINTS 10
-
-#define AM_MSGHEADER (('a'<<24)+('m'<<16))
-#define AM_MSGENTERED (AM_MSGHEADER | ('e'<<8))
-#define AM_MSGEXITED (AM_MSGHEADER | ('x'<<8))
-
-#define INITSCALEMTOF (.2*FRACUNIT) // scale on entry
-// how much the automap moves window per tic in frame-buffer coordinates
-#define F_PANINC 4 // moves 140 pixels in 1 second
-// how much zoom-in per tic
-#define M_ZOOMIN ((int) (1.02*FRACUNIT)) // goes to 2x in 1 second
-// how much zoom-out per tic
-#define M_ZOOMOUT ((int) (FRACUNIT/1.02)) // pulls out to 0.5x in 1 second
-
-// 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
-{
- int x, y;
-} fpoint_t;
-
-typedef struct
-{
- fpoint_t a, b;
-} fline_t;
-
-typedef vertex_t mpoint_t;
-
-typedef struct
-{
- mpoint_t a, b;
-} mline_t;
-
-typedef struct
-{
- fixed_t slp, islp;
-} islope_t;
-
-// extern int f_x, f_y, f_w, f_h;
-
-#endif
+#define AM_PANDOWNKEY KEY_DOWNARROW
+#define AM_PANUPKEY KEY_UPARROW
+#define AM_PANRIGHTKEY KEY_RIGHTARROW
+#define AM_PANLEFTKEY KEY_LEFTARROW
+//#define AM_PANDOWNKEY SC_DOWNARROW
+//#define AM_PANUPKEY SC_UPARROW
+//#define AM_PANRIGHTKEY SC_RIGHTARROW
+//#define AM_PANLEFTKEY SC_LEFTARROW
+
+#define AM_ZOOMINKEY '='
+//#define AM_ZOOMINKEY 13
+//#define AM_ZOOMOUTKEY 12
+#define AM_ZOOMOUTKEY '-'
+#define AM_STARTKEY KEY_TAB
+#define AM_ENDKEY KEY_TAB
+#define AM_GOBIGKEY '0'
+//#define AM_GOBIGKEY 11
+//#define AM_FOLLOWKEY 33
+//#define AM_GRIDKEY 34
+#define AM_FOLLOWKEY 'f'
+#define AM_GRIDKEY 'g'
+
+#define AM_NUMMARKPOINTS 10
+
+#define AM_MSGHEADER (('a'<<24)+('m'<<16))
+#define AM_MSGENTERED (AM_MSGHEADER | ('e'<<8))
+#define AM_MSGEXITED (AM_MSGHEADER | ('x'<<8))
+
+#define INITSCALEMTOF (.2*FRACUNIT) // scale on entry
+// how much the automap moves window per tic in frame-buffer coordinates
+#define F_PANINC 4 // moves 140 pixels in 1 second
+// how much zoom-in per tic
+#define M_ZOOMIN ((int) (1.02*FRACUNIT)) // goes to 2x in 1 second
+// how much zoom-out per tic
+#define M_ZOOMOUT ((int) (FRACUNIT/1.02)) // pulls out to 0.5x in 1 second
+
+// 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
+{
+ int x, y;
+} fpoint_t;
+
+typedef struct
+{
+ fpoint_t a, b;
+} fline_t;
+
+typedef vertex_t mpoint_t;
+
+typedef struct
+{
+ mpoint_t a, b;
+} mline_t;
+
+typedef struct
+{
+ fixed_t slp, islp;
+} islope_t;
+
+// extern int f_x, f_y, f_w, f_h;
+
+#endif
--- a/src/heretic/ct_chat.c
+++ b/src/heretic/ct_chat.c
@@ -1,4 +1,26 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
+//
// Chat mode
//
@@ -29,7 +51,7 @@
void CT_Init(void);
void CT_Drawer(void);
-boolean CT_Responder(event_t *ev);
+boolean CT_Responder(event_t * ev);
void CT_Ticker(void);
char CT_dequeueChatChar(void);
@@ -47,7 +69,7 @@
byte ChatQueue[QUEUESIZE];
int chat_dest[MAXPLAYERS];
char chat_msg[MAXPLAYERS][MESSAGESIZE];
-char plr_lastmsg[MAXPLAYERS][MESSAGESIZE+9]; // add in the length of the pre-string
+char plr_lastmsg[MAXPLAYERS][MESSAGESIZE + 9]; // add in the length of the pre-string
int msgptr[MAXPLAYERS];
int msglen[MAXPLAYERS];
@@ -55,12 +77,11 @@
static int FontABaseLump;
-char *CT_FromPlrText[MAXPLAYERS] =
-{
- "GREEN: ",
- "YELLOW: ",
- "RED: ",
- "BLUE: "
+char *CT_FromPlrText[MAXPLAYERS] = {
+ "GREEN: ",
+ "YELLOW: ",
+ "RED: ",
+ "BLUE: "
};
char *chat_macros[10];
@@ -73,26 +94,26 @@
//
// CT_Init
//
-// Initialize chat mode data
+// Initialize chat mode data
//===========================================================================
void CT_Init(void)
{
- int i;
+ int i;
- head = 0; //initialize the queue index
- tail = 0;
- chatmodeon = false;
- memset(ChatQueue, 0, QUEUESIZE);
- for(i = 0; i < MAXPLAYERS; i++)
- {
- chat_dest[i] = 0;
- msgptr[i] = 0;
- memset(plr_lastmsg[i], 0, MESSAGESIZE);
- memset(chat_msg[i], 0, MESSAGESIZE);
- }
- FontABaseLump = W_GetNumForName("FONTA_S")+1;
- return;
+ head = 0; //initialize the queue index
+ tail = 0;
+ chatmodeon = false;
+ memset(ChatQueue, 0, QUEUESIZE);
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ chat_dest[i] = 0;
+ msgptr[i] = 0;
+ memset(plr_lastmsg[i], 0, MESSAGESIZE);
+ memset(chat_msg[i], 0, MESSAGESIZE);
+ }
+ FontABaseLump = W_GetNumForName("FONTA_S") + 1;
+ return;
}
//===========================================================================
@@ -103,8 +124,8 @@
void CT_Stop(void)
{
- chatmodeon = false;
- return;
+ chatmodeon = false;
+ return;
}
//===========================================================================
@@ -113,127 +134,128 @@
//
//===========================================================================
-boolean CT_Responder(event_t *ev)
+boolean CT_Responder(event_t * ev)
{
- char *macro;
+ char *macro;
- int sendto;
+ int sendto;
- if(!netgame)
- {
- return false;
- }
- if(ev->data1 == KEY_LALT || ev->data2 == KEY_RALT)
- {
- altdown = (ev->type == ev_keydown);
- return false;
- }
- if(ev->data1 == KEY_RSHIFT)
- {
- shiftdown = (ev->type == ev_keydown);
- return false;
- }
- if(ev->type != ev_keydown)
- {
- return false;
- }
- if(!chatmodeon)
- {
- sendto = 0;
- if(ev->data1 == CT_KEY_ALL)
- {
- sendto = CT_PLR_ALL;
- }
- else if(ev->data1 == CT_KEY_GREEN)
- {
- sendto = CT_PLR_GREEN;
- }
- else if(ev->data1 == CT_KEY_YELLOW)
- {
- sendto = CT_PLR_YELLOW;
- }
- else if(ev->data1 == CT_KEY_RED)
- {
- sendto = CT_PLR_RED;
- }
- else if(ev->data1 == CT_KEY_BLUE)
- {
- sendto = CT_PLR_BLUE;
- }
- if(sendto == 0 || (sendto != CT_PLR_ALL && !playeringame[sendto-1])
- || sendto == consoleplayer+1)
- {
- return false;
- }
- CT_queueChatChar(sendto);
- chatmodeon = true;
- return true;
- }
- else
- {
- if(altdown)
- {
- if(ev->data1 >= '0' && ev->data1 <= '9')
- {
- if(ev->data1 == '0')
- { // macro 0 comes after macro 9
- ev->data1 = '9'+1;
- }
- macro = chat_macros[ev->data1-'1'];
- CT_queueChatChar(KEY_ENTER); //send old message
- CT_queueChatChar(chat_dest[consoleplayer]); // chose the dest.
- while(*macro)
- {
- CT_queueChatChar(toupper(*macro++));
- }
- CT_queueChatChar(KEY_ENTER); //send it off...
- CT_Stop();
- return true;
- }
- }
- if(ev->data1 == KEY_ENTER)
- {
- CT_queueChatChar(KEY_ENTER);
- CT_Stop();
- return true;
- }
- else if(ev->data1 == KEY_ESCAPE)
- {
- CT_queueChatChar(CT_ESCAPE);
- CT_Stop();
- return true;
- }
- else if(ev->data1 >= 'a' && ev->data1 <= 'z')
- {
- CT_queueChatChar(ev->data1-32);
- return true;
- }
- else if(shiftdown)
- {
- if(ev->data1 == '1')
- {
- CT_queueChatChar('!');
- return true;
- }
- else if(ev->data1 == '/')
- {
- CT_queueChatChar('?');
- return true;
- }
- }
- else
- {
- if(ev->data1 == ' ' || ev->data1 == ',' || ev->data1 == '.'
- || (ev->data1 >= '0' && ev->data1 <= '9') || ev->data1 == '\''
- || ev->data1 == KEY_BACKSPACE || ev->data1 == '-' || ev->data1 == '=')
- {
- CT_queueChatChar(ev->data1);
- return true;
- }
- }
- }
- return false;
-}
+ if (!netgame)
+ {
+ return false;
+ }
+ if (ev->data1 == KEY_LALT || ev->data2 == KEY_RALT)
+ {
+ altdown = (ev->type == ev_keydown);
+ return false;
+ }
+ if (ev->data1 == KEY_RSHIFT)
+ {
+ shiftdown = (ev->type == ev_keydown);
+ return false;
+ }
+ if (ev->type != ev_keydown)
+ {
+ return false;
+ }
+ if (!chatmodeon)
+ {
+ sendto = 0;
+ if (ev->data1 == CT_KEY_ALL)
+ {
+ sendto = CT_PLR_ALL;
+ }
+ else if (ev->data1 == CT_KEY_GREEN)
+ {
+ sendto = CT_PLR_GREEN;
+ }
+ else if (ev->data1 == CT_KEY_YELLOW)
+ {
+ sendto = CT_PLR_YELLOW;
+ }
+ else if (ev->data1 == CT_KEY_RED)
+ {
+ sendto = CT_PLR_RED;
+ }
+ else if (ev->data1 == CT_KEY_BLUE)
+ {
+ sendto = CT_PLR_BLUE;
+ }
+ if (sendto == 0 || (sendto != CT_PLR_ALL && !playeringame[sendto - 1])
+ || sendto == consoleplayer + 1)
+ {
+ return false;
+ }
+ CT_queueChatChar(sendto);
+ chatmodeon = true;
+ return true;
+ }
+ else
+ {
+ if (altdown)
+ {
+ if (ev->data1 >= '0' && ev->data1 <= '9')
+ {
+ if (ev->data1 == '0')
+ { // macro 0 comes after macro 9
+ ev->data1 = '9' + 1;
+ }
+ macro = chat_macros[ev->data1 - '1'];
+ CT_queueChatChar(KEY_ENTER); //send old message
+ CT_queueChatChar(chat_dest[consoleplayer]); // chose the dest.
+ while (*macro)
+ {
+ CT_queueChatChar(toupper(*macro++));
+ }
+ CT_queueChatChar(KEY_ENTER); //send it off...
+ CT_Stop();
+ return true;
+ }
+ }
+ if (ev->data1 == KEY_ENTER)
+ {
+ CT_queueChatChar(KEY_ENTER);
+ CT_Stop();
+ return true;
+ }
+ else if (ev->data1 == KEY_ESCAPE)
+ {
+ CT_queueChatChar(CT_ESCAPE);
+ CT_Stop();
+ return true;
+ }
+ else if (ev->data1 >= 'a' && ev->data1 <= 'z')
+ {
+ CT_queueChatChar(ev->data1 - 32);
+ return true;
+ }
+ else if (shiftdown)
+ {
+ if (ev->data1 == '1')
+ {
+ CT_queueChatChar('!');
+ return true;
+ }
+ else if (ev->data1 == '/')
+ {
+ CT_queueChatChar('?');
+ return true;
+ }
+ }
+ else
+ {
+ if (ev->data1 == ' ' || ev->data1 == ',' || ev->data1 == '.'
+ || (ev->data1 >= '0' && ev->data1 <= '9') || ev->data1 == '\''
+ || ev->data1 == KEY_BACKSPACE || ev->data1 == '-'
+ || ev->data1 == '=')
+ {
+ CT_queueChatChar(ev->data1);
+ return true;
+ }
+ }
+ }
+ return false;
+}
//===========================================================================
//
@@ -243,81 +265,83 @@
void CT_Ticker(void)
{
- int i;
- int j;
- char c;
- int numplayers;
+ int i;
+ int j;
+ char c;
+ int numplayers;
- for(i=0; i < MAXPLAYERS; i++)
- {
- if(!playeringame[i])
- {
- continue;
- }
- if((c = players[i].cmd.chatchar) != 0)
- {
- if(c <= 5)
- {
- chat_dest[i] = c;
- continue;
- }
- else if(c == CT_ESCAPE)
- {
- CT_ClearChatMessage(i);
- }
- else if(c == KEY_ENTER)
- {
- numplayers = 0;
- for(j = 0; j < MAXPLAYERS; j++)
- {
- numplayers += playeringame[j];
- }
- CT_AddChar(i, 0); // set the end of message character
- if(numplayers > 2)
- {
- strcpy(plr_lastmsg[i], CT_FromPlrText[i]);
- strcat(plr_lastmsg[i], chat_msg[i]);
- }
- else
- {
- strcpy(plr_lastmsg[i], chat_msg[i]);
- }
- if(i != consoleplayer && (chat_dest[i] == consoleplayer+1
- || chat_dest[i] == CT_PLR_ALL) && *chat_msg[i])
- {
- P_SetMessage(&players[consoleplayer], plr_lastmsg[i],
- true);
- S_StartSound(NULL, sfx_chat);
- }
- else if(i == consoleplayer && (*chat_msg[i]))
- {
- if(numplayers > 1)
- {
- P_SetMessage(&players[consoleplayer], "-MESSAGE SENT-",
- true);
- S_StartSound(NULL, sfx_chat);
- }
- else
- {
- P_SetMessage(&players[consoleplayer],
- "THERE ARE NO OTHER PLAYERS IN THE GAME!", true);
- S_StartSound(NULL, sfx_chat);
- }
- }
- CT_ClearChatMessage(i);
- }
- else if(c == KEY_BACKSPACE)
- {
- CT_BackSpace(i);
- }
- else
- {
- CT_AddChar(i, c);
- }
- }
- }
- return;
-}
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (!playeringame[i])
+ {
+ continue;
+ }
+ if ((c = players[i].cmd.chatchar) != 0)
+ {
+ if (c <= 5)
+ {
+ chat_dest[i] = c;
+ continue;
+ }
+ else if (c == CT_ESCAPE)
+ {
+ CT_ClearChatMessage(i);
+ }
+ else if (c == KEY_ENTER)
+ {
+ numplayers = 0;
+ for (j = 0; j < MAXPLAYERS; j++)
+ {
+ numplayers += playeringame[j];
+ }
+ CT_AddChar(i, 0); // set the end of message character
+ if (numplayers > 2)
+ {
+ strcpy(plr_lastmsg[i], CT_FromPlrText[i]);
+ strcat(plr_lastmsg[i], chat_msg[i]);
+ }
+ else
+ {
+ strcpy(plr_lastmsg[i], chat_msg[i]);
+ }
+ if (i != consoleplayer && (chat_dest[i] == consoleplayer + 1
+ || chat_dest[i] == CT_PLR_ALL)
+ && *chat_msg[i])
+ {
+ P_SetMessage(&players[consoleplayer], plr_lastmsg[i],
+ true);
+ S_StartSound(NULL, sfx_chat);
+ }
+ else if (i == consoleplayer && (*chat_msg[i]))
+ {
+ if (numplayers > 1)
+ {
+ P_SetMessage(&players[consoleplayer],
+ "-MESSAGE SENT-", true);
+ S_StartSound(NULL, sfx_chat);
+ }
+ else
+ {
+ P_SetMessage(&players[consoleplayer],
+ "THERE ARE NO OTHER PLAYERS IN THE GAME!",
+ true);
+ S_StartSound(NULL, sfx_chat);
+ }
+ }
+ CT_ClearChatMessage(i);
+ }
+ else if (c == KEY_BACKSPACE)
+ {
+ CT_BackSpace(i);
+ }
+ else
+ {
+ CT_AddChar(i, c);
+ }
+ }
+ }
+ return;
+}
//===========================================================================
//
@@ -327,31 +351,32 @@
void CT_Drawer(void)
{
- int i;
- int x;
- patch_t *patch;
+ int i;
+ int x;
+ patch_t *patch;
- if(chatmodeon)
- {
- x = 25;
- for(i = 0; i < msgptr[consoleplayer]; i++)
- {
- if(chat_msg[consoleplayer][i] < 33)
- {
- x += 6;
- }
- else
- {
- patch=W_CacheLumpNum(FontABaseLump+
- chat_msg[consoleplayer][i]-33, PU_CACHE);
- V_DrawPatch(x, 10, patch);
- x += patch->width;
- }
- }
- V_DrawPatch(x, 10, W_CacheLumpName("FONTA59", PU_CACHE));
- BorderTopRefresh = true;
- UpdateState |= I_MESSAGES;
- }
+ if (chatmodeon)
+ {
+ x = 25;
+ for (i = 0; i < msgptr[consoleplayer]; i++)
+ {
+ if (chat_msg[consoleplayer][i] < 33)
+ {
+ x += 6;
+ }
+ else
+ {
+ patch = W_CacheLumpNum(FontABaseLump +
+ chat_msg[consoleplayer][i] - 33,
+ PU_CACHE);
+ V_DrawPatch(x, 10, patch);
+ x += patch->width;
+ }
+ }
+ V_DrawPatch(x, 10, W_CacheLumpName("FONTA59", PU_CACHE));
+ BorderTopRefresh = true;
+ UpdateState |= I_MESSAGES;
+ }
}
//===========================================================================
@@ -362,12 +387,12 @@
void CT_queueChatChar(char ch)
{
- if((tail+1)&(QUEUESIZE-1) == head)
- { // the queue is full
- return;
- }
- ChatQueue[tail] = ch;
- tail = (tail+1)&(QUEUESIZE-1);
+ if ((tail + 1) & (QUEUESIZE - 1) == head)
+ { // the queue is full
+ return;
+ }
+ ChatQueue[tail] = ch;
+ tail = (tail + 1) & (QUEUESIZE - 1);
}
//===========================================================================
@@ -378,15 +403,15 @@
char CT_dequeueChatChar(void)
{
- byte temp;
+ byte temp;
- if(head == tail)
- { // queue is empty
- return 0;
- }
- temp = ChatQueue[head];
- head = (head+1)&(QUEUESIZE-1);
- return temp;
+ if (head == tail)
+ { // queue is empty
+ return 0;
+ }
+ temp = ChatQueue[head];
+ head = (head + 1) & (QUEUESIZE - 1);
+ return temp;
}
//===========================================================================
@@ -397,23 +422,23 @@
void CT_AddChar(int player, char c)
{
- patch_t *patch;
+ patch_t *patch;
- if(msgptr[player]+1 >= MESSAGESIZE || msglen[player] >= MESSAGELEN)
- { // full.
- return;
- }
- chat_msg[player][msgptr[player]] = c;
- msgptr[player]++;
- if(c < 33)
- {
- msglen[player] += 6;
- }
- else
- {
- patch = W_CacheLumpNum(FontABaseLump+c-33, PU_CACHE);
- msglen[player] += patch->width;
- }
+ if (msgptr[player] + 1 >= MESSAGESIZE || msglen[player] >= MESSAGELEN)
+ { // full.
+ return;
+ }
+ chat_msg[player][msgptr[player]] = c;
+ msgptr[player]++;
+ if (c < 33)
+ {
+ msglen[player] += 6;
+ }
+ else
+ {
+ patch = W_CacheLumpNum(FontABaseLump + c - 33, PU_CACHE);
+ msglen[player] += patch->width;
+ }
}
//===========================================================================
@@ -420,30 +445,30 @@
//
// CT_BackSpace
//
-// Backs up a space, when the user hits (obviously) backspace
+// Backs up a space, when the user hits (obviously) backspace
//===========================================================================
void CT_BackSpace(int player)
{
- patch_t *patch;
- char c;
+ patch_t *patch;
+ char c;
- if(msgptr[player] == 0)
- { // message is already blank
- return;
- }
- msgptr[player]--;
- c = chat_msg[player][msgptr[player]];
- if(c < 33)
- {
- msglen[player] -= 6;
- }
- else
- {
- patch = W_CacheLumpNum(FontABaseLump+c-33, PU_CACHE);
- msglen[player] -= patch->width;
- }
- chat_msg[player][msgptr[player]] = 0;
+ if (msgptr[player] == 0)
+ { // message is already blank
+ return;
+ }
+ msgptr[player]--;
+ c = chat_msg[player][msgptr[player]];
+ if (c < 33)
+ {
+ msglen[player] -= 6;
+ }
+ else
+ {
+ patch = W_CacheLumpNum(FontABaseLump + c - 33, PU_CACHE);
+ msglen[player] -= patch->width;
+ }
+ chat_msg[player][msgptr[player]] = 0;
}
//===========================================================================
@@ -450,13 +475,13 @@
//
// CT_ClearChatMessage
//
-// Clears out the data for the chat message, but the player's message
-// is still saved in plrmsg.
+// Clears out the data for the chat message, but the player's message
+// is still saved in plrmsg.
//===========================================================================
void CT_ClearChatMessage(int player)
{
- memset(chat_msg[player], 0, MESSAGESIZE);
- msgptr[player] = 0;
- msglen[player] = 0;
+ memset(chat_msg[player], 0, MESSAGESIZE);
+ msgptr[player] = 0;
+ msglen[player] = 0;
}
--- a/src/heretic/ct_chat.h
+++ b/src/heretic/ct_chat.h
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
//
// Chat mode stuff
//
--- a/src/heretic/d_main.c
+++ b/src/heretic/d_main.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// D_main.c
@@ -13,16 +35,16 @@
#include "P_local.h"
#include "soundst.h"
-boolean shareware = false; // true if only episode 1 present
-boolean ExtendedWAD = false; // true if episodes 4 and 5 present
+boolean shareware = false; // true if only episode 1 present
+boolean ExtendedWAD = false; // true if episodes 4 and 5 present
-boolean nomonsters; // checkparm of -nomonsters
-boolean respawnparm; // checkparm of -respawn
-boolean debugmode; // checkparm of -debug
-boolean ravpic; // checkparm of -ravpic
-boolean cdrom; // true if cd-rom mode active
-boolean singletics; // debug flag to cancel adaptiveness
-boolean noartiskip; // whether shift-enter skips an artifact
+boolean nomonsters; // checkparm of -nomonsters
+boolean respawnparm; // checkparm of -respawn
+boolean debugmode; // checkparm of -debug
+boolean ravpic; // checkparm of -ravpic
+boolean cdrom; // true if cd-rom mode active
+boolean singletics; // debug flag to cancel adaptiveness
+boolean noartiskip; // whether shift-enter skips an artifact
skill_t startskill;
int startepisode;
@@ -36,12 +58,12 @@
void D_CheckNetGame(void);
void D_ProcessEvents(void);
-void G_BuildTiccmd(ticcmd_t *cmd);
+void G_BuildTiccmd(ticcmd_t * cmd);
void D_DoAdvanceDemo(void);
-void D_PageDrawer (void);
-void D_AdvanceDemo (void);
+void D_PageDrawer(void);
+void D_AdvanceDemo(void);
void F_Drawer(void);
-boolean F_Responder(event_t *ev);
+boolean F_Responder(event_t * ev);
//---------------------------------------------------------------------------
//
@@ -51,11 +73,11 @@
fixed_t FixedDiv(fixed_t a, fixed_t b)
{
- if((abs(a)>>14) >= abs(b))
- {
- return((a^b)<0 ? MININT : MAXINT);
- }
- return(FixedDiv2(a, b));
+ if ((abs(a) >> 14) >= abs(b))
+ {
+ return ((a ^ b) < 0 ? MININT : MAXINT);
+ }
+ return (FixedDiv2(a, b));
}
/*
@@ -82,10 +104,10 @@
//
//---------------------------------------------------------------------------
-void D_PostEvent(event_t *ev)
+void D_PostEvent(event_t * ev)
{
- events[eventhead] = *ev;
- eventhead = (++eventhead)&(MAXEVENTS-1);
+ events[eventhead] = *ev;
+ eventhead = (++eventhead) & (MAXEVENTS - 1);
}
//---------------------------------------------------------------------------
@@ -98,21 +120,22 @@
void D_ProcessEvents(void)
{
- event_t *ev;
+ event_t *ev;
- for(; eventtail != eventhead; eventtail = (++eventtail)&(MAXEVENTS-1))
- {
- ev = &events[eventtail];
- if(F_Responder(ev))
- {
- continue;
- }
- if(MN_Responder(ev))
- {
- continue;
- }
- G_Responder(ev);
- }
+ for (; eventtail != eventhead;
+ eventtail = (++eventtail) & (MAXEVENTS - 1))
+ {
+ ev = &events[eventtail];
+ if (F_Responder(ev))
+ {
+ continue;
+ }
+ if (MN_Responder(ev))
+ {
+ continue;
+ }
+ G_Responder(ev);
+ }
}
//---------------------------------------------------------------------------
@@ -123,14 +146,14 @@
void DrawMessage(void)
{
- player_t *player;
+ player_t *player;
- player = &players[consoleplayer];
- if(player->messageTics <= 0 || !player->message)
- { // No message
- return;
- }
- MN_DrTextA(player->message, 160-MN_TextAWidth(player->message)/2, 1);
+ player = &players[consoleplayer];
+ if (player->messageTics <= 0 || !player->message)
+ { // No message
+ return;
+ }
+ MN_DrTextA(player->message, 160 - MN_TextAWidth(player->message) / 2, 1);
}
//---------------------------------------------------------------------------
@@ -147,66 +170,65 @@
void D_Display(void)
{
- extern boolean MenuActive;
- extern boolean askforquit;
+ extern boolean MenuActive;
+ extern boolean askforquit;
- // Change the view size if needed
- if(setsizeneeded)
- {
- R_ExecuteSetViewSize();
- }
+ // Change the view size if needed
+ if (setsizeneeded)
+ {
+ R_ExecuteSetViewSize();
+ }
//
// do buffered drawing
//
- switch (gamestate)
- {
- case GS_LEVEL:
- if (!gametic)
- break;
- if (automapactive)
- AM_Drawer ();
- else
- R_RenderPlayerView (&players[displayplayer]);
- CT_Drawer();
- UpdateState |= I_FULLVIEW;
- SB_Drawer();
- break;
- case GS_INTERMISSION:
- IN_Drawer ();
- break;
- case GS_FINALE:
- F_Drawer ();
- break;
- case GS_DEMOSCREEN:
- D_PageDrawer ();
- break;
- }
+ switch (gamestate)
+ {
+ case GS_LEVEL:
+ if (!gametic)
+ break;
+ if (automapactive)
+ AM_Drawer();
+ else
+ R_RenderPlayerView(&players[displayplayer]);
+ CT_Drawer();
+ UpdateState |= I_FULLVIEW;
+ SB_Drawer();
+ break;
+ case GS_INTERMISSION:
+ IN_Drawer();
+ break;
+ case GS_FINALE:
+ F_Drawer();
+ break;
+ case GS_DEMOSCREEN:
+ D_PageDrawer();
+ break;
+ }
- if(paused && !MenuActive && !askforquit)
- {
- if(!netgame)
- {
- V_DrawPatch(160, viewwindowy+5, W_CacheLumpName("PAUSED",
- PU_CACHE));
- }
- else
- {
- V_DrawPatch(160, 70, W_CacheLumpName("PAUSED",
- PU_CACHE));
- }
- }
- // Handle player messages
- DrawMessage();
+ if (paused && !MenuActive && !askforquit)
+ {
+ if (!netgame)
+ {
+ V_DrawPatch(160, viewwindowy + 5, W_CacheLumpName("PAUSED",
+ PU_CACHE));
+ }
+ else
+ {
+ V_DrawPatch(160, 70, W_CacheLumpName("PAUSED", PU_CACHE));
+ }
+ }
+ // Handle player messages
+ DrawMessage();
- // Menu drawing
- MN_Drawer();
+ // Menu drawing
+ MN_Drawer();
- // Send out any new accumulation
- NetUpdate();
+ // Send out any new accumulation
+ NetUpdate();
- // Flush buffered stuff to screen
- I_Update();
+ // Flush buffered stuff to screen
+ I_Update();
}
//---------------------------------------------------------------------------
@@ -217,40 +239,40 @@
void D_DoomLoop(void)
{
- if(M_CheckParm("-debugfile"))
- {
- char filename[20];
- sprintf(filename, "debug%i.txt", consoleplayer);
- debugfile = fopen(filename,"w");
- }
- I_InitGraphics();
- while(1)
- {
- // Frame syncronous IO operations
- I_StartFrame();
+ if (M_CheckParm("-debugfile"))
+ {
+ char filename[20];
+ sprintf(filename, "debug%i.txt", consoleplayer);
+ debugfile = fopen(filename, "w");
+ }
+ I_InitGraphics();
+ while (1)
+ {
+ // Frame syncronous IO operations
+ I_StartFrame();
- // Process one or more tics
- if(singletics)
- {
- I_StartTic();
- D_ProcessEvents();
- G_BuildTiccmd(&netcmds[consoleplayer][maketic%BACKUPTICS]);
- if (advancedemo)
- D_DoAdvanceDemo ();
- G_Ticker();
- gametic++;
- maketic++;
- }
- else
- {
- // Will run at least one tic
- TryRunTics();
- }
+ // Process one or more tics
+ if (singletics)
+ {
+ I_StartTic();
+ D_ProcessEvents();
+ G_BuildTiccmd(&netcmds[consoleplayer][maketic % BACKUPTICS]);
+ if (advancedemo)
+ D_DoAdvanceDemo();
+ G_Ticker();
+ gametic++;
+ maketic++;
+ }
+ else
+ {
+ // Will run at least one tic
+ TryRunTics();
+ }
- // Move positional sounds
- S_UpdateSounds(players[consoleplayer].mo);
- D_Display();
- }
+ // Move positional sounds
+ S_UpdateSounds(players[consoleplayer].mo);
+ D_Display();
+ }
}
/*
@@ -261,9 +283,9 @@
===============================================================================
*/
-int demosequence;
-int pagetic;
-char *pagename;
+int demosequence;
+int pagetic;
+char *pagename;
/*
@@ -276,10 +298,10 @@
================
*/
-void D_PageTicker (void)
+void D_PageTicker(void)
{
- if (--pagetic < 0)
- D_AdvanceDemo ();
+ if (--pagetic < 0)
+ D_AdvanceDemo();
}
@@ -295,12 +317,12 @@
void D_PageDrawer(void)
{
- V_DrawRawScreen(W_CacheLumpName(pagename, PU_CACHE));
- if(demosequence == 1)
- {
- V_DrawPatch(4, 160, W_CacheLumpName("ADVISOR", PU_CACHE));
- }
- UpdateState |= I_FULLSCRN;
+ V_DrawRawScreen(W_CacheLumpName(pagename, PU_CACHE));
+ if (demosequence == 1)
+ {
+ V_DrawPatch(4, 160, W_CacheLumpName("ADVISOR", PU_CACHE));
+ }
+ UpdateState |= I_FULLSCRN;
}
/*
@@ -312,65 +334,65 @@
=================
*/
-void D_AdvanceDemo (void)
+void D_AdvanceDemo(void)
{
- advancedemo = true;
+ advancedemo = true;
}
-void D_DoAdvanceDemo (void)
+void D_DoAdvanceDemo(void)
{
- players[consoleplayer].playerstate = PST_LIVE; // don't reborn
- advancedemo = false;
- usergame = false; // can't save / end game here
- paused = false;
- gameaction = ga_nothing;
- demosequence = (demosequence+1)%7;
- switch (demosequence)
- {
- case 0:
- pagetic = 210;
- gamestate = GS_DEMOSCREEN;
- pagename = "TITLE";
- S_StartSong(mus_titl, false);
- break;
- case 1:
- pagetic = 140;
- gamestate = GS_DEMOSCREEN;
- pagename = "TITLE";
- break;
- case 2:
- BorderNeedRefresh = true;
- UpdateState |= I_FULLSCRN;
- G_DeferedPlayDemo ("demo1");
- break;
- case 3:
- pagetic = 200;
- gamestate = GS_DEMOSCREEN;
- pagename = "CREDIT";
- break;
- case 4:
- BorderNeedRefresh = true;
- UpdateState |= I_FULLSCRN;
- G_DeferedPlayDemo ("demo2");
- break;
- case 5:
- pagetic = 200;
- gamestate = GS_DEMOSCREEN;
- if(shareware)
- {
- pagename = "ORDER";
- }
- else
- {
- pagename = "CREDIT";
- }
- break;
- case 6:
- BorderNeedRefresh = true;
- UpdateState |= I_FULLSCRN;
- G_DeferedPlayDemo ("demo3");
- break;
- }
+ players[consoleplayer].playerstate = PST_LIVE; // don't reborn
+ advancedemo = false;
+ usergame = false; // can't save / end game here
+ paused = false;
+ gameaction = ga_nothing;
+ demosequence = (demosequence + 1) % 7;
+ switch (demosequence)
+ {
+ case 0:
+ pagetic = 210;
+ gamestate = GS_DEMOSCREEN;
+ pagename = "TITLE";
+ S_StartSong(mus_titl, false);
+ break;
+ case 1:
+ pagetic = 140;
+ gamestate = GS_DEMOSCREEN;
+ pagename = "TITLE";
+ break;
+ case 2:
+ BorderNeedRefresh = true;
+ UpdateState |= I_FULLSCRN;
+ G_DeferedPlayDemo("demo1");
+ break;
+ case 3:
+ pagetic = 200;
+ gamestate = GS_DEMOSCREEN;
+ pagename = "CREDIT";
+ break;
+ case 4:
+ BorderNeedRefresh = true;
+ UpdateState |= I_FULLSCRN;
+ G_DeferedPlayDemo("demo2");
+ break;
+ case 5:
+ pagetic = 200;
+ gamestate = GS_DEMOSCREEN;
+ if (shareware)
+ {
+ pagename = "ORDER";
+ }
+ else
+ {
+ pagename = "CREDIT";
+ }
+ break;
+ case 6:
+ BorderNeedRefresh = true;
+ UpdateState |= I_FULLSCRN;
+ G_DeferedPlayDemo("demo3");
+ break;
+ }
}
@@ -382,11 +404,11 @@
=================
*/
-void D_StartTitle (void)
+void D_StartTitle(void)
{
- gameaction = ga_nothing;
- demosequence = -1;
- D_AdvanceDemo ();
+ gameaction = ga_nothing;
+ demosequence = -1;
+ D_AdvanceDemo();
}
@@ -399,28 +421,28 @@
==============
*/
-void D_CheckRecordFrom (void)
+void D_CheckRecordFrom(void)
{
- int p;
- char file[256];
+ int p;
+ char file[256];
- p = M_CheckParm ("-recordfrom");
- if (!p || p > myargc-2)
- return;
+ p = M_CheckParm("-recordfrom");
+ if (!p || p > myargc - 2)
+ return;
- if(cdrom)
- {
- sprintf(file, SAVEGAMENAMECD"%c.hsg",myargv[p+1][0]);
- }
- else
- {
- sprintf(file, SAVEGAMENAME"%c.hsg",myargv[p+1][0]);
- }
- G_LoadGame (file);
- G_DoLoadGame (); // load the gameskill etc info from savegame
+ if (cdrom)
+ {
+ sprintf(file, SAVEGAMENAMECD "%c.hsg", myargv[p + 1][0]);
+ }
+ else
+ {
+ sprintf(file, SAVEGAMENAME "%c.hsg", myargv[p + 1][0]);
+ }
+ G_LoadGame(file);
+ G_DoLoadGame(); // load the gameskill etc info from savegame
- G_RecordDemo (gameskill, 1, gameepisode, gamemap, myargv[p+2]);
- D_DoomLoop (); // never returns
+ G_RecordDemo(gameskill, 1, gameepisode, gamemap, myargv[p + 2]);
+ D_DoomLoop(); // never returns
}
/*
@@ -442,12 +464,11 @@
#define SHAREWAREWADNAME "/Novell/Heretic/source/heretic1.wad"
-char *wadfiles[MAXWADFILES] =
-{
- "/Novell/Heretic/source/heretic.wad",
- "/Novell/Heretic/data/texture1.lmp",
- "/Novell/Heretic/data/texture2.lmp",
- "/Novell/Heretic/data/pnames.lmp"
+char *wadfiles[MAXWADFILES] = {
+ "/Novell/Heretic/source/heretic.wad",
+ "/Novell/Heretic/data/texture1.lmp",
+ "/Novell/Heretic/data/texture2.lmp",
+ "/Novell/Heretic/data/pnames.lmp"
};
#else
@@ -456,12 +477,11 @@
#define SHAREWAREWADNAME "heretic1.wad"
-char *wadfiles[MAXWADFILES] =
-{
- "heretic.wad",
- "texture1.lmp",
- "texture2.lmp",
- "pnames.lmp"
+char *wadfiles[MAXWADFILES] = {
+ "heretic.wad",
+ "texture1.lmp",
+ "texture2.lmp",
+ "pnames.lmp"
};
#endif
@@ -473,55 +493,55 @@
void wadprintf(void)
{
- if(debugmode)
- {
- return;
- }
- #ifdef __WATCOMC__
- _settextposition(23, 2);
- _setbkcolor(1);
- _settextcolor(0);
- _outtext(exrnwads);
- _settextposition(24, 2);
- _outtext(exrnwads2);
- #endif
+ if (debugmode)
+ {
+ return;
+ }
+#ifdef __WATCOMC__
+ _settextposition(23, 2);
+ _setbkcolor(1);
+ _settextcolor(0);
+ _outtext(exrnwads);
+ _settextposition(24, 2);
+ _outtext(exrnwads2);
+#endif
}
void D_AddFile(char *file)
{
- int numwadfiles;
- char *new;
-// char text[256];
+ int numwadfiles;
+ char *new;
+// char text[256];
- for(numwadfiles = 0; wadfiles[numwadfiles]; numwadfiles++);
- new = malloc(strlen(file)+1);
- strcpy(new, file);
- if(strlen(exrnwads)+strlen(file) < 78)
- {
- if(strlen(exrnwads))
- {
- strcat(exrnwads, ", ");
- }
- else
- {
- strcpy(exrnwads, "External Wadfiles: ");
- }
- strcat(exrnwads, file);
- }
- else if(strlen(exrnwads2)+strlen(file) < 79)
- {
- if(strlen(exrnwads2))
- {
- strcat(exrnwads2, ", ");
- }
- else
- {
- strcpy(exrnwads2, " ");
- strcat(exrnwads, ",");
- }
- strcat(exrnwads2, file);
- }
- wadfiles[numwadfiles] = new;
+ for (numwadfiles = 0; wadfiles[numwadfiles]; numwadfiles++);
+ new = malloc(strlen(file) + 1);
+ strcpy(new, file);
+ if (strlen(exrnwads) + strlen(file) < 78)
+ {
+ if (strlen(exrnwads))
+ {
+ strcat(exrnwads, ", ");
+ }
+ else
+ {
+ strcpy(exrnwads, "External Wadfiles: ");
+ }
+ strcat(exrnwads, file);
+ }
+ else if (strlen(exrnwads2) + strlen(file) < 79)
+ {
+ if (strlen(exrnwads2))
+ {
+ strcat(exrnwads2, ", ");
+ }
+ else
+ {
+ strcpy(exrnwads2, " ");
+ strcat(exrnwads, ",");
+ }
+ strcat(exrnwads2, file);
+ }
+ wadfiles[numwadfiles] = new;
}
//==========================================================
@@ -538,8 +558,8 @@
int thermMax;
int thermCurrent;
-char *startup; // * to text screen
-char smsg[80]; // status bar line
+char *startup; // * to text screen
+char smsg[80]; // status bar line
//
// Heretic startup screen shit
@@ -547,215 +567,215 @@
byte *hscreen;
-void hgotoxy(int x,int y)
+void hgotoxy(int x, int y)
{
- hscreen = (byte *)(0xb8000 + y*160 + x*2);
+ hscreen = (byte *) (0xb8000 + y * 160 + x * 2);
}
void hput(unsigned char c, unsigned char a)
{
- *hscreen++ = c;
- *hscreen++ = a;
+ *hscreen++ = c;
+ *hscreen++ = a;
}
void hprintf(char *string, unsigned char a)
{
#ifdef __WATCOMC__
- int i;
+ int i;
- if(debugmode)
- {
- puts(string);
- return;
- }
- for(i = 0; i < strlen(string); i++)
- {
- hput(string[i], a);
- }
+ if (debugmode)
+ {
+ puts(string);
+ return;
+ }
+ for (i = 0; i < strlen(string); i++)
+ {
+ hput(string[i], a);
+ }
#endif
}
void drawstatus(void)
{
- if(debugmode)
- {
- return;
- }
- #ifdef __WATCOMC__
- _settextposition(25, 2);
- _setbkcolor(1);
- _settextcolor(15);
- _outtext(smsg);
- _settextposition(25, 1);
- #endif
+ if (debugmode)
+ {
+ return;
+ }
+#ifdef __WATCOMC__
+ _settextposition(25, 2);
+ _setbkcolor(1);
+ _settextcolor(15);
+ _outtext(smsg);
+ _settextposition(25, 1);
+#endif
}
void status(char *string)
{
- strcat(smsg,string);
- drawstatus();
+ strcat(smsg, string);
+ drawstatus();
}
void DrawThermo(void)
{
- #ifdef __WATCOMC__
- unsigned char *screen;
- int progress;
- int i;
+#ifdef __WATCOMC__
+ unsigned char *screen;
+ int progress;
+ int i;
- if(debugmode)
- {
- return;
- }
+ if (debugmode)
+ {
+ return;
+ }
#if 0
- progress = (98*thermCurrent)/thermMax;
- screen = (char *)0xb8000 + (THERM_Y*160 + THERM_X*2);
- for (i = 0;i < progress/2; i++)
- {
- switch(i)
- {
- case 4:
- case 9:
- case 14:
- case 19:
- case 29:
- case 34:
- case 39:
- case 44:
- *screen++ = 0xb3;
- *screen++ = (THERMCOLOR<<4)+15;
- break;
- case 24:
- *screen++ = 0xba;
- *screen++ = (THERMCOLOR<<4)+15;
- break;
- default:
- *screen++ = 0xdb;
- *screen++ = 0x40 + THERMCOLOR;
- break;
- }
- }
- if (progress&1)
- {
- *screen++ = 0xdd;
- *screen++ = 0x40 + THERMCOLOR;
- }
+ progress = (98 * thermCurrent) / thermMax;
+ screen = (char *) 0xb8000 + (THERM_Y * 160 + THERM_X * 2);
+ for (i = 0; i < progress / 2; i++)
+ {
+ switch (i)
+ {
+ case 4:
+ case 9:
+ case 14:
+ case 19:
+ case 29:
+ case 34:
+ case 39:
+ case 44:
+ *screen++ = 0xb3;
+ *screen++ = (THERMCOLOR << 4) + 15;
+ break;
+ case 24:
+ *screen++ = 0xba;
+ *screen++ = (THERMCOLOR << 4) + 15;
+ break;
+ default:
+ *screen++ = 0xdb;
+ *screen++ = 0x40 + THERMCOLOR;
+ break;
+ }
+ }
+ if (progress & 1)
+ {
+ *screen++ = 0xdd;
+ *screen++ = 0x40 + THERMCOLOR;
+ }
#else
- progress = (50*thermCurrent)/thermMax+2;
+ progress = (50 * thermCurrent) / thermMax + 2;
// screen = (char *)0xb8000 + (THERM_Y*160 + THERM_X*2);
- hgotoxy(THERM_X,THERM_Y);
- for (i = 0; i < progress; i++)
- {
+ hgotoxy(THERM_X, THERM_Y);
+ for (i = 0; i < progress; i++)
+ {
// *screen++ = 0xdb;
// *screen++ = 0x2a;
- hput(0xdb,0x2a);
- }
+ hput(0xdb, 0x2a);
+ }
#endif
- #endif
+#endif
}
#ifdef __WATCOMC__
void blitStartup(void)
{
- byte *textScreen;
+ byte *textScreen;
- if(debugmode)
- {
- return;
- }
+ if (debugmode)
+ {
+ return;
+ }
- // Blit main screen
- textScreen = (byte *)0xb8000;
- memcpy(textScreen, startup, 4000);
+ // Blit main screen
+ textScreen = (byte *) 0xb8000;
+ memcpy(textScreen, startup, 4000);
- // Print version string
- _setbkcolor(4); // Red
- _settextcolor(14); // Yellow
- _settextposition(3, 47);
- _outtext(VERSION_TEXT);
+ // Print version string
+ _setbkcolor(4); // Red
+ _settextcolor(14); // Yellow
+ _settextposition(3, 47);
+ _outtext(VERSION_TEXT);
- // Hide cursor
- _settextcursor(0x2000);
+ // Hide cursor
+ _settextcursor(0x2000);
}
#endif
char tmsg[300];
-void tprintf(char *msg,int initflag)
+void tprintf(char *msg, int initflag)
{
#if 0
- #ifdef __WATCOMC__
- char temp[80];
- int start;
- int add;
- int i;
- #endif
+#ifdef __WATCOMC__
+ char temp[80];
+ int start;
+ int add;
+ int i;
+#endif
- if(debugmode)
- {
- printf(msg);
- return;
- }
- #ifdef __WATCOMC__
- if (initflag)
- tmsg[0] = 0;
- strcat(tmsg,msg);
- blitStartup();
- DrawThermo();
- _setbkcolor(4);
- _settextcolor(15);
- for (add = start = i = 0; i <= strlen(tmsg); i++)
- if ((tmsg[i] == '\n') || (!tmsg[i]))
- {
- memset(temp,0,80);
- strncpy(temp,tmsg+start,i-start);
- _settextposition(MSG_Y+add,40-strlen(temp)/2);
- _outtext(temp);
- start = i+1;
- add++;
- }
- _settextposition(25,1);
- drawstatus();
- #else
- printf(msg);
- #endif
+ if (debugmode)
+ {
+ printf(msg);
+ return;
+ }
+#ifdef __WATCOMC__
+ if (initflag)
+ tmsg[0] = 0;
+ strcat(tmsg, msg);
+ blitStartup();
+ DrawThermo();
+ _setbkcolor(4);
+ _settextcolor(15);
+ for (add = start = i = 0; i <= strlen(tmsg); i++)
+ if ((tmsg[i] == '\n') || (!tmsg[i]))
+ {
+ memset(temp, 0, 80);
+ strncpy(temp, tmsg + start, i - start);
+ _settextposition(MSG_Y + add, 40 - strlen(temp) / 2);
+ _outtext(temp);
+ start = i + 1;
+ add++;
+ }
+ _settextposition(25, 1);
+ drawstatus();
+#else
+ printf(msg);
#endif
+#endif
}
void CheckAbortStartup(void)
{
#ifdef __WATCOMC__
- extern int lastpress;
+ extern int lastpress;
- if(lastpress == 1)
- { // Abort if escape pressed
- CleanExit();
- }
+ if (lastpress == 1)
+ { // Abort if escape pressed
+ CleanExit();
+ }
#endif
}
void IncThermo(void)
{
- thermCurrent++;
- DrawThermo();
- CheckAbortStartup();
+ thermCurrent++;
+ DrawThermo();
+ CheckAbortStartup();
}
void InitThermo(int max)
{
- thermMax = max;
- thermCurrent = 0;
+ thermMax = max;
+ thermCurrent = 0;
}
#ifdef __WATCOMC__
void CleanExit(void)
{
- union REGS regs;
+ union REGS regs;
- I_ShutdownKeyboard();
- regs.x.eax = 0x3;
- int386(0x10, ®s, ®s);
- printf("Exited from HERETIC.\n");
- exit(1);
+ I_ShutdownKeyboard();
+ regs.x.eax = 0x3;
+ int386(0x10, ®s, ®s);
+ printf("Exited from HERETIC.\n");
+ exit(1);
}
#endif
@@ -767,274 +787,274 @@
void D_DoomMain(void)
{
- int p;
- int e;
- int m;
- char file[256];
- FILE *fp;
- boolean devMap;
- //char *screen;
+ int p;
+ int e;
+ int m;
+ char file[256];
+ FILE *fp;
+ boolean devMap;
+ //char *screen;
- M_FindResponseFile();
- setbuf(stdout, NULL);
- nomonsters = M_CheckParm("-nomonsters");
- respawnparm = M_CheckParm("-respawn");
- ravpic = M_CheckParm("-ravpic");
- noartiskip = M_CheckParm("-noartiskip");
- debugmode = M_CheckParm("-debug");
- startskill = sk_medium;
- startepisode = 1;
- startmap = 1;
- autostart = false;
+ M_FindResponseFile();
+ setbuf(stdout, NULL);
+ nomonsters = M_CheckParm("-nomonsters");
+ respawnparm = M_CheckParm("-respawn");
+ ravpic = M_CheckParm("-ravpic");
+ noartiskip = M_CheckParm("-noartiskip");
+ debugmode = M_CheckParm("-debug");
+ startskill = sk_medium;
+ startepisode = 1;
+ startmap = 1;
+ autostart = false;
- // wadfiles[0] is a char * to the main wad
- fp = fopen(wadfiles[0], "rb");
- if(fp)
- {
- fclose(fp);
- }
- else
- { // Change to look for shareware wad
- wadfiles[0] = SHAREWAREWADNAME;
- }
+ // wadfiles[0] is a char * to the main wad
+ fp = fopen(wadfiles[0], "rb");
+ if (fp)
+ {
+ fclose(fp);
+ }
+ else
+ { // Change to look for shareware wad
+ wadfiles[0] = SHAREWAREWADNAME;
+ }
- // Check for -CDROM
- cdrom = false;
+ // Check for -CDROM
+ cdrom = false;
#ifdef __WATCOMC__
- if(M_CheckParm("-cdrom"))
- {
- cdrom = true;
- mkdir("c:\\heretic.cd");
- }
+ if (M_CheckParm("-cdrom"))
+ {
+ cdrom = true;
+ mkdir("c:\\heretic.cd");
+ }
#endif
- // -FILE [filename] [filename] ...
- // Add files to the wad list.
- p = M_CheckParm("-file");
- if(p)
- { // the parms after p are wadfile/lump names, until end of parms
- // or another - preceded parm
- while(++p != myargc && myargv[p][0] != '-')
- {
- D_AddFile(myargv[p]);
- }
- }
+ // -FILE [filename] [filename] ...
+ // Add files to the wad list.
+ p = M_CheckParm("-file");
+ if (p)
+ { // the parms after p are wadfile/lump names, until end of parms
+ // or another - preceded parm
+ while (++p != myargc && myargv[p][0] != '-')
+ {
+ D_AddFile(myargv[p]);
+ }
+ }
- // -DEVMAP <episode> <map>
- // Adds a map wad from the development directory to the wad list,
- // and sets the start episode and the start map.
- devMap = false;
- p = M_CheckParm("-devmap");
- if(p && p < myargc-2)
- {
- e = myargv[p+1][0];
- m = myargv[p+2][0];
- sprintf(file, MAPDIR"E%cM%c.wad", e, m);
- D_AddFile(file);
- printf("DEVMAP: Episode %c, Map %c.\n", e, m);
- startepisode = e-'0';
- startmap = m-'0';
- autostart = true;
- devMap = true;
- }
+ // -DEVMAP <episode> <map>
+ // Adds a map wad from the development directory to the wad list,
+ // and sets the start episode and the start map.
+ devMap = false;
+ p = M_CheckParm("-devmap");
+ if (p && p < myargc - 2)
+ {
+ e = myargv[p + 1][0];
+ m = myargv[p + 2][0];
+ sprintf(file, MAPDIR "E%cM%c.wad", e, m);
+ D_AddFile(file);
+ printf("DEVMAP: Episode %c, Map %c.\n", e, m);
+ startepisode = e - '0';
+ startmap = m - '0';
+ autostart = true;
+ devMap = true;
+ }
- p = M_CheckParm("-playdemo");
- if(!p)
- {
- p = M_CheckParm("-timedemo");
- }
- if (p && p < myargc-1)
- {
- sprintf(file, "%s.lmp", myargv[p+1]);
- D_AddFile(file);
- printf("Playing demo %s.lmp.\n", myargv[p+1]);
- }
+ p = M_CheckParm("-playdemo");
+ if (!p)
+ {
+ p = M_CheckParm("-timedemo");
+ }
+ if (p && p < myargc - 1)
+ {
+ sprintf(file, "%s.lmp", myargv[p + 1]);
+ D_AddFile(file);
+ printf("Playing demo %s.lmp.\n", myargv[p + 1]);
+ }
//
// get skill / episode / map from parms
//
- if(M_CheckParm("-deathmatch"))
- {
- deathmatch = true;
- }
+ if (M_CheckParm("-deathmatch"))
+ {
+ deathmatch = true;
+ }
- p = M_CheckParm("-skill");
- if(p && p < myargc-1)
- {
- startskill = myargv[p+1][0]-'1';
- autostart = true;
- }
+ p = M_CheckParm("-skill");
+ if (p && p < myargc - 1)
+ {
+ startskill = myargv[p + 1][0] - '1';
+ autostart = true;
+ }
- p = M_CheckParm("-episode");
- if(p && p < myargc-1)
- {
- startepisode = myargv[p+1][0]-'0';
- startmap = 1;
- autostart = true;
- }
+ p = M_CheckParm("-episode");
+ if (p && p < myargc - 1)
+ {
+ startepisode = myargv[p + 1][0] - '0';
+ startmap = 1;
+ autostart = true;
+ }
- p = M_CheckParm("-warp");
- if(p && p < myargc-2)
- {
- startepisode = myargv[p+1][0]-'0';
- startmap = myargv[p+2][0]-'0';
- autostart = true;
- }
+ p = M_CheckParm("-warp");
+ if (p && p < myargc - 2)
+ {
+ startepisode = myargv[p + 1][0] - '0';
+ startmap = myargv[p + 2][0] - '0';
+ autostart = true;
+ }
//
// init subsystems
//
- printf("V_Init: allocate screens.\n");
- V_Init();
+ printf("V_Init: allocate screens.\n");
+ V_Init();
- // Load defaults before initing other systems
- printf("M_LoadDefaults: Load system defaults.\n");
- M_LoadDefaults();
+ // Load defaults before initing other systems
+ printf("M_LoadDefaults: Load system defaults.\n");
+ M_LoadDefaults();
- printf("Z_Init: Init zone memory allocation daemon.\n");
- Z_Init();
+ printf("Z_Init: Init zone memory allocation daemon.\n");
+ Z_Init();
- printf("W_Init: Init WADfiles.\n");
- W_InitMultipleFiles(wadfiles);
+ printf("W_Init: Init WADfiles.\n");
+ W_InitMultipleFiles(wadfiles);
- if(W_CheckNumForName("E2M1") == -1)
- { // Can't find episode 2 maps, must be the shareware WAD
- shareware = true;
- }
- else if(W_CheckNumForName("EXTENDED") != -1)
- { // Found extended lump, must be the extended WAD
- ExtendedWAD = true;
- }
+ if (W_CheckNumForName("E2M1") == -1)
+ { // Can't find episode 2 maps, must be the shareware WAD
+ shareware = true;
+ }
+ else if (W_CheckNumForName("EXTENDED") != -1)
+ { // Found extended lump, must be the extended WAD
+ ExtendedWAD = true;
+ }
#ifdef __WATCOMC__
- I_StartupKeyboard();
- I_StartupJoystick();
+ I_StartupKeyboard();
+ I_StartupJoystick();
#endif
- startup = W_CacheLumpName("LOADING", PU_CACHE);
- #ifdef __WATCOMC__
- blitStartup();
- #endif
+ startup = W_CacheLumpName("LOADING", PU_CACHE);
+#ifdef __WATCOMC__
+ blitStartup();
+#endif
- //
- // Build status bar line!
- //
- smsg[0] = 0;
- if (deathmatch)
- status("DeathMatch...");
- if (nomonsters)
- status("No Monsters...");
- if (respawnparm)
- status("Respawning...");
- if (autostart)
- {
- char temp[64];
- sprintf(temp, "Warp to Episode %d, Map %d, Skill %d ",
- startepisode, startmap, startskill+1);
- status(temp);
- }
- wadprintf(); // print the added wadfiles
+ //
+ // Build status bar line!
+ //
+ smsg[0] = 0;
+ if (deathmatch)
+ status("DeathMatch...");
+ if (nomonsters)
+ status("No Monsters...");
+ if (respawnparm)
+ status("Respawning...");
+ if (autostart)
+ {
+ char temp[64];
+ sprintf(temp, "Warp to Episode %d, Map %d, Skill %d ",
+ startepisode, startmap, startskill + 1);
+ status(temp);
+ }
+ wadprintf(); // print the added wadfiles
- tprintf("MN_Init: Init menu system.\n",1);
- MN_Init();
+ tprintf("MN_Init: Init menu system.\n", 1);
+ MN_Init();
- CT_Init();
+ CT_Init();
- tprintf("R_Init: Init Heretic refresh daemon.",1);
- hgotoxy(17,7);
- hprintf("Loading graphics",0x3f);
- R_Init();
+ tprintf("R_Init: Init Heretic refresh daemon.", 1);
+ hgotoxy(17, 7);
+ hprintf("Loading graphics", 0x3f);
+ R_Init();
- tprintf("P_Init: Init Playloop state.",1);
- hgotoxy(17,8);
- hprintf("Init game engine.",0x3f);
- P_Init();
- IncThermo();
+ tprintf("P_Init: Init Playloop state.", 1);
+ hgotoxy(17, 8);
+ hprintf("Init game engine.", 0x3f);
+ P_Init();
+ IncThermo();
- tprintf("I_Init: Setting up machine state.\n",1);
- I_Init();
- IncThermo();
+ tprintf("I_Init: Setting up machine state.\n", 1);
+ I_Init();
+ IncThermo();
- tprintf("D_CheckNetGame: Checking network game status.\n",1);
- hgotoxy(17,9);
- hprintf("Checking network game status.", 0x3f);
- D_CheckNetGame();
- IncThermo();
+ tprintf("D_CheckNetGame: Checking network game status.\n", 1);
+ hgotoxy(17, 9);
+ hprintf("Checking network game status.", 0x3f);
+ D_CheckNetGame();
+ IncThermo();
#ifdef __WATCOMC__
- I_CheckExternDriver(); // Check for an external device driver
+ I_CheckExternDriver(); // Check for an external device driver
#endif
- tprintf("SB_Init: Loading patches.\n",1);
- SB_Init();
- IncThermo();
+ tprintf("SB_Init: Loading patches.\n", 1);
+ SB_Init();
+ IncThermo();
//
// start the apropriate game based on parms
//
- D_CheckRecordFrom();
+ D_CheckRecordFrom();
- p = M_CheckParm("-record");
- if(p && p < myargc-1)
- {
- G_RecordDemo(startskill, 1, startepisode, startmap, myargv[p+1]);
- D_DoomLoop(); // Never returns
- }
+ p = M_CheckParm("-record");
+ if (p && p < myargc - 1)
+ {
+ G_RecordDemo(startskill, 1, startepisode, startmap, myargv[p + 1]);
+ D_DoomLoop(); // Never returns
+ }
- p = M_CheckParm("-playdemo");
- if(p && p < myargc-1)
- {
- singledemo = true; // Quit after one demo
- G_DeferedPlayDemo(myargv[p+1]);
- D_DoomLoop(); // Never returns
- }
+ p = M_CheckParm("-playdemo");
+ if (p && p < myargc - 1)
+ {
+ singledemo = true; // Quit after one demo
+ G_DeferedPlayDemo(myargv[p + 1]);
+ D_DoomLoop(); // Never returns
+ }
- p = M_CheckParm("-timedemo");
- if(p && p < myargc-1)
- {
- G_TimeDemo(myargv[p+1]);
- D_DoomLoop(); // Never returns
- }
+ p = M_CheckParm("-timedemo");
+ if (p && p < myargc - 1)
+ {
+ G_TimeDemo(myargv[p + 1]);
+ D_DoomLoop(); // Never returns
+ }
- p = M_CheckParm("-loadgame");
- if(p && p < myargc-1)
- {
- if(cdrom)
- {
- sprintf(file, SAVEGAMENAMECD"%c.hsg", myargv[p+1][0]);
- }
- else
- {
- sprintf(file, SAVEGAMENAME"%c.hsg", myargv[p+1][0]);
- }
- G_LoadGame(file);
- }
+ p = M_CheckParm("-loadgame");
+ if (p && p < myargc - 1)
+ {
+ if (cdrom)
+ {
+ sprintf(file, SAVEGAMENAMECD "%c.hsg", myargv[p + 1][0]);
+ }
+ else
+ {
+ sprintf(file, SAVEGAMENAME "%c.hsg", myargv[p + 1][0]);
+ }
+ G_LoadGame(file);
+ }
- // Check valid episode and map
- if((autostart || netgame) && (devMap == false))
- {
- if(M_ValidEpisodeMap(startepisode, startmap) == false)
- {
- startepisode = 1;
- startmap = 1;
- }
- }
+ // Check valid episode and map
+ if ((autostart || netgame) && (devMap == false))
+ {
+ if (M_ValidEpisodeMap(startepisode, startmap) == false)
+ {
+ startepisode = 1;
+ startmap = 1;
+ }
+ }
- if(gameaction != ga_loadgame)
- {
- UpdateState |= I_FULLSCRN;
- BorderNeedRefresh = true;
- if(autostart || netgame)
- {
- G_InitNew(startskill, startepisode, startmap);
- }
- else
- {
- D_StartTitle();
- }
- }
+ if (gameaction != ga_loadgame)
+ {
+ UpdateState |= I_FULLSCRN;
+ BorderNeedRefresh = true;
+ if (autostart || netgame)
+ {
+ G_InitNew(startskill, startepisode, startmap);
+ }
+ else
+ {
+ D_StartTitle();
+ }
+ }
#ifdef __WATCOMC__
- _settextcursor(0x0607); // bring the cursor back
+ _settextcursor(0x0607); // bring the cursor back
#endif
- D_DoomLoop(); // Never returns
+ D_DoomLoop(); // Never returns
}
--- a/src/heretic/d_net.c
+++ b/src/heretic/d_net.c
@@ -1,784 +1,812 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
-// d_net.c
+// d_net.c
// This version has the fixed ticdup code
-
-#include "DoomDef.h"
-
-#define NCMD_EXIT 0x80000000
-#define NCMD_RETRANSMIT 0x40000000
-#define NCMD_SETUP 0x20000000
-#define NCMD_KILL 0x10000000 // kill game
-#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
-
-==============================================================================
-*/
-
-#define RESENDCOUNT 10
-#define PL_DRONE 0x80 // bit flag in doomdata->player
-
-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
-int resendcount[MAXNETNODES];
-
-int nodeforplayer[MAXPLAYERS];
-
-int maketic;
-int lastnettic, skiptics;
-int ticdup;
-int maxsend; // BACKUPTICS/(2*ticdup)-1
-
-void D_ProcessEvents (void);
-void G_BuildTiccmd (ticcmd_t *cmd);
-void D_DoAdvanceDemo (void);
-
-boolean reboundpacket;
-doomdata_t reboundstore;
-
-
-int NetbufferSize (void)
-{
- return (int)&(((doomdata_t *)0)->cmds[netbuffer->numtics]);
-}
-
-unsigned NetbufferChecksum (void)
-{
- unsigned c;
- int i,l;
-
- c = 0x1234567;
-
-#if defined(NeXT) || defined(NORMALUNIX)
- return 0; // byte order problems
-#endif
-
- l = (NetbufferSize () - (int)&(((doomdata_t *)0)->retransmitfrom))/4;
- for (i=0 ; i<l ; i++)
- c += ((unsigned *)&netbuffer->retransmitfrom)[i] * (i+1);
-
- return c & NCMD_CHECKSUM;
-}
-
-int ExpandTics (int low)
-{
- int delta;
-
- delta = low - (maketic&0xff);
-
- if (delta >= -64 && delta <= 64)
- return (maketic&~0xff) + low;
- if (delta > 64)
- return (maketic&~0xff) - 256 + low;
- if (delta < -64)
- return (maketic&~0xff) + 256 + low;
-
- I_Error ("ExpandTics: strange value %i at maketic %i",low,maketic);
- return 0;
-}
-
-
-//============================================================================
-
-
-/*
-==============
-=
-= HSendPacket
-=
-==============
-*/
-
-void HSendPacket (int node, int flags)
-{
- netbuffer->checksum = NetbufferChecksum () | flags;
-
- if (!node)
- {
- reboundstore = *netbuffer;
- reboundpacket = true;
- return;
- }
-
- if (demoplayback)
- return;
-
- if (!netgame)
- I_Error ("Tried to transmit to another node");
-
- doomcom->command = CMD_SEND;
- doomcom->remotenode = node;
- doomcom->datalength = NetbufferSize ();
-
-if (debugfile)
-{
- int i;
- int realretrans;
- if (netbuffer->checksum & NCMD_RETRANSMIT)
- realretrans = ExpandTics (netbuffer->retransmitfrom);
- else
- realretrans = -1;
- fprintf (debugfile,"send (%i + %i, R %i) [%i] "
- ,ExpandTics(netbuffer->starttic),netbuffer->numtics, realretrans, doomcom->datalength);
- for (i=0 ; i<doomcom->datalength ; i++)
- fprintf (debugfile,"%i ",((byte *)netbuffer)[i]);
- fprintf (debugfile,"\n");
-}
-
- I_NetCmd ();
-}
-
-/*
-==============
-=
-= HGetPacket
-=
-= Returns false if no packet is waiting
-=
-==============
-*/
-
-boolean HGetPacket (void)
-{
- if (reboundpacket)
- {
- *netbuffer = reboundstore;
- doomcom->remotenode = 0;
- reboundpacket = false;
- return true;
- }
-
- if (!netgame)
- return false;
- if (demoplayback)
- return false;
-
- doomcom->command = CMD_GET;
- I_NetCmd ();
- if (doomcom->remotenode == -1)
- return false;
-
- if (doomcom->datalength != NetbufferSize ())
- {
- if (debugfile)
- fprintf (debugfile,"bad packet length %i\n",doomcom->datalength);
- return false;
- }
-
- if (NetbufferChecksum () != (netbuffer->checksum&NCMD_CHECKSUM) )
- {
- if (debugfile)
- fprintf (debugfile,"bad packet checksum\n");
- return false;
- }
-
-if (debugfile)
-{
- int realretrans;
- int i;
-
- if (netbuffer->checksum & NCMD_SETUP)
- fprintf (debugfile,"setup packet\n");
- else
- {
- if (netbuffer->checksum & NCMD_RETRANSMIT)
- realretrans = ExpandTics (netbuffer->retransmitfrom);
- else
- realretrans = -1;
- fprintf (debugfile,"get %i = (%i + %i, R %i)[%i] ",doomcom->remotenode,
- ExpandTics(netbuffer->starttic),netbuffer->numtics, realretrans, doomcom->datalength);
- for (i=0 ; i<doomcom->datalength ; i++)
- fprintf (debugfile,"%i ",((byte *)netbuffer)[i]);
- fprintf (debugfile,"\n");
- }
-}
- return true;
-}
-
-
-/*
-===================
-=
-= GetPackets
-=
-===================
-*/
-
-char exitmsg[80];
-
-void GetPackets (void)
-{
- int netconsole;
- int netnode;
- ticcmd_t *src, *dest;
- int realend;
- int realstart;
-
- while (HGetPacket ())
- {
- if (netbuffer->checksum & NCMD_SETUP)
- continue; // extra setup packet
-
- 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])
- continue;
- nodeingame[netnode] = false;
- playeringame[netconsole] = false;
- strcpy (exitmsg, "PLAYER 1 LEFT THE GAME");
- exitmsg[7] += netconsole;
- players[consoleplayer].message = exitmsg;
-// if (demorecording)
-// G_CheckDemoStatus ();
- 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) )
- {
- resendto[netnode] = ExpandTics(netbuffer->retransmitfrom);
-if (debugfile)
-fprintf (debugfile,"retransmit from %i\n", resendto[netnode]);
- resendcount[netnode] = RESENDCOUNT;
- }
- else
- resendcount[netnode]--;
-
- //
- // check for out of order / duplicated packet
- //
- if (realend == nettics[netnode])
- continue;
-
- if (realend < nettics[netnode])
- {
-if (debugfile)
-fprintf (debugfile,"out of order packet (%i + %i)\n" ,realstart,netbuffer->numtics);
- 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", netnode, realstart, nettics[netnode]);
- remoteresend[netnode] = true;
- continue;
- }
-
-//
-// update command store from the packet
-//
-{
- int start;
-
- remoteresend[netnode] = false;
-
- start = nettics[netnode] - realstart;
- src = &netbuffer->cmds[start];
-
- while (nettics[netnode] < realend)
- {
- dest = &netcmds[netconsole][nettics[netnode]%BACKUPTICS];
- nettics[netnode]++;
- *dest = *src;
- src++;
- }
- }
-}
-
-}
-
-/*
-=============
-=
-= NetUpdate
-=
-= Builds ticcmds for console player
-= sends out a packet
-=============
-*/
-
-int gametime;
-
-void NetUpdate (void)
-{
- int nowtime;
- int newtics;
- int i,j;
- int realstart;
- int gameticdiv;
-
-//
-// check time
-//
- nowtime = I_GetTime ()/ticdup;
- newtics = nowtime - gametime;
- gametime = nowtime;
-
- if (newtics <= 0) // nothing new to update
- goto listen;
-
- if (skiptics <= newtics)
- {
- newtics -= skiptics;
- skiptics = 0;
- }
- else
- {
- skiptics -= newtics;
- newtics = 0;
- }
-
-
- 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
-//printf ("mk:%i ",maketic);
- G_BuildTiccmd (&localcmds[maketic%BACKUPTICS]);
- maketic++;
- }
-
-
- if (singletics)
- return; // singletic update is syncronous
-
-//
-// send the packet to the other nodes
-//
- for (i=0 ; i<doomcom->numnodes ; i++)
- if (nodeingame[i])
- {
- netbuffer->starttic = realstart = resendto[i];
- netbuffer->numtics = maketic - realstart;
- if (netbuffer->numtics > BACKUPTICS)
- I_Error ("NetUpdate: netbuffer->numtics > BACKUPTICS");
-
- resendto[i] = maketic - doomcom->extratics;
-
- for (j=0 ; j< netbuffer->numtics ; j++)
- netbuffer->cmds[j] =
- localcmds[(realstart+j)%BACKUPTICS];
-
- if (remoteresend[i])
- {
- netbuffer->retransmitfrom = nettics[i];
- HSendPacket (i, NCMD_RETRANSMIT);
- }
- else
- {
- netbuffer->retransmitfrom = 0;
- HSendPacket (i, 0);
- }
- }
-
-//
-// listen for other packets
-//
-listen:
-
- GetPackets ();
-}
-
-
-/*
-=====================
-=
-= CheckAbort
-=
-=====================
-*/
-
-void CheckAbort (void)
-{
- event_t *ev;
- int stoptic;
-
- stoptic = I_GetTime () + 2;
- while (I_GetTime() < stoptic)
- I_StartTic ();
-
- I_StartTic ();
- for ( ; eventtail != eventhead
- ; eventtail = (++eventtail)&(MAXEVENTS-1) )
- {
- ev = &events[eventtail];
- if (ev->type == ev_keydown && ev->data1 == KEY_ESCAPE)
- I_Error ("Network game synchronization aborted.");
- }
-}
-
-/*
-=====================
-=
-= D_ArbitrateNetStart
-=
-=====================
-*/
-
-void D_ArbitrateNetStart (void)
-{
- int i;
- boolean gotinfo[MAXNETNODES];
-
- autostart = true;
- memset (gotinfo,0,sizeof(gotinfo));
-
- if (doomcom->consoleplayer)
- { // listen for setup info from key player
-// mprintf ("listening for network start info...\n");
- while (1)
- {
- CheckAbort ();
- if (!HGetPacket ())
- continue;
- if (netbuffer->checksum & NCMD_SETUP)
- {
- if (netbuffer->player != VERSION)
- I_Error ("Different DOOM versions cannot play a net game!");
- startskill = netbuffer->retransmitfrom & 15;
- deathmatch = (netbuffer->retransmitfrom & 0xc0) >> 6;
- nomonsters = (netbuffer->retransmitfrom & 0x20) > 0;
- respawnparm = (netbuffer->retransmitfrom & 0x10) > 0;
- //startmap = netbuffer->starttic & 0x3f;
- //startepisode = netbuffer->starttic >> 6;
- startmap = netbuffer->starttic&15;
- startepisode = netbuffer->starttic>>4;
- return;
- }
- }
- }
- else
- { // key player, send the setup info
-// mprintf ("sending network start info...\n");
- do
- {
- CheckAbort ();
- for (i=0 ; i<doomcom->numnodes ; i++)
- {
- netbuffer->retransmitfrom = startskill;
- if (deathmatch)
- netbuffer->retransmitfrom |= (deathmatch<<6);
- if (nomonsters)
- netbuffer->retransmitfrom |= 0x20;
- if (respawnparm)
- netbuffer->retransmitfrom |= 0x10;
- //netbuffer->starttic = startepisode * 64 + startmap;
- netbuffer->starttic = (startepisode<<4)+startmap;
- netbuffer->player = VERSION;
- netbuffer->numtics = 0;
- HSendPacket (i, NCMD_SETUP);
- }
-
-#if 1
- for(i = 10 ; i && HGetPacket(); --i)
- {
- if((netbuffer->player&0x7f) < MAXNETNODES)
- gotinfo[netbuffer->player&0x7f] = true;
- }
-#else
- while (HGetPacket ())
- {
- gotinfo[netbuffer->player&0x7f] = true;
- }
-#endif
-
- for (i=1 ; i<doomcom->numnodes ; i++)
- if (!gotinfo[i])
- break;
- } while (i < doomcom->numnodes);
- }
-}
-
-/*
-===================
-=
-= D_CheckNetGame
-=
-= Works out player numbers among the net participants
-===================
-*/
-
-extern int viewangleoffset;
-
-void D_CheckNetGame (void)
-{
- int i;
-
- for (i=0 ; i<MAXNETNODES ; i++)
- {
- nodeingame[i] = false;
- nettics[i] = 0;
- remoteresend[i] = false; // set when local needs tics
- resendto[i] = 0; // which tic to start sending
- }
-
-// I_InitNetwork sets doomcom and netgame
- I_InitNetwork ();
- if (doomcom->id != DOOMCOM_ID)
- I_Error ("Doomcom buffer invalid!");
- netbuffer = &doomcom->data;
- consoleplayer = displayplayer = doomcom->consoleplayer;
- if (netgame)
- D_ArbitrateNetStart ();
-//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)
- maxsend = 1;
-
- for (i=0 ; i<doomcom->numplayers ; i++)
- playeringame[i] = true;
- for (i=0 ; i<doomcom->numnodes ; i++)
- nodeingame[i] = true;
-
-//printf ("player %i of %i (%i nodes)\n", consoleplayer+1, doomcom->numplayers, doomcom->numnodes);
-
-}
-
-/*
-==================
-=
-= D_QuitNetGame
-=
-= Called before quitting to leave a net game without hanging the
-= other players
-=
-==================
-*/
-
-void D_QuitNetGame (void)
-{
- int i, j;
-
- if (debugfile)
- fclose (debugfile);
-
- 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++)
- {
- for (j=1 ; j<doomcom->numnodes ; j++)
- if (nodeingame[j])
- HSendPacket (j, NCMD_EXIT);
- I_WaitVBL (1);
- }
-}
-
-
-
-/*
-===============
-=
-= TryRunTics
-=
-===============
-*/
-
-int frametics[4], frameon;
-int frameskip[4];
-int oldnettics;
-extern boolean advancedemo;
-
-void TryRunTics (void)
-{
- int i;
- int lowtic;
- int entertic;
- static int oldentertics;
- int realtics, availabletics;
- int counts;
- int numplaying;
-
-//
-// get real tics
-//
- entertic = I_GetTime ()/ticdup;
- realtics = entertic - oldentertics;
- oldentertics = entertic;
-
-//
-// get available tics
-//
- NetUpdate ();
-
- lowtic = MAXINT;
- numplaying = 0;
- for (i=0 ; i<doomcom->numnodes ; i++)
- if (nodeingame[i])
- {
- numplaying++;
- if (nettics[i] < lowtic)
- lowtic = nettics[i];
- }
- availabletics = lowtic - gametic/ticdup;
-
-
-//
-// decide how many tics to run
-//
- if (realtics < availabletics-1)
- counts = realtics+1;
- else if (realtics < availabletics)
- counts = realtics;
- else
- counts = availabletics;
- if (counts < 1)
- counts = 1;
-
- frameon++;
-
-if (debugfile)
- fprintf (debugfile,"=======real: %i avail: %i game: %i\n",realtics, availabletics,counts);
-
- 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 ();
- lowtic = MAXINT;
-
- for (i=0 ; i<doomcom->numnodes ; i++)
- if (nodeingame[i] && nettics[i] < lowtic)
- lowtic = nettics[i];
-
- 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)
- {
- MN_Ticker ();
- return;
- }
- }
-
-//
-// run the count * ticdup dics
-//
- while (counts--)
- {
- for (i=0 ; i<ticdup ; i++)
- {
- if (gametic/ticdup > lowtic)
- I_Error ("gametic>lowtic");
- if (advancedemo)
- D_DoAdvanceDemo ();
- MN_Ticker ();
- G_Ticker ();
- gametic++;
- //
- // modify command for duplicated tics
- //
- if (i != ticdup-1)
- {
- ticcmd_t *cmd;
- int buf;
- int j;
-
- buf = (gametic/ticdup)%BACKUPTICS;
- for (j=0 ; j<MAXPLAYERS ; j++)
- {
- cmd = &netcmds[j][buf];
- cmd->chatchar = 0;
- if (cmd->buttons & BT_SPECIAL)
- cmd->buttons = 0;
- }
- }
- }
- NetUpdate (); // check for new console commands
- }
-}
+
+#include "DoomDef.h"
+
+#define NCMD_EXIT 0x80000000
+#define NCMD_RETRANSMIT 0x40000000
+#define NCMD_SETUP 0x20000000
+#define NCMD_KILL 0x10000000 // kill game
+#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
+
+==============================================================================
+*/
+
+#define RESENDCOUNT 10
+#define PL_DRONE 0x80 // bit flag in doomdata->player
+
+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
+int resendcount[MAXNETNODES];
+
+int nodeforplayer[MAXPLAYERS];
+
+int maketic;
+int lastnettic, skiptics;
+int ticdup;
+int maxsend; // BACKUPTICS/(2*ticdup)-1
+
+void D_ProcessEvents(void);
+void G_BuildTiccmd(ticcmd_t * cmd);
+void D_DoAdvanceDemo(void);
+
+boolean reboundpacket;
+doomdata_t reboundstore;
+
+
+int NetbufferSize(void)
+{
+ return (int) &(((doomdata_t *) 0)->cmds[netbuffer->numtics]);
+}
+
+unsigned NetbufferChecksum(void)
+{
+ unsigned c;
+ int i, l;
+
+ c = 0x1234567;
+
+#if defined(NeXT) || defined(NORMALUNIX)
+ return 0; // byte order problems
+#endif
+
+ l = (NetbufferSize() - (int) &(((doomdata_t *) 0)->retransmitfrom)) / 4;
+ for (i = 0; i < l; i++)
+ c += ((unsigned *) &netbuffer->retransmitfrom)[i] * (i + 1);
+
+ return c & NCMD_CHECKSUM;
+}
+
+int ExpandTics(int low)
+{
+ int delta;
+
+ delta = low - (maketic & 0xff);
+
+ if (delta >= -64 && delta <= 64)
+ return (maketic & ~0xff) + low;
+ if (delta > 64)
+ return (maketic & ~0xff) - 256 + low;
+ if (delta < -64)
+ return (maketic & ~0xff) + 256 + low;
+
+ I_Error("ExpandTics: strange value %i at maketic %i", low, maketic);
+ return 0;
+}
+
+
+//============================================================================
+
+
+/*
+==============
+=
+= HSendPacket
+=
+==============
+*/
+
+void HSendPacket(int node, int flags)
+{
+ netbuffer->checksum = NetbufferChecksum() | flags;
+
+ if (!node)
+ {
+ reboundstore = *netbuffer;
+ reboundpacket = true;
+ return;
+ }
+
+ if (demoplayback)
+ return;
+
+ if (!netgame)
+ I_Error("Tried to transmit to another node");
+
+ doomcom->command = CMD_SEND;
+ doomcom->remotenode = node;
+ doomcom->datalength = NetbufferSize();
+
+ if (debugfile)
+ {
+ int i;
+ int realretrans;
+ if (netbuffer->checksum & NCMD_RETRANSMIT)
+ realretrans = ExpandTics(netbuffer->retransmitfrom);
+ else
+ realretrans = -1;
+ fprintf(debugfile, "send (%i + %i, R %i) [%i] ",
+ ExpandTics(netbuffer->starttic), netbuffer->numtics,
+ realretrans, doomcom->datalength);
+ for (i = 0; i < doomcom->datalength; i++)
+ fprintf(debugfile, "%i ", ((byte *) netbuffer)[i]);
+ fprintf(debugfile, "\n");
+ }
+
+ I_NetCmd();
+}
+
+/*
+==============
+=
+= HGetPacket
+=
+= Returns false if no packet is waiting
+=
+==============
+*/
+
+boolean HGetPacket(void)
+{
+ if (reboundpacket)
+ {
+ *netbuffer = reboundstore;
+ doomcom->remotenode = 0;
+ reboundpacket = false;
+ return true;
+ }
+
+ if (!netgame)
+ return false;
+ if (demoplayback)
+ return false;
+
+ doomcom->command = CMD_GET;
+ I_NetCmd();
+ if (doomcom->remotenode == -1)
+ return false;
+
+ if (doomcom->datalength != NetbufferSize())
+ {
+ if (debugfile)
+ fprintf(debugfile, "bad packet length %i\n", doomcom->datalength);
+ return false;
+ }
+
+ if (NetbufferChecksum() != (netbuffer->checksum & NCMD_CHECKSUM))
+ {
+ if (debugfile)
+ fprintf(debugfile, "bad packet checksum\n");
+ return false;
+ }
+
+ if (debugfile)
+ {
+ int realretrans;
+ int i;
+
+ if (netbuffer->checksum & NCMD_SETUP)
+ fprintf(debugfile, "setup packet\n");
+ else
+ {
+ if (netbuffer->checksum & NCMD_RETRANSMIT)
+ realretrans = ExpandTics(netbuffer->retransmitfrom);
+ else
+ realretrans = -1;
+ fprintf(debugfile, "get %i = (%i + %i, R %i)[%i] ",
+ doomcom->remotenode, ExpandTics(netbuffer->starttic),
+ netbuffer->numtics, realretrans, doomcom->datalength);
+ for (i = 0; i < doomcom->datalength; i++)
+ fprintf(debugfile, "%i ", ((byte *) netbuffer)[i]);
+ fprintf(debugfile, "\n");
+ }
+ }
+ return true;
+}
+
+
+/*
+===================
+=
+= GetPackets
+=
+===================
+*/
+
+char exitmsg[80];
+
+void GetPackets(void)
+{
+ int netconsole;
+ int netnode;
+ ticcmd_t *src, *dest;
+ int realend;
+ int realstart;
+
+ while (HGetPacket())
+ {
+ if (netbuffer->checksum & NCMD_SETUP)
+ continue; // extra setup packet
+
+ 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])
+ continue;
+ nodeingame[netnode] = false;
+ playeringame[netconsole] = false;
+ strcpy(exitmsg, "PLAYER 1 LEFT THE GAME");
+ exitmsg[7] += netconsole;
+ players[consoleplayer].message = exitmsg;
+// if (demorecording)
+// G_CheckDemoStatus ();
+ 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))
+ {
+ resendto[netnode] = ExpandTics(netbuffer->retransmitfrom);
+ if (debugfile)
+ fprintf(debugfile, "retransmit from %i\n", resendto[netnode]);
+ resendcount[netnode] = RESENDCOUNT;
+ }
+ else
+ resendcount[netnode]--;
+
+ //
+ // check for out of order / duplicated packet
+ //
+ if (realend == nettics[netnode])
+ continue;
+
+ if (realend < nettics[netnode])
+ {
+ if (debugfile)
+ fprintf(debugfile, "out of order packet (%i + %i)\n",
+ realstart, netbuffer->numtics);
+ 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", netnode,
+ realstart, nettics[netnode]);
+ remoteresend[netnode] = true;
+ continue;
+ }
+
+//
+// update command store from the packet
+//
+ {
+ int start;
+
+ remoteresend[netnode] = false;
+
+ start = nettics[netnode] - realstart;
+ src = &netbuffer->cmds[start];
+
+ while (nettics[netnode] < realend)
+ {
+ dest = &netcmds[netconsole][nettics[netnode] % BACKUPTICS];
+ nettics[netnode]++;
+ *dest = *src;
+ src++;
+ }
+ }
+ }
+
+}
+
+/*
+=============
+=
+= NetUpdate
+=
+= Builds ticcmds for console player
+= sends out a packet
+=============
+*/
+
+int gametime;
+
+void NetUpdate(void)
+{
+ int nowtime;
+ int newtics;
+ int i, j;
+ int realstart;
+ int gameticdiv;
+
+//
+// check time
+//
+ nowtime = I_GetTime() / ticdup;
+ newtics = nowtime - gametime;
+ gametime = nowtime;
+
+ if (newtics <= 0) // nothing new to update
+ goto listen;
+
+ if (skiptics <= newtics)
+ {
+ newtics -= skiptics;
+ skiptics = 0;
+ }
+ else
+ {
+ skiptics -= newtics;
+ newtics = 0;
+ }
+
+
+ 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
+//printf ("mk:%i ",maketic);
+ G_BuildTiccmd(&localcmds[maketic % BACKUPTICS]);
+ maketic++;
+ }
+
+
+ if (singletics)
+ return; // singletic update is syncronous
+
+//
+// send the packet to the other nodes
+//
+ for (i = 0; i < doomcom->numnodes; i++)
+ if (nodeingame[i])
+ {
+ netbuffer->starttic = realstart = resendto[i];
+ netbuffer->numtics = maketic - realstart;
+ if (netbuffer->numtics > BACKUPTICS)
+ I_Error("NetUpdate: netbuffer->numtics > BACKUPTICS");
+
+ resendto[i] = maketic - doomcom->extratics;
+
+ for (j = 0; j < netbuffer->numtics; j++)
+ netbuffer->cmds[j] = localcmds[(realstart + j) % BACKUPTICS];
+
+ if (remoteresend[i])
+ {
+ netbuffer->retransmitfrom = nettics[i];
+ HSendPacket(i, NCMD_RETRANSMIT);
+ }
+ else
+ {
+ netbuffer->retransmitfrom = 0;
+ HSendPacket(i, 0);
+ }
+ }
+
+//
+// listen for other packets
+//
+ listen:
+
+ GetPackets();
+}
+
+
+/*
+=====================
+=
+= CheckAbort
+=
+=====================
+*/
+
+void CheckAbort(void)
+{
+ event_t *ev;
+ int stoptic;
+
+ stoptic = I_GetTime() + 2;
+ while (I_GetTime() < stoptic)
+ I_StartTic();
+
+ I_StartTic();
+ for (; eventtail != eventhead;
+ eventtail = (++eventtail) & (MAXEVENTS - 1))
+ {
+ ev = &events[eventtail];
+ if (ev->type == ev_keydown && ev->data1 == KEY_ESCAPE)
+ I_Error("Network game synchronization aborted.");
+ }
+}
+
+/*
+=====================
+=
+= D_ArbitrateNetStart
+=
+=====================
+*/
+
+void D_ArbitrateNetStart(void)
+{
+ int i;
+ boolean gotinfo[MAXNETNODES];
+
+ autostart = true;
+ memset(gotinfo, 0, sizeof(gotinfo));
+
+ if (doomcom->consoleplayer)
+ { // listen for setup info from key player
+// mprintf ("listening for network start info...\n");
+ while (1)
+ {
+ CheckAbort();
+ if (!HGetPacket())
+ continue;
+ if (netbuffer->checksum & NCMD_SETUP)
+ {
+ if (netbuffer->player != VERSION)
+ I_Error
+ ("Different DOOM versions cannot play a net game!");
+ startskill = netbuffer->retransmitfrom & 15;
+ deathmatch = (netbuffer->retransmitfrom & 0xc0) >> 6;
+ nomonsters = (netbuffer->retransmitfrom & 0x20) > 0;
+ respawnparm = (netbuffer->retransmitfrom & 0x10) > 0;
+ //startmap = netbuffer->starttic & 0x3f;
+ //startepisode = netbuffer->starttic >> 6;
+ startmap = netbuffer->starttic & 15;
+ startepisode = netbuffer->starttic >> 4;
+ return;
+ }
+ }
+ }
+ else
+ { // key player, send the setup info
+// mprintf ("sending network start info...\n");
+ do
+ {
+ CheckAbort();
+ for (i = 0; i < doomcom->numnodes; i++)
+ {
+ netbuffer->retransmitfrom = startskill;
+ if (deathmatch)
+ netbuffer->retransmitfrom |= (deathmatch << 6);
+ if (nomonsters)
+ netbuffer->retransmitfrom |= 0x20;
+ if (respawnparm)
+ netbuffer->retransmitfrom |= 0x10;
+ //netbuffer->starttic = startepisode * 64 + startmap;
+ netbuffer->starttic = (startepisode << 4) + startmap;
+ netbuffer->player = VERSION;
+ netbuffer->numtics = 0;
+ HSendPacket(i, NCMD_SETUP);
+ }
+
+#if 1
+ for (i = 10; i && HGetPacket(); --i)
+ {
+ if ((netbuffer->player & 0x7f) < MAXNETNODES)
+ gotinfo[netbuffer->player & 0x7f] = true;
+ }
+#else
+ while (HGetPacket())
+ {
+ gotinfo[netbuffer->player & 0x7f] = true;
+ }
+#endif
+
+ for (i = 1; i < doomcom->numnodes; i++)
+ if (!gotinfo[i])
+ break;
+ }
+ while (i < doomcom->numnodes);
+ }
+}
+
+/*
+===================
+=
+= D_CheckNetGame
+=
+= Works out player numbers among the net participants
+===================
+*/
+
+extern int viewangleoffset;
+
+void D_CheckNetGame(void)
+{
+ int i;
+
+ for (i = 0; i < MAXNETNODES; i++)
+ {
+ nodeingame[i] = false;
+ nettics[i] = 0;
+ remoteresend[i] = false; // set when local needs tics
+ resendto[i] = 0; // which tic to start sending
+ }
+
+// I_InitNetwork sets doomcom and netgame
+ I_InitNetwork();
+ if (doomcom->id != DOOMCOM_ID)
+ I_Error("Doomcom buffer invalid!");
+ netbuffer = &doomcom->data;
+ consoleplayer = displayplayer = doomcom->consoleplayer;
+ if (netgame)
+ D_ArbitrateNetStart();
+//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)
+ maxsend = 1;
+
+ for (i = 0; i < doomcom->numplayers; i++)
+ playeringame[i] = true;
+ for (i = 0; i < doomcom->numnodes; i++)
+ nodeingame[i] = true;
+
+//printf ("player %i of %i (%i nodes)\n", consoleplayer+1, doomcom->numplayers, doomcom->numnodes);
+
+}
+
+/*
+==================
+=
+= D_QuitNetGame
+=
+= Called before quitting to leave a net game without hanging the
+= other players
+=
+==================
+*/
+
+void D_QuitNetGame(void)
+{
+ int i, j;
+
+ if (debugfile)
+ fclose(debugfile);
+
+ 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++)
+ {
+ for (j = 1; j < doomcom->numnodes; j++)
+ if (nodeingame[j])
+ HSendPacket(j, NCMD_EXIT);
+ I_WaitVBL(1);
+ }
+}
+
+
+
+/*
+===============
+=
+= TryRunTics
+=
+===============
+*/
+
+int frametics[4], frameon;
+int frameskip[4];
+int oldnettics;
+extern boolean advancedemo;
+
+void TryRunTics(void)
+{
+ int i;
+ int lowtic;
+ int entertic;
+ static int oldentertics;
+ int realtics, availabletics;
+ int counts;
+ int numplaying;
+
+//
+// get real tics
+//
+ entertic = I_GetTime() / ticdup;
+ realtics = entertic - oldentertics;
+ oldentertics = entertic;
+
+//
+// get available tics
+//
+ NetUpdate();
+
+ lowtic = MAXINT;
+ numplaying = 0;
+ for (i = 0; i < doomcom->numnodes; i++)
+ if (nodeingame[i])
+ {
+ numplaying++;
+ if (nettics[i] < lowtic)
+ lowtic = nettics[i];
+ }
+ availabletics = lowtic - gametic / ticdup;
+
+
+//
+// decide how many tics to run
+//
+ if (realtics < availabletics - 1)
+ counts = realtics + 1;
+ else if (realtics < availabletics)
+ counts = realtics;
+ else
+ counts = availabletics;
+ if (counts < 1)
+ counts = 1;
+
+ frameon++;
+
+ if (debugfile)
+ fprintf(debugfile, "=======real: %i avail: %i game: %i\n", realtics,
+ availabletics, counts);
+
+ 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();
+ lowtic = MAXINT;
+
+ for (i = 0; i < doomcom->numnodes; i++)
+ if (nodeingame[i] && nettics[i] < lowtic)
+ lowtic = nettics[i];
+
+ 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)
+ {
+ MN_Ticker();
+ return;
+ }
+ }
+
+//
+// run the count * ticdup dics
+//
+ while (counts--)
+ {
+ for (i = 0; i < ticdup; i++)
+ {
+ if (gametic / ticdup > lowtic)
+ I_Error("gametic>lowtic");
+ if (advancedemo)
+ D_DoAdvanceDemo();
+ MN_Ticker();
+ G_Ticker();
+ gametic++;
+ //
+ // modify command for duplicated tics
+ //
+ if (i != ticdup - 1)
+ {
+ ticcmd_t *cmd;
+ int buf;
+ int j;
+
+ buf = (gametic / ticdup) % BACKUPTICS;
+ for (j = 0; j < MAXPLAYERS; j++)
+ {
+ cmd = &netcmds[j][buf];
+ cmd->chatchar = 0;
+ if (cmd->buttons & BT_SPECIAL)
+ cmd->buttons = 0;
+ }
+ }
+ }
+ NetUpdate(); // check for new console commands
+ }
+}
--- a/src/heretic/doomdata.h
+++ b/src/heretic/doomdata.h
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// DoomData.h
// all external data is defined here
@@ -8,7 +30,8 @@
#ifndef __BYTEBOOL__
#define __BYTEBOOL__
-typedef enum {false, true} boolean;
+typedef enum
+{ false, true } boolean;
typedef unsigned char byte;
#endif
@@ -21,35 +44,37 @@
*/
// lump order in a map wad
-enum {ML_LABEL, ML_THINGS, ML_LINEDEFS, ML_SIDEDEFS, ML_VERTEXES, ML_SEGS,
-ML_SSECTORS, ML_NODES, ML_SECTORS , ML_REJECT, ML_BLOCKMAP};
+enum
+{ ML_LABEL, ML_THINGS, ML_LINEDEFS, ML_SIDEDEFS, ML_VERTEXES, ML_SEGS,
+ ML_SSECTORS, ML_NODES, ML_SECTORS, ML_REJECT, ML_BLOCKMAP
+};
typedef struct
{
- short x,y;
+ short x, y;
} mapvertex_t;
typedef struct
{
- short textureoffset;
- short rowoffset;
- char toptexture[8], bottomtexture[8], midtexture[8];
- short sector; // on viewer's side
+ short textureoffset;
+ short rowoffset;
+ char toptexture[8], bottomtexture[8], midtexture[8];
+ short sector; // on viewer's side
} mapsidedef_t;
typedef struct
{
- short v1, v2;
- short flags;
- short special, tag;
- short sidenum[2]; // sidenum[1] will be -1 if one sided
+ short v1, v2;
+ short flags;
+ short special, tag;
+ short sidenum[2]; // sidenum[1] will be -1 if one sided
} maplinedef_t;
#define ML_BLOCKING 1
#define ML_BLOCKMONSTERS 2
-#define ML_TWOSIDED 4 // backside will not be present at all
- // if not two sided
+#define ML_TWOSIDED 4 // backside will not be present at all
+ // if not two sided
// 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)
@@ -59,50 +84,51 @@
#define ML_DONTPEGTOP 8
#define ML_DONTPEGBOTTOM 16
-#define ML_SECRET 32 // don't map as two sided: IT'S A SECRET!
-#define ML_SOUNDBLOCK 64 // don't let sound cross two of these
-#define ML_DONTDRAW 128 // don't draw on the automap
-#define ML_MAPPED 256 // set if allready drawn in automap
+#define ML_SECRET 32 // don't map as two sided: IT'S A SECRET!
+#define ML_SOUNDBLOCK 64 // don't let sound cross two of these
+#define ML_DONTDRAW 128 // don't draw on the automap
+#define ML_MAPPED 256 // set if allready drawn in automap
-typedef struct
+typedef struct
{
- short floorheight, ceilingheight;
- char floorpic[8], ceilingpic[8];
- short lightlevel;
- short special, tag;
+ short floorheight, ceilingheight;
+ char floorpic[8], ceilingpic[8];
+ short lightlevel;
+ short special, tag;
} mapsector_t;
typedef struct
{
- short numsegs;
- short firstseg; // segs are stored sequentially
+ short numsegs;
+ short firstseg; // segs are stored sequentially
} mapsubsector_t;
typedef struct
{
- short v1, v2;
- short angle;
- short linedef, side;
- short offset;
+ short v1, v2;
+ short angle;
+ short linedef, side;
+ short offset;
} mapseg_t;
-enum {BOXTOP,BOXBOTTOM,BOXLEFT,BOXRIGHT}; // bbox coordinates
+enum
+{ BOXTOP, BOXBOTTOM, BOXLEFT, BOXRIGHT }; // bbox coordinates
#define NF_SUBSECTOR 0x8000
typedef struct
{
- short x,y,dx,dy; // partition line
- short bbox[2][4]; // bounding box for each child
- unsigned short children[2]; // if NF_SUBSECTOR its a subsector
+ short x, y, dx, dy; // partition line
+ short bbox[2][4]; // bounding box for each child
+ unsigned short children[2]; // if NF_SUBSECTOR its a subsector
} mapnode_t;
typedef struct
{
- short x,y;
- short angle;
- short type;
- short options;
+ short x, y;
+ short angle;
+ short type;
+ short options;
} mapthing_t;
#define MTF_EASY 1
@@ -120,22 +146,22 @@
typedef struct
{
- short originx;
- short originy;
- short patch;
- short stepdir;
- short colormap;
+ short originx;
+ short originy;
+ short patch;
+ short stepdir;
+ short colormap;
} mappatch_t;
typedef struct
{
- char name[8];
- boolean masked;
- short width;
- short height;
- void **columndirectory; // OBSOLETE
- short patchcount;
- mappatch_t patches[1];
+ char name[8];
+ boolean masked;
+ short width;
+ short height;
+ void **columndirectory; // OBSOLETE
+ short patchcount;
+ mappatch_t patches[1];
} maptexture_t;
@@ -150,31 +176,31 @@
// posts are runs of non masked source pixels
typedef struct
{
- byte topdelta; // -1 is the last post in a column
- byte length;
+ byte topdelta; // -1 is the last post in a column
+ byte length;
// length data bytes follows
} post_t;
// column_t is a list of 0 or more post_t, (byte)-1 terminated
-typedef post_t column_t;
+typedef post_t column_t;
// a patch holds one or more columns
// patches are used for sprites and all masked pictures
-typedef struct
-{
- short width; // bounding box size
- short height;
- short leftoffset; // pixels to the left of origin
- short topoffset; // pixels below the origin
- int columnofs[8]; // only [width] used
- // the [0] is &columnofs[width]
-} patch_t;
+typedef struct
+{
+ short width; // bounding box size
+ short height;
+ short leftoffset; // pixels to the left of origin
+ short topoffset; // pixels below the origin
+ int columnofs[8]; // only [width] used
+ // the [0] is &columnofs[width]
+} patch_t;
// a pic is an unmasked block of pixels
typedef struct
{
- byte width,height;
- byte data;
+ byte width, height;
+ byte data;
} pic_t;
@@ -191,5 +217,4 @@
-#endif // __DOOMDATA__
-
+#endif // __DOOMDATA__
--- a/src/heretic/doomdef.h
+++ b/src/heretic/doomdef.h
@@ -1,1182 +1,1204 @@
-
-// DoomDef.h
-
-#ifndef __DOOMDEF__
-#define __DOOMDEF__
-#include <stdio.h>
-#include <string.h>
-#ifdef __WATCOMC__
-#include <malloc.h>
-#define strcasecmp strcmpi
-#define strncasecmp strnicmp
-#endif
-
-#define VERSION 130
-#define VERSION_TEXT "v1.3"
-
-// if rangecheck is undefined, most parameter validation debugging code
-// will not be compiled
-//#define RANGECHECK
-
-// all external data is defined here
-#include "DoomData.h"
-
-// all important printed strings
-#include "DStrings.h"
-
-// header generated by multigen utility
-#include "info.h"
-
-extern byte *destview, *destscreen; // PC direct to screen pointers
-
-//
-// most key data are simple ascii (uppercased)
-//
-#define KEY_RIGHTARROW 0xae
-#define KEY_LEFTARROW 0xac
-#define KEY_UPARROW 0xad
-#define KEY_DOWNARROW 0xaf
-#define KEY_ESCAPE 27
-#define KEY_ENTER 13
-#define KEY_F1 (0x80+0x3b)
-#define KEY_F2 (0x80+0x3c)
-#define KEY_F3 (0x80+0x3d)
-#define KEY_F4 (0x80+0x3e)
-#define KEY_F5 (0x80+0x3f)
-#define KEY_F6 (0x80+0x40)
-#define KEY_F7 (0x80+0x41)
-#define KEY_F8 (0x80+0x42)
-#define KEY_F9 (0x80+0x43)
-#define KEY_F10 (0x80+0x44)
-#define KEY_F11 (0x80+0x57)
-#define KEY_F12 (0x80+0x58)
-
-#define KEY_BACKSPACE 127
-#define KEY_PAUSE 0xff
-
-#define KEY_EQUALS 0x3d
-#define KEY_MINUS 0x2d
-
-#define KEY_RSHIFT (0x80+0x36)
-#define KEY_RCTRL (0x80+0x1d)
-#define KEY_RALT (0x80+0x38)
-
-#define KEY_LALT KEY_RALT
-
-
-
-#define MAXCHAR ((char)0x7f)
-#define MAXSHORT ((short)0x7fff)
-#define MAXINT ((int)0x7fffffff) /* max pos 32-bit int */
-#define MAXLONG ((long)0x7fffffff)
-
-#define MINCHAR ((char)0x80)
-#define MINSHORT ((short)0x8000)
-#define MININT ((int)0x80000000) /* max negative 32-bit integer */
-#define MINLONG ((long)0x80000000)
-
-#define FINEANGLES 8192
-#define FINEMASK (FINEANGLES-1)
-#define ANGLETOFINESHIFT 19 // 0x100000000 to 0x2000
-
-#define SAVEGAMENAME "hticsav"
-#define SAVEGAMENAMECD "c:\\heretic.cd\\hticsav"
-
-/*
-===============================================================================
-
- GLOBAL TYPES
-
-===============================================================================
-*/
-
-#define NUMARTIFCTS 28
-#define MAXPLAYERS 4
-#define TICRATE 35 // number of tics / second
-#define TICSPERSEC 35
-
-#define FRACBITS 16
-#define FRACUNIT (1<<FRACBITS)
-typedef int fixed_t;
-
-#define ANGLE_1 0x01000000
-#define ANGLE_45 0x20000000
-#define ANGLE_90 0x40000000
-#define ANGLE_180 0x80000000
-#define ANGLE_MAX 0xffffffff
-
-#define ANG45 0x20000000
-#define ANG90 0x40000000
-#define ANG180 0x80000000
-#define ANG270 0xc0000000
-
-typedef unsigned angle_t;
-
-typedef enum
-{
- sk_baby,
- sk_easy,
- sk_medium,
- sk_hard,
- sk_nightmare
-} skill_t;
-
-typedef enum
-{
- ev_keydown,
- ev_keyup,
- ev_mouse,
- ev_joystick
-} evtype_t;
-
-typedef struct
-{
- evtype_t type;
- int data1; // keys / mouse/joystick buttons
- int data2; // mouse/joystick x move
- int data3; // mouse/joystick y move
-} event_t;
-
-typedef struct
-{
- char forwardmove; // *2048 for move
- char sidemove; // *2048 for move
- short angleturn; // <<16 for angle delta
- short consistancy; // checks for net game
- byte chatchar;
- byte buttons;
- byte lookfly; // look/fly up/down/centering
- byte arti; // artitype_t to use
-} ticcmd_t;
-
-#define BT_ATTACK 1
-#define BT_USE 2
-#define BT_CHANGE 4 // if true, the next 3 bits hold weapon num
-#define BT_WEAPONMASK (8+16+32)
-#define BT_WEAPONSHIFT 3
-
-#define BT_SPECIAL 128 // game events, not really buttons
-#define BTS_SAVEMASK (4+8+16)
-#define BTS_SAVESHIFT 2
-#define BT_SPECIALMASK 3
-#define BTS_PAUSE 1 // pause the game
-#define BTS_SAVEGAME 2 // save the game at each console
-// savegame slot numbers occupy the second byte of buttons
-
-typedef enum
-{
- GS_LEVEL,
- GS_INTERMISSION,
- GS_FINALE,
- GS_DEMOSCREEN
-} gamestate_t;
-
-typedef enum
-{
- ga_nothing,
- ga_loadlevel,
- ga_newgame,
- ga_loadgame,
- ga_savegame,
- ga_playdemo,
- ga_completed,
- ga_victory,
- ga_worlddone,
- ga_screenshot
-} gameaction_t;
-
-typedef enum
-{
- wipe_0,
- wipe_1,
- wipe_2,
- wipe_3,
- wipe_4,
- NUMWIPES,
- wipe_random
-} wipe_t;
-
-/*
-===============================================================================
-
- MAPOBJ DATA
-
-===============================================================================
-*/
-
-// think_t is a function pointer to a routine to handle an actor
-typedef void (*think_t) ();
-
-typedef struct thinker_s
-{
- struct thinker_s *prev, *next;
- think_t function;
-} thinker_t;
-
-struct player_s;
-
-typedef struct mobj_s
-{
- thinker_t thinker; // thinker links
-
-// info for drawing
- fixed_t x,y,z;
- struct mobj_s *snext, *sprev; // links in sector (if needed)
- angle_t angle;
- spritenum_t sprite; // used to find patch_t and flip value
- int frame; // might be ord with FF_FULLBRIGHT
-
-// interaction info
- struct mobj_s *bnext, *bprev; // links in blocks (if needed)
- struct subsector_s *subsector;
- fixed_t floorz, ceilingz; // closest together of contacted secs
- fixed_t radius, height; // for movement checking
- fixed_t momx, momy, momz; // momentums
-
- int validcount; // if == validcount, already checked
-
- mobjtype_t type;
- mobjinfo_t *info; // &mobjinfo[mobj->type]
- int tics; // state tic counter
- state_t *state;
- int damage; // For missiles
- int flags;
- int flags2; // Heretic flags
- int special1; // Special info
- int special2; // Special info
- int health;
- int movedir; // 0-7
- int movecount; // when 0, select a new dir
- struct mobj_s *target; // thing being chased/attacked (or NULL)
- // also the originator for missiles
- int reactiontime; // if non 0, don't attack yet
- // used by player to freeze a bit after
- // teleporting
- int threshold; // if >0, the target will be chased
- // no matter what (even if shot)
- struct player_s *player; // only valid if type == MT_PLAYER
- int lastlook; // player number last looked for
-
- mapthing_t spawnpoint; // for nightmare respawn
-} mobj_t;
-
-// each sector has a degenmobj_t in it's center for sound origin purposes
-typedef struct
-{
- thinker_t thinker; // not used for anything
- fixed_t x,y,z;
-} degenmobj_t;
-
-// Most damage defined using HITDICE
-#define HITDICE(a) ((1+(P_Random()&7))*a)
-
-//
-// frame flags
-//
-#define FF_FULLBRIGHT 0x8000 // flag in thing->frame
-#define FF_FRAMEMASK 0x7fff
-
-// --- mobj.flags ---
-
-#define MF_SPECIAL 1 // call P_SpecialThing when touched
-#define MF_SOLID 2
-#define MF_SHOOTABLE 4
-#define MF_NOSECTOR 8 // don't use the sector links
- // (invisible but touchable)
-#define MF_NOBLOCKMAP 16 // don't use the blocklinks
- // (inert but displayable)
-#define MF_AMBUSH 32
-#define MF_JUSTHIT 64 // try to attack right back
-#define MF_JUSTATTACKED 128 // take at least one step before attacking
-#define MF_SPAWNCEILING 256 // hang from ceiling instead of floor
-#define MF_NOGRAVITY 512 // don't apply gravity every tic
-
-// movement flags
-#define MF_DROPOFF 0x400 // allow jumps from high places
-#define MF_PICKUP 0x800 // for players to pick up items
-#define MF_NOCLIP 0x1000 // player cheat
-#define MF_SLIDE 0x2000 // keep info about sliding along walls
-#define MF_FLOAT 0x4000 // allow moves to any height, no gravity
-#define MF_TELEPORT 0x8000 // don't cross lines or look at heights
-#define MF_MISSILE 0x10000 // don't hit same species, explode on block
-
-#define MF_DROPPED 0x20000 // dropped by a demon, not level spawned
-#define MF_SHADOW 0x40000 // use fuzzy draw (shadow demons / invis)
-#define MF_NOBLOOD 0x80000 // don't bleed when shot (use puff)
-#define MF_CORPSE 0x100000 // don't stop moving halfway off a step
-#define MF_INFLOAT 0x200000 // floating to a height for a move, don't
- // auto float to target's height
-
-#define MF_COUNTKILL 0x400000 // count towards intermission kill total
-#define MF_COUNTITEM 0x800000 // count towards intermission item total
-
-#define MF_SKULLFLY 0x1000000 // skull in flight
-#define MF_NOTDMATCH 0x2000000 // don't spawn in death match (key cards)
-
-#define MF_TRANSLATION 0xc000000 // if 0x4 0x8 or 0xc, use a translation
-#define MF_TRANSSHIFT 26 // table for player colormaps
-
-// --- mobj.flags2 ---
-
-#define MF2_LOGRAV 0x00000001 // alternate gravity setting
-#define MF2_WINDTHRUST 0x00000002 // gets pushed around by the wind
- // specials
-#define MF2_FLOORBOUNCE 0x00000004 // bounces off the floor
-#define MF2_THRUGHOST 0x00000008 // missile will pass through ghosts
-#define MF2_FLY 0x00000010 // fly mode is active
-#define MF2_FOOTCLIP 0x00000020 // if feet are allowed to be clipped
-#define MF2_SPAWNFLOAT 0x00000040 // spawn random float z
-#define MF2_NOTELEPORT 0x00000080 // does not teleport
-#define MF2_RIP 0x00000100 // missile rips through solid
- // targets
-#define MF2_PUSHABLE 0x00000200 // can be pushed by other moving
- // mobjs
-#define MF2_SLIDE 0x00000400 // slides against walls
-#define MF2_ONMOBJ 0x00000800 // mobj is resting on top of another
- // mobj
-#define MF2_PASSMOBJ 0x00001000 // Enable z block checking. If on,
- // this flag will allow the mobj to
- // pass over/under other mobjs.
-#define MF2_CANNOTPUSH 0x00002000 // cannot push other pushable mobjs
-#define MF2_FEETARECLIPPED 0x00004000 // a mobj's feet are now being cut
-#define MF2_BOSS 0x00008000 // mobj is a major boss
-#define MF2_FIREDAMAGE 0x00010000 // does fire damage
-#define MF2_NODMGTHRUST 0x00020000 // does not thrust target when
- // damaging
-#define MF2_TELESTOMP 0x00040000 // mobj can stomp another
-#define MF2_FLOATBOB 0x00080000 // use float bobbing z movement
-#define MF2_DONTDRAW 0X00100000 // don't generate a vissprite
-
-//=============================================================================
-typedef enum
-{
- PST_LIVE, // playing
- PST_DEAD, // dead on the ground
- PST_REBORN // ready to restart
-} playerstate_t;
-
-// psprites are scaled shapes directly on the view screen
-// coordinates are given for a 320*200 view screen
-typedef enum
-{
- ps_weapon,
- ps_flash,
- NUMPSPRITES
-} psprnum_t;
-
-typedef struct
-{
- state_t *state; // a NULL state means not active
- int tics;
- fixed_t sx, sy;
-} pspdef_t;
-
-typedef enum
-{
- key_yellow,
- key_green,
- key_blue,
- NUMKEYS
-} keytype_t;
-
-typedef enum
-{
- wp_staff,
- wp_goldwand,
- wp_crossbow,
- wp_blaster,
- wp_skullrod,
- wp_phoenixrod,
- wp_mace,
- wp_gauntlets,
- wp_beak,
- NUMWEAPONS,
- wp_nochange
-} weapontype_t;
-
-#define AMMO_GWND_WIMPY 10
-#define AMMO_GWND_HEFTY 50
-#define AMMO_CBOW_WIMPY 5
-#define AMMO_CBOW_HEFTY 20
-#define AMMO_BLSR_WIMPY 10
-#define AMMO_BLSR_HEFTY 25
-#define AMMO_SKRD_WIMPY 20
-#define AMMO_SKRD_HEFTY 100
-#define AMMO_PHRD_WIMPY 1
-#define AMMO_PHRD_HEFTY 10
-#define AMMO_MACE_WIMPY 20
-#define AMMO_MACE_HEFTY 100
-
-typedef enum
-{
- am_goldwand,
- am_crossbow,
- am_blaster,
- am_skullrod,
- am_phoenixrod,
- am_mace,
- NUMAMMO,
- am_noammo // staff, gauntlets
-} ammotype_t;
-
-typedef struct
-{
- ammotype_t ammo;
- int upstate;
- int downstate;
- int readystate;
- int atkstate;
- int holdatkstate;
- int flashstate;
-} weaponinfo_t;
-
-extern weaponinfo_t wpnlev1info[NUMWEAPONS];
-extern weaponinfo_t wpnlev2info[NUMWEAPONS];
-
-typedef enum
-{
- arti_none,
- arti_invulnerability,
- arti_invisibility,
- arti_health,
- arti_superhealth,
- arti_tomeofpower,
- arti_torch,
- arti_firebomb,
- arti_egg,
- arti_fly,
- arti_teleport,
- NUMARTIFACTS
-} artitype_t;
-
-typedef enum
-{
- pw_None,
- pw_invulnerability,
- pw_invisibility,
- pw_allmap,
- pw_infrared,
- pw_weaponlevel2,
- pw_flight,
- pw_shield,
- pw_health2,
- NUMPOWERS
-} powertype_t;
-
-#define INVULNTICS (30*35)
-#define INVISTICS (60*35)
-#define INFRATICS (120*35)
-#define IRONTICS (60*35)
-#define WPNLEV2TICS (40*35)
-#define FLIGHTTICS (60*35)
-
-#define CHICKENTICS (40*35)
-
-#define MESSAGETICS (4*35)
-#define BLINKTHRESHOLD (4*32)
-
-#define NUMINVENTORYSLOTS 14
-typedef struct
-{
- int type;
- int count;
-} inventory_t;
-
-/*
-================
-=
-= player_t
-=
-================
-*/
-
-typedef struct player_s
-{
- mobj_t *mo;
- playerstate_t playerstate;
- ticcmd_t cmd;
-
- fixed_t viewz; // focal origin above r.z
- fixed_t viewheight; // base height above floor for viewz
- fixed_t deltaviewheight; // squat speed
- fixed_t bob; // bounded/scaled total momentum
-
- int flyheight;
- int lookdir;
- boolean centering;
- int health; // only used between levels, mo->health
- // is used during levels
- int armorpoints, armortype; // armor type is 0-2
-
- inventory_t inventory[NUMINVENTORYSLOTS];
- artitype_t readyArtifact;
- int artifactCount;
- int inventorySlotNum;
- int powers[NUMPOWERS];
- boolean keys[NUMKEYS];
- boolean backpack;
- signed int frags[MAXPLAYERS]; // kills of other players
- weapontype_t readyweapon;
- weapontype_t pendingweapon; // wp_nochange if not changing
- boolean weaponowned[NUMWEAPONS];
- int ammo[NUMAMMO];
- int maxammo[NUMAMMO];
- int attackdown, usedown; // true if button down last tic
- int cheats; // bit flags
-
- int refire; // refired shots are less accurate
-
- int killcount, itemcount, secretcount; // for intermission
- char *message; // hint messages
- int messageTics; // counter for showing messages
- int damagecount, bonuscount;// for screen flashing
- int flamecount; // for flame thrower duration
- mobj_t *attacker; // who did damage (NULL for floors)
- int extralight; // so gun flashes light up areas
- int fixedcolormap; // can be set to REDCOLORMAP, etc
- int colormap; // 0-3 for which color to draw player
- pspdef_t psprites[NUMPSPRITES]; // view sprites (gun, etc)
- boolean didsecret; // true if secret level has been done
- int chickenTics; // player is a chicken if > 0
- int chickenPeck; // chicken peck countdown
- mobj_t *rain1; // active rain maker 1
- mobj_t *rain2; // active rain maker 2
-} player_t;
-
-#define CF_NOCLIP 1
-#define CF_GODMODE 2
-#define CF_NOMOMENTUM 4 // not really a cheat, just a debug aid
-
-
-#define BACKUPTICS 12 // CHANGED FROM 12 !?!?
-
-typedef struct
-{
- unsigned checksum; // high bit is retransmit request
- byte retransmitfrom; // only valid if NCMD_RETRANSMIT
- byte starttic;
- byte player, numtics;
- ticcmd_t cmds[BACKUPTICS];
-} doomdata_t;
-
-typedef struct
-{
- long id;
- short intnum; // DOOM executes an int to execute commands
-
-// communication between DOOM and the driver
- short command; // CMD_SEND or CMD_GET
- short remotenode; // dest for send, set by get (-1 = no packet)
- short datalength; // bytes in doomdata to be sent
-
-// info common to all nodes
- short numnodes; // console is allways node 0
- short ticdup; // 1 = no duplication, 2-5 = dup for slow nets
- short extratics; // 1 = send a backup tic in every packet
- short deathmatch; // 1 = deathmatch
- short savegame; // -1 = new game, 0-5 = load savegame
- short episode; // 1-3
- short map; // 1-9
- short skill; // 1-5
-
-// info specific to this node
- short consoleplayer;
- short numplayers;
- short angleoffset; // 1 = left, 0 = center, -1 = right
- short drone; // 1 = drone
-
-// packet data to be sent
- doomdata_t data;
-} doomcom_t;
-
-#define DOOMCOM_ID 0x12345678l
-
-extern doomcom_t *doomcom;
-extern doomdata_t *netbuffer; // points inside doomcom
-
-#define MAXNETNODES 8 // max computers in a game
-
-#define CMD_SEND 1
-#define CMD_GET 2
-
-#define SBARHEIGHT 42 // status bar height at bottom of screen
-
-
-/*
-===============================================================================
-
- GLOBAL VARIABLES
-
-===============================================================================
-*/
-
-#define TELEFOGHEIGHT (32*FRACUNIT)
-
-#define MAXEVENTS 64
-
-extern event_t events[MAXEVENTS];
-extern int eventhead;
-extern int eventtail;
-
-extern fixed_t finesine[5*FINEANGLES/4];
-extern fixed_t *finecosine;
-
-extern gameaction_t gameaction;
-
-extern boolean paused;
-
-extern boolean shareware; // true if main WAD is the shareware version
-extern boolean ExtendedWAD; // true if main WAD is the extended version
-
-extern boolean nomonsters; // checkparm of -nomonsters
-
-extern boolean respawnparm; // checkparm of -respawn
-
-extern boolean debugmode; // checkparm of -debug
-
-extern boolean usergame; // ok to save / end game
-
-extern boolean ravpic; // checkparm of -ravpic
-
-extern boolean altpal; // checkparm to use an alternate palette routine
-
-extern boolean cdrom; // true if cd-rom mode active ("-cdrom")
-
-extern boolean deathmatch; // only if started as net death
-
-extern boolean netgame; // only true if >1 player
-
-extern boolean playeringame[MAXPLAYERS];
-
-extern int consoleplayer; // player taking events and displaying
-
-extern int displayplayer;
-
-extern int viewangleoffset; // ANG90 = left side, ANG270 = right
-
-extern player_t players[MAXPLAYERS];
-
-extern boolean singletics; // debug flag to cancel adaptiveness
-
-extern boolean DebugSound; // debug flag for displaying sound info
-
-extern int maxammo[NUMAMMO];
-
-extern boolean demoplayback;
-extern int skytexture;
-
-extern gamestate_t gamestate;
-extern skill_t gameskill;
-extern boolean respawnmonsters;
-extern int gameepisode;
-extern int gamemap;
-extern int prevmap;
-extern int totalkills, totalitems, totalsecret; // for intermission
-extern int levelstarttic; // gametic at level start
-extern int leveltime; // tics in game play for par
-
-extern ticcmd_t netcmds[MAXPLAYERS][BACKUPTICS];
-extern int ticdup;
-
-#define MAXNETNODES 8
-extern ticcmd_t localcmds[BACKUPTICS];
-extern int rndindex;
-extern int gametic, maketic;
-extern int nettics[MAXNETNODES];
-
-#define SAVEGAMESIZE 0x30000
-#define SAVESTRINGSIZE 24
-extern byte *savebuffer;
-extern byte *save_p;
-
-extern mapthing_t *deathmatch_p;
-extern mapthing_t deathmatchstarts[10];
-extern mapthing_t playerstarts[MAXPLAYERS];
-
-extern int viewwindowx;
-extern int viewwindowy;
-extern int viewwidth;
-extern int scaledviewwidth;
-extern int viewheight;
-
-extern int mouseSensitivity;
-
-extern boolean precache; // if true, load all graphics at level load
-
-extern byte *screen; // off screen work buffer, from V_video.c
-
-extern boolean singledemo; // quit after playing a demo from cmdline
-
-extern FILE *debugfile;
-extern int bodyqueslot;
-extern skill_t startskill;
-extern int startepisode;
-extern int startmap;
-extern boolean autostart;
-
-/*
-===============================================================================
-
- GLOBAL FUNCTIONS
-
-===============================================================================
-*/
-
-
-fixed_t FixedMul (fixed_t a, fixed_t b);
-fixed_t FixedDiv (fixed_t a, fixed_t b);
-fixed_t FixedDiv2 (fixed_t a, fixed_t b);
-
-#ifdef __WATCOMC__
-#pragma aux FixedMul = \
- "imul ebx", \
- "shrd eax,edx,16" \
- parm [eax] [ebx] \
- value [eax] \
- modify exact [eax edx]
-
-#pragma aux FixedDiv2 = \
- "cdq", \
- "shld edx,eax,16", \
- "sal eax,16", \
- "idiv ebx" \
- parm [eax] [ebx] \
- value [eax] \
- modify exact [eax edx]
-#endif
-
-#ifdef __BIG_ENDIAN__
-short ShortSwap(short);
-long LongSwap(long);
-#define SHORT(x) ShortSwap(x)
-#define LONG(x) LongSwap(x)
-#else
-#define SHORT(x) (x)
-#define LONG(x) (x)
-#endif
-
-
-//-----------
-//MEMORY ZONE
-//-----------
-// tags < 100 are not overwritten until freed
-#define PU_STATIC 1 // static entire execution time
-#define PU_SOUND 2 // static while playing
-#define PU_MUSIC 3 // static while playing
-#define PU_DAVE 4 // anything else Dave wants static
-#define PU_LEVEL 50 // static until level exited
-#define PU_LEVSPEC 51 // a special thinker in a level
-// tags >= 100 are purgable whenever needed
-#define PU_PURGELEVEL 100
-#define PU_CACHE 101
-
-void Z_Init (void);
-void *Z_Malloc (int size, int tag, void *ptr);
-void Z_Free (void *ptr);
-void Z_FreeTags (int lowtag, int hightag);
-void Z_DumpHeap (int lowtag, int hightag);
-void Z_FileDumpHeap (FILE *f);
-void Z_CheckHeap (void);
-void Z_ChangeTag2 (void *ptr, int tag);
-int Z_FreeMemory (void);
-
-extern boolean MallocFailureOk;
-
-typedef struct memblock_s
-{
- int size; // including the header and possibly tiny fragments
- void **user; // NULL if a free block
- int tag; // purgelevel
- int id; // should be ZONEID
- struct memblock_s *next, *prev;
-} memblock_t;
-
-#define Z_ChangeTag(p,t) \
-{ \
-if (( (memblock_t *)( (byte *)(p) - sizeof(memblock_t)))->id!=0x1d4a11) \
- I_Error("Z_CT at "__FILE__":%i",__LINE__); \
-Z_ChangeTag2(p,t); \
-};
-
-//-------
-//WADFILE
-//-------
-typedef struct
-{
- char name[8];
- int handle,position,size;
-} lumpinfo_t;
-
-extern lumpinfo_t *lumpinfo;
-extern int numlumps;
-
-void W_InitMultipleFiles (char **filenames);
-
-int W_CheckNumForName (char *name);
-int W_GetNumForName (char *name);
-
-int W_LumpLength (int lump);
-void W_ReadLump (int lump, void *dest);
-
-void *W_CacheLumpNum (int lump, int tag);
-void *W_CacheLumpName (char *name, int tag);
-
-
-
-
-//----------
-//BASE LEVEL
-//----------
-void D_DoomMain (void);
-void IncThermo(void);
-void InitThermo(int max);
-void tprintf(char *string, int initflag);
-// not a globally visible function, just included for source reference
-// calls all startup code
-// parses command line options
-// if not overrided, calls N_AdvanceDemo
-
-void D_DoomLoop (void);
-// 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 functions
-// calls I_GetTime, I_StartFrame, and I_StartTic
-
-void D_PostEvent (event_t *ev);
-// called by IO functions when input is detected
-
-void NetUpdate (void);
-// create any new ticcmds and broadcast to other players
-
-void D_QuitNetGame (void);
-// broadcasts special packets to other players to notify of game exit
-
-void TryRunTics (void);
-
-//---------
-//SYSTEM IO
-//---------
-#if 1
-#define SCREENWIDTH 320
-#define SCREENHEIGHT 200
-#else
-#define SCREENWIDTH 560
-#define SCREENHEIGHT 375
-#endif
-
-byte *I_ZoneBase (int *size);
-// called by startup code to get the ammount of memory to malloc
-// for the zone management
-
-int I_GetTime (void);
-// called by D_DoomLoop
-// returns current time in tics
-
-void I_StartFrame (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_StartTic (void);
-// called by D_DoomLoop
-// called before processing each tic in a frame
-// quick syncronous operations are performed here
-// can call D_PostEvent
-
-// asyncronous interrupt functions should maintain private ques that are
-// read by the syncronous functions to be converted into events
-
-void I_Init (void);
-// called by D_DoomMain
-// determines the hardware configuration and sets up the video mode
-
-void I_InitGraphics (void);
-
-void I_InitNetwork (void);
-void I_NetCmd (void);
-
-void I_Error (char *error, ...);
-// called by anything that can generate a terminal error
-// bad exit with diagnostic message
-
-void I_Quit (void);
-// called by M_Responder when quit is selected
-// clean exit, displays sell blurb
-
-void I_SetPalette (byte *palette);
-// takes full 8 bit values
-
-void I_Update(void);
-// Copy buffer to video
-
-void I_WipeUpdate(wipe_t wipe);
-// Copy buffer to video with wipe effect
-
-void I_WaitVBL(int count);
-// wait for vertical retrace or pause a bit
-
-void I_BeginRead (void);
-void I_EndRead (void);
-
-byte *I_AllocLow (int length);
-// allocates from low memory under dos, just mallocs under unix
-
-void I_Tactile (int on, int off, int total);
-
-#ifdef __WATCOMC__
-extern boolean useexterndriver;
-
-#define EBT_FIRE 1
-#define EBT_OPENDOOR 2
-#define EBT_SPEED 4
-#define EBT_STRAFE 8
-#define EBT_MAP 0x10
-#define EBT_INVENTORYLEFT 0x20
-#define EBT_INVENTORYRIGHT 0x40
-#define EBT_USEARTIFACT 0x80
-#define EBT_FLYDROP 0x100
-#define EBT_CENTERVIEW 0x200
-#define EBT_PAUSE 0x400
-#define EBT_WEAPONCYCLE 0x800
-
-typedef struct
-{
- short vector; // Interrupt vector
-
- signed char moveForward; // forward/backward (maxes at 50)
- signed char moveSideways; // strafe (maxes at 24)
- short angleTurn; // turning speed (640 [slow] 1280 [fast])
- short angleHead; // head angle (+2080 [left] : 0 [center] : -2048 [right])
- signed char pitch; // look up/down (-110 : +90)
- signed char flyDirection; // flyheight (+1/-1)
- unsigned short buttons; // EBT_* flags
-} externdata_t;
-#endif
-
-//----
-//GAME
-//----
-
-void G_DeathMatchSpawnPlayer (int playernum);
-
-void G_InitNew (skill_t skill, int episode, int map);
-
-void G_DeferedInitNew (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_DeferedPlayDemo (char *demo);
-
-void G_LoadGame (char *name);
-// can be called by the startup code or M_Responder
-// calls P_SetupLevel or W_EnterWorld
-void G_DoLoadGame (void);
-
-void G_SaveGame (int slot, char *description);
-// called by M_Responder
-
-// Support routines for saving games
-void SV_Open(char *fileName);
-void SV_Close(char *fileName);
-void SV_Write(void *buffer, int size);
-void SV_WriteByte(byte val);
-void SV_WriteWord(unsigned short val);
-void SV_WriteLong(unsigned int val);
-
-void G_RecordDemo (skill_t skill, int numplayers, int episode
- , int map, char *name);
-// only called by startup code
-
-void G_PlayDemo (char *name);
-void G_TimeDemo (char *name);
-
-void G_ExitLevel (void);
-void G_SecretExitLevel (void);
-
-void G_WorldDone (void);
-
-void G_Ticker (void);
-boolean G_Responder (event_t *ev);
-
-void G_ScreenShot (void);
-
-//-----
-//PLAY
-//-----
-
-void P_Ticker (void);
-// called by C_Ticker
-// can call G_PlayerExited
-// carries out all thinking of monsters and players
-
-void P_SetupLevel (int episode, int map, int playermask, skill_t skill);
-// called by W_Ticker
-
-void P_Init (void);
-// called by startup code
-
-void P_ArchivePlayers (void);
-void P_UnArchivePlayers (void);
-void P_ArchiveWorld (void);
-void P_UnArchiveWorld (void);
-void P_ArchiveThinkers (void);
-void P_UnArchiveThinkers (void);
-void P_ArchiveSpecials (void);
-void P_UnArchiveSpecials (void);
-// load / save game routines
-
-
-//-------
-//REFRESH
-//-------
-
-extern boolean setsizeneeded;
-
-extern boolean BorderNeedRefresh;
-extern boolean BorderTopRefresh;
-
-extern int UpdateState;
-// define the different areas for the dirty map
-#define I_NOUPDATE 0
-#define I_FULLVIEW 1
-#define I_STATBAR 2
-#define I_MESSAGES 4
-#define I_FULLSCRN 8
-
-void R_RenderPlayerView (player_t *player);
-// called by G_Drawer
-
-void R_Init (void);
-// called by startup code
-
-void R_DrawViewBorder (void);
-void R_DrawTopBorder (void);
-// if the view size is not full screen, draws a border around it
-
-void R_SetViewSize (int blocks, int detail);
-// called by M_Responder
-
-int R_FlatNumForName (char *name);
-
-int R_TextureNumForName (char *name);
-int R_CheckTextureNumForName (char *name);
-// called by P_Ticker for switches and animations
-// returns the texture number for the texture name
-
-
-//----
-//MISC
-//----
-extern int myargc;
-extern char **myargv;
-
-int M_CheckParm (char *check);
-// returns the position of the given parameter in the arg list (0 if not found)
-
-boolean M_ValidEpisodeMap(int episode, int map);
-// returns true if the episode/map combo is valid for the current
-// game configuration
-
-void M_ForceUppercase(char *text);
-// Changes a string to uppercase
-
-int M_Random (void);
-// returns a number from 0 to 255
-int P_Random (void);
-// as M_Random, but used only by the play simulation
-
-void M_ClearRandom (void);
-// fix randoms for demos
-
-void M_FindResponseFile(void);
-
-void M_ClearBox (fixed_t *box);
-void M_AddToBox (fixed_t *box, fixed_t x, fixed_t y);
-// bounding box functions
-
-boolean M_WriteFile (char const *name, void *source, int length);
-int M_ReadFile (char const *name, byte **buffer);
-
-void M_ScreenShot (void);
-
-void M_LoadDefaults (void);
-
-void M_SaveDefaults (void);
-
-int M_DrawText (int x, int y, boolean direct, char *string);
-
-//----------------------
-// Interlude (IN_lude.c)
-//----------------------
-
-extern boolean intermission;
-
-void IN_Start(void);
-void IN_Ticker(void);
-void IN_Drawer(void);
-
-//----------------------
-// Chat mode (CT_chat.c)
-//----------------------
-
-void CT_Init(void);
-void CT_Drawer(void);
-boolean CT_Responder(event_t *ev);
-void CT_Ticker(void);
-char CT_dequeueChatChar(void);
-
-extern boolean chatmodeon;
-extern boolean ultimatemsg;
-
-//--------------------
-// Finale (F_finale.c)
-//--------------------
-
-void F_Drawer(void);
-void F_Ticker(void);
-void F_StartFinale(void);
-
-//----------------------
-// STATUS BAR (SB_bar.c)
-//----------------------
-
-extern int SB_state;
-void SB_Init(void);
-boolean SB_Responder(event_t *event);
-void SB_Ticker(void);
-void SB_Drawer(void);
-
-//-----------------
-// MENU (MN_menu.c)
-//-----------------
-
-void MN_Init(void);
-void MN_ActivateMenu(void);
-void MN_DeactivateMenu(void);
-boolean MN_Responder(event_t *event);
-void MN_Ticker(void);
-void MN_Drawer(void);
-void MN_DrTextA(char *text, int x, int y);
-int MN_TextAWidth(char *text);
-void MN_DrTextB(char *text, int x, int y);
-int MN_TextBWidth(char *text);
-
-//------
-// VIDEO
-//------
-
-extern int dirtybox[4];
-extern byte gammatable[5][256];
-extern int usegamma;
-
-void V_Init(void); // Allocates buffer screens, call before R_Init
-void V_DrawPatch(int x, int y, patch_t *patch);
-void V_DrawFuzzPatch(int x, int y, patch_t *patch);
-void V_DrawShadowedPatch(int x, int y, patch_t *patch);
-void V_DrawRawScreen(byte *raw);
-
-#include "sounds.h"
-
-#endif // __DOOMDEF__
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
+
+// DoomDef.h
+
+#ifndef __DOOMDEF__
+#define __DOOMDEF__
+#include <stdio.h>
+#include <string.h>
+#ifdef __WATCOMC__
+#include <malloc.h>
+#define strcasecmp strcmpi
+#define strncasecmp strnicmp
+#endif
+
+#define VERSION 130
+#define VERSION_TEXT "v1.3"
+
+// if rangecheck is undefined, most parameter validation debugging code
+// will not be compiled
+//#define RANGECHECK
+
+// all external data is defined here
+#include "DoomData.h"
+
+// all important printed strings
+#include "DStrings.h"
+
+// header generated by multigen utility
+#include "info.h"
+
+extern byte *destview, *destscreen; // PC direct to screen pointers
+
+//
+// most key data are simple ascii (uppercased)
+//
+#define KEY_RIGHTARROW 0xae
+#define KEY_LEFTARROW 0xac
+#define KEY_UPARROW 0xad
+#define KEY_DOWNARROW 0xaf
+#define KEY_ESCAPE 27
+#define KEY_ENTER 13
+#define KEY_F1 (0x80+0x3b)
+#define KEY_F2 (0x80+0x3c)
+#define KEY_F3 (0x80+0x3d)
+#define KEY_F4 (0x80+0x3e)
+#define KEY_F5 (0x80+0x3f)
+#define KEY_F6 (0x80+0x40)
+#define KEY_F7 (0x80+0x41)
+#define KEY_F8 (0x80+0x42)
+#define KEY_F9 (0x80+0x43)
+#define KEY_F10 (0x80+0x44)
+#define KEY_F11 (0x80+0x57)
+#define KEY_F12 (0x80+0x58)
+
+#define KEY_BACKSPACE 127
+#define KEY_PAUSE 0xff
+
+#define KEY_EQUALS 0x3d
+#define KEY_MINUS 0x2d
+
+#define KEY_RSHIFT (0x80+0x36)
+#define KEY_RCTRL (0x80+0x1d)
+#define KEY_RALT (0x80+0x38)
+
+#define KEY_LALT KEY_RALT
+
+
+
+#define MAXCHAR ((char)0x7f)
+#define MAXSHORT ((short)0x7fff)
+#define MAXINT ((int)0x7fffffff) /* max pos 32-bit int */
+#define MAXLONG ((long)0x7fffffff)
+
+#define MINCHAR ((char)0x80)
+#define MINSHORT ((short)0x8000)
+#define MININT ((int)0x80000000) /* max negative 32-bit integer */
+#define MINLONG ((long)0x80000000)
+
+#define FINEANGLES 8192
+#define FINEMASK (FINEANGLES-1)
+#define ANGLETOFINESHIFT 19 // 0x100000000 to 0x2000
+
+#define SAVEGAMENAME "hticsav"
+#define SAVEGAMENAMECD "c:\\heretic.cd\\hticsav"
+
+/*
+===============================================================================
+
+ GLOBAL TYPES
+
+===============================================================================
+*/
+
+#define NUMARTIFCTS 28
+#define MAXPLAYERS 4
+#define TICRATE 35 // number of tics / second
+#define TICSPERSEC 35
+
+#define FRACBITS 16
+#define FRACUNIT (1<<FRACBITS)
+typedef int fixed_t;
+
+#define ANGLE_1 0x01000000
+#define ANGLE_45 0x20000000
+#define ANGLE_90 0x40000000
+#define ANGLE_180 0x80000000
+#define ANGLE_MAX 0xffffffff
+
+#define ANG45 0x20000000
+#define ANG90 0x40000000
+#define ANG180 0x80000000
+#define ANG270 0xc0000000
+
+typedef unsigned angle_t;
+
+typedef enum
+{
+ sk_baby,
+ sk_easy,
+ sk_medium,
+ sk_hard,
+ sk_nightmare
+} skill_t;
+
+typedef enum
+{
+ ev_keydown,
+ ev_keyup,
+ ev_mouse,
+ ev_joystick
+} evtype_t;
+
+typedef struct
+{
+ evtype_t type;
+ int data1; // keys / mouse/joystick buttons
+ int data2; // mouse/joystick x move
+ int data3; // mouse/joystick y move
+} event_t;
+
+typedef struct
+{
+ char forwardmove; // *2048 for move
+ char sidemove; // *2048 for move
+ short angleturn; // <<16 for angle delta
+ short consistancy; // checks for net game
+ byte chatchar;
+ byte buttons;
+ byte lookfly; // look/fly up/down/centering
+ byte arti; // artitype_t to use
+} ticcmd_t;
+
+#define BT_ATTACK 1
+#define BT_USE 2
+#define BT_CHANGE 4 // if true, the next 3 bits hold weapon num
+#define BT_WEAPONMASK (8+16+32)
+#define BT_WEAPONSHIFT 3
+
+#define BT_SPECIAL 128 // game events, not really buttons
+#define BTS_SAVEMASK (4+8+16)
+#define BTS_SAVESHIFT 2
+#define BT_SPECIALMASK 3
+#define BTS_PAUSE 1 // pause the game
+#define BTS_SAVEGAME 2 // save the game at each console
+// savegame slot numbers occupy the second byte of buttons
+
+typedef enum
+{
+ GS_LEVEL,
+ GS_INTERMISSION,
+ GS_FINALE,
+ GS_DEMOSCREEN
+} gamestate_t;
+
+typedef enum
+{
+ ga_nothing,
+ ga_loadlevel,
+ ga_newgame,
+ ga_loadgame,
+ ga_savegame,
+ ga_playdemo,
+ ga_completed,
+ ga_victory,
+ ga_worlddone,
+ ga_screenshot
+} gameaction_t;
+
+typedef enum
+{
+ wipe_0,
+ wipe_1,
+ wipe_2,
+ wipe_3,
+ wipe_4,
+ NUMWIPES,
+ wipe_random
+} wipe_t;
+
+/*
+===============================================================================
+
+ MAPOBJ DATA
+
+===============================================================================
+*/
+
+// think_t is a function pointer to a routine to handle an actor
+typedef void (*think_t) ();
+
+typedef struct thinker_s
+{
+ struct thinker_s *prev, *next;
+ think_t function;
+} thinker_t;
+
+struct player_s;
+
+typedef struct mobj_s
+{
+ thinker_t thinker; // thinker links
+
+// info for drawing
+ fixed_t x, y, z;
+ struct mobj_s *snext, *sprev; // links in sector (if needed)
+ angle_t angle;
+ spritenum_t sprite; // used to find patch_t and flip value
+ int frame; // might be ord with FF_FULLBRIGHT
+
+// interaction info
+ struct mobj_s *bnext, *bprev; // links in blocks (if needed)
+ struct subsector_s *subsector;
+ fixed_t floorz, ceilingz; // closest together of contacted secs
+ fixed_t radius, height; // for movement checking
+ fixed_t momx, momy, momz; // momentums
+
+ int validcount; // if == validcount, already checked
+
+ mobjtype_t type;
+ mobjinfo_t *info; // &mobjinfo[mobj->type]
+ int tics; // state tic counter
+ state_t *state;
+ int damage; // For missiles
+ int flags;
+ int flags2; // Heretic flags
+ int special1; // Special info
+ int special2; // Special info
+ int health;
+ int movedir; // 0-7
+ int movecount; // when 0, select a new dir
+ struct mobj_s *target; // thing being chased/attacked (or NULL)
+ // also the originator for missiles
+ int reactiontime; // if non 0, don't attack yet
+ // used by player to freeze a bit after
+ // teleporting
+ int threshold; // if >0, the target will be chased
+ // no matter what (even if shot)
+ struct player_s *player; // only valid if type == MT_PLAYER
+ int lastlook; // player number last looked for
+
+ mapthing_t spawnpoint; // for nightmare respawn
+} mobj_t;
+
+// each sector has a degenmobj_t in it's center for sound origin purposes
+typedef struct
+{
+ thinker_t thinker; // not used for anything
+ fixed_t x, y, z;
+} degenmobj_t;
+
+// Most damage defined using HITDICE
+#define HITDICE(a) ((1+(P_Random()&7))*a)
+
+//
+// frame flags
+//
+#define FF_FULLBRIGHT 0x8000 // flag in thing->frame
+#define FF_FRAMEMASK 0x7fff
+
+// --- mobj.flags ---
+
+#define MF_SPECIAL 1 // call P_SpecialThing when touched
+#define MF_SOLID 2
+#define MF_SHOOTABLE 4
+#define MF_NOSECTOR 8 // don't use the sector links
+ // (invisible but touchable)
+#define MF_NOBLOCKMAP 16 // don't use the blocklinks
+ // (inert but displayable)
+#define MF_AMBUSH 32
+#define MF_JUSTHIT 64 // try to attack right back
+#define MF_JUSTATTACKED 128 // take at least one step before attacking
+#define MF_SPAWNCEILING 256 // hang from ceiling instead of floor
+#define MF_NOGRAVITY 512 // don't apply gravity every tic
+
+// movement flags
+#define MF_DROPOFF 0x400 // allow jumps from high places
+#define MF_PICKUP 0x800 // for players to pick up items
+#define MF_NOCLIP 0x1000 // player cheat
+#define MF_SLIDE 0x2000 // keep info about sliding along walls
+#define MF_FLOAT 0x4000 // allow moves to any height, no gravity
+#define MF_TELEPORT 0x8000 // don't cross lines or look at heights
+#define MF_MISSILE 0x10000 // don't hit same species, explode on block
+
+#define MF_DROPPED 0x20000 // dropped by a demon, not level spawned
+#define MF_SHADOW 0x40000 // use fuzzy draw (shadow demons / invis)
+#define MF_NOBLOOD 0x80000 // don't bleed when shot (use puff)
+#define MF_CORPSE 0x100000 // don't stop moving halfway off a step
+#define MF_INFLOAT 0x200000 // floating to a height for a move, don't
+ // auto float to target's height
+
+#define MF_COUNTKILL 0x400000 // count towards intermission kill total
+#define MF_COUNTITEM 0x800000 // count towards intermission item total
+
+#define MF_SKULLFLY 0x1000000 // skull in flight
+#define MF_NOTDMATCH 0x2000000 // don't spawn in death match (key cards)
+
+#define MF_TRANSLATION 0xc000000 // if 0x4 0x8 or 0xc, use a translation
+#define MF_TRANSSHIFT 26 // table for player colormaps
+
+// --- mobj.flags2 ---
+
+#define MF2_LOGRAV 0x00000001 // alternate gravity setting
+#define MF2_WINDTHRUST 0x00000002 // gets pushed around by the wind
+ // specials
+#define MF2_FLOORBOUNCE 0x00000004 // bounces off the floor
+#define MF2_THRUGHOST 0x00000008 // missile will pass through ghosts
+#define MF2_FLY 0x00000010 // fly mode is active
+#define MF2_FOOTCLIP 0x00000020 // if feet are allowed to be clipped
+#define MF2_SPAWNFLOAT 0x00000040 // spawn random float z
+#define MF2_NOTELEPORT 0x00000080 // does not teleport
+#define MF2_RIP 0x00000100 // missile rips through solid
+ // targets
+#define MF2_PUSHABLE 0x00000200 // can be pushed by other moving
+ // mobjs
+#define MF2_SLIDE 0x00000400 // slides against walls
+#define MF2_ONMOBJ 0x00000800 // mobj is resting on top of another
+ // mobj
+#define MF2_PASSMOBJ 0x00001000 // Enable z block checking. If on,
+ // this flag will allow the mobj to
+ // pass over/under other mobjs.
+#define MF2_CANNOTPUSH 0x00002000 // cannot push other pushable mobjs
+#define MF2_FEETARECLIPPED 0x00004000 // a mobj's feet are now being cut
+#define MF2_BOSS 0x00008000 // mobj is a major boss
+#define MF2_FIREDAMAGE 0x00010000 // does fire damage
+#define MF2_NODMGTHRUST 0x00020000 // does not thrust target when
+ // damaging
+#define MF2_TELESTOMP 0x00040000 // mobj can stomp another
+#define MF2_FLOATBOB 0x00080000 // use float bobbing z movement
+#define MF2_DONTDRAW 0X00100000 // don't generate a vissprite
+
+//=============================================================================
+typedef enum
+{
+ PST_LIVE, // playing
+ PST_DEAD, // dead on the ground
+ PST_REBORN // ready to restart
+} playerstate_t;
+
+// psprites are scaled shapes directly on the view screen
+// coordinates are given for a 320*200 view screen
+typedef enum
+{
+ ps_weapon,
+ ps_flash,
+ NUMPSPRITES
+} psprnum_t;
+
+typedef struct
+{
+ state_t *state; // a NULL state means not active
+ int tics;
+ fixed_t sx, sy;
+} pspdef_t;
+
+typedef enum
+{
+ key_yellow,
+ key_green,
+ key_blue,
+ NUMKEYS
+} keytype_t;
+
+typedef enum
+{
+ wp_staff,
+ wp_goldwand,
+ wp_crossbow,
+ wp_blaster,
+ wp_skullrod,
+ wp_phoenixrod,
+ wp_mace,
+ wp_gauntlets,
+ wp_beak,
+ NUMWEAPONS,
+ wp_nochange
+} weapontype_t;
+
+#define AMMO_GWND_WIMPY 10
+#define AMMO_GWND_HEFTY 50
+#define AMMO_CBOW_WIMPY 5
+#define AMMO_CBOW_HEFTY 20
+#define AMMO_BLSR_WIMPY 10
+#define AMMO_BLSR_HEFTY 25
+#define AMMO_SKRD_WIMPY 20
+#define AMMO_SKRD_HEFTY 100
+#define AMMO_PHRD_WIMPY 1
+#define AMMO_PHRD_HEFTY 10
+#define AMMO_MACE_WIMPY 20
+#define AMMO_MACE_HEFTY 100
+
+typedef enum
+{
+ am_goldwand,
+ am_crossbow,
+ am_blaster,
+ am_skullrod,
+ am_phoenixrod,
+ am_mace,
+ NUMAMMO,
+ am_noammo // staff, gauntlets
+} ammotype_t;
+
+typedef struct
+{
+ ammotype_t ammo;
+ int upstate;
+ int downstate;
+ int readystate;
+ int atkstate;
+ int holdatkstate;
+ int flashstate;
+} weaponinfo_t;
+
+extern weaponinfo_t wpnlev1info[NUMWEAPONS];
+extern weaponinfo_t wpnlev2info[NUMWEAPONS];
+
+typedef enum
+{
+ arti_none,
+ arti_invulnerability,
+ arti_invisibility,
+ arti_health,
+ arti_superhealth,
+ arti_tomeofpower,
+ arti_torch,
+ arti_firebomb,
+ arti_egg,
+ arti_fly,
+ arti_teleport,
+ NUMARTIFACTS
+} artitype_t;
+
+typedef enum
+{
+ pw_None,
+ pw_invulnerability,
+ pw_invisibility,
+ pw_allmap,
+ pw_infrared,
+ pw_weaponlevel2,
+ pw_flight,
+ pw_shield,
+ pw_health2,
+ NUMPOWERS
+} powertype_t;
+
+#define INVULNTICS (30*35)
+#define INVISTICS (60*35)
+#define INFRATICS (120*35)
+#define IRONTICS (60*35)
+#define WPNLEV2TICS (40*35)
+#define FLIGHTTICS (60*35)
+
+#define CHICKENTICS (40*35)
+
+#define MESSAGETICS (4*35)
+#define BLINKTHRESHOLD (4*32)
+
+#define NUMINVENTORYSLOTS 14
+typedef struct
+{
+ int type;
+ int count;
+} inventory_t;
+
+/*
+================
+=
+= player_t
+=
+================
+*/
+
+typedef struct player_s
+{
+ mobj_t *mo;
+ playerstate_t playerstate;
+ ticcmd_t cmd;
+
+ fixed_t viewz; // focal origin above r.z
+ fixed_t viewheight; // base height above floor for viewz
+ fixed_t deltaviewheight; // squat speed
+ fixed_t bob; // bounded/scaled total momentum
+
+ int flyheight;
+ int lookdir;
+ boolean centering;
+ int health; // only used between levels, mo->health
+ // is used during levels
+ int armorpoints, armortype; // armor type is 0-2
+
+ inventory_t inventory[NUMINVENTORYSLOTS];
+ artitype_t readyArtifact;
+ int artifactCount;
+ int inventorySlotNum;
+ int powers[NUMPOWERS];
+ boolean keys[NUMKEYS];
+ boolean backpack;
+ signed int frags[MAXPLAYERS]; // kills of other players
+ weapontype_t readyweapon;
+ weapontype_t pendingweapon; // wp_nochange if not changing
+ boolean weaponowned[NUMWEAPONS];
+ int ammo[NUMAMMO];
+ int maxammo[NUMAMMO];
+ int attackdown, usedown; // true if button down last tic
+ int cheats; // bit flags
+
+ int refire; // refired shots are less accurate
+
+ int killcount, itemcount, secretcount; // for intermission
+ char *message; // hint messages
+ int messageTics; // counter for showing messages
+ int damagecount, bonuscount; // for screen flashing
+ int flamecount; // for flame thrower duration
+ mobj_t *attacker; // who did damage (NULL for floors)
+ int extralight; // so gun flashes light up areas
+ int fixedcolormap; // can be set to REDCOLORMAP, etc
+ int colormap; // 0-3 for which color to draw player
+ pspdef_t psprites[NUMPSPRITES]; // view sprites (gun, etc)
+ boolean didsecret; // true if secret level has been done
+ int chickenTics; // player is a chicken if > 0
+ int chickenPeck; // chicken peck countdown
+ mobj_t *rain1; // active rain maker 1
+ mobj_t *rain2; // active rain maker 2
+} player_t;
+
+#define CF_NOCLIP 1
+#define CF_GODMODE 2
+#define CF_NOMOMENTUM 4 // not really a cheat, just a debug aid
+
+
+#define BACKUPTICS 12 // CHANGED FROM 12 !?!?
+
+typedef struct
+{
+ unsigned checksum; // high bit is retransmit request
+ byte retransmitfrom; // only valid if NCMD_RETRANSMIT
+ byte starttic;
+ byte player, numtics;
+ ticcmd_t cmds[BACKUPTICS];
+} doomdata_t;
+
+typedef struct
+{
+ long id;
+ short intnum; // DOOM executes an int to execute commands
+
+// communication between DOOM and the driver
+ short command; // CMD_SEND or CMD_GET
+ short remotenode; // dest for send, set by get (-1 = no packet)
+ short datalength; // bytes in doomdata to be sent
+
+// info common to all nodes
+ short numnodes; // console is allways node 0
+ short ticdup; // 1 = no duplication, 2-5 = dup for slow nets
+ short extratics; // 1 = send a backup tic in every packet
+ short deathmatch; // 1 = deathmatch
+ short savegame; // -1 = new game, 0-5 = load savegame
+ short episode; // 1-3
+ short map; // 1-9
+ short skill; // 1-5
+
+// info specific to this node
+ short consoleplayer;
+ short numplayers;
+ short angleoffset; // 1 = left, 0 = center, -1 = right
+ short drone; // 1 = drone
+
+// packet data to be sent
+ doomdata_t data;
+} doomcom_t;
+
+#define DOOMCOM_ID 0x12345678l
+
+extern doomcom_t *doomcom;
+extern doomdata_t *netbuffer; // points inside doomcom
+
+#define MAXNETNODES 8 // max computers in a game
+
+#define CMD_SEND 1
+#define CMD_GET 2
+
+#define SBARHEIGHT 42 // status bar height at bottom of screen
+
+
+/*
+===============================================================================
+
+ GLOBAL VARIABLES
+
+===============================================================================
+*/
+
+#define TELEFOGHEIGHT (32*FRACUNIT)
+
+#define MAXEVENTS 64
+
+extern event_t events[MAXEVENTS];
+extern int eventhead;
+extern int eventtail;
+
+extern fixed_t finesine[5 * FINEANGLES / 4];
+extern fixed_t *finecosine;
+
+extern gameaction_t gameaction;
+
+extern boolean paused;
+
+extern boolean shareware; // true if main WAD is the shareware version
+extern boolean ExtendedWAD; // true if main WAD is the extended version
+
+extern boolean nomonsters; // checkparm of -nomonsters
+
+extern boolean respawnparm; // checkparm of -respawn
+
+extern boolean debugmode; // checkparm of -debug
+
+extern boolean usergame; // ok to save / end game
+
+extern boolean ravpic; // checkparm of -ravpic
+
+extern boolean altpal; // checkparm to use an alternate palette routine
+
+extern boolean cdrom; // true if cd-rom mode active ("-cdrom")
+
+extern boolean deathmatch; // only if started as net death
+
+extern boolean netgame; // only true if >1 player
+
+extern boolean playeringame[MAXPLAYERS];
+
+extern int consoleplayer; // player taking events and displaying
+
+extern int displayplayer;
+
+extern int viewangleoffset; // ANG90 = left side, ANG270 = right
+
+extern player_t players[MAXPLAYERS];
+
+extern boolean singletics; // debug flag to cancel adaptiveness
+
+extern boolean DebugSound; // debug flag for displaying sound info
+
+extern int maxammo[NUMAMMO];
+
+extern boolean demoplayback;
+extern int skytexture;
+
+extern gamestate_t gamestate;
+extern skill_t gameskill;
+extern boolean respawnmonsters;
+extern int gameepisode;
+extern int gamemap;
+extern int prevmap;
+extern int totalkills, totalitems, totalsecret; // for intermission
+extern int levelstarttic; // gametic at level start
+extern int leveltime; // tics in game play for par
+
+extern ticcmd_t netcmds[MAXPLAYERS][BACKUPTICS];
+extern int ticdup;
+
+#define MAXNETNODES 8
+extern ticcmd_t localcmds[BACKUPTICS];
+extern int rndindex;
+extern int gametic, maketic;
+extern int nettics[MAXNETNODES];
+
+#define SAVEGAMESIZE 0x30000
+#define SAVESTRINGSIZE 24
+extern byte *savebuffer;
+extern byte *save_p;
+
+extern mapthing_t *deathmatch_p;
+extern mapthing_t deathmatchstarts[10];
+extern mapthing_t playerstarts[MAXPLAYERS];
+
+extern int viewwindowx;
+extern int viewwindowy;
+extern int viewwidth;
+extern int scaledviewwidth;
+extern int viewheight;
+
+extern int mouseSensitivity;
+
+extern boolean precache; // if true, load all graphics at level load
+
+extern byte *screen; // off screen work buffer, from V_video.c
+
+extern boolean singledemo; // quit after playing a demo from cmdline
+
+extern FILE *debugfile;
+extern int bodyqueslot;
+extern skill_t startskill;
+extern int startepisode;
+extern int startmap;
+extern boolean autostart;
+
+/*
+===============================================================================
+
+ GLOBAL FUNCTIONS
+
+===============================================================================
+*/
+
+
+fixed_t FixedMul(fixed_t a, fixed_t b);
+fixed_t FixedDiv(fixed_t a, fixed_t b);
+fixed_t FixedDiv2(fixed_t a, fixed_t b);
+
+#ifdef __WATCOMC__
+#pragma aux FixedMul = \
+ "imul ebx", \
+ "shrd eax,edx,16" \
+ parm [eax] [ebx] \
+ value [eax] \
+ modify exact [eax edx]
+
+#pragma aux FixedDiv2 = \
+ "cdq", \
+ "shld edx,eax,16", \
+ "sal eax,16", \
+ "idiv ebx" \
+ parm [eax] [ebx] \
+ value [eax] \
+ modify exact [eax edx]
+#endif
+
+#ifdef __BIG_ENDIAN__
+short ShortSwap(short);
+long LongSwap(long);
+#define SHORT(x) ShortSwap(x)
+#define LONG(x) LongSwap(x)
+#else
+#define SHORT(x) (x)
+#define LONG(x) (x)
+#endif
+
+
+//-----------
+//MEMORY ZONE
+//-----------
+// tags < 100 are not overwritten until freed
+#define PU_STATIC 1 // static entire execution time
+#define PU_SOUND 2 // static while playing
+#define PU_MUSIC 3 // static while playing
+#define PU_DAVE 4 // anything else Dave wants static
+#define PU_LEVEL 50 // static until level exited
+#define PU_LEVSPEC 51 // a special thinker in a level
+// tags >= 100 are purgable whenever needed
+#define PU_PURGELEVEL 100
+#define PU_CACHE 101
+
+void Z_Init(void);
+void *Z_Malloc(int size, int tag, void *ptr);
+void Z_Free(void *ptr);
+void Z_FreeTags(int lowtag, int hightag);
+void Z_DumpHeap(int lowtag, int hightag);
+void Z_FileDumpHeap(FILE * f);
+void Z_CheckHeap(void);
+void Z_ChangeTag2(void *ptr, int tag);
+int Z_FreeMemory(void);
+
+extern boolean MallocFailureOk;
+
+typedef struct memblock_s
+{
+ int size; // including the header and possibly tiny fragments
+ void **user; // NULL if a free block
+ int tag; // purgelevel
+ int id; // should be ZONEID
+ struct memblock_s *next, *prev;
+} memblock_t;
+
+#define Z_ChangeTag(p,t) \
+{ \
+if (( (memblock_t *)( (byte *)(p) - sizeof(memblock_t)))->id!=0x1d4a11) \
+ I_Error("Z_CT at "__FILE__":%i",__LINE__); \
+Z_ChangeTag2(p,t); \
+};
+
+//-------
+//WADFILE
+//-------
+typedef struct
+{
+ char name[8];
+ int handle, position, size;
+} lumpinfo_t;
+
+extern lumpinfo_t *lumpinfo;
+extern int numlumps;
+
+void W_InitMultipleFiles(char **filenames);
+
+int W_CheckNumForName(char *name);
+int W_GetNumForName(char *name);
+
+int W_LumpLength(int lump);
+void W_ReadLump(int lump, void *dest);
+
+void *W_CacheLumpNum(int lump, int tag);
+void *W_CacheLumpName(char *name, int tag);
+
+
+
+
+//----------
+//BASE LEVEL
+//----------
+void D_DoomMain(void);
+void IncThermo(void);
+void InitThermo(int max);
+void tprintf(char *string, int initflag);
+// not a globally visible function, just included for source reference
+// calls all startup code
+// parses command line options
+// if not overrided, calls N_AdvanceDemo
+
+void D_DoomLoop(void);
+// 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 functions
+// calls I_GetTime, I_StartFrame, and I_StartTic
+
+void D_PostEvent(event_t * ev);
+// called by IO functions when input is detected
+
+void NetUpdate(void);
+// create any new ticcmds and broadcast to other players
+
+void D_QuitNetGame(void);
+// broadcasts special packets to other players to notify of game exit
+
+void TryRunTics(void);
+
+//---------
+//SYSTEM IO
+//---------
+#if 1
+#define SCREENWIDTH 320
+#define SCREENHEIGHT 200
+#else
+#define SCREENWIDTH 560
+#define SCREENHEIGHT 375
+#endif
+
+byte *I_ZoneBase(int *size);
+// called by startup code to get the ammount of memory to malloc
+// for the zone management
+
+int I_GetTime(void);
+// called by D_DoomLoop
+// returns current time in tics
+
+void I_StartFrame(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_StartTic(void);
+// called by D_DoomLoop
+// called before processing each tic in a frame
+// quick syncronous operations are performed here
+// can call D_PostEvent
+
+// asyncronous interrupt functions should maintain private ques that are
+// read by the syncronous functions to be converted into events
+
+void I_Init(void);
+// called by D_DoomMain
+// determines the hardware configuration and sets up the video mode
+
+void I_InitGraphics(void);
+
+void I_InitNetwork(void);
+void I_NetCmd(void);
+
+void I_Error(char *error, ...);
+// called by anything that can generate a terminal error
+// bad exit with diagnostic message
+
+void I_Quit(void);
+// called by M_Responder when quit is selected
+// clean exit, displays sell blurb
+
+void I_SetPalette(byte * palette);
+// takes full 8 bit values
+
+void I_Update(void);
+// Copy buffer to video
+
+void I_WipeUpdate(wipe_t wipe);
+// Copy buffer to video with wipe effect
+
+void I_WaitVBL(int count);
+// wait for vertical retrace or pause a bit
+
+void I_BeginRead(void);
+void I_EndRead(void);
+
+byte *I_AllocLow(int length);
+// allocates from low memory under dos, just mallocs under unix
+
+void I_Tactile(int on, int off, int total);
+
+#ifdef __WATCOMC__
+extern boolean useexterndriver;
+
+#define EBT_FIRE 1
+#define EBT_OPENDOOR 2
+#define EBT_SPEED 4
+#define EBT_STRAFE 8
+#define EBT_MAP 0x10
+#define EBT_INVENTORYLEFT 0x20
+#define EBT_INVENTORYRIGHT 0x40
+#define EBT_USEARTIFACT 0x80
+#define EBT_FLYDROP 0x100
+#define EBT_CENTERVIEW 0x200
+#define EBT_PAUSE 0x400
+#define EBT_WEAPONCYCLE 0x800
+
+typedef struct
+{
+ short vector; // Interrupt vector
+
+ signed char moveForward; // forward/backward (maxes at 50)
+ signed char moveSideways; // strafe (maxes at 24)
+ short angleTurn; // turning speed (640 [slow] 1280 [fast])
+ short angleHead; // head angle (+2080 [left] : 0 [center] : -2048 [right])
+ signed char pitch; // look up/down (-110 : +90)
+ signed char flyDirection; // flyheight (+1/-1)
+ unsigned short buttons; // EBT_* flags
+} externdata_t;
+#endif
+
+//----
+//GAME
+//----
+
+void G_DeathMatchSpawnPlayer(int playernum);
+
+void G_InitNew(skill_t skill, int episode, int map);
+
+void G_DeferedInitNew(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_DeferedPlayDemo(char *demo);
+
+void G_LoadGame(char *name);
+// can be called by the startup code or M_Responder
+// calls P_SetupLevel or W_EnterWorld
+void G_DoLoadGame(void);
+
+void G_SaveGame(int slot, char *description);
+// called by M_Responder
+
+// Support routines for saving games
+void SV_Open(char *fileName);
+void SV_Close(char *fileName);
+void SV_Write(void *buffer, int size);
+void SV_WriteByte(byte val);
+void SV_WriteWord(unsigned short val);
+void SV_WriteLong(unsigned int val);
+
+void G_RecordDemo(skill_t skill, int numplayers, int episode, int map,
+ char *name);
+// only called by startup code
+
+void G_PlayDemo(char *name);
+void G_TimeDemo(char *name);
+
+void G_ExitLevel(void);
+void G_SecretExitLevel(void);
+
+void G_WorldDone(void);
+
+void G_Ticker(void);
+boolean G_Responder(event_t * ev);
+
+void G_ScreenShot(void);
+
+//-----
+//PLAY
+//-----
+
+void P_Ticker(void);
+// called by C_Ticker
+// can call G_PlayerExited
+// carries out all thinking of monsters and players
+
+void P_SetupLevel(int episode, int map, int playermask, skill_t skill);
+// called by W_Ticker
+
+void P_Init(void);
+// called by startup code
+
+void P_ArchivePlayers(void);
+void P_UnArchivePlayers(void);
+void P_ArchiveWorld(void);
+void P_UnArchiveWorld(void);
+void P_ArchiveThinkers(void);
+void P_UnArchiveThinkers(void);
+void P_ArchiveSpecials(void);
+void P_UnArchiveSpecials(void);
+// load / save game routines
+
+
+//-------
+//REFRESH
+//-------
+
+extern boolean setsizeneeded;
+
+extern boolean BorderNeedRefresh;
+extern boolean BorderTopRefresh;
+
+extern int UpdateState;
+// define the different areas for the dirty map
+#define I_NOUPDATE 0
+#define I_FULLVIEW 1
+#define I_STATBAR 2
+#define I_MESSAGES 4
+#define I_FULLSCRN 8
+
+void R_RenderPlayerView(player_t * player);
+// called by G_Drawer
+
+void R_Init(void);
+// called by startup code
+
+void R_DrawViewBorder(void);
+void R_DrawTopBorder(void);
+// if the view size is not full screen, draws a border around it
+
+void R_SetViewSize(int blocks, int detail);
+// called by M_Responder
+
+int R_FlatNumForName(char *name);
+
+int R_TextureNumForName(char *name);
+int R_CheckTextureNumForName(char *name);
+// called by P_Ticker for switches and animations
+// returns the texture number for the texture name
+
+
+//----
+//MISC
+//----
+extern int myargc;
+extern char **myargv;
+
+int M_CheckParm(char *check);
+// returns the position of the given parameter in the arg list (0 if not found)
+
+boolean M_ValidEpisodeMap(int episode, int map);
+// returns true if the episode/map combo is valid for the current
+// game configuration
+
+void M_ForceUppercase(char *text);
+// Changes a string to uppercase
+
+int M_Random(void);
+// returns a number from 0 to 255
+int P_Random(void);
+// as M_Random, but used only by the play simulation
+
+void M_ClearRandom(void);
+// fix randoms for demos
+
+void M_FindResponseFile(void);
+
+void M_ClearBox(fixed_t * box);
+void M_AddToBox(fixed_t * box, fixed_t x, fixed_t y);
+// bounding box functions
+
+boolean M_WriteFile(char const *name, void *source, int length);
+int M_ReadFile(char const *name, byte ** buffer);
+
+void M_ScreenShot(void);
+
+void M_LoadDefaults(void);
+
+void M_SaveDefaults(void);
+
+int M_DrawText(int x, int y, boolean direct, char *string);
+
+//----------------------
+// Interlude (IN_lude.c)
+//----------------------
+
+extern boolean intermission;
+
+void IN_Start(void);
+void IN_Ticker(void);
+void IN_Drawer(void);
+
+//----------------------
+// Chat mode (CT_chat.c)
+//----------------------
+
+void CT_Init(void);
+void CT_Drawer(void);
+boolean CT_Responder(event_t * ev);
+void CT_Ticker(void);
+char CT_dequeueChatChar(void);
+
+extern boolean chatmodeon;
+extern boolean ultimatemsg;
+
+//--------------------
+// Finale (F_finale.c)
+//--------------------
+
+void F_Drawer(void);
+void F_Ticker(void);
+void F_StartFinale(void);
+
+//----------------------
+// STATUS BAR (SB_bar.c)
+//----------------------
+
+extern int SB_state;
+void SB_Init(void);
+boolean SB_Responder(event_t * event);
+void SB_Ticker(void);
+void SB_Drawer(void);
+
+//-----------------
+// MENU (MN_menu.c)
+//-----------------
+
+void MN_Init(void);
+void MN_ActivateMenu(void);
+void MN_DeactivateMenu(void);
+boolean MN_Responder(event_t * event);
+void MN_Ticker(void);
+void MN_Drawer(void);
+void MN_DrTextA(char *text, int x, int y);
+int MN_TextAWidth(char *text);
+void MN_DrTextB(char *text, int x, int y);
+int MN_TextBWidth(char *text);
+
+//------
+// VIDEO
+//------
+
+extern int dirtybox[4];
+extern byte gammatable[5][256];
+extern int usegamma;
+
+void V_Init(void); // Allocates buffer screens, call before R_Init
+void V_DrawPatch(int x, int y, patch_t * patch);
+void V_DrawFuzzPatch(int x, int y, patch_t * patch);
+void V_DrawShadowedPatch(int x, int y, patch_t * patch);
+void V_DrawRawScreen(byte * raw);
+
+#include "sounds.h"
+
+#endif // __DOOMDEF__
--- a/src/heretic/dstrings.h
+++ b/src/heretic/dstrings.h
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// DStrings.h
--- a/src/heretic/f_finale.c
+++ b/src/heretic/f_finale.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// F_finale.c
#include "DoomDef.h"
@@ -4,19 +26,19 @@
#include "soundst.h"
#include <ctype.h>
-int finalestage; // 0 = text, 1 = art screen
-int finalecount;
+int finalestage; // 0 = text, 1 = art screen
+int finalecount;
#define TEXTSPEED 3
#define TEXTWAIT 250
-char *e1text = E1TEXT;
-char *e2text = E2TEXT;
-char *e3text = E3TEXT;
-char *e4text = E4TEXT;
-char *e5text = E5TEXT;
-char *finaletext;
-char *finaleflat;
+char *e1text = E1TEXT;
+char *e2text = E2TEXT;
+char *e3text = E3TEXT;
+char *e4text = E4TEXT;
+char *e5text = E5TEXT;
+char *finaletext;
+char *finaleflat;
int FontABaseLump;
@@ -33,64 +55,64 @@
=======================
*/
-void F_StartFinale (void)
+void F_StartFinale(void)
{
- gameaction = ga_nothing;
- gamestate = GS_FINALE;
- viewactive = false;
- automapactive = false;
- players[consoleplayer].messageTics = 1;
- players[consoleplayer].message = NULL;
+ gameaction = ga_nothing;
+ gamestate = GS_FINALE;
+ viewactive = false;
+ automapactive = false;
+ players[consoleplayer].messageTics = 1;
+ players[consoleplayer].message = NULL;
- switch(gameepisode)
- {
- case 1:
- finaleflat = "FLOOR25";
- finaletext = e1text;
- break;
- case 2:
- finaleflat = "FLATHUH1";
- finaletext = e2text;
- break;
- case 3:
- finaleflat = "FLTWAWA2";
- finaletext = e3text;
- break;
- case 4:
- finaleflat = "FLOOR28";
- finaletext = e4text;
- break;
- case 5:
- finaleflat = "FLOOR08";
- finaletext = e5text;
- break;
- }
+ switch (gameepisode)
+ {
+ case 1:
+ finaleflat = "FLOOR25";
+ finaletext = e1text;
+ break;
+ case 2:
+ finaleflat = "FLATHUH1";
+ finaletext = e2text;
+ break;
+ case 3:
+ finaleflat = "FLTWAWA2";
+ finaletext = e3text;
+ break;
+ case 4:
+ finaleflat = "FLOOR28";
+ finaletext = e4text;
+ break;
+ case 5:
+ finaleflat = "FLOOR08";
+ finaletext = e5text;
+ break;
+ }
- finalestage = 0;
- finalecount = 0;
- FontABaseLump = W_GetNumForName("FONTA_S")+1;
+ finalestage = 0;
+ finalecount = 0;
+ FontABaseLump = W_GetNumForName("FONTA_S") + 1;
// S_ChangeMusic(mus_victor, true);
- S_StartSong(mus_cptd, true);
+ S_StartSong(mus_cptd, true);
}
-boolean F_Responder (event_t *event)
+boolean F_Responder(event_t * event)
{
- if(event->type != ev_keydown)
- {
- return false;
- }
- if(finalestage == 1 && gameepisode == 2)
- { // we're showing the water pic, make any key kick to demo mode
- finalestage++;
- memset((byte *)0xa0000, 0, SCREENWIDTH*SCREENHEIGHT);
- memset(screen, 0, SCREENWIDTH*SCREENHEIGHT);
- I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));
- return true;
- }
- return false;
+ if (event->type != ev_keydown)
+ {
+ return false;
+ }
+ if (finalestage == 1 && gameepisode == 2)
+ { // we're showing the water pic, make any key kick to demo mode
+ finalestage++;
+ memset((byte *) 0xa0000, 0, SCREENWIDTH * SCREENHEIGHT);
+ memset(screen, 0, SCREENWIDTH * SCREENHEIGHT);
+ I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));
+ return true;
+ }
+ return false;
}
@@ -102,16 +124,17 @@
=======================
*/
-void F_Ticker (void)
+void F_Ticker(void)
{
- finalecount++;
- if (!finalestage && finalecount>strlen (finaletext)*TEXTSPEED + TEXTWAIT)
- {
- finalecount = 0;
- if(!finalestage)
- {
- finalestage = 1;
- }
+ finalecount++;
+ if (!finalestage
+ && finalecount > strlen(finaletext) * TEXTSPEED + TEXTWAIT)
+ {
+ finalecount = 0;
+ if (!finalestage)
+ {
+ finalestage = 1;
+ }
// wipegamestate = -1; // force a wipe
/*
@@ -118,7 +141,7 @@
if (gameepisode == 3)
S_StartMusic (mus_bunny);
*/
- }
+ }
}
@@ -133,34 +156,34 @@
//#include "HU_stuff.h"
//extern patch_t *hu_font[HU_FONTSIZE];
-void F_TextWrite (void)
+void F_TextWrite(void)
{
- byte *src, *dest;
- int x,y;
- int count;
- char *ch;
- int c;
- int cx, cy;
- patch_t *w;
+ byte *src, *dest;
+ int x, y;
+ int count;
+ char *ch;
+ int c;
+ int cx, cy;
+ patch_t *w;
//
// erase the entire screen to a tiled background
//
- src = W_CacheLumpName(finaleflat, PU_CACHE);
- dest = screen;
- for (y=0 ; y<SCREENHEIGHT ; y++)
- {
- for (x=0 ; x<SCREENWIDTH/64 ; x++)
- {
- memcpy (dest, src+((y&63)<<6), 64);
- dest += 64;
- }
- if (SCREENWIDTH&63)
- {
- memcpy (dest, src+((y&63)<<6), SCREENWIDTH&63);
- dest += (SCREENWIDTH&63);
- }
- }
+ src = W_CacheLumpName(finaleflat, PU_CACHE);
+ dest = screen;
+ for (y = 0; y < SCREENHEIGHT; y++)
+ {
+ for (x = 0; x < SCREENWIDTH / 64; x++)
+ {
+ memcpy(dest, src + ((y & 63) << 6), 64);
+ dest += 64;
+ }
+ if (SCREENWIDTH & 63)
+ {
+ memcpy(dest, src + ((y & 63) << 6), SCREENWIDTH & 63);
+ dest += (SCREENWIDTH & 63);
+ }
+ }
// V_MarkRect (0, 0, SCREENWIDTH, SCREENHEIGHT);
@@ -167,111 +190,66 @@
//
// draw some of the text onto the screen
//
- cx = 20;
- cy = 5;
- ch = finaletext;
+ cx = 20;
+ cy = 5;
+ ch = finaletext;
- count = (finalecount - 10)/TEXTSPEED;
- if (count < 0)
- count = 0;
- for ( ; count ; count-- )
- {
- c = *ch++;
- if (!c)
- break;
- if (c == '\n')
- {
- cx = 20;
- cy += 9;
- continue;
- }
+ count = (finalecount - 10) / TEXTSPEED;
+ if (count < 0)
+ count = 0;
+ for (; count; count--)
+ {
+ c = *ch++;
+ if (!c)
+ break;
+ if (c == '\n')
+ {
+ cx = 20;
+ cy += 9;
+ continue;
+ }
- c = toupper(c);
- if (c < 33)
- {
- cx += 5;
- continue;
- }
+ c = toupper(c);
+ if (c < 33)
+ {
+ cx += 5;
+ continue;
+ }
- w = W_CacheLumpNum(FontABaseLump+c-33, PU_CACHE);
- if (cx+w->width > SCREENWIDTH)
- break;
- V_DrawPatch(cx, cy, w);
- cx += w->width;
- }
+ w = W_CacheLumpNum(FontABaseLump + c - 33, PU_CACHE);
+ if (cx + w->width > SCREENWIDTH)
+ break;
+ V_DrawPatch(cx, cy, w);
+ cx += w->width;
+ }
}
-#if 0
-/*
-=======================
-=
-= F_Cast
-=
-=======================
-*/
-
-void F_Cast (void)
+void F_DrawPatchCol(int x, patch_t * patch, int col)
{
- byte *src, *dest;
- int x,y,w;
- int count;
- char *ch;
- int c;
- int cx, cy;
+ column_t *column;
+ byte *source, *dest, *desttop;
+ int count;
-//
-// erase the entire screen to a tiled background
-//
- src = W_CacheLumpName ( "FWATER1" , PU_CACHE);
- dest = screen;
+ column = (column_t *) ((byte *) patch + LONG(patch->columnofs[col]));
+ desttop = screen + x;
- for (y=0 ; y<SCREENHEIGHT ; y++)
- {
- for (x=0 ; x<SCREENWIDTH/64 ; x++)
- {
- memcpy (dest, src+((y&63)<<6), 64);
- dest += 64;
- }
- if (SCREENWIDTH&63)
- {
- memcpy (dest, src+((y&63)<<6), SCREENWIDTH&63);
- dest += (SCREENWIDTH&63);
- }
- }
-
- V_MarkRect (0, 0, SCREENWIDTH, SCREENHEIGHT);
-
- V_DrawPatch (105,21,0, W_CacheLumpName ( "
-}
-#endif
-
-
-void F_DrawPatchCol (int x, patch_t *patch, int col)
-{
- column_t *column;
- byte *source, *dest, *desttop;
- int count;
-
- column = (column_t *)((byte *)patch + LONG(patch->columnofs[col]));
- desttop = screen+x;
-
// step through the posts in a column
- while (column->topdelta != 0xff )
- {
- source = (byte *)column + 3;
- dest = desttop + column->topdelta*SCREENWIDTH;
- count = column->length;
+ while (column->topdelta != 0xff)
+ {
+ source = (byte *) column + 3;
+ dest = desttop + column->topdelta * SCREENWIDTH;
+ count = column->length;
- while (count--)
- {
- *dest = *source++;
- dest += SCREENWIDTH;
- }
- column = (column_t *)( (byte *)column + column->length+ 4 );
- }
+ while (count--)
+ {
+ *dest = *source++;
+ dest += SCREENWIDTH;
+ }
+ column = (column_t *) ((byte *) column + column->length + 4);
+ }
}
/*
@@ -284,33 +262,33 @@
void F_DemonScroll(void)
{
- byte *p1, *p2;
- static int yval = 0;
- static int nextscroll = 0;
+ byte *p1, *p2;
+ static int yval = 0;
+ static int nextscroll = 0;
- if(finalecount < nextscroll)
- {
- return;
- }
- p1 = W_CacheLumpName("FINAL1", PU_LEVEL);
- p2 = W_CacheLumpName("FINAL2", PU_LEVEL);
- if(finalecount < 70)
- {
- memcpy(screen, p1, SCREENHEIGHT*SCREENWIDTH);
- nextscroll = finalecount;
- return;
- }
- if(yval < 64000)
- {
- memcpy(screen, p2+SCREENHEIGHT*SCREENWIDTH-yval, yval);
- memcpy(screen+yval, p1, SCREENHEIGHT*SCREENWIDTH-yval);
- yval += SCREENWIDTH;
- nextscroll = finalecount+3;
- }
- else
- { //else, we'll just sit here and wait, for now
- memcpy(screen, p2, SCREENWIDTH*SCREENHEIGHT);
- }
+ if (finalecount < nextscroll)
+ {
+ return;
+ }
+ p1 = W_CacheLumpName("FINAL1", PU_LEVEL);
+ p2 = W_CacheLumpName("FINAL2", PU_LEVEL);
+ if (finalecount < 70)
+ {
+ memcpy(screen, p1, SCREENHEIGHT * SCREENWIDTH);
+ nextscroll = finalecount;
+ return;
+ }
+ if (yval < 64000)
+ {
+ memcpy(screen, p2 + SCREENHEIGHT * SCREENWIDTH - yval, yval);
+ memcpy(screen + yval, p1, SCREENHEIGHT * SCREENWIDTH - yval);
+ yval += SCREENWIDTH;
+ nextscroll = finalecount + 3;
+ }
+ else
+ { //else, we'll just sit here and wait, for now
+ memcpy(screen, p2, SCREENWIDTH * SCREENHEIGHT);
+ }
}
/*
@@ -323,31 +301,31 @@
void F_DrawUnderwater(void)
{
- static boolean underwawa;
- extern boolean MenuActive;
- extern boolean askforquit;
+ static boolean underwawa;
+ extern boolean MenuActive;
+ extern boolean askforquit;
- switch(finalestage)
- {
- case 1:
- if(!underwawa)
- {
- underwawa = true;
- memset((byte *)0xa0000, 0, SCREENWIDTH*SCREENHEIGHT);
- I_SetPalette(W_CacheLumpName("E2PAL", PU_CACHE));
- memcpy(screen, W_CacheLumpName("E2END", PU_CACHE),
- SCREENWIDTH*SCREENHEIGHT);
- }
- paused = false;
- MenuActive = false;
- askforquit = false;
+ switch (finalestage)
+ {
+ case 1:
+ if (!underwawa)
+ {
+ underwawa = true;
+ memset((byte *) 0xa0000, 0, SCREENWIDTH * SCREENHEIGHT);
+ I_SetPalette(W_CacheLumpName("E2PAL", PU_CACHE));
+ memcpy(screen, W_CacheLumpName("E2END", PU_CACHE),
+ SCREENWIDTH * SCREENHEIGHT);
+ }
+ paused = false;
+ MenuActive = false;
+ askforquit = false;
- break;
- case 2:
- memcpy(screen, W_CacheLumpName("TITLE", PU_CACHE),
- SCREENWIDTH*SCREENHEIGHT);
- //D_StartTitle(); // go to intro/demo mode.
- }
+ break;
+ case 2:
+ memcpy(screen, W_CacheLumpName("TITLE", PU_CACHE),
+ SCREENWIDTH * SCREENHEIGHT);
+ //D_StartTitle(); // go to intro/demo mode.
+ }
}
@@ -360,53 +338,55 @@
==================
*/
-void F_BunnyScroll (void)
+void F_BunnyScroll(void)
{
- int scrolled, x;
- patch_t *p1, *p2;
- char name[10];
- int stage;
- static int laststage;
+ int scrolled, x;
+ patch_t *p1, *p2;
+ char name[10];
+ int stage;
+ static int laststage;
- p1 = W_CacheLumpName ("PFUB2", PU_LEVEL);
- p2 = W_CacheLumpName ("PFUB1", PU_LEVEL);
+ p1 = W_CacheLumpName("PFUB2", PU_LEVEL);
+ p2 = W_CacheLumpName("PFUB1", PU_LEVEL);
- V_MarkRect (0, 0, SCREENWIDTH, SCREENHEIGHT);
+ V_MarkRect(0, 0, SCREENWIDTH, SCREENHEIGHT);
- scrolled = 320 - (finalecount-230)/2;
- if (scrolled > 320)
- scrolled = 320;
- if (scrolled < 0)
- scrolled = 0;
+ scrolled = 320 - (finalecount - 230) / 2;
+ if (scrolled > 320)
+ scrolled = 320;
+ if (scrolled < 0)
+ scrolled = 0;
- for ( x=0 ; x<SCREENWIDTH ; x++)
- {
- if (x+scrolled < 320)
- F_DrawPatchCol (x, p1, x+scrolled);
- else
- F_DrawPatchCol (x, p2, x+scrolled - 320);
- }
+ for (x = 0; x < SCREENWIDTH; x++)
+ {
+ if (x + scrolled < 320)
+ F_DrawPatchCol(x, p1, x + scrolled);
+ else
+ F_DrawPatchCol(x, p2, x + scrolled - 320);
+ }
- if (finalecount < 1130)
- return;
- if (finalecount < 1180)
- {
- V_DrawPatch ((SCREENWIDTH-13*8)/2, (SCREENHEIGHT-8*8)/2,0, W_CacheLumpName ("END0",PU_CACHE));
- laststage = 0;
- return;
- }
+ if (finalecount < 1130)
+ return;
+ if (finalecount < 1180)
+ {
+ V_DrawPatch((SCREENWIDTH - 13 * 8) / 2, (SCREENHEIGHT - 8 * 8) / 2, 0,
+ W_CacheLumpName("END0", PU_CACHE));
+ laststage = 0;
+ return;
+ }
- stage = (finalecount-1180) / 5;
- if (stage > 6)
- stage = 6;
- if (stage > laststage)
- {
- S_StartSound (NULL, sfx_pistol);
- laststage = stage;
- }
+ stage = (finalecount - 1180) / 5;
+ if (stage > 6)
+ stage = 6;
+ if (stage > laststage)
+ {
+ S_StartSound(NULL, sfx_pistol);
+ laststage = stage;
+ }
- sprintf (name,"END%i",stage);
- V_DrawPatch ((SCREENWIDTH-13*8)/2, (SCREENHEIGHT-8*8)/2, W_CacheLumpName (name,PU_CACHE));
+ sprintf(name, "END%i", stage);
+ V_DrawPatch((SCREENWIDTH - 13 * 8) / 2, (SCREENHEIGHT - 8 * 8) / 2,
+ W_CacheLumpName(name, PU_CACHE));
}
#endif
@@ -420,33 +400,33 @@
void F_Drawer(void)
{
- UpdateState |= I_FULLSCRN;
- if (!finalestage)
- F_TextWrite ();
- else
- {
- switch (gameepisode)
- {
- case 1:
- if(shareware)
- {
- V_DrawRawScreen(W_CacheLumpName("ORDER", PU_CACHE));
- }
- else
- {
- V_DrawRawScreen(W_CacheLumpName("CREDIT", PU_CACHE));
- }
- break;
- case 2:
- F_DrawUnderwater();
- break;
- case 3:
- F_DemonScroll();
- break;
- case 4: // Just show credits screen for extended episodes
- case 5:
- V_DrawRawScreen(W_CacheLumpName("CREDIT", PU_CACHE));
- break;
- }
- }
+ UpdateState |= I_FULLSCRN;
+ if (!finalestage)
+ F_TextWrite();
+ else
+ {
+ switch (gameepisode)
+ {
+ case 1:
+ if (shareware)
+ {
+ V_DrawRawScreen(W_CacheLumpName("ORDER", PU_CACHE));
+ }
+ else
+ {
+ V_DrawRawScreen(W_CacheLumpName("CREDIT", PU_CACHE));
+ }
+ break;
+ case 2:
+ F_DrawUnderwater();
+ break;
+ case 3:
+ F_DemonScroll();
+ break;
+ case 4: // Just show credits screen for extended episodes
+ case 5:
+ V_DrawRawScreen(W_CacheLumpName("CREDIT", PU_CACHE));
+ break;
+ }
+ }
}
--- a/src/heretic/g_game.c
+++ b/src/heretic/g_game.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// G_game.c
@@ -16,22 +38,22 @@
// Functions
-boolean G_CheckDemoStatus (void);
-void G_ReadDemoTiccmd (ticcmd_t *cmd);
-void G_WriteDemoTiccmd (ticcmd_t *cmd);
-void G_PlayerReborn (int player);
-void G_InitNew (skill_t skill, int episode, int map);
+boolean G_CheckDemoStatus(void);
+void G_ReadDemoTiccmd(ticcmd_t * cmd);
+void G_WriteDemoTiccmd(ticcmd_t * cmd);
+void G_PlayerReborn(int player);
+void G_InitNew(skill_t skill, int episode, int map);
-void G_DoReborn (int playernum);
+void G_DoReborn(int playernum);
-void G_DoLoadLevel (void);
-void G_DoNewGame (void);
-void G_DoLoadGame (void);
-void G_DoPlayDemo (void);
-void G_DoCompleted (void);
-void G_DoVictory (void);
-void G_DoWorldDone (void);
-void G_DoSaveGame (void);
+void G_DoLoadLevel(void);
+void G_DoNewGame(void);
+void G_DoLoadGame(void);
+void G_DoPlayDemo(void);
+void G_DoCompleted(void);
+void G_DoVictory(void);
+void G_DoWorldDone(void);
+void G_DoSaveGame(void);
void D_PageTicker(void);
void D_AdvanceDemo(void);
@@ -38,119 +60,120 @@
struct
{
- mobjtype_t type;
- int speed[2];
+ mobjtype_t type;
+ int speed[2];
} MonsterMissileInfo[] =
{
- { MT_IMPBALL, 10, 20 },
- { MT_MUMMYFX1, 9, 18 },
- { MT_KNIGHTAXE, 9, 18 },
- { MT_REDAXE, 9, 18 },
- { MT_BEASTBALL, 12, 20 },
- { MT_WIZFX1, 18, 24 },
- { MT_SNAKEPRO_A, 14, 20 },
- { MT_SNAKEPRO_B, 14, 20 },
- { MT_HEADFX1, 13, 20 },
- { MT_HEADFX3, 10, 18 },
- { MT_MNTRFX1, 20, 26 },
- { MT_MNTRFX2, 14, 20 },
- { MT_SRCRFX1, 20, 28 },
- { MT_SOR2FX1, 20, 28 },
- { -1, -1, -1 } // Terminator
+ { MT_IMPBALL, 10, 20},
+ { MT_MUMMYFX1, 9, 18},
+ { MT_KNIGHTAXE, 9, 18},
+ { MT_REDAXE, 9, 18},
+ { MT_BEASTBALL, 12, 20},
+ { MT_WIZFX1, 18, 24},
+ { MT_SNAKEPRO_A, 14, 20},
+ { MT_SNAKEPRO_B, 14, 20},
+ { MT_HEADFX1, 13, 20},
+ { MT_HEADFX3, 10, 18},
+ { MT_MNTRFX1, 20, 26},
+ { MT_MNTRFX2, 14, 20},
+ { MT_SRCRFX1, 20, 28},
+ { MT_SOR2FX1, 20, 28},
+ { -1, -1, -1} // Terminator
};
FILE *SaveGameFP;
int SaveGameType;
-gameaction_t gameaction;
-gamestate_t gamestate;
-skill_t gameskill;
-boolean respawnmonsters;
-int gameepisode;
-int gamemap;
-int prevmap;
+gameaction_t gameaction;
+gamestate_t gamestate;
+skill_t gameskill;
+boolean respawnmonsters;
+int gameepisode;
+int gamemap;
+int prevmap;
-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 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 timingdemo; // if true, exit with report on completion
-int starttime; // for comparative timing purposes
+boolean timingdemo; // if true, exit with report on completion
+int starttime; // for comparative timing purposes
-boolean viewactive;
+boolean viewactive;
-boolean deathmatch; // only if started as net death
-boolean netgame; // only true if packets are broadcast
-boolean playeringame[MAXPLAYERS];
-player_t players[MAXPLAYERS];
+boolean deathmatch; // only if started as net death
+boolean netgame; // only true if packets are broadcast
+boolean playeringame[MAXPLAYERS];
+player_t players[MAXPLAYERS];
-int consoleplayer; // player taking events and displaying
-int displayplayer; // view being displayed
-int gametic;
-int levelstarttic; // gametic at level start
-int totalkills, totalitems, totalsecret; // for intermission
+int consoleplayer; // player taking events and displaying
+int displayplayer; // view being displayed
+int gametic;
+int levelstarttic; // gametic at level start
+int totalkills, totalitems, totalsecret; // for intermission
-char demoname[32];
-boolean demorecording;
-boolean demoplayback;
-byte *demobuffer, *demo_p;
-boolean singledemo; // quit after playing a demo from cmdline
+char demoname[32];
+boolean demorecording;
+boolean demoplayback;
+byte *demobuffer, *demo_p;
+boolean singledemo; // quit after playing a demo from cmdline
-boolean precache = true; // if true, load all graphics at start
+boolean precache = true; // if true, load all graphics at start
-short consistancy[MAXPLAYERS][BACKUPTICS];
+short consistancy[MAXPLAYERS][BACKUPTICS];
-byte *savebuffer, *save_p;
+byte *savebuffer, *save_p;
//
// controls (have defaults)
//
-int key_right, key_left, key_up, key_down;
-int key_strafeleft, key_straferight;
-int key_fire, key_use, key_strafe, key_speed;
-int key_flyup, key_flydown, key_flycenter;
-int key_lookup, key_lookdown, key_lookcenter;
-int key_invleft, key_invright, key_useartifact;
+int key_right, key_left, key_up, key_down;
+int key_strafeleft, key_straferight;
+int key_fire, key_use, key_strafe, key_speed;
+int key_flyup, key_flydown, key_flycenter;
+int key_lookup, key_lookdown, key_lookcenter;
+int key_invleft, key_invright, key_useartifact;
-int mousebfire;
-int mousebstrafe;
-int mousebforward;
+int mousebfire;
+int mousebstrafe;
+int mousebforward;
-int joybfire;
-int joybstrafe;
-int joybuse;
-int joybspeed;
+int joybfire;
+int joybstrafe;
+int joybuse;
+int joybspeed;
#define MAXPLMOVE 0x32
-fixed_t forwardmove[2] = {0x19, 0x32};
-fixed_t sidemove[2] = {0x18, 0x28};
-fixed_t angleturn[3] = {640, 1280, 320}; // + slow turn
+fixed_t forwardmove[2] = { 0x19, 0x32 };
+fixed_t sidemove[2] = { 0x18, 0x28 };
+fixed_t angleturn[3] = { 640, 1280, 320 }; // + slow turn
+
#define SLOWTURNTICS 6
#define NUMKEYS 256
-boolean gamekeydown[NUMKEYS];
-int turnheld; // for accelerative turning
-int lookheld;
+boolean gamekeydown[NUMKEYS];
+int turnheld; // for accelerative turning
+int lookheld;
-boolean mousearray[4];
-boolean *mousebuttons = &mousearray[1];
- // allow [-1]
-int mousex, mousey; // mouse values are used once
-int dclicktime, dclickstate, dclicks;
-int dclicktime2, dclickstate2, dclicks2;
+boolean mousearray[4];
+boolean *mousebuttons = &mousearray[1];
+ // allow [-1]
+int mousex, mousey; // mouse values are used once
+int dclicktime, dclickstate, dclicks;
+int dclicktime2, dclickstate2, dclicks2;
-int joyxmove, joyymove; // joystick values are repeated
-boolean joyarray[5];
-boolean *joybuttons = &joyarray[1]; // allow [-1]
+int joyxmove, joyymove; // joystick values are repeated
+boolean joyarray[5];
+boolean *joybuttons = &joyarray[1]; // allow [-1]
-int savegameslot;
-char savedescription[32];
+int savegameslot;
+char savedescription[32];
int inventoryTics;
@@ -190,516 +213,518 @@
extern int curpos;
extern int inv_ptr;
-extern int isCyberPresent; // is CyberMan present?
+extern int isCyberPresent; // is CyberMan present?
boolean usearti = true;
-void I_ReadCyberCmd (ticcmd_t *cmd);
+void I_ReadCyberCmd(ticcmd_t * cmd);
-void G_BuildTiccmd (ticcmd_t *cmd)
+void G_BuildTiccmd(ticcmd_t * cmd)
{
- int i;
- boolean strafe, bstrafe;
- int speed, tspeed, lspeed;
- int forward, side;
- int look, arti;
- int flyheight;
+ int i;
+ boolean strafe, bstrafe;
+ int speed, tspeed, lspeed;
+ int forward, side;
+ int look, arti;
+ int flyheight;
- extern boolean noartiskip;
+ extern boolean noartiskip;
#ifdef __WATCOMC__
- int angleDelta;
- static int oldAngle;
- extern int newViewAngleOff;
- static int externInvKey;
- extern boolean automapactive;
- event_t ev;
+ int angleDelta;
+ static int oldAngle;
+ extern int newViewAngleOff;
+ static int externInvKey;
+ extern boolean automapactive;
+ event_t ev;
#endif
- memset (cmd,0,sizeof(*cmd));
- //cmd->consistancy =
- // consistancy[consoleplayer][(maketic*ticdup)%BACKUPTICS];
- cmd->consistancy =
- consistancy[consoleplayer][maketic%BACKUPTICS];
- if (isCyberPresent)
- I_ReadCyberCmd (cmd);
+ memset(cmd, 0, sizeof(*cmd));
+ //cmd->consistancy =
+ // consistancy[consoleplayer][(maketic*ticdup)%BACKUPTICS];
+ cmd->consistancy = consistancy[consoleplayer][maketic % BACKUPTICS];
+ if (isCyberPresent)
+ I_ReadCyberCmd(cmd);
//printf ("cons: %i\n",cmd->consistancy);
- strafe = gamekeydown[key_strafe] || mousebuttons[mousebstrafe]
- || joybuttons[joybstrafe];
- speed = gamekeydown[key_speed] || joybuttons[joybspeed]
- || joybuttons[joybspeed];
+ strafe = gamekeydown[key_strafe] || mousebuttons[mousebstrafe]
+ || joybuttons[joybstrafe];
+ speed = gamekeydown[key_speed] || joybuttons[joybspeed]
+ || joybuttons[joybspeed];
#ifdef __WATCOMC__
- if(useexterndriver)
- {
- speed |= (i_ExternData->buttons&EBT_SPEED);
- strafe |= (i_ExternData->buttons&EBT_STRAFE);
- }
+ if (useexterndriver)
+ {
+ speed |= (i_ExternData->buttons & EBT_SPEED);
+ strafe |= (i_ExternData->buttons & EBT_STRAFE);
+ }
#endif
- forward = side = look = arti = flyheight = 0;
+ forward = side = look = arti = flyheight = 0;
//
// use two stage accelerative turning on the keyboard and joystick
//
- if (joyxmove < 0 || joyxmove > 0
- || gamekeydown[key_right] || gamekeydown[key_left])
- turnheld += ticdup;
- else
- turnheld = 0;
- if (turnheld < SLOWTURNTICS)
- tspeed = 2; // slow turn
- else
- tspeed = speed;
+ if (joyxmove < 0 || joyxmove > 0
+ || gamekeydown[key_right] || gamekeydown[key_left])
+ turnheld += ticdup;
+ else
+ turnheld = 0;
+ if (turnheld < SLOWTURNTICS)
+ tspeed = 2; // slow turn
+ else
+ tspeed = speed;
- if(gamekeydown[key_lookdown] || gamekeydown[key_lookup])
- {
- lookheld += ticdup;
- }
- else
- {
- lookheld = 0;
- }
- if(lookheld < SLOWTURNTICS)
- {
- lspeed = 1;
- }
- else
- {
- lspeed = 2;
- }
+ if (gamekeydown[key_lookdown] || gamekeydown[key_lookup])
+ {
+ lookheld += ticdup;
+ }
+ else
+ {
+ lookheld = 0;
+ }
+ if (lookheld < SLOWTURNTICS)
+ {
+ lspeed = 1;
+ }
+ else
+ {
+ lspeed = 2;
+ }
//
// let movement keys cancel each other out
//
- if(strafe)
- {
- if (gamekeydown[key_right])
- side += sidemove[speed];
- if (gamekeydown[key_left])
- side -= sidemove[speed];
- if (joyxmove > 0)
- side += sidemove[speed];
- if (joyxmove < 0)
- side -= sidemove[speed];
- }
- else
- {
- if (gamekeydown[key_right])
- cmd->angleturn -= angleturn[tspeed];
- if (gamekeydown[key_left])
- cmd->angleturn += angleturn[tspeed];
- if (joyxmove > 0)
- cmd->angleturn -= angleturn[tspeed];
- if (joyxmove < 0)
- cmd->angleturn += angleturn[tspeed];
- }
+ if (strafe)
+ {
+ if (gamekeydown[key_right])
+ side += sidemove[speed];
+ if (gamekeydown[key_left])
+ side -= sidemove[speed];
+ if (joyxmove > 0)
+ side += sidemove[speed];
+ if (joyxmove < 0)
+ side -= sidemove[speed];
+ }
+ else
+ {
+ if (gamekeydown[key_right])
+ cmd->angleturn -= angleturn[tspeed];
+ if (gamekeydown[key_left])
+ cmd->angleturn += angleturn[tspeed];
+ if (joyxmove > 0)
+ cmd->angleturn -= angleturn[tspeed];
+ if (joyxmove < 0)
+ cmd->angleturn += angleturn[tspeed];
+ }
- if (gamekeydown[key_up])
- forward += forwardmove[speed];
- if (gamekeydown[key_down])
- forward -= forwardmove[speed];
- if (joyymove < 0)
- forward += forwardmove[speed];
- if (joyymove > 0)
- forward -= forwardmove[speed];
- if (gamekeydown[key_straferight])
- side += sidemove[speed];
- if (gamekeydown[key_strafeleft])
- side -= sidemove[speed];
+ if (gamekeydown[key_up])
+ forward += forwardmove[speed];
+ if (gamekeydown[key_down])
+ forward -= forwardmove[speed];
+ if (joyymove < 0)
+ forward += forwardmove[speed];
+ if (joyymove > 0)
+ forward -= forwardmove[speed];
+ if (gamekeydown[key_straferight])
+ side += sidemove[speed];
+ if (gamekeydown[key_strafeleft])
+ side -= sidemove[speed];
- // Look up/down/center keys
- if(gamekeydown[key_lookup])
- {
- look = lspeed;
- }
- if(gamekeydown[key_lookdown])
- {
- look = -lspeed;
- }
+ // Look up/down/center keys
+ if (gamekeydown[key_lookup])
+ {
+ look = lspeed;
+ }
+ if (gamekeydown[key_lookdown])
+ {
+ look = -lspeed;
+ }
#ifdef __WATCOMC__
- if(gamekeydown[key_lookcenter] && !useexterndriver)
- {
- look = TOCENTER;
- }
+ if (gamekeydown[key_lookcenter] && !useexterndriver)
+ {
+ look = TOCENTER;
+ }
#else
- if(gamekeydown[key_lookcenter])
- {
- look = TOCENTER;
- }
+ if (gamekeydown[key_lookcenter])
+ {
+ look = TOCENTER;
+ }
#endif
#ifdef __WATCOMC__
- if(useexterndriver && look != TOCENTER && (gamestate == GS_LEVEL ||
- gamestate == GS_INTERMISSION))
- {
- if(i_ExternData->moveForward)
- {
- forward += i_ExternData->moveForward;
- if(speed)
- {
- forward <<= 1;
- }
- }
- if(i_ExternData->angleTurn)
- {
- if(strafe)
- {
- side += i_ExternData->angleTurn;
- }
- else
- {
- cmd->angleturn += i_ExternData->angleTurn;
- }
- }
- if(i_ExternData->moveSideways)
- {
- side += i_ExternData->moveSideways;
- if(speed)
- {
- side <<= 1;
- }
- }
- if(i_ExternData->buttons&EBT_CENTERVIEW)
- {
- look = TOCENTER;
- oldAngle = 0;
- }
- else if(i_ExternData->pitch)
- {
- angleDelta = i_ExternData->pitch-oldAngle;
- if(abs(angleDelta) < 35)
- {
- look = angleDelta/5;
- }
- else
- {
- look = 7*(angleDelta > 0 ? 1 : -1);
- }
- if(look == TOCENTER)
- {
- look++;
- }
- oldAngle += look*5;
- }
- if(i_ExternData->flyDirection)
- {
- if(i_ExternData->flyDirection > 0)
- {
- flyheight = 5;
- }
- else
- {
- flyheight = -5;
- }
- }
- if(abs(newViewAngleOff-i_ExternData->angleHead) < 3000)
- {
- newViewAngleOff = i_ExternData->angleHead;
- }
- if(i_ExternData->buttons&EBT_FIRE)
- {
- cmd->buttons |= BT_ATTACK;
- }
- if(i_ExternData->buttons&EBT_OPENDOOR)
- {
- cmd->buttons |= BT_USE;
- }
- if(i_ExternData->buttons&EBT_PAUSE)
- {
- cmd->buttons = BT_SPECIAL | BTS_PAUSE;
- i_ExternData->buttons &= ~EBT_PAUSE;
- }
- if(externInvKey&EBT_USEARTIFACT)
- {
- ev.type = ev_keyup;
- ev.data1 = key_useartifact;
- D_PostEvent(&ev);
- externInvKey &= ~EBT_USEARTIFACT;
- }
- else if(i_ExternData->buttons&EBT_USEARTIFACT)
- {
- externInvKey |= EBT_USEARTIFACT;
- ev.type = ev_keydown;
- ev.data1 = key_useartifact;
- D_PostEvent(&ev);
- }
- if(externInvKey&EBT_INVENTORYRIGHT)
- {
- ev.type = ev_keyup;
- ev.data1 = key_invright;
- D_PostEvent(&ev);
- externInvKey &= ~EBT_INVENTORYRIGHT;
- }
- else if(i_ExternData->buttons&EBT_INVENTORYRIGHT)
- {
- externInvKey |= EBT_INVENTORYRIGHT;
- ev.type = ev_keydown;
- ev.data1 = key_invright;
- D_PostEvent(&ev);
- }
- if(externInvKey&EBT_INVENTORYLEFT)
- {
- ev.type = ev_keyup;
- ev.data1 = key_invleft;
- D_PostEvent(&ev);
- externInvKey &= ~EBT_INVENTORYLEFT;
- }
- else if(i_ExternData->buttons&EBT_INVENTORYLEFT)
- {
- externInvKey |= EBT_INVENTORYLEFT;
- ev.type = ev_keydown;
- ev.data1 = key_invleft;
- D_PostEvent(&ev);
- }
- if(i_ExternData->buttons&EBT_FLYDROP)
- {
- flyheight = TOCENTER;
- }
- if(gamestate == GS_LEVEL)
- {
- if(externInvKey&EBT_MAP)
- { // AutoMap
- ev.type = ev_keyup;
- ev.data1 = AM_STARTKEY;
- D_PostEvent(&ev);
- externInvKey &= ~EBT_MAP;
- }
- else if(i_ExternData->buttons&EBT_MAP)
- {
- externInvKey |= EBT_MAP;
- ev.type = ev_keydown;
- ev.data1 = AM_STARTKEY;
- D_PostEvent(&ev);
- }
- }
+ if (useexterndriver && look != TOCENTER && (gamestate == GS_LEVEL ||
+ gamestate == GS_INTERMISSION))
+ {
+ if (i_ExternData->moveForward)
+ {
+ forward += i_ExternData->moveForward;
+ if (speed)
+ {
+ forward <<= 1;
+ }
+ }
+ if (i_ExternData->angleTurn)
+ {
+ if (strafe)
+ {
+ side += i_ExternData->angleTurn;
+ }
+ else
+ {
+ cmd->angleturn += i_ExternData->angleTurn;
+ }
+ }
+ if (i_ExternData->moveSideways)
+ {
+ side += i_ExternData->moveSideways;
+ if (speed)
+ {
+ side <<= 1;
+ }
+ }
+ if (i_ExternData->buttons & EBT_CENTERVIEW)
+ {
+ look = TOCENTER;
+ oldAngle = 0;
+ }
+ else if (i_ExternData->pitch)
+ {
+ angleDelta = i_ExternData->pitch - oldAngle;
+ if (abs(angleDelta) < 35)
+ {
+ look = angleDelta / 5;
+ }
+ else
+ {
+ look = 7 * (angleDelta > 0 ? 1 : -1);
+ }
+ if (look == TOCENTER)
+ {
+ look++;
+ }
+ oldAngle += look * 5;
+ }
+ if (i_ExternData->flyDirection)
+ {
+ if (i_ExternData->flyDirection > 0)
+ {
+ flyheight = 5;
+ }
+ else
+ {
+ flyheight = -5;
+ }
+ }
+ if (abs(newViewAngleOff - i_ExternData->angleHead) < 3000)
+ {
+ newViewAngleOff = i_ExternData->angleHead;
+ }
+ if (i_ExternData->buttons & EBT_FIRE)
+ {
+ cmd->buttons |= BT_ATTACK;
+ }
+ if (i_ExternData->buttons & EBT_OPENDOOR)
+ {
+ cmd->buttons |= BT_USE;
+ }
+ if (i_ExternData->buttons & EBT_PAUSE)
+ {
+ cmd->buttons = BT_SPECIAL | BTS_PAUSE;
+ i_ExternData->buttons &= ~EBT_PAUSE;
+ }
+ if (externInvKey & EBT_USEARTIFACT)
+ {
+ ev.type = ev_keyup;
+ ev.data1 = key_useartifact;
+ D_PostEvent(&ev);
+ externInvKey &= ~EBT_USEARTIFACT;
+ }
+ else if (i_ExternData->buttons & EBT_USEARTIFACT)
+ {
+ externInvKey |= EBT_USEARTIFACT;
+ ev.type = ev_keydown;
+ ev.data1 = key_useartifact;
+ D_PostEvent(&ev);
+ }
+ if (externInvKey & EBT_INVENTORYRIGHT)
+ {
+ ev.type = ev_keyup;
+ ev.data1 = key_invright;
+ D_PostEvent(&ev);
+ externInvKey &= ~EBT_INVENTORYRIGHT;
+ }
+ else if (i_ExternData->buttons & EBT_INVENTORYRIGHT)
+ {
+ externInvKey |= EBT_INVENTORYRIGHT;
+ ev.type = ev_keydown;
+ ev.data1 = key_invright;
+ D_PostEvent(&ev);
+ }
+ if (externInvKey & EBT_INVENTORYLEFT)
+ {
+ ev.type = ev_keyup;
+ ev.data1 = key_invleft;
+ D_PostEvent(&ev);
+ externInvKey &= ~EBT_INVENTORYLEFT;
+ }
+ else if (i_ExternData->buttons & EBT_INVENTORYLEFT)
+ {
+ externInvKey |= EBT_INVENTORYLEFT;
+ ev.type = ev_keydown;
+ ev.data1 = key_invleft;
+ D_PostEvent(&ev);
+ }
+ if (i_ExternData->buttons & EBT_FLYDROP)
+ {
+ flyheight = TOCENTER;
+ }
+ if (gamestate == GS_LEVEL)
+ {
+ if (externInvKey & EBT_MAP)
+ { // AutoMap
+ ev.type = ev_keyup;
+ ev.data1 = AM_STARTKEY;
+ D_PostEvent(&ev);
+ externInvKey &= ~EBT_MAP;
+ }
+ else if (i_ExternData->buttons & EBT_MAP)
+ {
+ externInvKey |= EBT_MAP;
+ ev.type = ev_keydown;
+ ev.data1 = AM_STARTKEY;
+ D_PostEvent(&ev);
+ }
+ }
#if 0
- if((i = (i_ExternData->buttons>>EBT_WEAPONSHIFT)&EBT_WEAPONMASK) != 0)
- {
- cmd->buttons |= BT_CHANGE;
- cmd->buttons |= (i-1)<<BT_WEAPONSHIFT;
- }
+ if ((i =
+ (i_ExternData->buttons >> EBT_WEAPONSHIFT) & EBT_WEAPONMASK) !=
+ 0)
+ {
+ cmd->buttons |= BT_CHANGE;
+ cmd->buttons |= (i - 1) << BT_WEAPONSHIFT;
+ }
#endif
- if(i_ExternData->buttons&EBT_WEAPONCYCLE)
- {
- int curWeapon;
- player_t *pl;
+ if (i_ExternData->buttons & EBT_WEAPONCYCLE)
+ {
+ int curWeapon;
+ player_t *pl;
- pl = &players[consoleplayer];
- curWeapon = pl->readyweapon;
- for(curWeapon = (curWeapon+1)&7; curWeapon != pl->readyweapon;
- curWeapon = (curWeapon+1)&7)
- {
- if(pl->weaponowned[curWeapon])
- {
- if(curWeapon >= wp_goldwand && curWeapon <= wp_mace &&
- !pl->ammo[wpnlev1info[curWeapon].ammo])
- { // weapon that requires ammo is empty
- continue;
- }
- break;
- }
- }
- cmd->buttons |= BT_CHANGE;
- cmd->buttons |= curWeapon<<BT_WEAPONSHIFT;
- }
- }
+ pl = &players[consoleplayer];
+ curWeapon = pl->readyweapon;
+ for (curWeapon = (curWeapon + 1) & 7;
+ curWeapon != pl->readyweapon;
+ curWeapon = (curWeapon + 1) & 7)
+ {
+ if (pl->weaponowned[curWeapon])
+ {
+ if (curWeapon >= wp_goldwand && curWeapon <= wp_mace &&
+ !pl->ammo[wpnlev1info[curWeapon].ammo])
+ { // weapon that requires ammo is empty
+ continue;
+ }
+ break;
+ }
+ }
+ cmd->buttons |= BT_CHANGE;
+ cmd->buttons |= curWeapon << BT_WEAPONSHIFT;
+ }
+ }
#endif
- // Fly up/down/drop keys
- if(gamekeydown[key_flyup])
- {
- flyheight = 5; // note that the actual flyheight will be twice this
- }
- if(gamekeydown[key_flydown])
- {
- flyheight = -5;
- }
- if(gamekeydown[key_flycenter])
- {
- flyheight = TOCENTER;
+ // Fly up/down/drop keys
+ if (gamekeydown[key_flyup])
+ {
+ flyheight = 5; // note that the actual flyheight will be twice this
+ }
+ if (gamekeydown[key_flydown])
+ {
+ flyheight = -5;
+ }
+ if (gamekeydown[key_flycenter])
+ {
+ flyheight = TOCENTER;
#ifdef __WATCOMC__
- if(!useexterndriver)
- {
- look = TOCENTER;
- }
+ if (!useexterndriver)
+ {
+ look = TOCENTER;
+ }
#else
- look = TOCENTER;
+ look = TOCENTER;
#endif
- }
+ }
- // Use artifact key
- if(gamekeydown[key_useartifact])
- {
- if(gamekeydown[key_speed] && !noartiskip)
- {
- if(players[consoleplayer].inventory[inv_ptr].type != arti_none)
- {
- gamekeydown[key_useartifact] = false;
- cmd->arti = 0xff; // skip artifact code
- }
- }
- else
- {
- if(inventory)
- {
- players[consoleplayer].readyArtifact =
- players[consoleplayer].inventory[inv_ptr].type;
- inventory = false;
- cmd->arti = 0;
- usearti = false;
- }
- else if(usearti)
- {
- cmd->arti = players[consoleplayer].inventory[inv_ptr].type;
- usearti = false;
- }
- }
- }
- if(gamekeydown[127] && !cmd->arti
- && !players[consoleplayer].powers[pw_weaponlevel2])
- {
- gamekeydown[127] = false;
- cmd->arti = arti_tomeofpower;
- }
+ // Use artifact key
+ if (gamekeydown[key_useartifact])
+ {
+ if (gamekeydown[key_speed] && !noartiskip)
+ {
+ if (players[consoleplayer].inventory[inv_ptr].type != arti_none)
+ {
+ gamekeydown[key_useartifact] = false;
+ cmd->arti = 0xff; // skip artifact code
+ }
+ }
+ else
+ {
+ if (inventory)
+ {
+ players[consoleplayer].readyArtifact =
+ players[consoleplayer].inventory[inv_ptr].type;
+ inventory = false;
+ cmd->arti = 0;
+ usearti = false;
+ }
+ else if (usearti)
+ {
+ cmd->arti = players[consoleplayer].inventory[inv_ptr].type;
+ usearti = false;
+ }
+ }
+ }
+ if (gamekeydown[127] && !cmd->arti
+ && !players[consoleplayer].powers[pw_weaponlevel2])
+ {
+ gamekeydown[127] = false;
+ cmd->arti = arti_tomeofpower;
+ }
//
// buttons
//
- cmd->chatchar = CT_dequeueChatChar();
+ cmd->chatchar = CT_dequeueChatChar();
- if (gamekeydown[key_fire] || mousebuttons[mousebfire]
- || joybuttons[joybfire])
- cmd->buttons |= BT_ATTACK;
+ if (gamekeydown[key_fire] || mousebuttons[mousebfire]
+ || joybuttons[joybfire])
+ cmd->buttons |= BT_ATTACK;
- if (gamekeydown[key_use] || joybuttons[joybuse] )
- {
- cmd->buttons |= BT_USE;
- dclicks = 0; // clear double clicks if hit use button
- }
+ if (gamekeydown[key_use] || joybuttons[joybuse])
+ {
+ cmd->buttons |= BT_USE;
+ dclicks = 0; // clear double clicks if hit use button
+ }
- for(i = 0; i < NUMWEAPONS-2; i++)
- {
- if(gamekeydown['1'+i])
- {
- cmd->buttons |= BT_CHANGE;
- cmd->buttons |= i<<BT_WEAPONSHIFT;
- break;
- }
- }
+ for (i = 0; i < NUMWEAPONS - 2; i++)
+ {
+ if (gamekeydown['1' + i])
+ {
+ cmd->buttons |= BT_CHANGE;
+ cmd->buttons |= i << BT_WEAPONSHIFT;
+ break;
+ }
+ }
//
// mouse
//
- if (mousebuttons[mousebforward])
- {
- forward += forwardmove[speed];
- }
+ if (mousebuttons[mousebforward])
+ {
+ forward += forwardmove[speed];
+ }
//
// forward double click
//
- if (mousebuttons[mousebforward] != dclickstate && dclicktime > 1 )
- {
- dclickstate = mousebuttons[mousebforward];
- if (dclickstate)
- dclicks++;
- if (dclicks == 2)
- {
- cmd->buttons |= BT_USE;
- dclicks = 0;
- }
- else
- dclicktime = 0;
- }
- else
- {
- dclicktime += ticdup;
- if (dclicktime > 20)
- {
- dclicks = 0;
- dclickstate = 0;
- }
- }
+ if (mousebuttons[mousebforward] != dclickstate && dclicktime > 1)
+ {
+ dclickstate = mousebuttons[mousebforward];
+ if (dclickstate)
+ dclicks++;
+ if (dclicks == 2)
+ {
+ cmd->buttons |= BT_USE;
+ dclicks = 0;
+ }
+ else
+ dclicktime = 0;
+ }
+ else
+ {
+ dclicktime += ticdup;
+ if (dclicktime > 20)
+ {
+ dclicks = 0;
+ dclickstate = 0;
+ }
+ }
//
// strafe double click
//
- bstrafe = mousebuttons[mousebstrafe]
-|| joybuttons[joybstrafe];
- if (bstrafe != dclickstate2 && dclicktime2 > 1 )
- {
- dclickstate2 = bstrafe;
- if (dclickstate2)
- dclicks2++;
- if (dclicks2 == 2)
- {
- cmd->buttons |= BT_USE;
- dclicks2 = 0;
- }
- else
- dclicktime2 = 0;
- }
- else
- {
- dclicktime2 += ticdup;
- if (dclicktime2 > 20)
- {
- dclicks2 = 0;
- dclickstate2 = 0;
- }
- }
+ bstrafe = mousebuttons[mousebstrafe] || joybuttons[joybstrafe];
+ if (bstrafe != dclickstate2 && dclicktime2 > 1)
+ {
+ dclickstate2 = bstrafe;
+ if (dclickstate2)
+ dclicks2++;
+ if (dclicks2 == 2)
+ {
+ cmd->buttons |= BT_USE;
+ dclicks2 = 0;
+ }
+ else
+ dclicktime2 = 0;
+ }
+ else
+ {
+ dclicktime2 += ticdup;
+ if (dclicktime2 > 20)
+ {
+ dclicks2 = 0;
+ dclickstate2 = 0;
+ }
+ }
- if (strafe)
- {
- side += mousex*2;
- }
- else
- {
- cmd->angleturn -= mousex*0x8;
- }
- forward += mousey;
- mousex = mousey = 0;
+ if (strafe)
+ {
+ side += mousex * 2;
+ }
+ else
+ {
+ cmd->angleturn -= mousex * 0x8;
+ }
+ forward += mousey;
+ mousex = mousey = 0;
- if (forward > MAXPLMOVE)
- forward = MAXPLMOVE;
- else if (forward < -MAXPLMOVE)
- forward = -MAXPLMOVE;
- if (side > MAXPLMOVE)
- side = MAXPLMOVE;
- else if (side < -MAXPLMOVE)
- side = -MAXPLMOVE;
+ if (forward > MAXPLMOVE)
+ forward = MAXPLMOVE;
+ else if (forward < -MAXPLMOVE)
+ forward = -MAXPLMOVE;
+ if (side > MAXPLMOVE)
+ side = MAXPLMOVE;
+ else if (side < -MAXPLMOVE)
+ side = -MAXPLMOVE;
- cmd->forwardmove += forward;
- cmd->sidemove += side;
- if(players[consoleplayer].playerstate == PST_LIVE)
- {
- if(look < 0)
- {
- look += 16;
- }
- cmd->lookfly = look;
- }
- if(flyheight < 0)
- {
- flyheight += 16;
- }
- cmd->lookfly |= flyheight<<4;
+ cmd->forwardmove += forward;
+ cmd->sidemove += side;
+ if (players[consoleplayer].playerstate == PST_LIVE)
+ {
+ if (look < 0)
+ {
+ look += 16;
+ }
+ cmd->lookfly = look;
+ }
+ if (flyheight < 0)
+ {
+ flyheight += 16;
+ }
+ cmd->lookfly |= flyheight << 4;
//
// special buttons
//
- if (sendpause)
- {
- sendpause = false;
- cmd->buttons = BT_SPECIAL | BTS_PAUSE;
- }
+ if (sendpause)
+ {
+ sendpause = false;
+ cmd->buttons = BT_SPECIAL | BTS_PAUSE;
+ }
- if (sendsave)
- {
- sendsave = false;
- cmd->buttons = BT_SPECIAL | BTS_SAVEGAME | (savegameslot<<BTS_SAVESHIFT);
- }
+ if (sendsave)
+ {
+ sendsave = false;
+ cmd->buttons =
+ BT_SPECIAL | BTS_SAVEGAME | (savegameslot << BTS_SAVESHIFT);
+ }
}
@@ -712,35 +737,35 @@
==============
*/
-void G_DoLoadLevel (void)
+void G_DoLoadLevel(void)
{
- int i;
+ int i;
- levelstarttic = gametic; // for time calculation
- gamestate = GS_LEVEL;
- for (i=0 ; i<MAXPLAYERS ; i++)
- {
- if (playeringame[i] && players[i].playerstate == PST_DEAD)
- players[i].playerstate = PST_REBORN;
- memset (players[i].frags,0,sizeof(players[i].frags));
- }
+ levelstarttic = gametic; // for time calculation
+ gamestate = GS_LEVEL;
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (playeringame[i] && players[i].playerstate == PST_DEAD)
+ players[i].playerstate = PST_REBORN;
+ memset(players[i].frags, 0, sizeof(players[i].frags));
+ }
- P_SetupLevel (gameepisode, gamemap, 0, gameskill);
- displayplayer = consoleplayer; // view the guy you are playing
- starttime = I_GetTime ();
- gameaction = ga_nothing;
- Z_CheckHeap ();
+ P_SetupLevel(gameepisode, gamemap, 0, gameskill);
+ displayplayer = consoleplayer; // view the guy you are playing
+ starttime = I_GetTime();
+ gameaction = ga_nothing;
+ Z_CheckHeap();
//
// clear cmd building stuff
//
- memset (gamekeydown, 0, sizeof(gamekeydown));
- joyxmove = joyymove = 0;
- mousex = mousey = 0;
- sendpause = sendsave = paused = false;
- memset (mousebuttons, 0, sizeof(mousebuttons));
- memset (joybuttons, 0, sizeof(joybuttons));
+ memset(gamekeydown, 0, sizeof(gamekeydown));
+ joyxmove = joyymove = 0;
+ mousex = mousey = 0;
+ sendpause = sendsave = paused = false;
+ memset(mousebuttons, 0, sizeof(mousebuttons));
+ memset(joybuttons, 0, sizeof(joybuttons));
}
@@ -754,143 +779,144 @@
===============================================================================
*/
-boolean G_Responder(event_t *ev)
+boolean G_Responder(event_t * ev)
{
- player_t *plr;
- extern boolean MenuActive;
+ player_t *plr;
+ extern boolean MenuActive;
- plr = &players[consoleplayer];
- if(ev->type == ev_keyup && ev->data1 == key_useartifact)
- { // flag to denote that it's okay to use an artifact
- if(!inventory)
- {
- plr->readyArtifact = plr->inventory[inv_ptr].type;
- }
- usearti = true;
- }
+ plr = &players[consoleplayer];
+ if (ev->type == ev_keyup && ev->data1 == key_useartifact)
+ { // flag to denote that it's okay to use an artifact
+ if (!inventory)
+ {
+ plr->readyArtifact = plr->inventory[inv_ptr].type;
+ }
+ usearti = true;
+ }
- // Check for spy mode player cycle
- if(gamestate == GS_LEVEL && ev->type == ev_keydown
- && ev->data1 == KEY_F12 && !deathmatch)
- { // Cycle the display player
- do
- {
- displayplayer++;
- if(displayplayer == MAXPLAYERS)
- {
- displayplayer = 0;
- }
- } while(!playeringame[displayplayer]
- && displayplayer != consoleplayer);
- return(true);
- }
+ // Check for spy mode player cycle
+ if (gamestate == GS_LEVEL && ev->type == ev_keydown
+ && ev->data1 == KEY_F12 && !deathmatch)
+ { // Cycle the display player
+ do
+ {
+ displayplayer++;
+ if (displayplayer == MAXPLAYERS)
+ {
+ displayplayer = 0;
+ }
+ }
+ while (!playeringame[displayplayer]
+ && displayplayer != consoleplayer);
+ return (true);
+ }
- if(gamestate == GS_LEVEL)
- {
- if(CT_Responder(ev))
- { // Chat ate the event
- return(true);
- }
- if(SB_Responder(ev))
- { // Status bar ate the event
- return(true);
- }
- if(AM_Responder(ev))
- { // Automap ate the event
- return(true);
- }
- }
+ if (gamestate == GS_LEVEL)
+ {
+ if (CT_Responder(ev))
+ { // Chat ate the event
+ return (true);
+ }
+ if (SB_Responder(ev))
+ { // Status bar ate the event
+ return (true);
+ }
+ if (AM_Responder(ev))
+ { // Automap ate the event
+ return (true);
+ }
+ }
- switch(ev->type)
- {
- case ev_keydown:
- if(ev->data1 == key_invleft)
- {
- inventoryTics = 5*35;
- if(!inventory)
- {
- inventory = true;
- break;
- }
- inv_ptr--;
- if(inv_ptr < 0)
- {
- inv_ptr = 0;
- }
- else
- {
- curpos--;
- if(curpos < 0)
- {
- curpos = 0;
- }
- }
- return(true);
- }
- if(ev->data1 == key_invright)
- {
- inventoryTics = 5*35;
- if(!inventory)
- {
- inventory = true;
- break;
- }
- inv_ptr++;
- if(inv_ptr >= plr->inventorySlotNum)
- {
- inv_ptr--;
- if(inv_ptr < 0)
- inv_ptr = 0;
- }
- else
- {
- curpos++;
- if(curpos > 6)
- {
- curpos = 6;
- }
- }
- return(true);
- }
- if(ev->data1 == KEY_PAUSE && !MenuActive)
- {
- sendpause = true;
- return(true);
- }
- if(ev->data1 < NUMKEYS)
- {
- gamekeydown[ev->data1] = true;
- }
- return(true); // eat key down events
+ switch (ev->type)
+ {
+ case ev_keydown:
+ if (ev->data1 == key_invleft)
+ {
+ inventoryTics = 5 * 35;
+ if (!inventory)
+ {
+ inventory = true;
+ break;
+ }
+ inv_ptr--;
+ if (inv_ptr < 0)
+ {
+ inv_ptr = 0;
+ }
+ else
+ {
+ curpos--;
+ if (curpos < 0)
+ {
+ curpos = 0;
+ }
+ }
+ return (true);
+ }
+ if (ev->data1 == key_invright)
+ {
+ inventoryTics = 5 * 35;
+ if (!inventory)
+ {
+ inventory = true;
+ break;
+ }
+ inv_ptr++;
+ if (inv_ptr >= plr->inventorySlotNum)
+ {
+ inv_ptr--;
+ if (inv_ptr < 0)
+ inv_ptr = 0;
+ }
+ else
+ {
+ curpos++;
+ if (curpos > 6)
+ {
+ curpos = 6;
+ }
+ }
+ return (true);
+ }
+ if (ev->data1 == KEY_PAUSE && !MenuActive)
+ {
+ sendpause = true;
+ return (true);
+ }
+ if (ev->data1 < NUMKEYS)
+ {
+ gamekeydown[ev->data1] = true;
+ }
+ return (true); // eat key down events
- case ev_keyup:
- if(ev->data1 < NUMKEYS)
- {
- gamekeydown[ev->data1] = false;
- }
- return(false); // always let key up events filter down
+ case ev_keyup:
+ if (ev->data1 < NUMKEYS)
+ {
+ gamekeydown[ev->data1] = false;
+ }
+ return (false); // always let key up events filter down
- case ev_mouse:
- mousebuttons[0] = ev->data1&1;
- mousebuttons[1] = ev->data1&2;
- mousebuttons[2] = ev->data1&4;
- mousex = ev->data2*(mouseSensitivity+5)/10;
- mousey = ev->data3*(mouseSensitivity+5)/10;
- return(true); // eat events
+ case ev_mouse:
+ mousebuttons[0] = ev->data1 & 1;
+ mousebuttons[1] = ev->data1 & 2;
+ mousebuttons[2] = ev->data1 & 4;
+ mousex = ev->data2 * (mouseSensitivity + 5) / 10;
+ mousey = ev->data3 * (mouseSensitivity + 5) / 10;
+ return (true); // eat events
- case ev_joystick:
- joybuttons[0] = ev->data1&1;
- joybuttons[1] = ev->data1&2;
- joybuttons[2] = ev->data1&4;
- joybuttons[3] = ev->data1&8;
- joyxmove = ev->data2;
- joyymove = ev->data3;
- return(true); // eat events
+ case ev_joystick:
+ joybuttons[0] = ev->data1 & 1;
+ joybuttons[1] = ev->data1 & 2;
+ joybuttons[2] = ev->data1 & 4;
+ joybuttons[3] = ev->data1 & 8;
+ joyxmove = ev->data2;
+ joyymove = ev->data3;
+ return (true); // eat events
- default:
- break;
- }
- return(false);
+ default:
+ break;
+ }
+ return (false);
}
/*
@@ -901,140 +927,142 @@
===============================================================================
*/
-void G_Ticker (void)
+void G_Ticker(void)
{
- int i, buf;
- ticcmd_t *cmd;
+ int i, 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);
+ 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)
- {
- case ga_loadlevel:
- G_DoLoadLevel ();
- break;
- case ga_newgame:
- G_DoNewGame ();
- break;
- case ga_loadgame:
- G_DoLoadGame ();
- break;
- case ga_savegame:
- G_DoSaveGame ();
- break;
- case ga_playdemo:
- G_DoPlayDemo ();
- break;
- case ga_screenshot:
- M_ScreenShot ();
- gameaction = ga_nothing;
- break;
- case ga_completed:
- G_DoCompleted ();
- break;
- case ga_worlddone:
- G_DoWorldDone();
- break;
- case ga_victory:
- F_StartFinale();
- break;
- default:
- break;
- }
- }
+ while (gameaction != ga_nothing)
+ {
+ switch (gameaction)
+ {
+ case ga_loadlevel:
+ G_DoLoadLevel();
+ break;
+ case ga_newgame:
+ G_DoNewGame();
+ break;
+ case ga_loadgame:
+ G_DoLoadGame();
+ break;
+ case ga_savegame:
+ G_DoSaveGame();
+ break;
+ case ga_playdemo:
+ G_DoPlayDemo();
+ break;
+ case ga_screenshot:
+ M_ScreenShot();
+ gameaction = ga_nothing;
+ break;
+ case ga_completed:
+ G_DoCompleted();
+ break;
+ case ga_worlddone:
+ G_DoWorldDone();
+ break;
+ case ga_victory:
+ F_StartFinale();
+ break;
+ default:
+ break;
+ }
+ }
//
// get commands, check consistancy, and build new consistancy check
//
- //buf = gametic%BACKUPTICS;
- buf = (gametic/ticdup)%BACKUPTICS;
+ //buf = gametic%BACKUPTICS;
+ buf = (gametic / ticdup) % BACKUPTICS;
- for (i=0 ; i<MAXPLAYERS ; i++)
- if (playeringame[i])
- {
- cmd = &players[i].cmd;
+ for (i = 0; i < MAXPLAYERS; i++)
+ if (playeringame[i])
+ {
+ cmd = &players[i].cmd;
- memcpy (cmd, &netcmds[i][buf], sizeof(ticcmd_t));
+ memcpy(cmd, &netcmds[i][buf], sizeof(ticcmd_t));
- if (demoplayback)
- G_ReadDemoTiccmd (cmd);
- if (demorecording)
- G_WriteDemoTiccmd (cmd);
+ if (demoplayback)
+ G_ReadDemoTiccmd(cmd);
+ if (demorecording)
+ G_WriteDemoTiccmd(cmd);
- if (netgame && !(gametic%ticdup) )
- {
- if (gametic > BACKUPTICS
- && consistancy[i][buf] != cmd->consistancy)
- {
- I_Error ("consistency failure (%i should be %i)",cmd->consistancy, consistancy[i][buf]);
- }
- if (players[i].mo)
- consistancy[i][buf] = players[i].mo->x;
- else
- consistancy[i][buf] = rndindex;
- }
- }
+ if (netgame && !(gametic % ticdup))
+ {
+ if (gametic > BACKUPTICS
+ && consistancy[i][buf] != cmd->consistancy)
+ {
+ I_Error("consistency failure (%i should be %i)",
+ cmd->consistancy, consistancy[i][buf]);
+ }
+ if (players[i].mo)
+ consistancy[i][buf] = players[i].mo->x;
+ else
+ consistancy[i][buf] = rndindex;
+ }
+ }
//
// check for special buttons
//
- for (i=0 ; i<MAXPLAYERS ; i++)
- if (playeringame[i])
- {
- if (players[i].cmd.buttons & BT_SPECIAL)
- {
- switch (players[i].cmd.buttons & BT_SPECIALMASK)
- {
- case BTS_PAUSE:
- paused ^= 1;
- if(paused)
- {
- S_PauseSound();
- }
- else
- {
- S_ResumeSound();
- }
- break;
+ for (i = 0; i < MAXPLAYERS; i++)
+ if (playeringame[i])
+ {
+ if (players[i].cmd.buttons & BT_SPECIAL)
+ {
+ switch (players[i].cmd.buttons & BT_SPECIALMASK)
+ {
+ case BTS_PAUSE:
+ paused ^= 1;
+ if (paused)
+ {
+ S_PauseSound();
+ }
+ else
+ {
+ S_ResumeSound();
+ }
+ break;
- case BTS_SAVEGAME:
- if (!savedescription[0])
- {
- if(netgame)
- {
- strcpy (savedescription, "NET GAME");
- }
- else
- {
- strcpy(savedescription, "SAVE GAME");
- }
- }
- savegameslot =
- (players[i].cmd.buttons & BTS_SAVEMASK)>>BTS_SAVESHIFT;
- gameaction = ga_savegame;
- break;
- }
- }
- }
- // turn inventory off after a certain amount of time
- if(inventory && !(--inventoryTics))
- {
- players[consoleplayer].readyArtifact =
- players[consoleplayer].inventory[inv_ptr].type;
- inventory = false;
- cmd->arti = 0;
- }
+ case BTS_SAVEGAME:
+ if (!savedescription[0])
+ {
+ if (netgame)
+ {
+ strcpy(savedescription, "NET GAME");
+ }
+ else
+ {
+ strcpy(savedescription, "SAVE GAME");
+ }
+ }
+ savegameslot =
+ (players[i].cmd.
+ buttons & BTS_SAVEMASK) >> BTS_SAVESHIFT;
+ gameaction = ga_savegame;
+ break;
+ }
+ }
+ }
+ // turn inventory off after a certain amount of time
+ if (inventory && !(--inventoryTics))
+ {
+ players[consoleplayer].readyArtifact =
+ players[consoleplayer].inventory[inv_ptr].type;
+ inventory = false;
+ cmd->arti = 0;
+ }
//
// do main actions
//
@@ -1041,24 +1069,24 @@
//
// do main actions
//
- switch (gamestate)
- {
- case GS_LEVEL:
- P_Ticker ();
- SB_Ticker ();
- AM_Ticker ();
- CT_Ticker();
- break;
- case GS_INTERMISSION:
- IN_Ticker ();
- break;
- case GS_FINALE:
- F_Ticker();
- break;
- case GS_DEMOSCREEN:
- D_PageTicker ();
- break;
- }
+ switch (gamestate)
+ {
+ case GS_LEVEL:
+ P_Ticker();
+ SB_Ticker();
+ AM_Ticker();
+ CT_Ticker();
+ break;
+ case GS_INTERMISSION:
+ IN_Ticker();
+ break;
+ case GS_FINALE:
+ F_Ticker();
+ break;
+ case GS_DEMOSCREEN:
+ D_PageTicker();
+ break;
+ }
}
@@ -1081,15 +1109,15 @@
====================
*/
-void G_InitPlayer (int player)
+void G_InitPlayer(int player)
{
- player_t *p;
+ player_t *p;
// set up the saved info
- p = &players[player];
+ p = &players[player];
// clear everything else to defaults
- G_PlayerReborn (player);
+ G_PlayerReborn(player);
}
@@ -1108,50 +1136,50 @@
void G_PlayerFinishLevel(int player)
{
- player_t *p;
- int i;
+ player_t *p;
+ int i;
/* // BIG HACK
inv_ptr = 0;
curpos = 0;
*/
- // END HACK
- p = &players[player];
- for(i=0; i<p->inventorySlotNum; i++)
- {
- p->inventory[i].count = 1;
- }
- p->artifactCount = p->inventorySlotNum;
+ // END HACK
+ p = &players[player];
+ for (i = 0; i < p->inventorySlotNum; i++)
+ {
+ p->inventory[i].count = 1;
+ }
+ p->artifactCount = p->inventorySlotNum;
- if(!deathmatch)
- {
- for(i = 0; i < 16; i++)
- {
- P_PlayerUseArtifact(p, arti_fly);
- }
- }
- memset(p->powers, 0, sizeof(p->powers));
- memset(p->keys, 0, sizeof(p->keys));
- playerkeys = 0;
+ if (!deathmatch)
+ {
+ for (i = 0; i < 16; i++)
+ {
+ P_PlayerUseArtifact(p, arti_fly);
+ }
+ }
+ memset(p->powers, 0, sizeof(p->powers));
+ memset(p->keys, 0, sizeof(p->keys));
+ playerkeys = 0;
// memset(p->inventory, 0, sizeof(p->inventory));
- if(p->chickenTics)
- {
- p->readyweapon = p->mo->special1; // Restore weapon
- p->chickenTics = 0;
- }
- p->messageTics = 0;
- p->lookdir = 0;
- p->mo->flags &= ~MF_SHADOW; // Remove invisibility
- p->extralight = 0; // Remove weapon flashes
- p->fixedcolormap = 0; // Remove torch
- p->damagecount = 0; // No palette changes
- p->bonuscount = 0;
- p->rain1 = NULL;
- p->rain2 = NULL;
- if(p == &players[consoleplayer])
- {
- SB_state = -1; // refresh the status bar
- }
+ if (p->chickenTics)
+ {
+ p->readyweapon = p->mo->special1; // Restore weapon
+ p->chickenTics = 0;
+ }
+ p->messageTics = 0;
+ p->lookdir = 0;
+ p->mo->flags &= ~MF_SHADOW; // Remove invisibility
+ p->extralight = 0; // Remove weapon flashes
+ p->fixedcolormap = 0; // Remove torch
+ p->damagecount = 0; // No palette changes
+ p->bonuscount = 0;
+ p->rain1 = NULL;
+ p->rain2 = NULL;
+ if (p == &players[consoleplayer])
+ {
+ SB_state = -1; // refresh the status bar
+ }
}
/*
@@ -1166,53 +1194,53 @@
void G_PlayerReborn(int player)
{
- player_t *p;
- int i;
- int frags[MAXPLAYERS];
- int killcount, itemcount, secretcount;
- boolean secret;
+ player_t *p;
+ int i;
+ int frags[MAXPLAYERS];
+ int killcount, itemcount, secretcount;
+ boolean secret;
- secret = false;
- memcpy(frags, players[player].frags, sizeof(frags));
- killcount = players[player].killcount;
- itemcount = players[player].itemcount;
- secretcount = players[player].secretcount;
+ secret = false;
+ memcpy(frags, players[player].frags, sizeof(frags));
+ killcount = players[player].killcount;
+ itemcount = players[player].itemcount;
+ secretcount = players[player].secretcount;
- p = &players[player];
- if(p->didsecret)
- {
- secret = true;
- }
- memset(p, 0, sizeof(*p));
+ p = &players[player];
+ if (p->didsecret)
+ {
+ secret = true;
+ }
+ memset(p, 0, sizeof(*p));
- memcpy(players[player].frags, frags, sizeof(players[player].frags));
- players[player].killcount = killcount;
- players[player].itemcount = itemcount;
- players[player].secretcount = secretcount;
+ memcpy(players[player].frags, frags, sizeof(players[player].frags));
+ players[player].killcount = killcount;
+ players[player].itemcount = itemcount;
+ players[player].secretcount = secretcount;
- p->usedown = p->attackdown = true; // don't do anything immediately
- p->playerstate = PST_LIVE;
- p->health = MAXHEALTH;
- p->readyweapon = p->pendingweapon = wp_goldwand;
- p->weaponowned[wp_staff] = true;
- p->weaponowned[wp_goldwand] = true;
- p->messageTics = 0;
- p->lookdir = 0;
- p->ammo[am_goldwand] = 50;
- for(i = 0; i < NUMAMMO; i++)
- {
- p->maxammo[i] = maxammo[i];
- }
- if(gamemap == 9 || secret)
- {
- p->didsecret = true;
- }
- if(p == &players[consoleplayer])
- {
- SB_state = -1; // refresh the status bar
- inv_ptr = 0; // reset the inventory pointer
- curpos = 0;
- }
+ p->usedown = p->attackdown = true; // don't do anything immediately
+ p->playerstate = PST_LIVE;
+ p->health = MAXHEALTH;
+ p->readyweapon = p->pendingweapon = wp_goldwand;
+ p->weaponowned[wp_staff] = true;
+ p->weaponowned[wp_goldwand] = true;
+ p->messageTics = 0;
+ p->lookdir = 0;
+ p->ammo[am_goldwand] = 50;
+ for (i = 0; i < NUMAMMO; i++)
+ {
+ p->maxammo[i] = maxammo[i];
+ }
+ if (gamemap == 9 || secret)
+ {
+ p->didsecret = true;
+ }
+ if (p == &players[consoleplayer])
+ {
+ SB_state = -1; // refresh the status bar
+ inv_ptr = 0; // reset the inventory pointer
+ curpos = 0;
+ }
}
/*
@@ -1225,38 +1253,37 @@
====================
*/
-void P_SpawnPlayer (mapthing_t *mthing);
+void P_SpawnPlayer(mapthing_t * mthing);
-boolean G_CheckSpot (int playernum, mapthing_t *mthing)
+boolean G_CheckSpot(int playernum, mapthing_t * mthing)
{
- fixed_t x,y;
- subsector_t *ss;
- unsigned an;
- mobj_t *mo;
+ fixed_t x, y;
+ subsector_t *ss;
+ unsigned an;
+ mobj_t *mo;
- x = mthing->x << FRACBITS;
- y = mthing->y << FRACBITS;
+ x = mthing->x << FRACBITS;
+ y = mthing->y << FRACBITS;
- players[playernum].mo->flags2 &= ~MF2_PASSMOBJ;
- if (!P_CheckPosition (players[playernum].mo, x, y) )
- {
- players[playernum].mo->flags2 |= MF2_PASSMOBJ;
- return false;
- }
- players[playernum].mo->flags2 |= MF2_PASSMOBJ;
+ players[playernum].mo->flags2 &= ~MF2_PASSMOBJ;
+ if (!P_CheckPosition(players[playernum].mo, x, y))
+ {
+ players[playernum].mo->flags2 |= MF2_PASSMOBJ;
+ return false;
+ }
+ players[playernum].mo->flags2 |= MF2_PASSMOBJ;
// spawn a teleport fog
- ss = R_PointInSubsector (x,y);
- an = ( ANG45 * (mthing->angle/45) ) >> ANGLETOFINESHIFT;
+ ss = R_PointInSubsector(x, y);
+ an = (ANG45 * (mthing->angle / 45)) >> ANGLETOFINESHIFT;
- mo = P_SpawnMobj (x+20*finecosine[an], y+20*finesine[an]
- , ss->sector->floorheight+TELEFOGHEIGHT
-, MT_TFOG);
+ mo = P_SpawnMobj(x + 20 * finecosine[an], y + 20 * finesine[an],
+ ss->sector->floorheight + TELEFOGHEIGHT, MT_TFOG);
- if (players[consoleplayer].viewz != 1)
- S_StartSound (mo, sfx_telept); // don't start sound on first frame
+ if (players[consoleplayer].viewz != 1)
+ S_StartSound(mo, sfx_telept); // don't start sound on first frame
- return true;
+ return true;
}
/*
@@ -1269,28 +1296,28 @@
====================
*/
-void G_DeathMatchSpawnPlayer (int playernum)
+void G_DeathMatchSpawnPlayer(int playernum)
{
- int i,j;
- int selections;
+ int i, j;
+ int selections;
- selections = deathmatch_p - deathmatchstarts;
- if (selections < 4)
- I_Error ("Only %i deathmatch spots, 4 required", selections);
+ selections = deathmatch_p - deathmatchstarts;
+ if (selections < 4)
+ I_Error("Only %i deathmatch spots, 4 required", selections);
- for (j=0 ; j<20 ; j++)
- {
- i = P_Random() % selections;
- if (G_CheckSpot (playernum, &deathmatchstarts[i]) )
- {
- deathmatchstarts[i].type = playernum+1;
- P_SpawnPlayer (&deathmatchstarts[i]);
- return;
- }
- }
+ for (j = 0; j < 20; j++)
+ {
+ i = P_Random() % selections;
+ if (G_CheckSpot(playernum, &deathmatchstarts[i]))
+ {
+ deathmatchstarts[i].type = playernum + 1;
+ P_SpawnPlayer(&deathmatchstarts[i]);
+ return;
+ }
+ }
// no good spot, so the player will probably get stuck
- P_SpawnPlayer (&playerstarts[playernum]);
+ P_SpawnPlayer(&playerstarts[playernum]);
}
/*
@@ -1301,48 +1328,48 @@
====================
*/
-void G_DoReborn (int playernum)
+void G_DoReborn(int playernum)
{
- int i;
+ int i;
- if (G_CheckDemoStatus ())
- return;
- if (!netgame)
- gameaction = ga_loadlevel; // reload the level from scratch
- else
- { // respawn at the start
- players[playernum].mo->player = NULL; // dissasociate the corpse
+ if (G_CheckDemoStatus())
+ return;
+ if (!netgame)
+ gameaction = ga_loadlevel; // reload the level from scratch
+ else
+ { // respawn at the start
+ players[playernum].mo->player = NULL; // dissasociate the corpse
- // spawn at random spot if in death match
- if (deathmatch)
- {
- G_DeathMatchSpawnPlayer (playernum);
- return;
- }
+ // spawn at random spot if in death match
+ if (deathmatch)
+ {
+ G_DeathMatchSpawnPlayer(playernum);
+ return;
+ }
- if (G_CheckSpot (playernum, &playerstarts[playernum]) )
- {
- P_SpawnPlayer (&playerstarts[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
- P_SpawnPlayer (&playerstarts[i]);
- playerstarts[i].type = i+1; // restore
- return;
- }
- // he's going to be inside something. Too bad.
- P_SpawnPlayer (&playerstarts[playernum]);
- }
+ if (G_CheckSpot(playernum, &playerstarts[playernum]))
+ {
+ P_SpawnPlayer(&playerstarts[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
+ P_SpawnPlayer(&playerstarts[i]);
+ playerstarts[i].type = i + 1; // restore
+ return;
+ }
+ // he's going to be inside something. Too bad.
+ P_SpawnPlayer(&playerstarts[playernum]);
+ }
}
-void G_ScreenShot (void)
+void G_ScreenShot(void)
{
- gameaction = ga_screenshot;
+ gameaction = ga_screenshot;
}
@@ -1354,57 +1381,57 @@
====================
*/
-boolean secretexit;
+boolean secretexit;
-void G_ExitLevel (void)
+void G_ExitLevel(void)
{
- secretexit = false;
- gameaction = ga_completed;
+ secretexit = false;
+ gameaction = ga_completed;
}
-void G_SecretExitLevel (void)
+void G_SecretExitLevel(void)
{
- secretexit = true;
- gameaction = ga_completed;
+ secretexit = true;
+ gameaction = ga_completed;
}
void G_DoCompleted(void)
{
- int i;
- static int afterSecret[5] = { 7, 5, 5, 5, 4 };
+ int i;
+ static int afterSecret[5] = { 7, 5, 5, 5, 4 };
- gameaction = ga_nothing;
- if(G_CheckDemoStatus())
- {
- return;
- }
- for(i = 0; i < MAXPLAYERS; i++)
- {
- if(playeringame[i])
- {
- G_PlayerFinishLevel(i);
- }
- }
- prevmap = gamemap;
- if(secretexit == true)
- {
- gamemap = 9;
- }
- else if(gamemap == 9)
- { // Finished secret level
- gamemap = afterSecret[gameepisode-1];
- }
- else if(gamemap == 8)
- {
- gameaction = ga_victory;
- return;
- }
- else
- {
- gamemap++;
- }
- gamestate = GS_INTERMISSION;
- IN_Start();
+ gameaction = ga_nothing;
+ if (G_CheckDemoStatus())
+ {
+ return;
+ }
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (playeringame[i])
+ {
+ G_PlayerFinishLevel(i);
+ }
+ }
+ prevmap = gamemap;
+ if (secretexit == true)
+ {
+ gamemap = 9;
+ }
+ else if (gamemap == 9)
+ { // Finished secret level
+ gamemap = afterSecret[gameepisode - 1];
+ }
+ else if (gamemap == 8)
+ {
+ gameaction = ga_victory;
+ return;
+ }
+ else
+ {
+ gamemap++;
+ }
+ gamestate = GS_INTERMISSION;
+ IN_Start();
}
//============================================================================
@@ -1415,7 +1442,7 @@
void G_WorldDone(void)
{
- gameaction = ga_worlddone;
+ gameaction = ga_worlddone;
}
//============================================================================
@@ -1426,10 +1453,10 @@
void G_DoWorldDone(void)
{
- gamestate = GS_LEVEL;
- G_DoLoadLevel();
- gameaction = ga_nothing;
- viewactive = true;
+ gamestate = GS_LEVEL;
+ G_DoLoadLevel();
+ gameaction = ga_nothing;
+ viewactive = true;
}
//---------------------------------------------------------------------------
@@ -1444,8 +1471,8 @@
void G_LoadGame(char *name)
{
- strcpy(savename, name);
- gameaction = ga_loadgame;
+ strcpy(savename, name);
+ gameaction = ga_loadgame;
}
//---------------------------------------------------------------------------
@@ -1460,50 +1487,50 @@
void G_DoLoadGame(void)
{
- int length;
- int i;
- int a, b, c;
- char vcheck[VERSIONSIZE];
+ int length;
+ int i;
+ int a, b, c;
+ char vcheck[VERSIONSIZE];
- gameaction = ga_nothing;
+ gameaction = ga_nothing;
- 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))
- { // Bad version
- return;
- }
- save_p += VERSIONSIZE;
- gameskill = *save_p++;
- gameepisode = *save_p++;
- gamemap = *save_p++;
- for(i = 0; i < MAXPLAYERS; i++)
- {
- playeringame[i] = *save_p++;
- }
- // Load a base level
- G_InitNew(gameskill, gameepisode, gamemap);
+ 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))
+ { // Bad version
+ return;
+ }
+ save_p += VERSIONSIZE;
+ gameskill = *save_p++;
+ gameepisode = *save_p++;
+ gamemap = *save_p++;
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ playeringame[i] = *save_p++;
+ }
+ // Load a base level
+ G_InitNew(gameskill, gameepisode, gamemap);
- // Create leveltime
- a = *save_p++;
- b = *save_p++;
- c = *save_p++;
- leveltime = (a<<16)+(b<<8)+c;
+ // Create leveltime
+ a = *save_p++;
+ b = *save_p++;
+ c = *save_p++;
+ leveltime = (a << 16) + (b << 8) + c;
- // De-archive all the modifications
- P_UnArchivePlayers();
- P_UnArchiveWorld();
- P_UnArchiveThinkers();
- P_UnArchiveSpecials();
+ // De-archive all the modifications
+ P_UnArchivePlayers();
+ P_UnArchiveWorld();
+ P_UnArchiveThinkers();
+ P_UnArchiveSpecials();
- if(*save_p != SAVE_GAME_TERMINATOR)
- { // Missing savegame termination marker
- I_Error("Bad savegame");
- }
- Z_Free(savebuffer);
+ if (*save_p != SAVE_GAME_TERMINATOR)
+ { // Missing savegame termination marker
+ I_Error("Bad savegame");
+ }
+ Z_Free(savebuffer);
}
@@ -1518,108 +1545,107 @@
*/
skill_t d_skill;
-int d_episode;
-int d_map;
+int d_episode;
+int d_map;
-void G_DeferedInitNew (skill_t skill, int episode, int map)
+void G_DeferedInitNew(skill_t skill, int episode, int map)
{
- d_skill = skill;
- d_episode = episode;
- d_map = map;
- gameaction = ga_newgame;
+ d_skill = skill;
+ d_episode = episode;
+ d_map = map;
+ gameaction = ga_newgame;
}
-void G_DoNewGame (void)
+void G_DoNewGame(void)
{
- G_InitNew (d_skill, d_episode, d_map);
- gameaction = ga_nothing;
+ G_InitNew(d_skill, d_episode, d_map);
+ gameaction = ga_nothing;
}
-extern int skytexture;
+extern int skytexture;
void G_InitNew(skill_t skill, int episode, int map)
{
- int i;
- int speed;
- static char *skyLumpNames[5] =
- {
- "SKY1", "SKY2", "SKY3", "SKY1", "SKY3"
- };
+ int i;
+ int speed;
+ static char *skyLumpNames[5] = {
+ "SKY1", "SKY2", "SKY3", "SKY1", "SKY3"
+ };
- if(paused)
- {
- paused = false;
- S_ResumeSound();
- }
- if(skill < sk_baby)
- skill = sk_baby;
- if(skill > sk_nightmare)
- skill = sk_nightmare;
- if(episode < 1)
- episode = 1;
- // Up to 9 episodes for testing
- if(episode > 9)
- episode = 9;
- if(map < 1)
- map = 1;
- if(map > 9)
- map = 9;
- M_ClearRandom();
- if(respawnparm)
- {
- respawnmonsters = true;
- }
- else
- {
- respawnmonsters = false;
- }
- // Set monster missile speeds
- speed = skill == sk_nightmare;
- for(i = 0; MonsterMissileInfo[i].type != -1; i++)
- {
- mobjinfo[MonsterMissileInfo[i].type].speed
- = MonsterMissileInfo[i].speed[speed]<<FRACBITS;
- }
- // Force players to be initialized upon first level load
- for(i = 0; i < MAXPLAYERS; i++)
- {
- players[i].playerstate = PST_REBORN;
- players[i].didsecret = false;
- }
- // Set up a bunch of globals
- usergame = true; // will be set false if a demo
- paused = false;
- demorecording = false;
- demoplayback = false;
- viewactive = true;
- gameepisode = episode;
- gamemap = map;
- gameskill = skill;
- viewactive = true;
- BorderNeedRefresh = true;
+ if (paused)
+ {
+ paused = false;
+ S_ResumeSound();
+ }
+ if (skill < sk_baby)
+ skill = sk_baby;
+ if (skill > sk_nightmare)
+ skill = sk_nightmare;
+ if (episode < 1)
+ episode = 1;
+ // Up to 9 episodes for testing
+ if (episode > 9)
+ episode = 9;
+ if (map < 1)
+ map = 1;
+ if (map > 9)
+ map = 9;
+ M_ClearRandom();
+ if (respawnparm)
+ {
+ respawnmonsters = true;
+ }
+ else
+ {
+ respawnmonsters = false;
+ }
+ // Set monster missile speeds
+ speed = skill == sk_nightmare;
+ for (i = 0; MonsterMissileInfo[i].type != -1; i++)
+ {
+ mobjinfo[MonsterMissileInfo[i].type].speed
+ = MonsterMissileInfo[i].speed[speed] << FRACBITS;
+ }
+ // Force players to be initialized upon first level load
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ players[i].playerstate = PST_REBORN;
+ players[i].didsecret = false;
+ }
+ // Set up a bunch of globals
+ usergame = true; // will be set false if a demo
+ paused = false;
+ demorecording = false;
+ demoplayback = false;
+ viewactive = true;
+ gameepisode = episode;
+ gamemap = map;
+ gameskill = skill;
+ viewactive = true;
+ BorderNeedRefresh = true;
- // Set the sky map
- if(episode > 5)
- {
- skytexture = R_TextureNumForName("SKY1");
- }
- else
- {
- skytexture = R_TextureNumForName(skyLumpNames[episode-1]);
- }
+ // Set the sky map
+ if (episode > 5)
+ {
+ skytexture = R_TextureNumForName("SKY1");
+ }
+ else
+ {
+ skytexture = R_TextureNumForName(skyLumpNames[episode - 1]);
+ }
//
// give one null ticcmd_t
//
#if 0
- gametic = 0;
- maketic = 1;
- for (i=0 ; i<MAXPLAYERS ; i++)
- nettics[i] = 1; // one null event for this gametic
- memset (localcmds,0,sizeof(localcmds));
- memset (netcmds,0,sizeof(netcmds));
+ gametic = 0;
+ maketic = 1;
+ for (i = 0; i < MAXPLAYERS; i++)
+ nettics[i] = 1; // one null event for this gametic
+ memset(localcmds, 0, sizeof(localcmds));
+ memset(netcmds, 0, sizeof(netcmds));
#endif
- G_DoLoadLevel();
+ G_DoLoadLevel();
}
@@ -1633,33 +1659,33 @@
#define DEMOMARKER 0x80
-void G_ReadDemoTiccmd (ticcmd_t *cmd)
+void G_ReadDemoTiccmd(ticcmd_t * cmd)
{
- if (*demo_p == DEMOMARKER)
- { // end of demo data stream
- G_CheckDemoStatus ();
- return;
- }
- cmd->forwardmove = ((signed char)*demo_p++);
- cmd->sidemove = ((signed char)*demo_p++);
- cmd->angleturn = ((unsigned char)*demo_p++)<<8;
- cmd->buttons = (unsigned char)*demo_p++;
- cmd->lookfly = (unsigned char)*demo_p++;
- cmd->arti = (unsigned char)*demo_p++;
+ if (*demo_p == DEMOMARKER)
+ { // end of demo data stream
+ G_CheckDemoStatus();
+ return;
+ }
+ cmd->forwardmove = ((signed char) *demo_p++);
+ cmd->sidemove = ((signed char) *demo_p++);
+ cmd->angleturn = ((unsigned char) *demo_p++) << 8;
+ cmd->buttons = (unsigned char) *demo_p++;
+ cmd->lookfly = (unsigned char) *demo_p++;
+ cmd->arti = (unsigned char) *demo_p++;
}
-void G_WriteDemoTiccmd (ticcmd_t *cmd)
+void G_WriteDemoTiccmd(ticcmd_t * cmd)
{
- if (gamekeydown['q']) // press q to end demo recording
- G_CheckDemoStatus ();
- *demo_p++ = cmd->forwardmove;
- *demo_p++ = cmd->sidemove;
- *demo_p++ = cmd->angleturn>>8;
- *demo_p++ = cmd->buttons;
- *demo_p++ = cmd->lookfly;
- *demo_p++ = cmd->arti;
- demo_p -= 6;
- G_ReadDemoTiccmd (cmd); // make SURE it is exactly the same
+ if (gamekeydown['q']) // press q to end demo recording
+ G_CheckDemoStatus();
+ *demo_p++ = cmd->forwardmove;
+ *demo_p++ = cmd->sidemove;
+ *demo_p++ = cmd->angleturn >> 8;
+ *demo_p++ = cmd->buttons;
+ *demo_p++ = cmd->lookfly;
+ *demo_p++ = cmd->arti;
+ demo_p -= 6;
+ G_ReadDemoTiccmd(cmd); // make SURE it is exactly the same
}
@@ -1672,23 +1698,24 @@
===================
*/
-void G_RecordDemo (skill_t skill, int numplayers, int episode, int map, char *name)
+void G_RecordDemo(skill_t skill, int numplayers, int episode, int map,
+ char *name)
{
- int i;
+ int i;
- G_InitNew (skill, episode, map);
- usergame = false;
- strcpy (demoname, name);
- strcat (demoname, ".lmp");
- demobuffer = demo_p = Z_Malloc (0x20000,PU_STATIC,NULL);
- *demo_p++ = skill;
- *demo_p++ = episode;
- *demo_p++ = map;
+ G_InitNew(skill, episode, map);
+ usergame = false;
+ strcpy(demoname, name);
+ strcat(demoname, ".lmp");
+ demobuffer = demo_p = Z_Malloc(0x20000, PU_STATIC, NULL);
+ *demo_p++ = skill;
+ *demo_p++ = episode;
+ *demo_p++ = map;
- for (i=0 ; i<MAXPLAYERS ; i++)
- *demo_p++ = playeringame[i];
+ for (i = 0; i < MAXPLAYERS; i++)
+ *demo_p++ = playeringame[i];
- demorecording = true;
+ demorecording = true;
}
@@ -1700,33 +1727,33 @@
===================
*/
-char *defdemoname;
+char *defdemoname;
-void G_DeferedPlayDemo (char *name)
+void G_DeferedPlayDemo(char *name)
{
- defdemoname = name;
- gameaction = ga_playdemo;
+ defdemoname = name;
+ gameaction = ga_playdemo;
}
-void G_DoPlayDemo (void)
+void G_DoPlayDemo(void)
{
- skill_t skill;
- int i, episode, map;
+ skill_t skill;
+ int i, episode, map;
- gameaction = ga_nothing;
- demobuffer = demo_p = W_CacheLumpName (defdemoname, PU_STATIC);
- skill = *demo_p++;
- episode = *demo_p++;
- map = *demo_p++;
+ gameaction = ga_nothing;
+ demobuffer = demo_p = W_CacheLumpName(defdemoname, PU_STATIC);
+ skill = *demo_p++;
+ episode = *demo_p++;
+ map = *demo_p++;
- for (i=0 ; i<MAXPLAYERS ; i++)
- playeringame[i] = *demo_p++;
+ for (i = 0; i < MAXPLAYERS; i++)
+ playeringame[i] = *demo_p++;
- precache = false; // don't spend a lot of time in loadlevel
- G_InitNew (skill, episode, map);
- precache = true;
- usergame = false;
- demoplayback = true;
+ precache = false; // don't spend a lot of time in loadlevel
+ G_InitNew(skill, episode, map);
+ precache = true;
+ usergame = false;
+ demoplayback = true;
}
@@ -1738,20 +1765,20 @@
===================
*/
-void G_TimeDemo (char *name)
+void G_TimeDemo(char *name)
{
- skill_t skill;
- int episode, map;
+ skill_t skill;
+ int episode, map;
- demobuffer = demo_p = W_CacheLumpName (name, PU_STATIC);
- skill = *demo_p++;
- episode = *demo_p++;
- map = *demo_p++;
- G_InitNew (skill, episode, map);
- usergame = false;
- demoplayback = true;
- timingdemo = true;
- singletics = true;
+ demobuffer = demo_p = W_CacheLumpName(name, PU_STATIC);
+ skill = *demo_p++;
+ episode = *demo_p++;
+ map = *demo_p++;
+ G_InitNew(skill, episode, map);
+ usergame = false;
+ demoplayback = true;
+ timingdemo = true;
+ singletics = true;
}
@@ -1765,38 +1792,38 @@
===================
*/
-boolean G_CheckDemoStatus (void)
+boolean G_CheckDemoStatus(void)
{
- int endtime;
+ int endtime;
- if (timingdemo)
- {
- endtime = I_GetTime ();
- I_Error ("timed %i gametics in %i realtics",gametic
- , endtime-starttime);
- }
+ if (timingdemo)
+ {
+ endtime = I_GetTime();
+ I_Error("timed %i gametics in %i realtics", gametic,
+ endtime - starttime);
+ }
- if (demoplayback)
- {
- if (singledemo)
- I_Quit ();
+ if (demoplayback)
+ {
+ if (singledemo)
+ I_Quit();
- Z_ChangeTag (demobuffer, PU_CACHE);
- demoplayback = false;
- D_AdvanceDemo ();
- return true;
- }
+ Z_ChangeTag(demobuffer, PU_CACHE);
+ demoplayback = false;
+ D_AdvanceDemo();
+ return true;
+ }
- if (demorecording)
- {
- *demo_p++ = DEMOMARKER;
- M_WriteFile (demoname, demobuffer, demo_p - demobuffer);
- Z_Free (demobuffer);
- demorecording = false;
- I_Error ("Demo %s recorded",demoname);
- }
+ if (demorecording)
+ {
+ *demo_p++ = DEMOMARKER;
+ M_WriteFile(demoname, demobuffer, demo_p - demobuffer);
+ Z_Free(demobuffer);
+ demorecording = false;
+ I_Error("Demo %s recorded", demoname);
+ }
- return false;
+ return false;
}
/**************************************************************************/
@@ -1812,9 +1839,9 @@
void G_SaveGame(int slot, char *description)
{
- savegameslot = slot;
- strcpy(savedescription, description);
- sendsave = true;
+ savegameslot = slot;
+ strcpy(savedescription, description);
+ sendsave = true;
}
//==========================================================================
@@ -1827,45 +1854,45 @@
void G_DoSaveGame(void)
{
- int i;
- char name[100];
- char verString[VERSIONSIZE];
- char *description;
+ int i;
+ char name[100];
+ char verString[VERSIONSIZE];
+ char *description;
- if(cdrom)
- {
- sprintf(name, SAVEGAMENAMECD"%d.hsg", savegameslot);
- }
- else
- {
- sprintf(name, SAVEGAMENAME"%d.hsg", savegameslot);
- }
- description = savedescription;
+ if (cdrom)
+ {
+ sprintf(name, SAVEGAMENAMECD "%d.hsg", savegameslot);
+ }
+ else
+ {
+ sprintf(name, SAVEGAMENAME "%d.hsg", savegameslot);
+ }
+ description = savedescription;
- SV_Open(name);
- SV_Write(description, SAVESTRINGSIZE);
- memset(verString, 0, sizeof(verString));
- sprintf(verString, "version %i", VERSION);
- SV_Write(verString, VERSIONSIZE);
- SV_WriteByte(gameskill);
- SV_WriteByte(gameepisode);
- SV_WriteByte(gamemap);
- for(i = 0; i < MAXPLAYERS; i++)
- {
- SV_WriteByte(playeringame[i]);
- }
- SV_WriteByte(leveltime>>16);
- SV_WriteByte(leveltime>>8);
- SV_WriteByte(leveltime);
- P_ArchivePlayers();
- P_ArchiveWorld();
- P_ArchiveThinkers();
- P_ArchiveSpecials();
- SV_Close(name);
+ SV_Open(name);
+ SV_Write(description, SAVESTRINGSIZE);
+ memset(verString, 0, sizeof(verString));
+ sprintf(verString, "version %i", VERSION);
+ SV_Write(verString, VERSIONSIZE);
+ SV_WriteByte(gameskill);
+ SV_WriteByte(gameepisode);
+ SV_WriteByte(gamemap);
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ SV_WriteByte(playeringame[i]);
+ }
+ SV_WriteByte(leveltime >> 16);
+ SV_WriteByte(leveltime >> 8);
+ SV_WriteByte(leveltime);
+ P_ArchivePlayers();
+ P_ArchiveWorld();
+ P_ArchiveThinkers();
+ P_ArchiveSpecials();
+ SV_Close(name);
- gameaction = ga_nothing;
- savedescription[0] = 0;
- P_SetMessage(&players[consoleplayer], TXT_GAMESAVED, true);
+ gameaction = ga_nothing;
+ savedescription[0] = 0;
+ P_SetMessage(&players[consoleplayer], TXT_GAMESAVED, true);
}
//==========================================================================
@@ -1876,18 +1903,18 @@
void SV_Open(char *fileName)
{
- MallocFailureOk = true;
- save_p = savebuffer = Z_Malloc(SAVEGAMESIZE, PU_STATIC, NULL);
- MallocFailureOk = false;
- if(savebuffer == NULL)
- { // Not enough memory - use file save method
- SaveGameType = SVG_FILE;
- SaveGameFP = fopen(fileName, "wb");
- }
- else
- {
- SaveGameType = SVG_RAM;
- }
+ MallocFailureOk = true;
+ save_p = savebuffer = Z_Malloc(SAVEGAMESIZE, PU_STATIC, NULL);
+ MallocFailureOk = false;
+ if (savebuffer == NULL)
+ { // Not enough memory - use file save method
+ SaveGameType = SVG_FILE;
+ SaveGameFP = fopen(fileName, "wb");
+ }
+ else
+ {
+ SaveGameType = SVG_RAM;
+ }
}
//==========================================================================
@@ -1898,23 +1925,23 @@
void SV_Close(char *fileName)
{
- int length;
+ int length;
- SV_WriteByte(SAVE_GAME_TERMINATOR);
- if(SaveGameType == SVG_RAM)
- {
- length = save_p-savebuffer;
- if(length > SAVEGAMESIZE)
- {
- I_Error("Savegame buffer overrun");
- }
- M_WriteFile(fileName, savebuffer, length);
- Z_Free(savebuffer);
- }
- else
- { // SVG_FILE
- fclose(SaveGameFP);
- }
+ SV_WriteByte(SAVE_GAME_TERMINATOR);
+ if (SaveGameType == SVG_RAM)
+ {
+ length = save_p - savebuffer;
+ if (length > SAVEGAMESIZE)
+ {
+ I_Error("Savegame buffer overrun");
+ }
+ M_WriteFile(fileName, savebuffer, length);
+ Z_Free(savebuffer);
+ }
+ else
+ { // SVG_FILE
+ fclose(SaveGameFP);
+ }
}
//==========================================================================
@@ -1925,28 +1952,28 @@
void SV_Write(void *buffer, int size)
{
- if(SaveGameType == SVG_RAM)
- {
- memcpy(save_p, buffer, size);
- save_p += size;
- }
- else
- { // SVG_FILE
- fwrite(buffer, size, 1, SaveGameFP);
- }
+ if (SaveGameType == SVG_RAM)
+ {
+ memcpy(save_p, buffer, size);
+ save_p += size;
+ }
+ else
+ { // SVG_FILE
+ fwrite(buffer, size, 1, SaveGameFP);
+ }
}
void SV_WriteByte(byte val)
{
- SV_Write(&val, sizeof(byte));
+ SV_Write(&val, sizeof(byte));
}
void SV_WriteWord(unsigned short val)
{
- SV_Write(&val, sizeof(unsigned short));
+ SV_Write(&val, sizeof(unsigned short));
}
void SV_WriteLong(unsigned int val)
{
- SV_Write(&val, sizeof(int));
+ SV_Write(&val, sizeof(int));
}
--- a/src/heretic/i_cyber.c
+++ b/src/heretic/i_cyber.c
@@ -1,259 +1,284 @@
-// I_cyber.c
-
-#include <dos.h>
-#include <stdlib.h>
-
-
-/*
-====================================================
-
-Doom control structure
-
-The keybaord and joystick will add to the values set by the cyberman,
-to a maximum of 0x19000 for forwardmove and sidemove. Angleturn is
-not bounded at all.
-
-parm normal fast
------ ------ ----
-forwardmove 0xc800 0x19000
-sidemove 0xc000 0x14000
-angleturn 0x2800000 0x5000000
-
-The keyboard and joystick have a 1/3 second slow turn of 0x1400000 under
-normal speed to help aiming.
-
-
-
-====================================================
-*/
-
-typedef struct
-{
- char forwardmove; // *2048 for move
- char sidemove; // *2048 for move
- short angleturn; // <<16 for angle delta
- short consistancy; // checks for net game
- unsigned char chatchar;
- unsigned char buttons;
-} ticcmd_t;
-
-#define BT_ATTACK 1
-#define BT_USE 2
-#define BT_CHANGE 4 // if true, the next 3 bits hold weapon num
-#define BT_WEAPONMASK (8+16+32)
-#define BT_WEAPONSHIFT 3
-
-
-
-//==================================================
-//
-// CyberMan detection and usage info
-//
-//==================================================
-#define DPMI_INT 0x31
-#define MOUSE_INT 0x33
-
-#define DOSMEMSIZE 64 // enough for any SWIFT structure
-
-typedef struct {
- short x;
- short y;
- short z;
- short pitch;
- short roll;
- short yaw;
- short buttons;
-} SWIFT_3DStatus;
-
-// DPMI real mode interrupt structure
-static struct rminfo {
- long EDI;
- long ESI;
- long EBP;
- long reserved_by_system;
- long EBX;
- long EDX;
- long ECX;
- long EAX;
- short flags;
- short ES,DS,FS,GS,IP,CS,SP,SS;
-} RMI;
-
-typedef struct {
- unsigned char deviceType;
- unsigned char majorVersion;
- unsigned char minorVersion;
- unsigned char absRelFlags;
- unsigned char centeringFlags;
- unsigned char reserved[5];
-} StaticDeviceData;
-
-// values for deviceType:
-#define DEVTYPE_CYBERMAN 1
-
-short selector;
-unsigned short segment; // segment of DOS memory block
-SWIFT_3DStatus *cyberstat;
-int isCyberPresent; // is CyberMan present?
-
-
-static union REGS regs;
-static struct SREGS sregs;
-
-
-extern int mousepresent;
-
-//===========================================================
-//
-// I_StartupCyberMan
-//
-// If a cyberman is present, init it and set isCyberPresent to 1
-//===========================================================
-void I_StartupCyberMan(void)
-{
- StaticDeviceData *pbuf;
- int success = 0;
-
- isCyberPresent = 0;
-
- cyberstat = (SWIFT_3DStatus *)I_AllocLow (DOSMEMSIZE);
- segment = (int)cyberstat>>4;
-
- pbuf = (StaticDeviceData *)cyberstat;
- memset(pbuf, 0, sizeof (StaticDeviceData));
-
- // Use DPMI call 300h to issue mouse interrupt
- memset(&RMI, 0, sizeof(RMI));
- RMI.EAX = 0x53C1; // SWIFT: Get Static Device Data
- RMI.ES = segment;
- RMI.EDX = 0;
- memset(&sregs, 0, sizeof (sregs));
- regs.w.ax = 0x0300; // DPMI: simulate interrupt
- regs.w.bx = MOUSE_INT;
- regs.w.cx = 0;
- regs.x.edi = FP_OFF(&RMI);
- sregs.es = FP_SEG(&RMI);
- int386x( DPMI_INT, ®s, ®s, &sregs );
-
- if ((short)RMI.EAX != 1)
- {
- // SWIFT functions not present
- tprintf("CyberMan: Wrong mouse driver - no SWIFT support (AX=%04x).\n",
- (unsigned)(short)RMI.EAX);
- }
- else
- if (pbuf->deviceType != DEVTYPE_CYBERMAN)
- {
- // no SWIFT device, or not CyberMan
- if (pbuf->deviceType == 0)
- {
- tprintf("CyberMan: no SWIFT device connected.\n");
- }
- else
- {
- tprintf("CyberMan: SWIFT device is not a CyberMan! (type=%d)\n",
- pbuf->deviceType);
- }
- }
- else
- {
- tprintf("CyberMan: CyberMan %d.%02d connected.\n",
- pbuf->majorVersion, pbuf->minorVersion);
- isCyberPresent = 1;
- mousepresent = 0;
- }
-}
-
-
-
-/*
-===============
-=
-= I_ReadCyberCmds
-=
-===============
-*/
-
-
-int oldpos;
-
-void I_ReadCyberCmd (ticcmd_t *cmd)
-{
- int delta;
-
- // Use DPMI call 300h to issue mouse interrupt
- memset(&RMI, 0, sizeof(RMI));
- RMI.EAX = 0x5301; // SWIFT: Get Position and Buttons
- RMI.ES = segment;
- RMI.EDX = 0;
- memset(&sregs, 0, sizeof (sregs));
- regs.w.ax = 0x0300; // DPMI: simulate interrupt
- regs.w.bx = MOUSE_INT;
- regs.w.cx = 0;
- regs.x.edi = FP_OFF(&RMI);
- sregs.es = FP_SEG(&RMI);
- int386x( DPMI_INT, ®s, ®s, &sregs );
-
- if (cyberstat->y < -7900)
- cmd->forwardmove = 0xc800/2048;
- else if (cyberstat->y > 7900)
- cmd->forwardmove = -0xc800/2048;
-
- if (cyberstat->buttons & 4)
- cmd->buttons |= BT_ATTACK;
- if (cyberstat->buttons & 2)
- cmd->buttons |= BT_USE;
-
- delta = cyberstat->x - oldpos;
- oldpos = cyberstat->x;
-
- if (cyberstat->buttons & 1)
- { // strafe
- if (cyberstat->x < -7900)
- cmd->sidemove = -0xc800/2048;
- else if (cyberstat->x > 7900)
- cmd->sidemove = 0xc800/2048;
- else
- cmd->sidemove = delta*40/2048;
- }
- else
- {
- if (cyberstat->x < -7900)
- cmd->angleturn = 0x280;
- else if (cyberstat->x > 7900)
- cmd->angleturn = -0x280;
- else
- cmd->angleturn = -delta*0xa/16;
-
- }
-
-}
-
-
-void I_Tactile (int on, int off, int total)
-{
- if (!isCyberPresent)
- return;
-
- on /= 5;
- off /= 5;
- total /= 40;
- if (on > 255)
- on = 255;
- if (off > 255)
- off = 255;
- if (total > 255)
- total = 255;
-
- memset(&RMI, 0, sizeof(RMI));
- RMI.EAX = 0x5330; // SWIFT: Get Position and Buttons
- RMI.EBX = on*256+off;
- RMI.ECX = total;
- memset(&sregs, 0, sizeof (sregs));
- regs.w.ax = 0x0300; // DPMI: simulate interrupt
- regs.w.bx = MOUSE_INT;
- regs.w.cx = 0;
- regs.x.edi = FP_OFF(&RMI);
- sregs.es = FP_SEG(&RMI);
- int386x( DPMI_INT, ®s, ®s, &sregs );
-}
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
+// I_cyber.c
+
+#include <dos.h>
+#include <stdlib.h>
+
+
+/*
+====================================================
+
+Doom control structure
+
+The keybaord and joystick will add to the values set by the cyberman,
+to a maximum of 0x19000 for forwardmove and sidemove. Angleturn is
+not bounded at all.
+
+parm normal fast
+----- ------ ----
+forwardmove 0xc800 0x19000
+sidemove 0xc000 0x14000
+angleturn 0x2800000 0x5000000
+
+The keyboard and joystick have a 1/3 second slow turn of 0x1400000 under
+normal speed to help aiming.
+
+
+
+====================================================
+*/
+
+typedef struct
+{
+ char forwardmove; // *2048 for move
+ char sidemove; // *2048 for move
+ short angleturn; // <<16 for angle delta
+ short consistancy; // checks for net game
+ unsigned char chatchar;
+ unsigned char buttons;
+} ticcmd_t;
+
+#define BT_ATTACK 1
+#define BT_USE 2
+#define BT_CHANGE 4 // if true, the next 3 bits hold weapon num
+#define BT_WEAPONMASK (8+16+32)
+#define BT_WEAPONSHIFT 3
+
+
+
+//==================================================
+//
+// CyberMan detection and usage info
+//
+//==================================================
+#define DPMI_INT 0x31
+#define MOUSE_INT 0x33
+
+#define DOSMEMSIZE 64 // enough for any SWIFT structure
+
+typedef struct
+{
+ short x;
+ short y;
+ short z;
+ short pitch;
+ short roll;
+ short yaw;
+ short buttons;
+} SWIFT_3DStatus;
+
+// DPMI real mode interrupt structure
+static struct rminfo
+{
+ long EDI;
+ long ESI;
+ long EBP;
+ long reserved_by_system;
+ long EBX;
+ long EDX;
+ long ECX;
+ long EAX;
+ short flags;
+ short ES, DS, FS, GS, IP, CS, SP, SS;
+} RMI;
+
+typedef struct
+{
+ unsigned char deviceType;
+ unsigned char majorVersion;
+ unsigned char minorVersion;
+ unsigned char absRelFlags;
+ unsigned char centeringFlags;
+ unsigned char reserved[5];
+} StaticDeviceData;
+
+// values for deviceType:
+#define DEVTYPE_CYBERMAN 1
+
+short selector;
+unsigned short segment; // segment of DOS memory block
+SWIFT_3DStatus *cyberstat;
+int isCyberPresent; // is CyberMan present?
+
+
+static union REGS regs;
+static struct SREGS sregs;
+
+
+extern int mousepresent;
+
+//===========================================================
+//
+// I_StartupCyberMan
+//
+// If a cyberman is present, init it and set isCyberPresent to 1
+//===========================================================
+void I_StartupCyberMan(void)
+{
+ StaticDeviceData *pbuf;
+ int success = 0;
+
+ isCyberPresent = 0;
+
+ cyberstat = (SWIFT_3DStatus *) I_AllocLow(DOSMEMSIZE);
+ segment = (int) cyberstat >> 4;
+
+ pbuf = (StaticDeviceData *) cyberstat;
+ memset(pbuf, 0, sizeof(StaticDeviceData));
+
+ // Use DPMI call 300h to issue mouse interrupt
+ memset(&RMI, 0, sizeof(RMI));
+ RMI.EAX = 0x53C1; // SWIFT: Get Static Device Data
+ RMI.ES = segment;
+ RMI.EDX = 0;
+ memset(&sregs, 0, sizeof(sregs));
+ regs.w.ax = 0x0300; // DPMI: simulate interrupt
+ regs.w.bx = MOUSE_INT;
+ regs.w.cx = 0;
+ regs.x.edi = FP_OFF(&RMI);
+ sregs.es = FP_SEG(&RMI);
+ int386x(DPMI_INT, ®s, ®s, &sregs);
+
+ if ((short) RMI.EAX != 1)
+ {
+ // SWIFT functions not present
+ tprintf
+ ("CyberMan: Wrong mouse driver - no SWIFT support (AX=%04x).\n",
+ (unsigned) (short) RMI.EAX);
+ }
+ else if (pbuf->deviceType != DEVTYPE_CYBERMAN)
+ {
+ // no SWIFT device, or not CyberMan
+ if (pbuf->deviceType == 0)
+ {
+ tprintf("CyberMan: no SWIFT device connected.\n");
+ }
+ else
+ {
+ tprintf("CyberMan: SWIFT device is not a CyberMan! (type=%d)\n",
+ pbuf->deviceType);
+ }
+ }
+ else
+ {
+ tprintf("CyberMan: CyberMan %d.%02d connected.\n",
+ pbuf->majorVersion, pbuf->minorVersion);
+ isCyberPresent = 1;
+ mousepresent = 0;
+ }
+}
+
+
+
+/*
+===============
+=
+= I_ReadCyberCmds
+=
+===============
+*/
+
+
+int oldpos;
+
+void I_ReadCyberCmd(ticcmd_t * cmd)
+{
+ int delta;
+
+ // Use DPMI call 300h to issue mouse interrupt
+ memset(&RMI, 0, sizeof(RMI));
+ RMI.EAX = 0x5301; // SWIFT: Get Position and Buttons
+ RMI.ES = segment;
+ RMI.EDX = 0;
+ memset(&sregs, 0, sizeof(sregs));
+ regs.w.ax = 0x0300; // DPMI: simulate interrupt
+ regs.w.bx = MOUSE_INT;
+ regs.w.cx = 0;
+ regs.x.edi = FP_OFF(&RMI);
+ sregs.es = FP_SEG(&RMI);
+ int386x(DPMI_INT, ®s, ®s, &sregs);
+
+ if (cyberstat->y < -7900)
+ cmd->forwardmove = 0xc800 / 2048;
+ else if (cyberstat->y > 7900)
+ cmd->forwardmove = -0xc800 / 2048;
+
+ if (cyberstat->buttons & 4)
+ cmd->buttons |= BT_ATTACK;
+ if (cyberstat->buttons & 2)
+ cmd->buttons |= BT_USE;
+
+ delta = cyberstat->x - oldpos;
+ oldpos = cyberstat->x;
+
+ if (cyberstat->buttons & 1)
+ { // strafe
+ if (cyberstat->x < -7900)
+ cmd->sidemove = -0xc800 / 2048;
+ else if (cyberstat->x > 7900)
+ cmd->sidemove = 0xc800 / 2048;
+ else
+ cmd->sidemove = delta * 40 / 2048;
+ }
+ else
+ {
+ if (cyberstat->x < -7900)
+ cmd->angleturn = 0x280;
+ else if (cyberstat->x > 7900)
+ cmd->angleturn = -0x280;
+ else
+ cmd->angleturn = -delta * 0xa / 16;
+
+ }
+
+}
+
+
+void I_Tactile(int on, int off, int total)
+{
+ if (!isCyberPresent)
+ return;
+
+ on /= 5;
+ off /= 5;
+ total /= 40;
+ if (on > 255)
+ on = 255;
+ if (off > 255)
+ off = 255;
+ if (total > 255)
+ total = 255;
+
+ memset(&RMI, 0, sizeof(RMI));
+ RMI.EAX = 0x5330; // SWIFT: Get Position and Buttons
+ RMI.EBX = on * 256 + off;
+ RMI.ECX = total;
+ memset(&sregs, 0, sizeof(sregs));
+ regs.w.ax = 0x0300; // DPMI: simulate interrupt
+ regs.w.bx = MOUSE_INT;
+ regs.w.cx = 0;
+ regs.x.edi = FP_OFF(&RMI);
+ sregs.es = FP_SEG(&RMI);
+ int386x(DPMI_INT, ®s, ®s, &sregs);
+}
--- a/src/heretic/i_header.h
+++ b/src/heretic/i_header.h
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
#ifndef __I_HEADER_H__
#define __I_HEADER_H__
@@ -48,7 +70,7 @@
// SFX I/O
//
-void *I_GetSoundEffect (char *soundname);
+void *I_GetSoundEffect(char *soundname);
// called by routines which wish to play a sound effect at some later
// time. Pass it the lump name of a sound effect WITHOUT the sfx
// prefix. This means the maximum name length is 7 letters/digits.
@@ -56,21 +78,21 @@
// They refer to the card type. The routine will cache in the
// appropriate sound effect when it is played.
-void I_UngetSoundEffect (void *soundset);
+void I_UngetSoundEffect(void *soundset);
// called by routines which wish to no longer use the sounds at all
// frees up the associated structure. It stops any currently playing
// sound effects.
-void I_StartSound (channel_t *c, int vol, int sep, int pitch, int priority);
+void I_StartSound(channel_t * c, int vol, int sep, int pitch, int priority);
// Starts a sound in a particular sound channel
-void I_UpdateSoundParams(channel_t *c, int vol, int sep, int pitch);
+void I_UpdateSoundParams(channel_t * c, int vol, int sep, int pitch);
// Updates the volume, separation, and pitch of a sound channel
-void I_StopSound(channel_t *c);
+void I_StopSound(channel_t * c);
// Stops a sound channel
-int I_SoundIsPlaying(channel_t *c);
+int I_SoundIsPlaying(channel_t * c);
// called by S_*()'s to see if a channel is still playing. Returns 0
// if no longer playing, 1 if playing.
--- a/src/heretic/i_ibm.c
+++ b/src/heretic/i_ibm.c
@@ -1,2204 +1,2246 @@
-
-// I_IBM.C
-
-#include <dos.h>
-#include <conio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <graph.h>
-#include "DoomDef.h"
-#include "R_local.h"
-#include "sounds.h"
-#include "i_sound.h"
-#include "dmx.h"
-
-// Macros
-
-#define DPMI_INT 0x31
-//#define NOKBD
-//#define NOTIMER
-
-// Public Data
-
-int DisplayTicker = 0;
-
-// Code
-
-void main(int argc, char **argv)
-{
- myargc = argc;
- myargv = argv;
- D_DoomMain();
-}
-
-void I_StartupNet (void);
-void I_ShutdownNet (void);
-void I_ReadExternDriver(void);
-
-typedef struct
-{
- unsigned edi, esi, ebp, reserved, ebx, edx, ecx, eax;
- unsigned short flags, es, ds, fs, gs, ip, cs, sp, ss;
-} dpmiregs_t;
-
-extern dpmiregs_t dpmiregs;
-
-void I_ReadMouse (void);
-void I_InitDiskFlash (void);
-
-extern int usemouse, usejoystick;
-
-extern void **lumpcache;
-
-/*
-===============================================================================
-
- MUSIC & SFX API
-
-===============================================================================
-*/
-
-static channel_t channel[MAX_CHANNELS];
-
-static int rs; //the current registered song.
-int mus_song = -1;
-int mus_lumpnum;
-void *mus_sndptr;
-byte *soundCurve;
-
-extern sfxinfo_t S_sfx[];
-extern musicinfo_t S_music[];
-
-extern int snd_DesiredMusicDevice;
-extern int snd_DesiredSfxDevice;
-extern int snd_MaxVolume;
-extern int snd_MusicVolume;
-extern int snd_Channels;
-
-extern int startepisode;
-extern int startmap;
-
-int AmbChan;
-
-void S_Start(void)
-{
- int i;
-
- S_StartSong((gameepisode-1)*9 + gamemap-1, true);
-
- //stop all sounds
- for(i=0; i < snd_Channels; i++)
- {
- if(channel[i].handle)
- {
- S_StopSound(channel[i].mo);
- }
- }
- memset(channel, 0, 8*sizeof(channel_t));
-}
-
-void S_StartSong(int song, boolean loop)
-{
- if(song == mus_song)
- { // don't replay an old song
- return;
- }
- if(rs)
- {
- I_StopSong(rs);
- I_UnRegisterSong(rs);
- Z_ChangeTag(lumpcache[mus_lumpnum], PU_CACHE);
- #ifdef __WATCOMC__
- _dpmi_unlockregion(mus_sndptr, lumpinfo[mus_lumpnum].size);
- #endif
- }
- if(song < mus_e1m1 || song > NUMMUSIC)
- {
- return;
- }
- mus_lumpnum = W_GetNumForName(S_music[song].name);
- mus_sndptr = W_CacheLumpNum(mus_lumpnum, PU_MUSIC);
- #ifdef __WATCOMC__
- _dpmi_lockregion(mus_sndptr, lumpinfo[mus_lumpnum].size);
- #endif
- rs = I_RegisterSong(mus_sndptr);
- I_PlaySong(rs, loop); //'true' denotes endless looping.
- mus_song = song;
-}
-
-void S_StartSound(mobj_t *origin, int sound_id)
-{
- int dist, vol;
- int i;
- int sound;
- int priority;
- int sep;
- int angle;
- int absx;
- int absy;
-
- static int sndcount = 0;
- int chan;
-
- if(sound_id==0 || snd_MaxVolume == 0)
- return;
- if(origin == NULL)
- {
- origin = players[consoleplayer].mo;
- }
-
-// calculate the distance before other stuff so that we can throw out
-// sounds that are beyond the hearing range.
- absx = abs(origin->x-players[consoleplayer].mo->x);
- absy = abs(origin->y-players[consoleplayer].mo->y);
- dist = absx+absy-(absx > absy ? absy>>1 : absx>>1);
- dist >>= FRACBITS;
-// dist = P_AproxDistance(origin->x-viewx, origin->y-viewy)>>FRACBITS;
-
- if(dist >= MAX_SND_DIST)
- {
-// dist = MAX_SND_DIST - 1;
- return; //sound is beyond the hearing range...
- }
- if(dist < 0)
- {
- dist = 0;
- }
- priority = S_sfx[sound_id].priority;
- priority *= (10 - (dist/160));
- if(!S_StopSoundID(sound_id, priority))
- {
- return; // other sounds have greater priority
- }
- for(i=0; i<snd_Channels; i++)
- {
- if(origin->player)
- {
- i = snd_Channels;
- break; // let the player have more than one sound.
- }
- if(origin == channel[i].mo)
- { // only allow other mobjs one sound
- S_StopSound(channel[i].mo);
- break;
- }
- }
- if(i >= snd_Channels)
- {
- if(sound_id >= sfx_wind)
- {
- if(AmbChan != -1 && S_sfx[sound_id].priority <=
- S_sfx[channel[AmbChan].sound_id].priority)
- {
- return; //ambient channel already in use
- }
- else
- {
- AmbChan = -1;
- }
- }
- for(i=0; i<snd_Channels; i++)
- {
- if(channel[i].mo == NULL)
- {
- break;
- }
- }
- if(i >= snd_Channels)
- {
- //look for a lower priority sound to replace.
- sndcount++;
- if(sndcount >= snd_Channels)
- {
- sndcount = 0;
- }
- for(chan=0; chan < snd_Channels; chan++)
- {
- i = (sndcount+chan)%snd_Channels;
- if(priority >= channel[i].priority)
- {
- chan = -1; //denote that sound should be replaced.
- break;
- }
- }
- if(chan != -1)
- {
- return; //no free channels.
- }
- else //replace the lower priority sound.
- {
- if(channel[i].handle)
- {
- if(I_SoundIsPlaying(channel[i].handle))
- {
- I_StopSound(channel[i].handle);
- }
- if(S_sfx[channel[i].sound_id].usefulness > 0)
- {
- S_sfx[channel[i].sound_id].usefulness--;
- }
-
- if(AmbChan == i)
- {
- AmbChan = -1;
- }
- }
- }
- }
- }
- if(S_sfx[sound_id].lumpnum == 0)
- {
- S_sfx[sound_id].lumpnum = I_GetSfxLumpNum(&S_sfx[sound_id]);
- }
- if(S_sfx[sound_id].snd_ptr == NULL)
- {
- S_sfx[sound_id].snd_ptr = W_CacheLumpNum(S_sfx[sound_id].lumpnum,
- PU_SOUND);
- #ifdef __WATCOMC__
- _dpmi_lockregion(S_sfx[sound_id].snd_ptr,
- lumpinfo[S_sfx[sound_id].lumpnum].size);
- #endif
- }
-
- // calculate the volume based upon the distance from the sound origin.
-// vol = (snd_MaxVolume*16 + dist*(-snd_MaxVolume*16)/MAX_SND_DIST)>>9;
- vol = soundCurve[dist];
-
- if(origin == players[consoleplayer].mo)
- {
- sep = 128;
- }
- else
- {
- angle = R_PointToAngle2(players[consoleplayer].mo->x,
- players[consoleplayer].mo->y, channel[i].mo->x, channel[i].mo->y);
- angle = (angle-viewangle)>>24;
- sep = angle*2-128;
- if(sep < 64)
- sep = -sep;
- if(sep > 192)
- sep = 512-sep;
- }
-
- channel[i].pitch = (byte)(127+(M_Random()&7)-(M_Random()&7));
- channel[i].handle = I_StartSound(sound_id, S_sfx[sound_id].snd_ptr, vol, sep, channel[i].pitch, 0);
- channel[i].mo = origin;
- channel[i].sound_id = sound_id;
- channel[i].priority = priority;
- if(sound_id >= sfx_wind)
- {
- AmbChan = i;
- }
- if(S_sfx[sound_id].usefulness == -1)
- {
- S_sfx[sound_id].usefulness = 1;
- }
- else
- {
- S_sfx[sound_id].usefulness++;
- }
-}
-
-void S_StartSoundAtVolume(mobj_t *origin, int sound_id, int volume)
-{
- int dist;
- int i;
- int sep;
-
- static int sndcount;
- int chan;
-
- if(sound_id == 0 || snd_MaxVolume == 0)
- return;
- if(origin == NULL)
- {
- origin = players[consoleplayer].mo;
- }
-
- if(volume == 0)
- {
- return;
- }
- volume = (volume*(snd_MaxVolume+1)*8)>>7;
-
-// no priority checking, as ambient sounds would be the LOWEST.
- for(i=0; i<snd_Channels; i++)
- {
- if(channel[i].mo == NULL)
- {
- break;
- }
- }
- if(i >= snd_Channels)
- {
- return;
- }
- if(S_sfx[sound_id].lumpnum == 0)
- {
- S_sfx[sound_id].lumpnum = I_GetSfxLumpNum(&S_sfx[sound_id]);
- }
- if(S_sfx[sound_id].snd_ptr == NULL)
- {
- S_sfx[sound_id].snd_ptr = W_CacheLumpNum(S_sfx[sound_id].lumpnum,
- PU_SOUND);
- #ifdef __WATCOMC__
- _dpmi_lockregion(S_sfx[sound_id].snd_ptr,
- lumpinfo[S_sfx[sound_id].lumpnum].size);
- #endif
- }
- channel[i].pitch = (byte)(127-(M_Random()&3)+(M_Random()&3));
- channel[i].handle = I_StartSound(sound_id, S_sfx[sound_id].snd_ptr, volume, 128, channel[i].pitch, 0);
- channel[i].mo = origin;
- channel[i].sound_id = sound_id;
- channel[i].priority = 1; //super low priority.
- if(S_sfx[sound_id].usefulness == -1)
- {
- S_sfx[sound_id].usefulness = 1;
- }
- else
- {
- S_sfx[sound_id].usefulness++;
- }
-}
-
-boolean S_StopSoundID(int sound_id, int priority)
-{
- int i;
- int lp; //least priority
- int found;
-
- if(S_sfx[sound_id].numchannels == -1)
- {
- return(true);
- }
- lp = -1; //denote the argument sound_id
- found = 0;
- for(i=0; i<snd_Channels; i++)
- {
- if(channel[i].sound_id == sound_id && channel[i].mo)
- {
- found++; //found one. Now, should we replace it??
- if(priority >= channel[i].priority)
- { // if we're gonna kill one, then this'll be it
- lp = i;
- priority = channel[i].priority;
- }
- }
- }
- if(found < S_sfx[sound_id].numchannels)
- {
- return(true);
- }
- else if(lp == -1)
- {
- return(false); // don't replace any sounds
- }
- if(channel[lp].handle)
- {
- if(I_SoundIsPlaying(channel[lp].handle))
- {
- I_StopSound(channel[lp].handle);
- }
- if(S_sfx[channel[i].sound_id].usefulness > 0)
- {
- S_sfx[channel[i].sound_id].usefulness--;
- }
- channel[lp].mo = NULL;
- }
- return(true);
-}
-
-void S_StopSound(mobj_t *origin)
-{
- int i;
-
- for(i=0;i<snd_Channels;i++)
- {
- if(channel[i].mo == origin)
- {
- I_StopSound(channel[i].handle);
- if(S_sfx[channel[i].sound_id].usefulness > 0)
- {
- S_sfx[channel[i].sound_id].usefulness--;
- }
- channel[i].handle = 0;
- channel[i].mo = NULL;
- if(AmbChan == i)
- {
- AmbChan = -1;
- }
- }
- }
-}
-
-void S_SoundLink(mobj_t *oldactor, mobj_t *newactor)
-{
- int i;
-
- for(i=0;i<snd_Channels;i++)
- {
- if(channel[i].mo == oldactor)
- channel[i].mo = newactor;
- }
-}
-
-void S_PauseSound(void)
-{
- I_PauseSong(rs);
-}
-
-void S_ResumeSound(void)
-{
- I_ResumeSong(rs);
-}
-
-static int nextcleanup;
-
-void S_UpdateSounds(mobj_t *listener)
-{
- int i, dist, vol;
- int angle;
- int sep;
- int priority;
- int absx;
- int absy;
-
- listener = players[consoleplayer].mo;
- if(snd_MaxVolume == 0)
- {
- return;
- }
- if(nextcleanup < gametic)
- {
- for(i=0; i < NUMSFX; i++)
- {
- if(S_sfx[i].usefulness == 0 && S_sfx[i].snd_ptr)
- {
- if(lumpcache[S_sfx[i].lumpnum])
- {
- if(((memblock_t *)((byte *)(lumpcache[S_sfx[i].lumpnum])-
- sizeof(memblock_t)))->id == 0x1d4a11)
- { // taken directly from the Z_ChangeTag macro
- Z_ChangeTag2(lumpcache[S_sfx[i].lumpnum], PU_CACHE);
- #ifdef __WATCOMC__
- _dpmi_unlockregion(S_sfx[i].snd_ptr, lumpinfo[S_sfx[i].lumpnum].size);
- #endif
- }
- }
- S_sfx[i].usefulness = -1;
- S_sfx[i].snd_ptr = NULL;
- }
- }
- nextcleanup = gametic+35; //CLEANUP DEBUG cleans every second
- }
- for(i=0;i<snd_Channels;i++)
- {
- if(!channel[i].handle || S_sfx[channel[i].sound_id].usefulness == -1)
- {
- continue;
- }
- if(!I_SoundIsPlaying(channel[i].handle))
- {
- if(S_sfx[channel[i].sound_id].usefulness > 0)
- {
- S_sfx[channel[i].sound_id].usefulness--;
- }
- channel[i].handle = 0;
- channel[i].mo = NULL;
- channel[i].sound_id = 0;
- if(AmbChan == i)
- {
- AmbChan = -1;
- }
- }
- if(channel[i].mo == NULL || channel[i].sound_id == 0
- || channel[i].mo == players[consoleplayer].mo)
- {
- continue;
- }
- else
- {
- absx = abs(channel[i].mo->x-players[consoleplayer].mo->x);
- absy = abs(channel[i].mo->y-players[consoleplayer].mo->y);
- dist = absx+absy-(absx > absy ? absy>>1 : absx>>1);
- dist >>= FRACBITS;
-// dist = P_AproxDistance(channel[i].mo->x-listener->x, channel[i].mo->y-listener->y)>>FRACBITS;
-
- if(dist >= MAX_SND_DIST)
- {
- S_StopSound(channel[i].mo);
- continue;
- }
- if(dist < 0)
- dist = 0;
-
-// calculate the volume based upon the distance from the sound origin.
-// vol = (*((byte *)W_CacheLumpName("SNDCURVE", PU_CACHE)+dist)*(snd_MaxVolume*8))>>7;
- vol = soundCurve[dist];
-
- angle = R_PointToAngle2(players[consoleplayer].mo->x,
- players[consoleplayer].mo->y, channel[i].mo->x, channel[i].mo->y);
- angle = (angle-viewangle)>>24;
- sep = angle*2-128;
- if(sep < 64)
- sep = -sep;
- if(sep > 192)
- sep = 512-sep;
- I_UpdateSoundParams(channel[i].handle, vol, sep, channel[i].pitch);
- priority = S_sfx[channel[i].sound_id].priority;
- priority *= (10 - (dist>>8));
- channel[i].priority = priority;
- }
- }
-}
-
-void S_Init(void)
-{
- soundCurve = Z_Malloc(MAX_SND_DIST, PU_STATIC, NULL);
- I_StartupSound();
- if(snd_Channels > 8)
- {
- snd_Channels = 8;
- }
- I_SetChannels(snd_Channels);
- I_SetMusicVolume(snd_MusicVolume);
- S_SetMaxVolume(true);
-}
-
-void S_GetChannelInfo(SoundInfo_t *s)
-{
- int i;
- ChanInfo_t *c;
-
- s->channelCount = snd_Channels;
- s->musicVolume = snd_MusicVolume;
- s->soundVolume = snd_MaxVolume;
- for(i = 0; i < snd_Channels; i++)
- {
- c = &s->chan[i];
- c->id = channel[i].sound_id;
- c->priority = channel[i].priority;
- c->name = S_sfx[c->id].name;
- c->mo = channel[i].mo;
- c->distance = P_AproxDistance(c->mo->x-viewx, c->mo->y-viewy)
- >>FRACBITS;
- }
-}
-
-void S_SetMaxVolume(boolean fullprocess)
-{
- int i;
-
- if(!fullprocess)
- {
- soundCurve[0] = (*((byte *)W_CacheLumpName("SNDCURVE", PU_CACHE))*(snd_MaxVolume*8))>>7;
- }
- else
- {
- for(i = 0; i < MAX_SND_DIST; i++)
- {
- soundCurve[i] = (*((byte *)W_CacheLumpName("SNDCURVE", PU_CACHE)+i)*(snd_MaxVolume*8))>>7;
- }
- }
-}
-
-static boolean musicPaused;
-void S_SetMusicVolume(void)
-{
- I_SetMusicVolume(snd_MusicVolume);
- if(snd_MusicVolume == 0)
- {
- I_PauseSong(rs);
- musicPaused = true;
- }
- else if(musicPaused)
- {
- musicPaused = false;
- I_ResumeSong(rs);
- }
-}
-
-void S_ShutDown(void)
-{
- extern int tsm_ID;
- if(tsm_ID != -1)
- {
- I_StopSong(rs);
- I_UnRegisterSong(rs);
- I_ShutdownSound();
- }
-}
-
-/*
-=============================================================================
-
- CONSTANTS
-
-=============================================================================
-*/
-
-#define SC_INDEX 0x3C4
-#define SC_RESET 0
-#define SC_CLOCK 1
-#define SC_MAPMASK 2
-#define SC_CHARMAP 3
-#define SC_MEMMODE 4
-
-#define CRTC_INDEX 0x3D4
-#define CRTC_H_TOTAL 0
-#define CRTC_H_DISPEND 1
-#define CRTC_H_BLANK 2
-#define CRTC_H_ENDBLANK 3
-#define CRTC_H_RETRACE 4
-#define CRTC_H_ENDRETRACE 5
-#define CRTC_V_TOTAL 6
-#define CRTC_OVERFLOW 7
-#define CRTC_ROWSCAN 8
-#define CRTC_MAXSCANLINE 9
-#define CRTC_CURSORSTART 10
-#define CRTC_CURSOREND 11
-#define CRTC_STARTHIGH 12
-#define CRTC_STARTLOW 13
-#define CRTC_CURSORHIGH 14
-#define CRTC_CURSORLOW 15
-#define CRTC_V_RETRACE 16
-#define CRTC_V_ENDRETRACE 17
-#define CRTC_V_DISPEND 18
-#define CRTC_OFFSET 19
-#define CRTC_UNDERLINE 20
-#define CRTC_V_BLANK 21
-#define CRTC_V_ENDBLANK 22
-#define CRTC_MODE 23
-#define CRTC_LINECOMPARE 24
-
-
-#define GC_INDEX 0x3CE
-#define GC_SETRESET 0
-#define GC_ENABLESETRESET 1
-#define GC_COLORCOMPARE 2
-#define GC_DATAROTATE 3
-#define GC_READMAP 4
-#define GC_MODE 5
-#define GC_MISCELLANEOUS 6
-#define GC_COLORDONTCARE 7
-#define GC_BITMASK 8
-
-#define ATR_INDEX 0x3c0
-#define ATR_MODE 16
-#define ATR_OVERSCAN 17
-#define ATR_COLORPLANEENABLE 18
-#define ATR_PELPAN 19
-#define ATR_COLORSELECT 20
-
-#define STATUS_REGISTER_1 0x3da
-
-#define PEL_WRITE_ADR 0x3c8
-#define PEL_READ_ADR 0x3c7
-#define PEL_DATA 0x3c9
-#define PEL_MASK 0x3c6
-
-boolean grmode;
-
-//==================================================
-//
-// joystick vars
-//
-//==================================================
-
-boolean joystickpresent;
-extern unsigned joystickx, joysticky;
-boolean I_ReadJoystick (void); // returns false if not connected
-
-
-//==================================================
-
-#define VBLCOUNTER 34000 // hardware tics to a frame
-
-
-#define TIMERINT 8
-#define KEYBOARDINT 9
-
-#define CRTCOFF (_inbyte(STATUS_REGISTER_1)&1)
-#define CLI _disable()
-#define STI _enable()
-
-#define _outbyte(x,y) (outp(x,y))
-#define _outhword(x,y) (outpw(x,y))
-
-#define _inbyte(x) (inp(x))
-#define _inhword(x) (inpw(x))
-
-#define MOUSEB1 1
-#define MOUSEB2 2
-#define MOUSEB3 4
-
-boolean mousepresent;
-//static int tsm_ID = -1; // tsm init flag
-
-//===============================
-
-int ticcount;
-
-// REGS stuff used for int calls
-union REGS regs;
-struct SREGS segregs;
-
-boolean novideo; // if true, stay in text mode for debugging
-
-#define KBDQUESIZE 32
-byte keyboardque[KBDQUESIZE];
-int kbdtail, kbdhead;
-
-#define KEY_LSHIFT 0xfe
-
-#define KEY_INS (0x80+0x52)
-#define KEY_DEL (0x80+0x53)
-#define KEY_PGUP (0x80+0x49)
-#define KEY_PGDN (0x80+0x51)
-#define KEY_HOME (0x80+0x47)
-#define KEY_END (0x80+0x4f)
-
-#define SC_RSHIFT 0x36
-#define SC_LSHIFT 0x2a
-
-byte scantokey[128] =
- {
-// 0 1 2 3 4 5 6 7
-// 8 9 A B C D E F
- 0 , 27, '1', '2', '3', '4', '5', '6',
- '7', '8', '9', '0', '-', '=', KEY_BACKSPACE, 9, // 0
- 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
- 'o', 'p', '[', ']', 13 , KEY_RCTRL,'a', 's', // 1
- 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
- 39 , '`', KEY_LSHIFT,92, 'z', 'x', 'c', 'v', // 2
- 'b', 'n', 'm', ',', '.', '/', KEY_RSHIFT,'*',
- KEY_RALT,' ', 0 , KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, // 3
- KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10,0 , 0 , KEY_HOME,
- KEY_UPARROW,KEY_PGUP,'-',KEY_LEFTARROW,'5',KEY_RIGHTARROW,'+',KEY_END, //4
- KEY_DOWNARROW,KEY_PGDN,KEY_INS,KEY_DEL,0,0, 0, KEY_F11,
- KEY_F12,0 , 0 , 0 , 0 , 0 , 0 , 0, // 5
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0, // 6
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 // 7
- };
-
-//==========================================================================
-
-//--------------------------------------------------------------------------
-//
-// FUNC I_GetTime
-//
-// Returns time in 1/35th second tics.
-//
-//--------------------------------------------------------------------------
-
-int I_GetTime (void)
-{
-#ifdef NOTIMER
- ticcount++;
-#endif
- return(ticcount);
-}
-
-//--------------------------------------------------------------------------
-//
-// PROC I_ColorBorder
-//
-//--------------------------------------------------------------------------
-
-void I_ColorBorder(void)
-{
- int i;
-
- I_WaitVBL(1);
- _outbyte(PEL_WRITE_ADR, 0);
- for(i = 0; i < 3; i++)
- {
- _outbyte(PEL_DATA, 63);
- }
-}
-
-//--------------------------------------------------------------------------
-//
-// PROC I_UnColorBorder
-//
-//--------------------------------------------------------------------------
-
-void I_UnColorBorder(void)
-{
- int i;
-
- I_WaitVBL(1);
- _outbyte(PEL_WRITE_ADR, 0);
- for(i = 0; i < 3; i++)
- {
- _outbyte(PEL_DATA, 0);
- }
-}
-
-/*
-============================================================================
-
- USER INPUT
-
-============================================================================
-*/
-
-//--------------------------------------------------------------------------
-//
-// PROC I_WaitVBL
-//
-//--------------------------------------------------------------------------
-
-void I_WaitVBL(int vbls)
-{
- int i;
- int old;
- int stat;
-
- if(novideo)
- {
- return;
- }
- while(vbls--)
- {
- do
- {
- stat = inp(STATUS_REGISTER_1);
- if(stat&8)
- {
- break;
- }
- } while(1);
- do
- {
- stat = inp(STATUS_REGISTER_1);
- if((stat&8) == 0)
- {
- break;
- }
- } while(1);
- }
-}
-
-//--------------------------------------------------------------------------
-//
-// PROC I_SetPalette
-//
-// Palette source must use 8 bit RGB elements.
-//
-//--------------------------------------------------------------------------
-
-void I_SetPalette(byte *palette)
-{
- int i;
-
- if(novideo)
- {
- return;
- }
- I_WaitVBL(1);
- _outbyte(PEL_WRITE_ADR, 0);
- for(i = 0; i < 768; i++)
- {
- _outbyte(PEL_DATA, (gammatable[usegamma][*palette++])>>2);
- }
-}
-
-/*
-============================================================================
-
- GRAPHICS MODE
-
-============================================================================
-*/
-
-byte *pcscreen, *destscreen, *destview;
-
-
-/*
-==============
-=
-= I_Update
-=
-==============
-*/
-
-int UpdateState;
-extern int screenblocks;
-
-void I_Update (void)
-{
- int i;
- byte *dest;
- int tics;
- static int lasttic;
-
-//
-// blit screen to video
-//
- if(DisplayTicker)
- {
- if(screenblocks > 9 || UpdateState&(I_FULLSCRN|I_MESSAGES))
- {
- dest = (byte *)screen;
- }
- else
- {
- dest = (byte *)pcscreen;
- }
- tics = ticcount-lasttic;
- lasttic = ticcount;
- if(tics > 20)
- {
- tics = 20;
- }
- for(i = 0; i < tics; i++)
- {
- *dest = 0xff;
- dest += 2;
- }
- for(i = tics; i < 20; i++)
- {
- *dest = 0x00;
- dest += 2;
- }
- }
- if(UpdateState == I_NOUPDATE)
- {
- return;
- }
- if(UpdateState&I_FULLSCRN)
- {
- memcpy(pcscreen, screen, SCREENWIDTH*SCREENHEIGHT);
- UpdateState = I_NOUPDATE; // clear out all draw types
- }
- if(UpdateState&I_FULLVIEW)
- {
- if(UpdateState&I_MESSAGES && screenblocks > 7)
- {
- for(i = 0; i <
- (viewwindowy+viewheight)*SCREENWIDTH; i += SCREENWIDTH)
- {
- memcpy(pcscreen+i, screen+i, SCREENWIDTH);
- }
- UpdateState &= ~(I_FULLVIEW|I_MESSAGES);
- }
- else
- {
- for(i = viewwindowy*SCREENWIDTH+viewwindowx; i <
- (viewwindowy+viewheight)*SCREENWIDTH; i += SCREENWIDTH)
- {
- memcpy(pcscreen+i, screen+i, viewwidth);
- }
- UpdateState &= ~I_FULLVIEW;
- }
- }
- if(UpdateState&I_STATBAR)
- {
- memcpy(pcscreen+SCREENWIDTH*(SCREENHEIGHT-SBARHEIGHT),
- screen+SCREENWIDTH*(SCREENHEIGHT-SBARHEIGHT),
- SCREENWIDTH*SBARHEIGHT);
- UpdateState &= ~I_STATBAR;
- }
- if(UpdateState&I_MESSAGES)
- {
- memcpy(pcscreen, screen, SCREENWIDTH*28);
- UpdateState &= ~I_MESSAGES;
- }
-
-// memcpy(pcscreen, screen, SCREENHEIGHT*SCREENWIDTH);
-}
-
-//--------------------------------------------------------------------------
-//
-// PROC I_InitGraphics
-//
-//--------------------------------------------------------------------------
-
-void I_InitGraphics(void)
-{
- if(novideo)
- {
- return;
- }
- grmode = true;
- regs.w.ax = 0x13;
- int386(0x10, (const union REGS *)®s, ®s);
- pcscreen = destscreen = (byte *)0xa0000;
- I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));
- I_InitDiskFlash();
-}
-
-//--------------------------------------------------------------------------
-//
-// PROC I_ShutdownGraphics
-//
-//--------------------------------------------------------------------------
-
-void I_ShutdownGraphics(void)
-{
-
- if(*(byte *)0x449 == 0x13) // don't reset mode if it didn't get set
- {
- regs.w.ax = 3;
- int386(0x10, ®s, ®s); // back to text mode
- }
-}
-
-//--------------------------------------------------------------------------
-//
-// PROC I_ReadScreen
-//
-// Reads the screen currently displayed into a linear buffer.
-//
-//--------------------------------------------------------------------------
-
-void I_ReadScreen(byte *scr)
-{
- memcpy(scr, screen, SCREENWIDTH*SCREENHEIGHT);
-}
-
-
-//===========================================================================
-
-/*
-===================
-=
-= I_StartTic
-=
-// called by D_DoomLoop
-// called before processing each tic in a frame
-// can call D_PostEvent
-// asyncronous interrupt functions should maintain private ques that are
-// read by the syncronous functions to be converted into events
-===================
-*/
-
-/*
- OLD STARTTIC STUFF
-
-void I_StartTic (void)
-{
- int k;
- event_t ev;
-
-
- I_ReadMouse ();
-
-//
-// keyboard events
-//
- while (kbdtail < kbdhead)
- {
- k = keyboardque[kbdtail&(KBDQUESIZE-1)];
-
-// if (k==14)
-// I_Error ("exited");
-
- kbdtail++;
-
- // extended keyboard shift key bullshit
- if ( (k&0x7f)==KEY_RSHIFT )
- {
- if ( keyboardque[(kbdtail-2)&(KBDQUESIZE-1)]==0xe0 )
- continue;
- k &= 0x80;
- k |= KEY_RSHIFT;
- }
-
- if (k==0xe0)
- continue; // special / pause keys
- if (keyboardque[(kbdtail-2)&(KBDQUESIZE-1)] == 0xe1)
- continue; // pause key bullshit
-
- if (k==0xc5 && keyboardque[(kbdtail-2)&(KBDQUESIZE-1)] == 0x9d)
- {
- ev.type = ev_keydown;
- ev.data1 = KEY_PAUSE;
- D_PostEvent (&ev);
- continue;
- }
-
- if (k&0x80)
- ev.type = ev_keyup;
- else
- ev.type = ev_keydown;
- k &= 0x7f;
-
- ev.data1 = k;
- //ev.data1 = scantokey[k];
-
- D_PostEvent (&ev);
- }
-}
-*/
-
-#define SC_UPARROW 0x48
-#define SC_DOWNARROW 0x50
-#define SC_LEFTARROW 0x4b
-#define SC_RIGHTARROW 0x4d
-
-void I_StartTic (void)
-{
- int k;
- event_t ev;
-
-
- I_ReadMouse ();
-
-//
-// keyboard events
-//
- while (kbdtail < kbdhead)
- {
- k = keyboardque[kbdtail&(KBDQUESIZE-1)];
- kbdtail++;
-
- // extended keyboard shift key bullshit
- if ( (k&0x7f)==SC_LSHIFT || (k&0x7f)==SC_RSHIFT )
- {
- if ( keyboardque[(kbdtail-2)&(KBDQUESIZE-1)]==0xe0 )
- continue;
- k &= 0x80;
- k |= SC_RSHIFT;
- }
-
- if (k==0xe0)
- continue; // special / pause keys
- if (keyboardque[(kbdtail-2)&(KBDQUESIZE-1)] == 0xe1)
- continue; // pause key bullshit
-
- if (k==0xc5 && keyboardque[(kbdtail-2)&(KBDQUESIZE-1)] == 0x9d)
- {
- ev.type = ev_keydown;
- ev.data1 = KEY_PAUSE;
- D_PostEvent (&ev);
- continue;
- }
-
- if (k&0x80)
- ev.type = ev_keyup;
- else
- ev.type = ev_keydown;
- k &= 0x7f;
- switch (k)
- {
- case SC_UPARROW:
- ev.data1 = KEY_UPARROW;
- break;
- case SC_DOWNARROW:
- ev.data1 = KEY_DOWNARROW;
- break;
- case SC_LEFTARROW:
- ev.data1 = KEY_LEFTARROW;
- break;
- case SC_RIGHTARROW:
- ev.data1 = KEY_RIGHTARROW;
- break;
- default:
- ev.data1 = scantokey[k];
- break;
- }
- D_PostEvent (&ev);
- }
-
-}
-
-
-void I_ReadKeys (void)
-{
- int k;
- event_t ev;
-
-
- while (1)
- {
- while (kbdtail < kbdhead)
- {
- k = keyboardque[kbdtail&(KBDQUESIZE-1)];
- kbdtail++;
- printf ("0x%x\n",k);
- if (k == 1)
- I_Quit ();
- }
- }
-}
-
-/*
-===============
-=
-= I_StartFrame
-=
-===============
-*/
-
-void I_StartFrame (void)
-{
- I_JoystickEvents ();
- I_ReadExternDriver();
-}
-
-/*
-============================================================================
-
- TIMER INTERRUPT
-
-============================================================================
-*/
-
-void I_ColorBlack (int r, int g, int b)
-{
-_outbyte (PEL_WRITE_ADR,0);
-_outbyte(PEL_DATA,r);
-_outbyte(PEL_DATA,g);
-_outbyte(PEL_DATA,b);
-}
-
-
-/*
-================
-=
-= I_TimerISR
-=
-================
-*/
-
-int I_TimerISR (void)
-{
- ticcount++;
- return 0;
-}
-
-/*
-============================================================================
-
- KEYBOARD
-
-============================================================================
-*/
-
-void (__interrupt __far *oldkeyboardisr) () = NULL;
-
-int lastpress;
-
-/*
-================
-=
-= I_KeyboardISR
-=
-================
-*/
-
-void __interrupt I_KeyboardISR (void)
-{
-// Get the scan code
-
- keyboardque[kbdhead&(KBDQUESIZE-1)] = lastpress = _inbyte(0x60);
- kbdhead++;
-
-// acknowledge the interrupt
-
- _outbyte(0x20,0x20);
-}
-
-
-
-/*
-===============
-=
-= I_StartupKeyboard
-=
-===============
-*/
-
-void I_StartupKeyboard (void)
-{
-#ifndef NOKBD
- oldkeyboardisr = _dos_getvect(KEYBOARDINT);
- _dos_setvect (0x8000 | KEYBOARDINT, I_KeyboardISR);
-#endif
-
-//I_ReadKeys ();
-}
-
-
-void I_ShutdownKeyboard (void)
-{
- if (oldkeyboardisr)
- _dos_setvect (KEYBOARDINT, oldkeyboardisr);
- *(short *)0x41c = *(short *)0x41a; // clear bios key buffer
-}
-
-
-
-/*
-============================================================================
-
- MOUSE
-
-============================================================================
-*/
-
-
-int I_ResetMouse (void)
-{
- regs.w.ax = 0; // reset
- int386 (0x33, ®s, ®s);
- return regs.w.ax;
-}
-
-
-
-/*
-================
-=
-= StartupMouse
-=
-================
-*/
-
-void I_StartupCyberMan(void);
-
-void I_StartupMouse (void)
-{
- int (far *function)();
-
- //
- // General mouse detection
- //
- mousepresent = 0;
- if ( M_CheckParm ("-nomouse") || !usemouse )
- return;
-
- if (I_ResetMouse () != 0xffff)
- {
- tprintf ("Mouse: not present ",0);
- return;
- }
- tprintf ("Mouse: detected ",0);
-
- mousepresent = 1;
-
- I_StartupCyberMan();
-}
-
-
-/*
-================
-=
-= ShutdownMouse
-=
-================
-*/
-
-void I_ShutdownMouse (void)
-{
- if (!mousepresent)
- return;
-
- I_ResetMouse ();
-}
-
-
-/*
-================
-=
-= I_ReadMouse
-=
-================
-*/
-
-void I_ReadMouse (void)
-{
- event_t ev;
-
-//
-// mouse events
-//
- if (!mousepresent)
- return;
-
- ev.type = ev_mouse;
-
- memset (&dpmiregs,0,sizeof(dpmiregs));
- dpmiregs.eax = 3; // read buttons / position
- DPMIInt (0x33);
- ev.data1 = dpmiregs.ebx;
-
- dpmiregs.eax = 11; // read counters
- DPMIInt (0x33);
- ev.data2 = (short)dpmiregs.ecx;
- ev.data3 = -(short)dpmiregs.edx;
-
- D_PostEvent (&ev);
-}
-
-/*
-============================================================================
-
- JOYSTICK
-
-============================================================================
-*/
-
-int joyxl, joyxh, joyyl, joyyh;
-
-boolean WaitJoyButton (void)
-{
- int oldbuttons, buttons;
-
- oldbuttons = 0;
- do
- {
- I_WaitVBL (1);
- buttons = ((inp(0x201) >> 4)&1)^1;
- if (buttons != oldbuttons)
- {
- oldbuttons = buttons;
- continue;
- }
-
- if ( (lastpress& 0x7f) == 1 )
- {
- joystickpresent = false;
- return false;
- }
- } while ( !buttons);
-
- do
- {
- I_WaitVBL (1);
- buttons = ((inp(0x201) >> 4)&1)^1;
- if (buttons != oldbuttons)
- {
- oldbuttons = buttons;
- continue;
- }
-
- if ( (lastpress& 0x7f) == 1 )
- {
- joystickpresent = false;
- return false;
- }
- } while ( buttons);
-
- return true;
-}
-
-
-
-/*
-===============
-=
-= I_StartupJoystick
-=
-===============
-*/
-
-int basejoyx, basejoyy;
-
-void I_StartupJoystick (void)
-{
- int buttons;
- int count;
- int centerx, centery;
-
- joystickpresent = 0;
- if ( M_CheckParm ("-nojoy") || !usejoystick )
- return;
-
- if (!I_ReadJoystick ())
- {
- joystickpresent = false;
- tprintf ("joystick not found ",0);
- return;
- }
- printf("joystick found\n");
- joystickpresent = true;
-
- printf("CENTER the joystick and press button 1:");
- if (!WaitJoyButton ())
- return;
- I_ReadJoystick ();
- centerx = joystickx;
- centery = joysticky;
-
- printf("\nPush the joystick to the UPPER LEFT corner and press button 1:");
- if (!WaitJoyButton ())
- return;
- I_ReadJoystick ();
- joyxl = (centerx + joystickx)/2;
- joyyl = (centerx + joysticky)/2;
-
- printf("\nPush the joystick to the LOWER RIGHT corner and press button 1:");
- if (!WaitJoyButton ())
- return;
- I_ReadJoystick ();
- joyxh = (centerx + joystickx)/2;
- joyyh = (centery + joysticky)/2;
- printf("\n");
-}
-
-/*
-===============
-=
-= I_JoystickEvents
-=
-===============
-*/
-
-void I_JoystickEvents (void)
-{
- event_t ev;
-
-//
-// joystick events
-//
- if (!joystickpresent)
- return;
-
- I_ReadJoystick ();
- ev.type = ev_joystick;
- ev.data1 = ((inp(0x201) >> 4)&15)^15;
-
- if (joystickx < joyxl)
- ev.data2 = -1;
- else if (joystickx > joyxh)
- ev.data2 = 1;
- else
- ev.data2 = 0;
- if (joysticky < joyyl)
- ev.data3 = -1;
- else if (joysticky > joyyh)
- ev.data3 = 1;
- else
- ev.data3 = 0;
-
- D_PostEvent (&ev);
-}
-
-
-
-/*
-============================================================================
-
- DPMI STUFF
-
-============================================================================
-*/
-
-#define REALSTACKSIZE 1024
-
-dpmiregs_t dpmiregs;
-
-unsigned realstackseg;
-
-void I_DivException (void);
-int I_SetDivException (void);
-
-void DPMIFarCall (void)
-{
- segread (&segregs);
- regs.w.ax = 0x301;
- regs.w.bx = 0;
- regs.w.cx = 0;
- regs.x.edi = (unsigned)&dpmiregs;
- segregs.es = segregs.ds;
- int386x( DPMI_INT, ®s, ®s, &segregs );
-}
-
-
-void DPMIInt (int i)
-{
- dpmiregs.ss = realstackseg;
- dpmiregs.sp = REALSTACKSIZE-4;
-
- segread (&segregs);
- regs.w.ax = 0x300;
- regs.w.bx = i;
- regs.w.cx = 0;
- regs.x.edi = (unsigned)&dpmiregs;
- segregs.es = segregs.ds;
- int386x( DPMI_INT, ®s, ®s, &segregs );
-}
-
-
-/*
-==============
-=
-= I_StartupDPMI
-=
-==============
-*/
-
-void I_StartupDPMI (void)
-{
- extern char __begtext;
- extern char ___argc;
- int n,d;
-
-//
-// allocate a decent stack for real mode ISRs
-//
- realstackseg = (int)I_AllocLow (1024) >> 4;
-
-//
-// lock the entire program down
-//
-
-// _dpmi_lockregion (&__begtext, &___argc - &__begtext);
-
-
-//
-// catch divide by 0 exception
-//
-#if 0
- segread(&segregs);
- regs.w.ax = 0x0203; // DPMI set processor exception handler vector
- regs.w.bx = 0; // int 0
- regs.w.cx = segregs.cs;
- regs.x.edx = (int)&I_DivException;
- printf ("%x : %x\n",regs.w.cx, regs.x.edx);
- int386( DPMI_INT, ®s, ®s);
-#endif
-
-#if 0
- n = I_SetDivException ();
- printf ("return: %i\n",n);
- n = 100;
- d = 0;
- printf ("100 / 0 = %i\n",n/d);
-
-exit (1);
-#endif
-}
-
-
-
-/*
-============================================================================
-
- TIMER INTERRUPT
-
-============================================================================
-*/
-
-void (__interrupt __far *oldtimerisr) ();
-
-
-void IO_ColorBlack (int r, int g, int b)
-{
-_outbyte (PEL_WRITE_ADR,0);
-_outbyte(PEL_DATA,r);
-_outbyte(PEL_DATA,g);
-_outbyte(PEL_DATA,b);
-}
-
-
-/*
-================
-=
-= IO_TimerISR
-=
-================
-*/
-
-//void __interrupt IO_TimerISR (void)
-
-void __interrupt __far IO_TimerISR (void)
-{
- ticcount++;
- _outbyte(0x20,0x20); // Ack the interrupt
-}
-
-/*
-=====================
-=
-= IO_SetTimer0
-=
-= Sets system timer 0 to the specified speed
-=
-=====================
-*/
-
-void IO_SetTimer0(int speed)
-{
- if (speed > 0 && speed < 150)
- I_Error ("INT_SetTimer0: %i is a bad value",speed);
-
- _outbyte(0x43,0x36); // Change timer 0
- _outbyte(0x40,speed);
- _outbyte(0x40,speed >> 8);
-}
-
-
-
-/*
-===============
-=
-= IO_StartupTimer
-=
-===============
-*/
-
-void IO_StartupTimer (void)
-{
- oldtimerisr = _dos_getvect(TIMERINT);
-
- _dos_setvect (0x8000 | TIMERINT, IO_TimerISR);
- IO_SetTimer0 (VBLCOUNTER);
-}
-
-void IO_ShutdownTimer (void)
-{
- if (oldtimerisr)
- {
- IO_SetTimer0 (0); // back to 18.4 ips
- _dos_setvect (TIMERINT, oldtimerisr);
- }
-}
-
-//===========================================================================
-
-
-/*
-===============
-=
-= I_Init
-=
-= hook interrupts and set graphics mode
-=
-===============
-*/
-
-void I_Init (void)
-{
- extern void I_StartupTimer(void);
-
- novideo = M_CheckParm("novideo");
- tprintf("I_StartupDPMI",1);
- I_StartupDPMI();
- tprintf("I_StartupMouse ",1);
- I_StartupMouse();
-// tprintf("I_StartupJoystick ",1);
-// I_StartupJoystick();
-// tprintf("I_StartupKeyboard ",1);
-// I_StartupKeyboard();
- tprintf("S_Init... ",1);
- S_Init();
- //IO_StartupTimer();
- S_Start();
-}
-
-
-/*
-===============
-=
-= I_Shutdown
-=
-= return to default system state
-=
-===============
-*/
-
-void I_Shutdown (void)
-{
- I_ShutdownGraphics ();
- IO_ShutdownTimer ();
- S_ShutDown ();
- I_ShutdownMouse ();
- I_ShutdownKeyboard ();
-
- IO_SetTimer0 (0);
-}
-
-
-/*
-================
-=
-= I_Error
-=
-================
-*/
-
-void I_Error (char *error, ...)
-{
- union REGS regs;
-
- va_list argptr;
-
- D_QuitNetGame ();
- I_Shutdown ();
- va_start (argptr,error);
- regs.x.eax = 0x3;
- int386(0x10, ®s, ®s);
- vprintf (error,argptr);
- va_end (argptr);
- printf ("\n");
- exit (1);
-}
-
-//--------------------------------------------------------------------------
-//
-// I_Quit
-//
-// Shuts down net game, saves defaults, prints the exit text message,
-// goes to text mode, and exits.
-//
-//--------------------------------------------------------------------------
-
-void I_Quit(void)
-{
- byte *scr;
- char *lumpName;
- int r;
-
- D_QuitNetGame();
- M_SaveDefaults();
- scr = (byte *)W_CacheLumpName("ENDTEXT", PU_CACHE);
- I_Shutdown();
- memcpy((void *)0xb8000, scr, 80*25*2);
- regs.w.ax = 0x0200;
- regs.h.bh = 0;
- regs.h.dl = 0;
- regs.h.dh = 23;
- int386(0x10, (const union REGS *)®s, ®s); // Set text pos
- _settextposition(24, 1);
- exit(0);
-}
-
-/*
-===============
-=
-= I_ZoneBase
-=
-===============
-*/
-
-byte *I_ZoneBase (int *size)
-{
- int meminfo[32];
- int heap;
- int i;
- int block;
- byte *ptr;
-
- memset (meminfo,0,sizeof(meminfo));
- segread(&segregs);
- segregs.es = segregs.ds;
- regs.w.ax = 0x500; // get memory info
- regs.x.edi = (int)&meminfo;
- int386x( 0x31, ®s, ®s, &segregs );
-
- heap = meminfo[0];
- printf ("DPMI memory: 0x%x, ",heap);
-
- do
- {
- heap -= 0x10000; // leave 64k alone
- if (heap > 0x800000)
- heap = 0x800000;
- ptr = malloc (heap);
- } while (!ptr);
-
- printf ("0x%x allocated for zone\n", heap);
- if (heap < 0x180000)
- I_Error ("Insufficient DPMI memory!");
-#if 0
- regs.w.ax = 0x501; // allocate linear block
- regs.w.bx = heap>>16;
- regs.w.cx = heap&0xffff;
- int386( 0x31, ®s, ®s);
- if (regs.w.cflag)
- I_Error ("Couldn't allocate DPMI memory!");
-
- block = (regs.w.si << 16) + regs.w.di;
-#endif
-
- *size = heap;
- return ptr;
-}
-
-/*
-=============================================================================
-
- DISK ICON FLASHING
-
-=============================================================================
-*/
-
-void I_InitDiskFlash (void)
-{
-#if 0
- void *pic;
- byte *temp;
-
- pic = W_CacheLumpName ("STDISK",PU_CACHE);
- temp = destscreen;
- destscreen = (byte *)0xac000;
- V_DrawPatchDirect (SCREENWIDTH-16,SCREENHEIGHT-16,0,pic);
- destscreen = temp;
-#endif
-}
-
-// draw disk icon
-void I_BeginRead (void)
-{
-#if 0
- byte *src,*dest;
- int y;
-
- if (!grmode)
- return;
-
-// write through all planes
- outp (SC_INDEX,SC_MAPMASK);
- outp (SC_INDEX+1,15);
-// set write mode 1
- outp (GC_INDEX,GC_MODE);
- outp (GC_INDEX+1,inp(GC_INDEX+1)|1);
-
-// copy to backup
- src = currentscreen + 184*80 + 304/4;
- dest = (byte *)0xac000 + 184*80 + 288/4;
- for (y=0 ; y<16 ; y++)
- {
- dest[0] = src[0];
- dest[1] = src[1];
- dest[2] = src[2];
- dest[3] = src[3];
- src += 80;
- dest += 80;
- }
-
-// copy disk over
- dest = currentscreen + 184*80 + 304/4;
- src = (byte *)0xac000 + 184*80 + 304/4;
- for (y=0 ; y<16 ; y++)
- {
- dest[0] = src[0];
- dest[1] = src[1];
- dest[2] = src[2];
- dest[3] = src[3];
- src += 80;
- dest += 80;
- }
-
-
-// set write mode 0
- outp (GC_INDEX,GC_MODE);
- outp (GC_INDEX+1,inp(GC_INDEX+1)&~1);
-#endif
-}
-
-// erase disk icon
-void I_EndRead (void)
-{
-#if 0
- byte *src,*dest;
- int y;
-
- if (!grmode)
- return;
-
-// write through all planes
- outp (SC_INDEX,SC_MAPMASK);
- outp (SC_INDEX+1,15);
-// set write mode 1
- outp (GC_INDEX,GC_MODE);
- outp (GC_INDEX+1,inp(GC_INDEX+1)|1);
-
-
-// copy disk over
- dest = currentscreen + 184*80 + 304/4;
- src = (byte *)0xac000 + 184*80 + 288/4;
- for (y=0 ; y<16 ; y++)
- {
- dest[0] = src[0];
- dest[1] = src[1];
- dest[2] = src[2];
- dest[3] = src[3];
- src += 80;
- dest += 80;
- }
-
-// set write mode 0
- outp (GC_INDEX,GC_MODE);
- outp (GC_INDEX+1,inp(GC_INDEX+1)&~1);
-#endif
-}
-
-
-
-/*
-=============
-=
-= I_AllocLow
-=
-=============
-*/
-
-byte *I_AllocLow (int length)
-{
- byte *mem;
-
- // DPMI call 100h allocates DOS memory
- segread(&segregs);
- regs.w.ax = 0x0100; // DPMI allocate DOS memory
- regs.w.bx = (length+15) / 16;
- int386( DPMI_INT, ®s, ®s);
-// segment = regs.w.ax;
-// selector = regs.w.dx;
- if (regs.w.cflag != 0)
- I_Error ("I_AllocLow: DOS alloc of %i failed, %i free",
- length, regs.w.bx*16);
-
-
- mem = (void *) ((regs.x.eax & 0xFFFF) << 4);
-
- memset (mem,0,length);
- return mem;
-}
-
-/*
-============================================================================
-
- NETWORKING
-
-============================================================================
-*/
-
-/* // FUCKED LINES
-typedef struct
-{
- char priv[508];
-} doomdata_t;
-*/ // FUCKED LINES
-
-#define DOOMCOM_ID 0x12345678l
-
-/* // FUCKED LINES
-typedef struct
-{
- long id;
- short intnum; // DOOM executes an int to execute commands
-
-// communication between DOOM and the driver
- short command; // CMD_SEND or CMD_GET
- short remotenode; // dest for send, set by get (-1 = no packet)
- short datalength; // bytes in doomdata to be sent
-
-// info common to all nodes
- short numnodes; // console is allways node 0
- short ticdup; // 1 = no duplication, 2-5 = dup for slow nets
- short extratics; // 1 = send a backup tic in every packet
- short deathmatch; // 1 = deathmatch
- short savegame; // -1 = new game, 0-5 = load savegame
- short episode; // 1-3
- short map; // 1-9
- short skill; // 1-5
-
-// info specific to this node
- short consoleplayer;
- short numplayers;
- short angleoffset; // 1 = left, 0 = center, -1 = right
- short drone; // 1 = drone
-
-// packet data to be sent
- doomdata_t data;
-} doomcom_t;
-*/ // FUCKED LINES
-
-extern doomcom_t *doomcom;
-
-/*
-====================
-=
-= I_InitNetwork
-=
-====================
-*/
-
-void I_InitNetwork (void)
-{
- int i;
-
- i = M_CheckParm ("-net");
- if (!i)
- {
- //
- // single player game
- //
- doomcom = malloc (sizeof (*doomcom) );
- memset (doomcom, 0, sizeof(*doomcom) );
- netgame = false;
- doomcom->id = DOOMCOM_ID;
- doomcom->numplayers = doomcom->numnodes = 1;
- doomcom->deathmatch = false;
- doomcom->consoleplayer = 0;
- doomcom->ticdup = 1;
- doomcom->extratics = 0;
- return;
- }
-
- netgame = true;
- doomcom = (doomcom_t *)atoi(myargv[i+1]);
-//DEBUG
-doomcom->skill = startskill;
-doomcom->episode = startepisode;
-doomcom->map = startmap;
-doomcom->deathmatch = deathmatch;
-
-}
-
-void I_NetCmd (void)
-{
- if (!netgame)
- I_Error ("I_NetCmd when not in netgame");
- DPMIInt (doomcom->intnum);
-}
-
-int i_Vector;
-externdata_t *i_ExternData;
-boolean useexterndriver;
-
-//=========================================================================
-//
-// I_CheckExternDriver
-//
-// Checks to see if a vector, and an address for an external driver
-// have been passed.
-//=========================================================================
-
-void I_CheckExternDriver(void)
-{
- int i;
-
- if(!(i = M_CheckParm("-externdriver")))
- {
- return;
- }
- i_ExternData = (externdata_t *)atoi(myargv[i+1]);
- i_Vector = i_ExternData->vector;
-
- useexterndriver = true;
-}
-
-//=========================================================================
-//
-// I_ReadExternDriver
-//
-// calls the external interrupt, which should then update i_ExternDriver
-//=========================================================================
-
-void I_ReadExternDriver(void)
-{
- event_t ev;
-
- if(useexterndriver)
- {
- DPMIInt(i_Vector);
- }
-}
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
+
+// I_IBM.C
+
+#include <dos.h>
+#include <conio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <graph.h>
+#include "DoomDef.h"
+#include "R_local.h"
+#include "sounds.h"
+#include "i_sound.h"
+#include "dmx.h"
+
+// Macros
+
+#define DPMI_INT 0x31
+//#define NOKBD
+//#define NOTIMER
+
+// Public Data
+
+int DisplayTicker = 0;
+
+// Code
+
+void main(int argc, char **argv)
+{
+ myargc = argc;
+ myargv = argv;
+ D_DoomMain();
+}
+
+void I_StartupNet(void);
+void I_ShutdownNet(void);
+void I_ReadExternDriver(void);
+
+typedef struct
+{
+ unsigned edi, esi, ebp, reserved, ebx, edx, ecx, eax;
+ unsigned short flags, es, ds, fs, gs, ip, cs, sp, ss;
+} dpmiregs_t;
+
+extern dpmiregs_t dpmiregs;
+
+void I_ReadMouse(void);
+void I_InitDiskFlash(void);
+
+extern int usemouse, usejoystick;
+
+extern void **lumpcache;
+
+/*
+===============================================================================
+
+ MUSIC & SFX API
+
+===============================================================================
+*/
+
+static channel_t channel[MAX_CHANNELS];
+
+static int rs; //the current registered song.
+int mus_song = -1;
+int mus_lumpnum;
+void *mus_sndptr;
+byte *soundCurve;
+
+extern sfxinfo_t S_sfx[];
+extern musicinfo_t S_music[];
+
+extern int snd_DesiredMusicDevice;
+extern int snd_DesiredSfxDevice;
+extern int snd_MaxVolume;
+extern int snd_MusicVolume;
+extern int snd_Channels;
+
+extern int startepisode;
+extern int startmap;
+
+int AmbChan;
+
+void S_Start(void)
+{
+ int i;
+
+ S_StartSong((gameepisode - 1) * 9 + gamemap - 1, true);
+
+ //stop all sounds
+ for (i = 0; i < snd_Channels; i++)
+ {
+ if (channel[i].handle)
+ {
+ S_StopSound(channel[i].mo);
+ }
+ }
+ memset(channel, 0, 8 * sizeof(channel_t));
+}
+
+void S_StartSong(int song, boolean loop)
+{
+ if (song == mus_song)
+ { // don't replay an old song
+ return;
+ }
+ if (rs)
+ {
+ I_StopSong(rs);
+ I_UnRegisterSong(rs);
+ Z_ChangeTag(lumpcache[mus_lumpnum], PU_CACHE);
+#ifdef __WATCOMC__
+ _dpmi_unlockregion(mus_sndptr, lumpinfo[mus_lumpnum].size);
+#endif
+ }
+ if (song < mus_e1m1 || song > NUMMUSIC)
+ {
+ return;
+ }
+ mus_lumpnum = W_GetNumForName(S_music[song].name);
+ mus_sndptr = W_CacheLumpNum(mus_lumpnum, PU_MUSIC);
+#ifdef __WATCOMC__
+ _dpmi_lockregion(mus_sndptr, lumpinfo[mus_lumpnum].size);
+#endif
+ rs = I_RegisterSong(mus_sndptr);
+ I_PlaySong(rs, loop); //'true' denotes endless looping.
+ mus_song = song;
+}
+
+void S_StartSound(mobj_t * origin, int sound_id)
+{
+ int dist, vol;
+ int i;
+ int sound;
+ int priority;
+ int sep;
+ int angle;
+ int absx;
+ int absy;
+
+ static int sndcount = 0;
+ int chan;
+
+ if (sound_id == 0 || snd_MaxVolume == 0)
+ return;
+ if (origin == NULL)
+ {
+ origin = players[consoleplayer].mo;
+ }
+
+// calculate the distance before other stuff so that we can throw out
+// sounds that are beyond the hearing range.
+ absx = abs(origin->x - players[consoleplayer].mo->x);
+ absy = abs(origin->y - players[consoleplayer].mo->y);
+ dist = absx + absy - (absx > absy ? absy >> 1 : absx >> 1);
+ dist >>= FRACBITS;
+// dist = P_AproxDistance(origin->x-viewx, origin->y-viewy)>>FRACBITS;
+
+ if (dist >= MAX_SND_DIST)
+ {
+// dist = MAX_SND_DIST - 1;
+ return; //sound is beyond the hearing range...
+ }
+ if (dist < 0)
+ {
+ dist = 0;
+ }
+ priority = S_sfx[sound_id].priority;
+ priority *= (10 - (dist / 160));
+ if (!S_StopSoundID(sound_id, priority))
+ {
+ return; // other sounds have greater priority
+ }
+ for (i = 0; i < snd_Channels; i++)
+ {
+ if (origin->player)
+ {
+ i = snd_Channels;
+ break; // let the player have more than one sound.
+ }
+ if (origin == channel[i].mo)
+ { // only allow other mobjs one sound
+ S_StopSound(channel[i].mo);
+ break;
+ }
+ }
+ if (i >= snd_Channels)
+ {
+ if (sound_id >= sfx_wind)
+ {
+ if (AmbChan != -1 && S_sfx[sound_id].priority <=
+ S_sfx[channel[AmbChan].sound_id].priority)
+ {
+ return; //ambient channel already in use
+ }
+ else
+ {
+ AmbChan = -1;
+ }
+ }
+ for (i = 0; i < snd_Channels; i++)
+ {
+ if (channel[i].mo == NULL)
+ {
+ break;
+ }
+ }
+ if (i >= snd_Channels)
+ {
+ //look for a lower priority sound to replace.
+ sndcount++;
+ if (sndcount >= snd_Channels)
+ {
+ sndcount = 0;
+ }
+ for (chan = 0; chan < snd_Channels; chan++)
+ {
+ i = (sndcount + chan) % snd_Channels;
+ if (priority >= channel[i].priority)
+ {
+ chan = -1; //denote that sound should be replaced.
+ break;
+ }
+ }
+ if (chan != -1)
+ {
+ return; //no free channels.
+ }
+ else //replace the lower priority sound.
+ {
+ if (channel[i].handle)
+ {
+ if (I_SoundIsPlaying(channel[i].handle))
+ {
+ I_StopSound(channel[i].handle);
+ }
+ if (S_sfx[channel[i].sound_id].usefulness > 0)
+ {
+ S_sfx[channel[i].sound_id].usefulness--;
+ }
+
+ if (AmbChan == i)
+ {
+ AmbChan = -1;
+ }
+ }
+ }
+ }
+ }
+ if (S_sfx[sound_id].lumpnum == 0)
+ {
+ S_sfx[sound_id].lumpnum = I_GetSfxLumpNum(&S_sfx[sound_id]);
+ }
+ if (S_sfx[sound_id].snd_ptr == NULL)
+ {
+ S_sfx[sound_id].snd_ptr = W_CacheLumpNum(S_sfx[sound_id].lumpnum,
+ PU_SOUND);
+#ifdef __WATCOMC__
+ _dpmi_lockregion(S_sfx[sound_id].snd_ptr,
+ lumpinfo[S_sfx[sound_id].lumpnum].size);
+#endif
+ }
+
+ // calculate the volume based upon the distance from the sound origin.
+// vol = (snd_MaxVolume*16 + dist*(-snd_MaxVolume*16)/MAX_SND_DIST)>>9;
+ vol = soundCurve[dist];
+
+ if (origin == players[consoleplayer].mo)
+ {
+ sep = 128;
+ }
+ else
+ {
+ angle = R_PointToAngle2(players[consoleplayer].mo->x,
+ players[consoleplayer].mo->y,
+ channel[i].mo->x, channel[i].mo->y);
+ angle = (angle - viewangle) >> 24;
+ sep = angle * 2 - 128;
+ if (sep < 64)
+ sep = -sep;
+ if (sep > 192)
+ sep = 512 - sep;
+ }
+
+ channel[i].pitch = (byte) (127 + (M_Random() & 7) - (M_Random() & 7));
+ channel[i].handle =
+ I_StartSound(sound_id, S_sfx[sound_id].snd_ptr, vol, sep,
+ channel[i].pitch, 0);
+ channel[i].mo = origin;
+ channel[i].sound_id = sound_id;
+ channel[i].priority = priority;
+ if (sound_id >= sfx_wind)
+ {
+ AmbChan = i;
+ }
+ if (S_sfx[sound_id].usefulness == -1)
+ {
+ S_sfx[sound_id].usefulness = 1;
+ }
+ else
+ {
+ S_sfx[sound_id].usefulness++;
+ }
+}
+
+void S_StartSoundAtVolume(mobj_t * origin, int sound_id, int volume)
+{
+ int dist;
+ int i;
+ int sep;
+
+ static int sndcount;
+ int chan;
+
+ if (sound_id == 0 || snd_MaxVolume == 0)
+ return;
+ if (origin == NULL)
+ {
+ origin = players[consoleplayer].mo;
+ }
+
+ if (volume == 0)
+ {
+ return;
+ }
+ volume = (volume * (snd_MaxVolume + 1) * 8) >> 7;
+
+// no priority checking, as ambient sounds would be the LOWEST.
+ for (i = 0; i < snd_Channels; i++)
+ {
+ if (channel[i].mo == NULL)
+ {
+ break;
+ }
+ }
+ if (i >= snd_Channels)
+ {
+ return;
+ }
+ if (S_sfx[sound_id].lumpnum == 0)
+ {
+ S_sfx[sound_id].lumpnum = I_GetSfxLumpNum(&S_sfx[sound_id]);
+ }
+ if (S_sfx[sound_id].snd_ptr == NULL)
+ {
+ S_sfx[sound_id].snd_ptr = W_CacheLumpNum(S_sfx[sound_id].lumpnum,
+ PU_SOUND);
+#ifdef __WATCOMC__
+ _dpmi_lockregion(S_sfx[sound_id].snd_ptr,
+ lumpinfo[S_sfx[sound_id].lumpnum].size);
+#endif
+ }
+ channel[i].pitch = (byte) (127 - (M_Random() & 3) + (M_Random() & 3));
+ channel[i].handle =
+ I_StartSound(sound_id, S_sfx[sound_id].snd_ptr, volume, 128,
+ channel[i].pitch, 0);
+ channel[i].mo = origin;
+ channel[i].sound_id = sound_id;
+ channel[i].priority = 1; //super low priority.
+ if (S_sfx[sound_id].usefulness == -1)
+ {
+ S_sfx[sound_id].usefulness = 1;
+ }
+ else
+ {
+ S_sfx[sound_id].usefulness++;
+ }
+}
+
+boolean S_StopSoundID(int sound_id, int priority)
+{
+ int i;
+ int lp; //least priority
+ int found;
+
+ if (S_sfx[sound_id].numchannels == -1)
+ {
+ return (true);
+ }
+ lp = -1; //denote the argument sound_id
+ found = 0;
+ for (i = 0; i < snd_Channels; i++)
+ {
+ if (channel[i].sound_id == sound_id && channel[i].mo)
+ {
+ found++; //found one. Now, should we replace it??
+ if (priority >= channel[i].priority)
+ { // if we're gonna kill one, then this'll be it
+ lp = i;
+ priority = channel[i].priority;
+ }
+ }
+ }
+ if (found < S_sfx[sound_id].numchannels)
+ {
+ return (true);
+ }
+ else if (lp == -1)
+ {
+ return (false); // don't replace any sounds
+ }
+ if (channel[lp].handle)
+ {
+ if (I_SoundIsPlaying(channel[lp].handle))
+ {
+ I_StopSound(channel[lp].handle);
+ }
+ if (S_sfx[channel[i].sound_id].usefulness > 0)
+ {
+ S_sfx[channel[i].sound_id].usefulness--;
+ }
+ channel[lp].mo = NULL;
+ }
+ return (true);
+}
+
+void S_StopSound(mobj_t * origin)
+{
+ int i;
+
+ for (i = 0; i < snd_Channels; i++)
+ {
+ if (channel[i].mo == origin)
+ {
+ I_StopSound(channel[i].handle);
+ if (S_sfx[channel[i].sound_id].usefulness > 0)
+ {
+ S_sfx[channel[i].sound_id].usefulness--;
+ }
+ channel[i].handle = 0;
+ channel[i].mo = NULL;
+ if (AmbChan == i)
+ {
+ AmbChan = -1;
+ }
+ }
+ }
+}
+
+void S_SoundLink(mobj_t * oldactor, mobj_t * newactor)
+{
+ int i;
+
+ for (i = 0; i < snd_Channels; i++)
+ {
+ if (channel[i].mo == oldactor)
+ channel[i].mo = newactor;
+ }
+}
+
+void S_PauseSound(void)
+{
+ I_PauseSong(rs);
+}
+
+void S_ResumeSound(void)
+{
+ I_ResumeSong(rs);
+}
+
+static int nextcleanup;
+
+void S_UpdateSounds(mobj_t * listener)
+{
+ int i, dist, vol;
+ int angle;
+ int sep;
+ int priority;
+ int absx;
+ int absy;
+
+ listener = players[consoleplayer].mo;
+ if (snd_MaxVolume == 0)
+ {
+ return;
+ }
+ if (nextcleanup < gametic)
+ {
+ for (i = 0; i < NUMSFX; i++)
+ {
+ if (S_sfx[i].usefulness == 0 && S_sfx[i].snd_ptr)
+ {
+ if (lumpcache[S_sfx[i].lumpnum])
+ {
+ if (((memblock_t
+ *) ((byte *) (lumpcache[S_sfx[i].lumpnum]) -
+ sizeof(memblock_t)))->id == 0x1d4a11)
+ { // taken directly from the Z_ChangeTag macro
+ Z_ChangeTag2(lumpcache[S_sfx[i].lumpnum], PU_CACHE);
+#ifdef __WATCOMC__
+ _dpmi_unlockregion(S_sfx[i].snd_ptr,
+ lumpinfo[S_sfx[i].lumpnum].size);
+#endif
+ }
+ }
+ S_sfx[i].usefulness = -1;
+ S_sfx[i].snd_ptr = NULL;
+ }
+ }
+ nextcleanup = gametic + 35; //CLEANUP DEBUG cleans every second
+ }
+ for (i = 0; i < snd_Channels; i++)
+ {
+ if (!channel[i].handle || S_sfx[channel[i].sound_id].usefulness == -1)
+ {
+ continue;
+ }
+ if (!I_SoundIsPlaying(channel[i].handle))
+ {
+ if (S_sfx[channel[i].sound_id].usefulness > 0)
+ {
+ S_sfx[channel[i].sound_id].usefulness--;
+ }
+ channel[i].handle = 0;
+ channel[i].mo = NULL;
+ channel[i].sound_id = 0;
+ if (AmbChan == i)
+ {
+ AmbChan = -1;
+ }
+ }
+ if (channel[i].mo == NULL || channel[i].sound_id == 0
+ || channel[i].mo == players[consoleplayer].mo)
+ {
+ continue;
+ }
+ else
+ {
+ absx = abs(channel[i].mo->x - players[consoleplayer].mo->x);
+ absy = abs(channel[i].mo->y - players[consoleplayer].mo->y);
+ dist = absx + absy - (absx > absy ? absy >> 1 : absx >> 1);
+ dist >>= FRACBITS;
+// dist = P_AproxDistance(channel[i].mo->x-listener->x, channel[i].mo->y-listener->y)>>FRACBITS;
+
+ if (dist >= MAX_SND_DIST)
+ {
+ S_StopSound(channel[i].mo);
+ continue;
+ }
+ if (dist < 0)
+ dist = 0;
+
+// calculate the volume based upon the distance from the sound origin.
+// vol = (*((byte *)W_CacheLumpName("SNDCURVE", PU_CACHE)+dist)*(snd_MaxVolume*8))>>7;
+ vol = soundCurve[dist];
+
+ angle = R_PointToAngle2(players[consoleplayer].mo->x,
+ players[consoleplayer].mo->y,
+ channel[i].mo->x, channel[i].mo->y);
+ angle = (angle - viewangle) >> 24;
+ sep = angle * 2 - 128;
+ if (sep < 64)
+ sep = -sep;
+ if (sep > 192)
+ sep = 512 - sep;
+ I_UpdateSoundParams(channel[i].handle, vol, sep,
+ channel[i].pitch);
+ priority = S_sfx[channel[i].sound_id].priority;
+ priority *= (10 - (dist >> 8));
+ channel[i].priority = priority;
+ }
+ }
+}
+
+void S_Init(void)
+{
+ soundCurve = Z_Malloc(MAX_SND_DIST, PU_STATIC, NULL);
+ I_StartupSound();
+ if (snd_Channels > 8)
+ {
+ snd_Channels = 8;
+ }
+ I_SetChannels(snd_Channels);
+ I_SetMusicVolume(snd_MusicVolume);
+ S_SetMaxVolume(true);
+}
+
+void S_GetChannelInfo(SoundInfo_t * s)
+{
+ int i;
+ ChanInfo_t *c;
+
+ s->channelCount = snd_Channels;
+ s->musicVolume = snd_MusicVolume;
+ s->soundVolume = snd_MaxVolume;
+ for (i = 0; i < snd_Channels; i++)
+ {
+ c = &s->chan[i];
+ c->id = channel[i].sound_id;
+ c->priority = channel[i].priority;
+ c->name = S_sfx[c->id].name;
+ c->mo = channel[i].mo;
+ c->distance = P_AproxDistance(c->mo->x - viewx, c->mo->y - viewy)
+ >> FRACBITS;
+ }
+}
+
+void S_SetMaxVolume(boolean fullprocess)
+{
+ int i;
+
+ if (!fullprocess)
+ {
+ soundCurve[0] =
+ (*((byte *) W_CacheLumpName("SNDCURVE", PU_CACHE)) *
+ (snd_MaxVolume * 8)) >> 7;
+ }
+ else
+ {
+ for (i = 0; i < MAX_SND_DIST; i++)
+ {
+ soundCurve[i] =
+ (*((byte *) W_CacheLumpName("SNDCURVE", PU_CACHE) + i) *
+ (snd_MaxVolume * 8)) >> 7;
+ }
+ }
+}
+
+static boolean musicPaused;
+void S_SetMusicVolume(void)
+{
+ I_SetMusicVolume(snd_MusicVolume);
+ if (snd_MusicVolume == 0)
+ {
+ I_PauseSong(rs);
+ musicPaused = true;
+ }
+ else if (musicPaused)
+ {
+ musicPaused = false;
+ I_ResumeSong(rs);
+ }
+}
+
+void S_ShutDown(void)
+{
+ extern int tsm_ID;
+ if (tsm_ID != -1)
+ {
+ I_StopSong(rs);
+ I_UnRegisterSong(rs);
+ I_ShutdownSound();
+ }
+}
+
+/*
+=============================================================================
+
+ CONSTANTS
+
+=============================================================================
+*/
+
+#define SC_INDEX 0x3C4
+#define SC_RESET 0
+#define SC_CLOCK 1
+#define SC_MAPMASK 2
+#define SC_CHARMAP 3
+#define SC_MEMMODE 4
+
+#define CRTC_INDEX 0x3D4
+#define CRTC_H_TOTAL 0
+#define CRTC_H_DISPEND 1
+#define CRTC_H_BLANK 2
+#define CRTC_H_ENDBLANK 3
+#define CRTC_H_RETRACE 4
+#define CRTC_H_ENDRETRACE 5
+#define CRTC_V_TOTAL 6
+#define CRTC_OVERFLOW 7
+#define CRTC_ROWSCAN 8
+#define CRTC_MAXSCANLINE 9
+#define CRTC_CURSORSTART 10
+#define CRTC_CURSOREND 11
+#define CRTC_STARTHIGH 12
+#define CRTC_STARTLOW 13
+#define CRTC_CURSORHIGH 14
+#define CRTC_CURSORLOW 15
+#define CRTC_V_RETRACE 16
+#define CRTC_V_ENDRETRACE 17
+#define CRTC_V_DISPEND 18
+#define CRTC_OFFSET 19
+#define CRTC_UNDERLINE 20
+#define CRTC_V_BLANK 21
+#define CRTC_V_ENDBLANK 22
+#define CRTC_MODE 23
+#define CRTC_LINECOMPARE 24
+
+
+#define GC_INDEX 0x3CE
+#define GC_SETRESET 0
+#define GC_ENABLESETRESET 1
+#define GC_COLORCOMPARE 2
+#define GC_DATAROTATE 3
+#define GC_READMAP 4
+#define GC_MODE 5
+#define GC_MISCELLANEOUS 6
+#define GC_COLORDONTCARE 7
+#define GC_BITMASK 8
+
+#define ATR_INDEX 0x3c0
+#define ATR_MODE 16
+#define ATR_OVERSCAN 17
+#define ATR_COLORPLANEENABLE 18
+#define ATR_PELPAN 19
+#define ATR_COLORSELECT 20
+
+#define STATUS_REGISTER_1 0x3da
+
+#define PEL_WRITE_ADR 0x3c8
+#define PEL_READ_ADR 0x3c7
+#define PEL_DATA 0x3c9
+#define PEL_MASK 0x3c6
+
+boolean grmode;
+
+//==================================================
+//
+// joystick vars
+//
+//==================================================
+
+boolean joystickpresent;
+extern unsigned joystickx, joysticky;
+boolean I_ReadJoystick(void); // returns false if not connected
+
+
+//==================================================
+
+#define VBLCOUNTER 34000 // hardware tics to a frame
+
+
+#define TIMERINT 8
+#define KEYBOARDINT 9
+
+#define CRTCOFF (_inbyte(STATUS_REGISTER_1)&1)
+#define CLI _disable()
+#define STI _enable()
+
+#define _outbyte(x,y) (outp(x,y))
+#define _outhword(x,y) (outpw(x,y))
+
+#define _inbyte(x) (inp(x))
+#define _inhword(x) (inpw(x))
+
+#define MOUSEB1 1
+#define MOUSEB2 2
+#define MOUSEB3 4
+
+boolean mousepresent;
+//static int tsm_ID = -1; // tsm init flag
+
+//===============================
+
+int ticcount;
+
+// REGS stuff used for int calls
+union REGS regs;
+struct SREGS segregs;
+
+boolean novideo; // if true, stay in text mode for debugging
+
+#define KBDQUESIZE 32
+byte keyboardque[KBDQUESIZE];
+int kbdtail, kbdhead;
+
+#define KEY_LSHIFT 0xfe
+
+#define KEY_INS (0x80+0x52)
+#define KEY_DEL (0x80+0x53)
+#define KEY_PGUP (0x80+0x49)
+#define KEY_PGDN (0x80+0x51)
+#define KEY_HOME (0x80+0x47)
+#define KEY_END (0x80+0x4f)
+
+#define SC_RSHIFT 0x36
+#define SC_LSHIFT 0x2a
+
+byte scantokey[128] = {
+// 0 1 2 3 4 5 6 7
+// 8 9 A B C D E F
+ 0, 27, '1', '2', '3', '4', '5', '6',
+ '7', '8', '9', '0', '-', '=', KEY_BACKSPACE, 9, // 0
+ 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
+ 'o', 'p', '[', ']', 13, KEY_RCTRL, 'a', 's', // 1
+ 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
+ 39, '`', KEY_LSHIFT, 92, 'z', 'x', 'c', 'v', // 2
+ 'b', 'n', 'm', ',', '.', '/', KEY_RSHIFT, '*',
+ KEY_RALT, ' ', 0, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, // 3
+ KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, 0, 0, KEY_HOME,
+ KEY_UPARROW, KEY_PGUP, '-', KEY_LEFTARROW, '5', KEY_RIGHTARROW, '+', KEY_END, //4
+ KEY_DOWNARROW, KEY_PGDN, KEY_INS, KEY_DEL, 0, 0, 0, KEY_F11,
+ KEY_F12, 0, 0, 0, 0, 0, 0, 0, // 5
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, // 6
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0 // 7
+};
+
+//==========================================================================
+
+//--------------------------------------------------------------------------
+//
+// FUNC I_GetTime
+//
+// Returns time in 1/35th second tics.
+//
+//--------------------------------------------------------------------------
+
+int I_GetTime(void)
+{
+#ifdef NOTIMER
+ ticcount++;
+#endif
+ return (ticcount);
+}
+
+//--------------------------------------------------------------------------
+//
+// PROC I_ColorBorder
+//
+//--------------------------------------------------------------------------
+
+void I_ColorBorder(void)
+{
+ int i;
+
+ I_WaitVBL(1);
+ _outbyte(PEL_WRITE_ADR, 0);
+ for (i = 0; i < 3; i++)
+ {
+ _outbyte(PEL_DATA, 63);
+ }
+}
+
+//--------------------------------------------------------------------------
+//
+// PROC I_UnColorBorder
+//
+//--------------------------------------------------------------------------
+
+void I_UnColorBorder(void)
+{
+ int i;
+
+ I_WaitVBL(1);
+ _outbyte(PEL_WRITE_ADR, 0);
+ for (i = 0; i < 3; i++)
+ {
+ _outbyte(PEL_DATA, 0);
+ }
+}
+
+/*
+============================================================================
+
+ USER INPUT
+
+============================================================================
+*/
+
+//--------------------------------------------------------------------------
+//
+// PROC I_WaitVBL
+//
+//--------------------------------------------------------------------------
+
+void I_WaitVBL(int vbls)
+{
+ int i;
+ int old;
+ int stat;
+
+ if (novideo)
+ {
+ return;
+ }
+ while (vbls--)
+ {
+ do
+ {
+ stat = inp(STATUS_REGISTER_1);
+ if (stat & 8)
+ {
+ break;
+ }
+ }
+ while (1);
+ do
+ {
+ stat = inp(STATUS_REGISTER_1);
+ if ((stat & 8) == 0)
+ {
+ break;
+ }
+ }
+ while (1);
+ }
+}
+
+//--------------------------------------------------------------------------
+//
+// PROC I_SetPalette
+//
+// Palette source must use 8 bit RGB elements.
+//
+//--------------------------------------------------------------------------
+
+void I_SetPalette(byte * palette)
+{
+ int i;
+
+ if (novideo)
+ {
+ return;
+ }
+ I_WaitVBL(1);
+ _outbyte(PEL_WRITE_ADR, 0);
+ for (i = 0; i < 768; i++)
+ {
+ _outbyte(PEL_DATA, (gammatable[usegamma][*palette++]) >> 2);
+ }
+}
+
+/*
+============================================================================
+
+ GRAPHICS MODE
+
+============================================================================
+*/
+
+byte *pcscreen, *destscreen, *destview;
+
+
+/*
+==============
+=
+= I_Update
+=
+==============
+*/
+
+int UpdateState;
+extern int screenblocks;
+
+void I_Update(void)
+{
+ int i;
+ byte *dest;
+ int tics;
+ static int lasttic;
+
+//
+// blit screen to video
+//
+ if (DisplayTicker)
+ {
+ if (screenblocks > 9 || UpdateState & (I_FULLSCRN | I_MESSAGES))
+ {
+ dest = (byte *) screen;
+ }
+ else
+ {
+ dest = (byte *) pcscreen;
+ }
+ tics = ticcount - lasttic;
+ lasttic = ticcount;
+ if (tics > 20)
+ {
+ tics = 20;
+ }
+ for (i = 0; i < tics; i++)
+ {
+ *dest = 0xff;
+ dest += 2;
+ }
+ for (i = tics; i < 20; i++)
+ {
+ *dest = 0x00;
+ dest += 2;
+ }
+ }
+ if (UpdateState == I_NOUPDATE)
+ {
+ return;
+ }
+ if (UpdateState & I_FULLSCRN)
+ {
+ memcpy(pcscreen, screen, SCREENWIDTH * SCREENHEIGHT);
+ UpdateState = I_NOUPDATE; // clear out all draw types
+ }
+ if (UpdateState & I_FULLVIEW)
+ {
+ if (UpdateState & I_MESSAGES && screenblocks > 7)
+ {
+ for (i = 0; i <
+ (viewwindowy + viewheight) * SCREENWIDTH; i += SCREENWIDTH)
+ {
+ memcpy(pcscreen + i, screen + i, SCREENWIDTH);
+ }
+ UpdateState &= ~(I_FULLVIEW | I_MESSAGES);
+ }
+ else
+ {
+ for (i = viewwindowy * SCREENWIDTH + viewwindowx; i <
+ (viewwindowy + viewheight) * SCREENWIDTH; i += SCREENWIDTH)
+ {
+ memcpy(pcscreen + i, screen + i, viewwidth);
+ }
+ UpdateState &= ~I_FULLVIEW;
+ }
+ }
+ if (UpdateState & I_STATBAR)
+ {
+ memcpy(pcscreen + SCREENWIDTH * (SCREENHEIGHT - SBARHEIGHT),
+ screen + SCREENWIDTH * (SCREENHEIGHT - SBARHEIGHT),
+ SCREENWIDTH * SBARHEIGHT);
+ UpdateState &= ~I_STATBAR;
+ }
+ if (UpdateState & I_MESSAGES)
+ {
+ memcpy(pcscreen, screen, SCREENWIDTH * 28);
+ UpdateState &= ~I_MESSAGES;
+ }
+
+// memcpy(pcscreen, screen, SCREENHEIGHT*SCREENWIDTH);
+}
+
+//--------------------------------------------------------------------------
+//
+// PROC I_InitGraphics
+//
+//--------------------------------------------------------------------------
+
+void I_InitGraphics(void)
+{
+ if (novideo)
+ {
+ return;
+ }
+ grmode = true;
+ regs.w.ax = 0x13;
+ int386(0x10, (const union REGS *) ®s, ®s);
+ pcscreen = destscreen = (byte *) 0xa0000;
+ I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));
+ I_InitDiskFlash();
+}
+
+//--------------------------------------------------------------------------
+//
+// PROC I_ShutdownGraphics
+//
+//--------------------------------------------------------------------------
+
+void I_ShutdownGraphics(void)
+{
+
+ if (*(byte *) 0x449 == 0x13) // don't reset mode if it didn't get set
+ {
+ regs.w.ax = 3;
+ int386(0x10, ®s, ®s); // back to text mode
+ }
+}
+
+//--------------------------------------------------------------------------
+//
+// PROC I_ReadScreen
+//
+// Reads the screen currently displayed into a linear buffer.
+//
+//--------------------------------------------------------------------------
+
+void I_ReadScreen(byte * scr)
+{
+ memcpy(scr, screen, SCREENWIDTH * SCREENHEIGHT);
+}
+
+
+//===========================================================================
+
+/*
+===================
+=
+= I_StartTic
+=
+// called by D_DoomLoop
+// called before processing each tic in a frame
+// can call D_PostEvent
+// asyncronous interrupt functions should maintain private ques that are
+// read by the syncronous functions to be converted into events
+===================
+*/
+
+/*
+ OLD STARTTIC STUFF
+
+void I_StartTic (void)
+{
+ int k;
+ event_t ev;
+
+
+ I_ReadMouse ();
+
+//
+// keyboard events
+//
+ while (kbdtail < kbdhead)
+ {
+ k = keyboardque[kbdtail&(KBDQUESIZE-1)];
+
+// if (k==14)
+// I_Error ("exited");
+
+ kbdtail++;
+
+ // extended keyboard shift key bullshit
+ if ( (k&0x7f)==KEY_RSHIFT )
+ {
+ if ( keyboardque[(kbdtail-2)&(KBDQUESIZE-1)]==0xe0 )
+ continue;
+ k &= 0x80;
+ k |= KEY_RSHIFT;
+ }
+
+ if (k==0xe0)
+ continue; // special / pause keys
+ if (keyboardque[(kbdtail-2)&(KBDQUESIZE-1)] == 0xe1)
+ continue; // pause key bullshit
+
+ if (k==0xc5 && keyboardque[(kbdtail-2)&(KBDQUESIZE-1)] == 0x9d)
+ {
+ ev.type = ev_keydown;
+ ev.data1 = KEY_PAUSE;
+ D_PostEvent (&ev);
+ continue;
+ }
+
+ if (k&0x80)
+ ev.type = ev_keyup;
+ else
+ ev.type = ev_keydown;
+ k &= 0x7f;
+
+ ev.data1 = k;
+ //ev.data1 = scantokey[k];
+
+ D_PostEvent (&ev);
+ }
+}
+*/
+
+#define SC_UPARROW 0x48
+#define SC_DOWNARROW 0x50
+#define SC_LEFTARROW 0x4b
+#define SC_RIGHTARROW 0x4d
+
+void I_StartTic(void)
+{
+ int k;
+ event_t ev;
+
+
+ I_ReadMouse();
+
+//
+// keyboard events
+//
+ while (kbdtail < kbdhead)
+ {
+ k = keyboardque[kbdtail & (KBDQUESIZE - 1)];
+ kbdtail++;
+
+ // extended keyboard shift key bullshit
+ if ((k & 0x7f) == SC_LSHIFT || (k & 0x7f) == SC_RSHIFT)
+ {
+ if (keyboardque[(kbdtail - 2) & (KBDQUESIZE - 1)] == 0xe0)
+ continue;
+ k &= 0x80;
+ k |= SC_RSHIFT;
+ }
+
+ if (k == 0xe0)
+ continue; // special / pause keys
+ if (keyboardque[(kbdtail - 2) & (KBDQUESIZE - 1)] == 0xe1)
+ continue; // pause key bullshit
+
+ if (k == 0xc5
+ && keyboardque[(kbdtail - 2) & (KBDQUESIZE - 1)] == 0x9d)
+ {
+ ev.type = ev_keydown;
+ ev.data1 = KEY_PAUSE;
+ D_PostEvent(&ev);
+ continue;
+ }
+
+ if (k & 0x80)
+ ev.type = ev_keyup;
+ else
+ ev.type = ev_keydown;
+ k &= 0x7f;
+ switch (k)
+ {
+ case SC_UPARROW:
+ ev.data1 = KEY_UPARROW;
+ break;
+ case SC_DOWNARROW:
+ ev.data1 = KEY_DOWNARROW;
+ break;
+ case SC_LEFTARROW:
+ ev.data1 = KEY_LEFTARROW;
+ break;
+ case SC_RIGHTARROW:
+ ev.data1 = KEY_RIGHTARROW;
+ break;
+ default:
+ ev.data1 = scantokey[k];
+ break;
+ }
+ D_PostEvent(&ev);
+ }
+
+}
+
+
+void I_ReadKeys(void)
+{
+ int k;
+ event_t ev;
+
+
+ while (1)
+ {
+ while (kbdtail < kbdhead)
+ {
+ k = keyboardque[kbdtail & (KBDQUESIZE - 1)];
+ kbdtail++;
+ printf("0x%x\n", k);
+ if (k == 1)
+ I_Quit();
+ }
+ }
+}
+
+/*
+===============
+=
+= I_StartFrame
+=
+===============
+*/
+
+void I_StartFrame(void)
+{
+ I_JoystickEvents();
+ I_ReadExternDriver();
+}
+
+/*
+============================================================================
+
+ TIMER INTERRUPT
+
+============================================================================
+*/
+
+void I_ColorBlack(int r, int g, int b)
+{
+ _outbyte(PEL_WRITE_ADR, 0);
+ _outbyte(PEL_DATA, r);
+ _outbyte(PEL_DATA, g);
+ _outbyte(PEL_DATA, b);
+}
+
+
+/*
+================
+=
+= I_TimerISR
+=
+================
+*/
+
+int I_TimerISR(void)
+{
+ ticcount++;
+ return 0;
+}
+
+/*
+============================================================================
+
+ KEYBOARD
+
+============================================================================
+*/
+
+void (__interrupt __far * oldkeyboardisr) () = NULL;
+
+int lastpress;
+
+/*
+================
+=
+= I_KeyboardISR
+=
+================
+*/
+
+void __interrupt I_KeyboardISR(void)
+{
+// Get the scan code
+
+ keyboardque[kbdhead & (KBDQUESIZE - 1)] = lastpress = _inbyte(0x60);
+ kbdhead++;
+
+// acknowledge the interrupt
+
+ _outbyte(0x20, 0x20);
+}
+
+
+
+/*
+===============
+=
+= I_StartupKeyboard
+=
+===============
+*/
+
+void I_StartupKeyboard(void)
+{
+#ifndef NOKBD
+ oldkeyboardisr = _dos_getvect(KEYBOARDINT);
+ _dos_setvect(0x8000 | KEYBOARDINT, I_KeyboardISR);
+#endif
+
+//I_ReadKeys ();
+}
+
+
+void I_ShutdownKeyboard(void)
+{
+ if (oldkeyboardisr)
+ _dos_setvect(KEYBOARDINT, oldkeyboardisr);
+ *(short *) 0x41c = *(short *) 0x41a; // clear bios key buffer
+}
+
+
+
+/*
+============================================================================
+
+ MOUSE
+
+============================================================================
+*/
+
+
+int I_ResetMouse(void)
+{
+ regs.w.ax = 0; // reset
+ int386(0x33, ®s, ®s);
+ return regs.w.ax;
+}
+
+
+
+/*
+================
+=
+= StartupMouse
+=
+================
+*/
+
+void I_StartupCyberMan(void);
+
+void I_StartupMouse(void)
+{
+ int (far * function) ();
+
+ //
+ // General mouse detection
+ //
+ mousepresent = 0;
+ if (M_CheckParm("-nomouse") || !usemouse)
+ return;
+
+ if (I_ResetMouse() != 0xffff)
+ {
+ tprintf("Mouse: not present ", 0);
+ return;
+ }
+ tprintf("Mouse: detected ", 0);
+
+ mousepresent = 1;
+
+ I_StartupCyberMan();
+}
+
+
+/*
+================
+=
+= ShutdownMouse
+=
+================
+*/
+
+void I_ShutdownMouse(void)
+{
+ if (!mousepresent)
+ return;
+
+ I_ResetMouse();
+}
+
+
+/*
+================
+=
+= I_ReadMouse
+=
+================
+*/
+
+void I_ReadMouse(void)
+{
+ event_t ev;
+
+//
+// mouse events
+//
+ if (!mousepresent)
+ return;
+
+ ev.type = ev_mouse;
+
+ memset(&dpmiregs, 0, sizeof(dpmiregs));
+ dpmiregs.eax = 3; // read buttons / position
+ DPMIInt(0x33);
+ ev.data1 = dpmiregs.ebx;
+
+ dpmiregs.eax = 11; // read counters
+ DPMIInt(0x33);
+ ev.data2 = (short) dpmiregs.ecx;
+ ev.data3 = -(short) dpmiregs.edx;
+
+ D_PostEvent(&ev);
+}
+
+/*
+============================================================================
+
+ JOYSTICK
+
+============================================================================
+*/
+
+int joyxl, joyxh, joyyl, joyyh;
+
+boolean WaitJoyButton(void)
+{
+ int oldbuttons, buttons;
+
+ oldbuttons = 0;
+ do
+ {
+ I_WaitVBL(1);
+ buttons = ((inp(0x201) >> 4) & 1) ^ 1;
+ if (buttons != oldbuttons)
+ {
+ oldbuttons = buttons;
+ continue;
+ }
+
+ if ((lastpress & 0x7f) == 1)
+ {
+ joystickpresent = false;
+ return false;
+ }
+ }
+ while (!buttons);
+
+ do
+ {
+ I_WaitVBL(1);
+ buttons = ((inp(0x201) >> 4) & 1) ^ 1;
+ if (buttons != oldbuttons)
+ {
+ oldbuttons = buttons;
+ continue;
+ }
+
+ if ((lastpress & 0x7f) == 1)
+ {
+ joystickpresent = false;
+ return false;
+ }
+ }
+ while (buttons);
+
+ return true;
+}
+
+
+
+/*
+===============
+=
+= I_StartupJoystick
+=
+===============
+*/
+
+int basejoyx, basejoyy;
+
+void I_StartupJoystick(void)
+{
+ int buttons;
+ int count;
+ int centerx, centery;
+
+ joystickpresent = 0;
+ if (M_CheckParm("-nojoy") || !usejoystick)
+ return;
+
+ if (!I_ReadJoystick())
+ {
+ joystickpresent = false;
+ tprintf("joystick not found ", 0);
+ return;
+ }
+ printf("joystick found\n");
+ joystickpresent = true;
+
+ printf("CENTER the joystick and press button 1:");
+ if (!WaitJoyButton())
+ return;
+ I_ReadJoystick();
+ centerx = joystickx;
+ centery = joysticky;
+
+ printf
+ ("\nPush the joystick to the UPPER LEFT corner and press button 1:");
+ if (!WaitJoyButton())
+ return;
+ I_ReadJoystick();
+ joyxl = (centerx + joystickx) / 2;
+ joyyl = (centerx + joysticky) / 2;
+
+ printf
+ ("\nPush the joystick to the LOWER RIGHT corner and press button 1:");
+ if (!WaitJoyButton())
+ return;
+ I_ReadJoystick();
+ joyxh = (centerx + joystickx) / 2;
+ joyyh = (centery + joysticky) / 2;
+ printf("\n");
+}
+
+/*
+===============
+=
+= I_JoystickEvents
+=
+===============
+*/
+
+void I_JoystickEvents(void)
+{
+ event_t ev;
+
+//
+// joystick events
+//
+ if (!joystickpresent)
+ return;
+
+ I_ReadJoystick();
+ ev.type = ev_joystick;
+ ev.data1 = ((inp(0x201) >> 4) & 15) ^ 15;
+
+ if (joystickx < joyxl)
+ ev.data2 = -1;
+ else if (joystickx > joyxh)
+ ev.data2 = 1;
+ else
+ ev.data2 = 0;
+ if (joysticky < joyyl)
+ ev.data3 = -1;
+ else if (joysticky > joyyh)
+ ev.data3 = 1;
+ else
+ ev.data3 = 0;
+
+ D_PostEvent(&ev);
+}
+
+
+
+/*
+============================================================================
+
+ DPMI STUFF
+
+============================================================================
+*/
+
+#define REALSTACKSIZE 1024
+
+dpmiregs_t dpmiregs;
+
+unsigned realstackseg;
+
+void I_DivException(void);
+int I_SetDivException(void);
+
+void DPMIFarCall(void)
+{
+ segread(&segregs);
+ regs.w.ax = 0x301;
+ regs.w.bx = 0;
+ regs.w.cx = 0;
+ regs.x.edi = (unsigned) &dpmiregs;
+ segregs.es = segregs.ds;
+ int386x(DPMI_INT, ®s, ®s, &segregs);
+}
+
+
+void DPMIInt(int i)
+{
+ dpmiregs.ss = realstackseg;
+ dpmiregs.sp = REALSTACKSIZE - 4;
+
+ segread(&segregs);
+ regs.w.ax = 0x300;
+ regs.w.bx = i;
+ regs.w.cx = 0;
+ regs.x.edi = (unsigned) &dpmiregs;
+ segregs.es = segregs.ds;
+ int386x(DPMI_INT, ®s, ®s, &segregs);
+}
+
+
+/*
+==============
+=
+= I_StartupDPMI
+=
+==============
+*/
+
+void I_StartupDPMI(void)
+{
+ extern char __begtext;
+ extern char ___argc;
+ int n, d;
+
+//
+// allocate a decent stack for real mode ISRs
+//
+ realstackseg = (int) I_AllocLow(1024) >> 4;
+
+//
+// lock the entire program down
+//
+
+// _dpmi_lockregion (&__begtext, &___argc - &__begtext);
+
+
+//
+// catch divide by 0 exception
+//
+#if 0
+ segread(&segregs);
+ regs.w.ax = 0x0203; // DPMI set processor exception handler vector
+ regs.w.bx = 0; // int 0
+ regs.w.cx = segregs.cs;
+ regs.x.edx = (int) &I_DivException;
+ printf("%x : %x\n", regs.w.cx, regs.x.edx);
+ int386(DPMI_INT, ®s, ®s);
+#endif
+
+#if 0
+ n = I_SetDivException();
+ printf("return: %i\n", n);
+ n = 100;
+ d = 0;
+ printf("100 / 0 = %i\n", n / d);
+
+ exit(1);
+#endif
+}
+
+
+
+/*
+============================================================================
+
+ TIMER INTERRUPT
+
+============================================================================
+*/
+
+void (__interrupt __far * oldtimerisr) ();
+
+
+void IO_ColorBlack(int r, int g, int b)
+{
+ _outbyte(PEL_WRITE_ADR, 0);
+ _outbyte(PEL_DATA, r);
+ _outbyte(PEL_DATA, g);
+ _outbyte(PEL_DATA, b);
+}
+
+
+/*
+================
+=
+= IO_TimerISR
+=
+================
+*/
+
+//void __interrupt IO_TimerISR (void)
+
+void __interrupt __far IO_TimerISR(void)
+{
+ ticcount++;
+ _outbyte(0x20, 0x20); // Ack the interrupt
+}
+
+/*
+=====================
+=
+= IO_SetTimer0
+=
+= Sets system timer 0 to the specified speed
+=
+=====================
+*/
+
+void IO_SetTimer0(int speed)
+{
+ if (speed > 0 && speed < 150)
+ I_Error("INT_SetTimer0: %i is a bad value", speed);
+
+ _outbyte(0x43, 0x36); // Change timer 0
+ _outbyte(0x40, speed);
+ _outbyte(0x40, speed >> 8);
+}
+
+
+
+/*
+===============
+=
+= IO_StartupTimer
+=
+===============
+*/
+
+void IO_StartupTimer(void)
+{
+ oldtimerisr = _dos_getvect(TIMERINT);
+
+ _dos_setvect(0x8000 | TIMERINT, IO_TimerISR);
+ IO_SetTimer0(VBLCOUNTER);
+}
+
+void IO_ShutdownTimer(void)
+{
+ if (oldtimerisr)
+ {
+ IO_SetTimer0(0); // back to 18.4 ips
+ _dos_setvect(TIMERINT, oldtimerisr);
+ }
+}
+
+//===========================================================================
+
+
+/*
+===============
+=
+= I_Init
+=
+= hook interrupts and set graphics mode
+=
+===============
+*/
+
+void I_Init(void)
+{
+ extern void I_StartupTimer(void);
+
+ novideo = M_CheckParm("novideo");
+ tprintf("I_StartupDPMI", 1);
+ I_StartupDPMI();
+ tprintf("I_StartupMouse ", 1);
+ I_StartupMouse();
+// tprintf("I_StartupJoystick ",1);
+// I_StartupJoystick();
+// tprintf("I_StartupKeyboard ",1);
+// I_StartupKeyboard();
+ tprintf("S_Init... ", 1);
+ S_Init();
+ //IO_StartupTimer();
+ S_Start();
+}
+
+
+/*
+===============
+=
+= I_Shutdown
+=
+= return to default system state
+=
+===============
+*/
+
+void I_Shutdown(void)
+{
+ I_ShutdownGraphics();
+ IO_ShutdownTimer();
+ S_ShutDown();
+ I_ShutdownMouse();
+ I_ShutdownKeyboard();
+
+ IO_SetTimer0(0);
+}
+
+
+/*
+================
+=
+= I_Error
+=
+================
+*/
+
+void I_Error(char *error, ...)
+{
+ union REGS regs;
+
+ va_list argptr;
+
+ D_QuitNetGame();
+ I_Shutdown();
+ va_start(argptr, error);
+ regs.x.eax = 0x3;
+ int386(0x10, ®s, ®s);
+ vprintf(error, argptr);
+ va_end(argptr);
+ printf("\n");
+ exit(1);
+}
+
+//--------------------------------------------------------------------------
+//
+// I_Quit
+//
+// Shuts down net game, saves defaults, prints the exit text message,
+// goes to text mode, and exits.
+//
+//--------------------------------------------------------------------------
+
+void I_Quit(void)
+{
+ byte *scr;
+ char *lumpName;
+ int r;
+
+ D_QuitNetGame();
+ M_SaveDefaults();
+ scr = (byte *) W_CacheLumpName("ENDTEXT", PU_CACHE);
+ I_Shutdown();
+ memcpy((void *) 0xb8000, scr, 80 * 25 * 2);
+ regs.w.ax = 0x0200;
+ regs.h.bh = 0;
+ regs.h.dl = 0;
+ regs.h.dh = 23;
+ int386(0x10, (const union REGS *) ®s, ®s); // Set text pos
+ _settextposition(24, 1);
+ exit(0);
+}
+
+/*
+===============
+=
+= I_ZoneBase
+=
+===============
+*/
+
+byte *I_ZoneBase(int *size)
+{
+ int meminfo[32];
+ int heap;
+ int i;
+ int block;
+ byte *ptr;
+
+ memset(meminfo, 0, sizeof(meminfo));
+ segread(&segregs);
+ segregs.es = segregs.ds;
+ regs.w.ax = 0x500; // get memory info
+ regs.x.edi = (int) &meminfo;
+ int386x(0x31, ®s, ®s, &segregs);
+
+ heap = meminfo[0];
+ printf("DPMI memory: 0x%x, ", heap);
+
+ do
+ {
+ heap -= 0x10000; // leave 64k alone
+ if (heap > 0x800000)
+ heap = 0x800000;
+ ptr = malloc(heap);
+ }
+ while (!ptr);
+
+ printf("0x%x allocated for zone\n", heap);
+ if (heap < 0x180000)
+ I_Error("Insufficient DPMI memory!");
+#if 0
+ regs.w.ax = 0x501; // allocate linear block
+ regs.w.bx = heap >> 16;
+ regs.w.cx = heap & 0xffff;
+ int386(0x31, ®s, ®s);
+ if (regs.w.cflag)
+ I_Error("Couldn't allocate DPMI memory!");
+
+ block = (regs.w.si << 16) + regs.w.di;
+#endif
+
+ *size = heap;
+ return ptr;
+}
+
+/*
+=============================================================================
+
+ DISK ICON FLASHING
+
+=============================================================================
+*/
+
+void I_InitDiskFlash(void)
+{
+#if 0
+ void *pic;
+ byte *temp;
+
+ pic = W_CacheLumpName("STDISK", PU_CACHE);
+ temp = destscreen;
+ destscreen = (byte *) 0xac000;
+ V_DrawPatchDirect(SCREENWIDTH - 16, SCREENHEIGHT - 16, 0, pic);
+ destscreen = temp;
+#endif
+}
+
+// draw disk icon
+void I_BeginRead(void)
+{
+#if 0
+ byte *src, *dest;
+ int y;
+
+ if (!grmode)
+ return;
+
+// write through all planes
+ outp(SC_INDEX, SC_MAPMASK);
+ outp(SC_INDEX + 1, 15);
+// set write mode 1
+ outp(GC_INDEX, GC_MODE);
+ outp(GC_INDEX + 1, inp(GC_INDEX + 1) | 1);
+
+// copy to backup
+ src = currentscreen + 184 * 80 + 304 / 4;
+ dest = (byte *) 0xac000 + 184 * 80 + 288 / 4;
+ for (y = 0; y < 16; y++)
+ {
+ dest[0] = src[0];
+ dest[1] = src[1];
+ dest[2] = src[2];
+ dest[3] = src[3];
+ src += 80;
+ dest += 80;
+ }
+
+// copy disk over
+ dest = currentscreen + 184 * 80 + 304 / 4;
+ src = (byte *) 0xac000 + 184 * 80 + 304 / 4;
+ for (y = 0; y < 16; y++)
+ {
+ dest[0] = src[0];
+ dest[1] = src[1];
+ dest[2] = src[2];
+ dest[3] = src[3];
+ src += 80;
+ dest += 80;
+ }
+
+
+// set write mode 0
+ outp(GC_INDEX, GC_MODE);
+ outp(GC_INDEX + 1, inp(GC_INDEX + 1) & ~1);
+#endif
+}
+
+// erase disk icon
+void I_EndRead(void)
+{
+#if 0
+ byte *src, *dest;
+ int y;
+
+ if (!grmode)
+ return;
+
+// write through all planes
+ outp(SC_INDEX, SC_MAPMASK);
+ outp(SC_INDEX + 1, 15);
+// set write mode 1
+ outp(GC_INDEX, GC_MODE);
+ outp(GC_INDEX + 1, inp(GC_INDEX + 1) | 1);
+
+
+// copy disk over
+ dest = currentscreen + 184 * 80 + 304 / 4;
+ src = (byte *) 0xac000 + 184 * 80 + 288 / 4;
+ for (y = 0; y < 16; y++)
+ {
+ dest[0] = src[0];
+ dest[1] = src[1];
+ dest[2] = src[2];
+ dest[3] = src[3];
+ src += 80;
+ dest += 80;
+ }
+
+// set write mode 0
+ outp(GC_INDEX, GC_MODE);
+ outp(GC_INDEX + 1, inp(GC_INDEX + 1) & ~1);
+#endif
+}
+
+
+
+/*
+=============
+=
+= I_AllocLow
+=
+=============
+*/
+
+byte *I_AllocLow(int length)
+{
+ byte *mem;
+
+ // DPMI call 100h allocates DOS memory
+ segread(&segregs);
+ regs.w.ax = 0x0100; // DPMI allocate DOS memory
+ regs.w.bx = (length + 15) / 16;
+ int386(DPMI_INT, ®s, ®s);
+// segment = regs.w.ax;
+// selector = regs.w.dx;
+ if (regs.w.cflag != 0)
+ I_Error("I_AllocLow: DOS alloc of %i failed, %i free",
+ length, regs.w.bx * 16);
+
+
+ mem = (void *) ((regs.x.eax & 0xFFFF) << 4);
+
+ memset(mem, 0, length);
+ return mem;
+}
+
+/*
+============================================================================
+
+ NETWORKING
+
+============================================================================
+*/
+
+/* // FUCKED LINES
+typedef struct
+{
+ char priv[508];
+ } doomdata_t;
+*/// FUCKED LINES
+
+#define DOOMCOM_ID 0x12345678l
+
+/* // FUCKED LINES
+typedef struct
+{
+ long id;
+ short intnum; // DOOM executes an int to execute commands
+
+// communication between DOOM and the driver
+ short command; // CMD_SEND or CMD_GET
+ short remotenode; // dest for send, set by get (-1 = no packet)
+ short datalength; // bytes in doomdata to be sent
+
+// info common to all nodes
+ short numnodes; // console is allways node 0
+ short ticdup; // 1 = no duplication, 2-5 = dup for slow nets
+ short extratics; // 1 = send a backup tic in every packet
+ short deathmatch; // 1 = deathmatch
+ short savegame; // -1 = new game, 0-5 = load savegame
+ short episode; // 1-3
+ short map; // 1-9
+ short skill; // 1-5
+
+// info specific to this node
+ short consoleplayer;
+ short numplayers;
+ short angleoffset; // 1 = left, 0 = center, -1 = right
+ short drone; // 1 = drone
+
+// packet data to be sent
+ doomdata_t data;
+ } doomcom_t;
+*/// FUCKED LINES
+
+extern doomcom_t *doomcom;
+
+/*
+====================
+=
+= I_InitNetwork
+=
+====================
+*/
+
+void I_InitNetwork(void)
+{
+ int i;
+
+ i = M_CheckParm("-net");
+ if (!i)
+ {
+ //
+ // single player game
+ //
+ doomcom = malloc(sizeof(*doomcom));
+ memset(doomcom, 0, sizeof(*doomcom));
+ netgame = false;
+ doomcom->id = DOOMCOM_ID;
+ doomcom->numplayers = doomcom->numnodes = 1;
+ doomcom->deathmatch = false;
+ doomcom->consoleplayer = 0;
+ doomcom->ticdup = 1;
+ doomcom->extratics = 0;
+ return;
+ }
+
+ netgame = true;
+ doomcom = (doomcom_t *) atoi(myargv[i + 1]);
+//DEBUG
+ doomcom->skill = startskill;
+ doomcom->episode = startepisode;
+ doomcom->map = startmap;
+ doomcom->deathmatch = deathmatch;
+
+}
+
+void I_NetCmd(void)
+{
+ if (!netgame)
+ I_Error("I_NetCmd when not in netgame");
+ DPMIInt(doomcom->intnum);
+}
+
+int i_Vector;
+externdata_t *i_ExternData;
+boolean useexterndriver;
+
+//=========================================================================
+//
+// I_CheckExternDriver
+//
+// Checks to see if a vector, and an address for an external driver
+// have been passed.
+//=========================================================================
+
+void I_CheckExternDriver(void)
+{
+ int i;
+
+ if (!(i = M_CheckParm("-externdriver")))
+ {
+ return;
+ }
+ i_ExternData = (externdata_t *) atoi(myargv[i + 1]);
+ i_Vector = i_ExternData->vector;
+
+ useexterndriver = true;
+}
+
+//=========================================================================
+//
+// I_ReadExternDriver
+//
+// calls the external interrupt, which should then update i_ExternDriver
+//=========================================================================
+
+void I_ReadExternDriver(void)
+{
+ event_t ev;
+
+ if (useexterndriver)
+ {
+ DPMIInt(i_Vector);
+ }
+}
--- a/src/heretic/i_sound.c
+++ b/src/heretic/i_sound.c
@@ -1,391 +1,430 @@
-
-// I_SOUND.C
-
-#include <stdio.h>
-#include "doomdef.h"
-#include "dmx.h"
-#include "sounds.h"
-#include "i_sound.h"
-
-/*
-===============
-=
-= I_StartupTimer
-=
-===============
-*/
-
-int tsm_ID = -1;
-
-void I_StartupTimer (void)
-{
-#ifndef NOTIMER
- extern int I_TimerISR(void);
-
- tprintf("I_StartupTimer()\n",0);
- // installs master timer. Must be done before StartupTimer()!
- TSM_Install(SND_TICRATE);
- tsm_ID = TSM_NewService (I_TimerISR, 35, 255, 0); // max priority
- if (tsm_ID == -1)
- {
- I_Error("Can't register 35 Hz timer w/ DMX library");
- }
-#endif
-}
-
-void I_ShutdownTimer (void)
-{
- TSM_DelService(tsm_ID);
- TSM_Remove();
-}
-
-/*
- *
- * SOUND HEADER & DATA
- *
- *
- */
-
-// sound information
-#if 0
-const char *dnames[] = {"None",
- "PC_Speaker",
- "Adlib",
- "Sound_Blaster",
- "ProAudio_Spectrum16",
- "Gravis_Ultrasound",
- "MPU",
- "AWE32"
- };
-#endif
-
-const char snd_prefixen[] = { 'P', 'P', 'A', 'S', 'S', 'S', 'M',
- 'M', 'M', 'S' };
-
-int snd_Channels;
-int snd_DesiredMusicDevice, snd_DesiredSfxDevice;
-int snd_MusicDevice, // current music card # (index to dmxCodes)
- snd_SfxDevice, // current sfx card # (index to dmxCodes)
- snd_MaxVolume, // maximum volume for sound
- snd_MusicVolume; // maximum volume for music
-int dmxCodes[NUM_SCARDS]; // the dmx code for a given card
-
-int snd_SBport, snd_SBirq, snd_SBdma; // sound blaster variables
-int snd_Mport; // midi variables
-
-extern boolean snd_MusicAvail, // whether music is available
- snd_SfxAvail; // whether sfx are available
-
-void I_PauseSong(int handle)
-{
- MUS_PauseSong(handle);
-}
-
-void I_ResumeSong(int handle)
-{
- MUS_ResumeSong(handle);
-}
-
-void I_SetMusicVolume(int volume)
-{
- MUS_SetMasterVolume(volume*8);
-// snd_MusicVolume = volume;
-}
-
-void I_SetSfxVolume(int volume)
-{
- snd_MaxVolume = volume; // THROW AWAY?
-}
-
-/*
- *
- * SONG API
- *
- */
-
-int I_RegisterSong(void *data)
-{
- int rc = MUS_RegisterSong(data);
-#ifdef SNDDEBUG
- if (rc<0) printf("MUS_Reg() returned %d\n", rc);
-#endif
- return rc;
-}
-
-void I_UnRegisterSong(int handle)
-{
- int rc = MUS_UnregisterSong(handle);
-#ifdef SNDDEBUG
- if (rc < 0) printf("MUS_Unreg() returned %d\n", rc);
-#endif
-}
-
-int I_QrySongPlaying(int handle)
-{
- int rc = MUS_QrySongPlaying(handle);
-#ifdef SNDDEBUG
- if (rc < 0) printf("MUS_QrySP() returned %d\n", rc);
-#endif
- return rc;
-}
-
-// Stops a song. MUST be called before I_UnregisterSong().
-
-void I_StopSong(int handle)
-{
- int rc;
- rc = MUS_StopSong(handle);
-#ifdef SNDDEBUG
- if (rc < 0) printf("MUS_StopSong() returned %d\n", rc);
-#endif
- // Fucking kluge pause
- {
- int s;
- extern volatile int ticcount;
- for (s=ticcount ; ticcount - s < 10 ; );
- }
-}
-
-void I_PlaySong(int handle, boolean looping)
-{
- int rc;
- rc = MUS_ChainSong(handle, looping ? handle : -1);
-#ifdef SNDDEBUG
- if (rc < 0) printf("MUS_ChainSong() returned %d\n", rc);
-#endif
- rc = MUS_PlaySong(handle, snd_MusicVolume);
-#ifdef SNDDEBUG
- if (rc < 0) printf("MUS_PlaySong() returned %d\n", rc);
-#endif
-
-}
-
-/*
- *
- * SOUND FX API
- *
- */
-
-// Gets lump nums of the named sound. Returns pointer which will be
-// passed to I_StartSound() when you want to start an SFX. Must be
-// sure to pass this to UngetSoundEffect() so that they can be
-// freed!
-
-
-int I_GetSfxLumpNum(sfxinfo_t *sound)
-{
- char namebuf[9];
-
- if(sound->name == 0)
- return 0;
- if (sound->link) sound = sound->link;
-// sprintf(namebuf, "d%c%s", snd_prefixen[snd_SfxDevice], sound->name);
- return W_GetNumForName(sound->name);
-
-}
-
-int I_StartSound (int id, void *data, int vol, int sep, int pitch, int priority)
-{
-/*
- // hacks out certain PC sounds
- if (snd_SfxDevice == PC
- && (data == S_sfx[sfx_posact].data
- || data == S_sfx[sfx_bgact].data
- || data == S_sfx[sfx_dmact].data
- || data == S_sfx[sfx_dmpain].data
- || data == S_sfx[sfx_popain].data
- || data == S_sfx[sfx_sawidl].data)) return -1;
-
- else
- */
- return SFX_PlayPatch(data, pitch, sep, vol, 0, 0);
-
-}
-
-void I_StopSound(int handle)
-{
-// extern volatile long gDmaCount;
-// long waittocount;
- SFX_StopPatch(handle);
-// waittocount = gDmaCount + 2;
-// while (gDmaCount < waittocount) ;
-}
-
-int I_SoundIsPlaying(int handle)
-{
- return SFX_Playing(handle);
-}
-
-void I_UpdateSoundParams(int handle, int vol, int sep, int pitch)
-{
- SFX_SetOrigin(handle, pitch, sep, vol);
-}
-
-/*
- *
- * SOUND STARTUP STUFF
- *
- *
- */
-
-//
-// Why PC's Suck, Reason #8712
-//
-
-void I_sndArbitrateCards(void)
-{
- char tmp[160];
- boolean gus, adlib, pc, sb, midi;
- int i, rc, mputype, p, opltype, wait, dmxlump;
-
-// snd_MaxVolume = 127;
- //Damn you, Dave Taylor!
-
- snd_MusicDevice = snd_DesiredMusicDevice;
- snd_SfxDevice = snd_DesiredSfxDevice;
-
- // check command-line parameters- overrides config file
- //
- if (M_CheckParm("-nosound")) snd_MusicDevice = snd_SfxDevice = snd_none;
- if (M_CheckParm("-nosfx")) snd_SfxDevice = snd_none;
- if (M_CheckParm("-nomusic")) snd_MusicDevice = snd_none;
-
- if (snd_MusicDevice > snd_MPU && snd_MusicDevice <= snd_MPU3)
- snd_MusicDevice = snd_MPU;
- if (snd_MusicDevice == snd_SB)
- snd_MusicDevice = snd_Adlib;
- if (snd_MusicDevice == snd_PAS)
- snd_MusicDevice = snd_Adlib;
-
- // figure out what i've got to initialize
- //
- gus = snd_MusicDevice == snd_GUS || snd_SfxDevice == snd_GUS;
- sb = snd_SfxDevice == snd_SB || snd_MusicDevice == snd_SB;
- adlib = snd_MusicDevice == snd_Adlib ;
- pc = snd_SfxDevice == snd_PC;
- midi = snd_MusicDevice == snd_MPU;
-
- // initialize whatever i've got
- //
- if (gus)
- {
- if (GF1_Detect()) tprintf("Dude. The GUS ain't responding.\n",1);
- else
- {
- dmxlump = W_GetNumForName("dmxgus");
- GF1_SetMap(W_CacheLumpNum(dmxlump, PU_CACHE), lumpinfo[dmxlump].size);
- }
-
- }
- if (sb)
- {
- if(debugmode)
- {
- sprintf(tmp,"cfg p=0x%x, i=%d, d=%d\n",
- snd_SBport, snd_SBirq, snd_SBdma);
- tprintf(tmp,0);
- }
- if (SB_Detect(&snd_SBport, &snd_SBirq, &snd_SBdma, 0))
- {
- sprintf(tmp,"SB isn't responding at p=0x%x, i=%d, d=%d\n",
- snd_SBport, snd_SBirq, snd_SBdma);
- tprintf(tmp,0);
- }
- else SB_SetCard(snd_SBport, snd_SBirq, snd_SBdma);
-
- if(debugmode)
- {
- sprintf(tmp,"SB_Detect returned p=0x%x,i=%d,d=%d\n",
- snd_SBport, snd_SBirq, snd_SBdma);
- tprintf(tmp,0);
- }
- }
-
- if (adlib)
- {
- if (AL_Detect(&wait,0))
- tprintf("Dude. The Adlib isn't responding.\n",1);
- else
- AL_SetCard(wait, W_CacheLumpName("genmidi", PU_STATIC));
- }
-
- if (midi)
- {
- if (debugmode)
- {
- sprintf(tmp,"cfg p=0x%x\n", snd_Mport);
- tprintf(tmp,0);
- }
-
- if (MPU_Detect(&snd_Mport, &i))
- {
- sprintf(tmp,"The MPU-401 isn't reponding @ p=0x%x.\n", snd_Mport);
- tprintf(tmp,0);
- }
- else MPU_SetCard(snd_Mport);
- }
-
-}
-
-// inits all sound stuff
-
-void I_StartupSound (void)
-{
- char tmp[80];
- int rc, i;
-
- if (debugmode)
- tprintf("I_StartupSound: Hope you hear a pop.\n",1);
-
- // initialize dmxCodes[]
- dmxCodes[0] = 0;
- dmxCodes[snd_PC] = AHW_PC_SPEAKER;
- dmxCodes[snd_Adlib] = AHW_ADLIB;
- dmxCodes[snd_SB] = AHW_SOUND_BLASTER;
- dmxCodes[snd_PAS] = AHW_MEDIA_VISION;
- dmxCodes[snd_GUS] = AHW_ULTRA_SOUND;
- dmxCodes[snd_MPU] = AHW_MPU_401;
- dmxCodes[snd_AWE] = AHW_AWE32;
-
- // inits sound library timer stuff
- I_StartupTimer();
-
- // pick the sound cards i'm going to use
- //
- I_sndArbitrateCards();
-
- if (debugmode)
- {
- sprintf(tmp," Music device #%d & dmxCode=%d", snd_MusicDevice,
- dmxCodes[snd_MusicDevice]);
- tprintf(tmp,0);
- sprintf(tmp," Sfx device #%d & dmxCode=%d\n", snd_SfxDevice,
- dmxCodes[snd_SfxDevice]);
- tprintf(tmp,0);
- }
-
- // inits DMX sound library
- tprintf(" calling DMX_Init",0);
- rc = DMX_Init(SND_TICRATE, SND_MAXSONGS, dmxCodes[snd_MusicDevice],
- dmxCodes[snd_SfxDevice]);
-
- if (debugmode)
- {
- sprintf(tmp," DMX_Init() returned %d", rc);
- tprintf(tmp,0);
- }
-
-}
-
-// shuts down all sound stuff
-
-void I_ShutdownSound (void)
-{
- DMX_DeInit();
- I_ShutdownTimer();
-}
-
-void I_SetChannels(int channels)
-{
- WAV_PlayMode(channels, SND_SAMPLERATE);
-}
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
+
+// I_SOUND.C
+
+#include <stdio.h>
+#include "doomdef.h"
+#include "dmx.h"
+#include "sounds.h"
+#include "i_sound.h"
+
+/*
+===============
+=
+= I_StartupTimer
+=
+===============
+*/
+
+int tsm_ID = -1;
+
+void I_StartupTimer(void)
+{
+#ifndef NOTIMER
+ extern int I_TimerISR(void);
+
+ tprintf("I_StartupTimer()\n", 0);
+ // installs master timer. Must be done before StartupTimer()!
+ TSM_Install(SND_TICRATE);
+ tsm_ID = TSM_NewService(I_TimerISR, 35, 255, 0); // max priority
+ if (tsm_ID == -1)
+ {
+ I_Error("Can't register 35 Hz timer w/ DMX library");
+ }
+#endif
+}
+
+void I_ShutdownTimer(void)
+{
+ TSM_DelService(tsm_ID);
+ TSM_Remove();
+}
+
+/*
+ *
+ * SOUND HEADER & DATA
+ *
+ *
+ */
+
+// sound information
+#if 0
+const char *dnames[] = { "None",
+ "PC_Speaker",
+ "Adlib",
+ "Sound_Blaster",
+ "ProAudio_Spectrum16",
+ "Gravis_Ultrasound",
+ "MPU",
+ "AWE32"
+};
+#endif
+
+const char snd_prefixen[] = { 'P', 'P', 'A', 'S', 'S', 'S', 'M',
+ 'M', 'M', 'S'
+};
+
+int snd_Channels;
+int snd_DesiredMusicDevice, snd_DesiredSfxDevice;
+int snd_MusicDevice, // current music card # (index to dmxCodes)
+ snd_SfxDevice, // current sfx card # (index to dmxCodes)
+ snd_MaxVolume, // maximum volume for sound
+ snd_MusicVolume; // maximum volume for music
+int dmxCodes[NUM_SCARDS]; // the dmx code for a given card
+
+int snd_SBport, snd_SBirq, snd_SBdma; // sound blaster variables
+int snd_Mport; // midi variables
+
+extern boolean snd_MusicAvail, // whether music is available
+ snd_SfxAvail; // whether sfx are available
+
+void I_PauseSong(int handle)
+{
+ MUS_PauseSong(handle);
+}
+
+void I_ResumeSong(int handle)
+{
+ MUS_ResumeSong(handle);
+}
+
+void I_SetMusicVolume(int volume)
+{
+ MUS_SetMasterVolume(volume * 8);
+// snd_MusicVolume = volume;
+}
+
+void I_SetSfxVolume(int volume)
+{
+ snd_MaxVolume = volume; // THROW AWAY?
+}
+
+/*
+ *
+ * SONG API
+ *
+ */
+
+int I_RegisterSong(void *data)
+{
+ int rc = MUS_RegisterSong(data);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ printf("MUS_Reg() returned %d\n", rc);
+#endif
+ return rc;
+}
+
+void I_UnRegisterSong(int handle)
+{
+ int rc = MUS_UnregisterSong(handle);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ printf("MUS_Unreg() returned %d\n", rc);
+#endif
+}
+
+int I_QrySongPlaying(int handle)
+{
+ int rc = MUS_QrySongPlaying(handle);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ printf("MUS_QrySP() returned %d\n", rc);
+#endif
+ return rc;
+}
+
+// Stops a song. MUST be called before I_UnregisterSong().
+
+void I_StopSong(int handle)
+{
+ int rc;
+ rc = MUS_StopSong(handle);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ printf("MUS_StopSong() returned %d\n", rc);
+#endif
+ // Fucking kluge pause
+ {
+ int s;
+ extern volatile int ticcount;
+ for (s = ticcount; ticcount - s < 10;);
+ }
+}
+
+void I_PlaySong(int handle, boolean looping)
+{
+ int rc;
+ rc = MUS_ChainSong(handle, looping ? handle : -1);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ printf("MUS_ChainSong() returned %d\n", rc);
+#endif
+ rc = MUS_PlaySong(handle, snd_MusicVolume);
+#ifdef SNDDEBUG
+ if (rc < 0)
+ printf("MUS_PlaySong() returned %d\n", rc);
+#endif
+
+}
+
+/*
+ *
+ * SOUND FX API
+ *
+ */
+
+// Gets lump nums of the named sound. Returns pointer which will be
+// passed to I_StartSound() when you want to start an SFX. Must be
+// sure to pass this to UngetSoundEffect() so that they can be
+// freed!
+
+
+int I_GetSfxLumpNum(sfxinfo_t * sound)
+{
+ char namebuf[9];
+
+ if (sound->name == 0)
+ return 0;
+ if (sound->link)
+ sound = sound->link;
+// sprintf(namebuf, "d%c%s", snd_prefixen[snd_SfxDevice], sound->name);
+ return W_GetNumForName(sound->name);
+
+}
+
+int I_StartSound(int id, void *data, int vol, int sep, int pitch,
+ int priority)
+{
+/*
+ // hacks out certain PC sounds
+ if (snd_SfxDevice == PC
+ && (data == S_sfx[sfx_posact].data
+ || data == S_sfx[sfx_bgact].data
+ || data == S_sfx[sfx_dmact].data
+ || data == S_sfx[sfx_dmpain].data
+ || data == S_sfx[sfx_popain].data
+ || data == S_sfx[sfx_sawidl].data)) return -1;
+
+ else
+ */
+ return SFX_PlayPatch(data, pitch, sep, vol, 0, 0);
+
+}
+
+void I_StopSound(int handle)
+{
+// extern volatile long gDmaCount;
+// long waittocount;
+ SFX_StopPatch(handle);
+// waittocount = gDmaCount + 2;
+// while (gDmaCount < waittocount) ;
+}
+
+int I_SoundIsPlaying(int handle)
+{
+ return SFX_Playing(handle);
+}
+
+void I_UpdateSoundParams(int handle, int vol, int sep, int pitch)
+{
+ SFX_SetOrigin(handle, pitch, sep, vol);
+}
+
+/*
+ *
+ * SOUND STARTUP STUFF
+ *
+ *
+ */
+
+//
+// Why PC's Suck, Reason #8712
+//
+
+void I_sndArbitrateCards(void)
+{
+ char tmp[160];
+ boolean gus, adlib, pc, sb, midi;
+ int i, rc, mputype, p, opltype, wait, dmxlump;
+
+// snd_MaxVolume = 127;
+ //Damn you, Dave Taylor!
+
+ snd_MusicDevice = snd_DesiredMusicDevice;
+ snd_SfxDevice = snd_DesiredSfxDevice;
+
+ // check command-line parameters- overrides config file
+ //
+ if (M_CheckParm("-nosound"))
+ snd_MusicDevice = snd_SfxDevice = snd_none;
+ if (M_CheckParm("-nosfx"))
+ snd_SfxDevice = snd_none;
+ if (M_CheckParm("-nomusic"))
+ snd_MusicDevice = snd_none;
+
+ if (snd_MusicDevice > snd_MPU && snd_MusicDevice <= snd_MPU3)
+ snd_MusicDevice = snd_MPU;
+ if (snd_MusicDevice == snd_SB)
+ snd_MusicDevice = snd_Adlib;
+ if (snd_MusicDevice == snd_PAS)
+ snd_MusicDevice = snd_Adlib;
+
+ // figure out what i've got to initialize
+ //
+ gus = snd_MusicDevice == snd_GUS || snd_SfxDevice == snd_GUS;
+ sb = snd_SfxDevice == snd_SB || snd_MusicDevice == snd_SB;
+ adlib = snd_MusicDevice == snd_Adlib;
+ pc = snd_SfxDevice == snd_PC;
+ midi = snd_MusicDevice == snd_MPU;
+
+ // initialize whatever i've got
+ //
+ if (gus)
+ {
+ if (GF1_Detect())
+ tprintf("Dude. The GUS ain't responding.\n", 1);
+ else
+ {
+ dmxlump = W_GetNumForName("dmxgus");
+ GF1_SetMap(W_CacheLumpNum(dmxlump, PU_CACHE),
+ lumpinfo[dmxlump].size);
+ }
+
+ }
+ if (sb)
+ {
+ if (debugmode)
+ {
+ sprintf(tmp, "cfg p=0x%x, i=%d, d=%d\n",
+ snd_SBport, snd_SBirq, snd_SBdma);
+ tprintf(tmp, 0);
+ }
+ if (SB_Detect(&snd_SBport, &snd_SBirq, &snd_SBdma, 0))
+ {
+ sprintf(tmp, "SB isn't responding at p=0x%x, i=%d, d=%d\n",
+ snd_SBport, snd_SBirq, snd_SBdma);
+ tprintf(tmp, 0);
+ }
+ else
+ SB_SetCard(snd_SBport, snd_SBirq, snd_SBdma);
+
+ if (debugmode)
+ {
+ sprintf(tmp, "SB_Detect returned p=0x%x,i=%d,d=%d\n",
+ snd_SBport, snd_SBirq, snd_SBdma);
+ tprintf(tmp, 0);
+ }
+ }
+
+ if (adlib)
+ {
+ if (AL_Detect(&wait, 0))
+ tprintf("Dude. The Adlib isn't responding.\n", 1);
+ else
+ AL_SetCard(wait, W_CacheLumpName("genmidi", PU_STATIC));
+ }
+
+ if (midi)
+ {
+ if (debugmode)
+ {
+ sprintf(tmp, "cfg p=0x%x\n", snd_Mport);
+ tprintf(tmp, 0);
+ }
+
+ if (MPU_Detect(&snd_Mport, &i))
+ {
+ sprintf(tmp, "The MPU-401 isn't reponding @ p=0x%x.\n",
+ snd_Mport);
+ tprintf(tmp, 0);
+ }
+ else
+ MPU_SetCard(snd_Mport);
+ }
+
+}
+
+// inits all sound stuff
+
+void I_StartupSound(void)
+{
+ char tmp[80];
+ int rc, i;
+
+ if (debugmode)
+ tprintf("I_StartupSound: Hope you hear a pop.\n", 1);
+
+ // initialize dmxCodes[]
+ dmxCodes[0] = 0;
+ dmxCodes[snd_PC] = AHW_PC_SPEAKER;
+ dmxCodes[snd_Adlib] = AHW_ADLIB;
+ dmxCodes[snd_SB] = AHW_SOUND_BLASTER;
+ dmxCodes[snd_PAS] = AHW_MEDIA_VISION;
+ dmxCodes[snd_GUS] = AHW_ULTRA_SOUND;
+ dmxCodes[snd_MPU] = AHW_MPU_401;
+ dmxCodes[snd_AWE] = AHW_AWE32;
+
+ // inits sound library timer stuff
+ I_StartupTimer();
+
+ // pick the sound cards i'm going to use
+ //
+ I_sndArbitrateCards();
+
+ if (debugmode)
+ {
+ sprintf(tmp, " Music device #%d & dmxCode=%d", snd_MusicDevice,
+ dmxCodes[snd_MusicDevice]);
+ tprintf(tmp, 0);
+ sprintf(tmp, " Sfx device #%d & dmxCode=%d\n", snd_SfxDevice,
+ dmxCodes[snd_SfxDevice]);
+ tprintf(tmp, 0);
+ }
+
+ // inits DMX sound library
+ tprintf(" calling DMX_Init", 0);
+ rc = DMX_Init(SND_TICRATE, SND_MAXSONGS, dmxCodes[snd_MusicDevice],
+ dmxCodes[snd_SfxDevice]);
+
+ if (debugmode)
+ {
+ sprintf(tmp, " DMX_Init() returned %d", rc);
+ tprintf(tmp, 0);
+ }
+
+}
+
+// shuts down all sound stuff
+
+void I_ShutdownSound(void)
+{
+ DMX_DeInit();
+ I_ShutdownTimer();
+}
+
+void I_SetChannels(int channels)
+{
+ WAV_PlayMode(channels, SND_SAMPLERATE);
+}
--- a/src/heretic/i_sound.h
+++ b/src/heretic/i_sound.h
@@ -1,23 +1,45 @@
-#ifndef __SOUND__
-#define __SOUND__
-
-#define SND_TICRATE 140 // tic rate for updating sound
-#define SND_MAXSONGS 40 // max number of songs in game
-#define SND_SAMPLERATE 11025 // sample rate of sound effects
-
-typedef enum
-{
- snd_none,
- snd_PC,
- snd_Adlib,
- snd_SB,
- snd_PAS,
- snd_GUS,
- snd_MPU,
- snd_MPU2,
- snd_MPU3,
- snd_AWE,
- NUM_SCARDS
-} cardenum_t;
-
-#endif
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
+#ifndef __SOUND__
+#define __SOUND__
+
+#define SND_TICRATE 140 // tic rate for updating sound
+#define SND_MAXSONGS 40 // max number of songs in game
+#define SND_SAMPLERATE 11025 // sample rate of sound effects
+
+typedef enum
+{
+ snd_none,
+ snd_PC,
+ snd_Adlib,
+ snd_SB,
+ snd_PAS,
+ snd_GUS,
+ snd_MPU,
+ snd_MPU2,
+ snd_MPU3,
+ snd_AWE,
+ NUM_SCARDS
+} cardenum_t;
+
+#endif
--- a/src/heretic/in_lude.c
+++ b/src/heretic/in_lude.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
/*
========================
=
@@ -11,9 +33,9 @@
typedef enum
{
- SINGLE,
- COOPERATIVE,
- DEATHMATCH
+ SINGLE,
+ COOPERATIVE,
+ DEATHMATCH
} gametype_t;
// Public functions
@@ -57,7 +79,7 @@
static int minutes;
static int seconds;
-static int slaughterboy; // in DM, the player with the most kills
+static int slaughterboy; // in DM, the player with the most kills
static int killPercent[MAXPLAYERS];
static int bonusPercent[MAXPLAYERS];
@@ -86,45 +108,44 @@
typedef struct
{
- int x;
- int y;
+ int x;
+ int y;
} yahpt_t;
-static yahpt_t YAHspot[3][9] =
-{
- {
- { 172, 78 },
- { 86, 90 },
- { 73, 66 },
- { 159, 95 },
- { 148, 126 },
- { 132, 54 },
- { 131, 74 },
- { 208, 138 },
- { 52, 101 }
- },
- {
- { 218, 57 },
- { 137, 81 },
- { 155, 124 },
- { 171, 68 },
- { 250, 86 },
- { 136, 98 },
- { 203, 90 },
- { 220, 140 },
- { 279, 106 }
- },
- {
- { 86, 99 },
- { 124, 103 },
- { 154, 79 },
- { 202, 83 },
- { 178, 59 },
- { 142, 58 },
- { 219, 66 },
- { 247, 57 },
- { 107, 80 }
- }
+static yahpt_t YAHspot[3][9] = {
+ {
+ {172, 78},
+ {86, 90},
+ {73, 66},
+ {159, 95},
+ {148, 126},
+ {132, 54},
+ {131, 74},
+ {208, 138},
+ {52, 101}
+ },
+ {
+ {218, 57},
+ {137, 81},
+ {155, 124},
+ {171, 68},
+ {250, 86},
+ {136, 98},
+ {203, 90},
+ {220, 140},
+ {279, 106}
+ },
+ {
+ {86, 99},
+ {124, 103},
+ {154, 79},
+ {202, 83},
+ {178, 59},
+ {142, 58},
+ {219, 66},
+ {247, 57},
+ {107, 80}
+ }
};
//========================================================================
@@ -133,20 +154,20 @@
//
//========================================================================
-extern void AM_Stop (void);
+extern void AM_Stop(void);
void IN_Start(void)
{
- I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));
- IN_LoadPics();
- IN_InitStats();
- intermission = true;
- interstate = -1;
- skipintermission = false;
- intertime = 0;
- oldintertime = 0;
- AM_Stop();
- S_StartSong(mus_intr, true);
+ I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));
+ IN_LoadPics();
+ IN_InitStats();
+ intermission = true;
+ interstate = -1;
+ skipintermission = false;
+ intertime = 0;
+ oldintertime = 0;
+ AM_Stop();
+ S_StartSong(mus_intr, true);
}
//========================================================================
@@ -157,11 +178,11 @@
void IN_WaitStop(void)
{
- if(!--cnt)
- {
- IN_Stop();
- G_WorldDone();
- }
+ if (!--cnt)
+ {
+ IN_Stop();
+ G_WorldDone();
+ }
}
//========================================================================
@@ -172,10 +193,10 @@
void IN_Stop(void)
{
- intermission = false;
- IN_UnloadPics();
- SB_state = -1;
- BorderNeedRefresh = true;
+ intermission = false;
+ IN_UnloadPics();
+ SB_state = -1;
+ BorderNeedRefresh = true;
}
//========================================================================
@@ -187,92 +208,93 @@
void IN_InitStats(void)
{
- int i;
- int j;
- signed int slaughterfrags;
- int posnum;
- int slaughtercount;
- int playercount;
+ int i;
+ int j;
+ signed int slaughterfrags;
+ int posnum;
+ int slaughtercount;
+ int playercount;
- if(!netgame)
- {
- gametype = SINGLE;
- time = leveltime/35;
- hours = time/3600;
- time -= hours*3600;
- minutes = time/60;
- time -= minutes*60;
- seconds = time;
- }
- else if(netgame && !deathmatch)
- {
- gametype = COOPERATIVE;
- memset(killPercent, 0, MAXPLAYERS*sizeof(int));
- memset(bonusPercent, 0, MAXPLAYERS*sizeof(int));
- memset(secretPercent, 0, MAXPLAYERS*sizeof(int));
- for(i=0; i<MAXPLAYERS; i++)
- {
- if(playeringame[i])
- {
- if(totalkills)
- {
- killPercent[i] = players[i].killcount*100/totalkills;
- }
- if(totalitems)
- {
- bonusPercent[i] = players[i].itemcount*100/totalitems;
- }
- if(totalsecret)
- {
- secretPercent[i] = players[i].secretcount*100/totalsecret;
- }
- }
- }
- }
- else
- {
- gametype = DEATHMATCH;
- slaughterboy = 0;
- slaughterfrags = -9999;
- posnum = 0;
- playercount = 0;
- slaughtercount = 0;
- for(i=0; i<MAXPLAYERS; i++)
- {
- totalFrags[i] = 0;
- if(playeringame[i])
- {
- playercount++;
- for(j=0; j<MAXPLAYERS; j++)
- {
- if(playeringame[j])
- {
- totalFrags[i] += players[i].frags[j];
- }
- }
- dSlideX[i] = (43*posnum*FRACUNIT)/20;
- dSlideY[i] = (36*posnum*FRACUNIT)/20;
- posnum++;
- }
- if(totalFrags[i] > slaughterfrags)
- {
- slaughterboy = 1<<i;
- slaughterfrags = totalFrags[i];
- slaughtercount = 1;
- }
- else if(totalFrags[i] == slaughterfrags)
- {
- slaughterboy |= 1<<i;
- slaughtercount++;
- }
- }
- if(playercount == slaughtercount)
- { // don't do the slaughter stuff if everyone is equal
- slaughterboy = 0;
- }
- }
-}
+ if (!netgame)
+ {
+ gametype = SINGLE;
+ time = leveltime / 35;
+ hours = time / 3600;
+ time -= hours * 3600;
+ minutes = time / 60;
+ time -= minutes * 60;
+ seconds = time;
+ }
+ else if (netgame && !deathmatch)
+ {
+ gametype = COOPERATIVE;
+ memset(killPercent, 0, MAXPLAYERS * sizeof(int));
+ memset(bonusPercent, 0, MAXPLAYERS * sizeof(int));
+ memset(secretPercent, 0, MAXPLAYERS * sizeof(int));
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (playeringame[i])
+ {
+ if (totalkills)
+ {
+ killPercent[i] = players[i].killcount * 100 / totalkills;
+ }
+ if (totalitems)
+ {
+ bonusPercent[i] = players[i].itemcount * 100 / totalitems;
+ }
+ if (totalsecret)
+ {
+ secretPercent[i] =
+ players[i].secretcount * 100 / totalsecret;
+ }
+ }
+ }
+ }
+ else
+ {
+ gametype = DEATHMATCH;
+ slaughterboy = 0;
+ slaughterfrags = -9999;
+ posnum = 0;
+ playercount = 0;
+ slaughtercount = 0;
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ totalFrags[i] = 0;
+ if (playeringame[i])
+ {
+ playercount++;
+ for (j = 0; j < MAXPLAYERS; j++)
+ {
+ if (playeringame[j])
+ {
+ totalFrags[i] += players[i].frags[j];
+ }
+ }
+ dSlideX[i] = (43 * posnum * FRACUNIT) / 20;
+ dSlideY[i] = (36 * posnum * FRACUNIT) / 20;
+ posnum++;
+ }
+ if (totalFrags[i] > slaughterfrags)
+ {
+ slaughterboy = 1 << i;
+ slaughterfrags = totalFrags[i];
+ slaughtercount = 1;
+ }
+ else if (totalFrags[i] == slaughterfrags)
+ {
+ slaughterboy |= 1 << i;
+ slaughtercount++;
+ }
+ }
+ if (playercount == slaughtercount)
+ { // don't do the slaughter stuff if everyone is equal
+ slaughterboy = 0;
+ }
+ }
+}
//========================================================================
//
@@ -282,36 +304,36 @@
void IN_LoadPics(void)
{
- int i;
+ int i;
- switch(gameepisode)
- {
- case 1:
- patchINTERPIC = W_CacheLumpName("MAPE1", PU_STATIC);
- break;
- case 2:
- patchINTERPIC = W_CacheLumpName("MAPE2", PU_STATIC);
- break;
- case 3:
- patchINTERPIC = W_CacheLumpName("MAPE3", PU_STATIC);
- break;
- default:
- break;
- }
- patchBEENTHERE = W_CacheLumpName("IN_X", PU_STATIC);
- patchGOINGTHERE = W_CacheLumpName("IN_YAH", PU_STATIC);
- FontBLumpBase = W_GetNumForName("FONTB16");
- for(i=0; i<10; i++)
- {
- FontBNumbers[i] = W_CacheLumpNum(FontBLumpBase+i, PU_STATIC);
- }
- FontBLump = W_GetNumForName("FONTB_S")+1;
- FontBNegative = W_CacheLumpName("FONTB13", PU_STATIC);
+ switch (gameepisode)
+ {
+ case 1:
+ patchINTERPIC = W_CacheLumpName("MAPE1", PU_STATIC);
+ break;
+ case 2:
+ patchINTERPIC = W_CacheLumpName("MAPE2", PU_STATIC);
+ break;
+ case 3:
+ patchINTERPIC = W_CacheLumpName("MAPE3", PU_STATIC);
+ break;
+ default:
+ break;
+ }
+ patchBEENTHERE = W_CacheLumpName("IN_X", PU_STATIC);
+ patchGOINGTHERE = W_CacheLumpName("IN_YAH", PU_STATIC);
+ FontBLumpBase = W_GetNumForName("FONTB16");
+ for (i = 0; i < 10; i++)
+ {
+ FontBNumbers[i] = W_CacheLumpNum(FontBLumpBase + i, PU_STATIC);
+ }
+ FontBLump = W_GetNumForName("FONTB_S") + 1;
+ FontBNegative = W_CacheLumpName("FONTB13", PU_STATIC);
- FontBSlash = W_CacheLumpName("FONTB15", PU_STATIC);
- FontBPercent = W_CacheLumpName("FONTB05", PU_STATIC);
- patchFaceOkayBase = W_GetNumForName("FACEA0");
- patchFaceDeadBase = W_GetNumForName("FACEB0");
+ FontBSlash = W_CacheLumpName("FONTB15", PU_STATIC);
+ FontBPercent = W_CacheLumpName("FONTB05", PU_STATIC);
+ patchFaceOkayBase = W_GetNumForName("FACEA0");
+ patchFaceDeadBase = W_GetNumForName("FACEB0");
}
//========================================================================
@@ -322,21 +344,21 @@
void IN_UnloadPics(void)
{
- int i;
+ int i;
- if(patchINTERPIC)
- {
- Z_ChangeTag(patchINTERPIC, PU_CACHE);
- }
- Z_ChangeTag(patchBEENTHERE, PU_CACHE);
- Z_ChangeTag(patchGOINGTHERE, PU_CACHE);
- for(i=0; i<10; i++)
- {
- Z_ChangeTag(FontBNumbers[i], PU_CACHE);
- }
- Z_ChangeTag(FontBNegative, PU_CACHE);
- Z_ChangeTag(FontBSlash, PU_CACHE);
- Z_ChangeTag(FontBPercent, PU_CACHE);
+ if (patchINTERPIC)
+ {
+ Z_ChangeTag(patchINTERPIC, PU_CACHE);
+ }
+ Z_ChangeTag(patchBEENTHERE, PU_CACHE);
+ Z_ChangeTag(patchGOINGTHERE, PU_CACHE);
+ for (i = 0; i < 10; i++)
+ {
+ Z_ChangeTag(FontBNumbers[i], PU_CACHE);
+ }
+ Z_ChangeTag(FontBNegative, PU_CACHE);
+ Z_ChangeTag(FontBSlash, PU_CACHE);
+ Z_ChangeTag(FontBPercent, PU_CACHE);
}
//========================================================================
@@ -347,67 +369,67 @@
void IN_Ticker(void)
{
- if(!intermission)
- {
- return;
- }
- if(interstate == 3)
- {
- IN_WaitStop();
- return;
- }
- IN_CheckForSkip();
- intertime++;
- if(oldintertime < intertime)
- {
- interstate++;
- if(gameepisode > 3 && interstate >= 1)
- { // Extended Wad levels: skip directly to the next level
- interstate = 3;
- }
- switch(interstate)
- {
- case 0:
- oldintertime = intertime+300;
- if(gameepisode > 3)
- {
- oldintertime = intertime+1200;
- }
- break;
- case 1:
- oldintertime = intertime+200;
- break;
- case 2:
- oldintertime = MAXINT;
- break;
- case 3:
- cnt = 10;
- break;
- default:
- break;
- }
- }
- if(skipintermission)
- {
- if(interstate == 0 && intertime < 150)
- {
- intertime = 150;
- skipintermission = false;
- return;
- }
- else if(interstate < 2 && gameepisode < 4)
- {
- interstate = 2;
- skipintermission = false;
- S_StartSound(NULL, sfx_dorcls);
- return;
- }
- interstate = 3;
- cnt = 10;
- skipintermission = false;
- S_StartSound(NULL, sfx_dorcls);
- }
-}
+ if (!intermission)
+ {
+ return;
+ }
+ if (interstate == 3)
+ {
+ IN_WaitStop();
+ return;
+ }
+ IN_CheckForSkip();
+ intertime++;
+ if (oldintertime < intertime)
+ {
+ interstate++;
+ if (gameepisode > 3 && interstate >= 1)
+ { // Extended Wad levels: skip directly to the next level
+ interstate = 3;
+ }
+ switch (interstate)
+ {
+ case 0:
+ oldintertime = intertime + 300;
+ if (gameepisode > 3)
+ {
+ oldintertime = intertime + 1200;
+ }
+ break;
+ case 1:
+ oldintertime = intertime + 200;
+ break;
+ case 2:
+ oldintertime = MAXINT;
+ break;
+ case 3:
+ cnt = 10;
+ break;
+ default:
+ break;
+ }
+ }
+ if (skipintermission)
+ {
+ if (interstate == 0 && intertime < 150)
+ {
+ intertime = 150;
+ skipintermission = false;
+ return;
+ }
+ else if (interstate < 2 && gameepisode < 4)
+ {
+ interstate = 2;
+ skipintermission = false;
+ S_StartSound(NULL, sfx_dorcls);
+ return;
+ }
+ interstate = 3;
+ cnt = 10;
+ skipintermission = false;
+ S_StartSound(NULL, sfx_dorcls);
+ }
+}
//========================================================================
//
@@ -418,40 +440,40 @@
void IN_CheckForSkip(void)
{
- int i;
- player_t *player;
+ int i;
+ player_t *player;
- for (i=0, player = players ; i<MAXPLAYERS ; i++, player++)
- {
- if (playeringame[i])
- {
- if (player->cmd.buttons&BT_ATTACK)
- {
- if (!player->attackdown)
- {
- skipintermission = 1;
- }
- player->attackdown = true;
- }
- else
- {
- player->attackdown = false;
- }
- if (player->cmd.buttons&BT_USE)
- {
- if (!player->usedown)
- {
- skipintermission = 1;
- }
- player->usedown = true;
- }
- else
- {
- player->usedown = false;
- }
- }
- }
-}
+ for (i = 0, player = players; i < MAXPLAYERS; i++, player++)
+ {
+ if (playeringame[i])
+ {
+ if (player->cmd.buttons & BT_ATTACK)
+ {
+ if (!player->attackdown)
+ {
+ skipintermission = 1;
+ }
+ player->attackdown = true;
+ }
+ else
+ {
+ player->attackdown = false;
+ }
+ if (player->cmd.buttons & BT_USE)
+ {
+ if (!player->usedown)
+ {
+ skipintermission = 1;
+ }
+ player->usedown = true;
+ }
+ else
+ {
+ player->usedown = false;
+ }
+ }
+ }
+}
//========================================================================
//
@@ -461,63 +483,63 @@
void IN_Drawer(void)
{
- static int oldinterstate;
+ static int oldinterstate;
- if(!intermission)
- {
- return;
- }
- if(interstate == 3)
- {
- return;
- }
- UpdateState |= I_FULLSCRN;
- if(oldinterstate != 2 && interstate == 2)
- {
- S_StartSound(NULL, sfx_pstop);
- }
- oldinterstate = interstate;
- switch(interstate)
- {
- case 0: // draw stats
- IN_DrawStatBack();
- switch(gametype)
- {
- case SINGLE:
- IN_DrawSingleStats();
- break;
- case COOPERATIVE:
- IN_DrawCoopStats();
- break;
- case DEATHMATCH:
- IN_DrawDMStats();
- break;
- }
- break;
- case 1: // leaving old level
- if(gameepisode < 4)
- {
- V_DrawPatch(0, 0, patchINTERPIC);
- IN_DrawOldLevel();
- }
- break;
- case 2: // going to the next level
- if(gameepisode < 4)
- {
- V_DrawPatch(0, 0, patchINTERPIC);
- IN_DrawYAH();
- }
- break;
- case 3: // waiting before going to the next level
- if(gameepisode < 4)
- {
- V_DrawPatch(0, 0, patchINTERPIC);
- }
- break;
- default:
- I_Error("IN_lude: Intermission state out of range.\n");
- break;
- }
+ if (!intermission)
+ {
+ return;
+ }
+ if (interstate == 3)
+ {
+ return;
+ }
+ UpdateState |= I_FULLSCRN;
+ if (oldinterstate != 2 && interstate == 2)
+ {
+ S_StartSound(NULL, sfx_pstop);
+ }
+ oldinterstate = interstate;
+ switch (interstate)
+ {
+ case 0: // draw stats
+ IN_DrawStatBack();
+ switch (gametype)
+ {
+ case SINGLE:
+ IN_DrawSingleStats();
+ break;
+ case COOPERATIVE:
+ IN_DrawCoopStats();
+ break;
+ case DEATHMATCH:
+ IN_DrawDMStats();
+ break;
+ }
+ break;
+ case 1: // leaving old level
+ if (gameepisode < 4)
+ {
+ V_DrawPatch(0, 0, patchINTERPIC);
+ IN_DrawOldLevel();
+ }
+ break;
+ case 2: // going to the next level
+ if (gameepisode < 4)
+ {
+ V_DrawPatch(0, 0, patchINTERPIC);
+ IN_DrawYAH();
+ }
+ break;
+ case 3: // waiting before going to the next level
+ if (gameepisode < 4)
+ {
+ V_DrawPatch(0, 0, patchINTERPIC);
+ }
+ break;
+ default:
+ I_Error("IN_lude: Intermission state out of range.\n");
+ break;
+ }
}
//========================================================================
@@ -528,28 +550,28 @@
void IN_DrawStatBack(void)
{
- int x;
- int y;
+ int x;
+ int y;
- byte *src;
- byte *dest;
+ byte *src;
+ byte *dest;
- src = W_CacheLumpName ("FLOOR16", PU_CACHE);
- dest = screen;
+ src = W_CacheLumpName("FLOOR16", PU_CACHE);
+ dest = screen;
- for (y=0 ; y<SCREENHEIGHT ; y++)
- {
- for (x=0 ; x<SCREENWIDTH/64 ; x++)
- {
- memcpy (dest, src+((y&63)<<6), 64);
- dest += 64;
- }
- if (SCREENWIDTH&63)
- {
- memcpy (dest, src+((y&63)<<6), SCREENWIDTH&63);
- dest += (SCREENWIDTH&63);
- }
- }
+ for (y = 0; y < SCREENHEIGHT; y++)
+ {
+ for (x = 0; x < SCREENWIDTH / 64; x++)
+ {
+ memcpy(dest, src + ((y & 63) << 6), 64);
+ dest += 64;
+ }
+ if (SCREENWIDTH & 63)
+ {
+ memcpy(dest, src + ((y & 63) << 6), SCREENWIDTH & 63);
+ dest += (SCREENWIDTH & 63);
+ }
+ }
}
//========================================================================
@@ -560,45 +582,47 @@
void IN_DrawOldLevel(void)
{
- int i;
- int x;
+ int i;
+ int x;
- x = 160-MN_TextBWidth(LevelNames[(gameepisode-1)*9+prevmap-1]+7)/2;
- IN_DrTextB(LevelNames[(gameepisode-1)*9+prevmap-1]+7, x, 3);
- x = 160-MN_TextAWidth("FINISHED")/2;
- MN_DrTextA("FINISHED", x, 25);
+ x = 160 - MN_TextBWidth(LevelNames[(gameepisode - 1) * 9 + prevmap - 1] +
+ 7) / 2;
+ IN_DrTextB(LevelNames[(gameepisode - 1) * 9 + prevmap - 1] + 7, x, 3);
+ x = 160 - MN_TextAWidth("FINISHED") / 2;
+ MN_DrTextA("FINISHED", x, 25);
- if(prevmap == 9)
- {
- for(i=0; i<gamemap-1; i++)
- {
- V_DrawPatch(YAHspot[gameepisode-1][i].x, YAHspot[gameepisode-1][i].y,
- patchBEENTHERE);
- }
- if(!(intertime&16))
- {
- V_DrawPatch(YAHspot[gameepisode-1][8].x, YAHspot[gameepisode-1][8].y,
- patchBEENTHERE);
- }
- }
- else
- {
- for(i=0; i<prevmap-1; i++)
- {
- V_DrawPatch(YAHspot[gameepisode-1][i].x, YAHspot[gameepisode-1][i].y,
- patchBEENTHERE);
- }
- if(players[consoleplayer].didsecret)
- {
- V_DrawPatch(YAHspot[gameepisode-1][8].x, YAHspot[gameepisode-1][8].y,
- patchBEENTHERE);
- }
- if(!(intertime&16))
- {
- V_DrawPatch(YAHspot[gameepisode-1][prevmap-1].x, YAHspot[gameepisode-1][prevmap-1].y,
- patchBEENTHERE);
- }
- }
+ if (prevmap == 9)
+ {
+ for (i = 0; i < gamemap - 1; i++)
+ {
+ V_DrawPatch(YAHspot[gameepisode - 1][i].x,
+ YAHspot[gameepisode - 1][i].y, patchBEENTHERE);
+ }
+ if (!(intertime & 16))
+ {
+ V_DrawPatch(YAHspot[gameepisode - 1][8].x,
+ YAHspot[gameepisode - 1][8].y, patchBEENTHERE);
+ }
+ }
+ else
+ {
+ for (i = 0; i < prevmap - 1; i++)
+ {
+ V_DrawPatch(YAHspot[gameepisode - 1][i].x,
+ YAHspot[gameepisode - 1][i].y, patchBEENTHERE);
+ }
+ if (players[consoleplayer].didsecret)
+ {
+ V_DrawPatch(YAHspot[gameepisode - 1][8].x,
+ YAHspot[gameepisode - 1][8].y, patchBEENTHERE);
+ }
+ if (!(intertime & 16))
+ {
+ V_DrawPatch(YAHspot[gameepisode - 1][prevmap - 1].x,
+ YAHspot[gameepisode - 1][prevmap - 1].y,
+ patchBEENTHERE);
+ }
+ }
}
//========================================================================
@@ -609,33 +633,34 @@
void IN_DrawYAH(void)
{
- int i;
- int x;
+ int i;
+ int x;
- x = 160-MN_TextAWidth("NOW ENTERING:")/2;
- MN_DrTextA("NOW ENTERING:", x, 10);
- x = 160-MN_TextBWidth(LevelNames[(gameepisode-1)*9+gamemap-1]+7)/2;
- IN_DrTextB(LevelNames[(gameepisode-1)*9+gamemap-1]+7, x, 20);
+ x = 160 - MN_TextAWidth("NOW ENTERING:") / 2;
+ MN_DrTextA("NOW ENTERING:", x, 10);
+ x = 160 - MN_TextBWidth(LevelNames[(gameepisode - 1) * 9 + gamemap - 1] +
+ 7) / 2;
+ IN_DrTextB(LevelNames[(gameepisode - 1) * 9 + gamemap - 1] + 7, x, 20);
- if(prevmap == 9)
- {
- prevmap = gamemap-1;
- }
- for(i=0; i<prevmap; i++)
- {
- V_DrawPatch(YAHspot[gameepisode-1][i].x, YAHspot[gameepisode-1][i].y,
- patchBEENTHERE);
- }
- if(players[consoleplayer].didsecret)
- {
- V_DrawPatch(YAHspot[gameepisode-1][8].x, YAHspot[gameepisode-1][8].y,
- patchBEENTHERE);
- }
- if(!(intertime&16) || interstate == 3)
- { // draw the destination 'X'
- V_DrawPatch(YAHspot[gameepisode-1][gamemap-1].x,
- YAHspot[gameepisode-1][gamemap-1].y, patchGOINGTHERE);
- }
+ if (prevmap == 9)
+ {
+ prevmap = gamemap - 1;
+ }
+ for (i = 0; i < prevmap; i++)
+ {
+ V_DrawPatch(YAHspot[gameepisode - 1][i].x,
+ YAHspot[gameepisode - 1][i].y, patchBEENTHERE);
+ }
+ if (players[consoleplayer].didsecret)
+ {
+ V_DrawPatch(YAHspot[gameepisode - 1][8].x,
+ YAHspot[gameepisode - 1][8].y, patchBEENTHERE);
+ }
+ if (!(intertime & 16) || interstate == 3)
+ { // draw the destination 'X'
+ V_DrawPatch(YAHspot[gameepisode - 1][gamemap - 1].x,
+ YAHspot[gameepisode - 1][gamemap - 1].y, patchGOINGTHERE);
+ }
}
//========================================================================
@@ -646,78 +671,82 @@
void IN_DrawSingleStats(void)
{
- int x;
- static int sounds;
+ int x;
+ static int sounds;
- IN_DrTextB("KILLS", 50, 65);
- IN_DrTextB("ITEMS", 50, 90);
- IN_DrTextB("SECRETS", 50, 115);
+ IN_DrTextB("KILLS", 50, 65);
+ IN_DrTextB("ITEMS", 50, 90);
+ IN_DrTextB("SECRETS", 50, 115);
- x = 160-MN_TextBWidth(LevelNames[(gameepisode-1)*9+prevmap-1]+7)/2;
- IN_DrTextB(LevelNames[(gameepisode-1)*9+prevmap-1]+7, x, 3);
- x = 160-MN_TextAWidth("FINISHED")/2;
- MN_DrTextA("FINISHED", x, 25);
+ x = 160 - MN_TextBWidth(LevelNames[(gameepisode - 1) * 9 + prevmap - 1] +
+ 7) / 2;
+ IN_DrTextB(LevelNames[(gameepisode - 1) * 9 + prevmap - 1] + 7, x, 3);
+ x = 160 - MN_TextAWidth("FINISHED") / 2;
+ MN_DrTextA("FINISHED", x, 25);
- if(intertime < 30)
- {
- sounds = 0;
- return;
- }
- if(sounds < 1 && intertime >= 30)
- {
- S_StartSound(NULL, sfx_dorcls);
- sounds++;
- }
- IN_DrawNumber(players[consoleplayer].killcount, 200, 65, 3);
- V_DrawShadowedPatch(237, 65, FontBSlash);
- IN_DrawNumber(totalkills, 248, 65, 3);
- if(intertime < 60)
- {
- return;
- }
- if(sounds < 2 && intertime >= 60)
- {
- S_StartSound(NULL, sfx_dorcls);
- sounds++;
- }
- IN_DrawNumber(players[consoleplayer].itemcount, 200, 90, 3);
- V_DrawShadowedPatch(237, 90, FontBSlash);
- IN_DrawNumber(totalitems, 248, 90, 3);
- if(intertime < 90)
- {
- return;
- }
- if(sounds < 3 && intertime >= 90)
- {
- S_StartSound(NULL, sfx_dorcls);
- sounds++;
- }
- IN_DrawNumber(players[consoleplayer].secretcount, 200, 115, 3);
- V_DrawShadowedPatch(237, 115, FontBSlash);
- IN_DrawNumber(totalsecret, 248, 115, 3);
- if(intertime < 150)
- {
- return;
- }
- if(sounds < 4 && intertime >= 150)
- {
- S_StartSound(NULL, sfx_dorcls);
- sounds++;
- }
+ if (intertime < 30)
+ {
+ sounds = 0;
+ return;
+ }
+ if (sounds < 1 && intertime >= 30)
+ {
+ S_StartSound(NULL, sfx_dorcls);
+ sounds++;
+ }
+ IN_DrawNumber(players[consoleplayer].killcount, 200, 65, 3);
+ V_DrawShadowedPatch(237, 65, FontBSlash);
+ IN_DrawNumber(totalkills, 248, 65, 3);
+ if (intertime < 60)
+ {
+ return;
+ }
+ if (sounds < 2 && intertime >= 60)
+ {
+ S_StartSound(NULL, sfx_dorcls);
+ sounds++;
+ }
+ IN_DrawNumber(players[consoleplayer].itemcount, 200, 90, 3);
+ V_DrawShadowedPatch(237, 90, FontBSlash);
+ IN_DrawNumber(totalitems, 248, 90, 3);
+ if (intertime < 90)
+ {
+ return;
+ }
+ if (sounds < 3 && intertime >= 90)
+ {
+ S_StartSound(NULL, sfx_dorcls);
+ sounds++;
+ }
+ IN_DrawNumber(players[consoleplayer].secretcount, 200, 115, 3);
+ V_DrawShadowedPatch(237, 115, FontBSlash);
+ IN_DrawNumber(totalsecret, 248, 115, 3);
+ if (intertime < 150)
+ {
+ return;
+ }
+ if (sounds < 4 && intertime >= 150)
+ {
+ S_StartSound(NULL, sfx_dorcls);
+ sounds++;
+ }
- if(!ExtendedWAD || gameepisode < 4)
- {
- IN_DrTextB("TIME", 85, 160);
- IN_DrawTime(155, 160, hours, minutes, seconds);
- }
- else
- {
- x = 160-MN_TextAWidth("NOW ENTERING:")/2;
- MN_DrTextA("NOW ENTERING:", x, 160);
- x = 160-MN_TextBWidth(LevelNames[(gameepisode-1)*9+gamemap-1]+7)/2;
- IN_DrTextB(LevelNames[(gameepisode-1)*9+gamemap-1]+7, x, 170);
- skipintermission = false;
- }
+ if (!ExtendedWAD || gameepisode < 4)
+ {
+ IN_DrTextB("TIME", 85, 160);
+ IN_DrawTime(155, 160, hours, minutes, seconds);
+ }
+ else
+ {
+ x = 160 - MN_TextAWidth("NOW ENTERING:") / 2;
+ MN_DrTextA("NOW ENTERING:", x, 160);
+ x = 160 -
+ MN_TextBWidth(LevelNames[(gameepisode - 1) * 9 + gamemap - 1] +
+ 7) / 2;
+ IN_DrTextB(LevelNames[(gameepisode - 1) * 9 + gamemap - 1] + 7, x,
+ 170);
+ skipintermission = false;
+ }
}
//========================================================================
@@ -728,46 +757,49 @@
void IN_DrawCoopStats(void)
{
- int i;
- int x;
- int ypos;
+ int i;
+ int x;
+ int ypos;
- static int sounds;
+ static int sounds;
- IN_DrTextB("KILLS", 95, 35);
- IN_DrTextB("BONUS", 155, 35);
- IN_DrTextB("SECRET", 232, 35);
- x = 160-MN_TextBWidth(LevelNames[(gameepisode-1)*9+prevmap-1]+7)/2;
- IN_DrTextB(LevelNames[(gameepisode-1)*9+prevmap-1]+7, x, 3);
- x = 160-MN_TextAWidth("FINISHED")/2;
- MN_DrTextA("FINISHED", x, 25);
+ IN_DrTextB("KILLS", 95, 35);
+ IN_DrTextB("BONUS", 155, 35);
+ IN_DrTextB("SECRET", 232, 35);
+ x = 160 - MN_TextBWidth(LevelNames[(gameepisode - 1) * 9 + prevmap - 1] +
+ 7) / 2;
+ IN_DrTextB(LevelNames[(gameepisode - 1) * 9 + prevmap - 1] + 7, x, 3);
+ x = 160 - MN_TextAWidth("FINISHED") / 2;
+ MN_DrTextA("FINISHED", x, 25);
- ypos = 50;
- for(i=0; i<MAXPLAYERS; i++)
- {
- if(playeringame[i])
- {
- V_DrawShadowedPatch(25, ypos, W_CacheLumpNum(patchFaceOkayBase+i, PU_CACHE));
- if(intertime < 40)
- {
- sounds = 0;
- ypos += 37;
- continue;
- }
- else if(intertime >= 40 && sounds < 1)
- {
- S_StartSound(NULL, sfx_dorcls);
- sounds++;
- }
- IN_DrawNumber(killPercent[i], 85, ypos+10, 3);
- V_DrawShadowedPatch(121, ypos+10, FontBPercent);
- IN_DrawNumber(bonusPercent[i], 160, ypos+10, 3);
- V_DrawShadowedPatch(196, ypos+10, FontBPercent);
- IN_DrawNumber(secretPercent[i], 237, ypos+10, 3);
- V_DrawShadowedPatch(273, ypos+10, FontBPercent);
- ypos += 37;
- }
- }
+ ypos = 50;
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (playeringame[i])
+ {
+ V_DrawShadowedPatch(25, ypos,
+ W_CacheLumpNum(patchFaceOkayBase + i,
+ PU_CACHE));
+ if (intertime < 40)
+ {
+ sounds = 0;
+ ypos += 37;
+ continue;
+ }
+ else if (intertime >= 40 && sounds < 1)
+ {
+ S_StartSound(NULL, sfx_dorcls);
+ sounds++;
+ }
+ IN_DrawNumber(killPercent[i], 85, ypos + 10, 3);
+ V_DrawShadowedPatch(121, ypos + 10, FontBPercent);
+ IN_DrawNumber(bonusPercent[i], 160, ypos + 10, 3);
+ V_DrawShadowedPatch(196, ypos + 10, FontBPercent);
+ IN_DrawNumber(secretPercent[i], 237, ypos + 10, 3);
+ V_DrawShadowedPatch(273, ypos + 10, FontBPercent);
+ ypos += 37;
+ }
+ }
}
//========================================================================
@@ -778,88 +810,101 @@
void IN_DrawDMStats(void)
{
- int i;
- int j;
- int ypos;
- int xpos;
- int kpos;
- int x;
+ int i;
+ int j;
+ int ypos;
+ int xpos;
+ int kpos;
+ int x;
- static int sounds;
+ static int sounds;
- xpos = 90;
- ypos = 55;
+ xpos = 90;
+ ypos = 55;
- IN_DrTextB("TOTAL", 265, 30);
- MN_DrTextA("VICTIMS", 140, 8);
- for(i=0; i<7; i++)
- {
- MN_DrTextA(KillersText[i], 10, 80+9*i);
- }
- if(intertime < 20)
- {
- for(i=0; i<MAXPLAYERS; i++)
- {
- if(playeringame[i])
- {
- V_DrawShadowedPatch(40, ((ypos<<FRACBITS)+dSlideY[i]*intertime)
- >>FRACBITS, W_CacheLumpNum(patchFaceOkayBase+i, PU_CACHE));
- V_DrawShadowedPatch(((xpos<<FRACBITS)+dSlideX[i]*intertime)
- >>FRACBITS, 18, W_CacheLumpNum(patchFaceDeadBase+i, PU_CACHE));
- }
- }
- sounds = 0;
- return;
- }
- if(intertime >= 20 && sounds < 1)
- {
- S_StartSound(NULL, sfx_dorcls);
- sounds++;
- }
- if(intertime >= 100 && slaughterboy && sounds < 2)
- {
- S_StartSound(NULL, sfx_wpnup);
- sounds++;
- }
- for(i=0; i<MAXPLAYERS; i++)
- {
- if(playeringame[i])
- {
- if(intertime < 100 || i == consoleplayer)
- {
- V_DrawShadowedPatch(40, ypos, W_CacheLumpNum(patchFaceOkayBase+i, PU_CACHE));
- V_DrawShadowedPatch(xpos, 18, W_CacheLumpNum(patchFaceDeadBase+i, PU_CACHE));
- }
- else
- {
- V_DrawFuzzPatch(40, ypos, W_CacheLumpNum(patchFaceOkayBase+i, PU_CACHE));
- V_DrawFuzzPatch(xpos, 18, W_CacheLumpNum(patchFaceDeadBase+i, PU_CACHE));
- }
- kpos = 86;
- for(j=0; j<MAXPLAYERS; j++)
- {
- if(playeringame[j])
- {
- IN_DrawNumber(players[i].frags[j], kpos, ypos+10, 3);
- kpos += 43;
- }
- }
- if(slaughterboy&(1<<i))
- {
- if(!(intertime&16))
- {
- IN_DrawNumber(totalFrags[i], 263, ypos+10, 3);
- }
- }
- else
- {
- IN_DrawNumber(totalFrags[i], 263, ypos+10, 3);
- }
- ypos += 36;
- xpos += 43;
- }
- }
-}
+ IN_DrTextB("TOTAL", 265, 30);
+ MN_DrTextA("VICTIMS", 140, 8);
+ for (i = 0; i < 7; i++)
+ {
+ MN_DrTextA(KillersText[i], 10, 80 + 9 * i);
+ }
+ if (intertime < 20)
+ {
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (playeringame[i])
+ {
+ V_DrawShadowedPatch(40,
+ ((ypos << FRACBITS) +
+ dSlideY[i] * intertime) >> FRACBITS,
+ W_CacheLumpNum(patchFaceOkayBase + i,
+ PU_CACHE));
+ V_DrawShadowedPatch(((xpos << FRACBITS) +
+ dSlideX[i] * intertime) >> FRACBITS, 18,
+ W_CacheLumpNum(patchFaceDeadBase + i,
+ PU_CACHE));
+ }
+ }
+ sounds = 0;
+ return;
+ }
+ if (intertime >= 20 && sounds < 1)
+ {
+ S_StartSound(NULL, sfx_dorcls);
+ sounds++;
+ }
+ if (intertime >= 100 && slaughterboy && sounds < 2)
+ {
+ S_StartSound(NULL, sfx_wpnup);
+ sounds++;
+ }
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (playeringame[i])
+ {
+ if (intertime < 100 || i == consoleplayer)
+ {
+ V_DrawShadowedPatch(40, ypos,
+ W_CacheLumpNum(patchFaceOkayBase + i,
+ PU_CACHE));
+ V_DrawShadowedPatch(xpos, 18,
+ W_CacheLumpNum(patchFaceDeadBase + i,
+ PU_CACHE));
+ }
+ else
+ {
+ V_DrawFuzzPatch(40, ypos,
+ W_CacheLumpNum(patchFaceOkayBase + i,
+ PU_CACHE));
+ V_DrawFuzzPatch(xpos, 18,
+ W_CacheLumpNum(patchFaceDeadBase + i,
+ PU_CACHE));
+ }
+ kpos = 86;
+ for (j = 0; j < MAXPLAYERS; j++)
+ {
+ if (playeringame[j])
+ {
+ IN_DrawNumber(players[i].frags[j], kpos, ypos + 10, 3);
+ kpos += 43;
+ }
+ }
+ if (slaughterboy & (1 << i))
+ {
+ if (!(intertime & 16))
+ {
+ IN_DrawNumber(totalFrags[i], 263, ypos + 10, 3);
+ }
+ }
+ else
+ {
+ IN_DrawNumber(totalFrags[i], 263, ypos + 10, 3);
+ }
+ ypos += 36;
+ xpos += 43;
+ }
+ }
+}
//========================================================================
//
@@ -869,22 +914,22 @@
void IN_DrawTime(int x, int y, int h, int m, int s)
{
- if(h)
- {
- IN_DrawNumber(h, x, y, 2);
- IN_DrTextB(":", x+26, y);
- }
- x += 34;
- if(m || h)
- {
- IN_DrawNumber(m, x, y, 2);
- }
- x += 34;
- if(s)
- {
- IN_DrTextB(":", x-8, y);
- IN_DrawNumber(s, x, y, 2);
- }
+ if (h)
+ {
+ IN_DrawNumber(h, x, y, 2);
+ IN_DrTextB(":", x + 26, y);
+ }
+ x += 34;
+ if (m || h)
+ {
+ IN_DrawNumber(m, x, y, 2);
+ }
+ x += 34;
+ if (s)
+ {
+ IN_DrTextB(":", x - 8, y);
+ IN_DrawNumber(s, x, y, 2);
+ }
}
//========================================================================
@@ -895,89 +940,90 @@
void IN_DrawNumber(int val, int x, int y, int digits)
{
- patch_t *patch;
- int xpos;
- int oldval;
- int realdigits;
- boolean neg;
+ patch_t *patch;
+ int xpos;
+ int oldval;
+ int realdigits;
+ boolean neg;
- oldval = val;
- xpos = x;
- neg = false;
- realdigits = 1;
+ oldval = val;
+ xpos = x;
+ neg = false;
+ realdigits = 1;
- if(val < 0)
- { //...this should reflect negative frags
- val = -val;
- neg = true;
- if(val > 99)
- {
- val = 99;
- }
- }
- if(val > 9)
- {
- realdigits++;
- if(digits < realdigits)
- {
- realdigits = digits;
- val = 9;
- }
- }
- if(val > 99)
- {
- realdigits++;
- if(digits < realdigits)
- {
- realdigits = digits;
- val = 99;
- }
- }
- if(val > 999)
- {
- realdigits++;
- if(digits < realdigits)
- {
- realdigits = digits;
- val = 999;
- }
- }
- if(digits == 4)
- {
- patch = FontBNumbers[val/1000];
- V_DrawShadowedPatch(xpos+6-patch->width/2-12, y, patch);
- }
- if(digits > 2)
- {
- if(realdigits > 2)
- {
- patch = FontBNumbers[val/100];
- V_DrawShadowedPatch(xpos+6-patch->width/2, y, patch);
- }
- xpos += 12;
- }
- val = val%100;
- if(digits > 1)
- {
- if(val > 9)
- {
- patch = FontBNumbers[val/10];
- V_DrawShadowedPatch(xpos+6-patch->width/2, y, patch);
- }
- else if(digits == 2 || oldval > 99)
- {
- V_DrawShadowedPatch(xpos, y, FontBNumbers[0]);
- }
- xpos += 12;
- }
- val = val%10;
- patch = FontBNumbers[val];
- V_DrawShadowedPatch(xpos+6-patch->width/2, y, patch);
- if(neg)
- {
- patch = FontBNegative;
- V_DrawShadowedPatch(xpos+6-patch->width/2-12*(realdigits), y, patch);
- }
+ if (val < 0)
+ { //...this should reflect negative frags
+ val = -val;
+ neg = true;
+ if (val > 99)
+ {
+ val = 99;
+ }
+ }
+ if (val > 9)
+ {
+ realdigits++;
+ if (digits < realdigits)
+ {
+ realdigits = digits;
+ val = 9;
+ }
+ }
+ if (val > 99)
+ {
+ realdigits++;
+ if (digits < realdigits)
+ {
+ realdigits = digits;
+ val = 99;
+ }
+ }
+ if (val > 999)
+ {
+ realdigits++;
+ if (digits < realdigits)
+ {
+ realdigits = digits;
+ val = 999;
+ }
+ }
+ if (digits == 4)
+ {
+ patch = FontBNumbers[val / 1000];
+ V_DrawShadowedPatch(xpos + 6 - patch->width / 2 - 12, y, patch);
+ }
+ if (digits > 2)
+ {
+ if (realdigits > 2)
+ {
+ patch = FontBNumbers[val / 100];
+ V_DrawShadowedPatch(xpos + 6 - patch->width / 2, y, patch);
+ }
+ xpos += 12;
+ }
+ val = val % 100;
+ if (digits > 1)
+ {
+ if (val > 9)
+ {
+ patch = FontBNumbers[val / 10];
+ V_DrawShadowedPatch(xpos + 6 - patch->width / 2, y, patch);
+ }
+ else if (digits == 2 || oldval > 99)
+ {
+ V_DrawShadowedPatch(xpos, y, FontBNumbers[0]);
+ }
+ xpos += 12;
+ }
+ val = val % 10;
+ patch = FontBNumbers[val];
+ V_DrawShadowedPatch(xpos + 6 - patch->width / 2, y, patch);
+ if (neg)
+ {
+ patch = FontBNegative;
+ V_DrawShadowedPatch(xpos + 6 - patch->width / 2 - 12 * (realdigits),
+ y, patch);
+ }
}
//========================================================================
@@ -988,20 +1034,20 @@
void IN_DrTextB(char *text, int x, int y)
{
- char c;
- patch_t *p;
+ char c;
+ patch_t *p;
- while((c = *text++) != 0)
- {
- if(c < 33)
- {
- x += 8;
- }
- else
- {
- p = W_CacheLumpNum(FontBLump+c-33, PU_CACHE);
- V_DrawShadowedPatch(x, y, p);
- x += p->width-1;
- }
- }
+ while ((c = *text++) != 0)
+ {
+ if (c < 33)
+ {
+ x += 8;
+ }
+ else
+ {
+ p = W_CacheLumpNum(FontBLump + c - 33, PU_CACHE);
+ V_DrawShadowedPatch(x, y, p);
+ x += p->width - 1;
+ }
+ }
}
--- a/src/heretic/info.c
+++ b/src/heretic/info.c
@@ -1,5677 +1,5698 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
#include "DoomDef.h"
// generated by multigen
char *sprnames[NUMSPRITES] = {
-"IMPX","ACLO","PTN1","SHLD","SHD2","BAGH","SPMP","INVS","PTN2","SOAR",
-"INVU","PWBK","EGGC","EGGM","FX01","SPHL","TRCH","FBMB","XPL1","ATLP",
-"PPOD","AMG1","SPSH","LVAS","SLDG","SKH1","SKH2","SKH3","SKH4","CHDL",
-"SRTC","SMPL","STGS","STGL","STCS","STCL","KFR1","BARL","BRPL","MOS1",
-"MOS2","WTRH","HCOR","KGZ1","KGZB","KGZG","KGZY","VLCO","VFBL","VTFB",
-"SFFI","TGLT","TELE","STFF","PUF3","PUF4","BEAK","WGNT","GAUN","PUF1",
-"WBLS","BLSR","FX18","FX17","WMCE","MACE","FX02","WSKL","HROD","FX00",
-"FX20","FX21","FX22","FX23","GWND","PUF2","WPHX","PHNX","FX04","FX08",
-"FX09","WBOW","CRBW","FX03","BLOD","PLAY","FDTH","BSKL","CHKN","MUMM",
-"FX15","BEAS","FRB1","SNKE","SNFX","HEAD","FX05","FX06","FX07","CLNK",
-"WZRD","FX11","FX10","KNIG","SPAX","RAXE","SRCR","FX14","SOR2","SDTH",
-"FX16","MNTR","FX12","FX13","AKYY","BKYY","CKYY","AMG2","AMM1","AMM2",
-"AMC1","AMC2","AMS1","AMS2","AMP1","AMP2","AMB1","AMB2"
+ "IMPX","ACLO","PTN1","SHLD","SHD2","BAGH","SPMP","INVS","PTN2","SOAR",
+ "INVU","PWBK","EGGC","EGGM","FX01","SPHL","TRCH","FBMB","XPL1","ATLP",
+ "PPOD","AMG1","SPSH","LVAS","SLDG","SKH1","SKH2","SKH3","SKH4","CHDL",
+ "SRTC","SMPL","STGS","STGL","STCS","STCL","KFR1","BARL","BRPL","MOS1",
+ "MOS2","WTRH","HCOR","KGZ1","KGZB","KGZG","KGZY","VLCO","VFBL","VTFB",
+ "SFFI","TGLT","TELE","STFF","PUF3","PUF4","BEAK","WGNT","GAUN","PUF1",
+ "WBLS","BLSR","FX18","FX17","WMCE","MACE","FX02","WSKL","HROD","FX00",
+ "FX20","FX21","FX22","FX23","GWND","PUF2","WPHX","PHNX","FX04","FX08",
+ "FX09","WBOW","CRBW","FX03","BLOD","PLAY","FDTH","BSKL","CHKN","MUMM",
+ "FX15","BEAS","FRB1","SNKE","SNFX","HEAD","FX05","FX06","FX07","CLNK",
+ "WZRD","FX11","FX10","KNIG","SPAX","RAXE","SRCR","FX14","SOR2","SDTH",
+ "FX16","MNTR","FX12","FX13","AKYY","BKYY","CKYY","AMG2","AMM1","AMM2",
+ "AMC1","AMC2","AMS1","AMS2","AMP1","AMP2","AMB1","AMB2"
};
-void A_FreeTargMobj ();
-void A_RestoreSpecialThing1 ();
-void A_RestoreSpecialThing2 ();
-void A_HideThing ();
-void A_UnHideThing ();
-void A_RestoreArtifact ();
-void A_Scream ();
-void A_Explode ();
-void A_PodPain ();
-void A_RemovePod ();
-void A_MakePod ();
-void A_InitKeyGizmo ();
-void A_VolcanoSet ();
-void A_VolcanoBlast ();
-void A_BeastPuff ();
-void A_VolcBallImpact ();
-void A_SpawnTeleGlitter ();
-void A_SpawnTeleGlitter2 ();
-void A_AccTeleGlitter ();
-void A_Light0 ();
-void A_WeaponReady ();
-void A_Lower ();
-void A_Raise ();
-void A_StaffAttackPL1 ();
-void A_ReFire ();
-void A_StaffAttackPL2 ();
-void A_BeakReady ();
-void A_BeakRaise ();
-void A_BeakAttackPL1 ();
-void A_BeakAttackPL2 ();
-void A_GauntletAttack ();
-void A_FireBlasterPL1 ();
-void A_FireBlasterPL2 ();
-void A_SpawnRippers ();
-void A_FireMacePL1 ();
-void A_FireMacePL2 ();
-void A_MacePL1Check ();
-void A_MaceBallImpact ();
-void A_MaceBallImpact2 ();
-void A_DeathBallImpact ();
-void A_FireSkullRodPL1 ();
-void A_FireSkullRodPL2 ();
-void A_SkullRodPL2Seek ();
-void A_AddPlayerRain ();
-void A_HideInCeiling ();
-void A_SkullRodStorm ();
-void A_RainImpact ();
-void A_FireGoldWandPL1 ();
-void A_FireGoldWandPL2 ();
-void A_FirePhoenixPL1 ();
-void A_InitPhoenixPL2 ();
-void A_FirePhoenixPL2 ();
-void A_ShutdownPhoenixPL2 ();
-void A_PhoenixPuff ();
-void A_FlameEnd ();
-void A_FloatPuff ();
-void A_FireCrossbowPL1 ();
-void A_FireCrossbowPL2 ();
-void A_BoltSpark ();
-void A_Pain ();
-void A_NoBlocking ();
-void A_AddPlayerCorpse ();
-void A_SkullPop ();
-void A_FlameSnd ();
-void A_CheckBurnGone ();
-void A_CheckSkullFloor ();
-void A_CheckSkullDone ();
-void A_Feathers ();
-void A_ChicLook ();
-void A_ChicChase ();
-void A_ChicPain ();
-void A_FaceTarget ();
-void A_ChicAttack ();
-void A_Look ();
-void A_Chase ();
-void A_MummyAttack ();
-void A_MummyAttack2 ();
-void A_MummySoul ();
-void A_ContMobjSound ();
-void A_MummyFX1Seek ();
-void A_BeastAttack ();
-void A_SnakeAttack ();
-void A_SnakeAttack2 ();
-void A_HeadAttack ();
-void A_BossDeath ();
-void A_HeadIceImpact ();
-void A_HeadFireGrow ();
-void A_WhirlwindSeek ();
-void A_ClinkAttack ();
-void A_WizAtk1 ();
-void A_WizAtk2 ();
-void A_WizAtk3 ();
-void A_GhostOff ();
-void A_ImpMeAttack ();
-void A_ImpMsAttack ();
-void A_ImpMsAttack2 ();
-void A_ImpDeath ();
-void A_ImpXDeath1 ();
-void A_ImpXDeath2 ();
-void A_ImpExplode ();
-void A_KnightAttack ();
-void A_DripBlood ();
-void A_Sor1Chase ();
-void A_Sor1Pain ();
-void A_Srcr1Attack ();
-void A_SorZap ();
-void A_SorcererRise ();
-void A_SorRise ();
-void A_SorSightSnd ();
-void A_Srcr2Decide ();
-void A_Srcr2Attack ();
-void A_Sor2DthInit ();
-void A_SorDSph ();
-void A_Sor2DthLoop ();
-void A_SorDExp ();
-void A_SorDBon ();
-void A_BlueSpark ();
-void A_GenWizard ();
-void A_MinotaurAtk1 ();
-void A_MinotaurDecide ();
-void A_MinotaurAtk2 ();
-void A_MinotaurAtk3 ();
-void A_MinotaurCharge ();
-void A_MntrFloorFire ();
-void A_ESound ();
-
-state_t states[NUMSTATES] = {
-{SPR_IMPX,0,-1,NULL,S_NULL,0,0}, // S_NULL
-{SPR_ACLO,4,1050,A_FreeTargMobj,S_NULL,0,0}, // S_FREETARGMOBJ
-{SPR_PTN1,0,3,NULL,S_ITEM_PTN1_2,0,0}, // S_ITEM_PTN1_1
-{SPR_PTN1,1,3,NULL,S_ITEM_PTN1_3,0,0}, // S_ITEM_PTN1_2
-{SPR_PTN1,2,3,NULL,S_ITEM_PTN1_1,0,0}, // S_ITEM_PTN1_3
-{SPR_SHLD,0,-1,NULL,S_NULL,0,0}, // S_ITEM_SHLD1
-{SPR_SHD2,0,-1,NULL,S_NULL,0,0}, // S_ITEM_SHD2_1
-{SPR_BAGH,0,-1,NULL,S_NULL,0,0}, // S_ITEM_BAGH1
-{SPR_SPMP,0,-1,NULL,S_NULL,0,0}, // S_ITEM_SPMP1
-{SPR_ACLO,4,1400,NULL,S_HIDESPECIAL2,0,0}, // S_HIDESPECIAL1
-{SPR_ACLO,0,4,A_RestoreSpecialThing1,S_HIDESPECIAL3,0,0}, // S_HIDESPECIAL2
-{SPR_ACLO,1,4,NULL,S_HIDESPECIAL4,0,0}, // S_HIDESPECIAL3
-{SPR_ACLO,0,4,NULL,S_HIDESPECIAL5,0,0}, // S_HIDESPECIAL4
-{SPR_ACLO,1,4,NULL,S_HIDESPECIAL6,0,0}, // S_HIDESPECIAL5
-{SPR_ACLO,2,4,NULL,S_HIDESPECIAL7,0,0}, // S_HIDESPECIAL6
-{SPR_ACLO,1,4,NULL,S_HIDESPECIAL8,0,0}, // S_HIDESPECIAL7
-{SPR_ACLO,2,4,NULL,S_HIDESPECIAL9,0,0}, // S_HIDESPECIAL8
-{SPR_ACLO,3,4,NULL,S_HIDESPECIAL10,0,0}, // S_HIDESPECIAL9
-{SPR_ACLO,2,4,NULL,S_HIDESPECIAL11,0,0}, // S_HIDESPECIAL10
-{SPR_ACLO,3,4,A_RestoreSpecialThing2,S_NULL,0,0}, // S_HIDESPECIAL11
-{SPR_ACLO,3,3,NULL,S_DORMANTARTI2,0,0}, // S_DORMANTARTI1
-{SPR_ACLO,2,3,NULL,S_DORMANTARTI3,0,0}, // S_DORMANTARTI2
-{SPR_ACLO,3,3,NULL,S_DORMANTARTI4,0,0}, // S_DORMANTARTI3
-{SPR_ACLO,2,3,NULL,S_DORMANTARTI5,0,0}, // S_DORMANTARTI4
-{SPR_ACLO,1,3,NULL,S_DORMANTARTI6,0,0}, // S_DORMANTARTI5
-{SPR_ACLO,2,3,NULL,S_DORMANTARTI7,0,0}, // S_DORMANTARTI6
-{SPR_ACLO,1,3,NULL,S_DORMANTARTI8,0,0}, // S_DORMANTARTI7
-{SPR_ACLO,0,3,NULL,S_DORMANTARTI9,0,0}, // S_DORMANTARTI8
-{SPR_ACLO,1,3,NULL,S_DORMANTARTI10,0,0}, // S_DORMANTARTI9
-{SPR_ACLO,0,3,NULL,S_DORMANTARTI11,0,0}, // S_DORMANTARTI10
-{SPR_ACLO,0,1400,A_HideThing,S_DORMANTARTI12,0,0}, // S_DORMANTARTI11
-{SPR_ACLO,0,3,A_UnHideThing,S_DORMANTARTI13,0,0}, // S_DORMANTARTI12
-{SPR_ACLO,1,3,NULL,S_DORMANTARTI14,0,0}, // S_DORMANTARTI13
-{SPR_ACLO,0,3,NULL,S_DORMANTARTI15,0,0}, // S_DORMANTARTI14
-{SPR_ACLO,1,3,NULL,S_DORMANTARTI16,0,0}, // S_DORMANTARTI15
-{SPR_ACLO,2,3,NULL,S_DORMANTARTI17,0,0}, // S_DORMANTARTI16
-{SPR_ACLO,1,3,NULL,S_DORMANTARTI18,0,0}, // S_DORMANTARTI17
-{SPR_ACLO,2,3,NULL,S_DORMANTARTI19,0,0}, // S_DORMANTARTI18
-{SPR_ACLO,3,3,NULL,S_DORMANTARTI20,0,0}, // S_DORMANTARTI19
-{SPR_ACLO,2,3,NULL,S_DORMANTARTI21,0,0}, // S_DORMANTARTI20
-{SPR_ACLO,3,3,A_RestoreArtifact,S_NULL,0,0}, // S_DORMANTARTI21
-{SPR_ACLO,3,3,NULL,S_DEADARTI2,0,0}, // S_DEADARTI1
-{SPR_ACLO,2,3,NULL,S_DEADARTI3,0,0}, // S_DEADARTI2
-{SPR_ACLO,3,3,NULL,S_DEADARTI4,0,0}, // S_DEADARTI3
-{SPR_ACLO,2,3,NULL,S_DEADARTI5,0,0}, // S_DEADARTI4
-{SPR_ACLO,1,3,NULL,S_DEADARTI6,0,0}, // S_DEADARTI5
-{SPR_ACLO,2,3,NULL,S_DEADARTI7,0,0}, // S_DEADARTI6
-{SPR_ACLO,1,3,NULL,S_DEADARTI8,0,0}, // S_DEADARTI7
-{SPR_ACLO,0,3,NULL,S_DEADARTI9,0,0}, // S_DEADARTI8
-{SPR_ACLO,1,3,NULL,S_DEADARTI10,0,0}, // S_DEADARTI9
-{SPR_ACLO,0,3,NULL,S_NULL,0,0}, // S_DEADARTI10
-{SPR_INVS,32768,350,NULL,S_ARTI_INVS1,0,0}, // S_ARTI_INVS1
-{SPR_PTN2,0,4,NULL,S_ARTI_PTN2_2,0,0}, // S_ARTI_PTN2_1
-{SPR_PTN2,1,4,NULL,S_ARTI_PTN2_3,0,0}, // S_ARTI_PTN2_2
-{SPR_PTN2,2,4,NULL,S_ARTI_PTN2_1,0,0}, // S_ARTI_PTN2_3
-{SPR_SOAR,0,5,NULL,S_ARTI_SOAR2,0,0}, // S_ARTI_SOAR1
-{SPR_SOAR,1,5,NULL,S_ARTI_SOAR3,0,0}, // S_ARTI_SOAR2
-{SPR_SOAR,2,5,NULL,S_ARTI_SOAR4,0,0}, // S_ARTI_SOAR3
-{SPR_SOAR,1,5,NULL,S_ARTI_SOAR1,0,0}, // S_ARTI_SOAR4
-{SPR_INVU,0,3,NULL,S_ARTI_INVU2,0,0}, // S_ARTI_INVU1
-{SPR_INVU,1,3,NULL,S_ARTI_INVU3,0,0}, // S_ARTI_INVU2
-{SPR_INVU,2,3,NULL,S_ARTI_INVU4,0,0}, // S_ARTI_INVU3
-{SPR_INVU,3,3,NULL,S_ARTI_INVU1,0,0}, // S_ARTI_INVU4
-{SPR_PWBK,0,350,NULL,S_ARTI_PWBK1,0,0}, // S_ARTI_PWBK1
-{SPR_EGGC,0,6,NULL,S_ARTI_EGGC2,0,0}, // S_ARTI_EGGC1
-{SPR_EGGC,1,6,NULL,S_ARTI_EGGC3,0,0}, // S_ARTI_EGGC2
-{SPR_EGGC,2,6,NULL,S_ARTI_EGGC4,0,0}, // S_ARTI_EGGC3
-{SPR_EGGC,1,6,NULL,S_ARTI_EGGC1,0,0}, // S_ARTI_EGGC4
-{SPR_EGGM,0,4,NULL,S_EGGFX2,0,0}, // S_EGGFX1
-{SPR_EGGM,1,4,NULL,S_EGGFX3,0,0}, // S_EGGFX2
-{SPR_EGGM,2,4,NULL,S_EGGFX4,0,0}, // S_EGGFX3
-{SPR_EGGM,3,4,NULL,S_EGGFX5,0,0}, // S_EGGFX4
-{SPR_EGGM,4,4,NULL,S_EGGFX1,0,0}, // S_EGGFX5
-{SPR_FX01,32772,3,NULL,S_EGGFXI1_2,0,0}, // S_EGGFXI1_1
-{SPR_FX01,32773,3,NULL,S_EGGFXI1_3,0,0}, // S_EGGFXI1_2
-{SPR_FX01,32774,3,NULL,S_EGGFXI1_4,0,0}, // S_EGGFXI1_3
-{SPR_FX01,32775,3,NULL,S_NULL,0,0}, // S_EGGFXI1_4
-{SPR_SPHL,0,350,NULL,S_ARTI_SPHL1,0,0}, // S_ARTI_SPHL1
-{SPR_TRCH,32768,3,NULL,S_ARTI_TRCH2,0,0}, // S_ARTI_TRCH1
-{SPR_TRCH,32769,3,NULL,S_ARTI_TRCH3,0,0}, // S_ARTI_TRCH2
-{SPR_TRCH,32770,3,NULL,S_ARTI_TRCH1,0,0}, // S_ARTI_TRCH3
-{SPR_FBMB,4,350,NULL,S_ARTI_FBMB1,0,0}, // S_ARTI_FBMB1
-{SPR_FBMB,0,10,NULL,S_FIREBOMB2,0,0}, // S_FIREBOMB1
-{SPR_FBMB,1,10,NULL,S_FIREBOMB3,0,0}, // S_FIREBOMB2
-{SPR_FBMB,2,10,NULL,S_FIREBOMB4,0,0}, // S_FIREBOMB3
-{SPR_FBMB,3,10,NULL,S_FIREBOMB5,0,0}, // S_FIREBOMB4
-{SPR_FBMB,4,6,A_Scream,S_FIREBOMB6,0,0}, // S_FIREBOMB5
-{SPR_XPL1,32768,4,A_Explode,S_FIREBOMB7,0,0}, // S_FIREBOMB6
-{SPR_XPL1,32769,4,NULL,S_FIREBOMB8,0,0}, // S_FIREBOMB7
-{SPR_XPL1,32770,4,NULL,S_FIREBOMB9,0,0}, // S_FIREBOMB8
-{SPR_XPL1,32771,4,NULL,S_FIREBOMB10,0,0}, // S_FIREBOMB9
-{SPR_XPL1,32772,4,NULL,S_FIREBOMB11,0,0}, // S_FIREBOMB10
-{SPR_XPL1,32773,4,NULL,S_NULL,0,0}, // S_FIREBOMB11
-{SPR_ATLP,0,4,NULL,S_ARTI_ATLP2,0,0}, // S_ARTI_ATLP1
-{SPR_ATLP,1,4,NULL,S_ARTI_ATLP3,0,0}, // S_ARTI_ATLP2
-{SPR_ATLP,2,4,NULL,S_ARTI_ATLP4,0,0}, // S_ARTI_ATLP3
-{SPR_ATLP,1,4,NULL,S_ARTI_ATLP1,0,0}, // S_ARTI_ATLP4
-{SPR_PPOD,0,10,NULL,S_POD_WAIT1,0,0}, // S_POD_WAIT1
-{SPR_PPOD,1,14,A_PodPain,S_POD_WAIT1,0,0}, // S_POD_PAIN1
-{SPR_PPOD,32770,5,A_RemovePod,S_POD_DIE2,0,0}, // S_POD_DIE1
-{SPR_PPOD,32771,5,A_Scream,S_POD_DIE3,0,0}, // S_POD_DIE2
-{SPR_PPOD,32772,5,A_Explode,S_POD_DIE4,0,0}, // S_POD_DIE3
-{SPR_PPOD,32773,10,NULL,S_FREETARGMOBJ,0,0}, // S_POD_DIE4
-{SPR_PPOD,8,3,NULL,S_POD_GROW2,0,0}, // S_POD_GROW1
-{SPR_PPOD,9,3,NULL,S_POD_GROW3,0,0}, // S_POD_GROW2
-{SPR_PPOD,10,3,NULL,S_POD_GROW4,0,0}, // S_POD_GROW3
-{SPR_PPOD,11,3,NULL,S_POD_GROW5,0,0}, // S_POD_GROW4
-{SPR_PPOD,12,3,NULL,S_POD_GROW6,0,0}, // S_POD_GROW5
-{SPR_PPOD,13,3,NULL,S_POD_GROW7,0,0}, // S_POD_GROW6
-{SPR_PPOD,14,3,NULL,S_POD_GROW8,0,0}, // S_POD_GROW7
-{SPR_PPOD,15,3,NULL,S_POD_WAIT1,0,0}, // S_POD_GROW8
-{SPR_PPOD,6,8,NULL,S_PODGOO2,0,0}, // S_PODGOO1
-{SPR_PPOD,7,8,NULL,S_PODGOO1,0,0}, // S_PODGOO2
-{SPR_PPOD,6,10,NULL,S_NULL,0,0}, // S_PODGOOX
-{SPR_AMG1,0,35,A_MakePod,S_PODGENERATOR,0,0}, // S_PODGENERATOR
-{SPR_SPSH,0,8,NULL,S_SPLASH2,0,0}, // S_SPLASH1
-{SPR_SPSH,1,8,NULL,S_SPLASH3,0,0}, // S_SPLASH2
-{SPR_SPSH,2,8,NULL,S_SPLASH4,0,0}, // S_SPLASH3
-{SPR_SPSH,3,16,NULL,S_NULL,0,0}, // S_SPLASH4
-{SPR_SPSH,3,10,NULL,S_NULL,0,0}, // S_SPLASHX
-{SPR_SPSH,4,5,NULL,S_SPLASHBASE2,0,0}, // S_SPLASHBASE1
-{SPR_SPSH,5,5,NULL,S_SPLASHBASE3,0,0}, // S_SPLASHBASE2
-{SPR_SPSH,6,5,NULL,S_SPLASHBASE4,0,0}, // S_SPLASHBASE3
-{SPR_SPSH,7,5,NULL,S_SPLASHBASE5,0,0}, // S_SPLASHBASE4
-{SPR_SPSH,8,5,NULL,S_SPLASHBASE6,0,0}, // S_SPLASHBASE5
-{SPR_SPSH,9,5,NULL,S_SPLASHBASE7,0,0}, // S_SPLASHBASE6
-{SPR_SPSH,10,5,NULL,S_NULL,0,0}, // S_SPLASHBASE7
-{SPR_LVAS,32768,5,NULL,S_LAVASPLASH2,0,0}, // S_LAVASPLASH1
-{SPR_LVAS,32769,5,NULL,S_LAVASPLASH3,0,0}, // S_LAVASPLASH2
-{SPR_LVAS,32770,5,NULL,S_LAVASPLASH4,0,0}, // S_LAVASPLASH3
-{SPR_LVAS,32771,5,NULL,S_LAVASPLASH5,0,0}, // S_LAVASPLASH4
-{SPR_LVAS,32772,5,NULL,S_LAVASPLASH6,0,0}, // S_LAVASPLASH5
-{SPR_LVAS,32773,5,NULL,S_NULL,0,0}, // S_LAVASPLASH6
-{SPR_LVAS,32774,5,NULL,S_LAVASMOKE2,0,0}, // S_LAVASMOKE1
-{SPR_LVAS,32775,5,NULL,S_LAVASMOKE3,0,0}, // S_LAVASMOKE2
-{SPR_LVAS,32776,5,NULL,S_LAVASMOKE4,0,0}, // S_LAVASMOKE3
-{SPR_LVAS,32777,5,NULL,S_LAVASMOKE5,0,0}, // S_LAVASMOKE4
-{SPR_LVAS,32778,5,NULL,S_NULL,0,0}, // S_LAVASMOKE5
-{SPR_SLDG,0,8,NULL,S_SLUDGECHUNK2,0,0}, // S_SLUDGECHUNK1
-{SPR_SLDG,1,8,NULL,S_SLUDGECHUNK3,0,0}, // S_SLUDGECHUNK2
-{SPR_SLDG,2,8,NULL,S_SLUDGECHUNK4,0,0}, // S_SLUDGECHUNK3
-{SPR_SLDG,3,8,NULL,S_NULL,0,0}, // S_SLUDGECHUNK4
-{SPR_SLDG,3,6,NULL,S_NULL,0,0}, // S_SLUDGECHUNKX
-{SPR_SLDG,4,5,NULL,S_SLUDGESPLASH2,0,0}, // S_SLUDGESPLASH1
-{SPR_SLDG,5,5,NULL,S_SLUDGESPLASH3,0,0}, // S_SLUDGESPLASH2
-{SPR_SLDG,6,5,NULL,S_SLUDGESPLASH4,0,0}, // S_SLUDGESPLASH3
-{SPR_SLDG,7,5,NULL,S_NULL,0,0}, // S_SLUDGESPLASH4
-{SPR_SKH1,0,-1,NULL,S_NULL,0,0}, // S_SKULLHANG70_1
-{SPR_SKH2,0,-1,NULL,S_NULL,0,0}, // S_SKULLHANG60_1
-{SPR_SKH3,0,-1,NULL,S_NULL,0,0}, // S_SKULLHANG45_1
-{SPR_SKH4,0,-1,NULL,S_NULL,0,0}, // S_SKULLHANG35_1
-{SPR_CHDL,0,4,NULL,S_CHANDELIER2,0,0}, // S_CHANDELIER1
-{SPR_CHDL,1,4,NULL,S_CHANDELIER3,0,0}, // S_CHANDELIER2
-{SPR_CHDL,2,4,NULL,S_CHANDELIER1,0,0}, // S_CHANDELIER3
-{SPR_SRTC,0,4,NULL,S_SERPTORCH2,0,0}, // S_SERPTORCH1
-{SPR_SRTC,1,4,NULL,S_SERPTORCH3,0,0}, // S_SERPTORCH2
-{SPR_SRTC,2,4,NULL,S_SERPTORCH1,0,0}, // S_SERPTORCH3
-{SPR_SMPL,0,-1,NULL,S_NULL,0,0}, // S_SMALLPILLAR
-{SPR_STGS,0,-1,NULL,S_NULL,0,0}, // S_STALAGMITESMALL
-{SPR_STGL,0,-1,NULL,S_NULL,0,0}, // S_STALAGMITELARGE
-{SPR_STCS,0,-1,NULL,S_NULL,0,0}, // S_STALACTITESMALL
-{SPR_STCL,0,-1,NULL,S_NULL,0,0}, // S_STALACTITELARGE
-{SPR_KFR1,32768,3,NULL,S_FIREBRAZIER2,0,0}, // S_FIREBRAZIER1
-{SPR_KFR1,32769,3,NULL,S_FIREBRAZIER3,0,0}, // S_FIREBRAZIER2
-{SPR_KFR1,32770,3,NULL,S_FIREBRAZIER4,0,0}, // S_FIREBRAZIER3
-{SPR_KFR1,32771,3,NULL,S_FIREBRAZIER5,0,0}, // S_FIREBRAZIER4
-{SPR_KFR1,32772,3,NULL,S_FIREBRAZIER6,0,0}, // S_FIREBRAZIER5
-{SPR_KFR1,32773,3,NULL,S_FIREBRAZIER7,0,0}, // S_FIREBRAZIER6
-{SPR_KFR1,32774,3,NULL,S_FIREBRAZIER8,0,0}, // S_FIREBRAZIER7
-{SPR_KFR1,32775,3,NULL,S_FIREBRAZIER1,0,0}, // S_FIREBRAZIER8
-{SPR_BARL,0,-1,NULL,S_NULL,0,0}, // S_BARREL
-{SPR_BRPL,0,-1,NULL,S_NULL,0,0}, // S_BRPILLAR
-{SPR_MOS1,0,-1,NULL,S_NULL,0,0}, // S_MOSS1
-{SPR_MOS2,0,-1,NULL,S_NULL,0,0}, // S_MOSS2
-{SPR_WTRH,32768,6,NULL,S_WALLTORCH2,0,0}, // S_WALLTORCH1
-{SPR_WTRH,32769,6,NULL,S_WALLTORCH3,0,0}, // S_WALLTORCH2
-{SPR_WTRH,32770,6,NULL,S_WALLTORCH1,0,0}, // S_WALLTORCH3
-{SPR_HCOR,0,-1,NULL,S_NULL,0,0}, // S_HANGINGCORPSE
-{SPR_KGZ1,0,1,NULL,S_KEYGIZMO2,0,0}, // S_KEYGIZMO1
-{SPR_KGZ1,0,1,A_InitKeyGizmo,S_KEYGIZMO3,0,0}, // S_KEYGIZMO2
-{SPR_KGZ1,0,-1,NULL,S_NULL,0,0}, // S_KEYGIZMO3
-{SPR_KGZB,0,1,NULL,S_KGZ_START,0,0}, // S_KGZ_START
-{SPR_KGZB,32768,-1,NULL,S_NULL,0,0}, // S_KGZ_BLUEFLOAT1
-{SPR_KGZG,32768,-1,NULL,S_NULL,0,0}, // S_KGZ_GREENFLOAT1
-{SPR_KGZY,32768,-1,NULL,S_NULL,0,0}, // S_KGZ_YELLOWFLOAT1
-{SPR_VLCO,0,350,NULL,S_VOLCANO2,0,0}, // S_VOLCANO1
-{SPR_VLCO,0,35,A_VolcanoSet,S_VOLCANO3,0,0}, // S_VOLCANO2
-{SPR_VLCO,1,3,NULL,S_VOLCANO4,0,0}, // S_VOLCANO3
-{SPR_VLCO,2,3,NULL,S_VOLCANO5,0,0}, // S_VOLCANO4
-{SPR_VLCO,3,3,NULL,S_VOLCANO6,0,0}, // S_VOLCANO5
-{SPR_VLCO,1,3,NULL,S_VOLCANO7,0,0}, // S_VOLCANO6
-{SPR_VLCO,2,3,NULL,S_VOLCANO8,0,0}, // S_VOLCANO7
-{SPR_VLCO,3,3,NULL,S_VOLCANO9,0,0}, // S_VOLCANO8
-{SPR_VLCO,4,10,A_VolcanoBlast,S_VOLCANO2,0,0}, // S_VOLCANO9
-{SPR_VFBL,0,4,A_BeastPuff,S_VOLCANOBALL2,0,0}, // S_VOLCANOBALL1
-{SPR_VFBL,1,4,A_BeastPuff,S_VOLCANOBALL1,0,0}, // S_VOLCANOBALL2
-{SPR_XPL1,0,4,A_VolcBallImpact,S_VOLCANOBALLX2,0,0}, // S_VOLCANOBALLX1
-{SPR_XPL1,1,4,NULL,S_VOLCANOBALLX3,0,0}, // S_VOLCANOBALLX2
-{SPR_XPL1,2,4,NULL,S_VOLCANOBALLX4,0,0}, // S_VOLCANOBALLX3
-{SPR_XPL1,3,4,NULL,S_VOLCANOBALLX5,0,0}, // S_VOLCANOBALLX4
-{SPR_XPL1,4,4,NULL,S_VOLCANOBALLX6,0,0}, // S_VOLCANOBALLX5
-{SPR_XPL1,5,4,NULL,S_NULL,0,0}, // S_VOLCANOBALLX6
-{SPR_VTFB,0,4,NULL,S_VOLCANOTBALL2,0,0}, // S_VOLCANOTBALL1
-{SPR_VTFB,1,4,NULL,S_VOLCANOTBALL1,0,0}, // S_VOLCANOTBALL2
-{SPR_SFFI,2,4,NULL,S_VOLCANOTBALLX2,0,0}, // S_VOLCANOTBALLX1
-{SPR_SFFI,1,4,NULL,S_VOLCANOTBALLX3,0,0}, // S_VOLCANOTBALLX2
-{SPR_SFFI,0,4,NULL,S_VOLCANOTBALLX4,0,0}, // S_VOLCANOTBALLX3
-{SPR_SFFI,1,4,NULL,S_VOLCANOTBALLX5,0,0}, // S_VOLCANOTBALLX4
-{SPR_SFFI,2,4,NULL,S_VOLCANOTBALLX6,0,0}, // S_VOLCANOTBALLX5
-{SPR_SFFI,3,4,NULL,S_VOLCANOTBALLX7,0,0}, // S_VOLCANOTBALLX6
-{SPR_SFFI,4,4,NULL,S_NULL,0,0}, // S_VOLCANOTBALLX7
-{SPR_TGLT,0,8,A_SpawnTeleGlitter,S_TELEGLITGEN1,0,0}, // S_TELEGLITGEN1
-{SPR_TGLT,5,8,A_SpawnTeleGlitter2,S_TELEGLITGEN2,0,0}, // S_TELEGLITGEN2
-{SPR_TGLT,32768,2,NULL,S_TELEGLITTER1_2,0,0}, // S_TELEGLITTER1_1
-{SPR_TGLT,32769,2,A_AccTeleGlitter,S_TELEGLITTER1_3,0,0}, // S_TELEGLITTER1_2
-{SPR_TGLT,32770,2,NULL,S_TELEGLITTER1_4,0,0}, // S_TELEGLITTER1_3
-{SPR_TGLT,32771,2,A_AccTeleGlitter,S_TELEGLITTER1_5,0,0}, // S_TELEGLITTER1_4
-{SPR_TGLT,32772,2,NULL,S_TELEGLITTER1_1,0,0}, // S_TELEGLITTER1_5
-{SPR_TGLT,32773,2,NULL,S_TELEGLITTER2_2,0,0}, // S_TELEGLITTER2_1
-{SPR_TGLT,32774,2,A_AccTeleGlitter,S_TELEGLITTER2_3,0,0}, // S_TELEGLITTER2_2
-{SPR_TGLT,32775,2,NULL,S_TELEGLITTER2_4,0,0}, // S_TELEGLITTER2_3
-{SPR_TGLT,32776,2,A_AccTeleGlitter,S_TELEGLITTER2_5,0,0}, // S_TELEGLITTER2_4
-{SPR_TGLT,32777,2,NULL,S_TELEGLITTER2_1,0,0}, // S_TELEGLITTER2_5
-{SPR_TELE,32768,6,NULL,S_TFOG2,0,0}, // S_TFOG1
-{SPR_TELE,32769,6,NULL,S_TFOG3,0,0}, // S_TFOG2
-{SPR_TELE,32770,6,NULL,S_TFOG4,0,0}, // S_TFOG3
-{SPR_TELE,32771,6,NULL,S_TFOG5,0,0}, // S_TFOG4
-{SPR_TELE,32772,6,NULL,S_TFOG6,0,0}, // S_TFOG5
-{SPR_TELE,32773,6,NULL,S_TFOG7,0,0}, // S_TFOG6
-{SPR_TELE,32774,6,NULL,S_TFOG8,0,0}, // S_TFOG7
-{SPR_TELE,32775,6,NULL,S_TFOG9,0,0}, // S_TFOG8
-{SPR_TELE,32774,6,NULL,S_TFOG10,0,0}, // S_TFOG9
-{SPR_TELE,32773,6,NULL,S_TFOG11,0,0}, // S_TFOG10
-{SPR_TELE,32772,6,NULL,S_TFOG12,0,0}, // S_TFOG11
-{SPR_TELE,32771,6,NULL,S_TFOG13,0,0}, // S_TFOG12
-{SPR_TELE,32770,6,NULL,S_NULL,0,0}, // S_TFOG13
-{SPR_STFF,0,0,A_Light0,S_NULL,0,0}, // S_LIGHTDONE
-{SPR_STFF,0,1,A_WeaponReady,S_STAFFREADY,0,0}, // S_STAFFREADY
-{SPR_STFF,0,1,A_Lower,S_STAFFDOWN,0,0}, // S_STAFFDOWN
-{SPR_STFF,0,1,A_Raise,S_STAFFUP,0,0}, // S_STAFFUP
-{SPR_STFF,3,4,A_WeaponReady,S_STAFFREADY2_2,0,0}, // S_STAFFREADY2_1
-{SPR_STFF,4,4,A_WeaponReady,S_STAFFREADY2_3,0,0}, // S_STAFFREADY2_2
-{SPR_STFF,5,4,A_WeaponReady,S_STAFFREADY2_1,0,0}, // S_STAFFREADY2_3
-{SPR_STFF,3,1,A_Lower,S_STAFFDOWN2,0,0}, // S_STAFFDOWN2
-{SPR_STFF,3,1,A_Raise,S_STAFFUP2,0,0}, // S_STAFFUP2
-{SPR_STFF,1,6,NULL,S_STAFFATK1_2,0,0}, // S_STAFFATK1_1
-{SPR_STFF,2,8,A_StaffAttackPL1,S_STAFFATK1_3,0,0}, // S_STAFFATK1_2
-{SPR_STFF,1,8,A_ReFire,S_STAFFREADY,0,0}, // S_STAFFATK1_3
-{SPR_STFF,6,6,NULL,S_STAFFATK2_2,0,0}, // S_STAFFATK2_1
-{SPR_STFF,7,8,A_StaffAttackPL2,S_STAFFATK2_3,0,0}, // S_STAFFATK2_2
-{SPR_STFF,6,8,A_ReFire,S_STAFFREADY2_1,0,0}, // S_STAFFATK2_3
-{SPR_PUF3,32768,4,NULL,S_STAFFPUFF2,0,0}, // S_STAFFPUFF1
-{SPR_PUF3,1,4,NULL,S_STAFFPUFF3,0,0}, // S_STAFFPUFF2
-{SPR_PUF3,2,4,NULL,S_STAFFPUFF4,0,0}, // S_STAFFPUFF3
-{SPR_PUF3,3,4,NULL,S_NULL,0,0}, // S_STAFFPUFF4
-{SPR_PUF4,32768,4,NULL,S_STAFFPUFF2_2,0,0}, // S_STAFFPUFF2_1
-{SPR_PUF4,32769,4,NULL,S_STAFFPUFF2_3,0,0}, // S_STAFFPUFF2_2
-{SPR_PUF4,32770,4,NULL,S_STAFFPUFF2_4,0,0}, // S_STAFFPUFF2_3
-{SPR_PUF4,32771,4,NULL,S_STAFFPUFF2_5,0,0}, // S_STAFFPUFF2_4
-{SPR_PUF4,32772,4,NULL,S_STAFFPUFF2_6,0,0}, // S_STAFFPUFF2_5
-{SPR_PUF4,32773,4,NULL,S_NULL,0,0}, // S_STAFFPUFF2_6
-{SPR_BEAK,0,1,A_BeakReady,S_BEAKREADY,0,0}, // S_BEAKREADY
-{SPR_BEAK,0,1,A_Lower,S_BEAKDOWN,0,0}, // S_BEAKDOWN
-{SPR_BEAK,0,1,A_BeakRaise,S_BEAKUP,0,0}, // S_BEAKUP
-{SPR_BEAK,0,18,A_BeakAttackPL1,S_BEAKREADY,0,0}, // S_BEAKATK1_1
-{SPR_BEAK,0,12,A_BeakAttackPL2,S_BEAKREADY,0,0}, // S_BEAKATK2_1
-{SPR_WGNT,0,-1,NULL,S_NULL,0,0}, // S_WGNT
-{SPR_GAUN,0,1,A_WeaponReady,S_GAUNTLETREADY,0,0}, // S_GAUNTLETREADY
-{SPR_GAUN,0,1,A_Lower,S_GAUNTLETDOWN,0,0}, // S_GAUNTLETDOWN
-{SPR_GAUN,0,1,A_Raise,S_GAUNTLETUP,0,0}, // S_GAUNTLETUP
-{SPR_GAUN,6,4,A_WeaponReady,S_GAUNTLETREADY2_2,0,0}, // S_GAUNTLETREADY2_1
-{SPR_GAUN,7,4,A_WeaponReady,S_GAUNTLETREADY2_3,0,0}, // S_GAUNTLETREADY2_2
-{SPR_GAUN,8,4,A_WeaponReady,S_GAUNTLETREADY2_1,0,0}, // S_GAUNTLETREADY2_3
-{SPR_GAUN,6,1,A_Lower,S_GAUNTLETDOWN2,0,0}, // S_GAUNTLETDOWN2
-{SPR_GAUN,6,1,A_Raise,S_GAUNTLETUP2,0,0}, // S_GAUNTLETUP2
-{SPR_GAUN,1,4,NULL,S_GAUNTLETATK1_2,0,0}, // S_GAUNTLETATK1_1
-{SPR_GAUN,2,4,NULL,S_GAUNTLETATK1_3,0,0}, // S_GAUNTLETATK1_2
-{SPR_GAUN,32771,4,A_GauntletAttack,S_GAUNTLETATK1_4,0,0}, // S_GAUNTLETATK1_3
-{SPR_GAUN,32772,4,A_GauntletAttack,S_GAUNTLETATK1_5,0,0}, // S_GAUNTLETATK1_4
-{SPR_GAUN,32773,4,A_GauntletAttack,S_GAUNTLETATK1_6,0,0}, // S_GAUNTLETATK1_5
-{SPR_GAUN,2,4,A_ReFire,S_GAUNTLETATK1_7,0,0}, // S_GAUNTLETATK1_6
-{SPR_GAUN,1,4,A_Light0,S_GAUNTLETREADY,0,0}, // S_GAUNTLETATK1_7
-{SPR_GAUN,9,4,NULL,S_GAUNTLETATK2_2,0,0}, // S_GAUNTLETATK2_1
-{SPR_GAUN,10,4,NULL,S_GAUNTLETATK2_3,0,0}, // S_GAUNTLETATK2_2
-{SPR_GAUN,32779,4,A_GauntletAttack,S_GAUNTLETATK2_4,0,0}, // S_GAUNTLETATK2_3
-{SPR_GAUN,32780,4,A_GauntletAttack,S_GAUNTLETATK2_5,0,0}, // S_GAUNTLETATK2_4
-{SPR_GAUN,32781,4,A_GauntletAttack,S_GAUNTLETATK2_6,0,0}, // S_GAUNTLETATK2_5
-{SPR_GAUN,10,4,A_ReFire,S_GAUNTLETATK2_7,0,0}, // S_GAUNTLETATK2_6
-{SPR_GAUN,9,4,A_Light0,S_GAUNTLETREADY2_1,0,0}, // S_GAUNTLETATK2_7
-{SPR_PUF1,32768,4,NULL,S_GAUNTLETPUFF1_2,0,0}, // S_GAUNTLETPUFF1_1
-{SPR_PUF1,32769,4,NULL,S_GAUNTLETPUFF1_3,0,0}, // S_GAUNTLETPUFF1_2
-{SPR_PUF1,32770,4,NULL,S_GAUNTLETPUFF1_4,0,0}, // S_GAUNTLETPUFF1_3
-{SPR_PUF1,32771,4,NULL,S_NULL,0,0}, // S_GAUNTLETPUFF1_4
-{SPR_PUF1,32772,4,NULL,S_GAUNTLETPUFF2_2,0,0}, // S_GAUNTLETPUFF2_1
-{SPR_PUF1,32773,4,NULL,S_GAUNTLETPUFF2_3,0,0}, // S_GAUNTLETPUFF2_2
-{SPR_PUF1,32774,4,NULL,S_GAUNTLETPUFF2_4,0,0}, // S_GAUNTLETPUFF2_3
-{SPR_PUF1,32775,4,NULL,S_NULL,0,0}, // S_GAUNTLETPUFF2_4
-{SPR_WBLS,0,-1,NULL,S_NULL,0,0}, // S_BLSR
-{SPR_BLSR,0,1,A_WeaponReady,S_BLASTERREADY,0,0}, // S_BLASTERREADY
-{SPR_BLSR,0,1,A_Lower,S_BLASTERDOWN,0,0}, // S_BLASTERDOWN
-{SPR_BLSR,0,1,A_Raise,S_BLASTERUP,0,0}, // S_BLASTERUP
-{SPR_BLSR,1,3,NULL,S_BLASTERATK1_2,0,0}, // S_BLASTERATK1_1
-{SPR_BLSR,2,3,NULL,S_BLASTERATK1_3,0,0}, // S_BLASTERATK1_2
-{SPR_BLSR,3,2,A_FireBlasterPL1,S_BLASTERATK1_4,0,0}, // S_BLASTERATK1_3
-{SPR_BLSR,2,2,NULL,S_BLASTERATK1_5,0,0}, // S_BLASTERATK1_4
-{SPR_BLSR,1,2,NULL,S_BLASTERATK1_6,0,0}, // S_BLASTERATK1_5
-{SPR_BLSR,0,0,A_ReFire,S_BLASTERREADY,0,0}, // S_BLASTERATK1_6
-{SPR_BLSR,1,0,NULL,S_BLASTERATK2_2,0,0}, // S_BLASTERATK2_1
-{SPR_BLSR,2,0,NULL,S_BLASTERATK2_3,0,0}, // S_BLASTERATK2_2
-{SPR_BLSR,3,3,A_FireBlasterPL2,S_BLASTERATK2_4,0,0}, // S_BLASTERATK2_3
-{SPR_BLSR,2,4,NULL,S_BLASTERATK2_5,0,0}, // S_BLASTERATK2_4
-{SPR_BLSR,1,4,NULL,S_BLASTERATK2_6,0,0}, // S_BLASTERATK2_5
-{SPR_BLSR,0,0,A_ReFire,S_BLASTERREADY,0,0}, // S_BLASTERATK2_6
-{SPR_ACLO,4,200,NULL,S_BLASTERFX1_1,0,0}, // S_BLASTERFX1_1
-{SPR_FX18,32768,3,A_SpawnRippers,S_BLASTERFXI1_2,0,0}, // S_BLASTERFXI1_1
-{SPR_FX18,32769,3,NULL,S_BLASTERFXI1_3,0,0}, // S_BLASTERFXI1_2
-{SPR_FX18,32770,4,NULL,S_BLASTERFXI1_4,0,0}, // S_BLASTERFXI1_3
-{SPR_FX18,32771,4,NULL,S_BLASTERFXI1_5,0,0}, // S_BLASTERFXI1_4
-{SPR_FX18,32772,4,NULL,S_BLASTERFXI1_6,0,0}, // S_BLASTERFXI1_5
-{SPR_FX18,32773,4,NULL,S_BLASTERFXI1_7,0,0}, // S_BLASTERFXI1_6
-{SPR_FX18,32774,4,NULL,S_NULL,0,0}, // S_BLASTERFXI1_7
-{SPR_FX18,7,4,NULL,S_BLASTERSMOKE2,0,0}, // S_BLASTERSMOKE1
-{SPR_FX18,8,4,NULL,S_BLASTERSMOKE3,0,0}, // S_BLASTERSMOKE2
-{SPR_FX18,9,4,NULL,S_BLASTERSMOKE4,0,0}, // S_BLASTERSMOKE3
-{SPR_FX18,10,4,NULL,S_BLASTERSMOKE5,0,0}, // S_BLASTERSMOKE4
-{SPR_FX18,11,4,NULL,S_NULL,0,0}, // S_BLASTERSMOKE5
-{SPR_FX18,12,4,NULL,S_RIPPER2,0,0}, // S_RIPPER1
-{SPR_FX18,13,5,NULL,S_RIPPER1,0,0}, // S_RIPPER2
-{SPR_FX18,32782,4,NULL,S_RIPPERX2,0,0}, // S_RIPPERX1
-{SPR_FX18,32783,4,NULL,S_RIPPERX3,0,0}, // S_RIPPERX2
-{SPR_FX18,32784,4,NULL,S_RIPPERX4,0,0}, // S_RIPPERX3
-{SPR_FX18,32785,4,NULL,S_RIPPERX5,0,0}, // S_RIPPERX4
-{SPR_FX18,32786,4,NULL,S_NULL,0,0}, // S_RIPPERX5
-{SPR_FX17,32768,4,NULL,S_BLASTERPUFF1_2,0,0}, // S_BLASTERPUFF1_1
-{SPR_FX17,32769,4,NULL,S_BLASTERPUFF1_3,0,0}, // S_BLASTERPUFF1_2
-{SPR_FX17,32770,4,NULL,S_BLASTERPUFF1_4,0,0}, // S_BLASTERPUFF1_3
-{SPR_FX17,32771,4,NULL,S_BLASTERPUFF1_5,0,0}, // S_BLASTERPUFF1_4
-{SPR_FX17,32772,4,NULL,S_NULL,0,0}, // S_BLASTERPUFF1_5
-{SPR_FX17,32773,3,NULL,S_BLASTERPUFF2_2,0,0}, // S_BLASTERPUFF2_1
-{SPR_FX17,32774,3,NULL,S_BLASTERPUFF2_3,0,0}, // S_BLASTERPUFF2_2
-{SPR_FX17,32775,4,NULL,S_BLASTERPUFF2_4,0,0}, // S_BLASTERPUFF2_3
-{SPR_FX17,32776,4,NULL,S_BLASTERPUFF2_5,0,0}, // S_BLASTERPUFF2_4
-{SPR_FX17,32777,4,NULL,S_BLASTERPUFF2_6,0,0}, // S_BLASTERPUFF2_5
-{SPR_FX17,32778,4,NULL,S_BLASTERPUFF2_7,0,0}, // S_BLASTERPUFF2_6
-{SPR_FX17,32779,4,NULL,S_NULL,0,0}, // S_BLASTERPUFF2_7
-{SPR_WMCE,0,-1,NULL,S_NULL,0,0}, // S_WMCE
-{SPR_MACE,0,1,A_WeaponReady,S_MACEREADY,0,0}, // S_MACEREADY
-{SPR_MACE,0,1,A_Lower,S_MACEDOWN,0,0}, // S_MACEDOWN
-{SPR_MACE,0,1,A_Raise,S_MACEUP,0,0}, // S_MACEUP
-{SPR_MACE,1,4,NULL,S_MACEATK1_2,0,0}, // S_MACEATK1_1
-{SPR_MACE,2,3,A_FireMacePL1,S_MACEATK1_3,0,0}, // S_MACEATK1_2
-{SPR_MACE,3,3,A_FireMacePL1,S_MACEATK1_4,0,0}, // S_MACEATK1_3
-{SPR_MACE,4,3,A_FireMacePL1,S_MACEATK1_5,0,0}, // S_MACEATK1_4
-{SPR_MACE,5,3,A_FireMacePL1,S_MACEATK1_6,0,0}, // S_MACEATK1_5
-{SPR_MACE,2,4,A_ReFire,S_MACEATK1_7,0,0}, // S_MACEATK1_6
-{SPR_MACE,3,4,NULL,S_MACEATK1_8,0,0}, // S_MACEATK1_7
-{SPR_MACE,4,4,NULL,S_MACEATK1_9,0,0}, // S_MACEATK1_8
-{SPR_MACE,5,4,NULL,S_MACEATK1_10,0,0}, // S_MACEATK1_9
-{SPR_MACE,1,4,NULL,S_MACEREADY,0,0}, // S_MACEATK1_10
-{SPR_MACE,1,4,NULL,S_MACEATK2_2,0,0}, // S_MACEATK2_1
-{SPR_MACE,3,4,A_FireMacePL2,S_MACEATK2_3,0,0}, // S_MACEATK2_2
-{SPR_MACE,1,4,NULL,S_MACEATK2_4,0,0}, // S_MACEATK2_3
-{SPR_MACE,0,8,A_ReFire,S_MACEREADY,0,0}, // S_MACEATK2_4
-{SPR_FX02,0,4,A_MacePL1Check,S_MACEFX1_2,0,0}, // S_MACEFX1_1
-{SPR_FX02,1,4,A_MacePL1Check,S_MACEFX1_1,0,0}, // S_MACEFX1_2
-{SPR_FX02,32773,4,A_MaceBallImpact,S_MACEFXI1_2,0,0}, // S_MACEFXI1_1
-{SPR_FX02,32774,4,NULL,S_MACEFXI1_3,0,0}, // S_MACEFXI1_2
-{SPR_FX02,32775,4,NULL,S_MACEFXI1_4,0,0}, // S_MACEFXI1_3
-{SPR_FX02,32776,4,NULL,S_MACEFXI1_5,0,0}, // S_MACEFXI1_4
-{SPR_FX02,32777,4,NULL,S_NULL,0,0}, // S_MACEFXI1_5
-{SPR_FX02,2,4,NULL,S_MACEFX2_2,0,0}, // S_MACEFX2_1
-{SPR_FX02,3,4,NULL,S_MACEFX2_1,0,0}, // S_MACEFX2_2
-{SPR_FX02,32773,4,A_MaceBallImpact2,S_MACEFXI1_2,0,0}, // S_MACEFXI2_1
-{SPR_FX02,0,4,NULL,S_MACEFX3_2,0,0}, // S_MACEFX3_1
-{SPR_FX02,1,4,NULL,S_MACEFX3_1,0,0}, // S_MACEFX3_2
-{SPR_FX02,4,99,NULL,S_MACEFX4_1,0,0}, // S_MACEFX4_1
-{SPR_FX02,32770,4,A_DeathBallImpact,S_MACEFXI1_2,0,0}, // S_MACEFXI4_1
-{SPR_WSKL,0,-1,NULL,S_NULL,0,0}, // S_WSKL
-{SPR_HROD,0,1,A_WeaponReady,S_HORNRODREADY,0,0}, // S_HORNRODREADY
-{SPR_HROD,0,1,A_Lower,S_HORNRODDOWN,0,0}, // S_HORNRODDOWN
-{SPR_HROD,0,1,A_Raise,S_HORNRODUP,0,0}, // S_HORNRODUP
-{SPR_HROD,0,4,A_FireSkullRodPL1,S_HORNRODATK1_2,0,0}, // S_HORNRODATK1_1
-{SPR_HROD,1,4,A_FireSkullRodPL1,S_HORNRODATK1_3,0,0}, // S_HORNRODATK1_2
-{SPR_HROD,1,0,A_ReFire,S_HORNRODREADY,0,0}, // S_HORNRODATK1_3
-{SPR_HROD,2,2,NULL,S_HORNRODATK2_2,0,0}, // S_HORNRODATK2_1
-{SPR_HROD,3,3,NULL,S_HORNRODATK2_3,0,0}, // S_HORNRODATK2_2
-{SPR_HROD,4,2,NULL,S_HORNRODATK2_4,0,0}, // S_HORNRODATK2_3
-{SPR_HROD,5,3,NULL,S_HORNRODATK2_5,0,0}, // S_HORNRODATK2_4
-{SPR_HROD,6,4,A_FireSkullRodPL2,S_HORNRODATK2_6,0,0}, // S_HORNRODATK2_5
-{SPR_HROD,5,2,NULL,S_HORNRODATK2_7,0,0}, // S_HORNRODATK2_6
-{SPR_HROD,4,3,NULL,S_HORNRODATK2_8,0,0}, // S_HORNRODATK2_7
-{SPR_HROD,3,2,NULL,S_HORNRODATK2_9,0,0}, // S_HORNRODATK2_8
-{SPR_HROD,2,2,A_ReFire,S_HORNRODREADY,0,0}, // S_HORNRODATK2_9
-{SPR_FX00,32768,6,NULL,S_HRODFX1_2,0,0}, // S_HRODFX1_1
-{SPR_FX00,32769,6,NULL,S_HRODFX1_1,0,0}, // S_HRODFX1_2
-{SPR_FX00,32775,5,NULL,S_HRODFXI1_2,0,0}, // S_HRODFXI1_1
-{SPR_FX00,32776,5,NULL,S_HRODFXI1_3,0,0}, // S_HRODFXI1_2
-{SPR_FX00,32777,4,NULL,S_HRODFXI1_4,0,0}, // S_HRODFXI1_3
-{SPR_FX00,32778,4,NULL,S_HRODFXI1_5,0,0}, // S_HRODFXI1_4
-{SPR_FX00,32779,3,NULL,S_HRODFXI1_6,0,0}, // S_HRODFXI1_5
-{SPR_FX00,32780,3,NULL,S_NULL,0,0}, // S_HRODFXI1_6
-{SPR_FX00,32770,3,NULL,S_HRODFX2_2,0,0}, // S_HRODFX2_1
-{SPR_FX00,32771,3,A_SkullRodPL2Seek,S_HRODFX2_3,0,0}, // S_HRODFX2_2
-{SPR_FX00,32772,3,NULL,S_HRODFX2_4,0,0}, // S_HRODFX2_3
-{SPR_FX00,32773,3,A_SkullRodPL2Seek,S_HRODFX2_1,0,0}, // S_HRODFX2_4
-{SPR_FX00,32775,5,A_AddPlayerRain,S_HRODFXI2_2,0,0}, // S_HRODFXI2_1
-{SPR_FX00,32776,5,NULL,S_HRODFXI2_3,0,0}, // S_HRODFXI2_2
-{SPR_FX00,32777,4,NULL,S_HRODFXI2_4,0,0}, // S_HRODFXI2_3
-{SPR_FX00,32778,3,NULL,S_HRODFXI2_5,0,0}, // S_HRODFXI2_4
-{SPR_FX00,32779,3,NULL,S_HRODFXI2_6,0,0}, // S_HRODFXI2_5
-{SPR_FX00,32780,3,NULL,S_HRODFXI2_7,0,0}, // S_HRODFXI2_6
-{SPR_FX00,6,1,A_HideInCeiling,S_HRODFXI2_8,0,0}, // S_HRODFXI2_7
-{SPR_FX00,6,1,A_SkullRodStorm,S_HRODFXI2_8,0,0}, // S_HRODFXI2_8
-{SPR_FX20,32768,-1,NULL,S_NULL,0,0}, // S_RAINPLR1_1
-{SPR_FX21,32768,-1,NULL,S_NULL,0,0}, // S_RAINPLR2_1
-{SPR_FX22,32768,-1,NULL,S_NULL,0,0}, // S_RAINPLR3_1
-{SPR_FX23,32768,-1,NULL,S_NULL,0,0}, // S_RAINPLR4_1
-{SPR_FX20,32769,4,A_RainImpact,S_RAINPLR1X_2,0,0}, // S_RAINPLR1X_1
-{SPR_FX20,32770,4,NULL,S_RAINPLR1X_3,0,0}, // S_RAINPLR1X_2
-{SPR_FX20,32771,4,NULL,S_RAINPLR1X_4,0,0}, // S_RAINPLR1X_3
-{SPR_FX20,32772,4,NULL,S_RAINPLR1X_5,0,0}, // S_RAINPLR1X_4
-{SPR_FX20,32773,4,NULL,S_NULL,0,0}, // S_RAINPLR1X_5
-{SPR_FX21,32769,4,A_RainImpact,S_RAINPLR2X_2,0,0}, // S_RAINPLR2X_1
-{SPR_FX21,32770,4,NULL,S_RAINPLR2X_3,0,0}, // S_RAINPLR2X_2
-{SPR_FX21,32771,4,NULL,S_RAINPLR2X_4,0,0}, // S_RAINPLR2X_3
-{SPR_FX21,32772,4,NULL,S_RAINPLR2X_5,0,0}, // S_RAINPLR2X_4
-{SPR_FX21,32773,4,NULL,S_NULL,0,0}, // S_RAINPLR2X_5
-{SPR_FX22,32769,4,A_RainImpact,S_RAINPLR3X_2,0,0}, // S_RAINPLR3X_1
-{SPR_FX22,32770,4,NULL,S_RAINPLR3X_3,0,0}, // S_RAINPLR3X_2
-{SPR_FX22,32771,4,NULL,S_RAINPLR3X_4,0,0}, // S_RAINPLR3X_3
-{SPR_FX22,32772,4,NULL,S_RAINPLR3X_5,0,0}, // S_RAINPLR3X_4
-{SPR_FX22,32773,4,NULL,S_NULL,0,0}, // S_RAINPLR3X_5
-{SPR_FX23,32769,4,A_RainImpact,S_RAINPLR4X_2,0,0}, // S_RAINPLR4X_1
-{SPR_FX23,32770,4,NULL,S_RAINPLR4X_3,0,0}, // S_RAINPLR4X_2
-{SPR_FX23,32771,4,NULL,S_RAINPLR4X_4,0,0}, // S_RAINPLR4X_3
-{SPR_FX23,32772,4,NULL,S_RAINPLR4X_5,0,0}, // S_RAINPLR4X_4
-{SPR_FX23,32773,4,NULL,S_NULL,0,0}, // S_RAINPLR4X_5
-{SPR_FX20,32774,4,NULL,S_RAINAIRXPLR1_2,0,0}, // S_RAINAIRXPLR1_1
-{SPR_FX21,32774,4,NULL,S_RAINAIRXPLR2_2,0,0}, // S_RAINAIRXPLR2_1
-{SPR_FX22,32774,4,NULL,S_RAINAIRXPLR3_2,0,0}, // S_RAINAIRXPLR3_1
-{SPR_FX23,32774,4,NULL,S_RAINAIRXPLR4_2,0,0}, // S_RAINAIRXPLR4_1
-{SPR_FX20,32775,4,NULL,S_RAINAIRXPLR1_3,0,0}, // S_RAINAIRXPLR1_2
-{SPR_FX21,32775,4,NULL,S_RAINAIRXPLR2_3,0,0}, // S_RAINAIRXPLR2_2
-{SPR_FX22,32775,4,NULL,S_RAINAIRXPLR3_3,0,0}, // S_RAINAIRXPLR3_2
-{SPR_FX23,32775,4,NULL,S_RAINAIRXPLR4_3,0,0}, // S_RAINAIRXPLR4_2
-{SPR_FX20,32776,4,NULL,S_NULL,0,0}, // S_RAINAIRXPLR1_3
-{SPR_FX21,32776,4,NULL,S_NULL,0,0}, // S_RAINAIRXPLR2_3
-{SPR_FX22,32776,4,NULL,S_NULL,0,0}, // S_RAINAIRXPLR3_3
-{SPR_FX23,32776,4,NULL,S_NULL,0,0}, // S_RAINAIRXPLR4_3
-{SPR_GWND,0,1,A_WeaponReady,S_GOLDWANDREADY,0,0}, // S_GOLDWANDREADY
-{SPR_GWND,0,1,A_Lower,S_GOLDWANDDOWN,0,0}, // S_GOLDWANDDOWN
-{SPR_GWND,0,1,A_Raise,S_GOLDWANDUP,0,0}, // S_GOLDWANDUP
-{SPR_GWND,1,3,NULL,S_GOLDWANDATK1_2,0,0}, // S_GOLDWANDATK1_1
-{SPR_GWND,2,5,A_FireGoldWandPL1,S_GOLDWANDATK1_3,0,0}, // S_GOLDWANDATK1_2
-{SPR_GWND,3,3,NULL,S_GOLDWANDATK1_4,0,0}, // S_GOLDWANDATK1_3
-{SPR_GWND,3,0,A_ReFire,S_GOLDWANDREADY,0,0}, // S_GOLDWANDATK1_4
-{SPR_GWND,1,3,NULL,S_GOLDWANDATK2_2,0,0}, // S_GOLDWANDATK2_1
-{SPR_GWND,2,4,A_FireGoldWandPL2,S_GOLDWANDATK2_3,0,0}, // S_GOLDWANDATK2_2
-{SPR_GWND,3,3,NULL,S_GOLDWANDATK2_4,0,0}, // S_GOLDWANDATK2_3
-{SPR_GWND,3,0,A_ReFire,S_GOLDWANDREADY,0,0}, // S_GOLDWANDATK2_4
-{SPR_FX01,32768,6,NULL,S_GWANDFX1_2,0,0}, // S_GWANDFX1_1
-{SPR_FX01,32769,6,NULL,S_GWANDFX1_1,0,0}, // S_GWANDFX1_2
-{SPR_FX01,32772,3,NULL,S_GWANDFXI1_2,0,0}, // S_GWANDFXI1_1
-{SPR_FX01,32773,3,NULL,S_GWANDFXI1_3,0,0}, // S_GWANDFXI1_2
-{SPR_FX01,32774,3,NULL,S_GWANDFXI1_4,0,0}, // S_GWANDFXI1_3
-{SPR_FX01,32775,3,NULL,S_NULL,0,0}, // S_GWANDFXI1_4
-{SPR_FX01,32770,6,NULL,S_GWANDFX2_2,0,0}, // S_GWANDFX2_1
-{SPR_FX01,32771,6,NULL,S_GWANDFX2_1,0,0}, // S_GWANDFX2_2
-{SPR_PUF2,32768,3,NULL,S_GWANDPUFF1_2,0,0}, // S_GWANDPUFF1_1
-{SPR_PUF2,32769,3,NULL,S_GWANDPUFF1_3,0,0}, // S_GWANDPUFF1_2
-{SPR_PUF2,32770,3,NULL,S_GWANDPUFF1_4,0,0}, // S_GWANDPUFF1_3
-{SPR_PUF2,32771,3,NULL,S_GWANDPUFF1_5,0,0}, // S_GWANDPUFF1_4
-{SPR_PUF2,32772,3,NULL,S_NULL,0,0}, // S_GWANDPUFF1_5
-{SPR_WPHX,0,-1,NULL,S_NULL,0,0}, // S_WPHX
-{SPR_PHNX,0,1,A_WeaponReady,S_PHOENIXREADY,0,0}, // S_PHOENIXREADY
-{SPR_PHNX,0,1,A_Lower,S_PHOENIXDOWN,0,0}, // S_PHOENIXDOWN
-{SPR_PHNX,0,1,A_Raise,S_PHOENIXUP,0,0}, // S_PHOENIXUP
-{SPR_PHNX,1,5,NULL,S_PHOENIXATK1_2,0,0}, // S_PHOENIXATK1_1
-{SPR_PHNX,2,7,A_FirePhoenixPL1,S_PHOENIXATK1_3,0,0}, // S_PHOENIXATK1_2
-{SPR_PHNX,3,4,NULL,S_PHOENIXATK1_4,0,0}, // S_PHOENIXATK1_3
-{SPR_PHNX,1,4,NULL,S_PHOENIXATK1_5,0,0}, // S_PHOENIXATK1_4
-{SPR_PHNX,1,0,A_ReFire,S_PHOENIXREADY,0,0}, // S_PHOENIXATK1_5
-{SPR_PHNX,1,3,A_InitPhoenixPL2,S_PHOENIXATK2_2,0,0}, // S_PHOENIXATK2_1
-{SPR_PHNX,32770,1,A_FirePhoenixPL2,S_PHOENIXATK2_3,0,0}, // S_PHOENIXATK2_2
-{SPR_PHNX,1,4,A_ReFire,S_PHOENIXATK2_4,0,0}, // S_PHOENIXATK2_3
-{SPR_PHNX,1,4,A_ShutdownPhoenixPL2,S_PHOENIXREADY,0,0}, // S_PHOENIXATK2_4
-{SPR_FX04,32768,4,A_PhoenixPuff,S_PHOENIXFX1_1,0,0}, // S_PHOENIXFX1_1
-{SPR_FX08,32768,6,A_Explode,S_PHOENIXFXI1_2,0,0}, // S_PHOENIXFXI1_1
-{SPR_FX08,32769,5,NULL,S_PHOENIXFXI1_3,0,0}, // S_PHOENIXFXI1_2
-{SPR_FX08,32770,5,NULL,S_PHOENIXFXI1_4,0,0}, // S_PHOENIXFXI1_3
-{SPR_FX08,32771,4,NULL,S_PHOENIXFXI1_5,0,0}, // S_PHOENIXFXI1_4
-{SPR_FX08,32772,4,NULL,S_PHOENIXFXI1_6,0,0}, // S_PHOENIXFXI1_5
-{SPR_FX08,32773,4,NULL,S_PHOENIXFXI1_7,0,0}, // S_PHOENIXFXI1_6
-{SPR_FX08,32774,4,NULL,S_PHOENIXFXI1_8,0,0}, // S_PHOENIXFXI1_7
-{SPR_FX08,32775,4,NULL,S_NULL,0,0}, // S_PHOENIXFXI1_8
-{SPR_FX04,1,4,NULL,S_PHOENIXPUFF2,0,0}, // S_PHOENIXPUFF1
-{SPR_FX04,2,4,NULL,S_PHOENIXPUFF3,0,0}, // S_PHOENIXPUFF2
-{SPR_FX04,3,4,NULL,S_PHOENIXPUFF4,0,0}, // S_PHOENIXPUFF3
-{SPR_FX04,4,4,NULL,S_PHOENIXPUFF5,0,0}, // S_PHOENIXPUFF4
-{SPR_FX04,5,4,NULL,S_NULL,0,0}, // S_PHOENIXPUFF5
-{SPR_FX09,32768,2,NULL,S_PHOENIXFX2_2,0,0}, // S_PHOENIXFX2_1
-{SPR_FX09,32769,2,NULL,S_PHOENIXFX2_3,0,0}, // S_PHOENIXFX2_2
-{SPR_FX09,32768,2,NULL,S_PHOENIXFX2_4,0,0}, // S_PHOENIXFX2_3
-{SPR_FX09,32769,2,NULL,S_PHOENIXFX2_5,0,0}, // S_PHOENIXFX2_4
-{SPR_FX09,32768,2,NULL,S_PHOENIXFX2_6,0,0}, // S_PHOENIXFX2_5
-{SPR_FX09,32769,2,A_FlameEnd,S_PHOENIXFX2_7,0,0}, // S_PHOENIXFX2_6
-{SPR_FX09,32770,2,NULL,S_PHOENIXFX2_8,0,0}, // S_PHOENIXFX2_7
-{SPR_FX09,32771,2,NULL,S_PHOENIXFX2_9,0,0}, // S_PHOENIXFX2_8
-{SPR_FX09,32772,2,NULL,S_PHOENIXFX2_10,0,0}, // S_PHOENIXFX2_9
-{SPR_FX09,32773,2,NULL,S_NULL,0,0}, // S_PHOENIXFX2_10
-{SPR_FX09,32774,3,NULL,S_PHOENIXFXI2_2,0,0}, // S_PHOENIXFXI2_1
-{SPR_FX09,32775,3,A_FloatPuff,S_PHOENIXFXI2_3,0,0}, // S_PHOENIXFXI2_2
-{SPR_FX09,32776,4,NULL,S_PHOENIXFXI2_4,0,0}, // S_PHOENIXFXI2_3
-{SPR_FX09,32777,5,NULL,S_PHOENIXFXI2_5,0,0}, // S_PHOENIXFXI2_4
-{SPR_FX09,32778,5,NULL,S_NULL,0,0}, // S_PHOENIXFXI2_5
-{SPR_WBOW,0,-1,NULL,S_NULL,0,0}, // S_WBOW
-{SPR_CRBW,0,1,A_WeaponReady,S_CRBOW2,0,0}, // S_CRBOW1
-{SPR_CRBW,0,1,A_WeaponReady,S_CRBOW3,0,0}, // S_CRBOW2
-{SPR_CRBW,0,1,A_WeaponReady,S_CRBOW4,0,0}, // S_CRBOW3
-{SPR_CRBW,0,1,A_WeaponReady,S_CRBOW5,0,0}, // S_CRBOW4
-{SPR_CRBW,0,1,A_WeaponReady,S_CRBOW6,0,0}, // S_CRBOW5
-{SPR_CRBW,0,1,A_WeaponReady,S_CRBOW7,0,0}, // S_CRBOW6
-{SPR_CRBW,1,1,A_WeaponReady,S_CRBOW8,0,0}, // S_CRBOW7
-{SPR_CRBW,1,1,A_WeaponReady,S_CRBOW9,0,0}, // S_CRBOW8
-{SPR_CRBW,1,1,A_WeaponReady,S_CRBOW10,0,0}, // S_CRBOW9
-{SPR_CRBW,1,1,A_WeaponReady,S_CRBOW11,0,0}, // S_CRBOW10
-{SPR_CRBW,1,1,A_WeaponReady,S_CRBOW12,0,0}, // S_CRBOW11
-{SPR_CRBW,1,1,A_WeaponReady,S_CRBOW13,0,0}, // S_CRBOW12
-{SPR_CRBW,2,1,A_WeaponReady,S_CRBOW14,0,0}, // S_CRBOW13
-{SPR_CRBW,2,1,A_WeaponReady,S_CRBOW15,0,0}, // S_CRBOW14
-{SPR_CRBW,2,1,A_WeaponReady,S_CRBOW16,0,0}, // S_CRBOW15
-{SPR_CRBW,2,1,A_WeaponReady,S_CRBOW17,0,0}, // S_CRBOW16
-{SPR_CRBW,2,1,A_WeaponReady,S_CRBOW18,0,0}, // S_CRBOW17
-{SPR_CRBW,2,1,A_WeaponReady,S_CRBOW1,0,0}, // S_CRBOW18
-{SPR_CRBW,0,1,A_Lower,S_CRBOWDOWN,0,0}, // S_CRBOWDOWN
-{SPR_CRBW,0,1,A_Raise,S_CRBOWUP,0,0}, // S_CRBOWUP
-{SPR_CRBW,3,6,A_FireCrossbowPL1,S_CRBOWATK1_2,0,0}, // S_CRBOWATK1_1
-{SPR_CRBW,4,3,NULL,S_CRBOWATK1_3,0,0}, // S_CRBOWATK1_2
-{SPR_CRBW,5,3,NULL,S_CRBOWATK1_4,0,0}, // S_CRBOWATK1_3
-{SPR_CRBW,6,3,NULL,S_CRBOWATK1_5,0,0}, // S_CRBOWATK1_4
-{SPR_CRBW,7,3,NULL,S_CRBOWATK1_6,0,0}, // S_CRBOWATK1_5
-{SPR_CRBW,0,4,NULL,S_CRBOWATK1_7,0,0}, // S_CRBOWATK1_6
-{SPR_CRBW,1,4,NULL,S_CRBOWATK1_8,0,0}, // S_CRBOWATK1_7
-{SPR_CRBW,2,5,A_ReFire,S_CRBOW1,0,0}, // S_CRBOWATK1_8
-{SPR_CRBW,3,5,A_FireCrossbowPL2,S_CRBOWATK2_2,0,0}, // S_CRBOWATK2_1
-{SPR_CRBW,4,3,NULL,S_CRBOWATK2_3,0,0}, // S_CRBOWATK2_2
-{SPR_CRBW,5,2,NULL,S_CRBOWATK2_4,0,0}, // S_CRBOWATK2_3
-{SPR_CRBW,6,3,NULL,S_CRBOWATK2_5,0,0}, // S_CRBOWATK2_4
-{SPR_CRBW,7,2,NULL,S_CRBOWATK2_6,0,0}, // S_CRBOWATK2_5
-{SPR_CRBW,0,3,NULL,S_CRBOWATK2_7,0,0}, // S_CRBOWATK2_6
-{SPR_CRBW,1,3,NULL,S_CRBOWATK2_8,0,0}, // S_CRBOWATK2_7
-{SPR_CRBW,2,4,A_ReFire,S_CRBOW1,0,0}, // S_CRBOWATK2_8
-{SPR_FX03,32769,1,NULL,S_CRBOWFX1,0,0}, // S_CRBOWFX1
-{SPR_FX03,32775,8,NULL,S_CRBOWFXI1_2,0,0}, // S_CRBOWFXI1_1
-{SPR_FX03,32776,8,NULL,S_CRBOWFXI1_3,0,0}, // S_CRBOWFXI1_2
-{SPR_FX03,32777,8,NULL,S_NULL,0,0}, // S_CRBOWFXI1_3
-{SPR_FX03,32769,1,A_BoltSpark,S_CRBOWFX2,0,0}, // S_CRBOWFX2
-{SPR_FX03,32768,1,NULL,S_CRBOWFX3,0,0}, // S_CRBOWFX3
-{SPR_FX03,32770,8,NULL,S_CRBOWFXI3_2,0,0}, // S_CRBOWFXI3_1
-{SPR_FX03,32771,8,NULL,S_CRBOWFXI3_3,0,0}, // S_CRBOWFXI3_2
-{SPR_FX03,32772,8,NULL,S_NULL,0,0}, // S_CRBOWFXI3_3
-{SPR_FX03,32773,8,NULL,S_CRBOWFX4_2,0,0}, // S_CRBOWFX4_1
-{SPR_FX03,32774,8,NULL,S_NULL,0,0}, // S_CRBOWFX4_2
-{SPR_BLOD,2,8,NULL,S_BLOOD2,0,0}, // S_BLOOD1
-{SPR_BLOD,1,8,NULL,S_BLOOD3,0,0}, // S_BLOOD2
-{SPR_BLOD,0,8,NULL,S_NULL,0,0}, // S_BLOOD3
-{SPR_BLOD,2,8,NULL,S_BLOODSPLATTER2,0,0}, // S_BLOODSPLATTER1
-{SPR_BLOD,1,8,NULL,S_BLOODSPLATTER3,0,0}, // S_BLOODSPLATTER2
-{SPR_BLOD,0,8,NULL,S_NULL,0,0}, // S_BLOODSPLATTER3
-{SPR_BLOD,0,6,NULL,S_NULL,0,0}, // S_BLOODSPLATTERX
-{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,6,NULL,S_PLAY_DIE2,0,0}, // S_PLAY_DIE1
-{SPR_PLAY,8,6,A_Scream,S_PLAY_DIE3,0,0}, // S_PLAY_DIE2
-{SPR_PLAY,9,6,NULL,S_PLAY_DIE4,0,0}, // S_PLAY_DIE3
-{SPR_PLAY,10,6,NULL,S_PLAY_DIE5,0,0}, // S_PLAY_DIE4
-{SPR_PLAY,11,6,A_NoBlocking,S_PLAY_DIE6,0,0}, // S_PLAY_DIE5
-{SPR_PLAY,12,6,NULL,S_PLAY_DIE7,0,0}, // S_PLAY_DIE6
-{SPR_PLAY,13,6,NULL,S_PLAY_DIE8,0,0}, // S_PLAY_DIE7
-{SPR_PLAY,14,6,NULL,S_PLAY_DIE9,0,0}, // S_PLAY_DIE8
-{SPR_PLAY,15,-1,A_AddPlayerCorpse,S_NULL,0,0}, // S_PLAY_DIE9
-{SPR_PLAY,16,5,A_Scream,S_PLAY_XDIE2,0,0}, // S_PLAY_XDIE1
-{SPR_PLAY,17,5,A_SkullPop,S_PLAY_XDIE3,0,0}, // S_PLAY_XDIE2
-{SPR_PLAY,18,5,A_NoBlocking,S_PLAY_XDIE4,0,0}, // S_PLAY_XDIE3
-{SPR_PLAY,19,5,NULL,S_PLAY_XDIE5,0,0}, // S_PLAY_XDIE4
-{SPR_PLAY,20,5,NULL,S_PLAY_XDIE6,0,0}, // S_PLAY_XDIE5
-{SPR_PLAY,21,5,NULL,S_PLAY_XDIE7,0,0}, // S_PLAY_XDIE6
-{SPR_PLAY,22,5,NULL,S_PLAY_XDIE8,0,0}, // S_PLAY_XDIE7
-{SPR_PLAY,23,5,NULL,S_PLAY_XDIE9,0,0}, // S_PLAY_XDIE8
-{SPR_PLAY,24,-1,A_AddPlayerCorpse,S_NULL,0,0}, // S_PLAY_XDIE9
-{SPR_FDTH,32768,5,A_FlameSnd,S_PLAY_FDTH2,0,0}, // S_PLAY_FDTH1
-{SPR_FDTH,32769,4,NULL,S_PLAY_FDTH3,0,0}, // S_PLAY_FDTH2
-{SPR_FDTH,32770,5,NULL,S_PLAY_FDTH4,0,0}, // S_PLAY_FDTH3
-{SPR_FDTH,32771,4,A_Scream,S_PLAY_FDTH5,0,0}, // S_PLAY_FDTH4
-{SPR_FDTH,32772,5,NULL,S_PLAY_FDTH6,0,0}, // S_PLAY_FDTH5
-{SPR_FDTH,32773,4,NULL,S_PLAY_FDTH7,0,0}, // S_PLAY_FDTH6
-{SPR_FDTH,32774,5,A_FlameSnd,S_PLAY_FDTH8,0,0}, // S_PLAY_FDTH7
-{SPR_FDTH,32775,4,NULL,S_PLAY_FDTH9,0,0}, // S_PLAY_FDTH8
-{SPR_FDTH,32776,5,NULL,S_PLAY_FDTH10,0,0}, // S_PLAY_FDTH9
-{SPR_FDTH,32777,4,NULL,S_PLAY_FDTH11,0,0}, // S_PLAY_FDTH10
-{SPR_FDTH,32778,5,NULL,S_PLAY_FDTH12,0,0}, // S_PLAY_FDTH11
-{SPR_FDTH,32779,4,NULL,S_PLAY_FDTH13,0,0}, // S_PLAY_FDTH12
-{SPR_FDTH,32780,5,NULL,S_PLAY_FDTH14,0,0}, // S_PLAY_FDTH13
-{SPR_FDTH,32781,4,NULL,S_PLAY_FDTH15,0,0}, // S_PLAY_FDTH14
-{SPR_FDTH,32782,5,A_NoBlocking,S_PLAY_FDTH16,0,0}, // S_PLAY_FDTH15
-{SPR_FDTH,32783,4,NULL,S_PLAY_FDTH17,0,0}, // S_PLAY_FDTH16
-{SPR_FDTH,32784,5,NULL,S_PLAY_FDTH18,0,0}, // S_PLAY_FDTH17
-{SPR_FDTH,32785,4,NULL,S_PLAY_FDTH19,0,0}, // S_PLAY_FDTH18
-{SPR_ACLO,4,35,A_CheckBurnGone,S_PLAY_FDTH19,0,0}, // S_PLAY_FDTH19
-{SPR_ACLO,4,8,NULL,S_NULL,0,0}, // S_PLAY_FDTH20
-{SPR_BSKL,0,5,A_CheckSkullFloor,S_BLOODYSKULL2,0,0}, // S_BLOODYSKULL1
-{SPR_BSKL,1,5,A_CheckSkullFloor,S_BLOODYSKULL3,0,0}, // S_BLOODYSKULL2
-{SPR_BSKL,2,5,A_CheckSkullFloor,S_BLOODYSKULL4,0,0}, // S_BLOODYSKULL3
-{SPR_BSKL,3,5,A_CheckSkullFloor,S_BLOODYSKULL5,0,0}, // S_BLOODYSKULL4
-{SPR_BSKL,4,5,A_CheckSkullFloor,S_BLOODYSKULL1,0,0}, // S_BLOODYSKULL5
-{SPR_BSKL,5,16,A_CheckSkullDone,S_BLOODYSKULLX1,0,0}, // S_BLOODYSKULLX1
-{SPR_BSKL,5,1050,NULL,S_NULL,0,0}, // S_BLOODYSKULLX2
-{SPR_CHKN,0,-1,NULL,S_NULL,0,0}, // S_CHICPLAY
-{SPR_CHKN,0,3,NULL,S_CHICPLAY_RUN2,0,0}, // S_CHICPLAY_RUN1
-{SPR_CHKN,1,3,NULL,S_CHICPLAY_RUN3,0,0}, // S_CHICPLAY_RUN2
-{SPR_CHKN,0,3,NULL,S_CHICPLAY_RUN4,0,0}, // S_CHICPLAY_RUN3
-{SPR_CHKN,1,3,NULL,S_CHICPLAY_RUN1,0,0}, // S_CHICPLAY_RUN4
-{SPR_CHKN,2,12,NULL,S_CHICPLAY,0,0}, // S_CHICPLAY_ATK1
-{SPR_CHKN,3,4,A_Feathers,S_CHICPLAY_PAIN2,0,0}, // S_CHICPLAY_PAIN
-{SPR_CHKN,2,4,A_Pain,S_CHICPLAY,0,0}, // S_CHICPLAY_PAIN2
-{SPR_CHKN,0,10,A_ChicLook,S_CHICKEN_LOOK2,0,0}, // S_CHICKEN_LOOK1
-{SPR_CHKN,1,10,A_ChicLook,S_CHICKEN_LOOK1,0,0}, // S_CHICKEN_LOOK2
-{SPR_CHKN,0,3,A_ChicChase,S_CHICKEN_WALK2,0,0}, // S_CHICKEN_WALK1
-{SPR_CHKN,1,3,A_ChicChase,S_CHICKEN_WALK1,0,0}, // S_CHICKEN_WALK2
-{SPR_CHKN,3,5,A_Feathers,S_CHICKEN_PAIN2,0,0}, // S_CHICKEN_PAIN1
-{SPR_CHKN,2,5,A_ChicPain,S_CHICKEN_WALK1,0,0}, // S_CHICKEN_PAIN2
-{SPR_CHKN,0,8,A_FaceTarget,S_CHICKEN_ATK2,0,0}, // S_CHICKEN_ATK1
-{SPR_CHKN,2,10,A_ChicAttack,S_CHICKEN_WALK1,0,0}, // S_CHICKEN_ATK2
-{SPR_CHKN,4,6,A_Scream,S_CHICKEN_DIE2,0,0}, // S_CHICKEN_DIE1
-{SPR_CHKN,5,6,A_Feathers,S_CHICKEN_DIE3,0,0}, // S_CHICKEN_DIE2
-{SPR_CHKN,6,6,NULL,S_CHICKEN_DIE4,0,0}, // S_CHICKEN_DIE3
-{SPR_CHKN,7,6,A_NoBlocking,S_CHICKEN_DIE5,0,0}, // S_CHICKEN_DIE4
-{SPR_CHKN,8,6,NULL,S_CHICKEN_DIE6,0,0}, // S_CHICKEN_DIE5
-{SPR_CHKN,9,6,NULL,S_CHICKEN_DIE7,0,0}, // S_CHICKEN_DIE6
-{SPR_CHKN,10,6,NULL,S_CHICKEN_DIE8,0,0}, // S_CHICKEN_DIE7
-{SPR_CHKN,11,-1,NULL,S_NULL,0,0}, // S_CHICKEN_DIE8
-{SPR_CHKN,12,3,NULL,S_FEATHER2,0,0}, // S_FEATHER1
-{SPR_CHKN,13,3,NULL,S_FEATHER3,0,0}, // S_FEATHER2
-{SPR_CHKN,14,3,NULL,S_FEATHER4,0,0}, // S_FEATHER3
-{SPR_CHKN,15,3,NULL,S_FEATHER5,0,0}, // S_FEATHER4
-{SPR_CHKN,16,3,NULL,S_FEATHER6,0,0}, // S_FEATHER5
-{SPR_CHKN,15,3,NULL,S_FEATHER7,0,0}, // S_FEATHER6
-{SPR_CHKN,14,3,NULL,S_FEATHER8,0,0}, // S_FEATHER7
-{SPR_CHKN,13,3,NULL,S_FEATHER1,0,0}, // S_FEATHER8
-{SPR_CHKN,13,6,NULL,S_NULL,0,0}, // S_FEATHERX
-{SPR_MUMM,0,10,A_Look,S_MUMMY_LOOK2,0,0}, // S_MUMMY_LOOK1
-{SPR_MUMM,1,10,A_Look,S_MUMMY_LOOK1,0,0}, // S_MUMMY_LOOK2
-{SPR_MUMM,0,4,A_Chase,S_MUMMY_WALK2,0,0}, // S_MUMMY_WALK1
-{SPR_MUMM,1,4,A_Chase,S_MUMMY_WALK3,0,0}, // S_MUMMY_WALK2
-{SPR_MUMM,2,4,A_Chase,S_MUMMY_WALK4,0,0}, // S_MUMMY_WALK3
-{SPR_MUMM,3,4,A_Chase,S_MUMMY_WALK1,0,0}, // S_MUMMY_WALK4
-{SPR_MUMM,4,6,A_FaceTarget,S_MUMMY_ATK2,0,0}, // S_MUMMY_ATK1
-{SPR_MUMM,5,6,A_MummyAttack,S_MUMMY_ATK3,0,0}, // S_MUMMY_ATK2
-{SPR_MUMM,6,6,A_FaceTarget,S_MUMMY_WALK1,0,0}, // S_MUMMY_ATK3
-{SPR_MUMM,23,5,A_FaceTarget,S_MUMMYL_ATK2,0,0}, // S_MUMMYL_ATK1
-{SPR_MUMM,32792,5,A_FaceTarget,S_MUMMYL_ATK3,0,0}, // S_MUMMYL_ATK2
-{SPR_MUMM,23,5,A_FaceTarget,S_MUMMYL_ATK4,0,0}, // S_MUMMYL_ATK3
-{SPR_MUMM,32792,5,A_FaceTarget,S_MUMMYL_ATK5,0,0}, // S_MUMMYL_ATK4
-{SPR_MUMM,23,5,A_FaceTarget,S_MUMMYL_ATK6,0,0}, // S_MUMMYL_ATK5
-{SPR_MUMM,32792,15,A_MummyAttack2,S_MUMMY_WALK1,0,0}, // S_MUMMYL_ATK6
-{SPR_MUMM,7,4,NULL,S_MUMMY_PAIN2,0,0}, // S_MUMMY_PAIN1
-{SPR_MUMM,7,4,A_Pain,S_MUMMY_WALK1,0,0}, // S_MUMMY_PAIN2
-{SPR_MUMM,8,5,NULL,S_MUMMY_DIE2,0,0}, // S_MUMMY_DIE1
-{SPR_MUMM,9,5,A_Scream,S_MUMMY_DIE3,0,0}, // S_MUMMY_DIE2
-{SPR_MUMM,10,5,A_MummySoul,S_MUMMY_DIE4,0,0}, // S_MUMMY_DIE3
-{SPR_MUMM,11,5,NULL,S_MUMMY_DIE5,0,0}, // S_MUMMY_DIE4
-{SPR_MUMM,12,5,A_NoBlocking,S_MUMMY_DIE6,0,0}, // S_MUMMY_DIE5
-{SPR_MUMM,13,5,NULL,S_MUMMY_DIE7,0,0}, // S_MUMMY_DIE6
-{SPR_MUMM,14,5,NULL,S_MUMMY_DIE8,0,0}, // S_MUMMY_DIE7
-{SPR_MUMM,15,-1,NULL,S_NULL,0,0}, // S_MUMMY_DIE8
-{SPR_MUMM,16,5,NULL,S_MUMMY_SOUL2,0,0}, // S_MUMMY_SOUL1
-{SPR_MUMM,17,5,NULL,S_MUMMY_SOUL3,0,0}, // S_MUMMY_SOUL2
-{SPR_MUMM,18,5,NULL,S_MUMMY_SOUL4,0,0}, // S_MUMMY_SOUL3
-{SPR_MUMM,19,9,NULL,S_MUMMY_SOUL5,0,0}, // S_MUMMY_SOUL4
-{SPR_MUMM,20,5,NULL,S_MUMMY_SOUL6,0,0}, // S_MUMMY_SOUL5
-{SPR_MUMM,21,5,NULL,S_MUMMY_SOUL7,0,0}, // S_MUMMY_SOUL6
-{SPR_MUMM,22,5,NULL,S_NULL,0,0}, // S_MUMMY_SOUL7
-{SPR_FX15,32768,5,A_ContMobjSound,S_MUMMYFX1_2,0,0}, // S_MUMMYFX1_1
-{SPR_FX15,32769,5,A_MummyFX1Seek,S_MUMMYFX1_3,0,0}, // S_MUMMYFX1_2
-{SPR_FX15,32770,5,NULL,S_MUMMYFX1_4,0,0}, // S_MUMMYFX1_3
-{SPR_FX15,32769,5,A_MummyFX1Seek,S_MUMMYFX1_1,0,0}, // S_MUMMYFX1_4
-{SPR_FX15,32771,5,NULL,S_MUMMYFXI1_2,0,0}, // S_MUMMYFXI1_1
-{SPR_FX15,32772,5,NULL,S_MUMMYFXI1_3,0,0}, // S_MUMMYFXI1_2
-{SPR_FX15,32773,5,NULL,S_MUMMYFXI1_4,0,0}, // S_MUMMYFXI1_3
-{SPR_FX15,32774,5,NULL,S_NULL,0,0}, // S_MUMMYFXI1_4
-{SPR_BEAS,0,10,A_Look,S_BEAST_LOOK2,0,0}, // S_BEAST_LOOK1
-{SPR_BEAS,1,10,A_Look,S_BEAST_LOOK1,0,0}, // S_BEAST_LOOK2
-{SPR_BEAS,0,3,A_Chase,S_BEAST_WALK2,0,0}, // S_BEAST_WALK1
-{SPR_BEAS,1,3,A_Chase,S_BEAST_WALK3,0,0}, // S_BEAST_WALK2
-{SPR_BEAS,2,3,A_Chase,S_BEAST_WALK4,0,0}, // S_BEAST_WALK3
-{SPR_BEAS,3,3,A_Chase,S_BEAST_WALK5,0,0}, // S_BEAST_WALK4
-{SPR_BEAS,4,3,A_Chase,S_BEAST_WALK6,0,0}, // S_BEAST_WALK5
-{SPR_BEAS,5,3,A_Chase,S_BEAST_WALK1,0,0}, // S_BEAST_WALK6
-{SPR_BEAS,7,10,A_FaceTarget,S_BEAST_ATK2,0,0}, // S_BEAST_ATK1
-{SPR_BEAS,8,10,A_BeastAttack,S_BEAST_WALK1,0,0}, // S_BEAST_ATK2
-{SPR_BEAS,6,3,NULL,S_BEAST_PAIN2,0,0}, // S_BEAST_PAIN1
-{SPR_BEAS,6,3,A_Pain,S_BEAST_WALK1,0,0}, // S_BEAST_PAIN2
-{SPR_BEAS,17,6,NULL,S_BEAST_DIE2,0,0}, // S_BEAST_DIE1
-{SPR_BEAS,18,6,A_Scream,S_BEAST_DIE3,0,0}, // S_BEAST_DIE2
-{SPR_BEAS,19,6,NULL,S_BEAST_DIE4,0,0}, // S_BEAST_DIE3
-{SPR_BEAS,20,6,NULL,S_BEAST_DIE5,0,0}, // S_BEAST_DIE4
-{SPR_BEAS,21,6,NULL,S_BEAST_DIE6,0,0}, // S_BEAST_DIE5
-{SPR_BEAS,22,6,A_NoBlocking,S_BEAST_DIE7,0,0}, // S_BEAST_DIE6
-{SPR_BEAS,23,6,NULL,S_BEAST_DIE8,0,0}, // S_BEAST_DIE7
-{SPR_BEAS,24,6,NULL,S_BEAST_DIE9,0,0}, // S_BEAST_DIE8
-{SPR_BEAS,25,-1,NULL,S_NULL,0,0}, // S_BEAST_DIE9
-{SPR_BEAS,9,5,NULL,S_BEAST_XDIE2,0,0}, // S_BEAST_XDIE1
-{SPR_BEAS,10,6,A_Scream,S_BEAST_XDIE3,0,0}, // S_BEAST_XDIE2
-{SPR_BEAS,11,5,NULL,S_BEAST_XDIE4,0,0}, // S_BEAST_XDIE3
-{SPR_BEAS,12,6,NULL,S_BEAST_XDIE5,0,0}, // S_BEAST_XDIE4
-{SPR_BEAS,13,5,NULL,S_BEAST_XDIE6,0,0}, // S_BEAST_XDIE5
-{SPR_BEAS,14,6,A_NoBlocking,S_BEAST_XDIE7,0,0}, // S_BEAST_XDIE6
-{SPR_BEAS,15,5,NULL,S_BEAST_XDIE8,0,0}, // S_BEAST_XDIE7
-{SPR_BEAS,16,-1,NULL,S_NULL,0,0}, // S_BEAST_XDIE8
-{SPR_FRB1,0,2,A_BeastPuff,S_BEASTBALL2,0,0}, // S_BEASTBALL1
-{SPR_FRB1,0,2,A_BeastPuff,S_BEASTBALL3,0,0}, // S_BEASTBALL2
-{SPR_FRB1,1,2,A_BeastPuff,S_BEASTBALL4,0,0}, // S_BEASTBALL3
-{SPR_FRB1,1,2,A_BeastPuff,S_BEASTBALL5,0,0}, // S_BEASTBALL4
-{SPR_FRB1,2,2,A_BeastPuff,S_BEASTBALL6,0,0}, // S_BEASTBALL5
-{SPR_FRB1,2,2,A_BeastPuff,S_BEASTBALL1,0,0}, // S_BEASTBALL6
-{SPR_FRB1,3,4,NULL,S_BEASTBALLX2,0,0}, // S_BEASTBALLX1
-{SPR_FRB1,4,4,NULL,S_BEASTBALLX3,0,0}, // S_BEASTBALLX2
-{SPR_FRB1,5,4,NULL,S_BEASTBALLX4,0,0}, // S_BEASTBALLX3
-{SPR_FRB1,6,4,NULL,S_BEASTBALLX5,0,0}, // S_BEASTBALLX4
-{SPR_FRB1,7,4,NULL,S_NULL,0,0}, // S_BEASTBALLX5
-{SPR_FRB1,0,4,NULL,S_BURNBALL2,0,0}, // S_BURNBALL1
-{SPR_FRB1,1,4,NULL,S_BURNBALL3,0,0}, // S_BURNBALL2
-{SPR_FRB1,2,4,NULL,S_BURNBALL4,0,0}, // S_BURNBALL3
-{SPR_FRB1,3,4,NULL,S_BURNBALL5,0,0}, // S_BURNBALL4
-{SPR_FRB1,4,4,NULL,S_BURNBALL6,0,0}, // S_BURNBALL5
-{SPR_FRB1,5,4,NULL,S_BURNBALL7,0,0}, // S_BURNBALL6
-{SPR_FRB1,6,4,NULL,S_BURNBALL8,0,0}, // S_BURNBALL7
-{SPR_FRB1,7,4,NULL,S_NULL,0,0}, // S_BURNBALL8
-{SPR_FRB1,32768,4,NULL,S_BURNBALLFB2,0,0}, // S_BURNBALLFB1
-{SPR_FRB1,32769,4,NULL,S_BURNBALLFB3,0,0}, // S_BURNBALLFB2
-{SPR_FRB1,32770,4,NULL,S_BURNBALLFB4,0,0}, // S_BURNBALLFB3
-{SPR_FRB1,32771,4,NULL,S_BURNBALLFB5,0,0}, // S_BURNBALLFB4
-{SPR_FRB1,32772,4,NULL,S_BURNBALLFB6,0,0}, // S_BURNBALLFB5
-{SPR_FRB1,32773,4,NULL,S_BURNBALLFB7,0,0}, // S_BURNBALLFB6
-{SPR_FRB1,32774,4,NULL,S_BURNBALLFB8,0,0}, // S_BURNBALLFB7
-{SPR_FRB1,32775,4,NULL,S_NULL,0,0}, // S_BURNBALLFB8
-{SPR_FRB1,3,4,NULL,S_PUFFY2,0,0}, // S_PUFFY1
-{SPR_FRB1,4,4,NULL,S_PUFFY3,0,0}, // S_PUFFY2
-{SPR_FRB1,5,4,NULL,S_PUFFY4,0,0}, // S_PUFFY3
-{SPR_FRB1,6,4,NULL,S_PUFFY5,0,0}, // S_PUFFY4
-{SPR_FRB1,7,4,NULL,S_NULL,0,0}, // S_PUFFY5
-{SPR_SNKE,0,10,A_Look,S_SNAKE_LOOK2,0,0}, // S_SNAKE_LOOK1
-{SPR_SNKE,1,10,A_Look,S_SNAKE_LOOK1,0,0}, // S_SNAKE_LOOK2
-{SPR_SNKE,0,4,A_Chase,S_SNAKE_WALK2,0,0}, // S_SNAKE_WALK1
-{SPR_SNKE,1,4,A_Chase,S_SNAKE_WALK3,0,0}, // S_SNAKE_WALK2
-{SPR_SNKE,2,4,A_Chase,S_SNAKE_WALK4,0,0}, // S_SNAKE_WALK3
-{SPR_SNKE,3,4,A_Chase,S_SNAKE_WALK1,0,0}, // S_SNAKE_WALK4
-{SPR_SNKE,5,5,A_FaceTarget,S_SNAKE_ATK2,0,0}, // S_SNAKE_ATK1
-{SPR_SNKE,5,5,A_FaceTarget,S_SNAKE_ATK3,0,0}, // S_SNAKE_ATK2
-{SPR_SNKE,5,4,A_SnakeAttack,S_SNAKE_ATK4,0,0}, // S_SNAKE_ATK3
-{SPR_SNKE,5,4,A_SnakeAttack,S_SNAKE_ATK5,0,0}, // S_SNAKE_ATK4
-{SPR_SNKE,5,4,A_SnakeAttack,S_SNAKE_ATK6,0,0}, // S_SNAKE_ATK5
-{SPR_SNKE,5,5,A_FaceTarget,S_SNAKE_ATK7,0,0}, // S_SNAKE_ATK6
-{SPR_SNKE,5,5,A_FaceTarget,S_SNAKE_ATK8,0,0}, // S_SNAKE_ATK7
-{SPR_SNKE,5,5,A_FaceTarget,S_SNAKE_ATK9,0,0}, // S_SNAKE_ATK8
-{SPR_SNKE,5,4,A_SnakeAttack2,S_SNAKE_WALK1,0,0}, // S_SNAKE_ATK9
-{SPR_SNKE,4,3,NULL,S_SNAKE_PAIN2,0,0}, // S_SNAKE_PAIN1
-{SPR_SNKE,4,3,A_Pain,S_SNAKE_WALK1,0,0}, // S_SNAKE_PAIN2
-{SPR_SNKE,6,5,NULL,S_SNAKE_DIE2,0,0}, // S_SNAKE_DIE1
-{SPR_SNKE,7,5,A_Scream,S_SNAKE_DIE3,0,0}, // S_SNAKE_DIE2
-{SPR_SNKE,8,5,NULL,S_SNAKE_DIE4,0,0}, // S_SNAKE_DIE3
-{SPR_SNKE,9,5,NULL,S_SNAKE_DIE5,0,0}, // S_SNAKE_DIE4
-{SPR_SNKE,10,5,NULL,S_SNAKE_DIE6,0,0}, // S_SNAKE_DIE5
-{SPR_SNKE,11,5,NULL,S_SNAKE_DIE7,0,0}, // S_SNAKE_DIE6
-{SPR_SNKE,12,5,A_NoBlocking,S_SNAKE_DIE8,0,0}, // S_SNAKE_DIE7
-{SPR_SNKE,13,5,NULL,S_SNAKE_DIE9,0,0}, // S_SNAKE_DIE8
-{SPR_SNKE,14,5,NULL,S_SNAKE_DIE10,0,0}, // S_SNAKE_DIE9
-{SPR_SNKE,15,-1,NULL,S_NULL,0,0}, // S_SNAKE_DIE10
-{SPR_SNFX,32768,5,NULL,S_SNAKEPRO_A2,0,0}, // S_SNAKEPRO_A1
-{SPR_SNFX,32769,5,NULL,S_SNAKEPRO_A3,0,0}, // S_SNAKEPRO_A2
-{SPR_SNFX,32770,5,NULL,S_SNAKEPRO_A4,0,0}, // S_SNAKEPRO_A3
-{SPR_SNFX,32771,5,NULL,S_SNAKEPRO_A1,0,0}, // S_SNAKEPRO_A4
-{SPR_SNFX,32772,5,NULL,S_SNAKEPRO_AX2,0,0}, // S_SNAKEPRO_AX1
-{SPR_SNFX,32773,5,NULL,S_SNAKEPRO_AX3,0,0}, // S_SNAKEPRO_AX2
-{SPR_SNFX,32774,4,NULL,S_SNAKEPRO_AX4,0,0}, // S_SNAKEPRO_AX3
-{SPR_SNFX,32775,3,NULL,S_SNAKEPRO_AX5,0,0}, // S_SNAKEPRO_AX4
-{SPR_SNFX,32776,3,NULL,S_NULL,0,0}, // S_SNAKEPRO_AX5
-{SPR_SNFX,32777,6,NULL,S_SNAKEPRO_B2,0,0}, // S_SNAKEPRO_B1
-{SPR_SNFX,32778,6,NULL,S_SNAKEPRO_B1,0,0}, // S_SNAKEPRO_B2
-{SPR_SNFX,32779,5,NULL,S_SNAKEPRO_BX2,0,0}, // S_SNAKEPRO_BX1
-{SPR_SNFX,32780,5,NULL,S_SNAKEPRO_BX3,0,0}, // S_SNAKEPRO_BX2
-{SPR_SNFX,32781,4,NULL,S_SNAKEPRO_BX4,0,0}, // S_SNAKEPRO_BX3
-{SPR_SNFX,32782,3,NULL,S_NULL,0,0}, // S_SNAKEPRO_BX4
-{SPR_HEAD,0,10,A_Look,S_HEAD_LOOK,0,0}, // S_HEAD_LOOK
-{SPR_HEAD,0,4,A_Chase,S_HEAD_FLOAT,0,0}, // S_HEAD_FLOAT
-{SPR_HEAD,0,5,A_FaceTarget,S_HEAD_ATK2,0,0}, // S_HEAD_ATK1
-{SPR_HEAD,1,20,A_HeadAttack,S_HEAD_FLOAT,0,0}, // S_HEAD_ATK2
-{SPR_HEAD,0,4,NULL,S_HEAD_PAIN2,0,0}, // S_HEAD_PAIN1
-{SPR_HEAD,0,4,A_Pain,S_HEAD_FLOAT,0,0}, // S_HEAD_PAIN2
-{SPR_HEAD,2,7,NULL,S_HEAD_DIE2,0,0}, // S_HEAD_DIE1
-{SPR_HEAD,3,7,A_Scream,S_HEAD_DIE3,0,0}, // S_HEAD_DIE2
-{SPR_HEAD,4,7,NULL,S_HEAD_DIE4,0,0}, // S_HEAD_DIE3
-{SPR_HEAD,5,7,NULL,S_HEAD_DIE5,0,0}, // S_HEAD_DIE4
-{SPR_HEAD,6,7,A_NoBlocking,S_HEAD_DIE6,0,0}, // S_HEAD_DIE5
-{SPR_HEAD,7,7,NULL,S_HEAD_DIE7,0,0}, // S_HEAD_DIE6
-{SPR_HEAD,8,-1,A_BossDeath,S_NULL,0,0}, // S_HEAD_DIE7
-{SPR_FX05,0,6,NULL,S_HEADFX1_2,0,0}, // S_HEADFX1_1
-{SPR_FX05,1,6,NULL,S_HEADFX1_3,0,0}, // S_HEADFX1_2
-{SPR_FX05,2,6,NULL,S_HEADFX1_1,0,0}, // S_HEADFX1_3
-{SPR_FX05,3,5,A_HeadIceImpact,S_HEADFXI1_2,0,0}, // S_HEADFXI1_1
-{SPR_FX05,4,5,NULL,S_HEADFXI1_3,0,0}, // S_HEADFXI1_2
-{SPR_FX05,5,5,NULL,S_HEADFXI1_4,0,0}, // S_HEADFXI1_3
-{SPR_FX05,6,5,NULL,S_NULL,0,0}, // S_HEADFXI1_4
-{SPR_FX05,7,6,NULL,S_HEADFX2_2,0,0}, // S_HEADFX2_1
-{SPR_FX05,8,6,NULL,S_HEADFX2_3,0,0}, // S_HEADFX2_2
-{SPR_FX05,9,6,NULL,S_HEADFX2_1,0,0}, // S_HEADFX2_3
-{SPR_FX05,3,5,NULL,S_HEADFXI2_2,0,0}, // S_HEADFXI2_1
-{SPR_FX05,4,5,NULL,S_HEADFXI2_3,0,0}, // S_HEADFXI2_2
-{SPR_FX05,5,5,NULL,S_HEADFXI2_4,0,0}, // S_HEADFXI2_3
-{SPR_FX05,6,5,NULL,S_NULL,0,0}, // S_HEADFXI2_4
-{SPR_FX06,0,4,A_HeadFireGrow,S_HEADFX3_2,0,0}, // S_HEADFX3_1
-{SPR_FX06,1,4,A_HeadFireGrow,S_HEADFX3_3,0,0}, // S_HEADFX3_2
-{SPR_FX06,2,4,A_HeadFireGrow,S_HEADFX3_1,0,0}, // S_HEADFX3_3
-{SPR_FX06,0,5,NULL,S_HEADFX3_5,0,0}, // S_HEADFX3_4
-{SPR_FX06,1,5,NULL,S_HEADFX3_6,0,0}, // S_HEADFX3_5
-{SPR_FX06,2,5,NULL,S_HEADFX3_4,0,0}, // S_HEADFX3_6
-{SPR_FX06,3,5,NULL,S_HEADFXI3_2,0,0}, // S_HEADFXI3_1
-{SPR_FX06,4,5,NULL,S_HEADFXI3_3,0,0}, // S_HEADFXI3_2
-{SPR_FX06,5,5,NULL,S_HEADFXI3_4,0,0}, // S_HEADFXI3_3
-{SPR_FX06,6,5,NULL,S_NULL,0,0}, // S_HEADFXI3_4
-{SPR_FX07,3,3,NULL,S_HEADFX4_2,0,0}, // S_HEADFX4_1
-{SPR_FX07,4,3,NULL,S_HEADFX4_3,0,0}, // S_HEADFX4_2
-{SPR_FX07,5,3,NULL,S_HEADFX4_4,0,0}, // S_HEADFX4_3
-{SPR_FX07,6,3,NULL,S_HEADFX4_5,0,0}, // S_HEADFX4_4
-{SPR_FX07,0,3,A_WhirlwindSeek,S_HEADFX4_6,0,0}, // S_HEADFX4_5
-{SPR_FX07,1,3,A_WhirlwindSeek,S_HEADFX4_7,0,0}, // S_HEADFX4_6
-{SPR_FX07,2,3,A_WhirlwindSeek,S_HEADFX4_5,0,0}, // S_HEADFX4_7
-{SPR_FX07,6,4,NULL,S_HEADFXI4_2,0,0}, // S_HEADFXI4_1
-{SPR_FX07,5,4,NULL,S_HEADFXI4_3,0,0}, // S_HEADFXI4_2
-{SPR_FX07,4,4,NULL,S_HEADFXI4_4,0,0}, // S_HEADFXI4_3
-{SPR_FX07,3,4,NULL,S_NULL,0,0}, // S_HEADFXI4_4
-{SPR_CLNK,0,10,A_Look,S_CLINK_LOOK2,0,0}, // S_CLINK_LOOK1
-{SPR_CLNK,1,10,A_Look,S_CLINK_LOOK1,0,0}, // S_CLINK_LOOK2
-{SPR_CLNK,0,3,A_Chase,S_CLINK_WALK2,0,0}, // S_CLINK_WALK1
-{SPR_CLNK,1,3,A_Chase,S_CLINK_WALK3,0,0}, // S_CLINK_WALK2
-{SPR_CLNK,2,3,A_Chase,S_CLINK_WALK4,0,0}, // S_CLINK_WALK3
-{SPR_CLNK,3,3,A_Chase,S_CLINK_WALK1,0,0}, // S_CLINK_WALK4
-{SPR_CLNK,4,5,A_FaceTarget,S_CLINK_ATK2,0,0}, // S_CLINK_ATK1
-{SPR_CLNK,5,4,A_FaceTarget,S_CLINK_ATK3,0,0}, // S_CLINK_ATK2
-{SPR_CLNK,6,7,A_ClinkAttack,S_CLINK_WALK1,0,0}, // S_CLINK_ATK3
-{SPR_CLNK,7,3,NULL,S_CLINK_PAIN2,0,0}, // S_CLINK_PAIN1
-{SPR_CLNK,7,3,A_Pain,S_CLINK_WALK1,0,0}, // S_CLINK_PAIN2
-{SPR_CLNK,8,6,NULL,S_CLINK_DIE2,0,0}, // S_CLINK_DIE1
-{SPR_CLNK,9,6,NULL,S_CLINK_DIE3,0,0}, // S_CLINK_DIE2
-{SPR_CLNK,10,5,A_Scream,S_CLINK_DIE4,0,0}, // S_CLINK_DIE3
-{SPR_CLNK,11,5,A_NoBlocking,S_CLINK_DIE5,0,0}, // S_CLINK_DIE4
-{SPR_CLNK,12,5,NULL,S_CLINK_DIE6,0,0}, // S_CLINK_DIE5
-{SPR_CLNK,13,5,NULL,S_CLINK_DIE7,0,0}, // S_CLINK_DIE6
-{SPR_CLNK,14,-1,NULL,S_NULL,0,0}, // S_CLINK_DIE7
-{SPR_WZRD,0,10,A_Look,S_WIZARD_LOOK2,0,0}, // S_WIZARD_LOOK1
-{SPR_WZRD,1,10,A_Look,S_WIZARD_LOOK1,0,0}, // S_WIZARD_LOOK2
-{SPR_WZRD,0,3,A_Chase,S_WIZARD_WALK2,0,0}, // S_WIZARD_WALK1
-{SPR_WZRD,0,4,A_Chase,S_WIZARD_WALK3,0,0}, // S_WIZARD_WALK2
-{SPR_WZRD,0,3,A_Chase,S_WIZARD_WALK4,0,0}, // S_WIZARD_WALK3
-{SPR_WZRD,0,4,A_Chase,S_WIZARD_WALK5,0,0}, // S_WIZARD_WALK4
-{SPR_WZRD,1,3,A_Chase,S_WIZARD_WALK6,0,0}, // S_WIZARD_WALK5
-{SPR_WZRD,1,4,A_Chase,S_WIZARD_WALK7,0,0}, // S_WIZARD_WALK6
-{SPR_WZRD,1,3,A_Chase,S_WIZARD_WALK8,0,0}, // S_WIZARD_WALK7
-{SPR_WZRD,1,4,A_Chase,S_WIZARD_WALK1,0,0}, // S_WIZARD_WALK8
-{SPR_WZRD,2,4,A_WizAtk1,S_WIZARD_ATK2,0,0}, // S_WIZARD_ATK1
-{SPR_WZRD,2,4,A_WizAtk2,S_WIZARD_ATK3,0,0}, // S_WIZARD_ATK2
-{SPR_WZRD,2,4,A_WizAtk1,S_WIZARD_ATK4,0,0}, // S_WIZARD_ATK3
-{SPR_WZRD,2,4,A_WizAtk2,S_WIZARD_ATK5,0,0}, // S_WIZARD_ATK4
-{SPR_WZRD,2,4,A_WizAtk1,S_WIZARD_ATK6,0,0}, // S_WIZARD_ATK5
-{SPR_WZRD,2,4,A_WizAtk2,S_WIZARD_ATK7,0,0}, // S_WIZARD_ATK6
-{SPR_WZRD,2,4,A_WizAtk1,S_WIZARD_ATK8,0,0}, // S_WIZARD_ATK7
-{SPR_WZRD,2,4,A_WizAtk2,S_WIZARD_ATK9,0,0}, // S_WIZARD_ATK8
-{SPR_WZRD,3,12,A_WizAtk3,S_WIZARD_WALK1,0,0}, // S_WIZARD_ATK9
-{SPR_WZRD,4,3,A_GhostOff,S_WIZARD_PAIN2,0,0}, // S_WIZARD_PAIN1
-{SPR_WZRD,4,3,A_Pain,S_WIZARD_WALK1,0,0}, // S_WIZARD_PAIN2
-{SPR_WZRD,5,6,A_GhostOff,S_WIZARD_DIE2,0,0}, // S_WIZARD_DIE1
-{SPR_WZRD,6,6,A_Scream,S_WIZARD_DIE3,0,0}, // S_WIZARD_DIE2
-{SPR_WZRD,7,6,NULL,S_WIZARD_DIE4,0,0}, // S_WIZARD_DIE3
-{SPR_WZRD,8,6,NULL,S_WIZARD_DIE5,0,0}, // S_WIZARD_DIE4
-{SPR_WZRD,9,6,A_NoBlocking,S_WIZARD_DIE6,0,0}, // S_WIZARD_DIE5
-{SPR_WZRD,10,6,NULL,S_WIZARD_DIE7,0,0}, // S_WIZARD_DIE6
-{SPR_WZRD,11,6,NULL,S_WIZARD_DIE8,0,0}, // S_WIZARD_DIE7
-{SPR_WZRD,12,-1,NULL,S_NULL,0,0}, // S_WIZARD_DIE8
-{SPR_FX11,32768,6,NULL,S_WIZFX1_2,0,0}, // S_WIZFX1_1
-{SPR_FX11,32769,6,NULL,S_WIZFX1_1,0,0}, // S_WIZFX1_2
-{SPR_FX11,32770,5,NULL,S_WIZFXI1_2,0,0}, // S_WIZFXI1_1
-{SPR_FX11,32771,5,NULL,S_WIZFXI1_3,0,0}, // S_WIZFXI1_2
-{SPR_FX11,32772,5,NULL,S_WIZFXI1_4,0,0}, // S_WIZFXI1_3
-{SPR_FX11,32773,5,NULL,S_WIZFXI1_5,0,0}, // S_WIZFXI1_4
-{SPR_FX11,32774,5,NULL,S_NULL,0,0}, // S_WIZFXI1_5
-{SPR_IMPX,0,10,A_Look,S_IMP_LOOK2,0,0}, // S_IMP_LOOK1
-{SPR_IMPX,1,10,A_Look,S_IMP_LOOK3,0,0}, // S_IMP_LOOK2
-{SPR_IMPX,2,10,A_Look,S_IMP_LOOK4,0,0}, // S_IMP_LOOK3
-{SPR_IMPX,1,10,A_Look,S_IMP_LOOK1,0,0}, // S_IMP_LOOK4
-{SPR_IMPX,0,3,A_Chase,S_IMP_FLY2,0,0}, // S_IMP_FLY1
-{SPR_IMPX,0,3,A_Chase,S_IMP_FLY3,0,0}, // S_IMP_FLY2
-{SPR_IMPX,1,3,A_Chase,S_IMP_FLY4,0,0}, // S_IMP_FLY3
-{SPR_IMPX,1,3,A_Chase,S_IMP_FLY5,0,0}, // S_IMP_FLY4
-{SPR_IMPX,2,3,A_Chase,S_IMP_FLY6,0,0}, // S_IMP_FLY5
-{SPR_IMPX,2,3,A_Chase,S_IMP_FLY7,0,0}, // S_IMP_FLY6
-{SPR_IMPX,1,3,A_Chase,S_IMP_FLY8,0,0}, // S_IMP_FLY7
-{SPR_IMPX,1,3,A_Chase,S_IMP_FLY1,0,0}, // S_IMP_FLY8
-{SPR_IMPX,3,6,A_FaceTarget,S_IMP_MEATK2,0,0}, // S_IMP_MEATK1
-{SPR_IMPX,4,6,A_FaceTarget,S_IMP_MEATK3,0,0}, // S_IMP_MEATK2
-{SPR_IMPX,5,6,A_ImpMeAttack,S_IMP_FLY1,0,0}, // S_IMP_MEATK3
-{SPR_IMPX,0,10,A_FaceTarget,S_IMP_MSATK1_2,0,0}, // S_IMP_MSATK1_1
-{SPR_IMPX,1,6,A_ImpMsAttack,S_IMP_MSATK1_3,0,0}, // S_IMP_MSATK1_2
-{SPR_IMPX,2,6,NULL,S_IMP_MSATK1_4,0,0}, // S_IMP_MSATK1_3
-{SPR_IMPX,1,6,NULL,S_IMP_MSATK1_5,0,0}, // S_IMP_MSATK1_4
-{SPR_IMPX,0,6,NULL,S_IMP_MSATK1_6,0,0}, // S_IMP_MSATK1_5
-{SPR_IMPX,1,6,NULL,S_IMP_MSATK1_3,0,0}, // S_IMP_MSATK1_6
-{SPR_IMPX,3,6,A_FaceTarget,S_IMP_MSATK2_2,0,0}, // S_IMP_MSATK2_1
-{SPR_IMPX,4,6,A_FaceTarget,S_IMP_MSATK2_3,0,0}, // S_IMP_MSATK2_2
-{SPR_IMPX,5,6,A_ImpMsAttack2,S_IMP_FLY1,0,0}, // S_IMP_MSATK2_3
-{SPR_IMPX,6,3,NULL,S_IMP_PAIN2,0,0}, // S_IMP_PAIN1
-{SPR_IMPX,6,3,A_Pain,S_IMP_FLY1,0,0}, // S_IMP_PAIN2
-{SPR_IMPX,6,4,A_ImpDeath,S_IMP_DIE2,0,0}, // S_IMP_DIE1
-{SPR_IMPX,7,5,NULL,S_IMP_DIE2,0,0}, // S_IMP_DIE2
-{SPR_IMPX,18,5,A_ImpXDeath1,S_IMP_XDIE2,0,0}, // S_IMP_XDIE1
-{SPR_IMPX,19,5,NULL,S_IMP_XDIE3,0,0}, // S_IMP_XDIE2
-{SPR_IMPX,20,5,NULL,S_IMP_XDIE4,0,0}, // S_IMP_XDIE3
-{SPR_IMPX,21,5,A_ImpXDeath2,S_IMP_XDIE5,0,0}, // S_IMP_XDIE4
-{SPR_IMPX,22,5,NULL,S_IMP_XDIE5,0,0}, // S_IMP_XDIE5
-{SPR_IMPX,8,7,A_ImpExplode,S_IMP_CRASH2,0,0}, // S_IMP_CRASH1
-{SPR_IMPX,9,7,A_Scream,S_IMP_CRASH3,0,0}, // S_IMP_CRASH2
-{SPR_IMPX,10,7,NULL,S_IMP_CRASH4,0,0}, // S_IMP_CRASH3
-{SPR_IMPX,11,-1,NULL,S_NULL,0,0}, // S_IMP_CRASH4
-{SPR_IMPX,23,7,NULL,S_IMP_XCRASH2,0,0}, // S_IMP_XCRASH1
-{SPR_IMPX,24,7,NULL,S_IMP_XCRASH3,0,0}, // S_IMP_XCRASH2
-{SPR_IMPX,25,-1,NULL,S_NULL,0,0}, // S_IMP_XCRASH3
-{SPR_IMPX,12,5,NULL,S_IMP_CHUNKA2,0,0}, // S_IMP_CHUNKA1
-{SPR_IMPX,13,700,NULL,S_IMP_CHUNKA3,0,0}, // S_IMP_CHUNKA2
-{SPR_IMPX,14,700,NULL,S_NULL,0,0}, // S_IMP_CHUNKA3
-{SPR_IMPX,15,5,NULL,S_IMP_CHUNKB2,0,0}, // S_IMP_CHUNKB1
-{SPR_IMPX,16,700,NULL,S_IMP_CHUNKB3,0,0}, // S_IMP_CHUNKB2
-{SPR_IMPX,17,700,NULL,S_NULL,0,0}, // S_IMP_CHUNKB3
-{SPR_FX10,32768,6,NULL,S_IMPFX2,0,0}, // S_IMPFX1
-{SPR_FX10,32769,6,NULL,S_IMPFX3,0,0}, // S_IMPFX2
-{SPR_FX10,32770,6,NULL,S_IMPFX1,0,0}, // S_IMPFX3
-{SPR_FX10,32771,5,NULL,S_IMPFXI2,0,0}, // S_IMPFXI1
-{SPR_FX10,32772,5,NULL,S_IMPFXI3,0,0}, // S_IMPFXI2
-{SPR_FX10,32773,5,NULL,S_IMPFXI4,0,0}, // S_IMPFXI3
-{SPR_FX10,32774,5,NULL,S_NULL,0,0}, // S_IMPFXI4
-{SPR_KNIG,0,10,A_Look,S_KNIGHT_STND2,0,0}, // S_KNIGHT_STND1
-{SPR_KNIG,1,10,A_Look,S_KNIGHT_STND1,0,0}, // S_KNIGHT_STND2
-{SPR_KNIG,0,4,A_Chase,S_KNIGHT_WALK2,0,0}, // S_KNIGHT_WALK1
-{SPR_KNIG,1,4,A_Chase,S_KNIGHT_WALK3,0,0}, // S_KNIGHT_WALK2
-{SPR_KNIG,2,4,A_Chase,S_KNIGHT_WALK4,0,0}, // S_KNIGHT_WALK3
-{SPR_KNIG,3,4,A_Chase,S_KNIGHT_WALK1,0,0}, // S_KNIGHT_WALK4
-{SPR_KNIG,4,10,A_FaceTarget,S_KNIGHT_ATK2,0,0}, // S_KNIGHT_ATK1
-{SPR_KNIG,5,8,A_FaceTarget,S_KNIGHT_ATK3,0,0}, // S_KNIGHT_ATK2
-{SPR_KNIG,6,8,A_KnightAttack,S_KNIGHT_ATK4,0,0}, // S_KNIGHT_ATK3
-{SPR_KNIG,4,10,A_FaceTarget,S_KNIGHT_ATK5,0,0}, // S_KNIGHT_ATK4
-{SPR_KNIG,5,8,A_FaceTarget,S_KNIGHT_ATK6,0,0}, // S_KNIGHT_ATK5
-{SPR_KNIG,6,8,A_KnightAttack,S_KNIGHT_WALK1,0,0}, // S_KNIGHT_ATK6
-{SPR_KNIG,7,3,NULL,S_KNIGHT_PAIN2,0,0}, // S_KNIGHT_PAIN1
-{SPR_KNIG,7,3,A_Pain,S_KNIGHT_WALK1,0,0}, // S_KNIGHT_PAIN2
-{SPR_KNIG,8,6,NULL,S_KNIGHT_DIE2,0,0}, // S_KNIGHT_DIE1
-{SPR_KNIG,9,6,A_Scream,S_KNIGHT_DIE3,0,0}, // S_KNIGHT_DIE2
-{SPR_KNIG,10,6,NULL,S_KNIGHT_DIE4,0,0}, // S_KNIGHT_DIE3
-{SPR_KNIG,11,6,A_NoBlocking,S_KNIGHT_DIE5,0,0}, // S_KNIGHT_DIE4
-{SPR_KNIG,12,6,NULL,S_KNIGHT_DIE6,0,0}, // S_KNIGHT_DIE5
-{SPR_KNIG,13,6,NULL,S_KNIGHT_DIE7,0,0}, // S_KNIGHT_DIE6
-{SPR_KNIG,14,-1,NULL,S_NULL,0,0}, // S_KNIGHT_DIE7
-{SPR_SPAX,32768,3,A_ContMobjSound,S_SPINAXE2,0,0}, // S_SPINAXE1
-{SPR_SPAX,32769,3,NULL,S_SPINAXE3,0,0}, // S_SPINAXE2
-{SPR_SPAX,32770,3,NULL,S_SPINAXE1,0,0}, // S_SPINAXE3
-{SPR_SPAX,32771,6,NULL,S_SPINAXEX2,0,0}, // S_SPINAXEX1
-{SPR_SPAX,32772,6,NULL,S_SPINAXEX3,0,0}, // S_SPINAXEX2
-{SPR_SPAX,32773,6,NULL,S_NULL,0,0}, // S_SPINAXEX3
-{SPR_RAXE,32768,5,A_DripBlood,S_REDAXE2,0,0}, // S_REDAXE1
-{SPR_RAXE,32769,5,A_DripBlood,S_REDAXE1,0,0}, // S_REDAXE2
-{SPR_RAXE,32770,6,NULL,S_REDAXEX2,0,0}, // S_REDAXEX1
-{SPR_RAXE,32771,6,NULL,S_REDAXEX3,0,0}, // S_REDAXEX2
-{SPR_RAXE,32772,6,NULL,S_NULL,0,0}, // S_REDAXEX3
-{SPR_SRCR,0,10,A_Look,S_SRCR1_LOOK2,0,0}, // S_SRCR1_LOOK1
-{SPR_SRCR,1,10,A_Look,S_SRCR1_LOOK1,0,0}, // S_SRCR1_LOOK2
-{SPR_SRCR,0,5,A_Sor1Chase,S_SRCR1_WALK2,0,0}, // S_SRCR1_WALK1
-{SPR_SRCR,1,5,A_Sor1Chase,S_SRCR1_WALK3,0,0}, // S_SRCR1_WALK2
-{SPR_SRCR,2,5,A_Sor1Chase,S_SRCR1_WALK4,0,0}, // S_SRCR1_WALK3
-{SPR_SRCR,3,5,A_Sor1Chase,S_SRCR1_WALK1,0,0}, // S_SRCR1_WALK4
-{SPR_SRCR,16,6,A_Sor1Pain,S_SRCR1_WALK1,0,0}, // S_SRCR1_PAIN1
-{SPR_SRCR,16,7,A_FaceTarget,S_SRCR1_ATK2,0,0}, // S_SRCR1_ATK1
-{SPR_SRCR,17,6,A_FaceTarget,S_SRCR1_ATK3,0,0}, // S_SRCR1_ATK2
-{SPR_SRCR,18,10,A_Srcr1Attack,S_SRCR1_WALK1,0,0}, // S_SRCR1_ATK3
-{SPR_SRCR,18,10,A_FaceTarget,S_SRCR1_ATK5,0,0}, // S_SRCR1_ATK4
-{SPR_SRCR,16,7,A_FaceTarget,S_SRCR1_ATK6,0,0}, // S_SRCR1_ATK5
-{SPR_SRCR,17,6,A_FaceTarget,S_SRCR1_ATK7,0,0}, // S_SRCR1_ATK6
-{SPR_SRCR,18,10,A_Srcr1Attack,S_SRCR1_WALK1,0,0}, // S_SRCR1_ATK7
-{SPR_SRCR,4,7,NULL,S_SRCR1_DIE2,0,0}, // S_SRCR1_DIE1
-{SPR_SRCR,5,7,A_Scream,S_SRCR1_DIE3,0,0}, // S_SRCR1_DIE2
-{SPR_SRCR,6,7,NULL,S_SRCR1_DIE4,0,0}, // S_SRCR1_DIE3
-{SPR_SRCR,7,6,NULL,S_SRCR1_DIE5,0,0}, // S_SRCR1_DIE4
-{SPR_SRCR,8,6,NULL,S_SRCR1_DIE6,0,0}, // S_SRCR1_DIE5
-{SPR_SRCR,9,6,NULL,S_SRCR1_DIE7,0,0}, // S_SRCR1_DIE6
-{SPR_SRCR,10,6,NULL,S_SRCR1_DIE8,0,0}, // S_SRCR1_DIE7
-{SPR_SRCR,11,25,A_SorZap,S_SRCR1_DIE9,0,0}, // S_SRCR1_DIE8
-{SPR_SRCR,12,5,NULL,S_SRCR1_DIE10,0,0}, // S_SRCR1_DIE9
-{SPR_SRCR,13,5,NULL,S_SRCR1_DIE11,0,0}, // S_SRCR1_DIE10
-{SPR_SRCR,14,4,NULL,S_SRCR1_DIE12,0,0}, // S_SRCR1_DIE11
-{SPR_SRCR,11,20,A_SorZap,S_SRCR1_DIE13,0,0}, // S_SRCR1_DIE12
-{SPR_SRCR,12,5,NULL,S_SRCR1_DIE14,0,0}, // S_SRCR1_DIE13
-{SPR_SRCR,13,5,NULL,S_SRCR1_DIE15,0,0}, // S_SRCR1_DIE14
-{SPR_SRCR,14,4,NULL,S_SRCR1_DIE16,0,0}, // S_SRCR1_DIE15
-{SPR_SRCR,11,12,NULL,S_SRCR1_DIE17,0,0}, // S_SRCR1_DIE16
-{SPR_SRCR,15,-1,A_SorcererRise,S_NULL,0,0}, // S_SRCR1_DIE17
-{SPR_FX14,32768,6,NULL,S_SRCRFX1_2,0,0}, // S_SRCRFX1_1
-{SPR_FX14,32769,6,NULL,S_SRCRFX1_3,0,0}, // S_SRCRFX1_2
-{SPR_FX14,32770,6,NULL,S_SRCRFX1_1,0,0}, // S_SRCRFX1_3
-{SPR_FX14,32771,5,NULL,S_SRCRFXI1_2,0,0}, // S_SRCRFXI1_1
-{SPR_FX14,32772,5,NULL,S_SRCRFXI1_3,0,0}, // S_SRCRFXI1_2
-{SPR_FX14,32773,5,NULL,S_SRCRFXI1_4,0,0}, // S_SRCRFXI1_3
-{SPR_FX14,32774,5,NULL,S_SRCRFXI1_5,0,0}, // S_SRCRFXI1_4
-{SPR_FX14,32775,5,NULL,S_NULL,0,0}, // S_SRCRFXI1_5
-{SPR_SOR2,0,4,NULL,S_SOR2_RISE2,0,0}, // S_SOR2_RISE1
-{SPR_SOR2,1,4,NULL,S_SOR2_RISE3,0,0}, // S_SOR2_RISE2
-{SPR_SOR2,2,4,A_SorRise,S_SOR2_RISE4,0,0}, // S_SOR2_RISE3
-{SPR_SOR2,3,4,NULL,S_SOR2_RISE5,0,0}, // S_SOR2_RISE4
-{SPR_SOR2,4,4,NULL,S_SOR2_RISE6,0,0}, // S_SOR2_RISE5
-{SPR_SOR2,5,4,NULL,S_SOR2_RISE7,0,0}, // S_SOR2_RISE6
-{SPR_SOR2,6,12,A_SorSightSnd,S_SOR2_WALK1,0,0}, // S_SOR2_RISE7
-{SPR_SOR2,12,10,A_Look,S_SOR2_LOOK2,0,0}, // S_SOR2_LOOK1
-{SPR_SOR2,13,10,A_Look,S_SOR2_LOOK1,0,0}, // S_SOR2_LOOK2
-{SPR_SOR2,12,4,A_Chase,S_SOR2_WALK2,0,0}, // S_SOR2_WALK1
-{SPR_SOR2,13,4,A_Chase,S_SOR2_WALK3,0,0}, // S_SOR2_WALK2
-{SPR_SOR2,14,4,A_Chase,S_SOR2_WALK4,0,0}, // S_SOR2_WALK3
-{SPR_SOR2,15,4,A_Chase,S_SOR2_WALK1,0,0}, // S_SOR2_WALK4
-{SPR_SOR2,16,3,NULL,S_SOR2_PAIN2,0,0}, // S_SOR2_PAIN1
-{SPR_SOR2,16,6,A_Pain,S_SOR2_WALK1,0,0}, // S_SOR2_PAIN2
-{SPR_SOR2,17,9,A_Srcr2Decide,S_SOR2_ATK2,0,0}, // S_SOR2_ATK1
-{SPR_SOR2,18,9,A_FaceTarget,S_SOR2_ATK3,0,0}, // S_SOR2_ATK2
-{SPR_SOR2,19,20,A_Srcr2Attack,S_SOR2_WALK1,0,0}, // S_SOR2_ATK3
-{SPR_SOR2,11,6,NULL,S_SOR2_TELE2,0,0}, // S_SOR2_TELE1
-{SPR_SOR2,10,6,NULL,S_SOR2_TELE3,0,0}, // S_SOR2_TELE2
-{SPR_SOR2,9,6,NULL,S_SOR2_TELE4,0,0}, // S_SOR2_TELE3
-{SPR_SOR2,8,6,NULL,S_SOR2_TELE5,0,0}, // S_SOR2_TELE4
-{SPR_SOR2,7,6,NULL,S_SOR2_TELE6,0,0}, // S_SOR2_TELE5
-{SPR_SOR2,6,6,NULL,S_SOR2_WALK1,0,0}, // S_SOR2_TELE6
-{SPR_SDTH,0,8,A_Sor2DthInit,S_SOR2_DIE2,0,0}, // S_SOR2_DIE1
-{SPR_SDTH,1,8,NULL,S_SOR2_DIE3,0,0}, // S_SOR2_DIE2
-{SPR_SDTH,2,8,A_SorDSph,S_SOR2_DIE4,0,0}, // S_SOR2_DIE3
-{SPR_SDTH,3,7,NULL,S_SOR2_DIE5,0,0}, // S_SOR2_DIE4
-{SPR_SDTH,4,7,NULL,S_SOR2_DIE6,0,0}, // S_SOR2_DIE5
-{SPR_SDTH,5,7,A_Sor2DthLoop,S_SOR2_DIE7,0,0}, // S_SOR2_DIE6
-{SPR_SDTH,6,6,A_SorDExp,S_SOR2_DIE8,0,0}, // S_SOR2_DIE7
-{SPR_SDTH,7,6,NULL,S_SOR2_DIE9,0,0}, // S_SOR2_DIE8
-{SPR_SDTH,8,18,NULL,S_SOR2_DIE10,0,0}, // S_SOR2_DIE9
-{SPR_SDTH,9,6,A_NoBlocking,S_SOR2_DIE11,0,0}, // S_SOR2_DIE10
-{SPR_SDTH,10,6,A_SorDBon,S_SOR2_DIE12,0,0}, // S_SOR2_DIE11
-{SPR_SDTH,11,6,NULL,S_SOR2_DIE13,0,0}, // S_SOR2_DIE12
-{SPR_SDTH,12,6,NULL,S_SOR2_DIE14,0,0}, // S_SOR2_DIE13
-{SPR_SDTH,13,6,NULL,S_SOR2_DIE15,0,0}, // S_SOR2_DIE14
-{SPR_SDTH,14,-1,A_BossDeath,S_NULL,0,0}, // S_SOR2_DIE15
-{SPR_FX16,32768,3,A_BlueSpark,S_SOR2FX1_2,0,0}, // S_SOR2FX1_1
-{SPR_FX16,32769,3,A_BlueSpark,S_SOR2FX1_3,0,0}, // S_SOR2FX1_2
-{SPR_FX16,32770,3,A_BlueSpark,S_SOR2FX1_1,0,0}, // S_SOR2FX1_3
-{SPR_FX16,32774,5,A_Explode,S_SOR2FXI1_2,0,0}, // S_SOR2FXI1_1
-{SPR_FX16,32775,5,NULL,S_SOR2FXI1_3,0,0}, // S_SOR2FXI1_2
-{SPR_FX16,32776,5,NULL,S_SOR2FXI1_4,0,0}, // S_SOR2FXI1_3
-{SPR_FX16,32777,5,NULL,S_SOR2FXI1_5,0,0}, // S_SOR2FXI1_4
-{SPR_FX16,32778,5,NULL,S_SOR2FXI1_6,0,0}, // S_SOR2FXI1_5
-{SPR_FX16,32779,5,NULL,S_NULL,0,0}, // S_SOR2FXI1_6
-{SPR_FX16,32771,12,NULL,S_SOR2FXSPARK2,0,0}, // S_SOR2FXSPARK1
-{SPR_FX16,32772,12,NULL,S_SOR2FXSPARK3,0,0}, // S_SOR2FXSPARK2
-{SPR_FX16,32773,12,NULL,S_NULL,0,0}, // S_SOR2FXSPARK3
-{SPR_FX11,32768,35,NULL,S_SOR2FX2_2,0,0}, // S_SOR2FX2_1
-{SPR_FX11,32768,5,A_GenWizard,S_SOR2FX2_3,0,0}, // S_SOR2FX2_2
-{SPR_FX11,32769,5,NULL,S_SOR2FX2_2,0,0}, // S_SOR2FX2_3
-{SPR_FX11,32770,5,NULL,S_SOR2FXI2_2,0,0}, // S_SOR2FXI2_1
-{SPR_FX11,32771,5,NULL,S_SOR2FXI2_3,0,0}, // S_SOR2FXI2_2
-{SPR_FX11,32772,5,NULL,S_SOR2FXI2_4,0,0}, // S_SOR2FXI2_3
-{SPR_FX11,32773,5,NULL,S_SOR2FXI2_5,0,0}, // S_SOR2FXI2_4
-{SPR_FX11,32774,5,NULL,S_NULL,0,0}, // S_SOR2FXI2_5
-{SPR_SOR2,6,8,NULL,S_SOR2TELEFADE2,0,0}, // S_SOR2TELEFADE1
-{SPR_SOR2,7,6,NULL,S_SOR2TELEFADE3,0,0}, // S_SOR2TELEFADE2
-{SPR_SOR2,8,6,NULL,S_SOR2TELEFADE4,0,0}, // S_SOR2TELEFADE3
-{SPR_SOR2,9,6,NULL,S_SOR2TELEFADE5,0,0}, // S_SOR2TELEFADE4
-{SPR_SOR2,10,6,NULL,S_SOR2TELEFADE6,0,0}, // S_SOR2TELEFADE5
-{SPR_SOR2,11,6,NULL,S_NULL,0,0}, // S_SOR2TELEFADE6
-{SPR_MNTR,0,10,A_Look,S_MNTR_LOOK2,0,0}, // S_MNTR_LOOK1
-{SPR_MNTR,1,10,A_Look,S_MNTR_LOOK1,0,0}, // S_MNTR_LOOK2
-{SPR_MNTR,0,5,A_Chase,S_MNTR_WALK2,0,0}, // S_MNTR_WALK1
-{SPR_MNTR,1,5,A_Chase,S_MNTR_WALK3,0,0}, // S_MNTR_WALK2
-{SPR_MNTR,2,5,A_Chase,S_MNTR_WALK4,0,0}, // S_MNTR_WALK3
-{SPR_MNTR,3,5,A_Chase,S_MNTR_WALK1,0,0}, // S_MNTR_WALK4
-{SPR_MNTR,21,10,A_FaceTarget,S_MNTR_ATK1_2,0,0}, // S_MNTR_ATK1_1
-{SPR_MNTR,22,7,A_FaceTarget,S_MNTR_ATK1_3,0,0}, // S_MNTR_ATK1_2
-{SPR_MNTR,23,12,A_MinotaurAtk1,S_MNTR_WALK1,0,0}, // S_MNTR_ATK1_3
-{SPR_MNTR,21,10,A_MinotaurDecide,S_MNTR_ATK2_2,0,0}, // S_MNTR_ATK2_1
-{SPR_MNTR,24,4,A_FaceTarget,S_MNTR_ATK2_3,0,0}, // S_MNTR_ATK2_2
-{SPR_MNTR,25,9,A_MinotaurAtk2,S_MNTR_WALK1,0,0}, // S_MNTR_ATK2_3
-{SPR_MNTR,21,10,A_FaceTarget,S_MNTR_ATK3_2,0,0}, // S_MNTR_ATK3_1
-{SPR_MNTR,22,7,A_FaceTarget,S_MNTR_ATK3_3,0,0}, // S_MNTR_ATK3_2
-{SPR_MNTR,23,12,A_MinotaurAtk3,S_MNTR_WALK1,0,0}, // S_MNTR_ATK3_3
-{SPR_MNTR,23,12,NULL,S_MNTR_ATK3_1,0,0}, // S_MNTR_ATK3_4
-{SPR_MNTR,20,2,A_MinotaurCharge,S_MNTR_ATK4_1,0,0}, // S_MNTR_ATK4_1
-{SPR_MNTR,4,3,NULL,S_MNTR_PAIN2,0,0}, // S_MNTR_PAIN1
-{SPR_MNTR,4,6,A_Pain,S_MNTR_WALK1,0,0}, // S_MNTR_PAIN2
-{SPR_MNTR,5,6,NULL,S_MNTR_DIE2,0,0}, // S_MNTR_DIE1
-{SPR_MNTR,6,5,NULL,S_MNTR_DIE3,0,0}, // S_MNTR_DIE2
-{SPR_MNTR,7,6,A_Scream,S_MNTR_DIE4,0,0}, // S_MNTR_DIE3
-{SPR_MNTR,8,5,NULL,S_MNTR_DIE5,0,0}, // S_MNTR_DIE4
-{SPR_MNTR,9,6,NULL,S_MNTR_DIE6,0,0}, // S_MNTR_DIE5
-{SPR_MNTR,10,5,NULL,S_MNTR_DIE7,0,0}, // S_MNTR_DIE6
-{SPR_MNTR,11,6,NULL,S_MNTR_DIE8,0,0}, // S_MNTR_DIE7
-{SPR_MNTR,12,5,A_NoBlocking,S_MNTR_DIE9,0,0}, // S_MNTR_DIE8
-{SPR_MNTR,13,6,NULL,S_MNTR_DIE10,0,0}, // S_MNTR_DIE9
-{SPR_MNTR,14,5,NULL,S_MNTR_DIE11,0,0}, // S_MNTR_DIE10
-{SPR_MNTR,15,6,NULL,S_MNTR_DIE12,0,0}, // S_MNTR_DIE11
-{SPR_MNTR,16,5,NULL,S_MNTR_DIE13,0,0}, // S_MNTR_DIE12
-{SPR_MNTR,17,6,NULL,S_MNTR_DIE14,0,0}, // S_MNTR_DIE13
-{SPR_MNTR,18,5,NULL,S_MNTR_DIE15,0,0}, // S_MNTR_DIE14
-{SPR_MNTR,19,-1,A_BossDeath,S_NULL,0,0}, // S_MNTR_DIE15
-{SPR_FX12,32768,6,NULL,S_MNTRFX1_2,0,0}, // S_MNTRFX1_1
-{SPR_FX12,32769,6,NULL,S_MNTRFX1_1,0,0}, // S_MNTRFX1_2
-{SPR_FX12,32770,5,NULL,S_MNTRFXI1_2,0,0}, // S_MNTRFXI1_1
-{SPR_FX12,32771,5,NULL,S_MNTRFXI1_3,0,0}, // S_MNTRFXI1_2
-{SPR_FX12,32772,5,NULL,S_MNTRFXI1_4,0,0}, // S_MNTRFXI1_3
-{SPR_FX12,32773,5,NULL,S_MNTRFXI1_5,0,0}, // S_MNTRFXI1_4
-{SPR_FX12,32774,5,NULL,S_MNTRFXI1_6,0,0}, // S_MNTRFXI1_5
-{SPR_FX12,32775,5,NULL,S_NULL,0,0}, // S_MNTRFXI1_6
-{SPR_FX13,0,2,A_MntrFloorFire,S_MNTRFX2_1,0,0}, // S_MNTRFX2_1
-{SPR_FX13,32776,4,A_Explode,S_MNTRFXI2_2,0,0}, // S_MNTRFXI2_1
-{SPR_FX13,32777,4,NULL,S_MNTRFXI2_3,0,0}, // S_MNTRFXI2_2
-{SPR_FX13,32778,4,NULL,S_MNTRFXI2_4,0,0}, // S_MNTRFXI2_3
-{SPR_FX13,32779,4,NULL,S_MNTRFXI2_5,0,0}, // S_MNTRFXI2_4
-{SPR_FX13,32780,4,NULL,S_NULL,0,0}, // S_MNTRFXI2_5
-{SPR_FX13,32771,4,NULL,S_MNTRFX3_2,0,0}, // S_MNTRFX3_1
-{SPR_FX13,32770,4,NULL,S_MNTRFX3_3,0,0}, // S_MNTRFX3_2
-{SPR_FX13,32769,5,NULL,S_MNTRFX3_4,0,0}, // S_MNTRFX3_3
-{SPR_FX13,32770,5,NULL,S_MNTRFX3_5,0,0}, // S_MNTRFX3_4
-{SPR_FX13,32771,5,NULL,S_MNTRFX3_6,0,0}, // S_MNTRFX3_5
-{SPR_FX13,32772,5,NULL,S_MNTRFX3_7,0,0}, // S_MNTRFX3_6
-{SPR_FX13,32773,4,NULL,S_MNTRFX3_8,0,0}, // S_MNTRFX3_7
-{SPR_FX13,32774,4,NULL,S_MNTRFX3_9,0,0}, // S_MNTRFX3_8
-{SPR_FX13,32775,4,NULL,S_NULL,0,0}, // S_MNTRFX3_9
-{SPR_AKYY,32768,3,NULL,S_AKYY2,0,0}, // S_AKYY1
-{SPR_AKYY,32769,3,NULL,S_AKYY3,0,0}, // S_AKYY2
-{SPR_AKYY,32770,3,NULL,S_AKYY4,0,0}, // S_AKYY3
-{SPR_AKYY,32771,3,NULL,S_AKYY5,0,0}, // S_AKYY4
-{SPR_AKYY,32772,3,NULL,S_AKYY6,0,0}, // S_AKYY5
-{SPR_AKYY,32773,3,NULL,S_AKYY7,0,0}, // S_AKYY6
-{SPR_AKYY,32774,3,NULL,S_AKYY8,0,0}, // S_AKYY7
-{SPR_AKYY,32775,3,NULL,S_AKYY9,0,0}, // S_AKYY8
-{SPR_AKYY,32776,3,NULL,S_AKYY10,0,0}, // S_AKYY9
-{SPR_AKYY,32777,3,NULL,S_AKYY1,0,0}, // S_AKYY10
-{SPR_BKYY,32768,3,NULL,S_BKYY2,0,0}, // S_BKYY1
-{SPR_BKYY,32769,3,NULL,S_BKYY3,0,0}, // S_BKYY2
-{SPR_BKYY,32770,3,NULL,S_BKYY4,0,0}, // S_BKYY3
-{SPR_BKYY,32771,3,NULL,S_BKYY5,0,0}, // S_BKYY4
-{SPR_BKYY,32772,3,NULL,S_BKYY6,0,0}, // S_BKYY5
-{SPR_BKYY,32773,3,NULL,S_BKYY7,0,0}, // S_BKYY6
-{SPR_BKYY,32774,3,NULL,S_BKYY8,0,0}, // S_BKYY7
-{SPR_BKYY,32775,3,NULL,S_BKYY9,0,0}, // S_BKYY8
-{SPR_BKYY,32776,3,NULL,S_BKYY10,0,0}, // S_BKYY9
-{SPR_BKYY,32777,3,NULL,S_BKYY1,0,0}, // S_BKYY10
-{SPR_CKYY,32768,3,NULL,S_CKYY2,0,0}, // S_CKYY1
-{SPR_CKYY,32769,3,NULL,S_CKYY3,0,0}, // S_CKYY2
-{SPR_CKYY,32770,3,NULL,S_CKYY4,0,0}, // S_CKYY3
-{SPR_CKYY,32771,3,NULL,S_CKYY5,0,0}, // S_CKYY4
-{SPR_CKYY,32772,3,NULL,S_CKYY6,0,0}, // S_CKYY5
-{SPR_CKYY,32773,3,NULL,S_CKYY7,0,0}, // S_CKYY6
-{SPR_CKYY,32774,3,NULL,S_CKYY8,0,0}, // S_CKYY7
-{SPR_CKYY,32775,3,NULL,S_CKYY9,0,0}, // S_CKYY8
-{SPR_CKYY,32776,3,NULL,S_CKYY1,0,0}, // S_CKYY9
-{SPR_AMG1,0,-1,NULL,S_NULL,0,0}, // S_AMG1
-{SPR_AMG2,0,4,NULL,S_AMG2_2,0,0}, // S_AMG2_1
-{SPR_AMG2,1,4,NULL,S_AMG2_3,0,0}, // S_AMG2_2
-{SPR_AMG2,2,4,NULL,S_AMG2_1,0,0}, // S_AMG2_3
-{SPR_AMM1,0,-1,NULL,S_NULL,0,0}, // S_AMM1
-{SPR_AMM2,0,-1,NULL,S_NULL,0,0}, // S_AMM2
-{SPR_AMC1,0,-1,NULL,S_NULL,0,0}, // S_AMC1
-{SPR_AMC2,0,5,NULL,S_AMC2_2,0,0}, // S_AMC2_1
-{SPR_AMC2,1,5,NULL,S_AMC2_3,0,0}, // S_AMC2_2
-{SPR_AMC2,2,5,NULL,S_AMC2_1,0,0}, // S_AMC2_3
-{SPR_AMS1,0,5,NULL,S_AMS1_2,0,0}, // S_AMS1_1
-{SPR_AMS1,1,5,NULL,S_AMS1_1,0,0}, // S_AMS1_2
-{SPR_AMS2,0,5,NULL,S_AMS2_2,0,0}, // S_AMS2_1
-{SPR_AMS2,1,5,NULL,S_AMS2_1,0,0}, // S_AMS2_2
-{SPR_AMP1,0,4,NULL,S_AMP1_2,0,0}, // S_AMP1_1
-{SPR_AMP1,1,4,NULL,S_AMP1_3,0,0}, // S_AMP1_2
-{SPR_AMP1,2,4,NULL,S_AMP1_1,0,0}, // S_AMP1_3
-{SPR_AMP2,0,4,NULL,S_AMP2_2,0,0}, // S_AMP2_1
-{SPR_AMP2,1,4,NULL,S_AMP2_3,0,0}, // S_AMP2_2
-{SPR_AMP2,2,4,NULL,S_AMP2_1,0,0}, // S_AMP2_3
-{SPR_AMB1,0,4,NULL,S_AMB1_2,0,0}, // S_AMB1_1
-{SPR_AMB1,1,4,NULL,S_AMB1_3,0,0}, // S_AMB1_2
-{SPR_AMB1,2,4,NULL,S_AMB1_1,0,0}, // S_AMB1_3
-{SPR_AMB2,0,4,NULL,S_AMB2_2,0,0}, // S_AMB2_1
-{SPR_AMB2,1,4,NULL,S_AMB2_3,0,0}, // S_AMB2_2
-{SPR_AMB2,2,4,NULL,S_AMB2_1,0,0}, // S_AMB2_3
-{SPR_AMG1,0,100,A_ESound,S_SND_WIND,0,0}, // S_SND_WIND
-{SPR_AMG1,0,85,A_ESound,S_SND_WATERFALL,0,0} // S_SND_WATERFALL
+void A_FreeTargMobj();
+void A_RestoreSpecialThing1();
+void A_RestoreSpecialThing2();
+void A_HideThing();
+void A_UnHideThing();
+void A_RestoreArtifact();
+void A_Scream();
+void A_Explode();
+void A_PodPain();
+void A_RemovePod();
+void A_MakePod();
+void A_InitKeyGizmo();
+void A_VolcanoSet();
+void A_VolcanoBlast();
+void A_BeastPuff();
+void A_VolcBallImpact();
+void A_SpawnTeleGlitter();
+void A_SpawnTeleGlitter2();
+void A_AccTeleGlitter();
+void A_Light0();
+void A_WeaponReady();
+void A_Lower();
+void A_Raise();
+void A_StaffAttackPL1();
+void A_ReFire();
+void A_StaffAttackPL2();
+void A_BeakReady();
+void A_BeakRaise();
+void A_BeakAttackPL1();
+void A_BeakAttackPL2();
+void A_GauntletAttack();
+void A_FireBlasterPL1();
+void A_FireBlasterPL2();
+void A_SpawnRippers();
+void A_FireMacePL1();
+void A_FireMacePL2();
+void A_MacePL1Check();
+void A_MaceBallImpact();
+void A_MaceBallImpact2();
+void A_DeathBallImpact();
+void A_FireSkullRodPL1();
+void A_FireSkullRodPL2();
+void A_SkullRodPL2Seek();
+void A_AddPlayerRain();
+void A_HideInCeiling();
+void A_SkullRodStorm();
+void A_RainImpact();
+void A_FireGoldWandPL1();
+void A_FireGoldWandPL2();
+void A_FirePhoenixPL1();
+void A_InitPhoenixPL2();
+void A_FirePhoenixPL2();
+void A_ShutdownPhoenixPL2();
+void A_PhoenixPuff();
+void A_FlameEnd();
+void A_FloatPuff();
+void A_FireCrossbowPL1();
+void A_FireCrossbowPL2();
+void A_BoltSpark();
+void A_Pain();
+void A_NoBlocking();
+void A_AddPlayerCorpse();
+void A_SkullPop();
+void A_FlameSnd();
+void A_CheckBurnGone();
+void A_CheckSkullFloor();
+void A_CheckSkullDone();
+void A_Feathers();
+void A_ChicLook();
+void A_ChicChase();
+void A_ChicPain();
+void A_FaceTarget();
+void A_ChicAttack();
+void A_Look();
+void A_Chase();
+void A_MummyAttack();
+void A_MummyAttack2();
+void A_MummySoul();
+void A_ContMobjSound();
+void A_MummyFX1Seek();
+void A_BeastAttack();
+void A_SnakeAttack();
+void A_SnakeAttack2();
+void A_HeadAttack();
+void A_BossDeath();
+void A_HeadIceImpact();
+void A_HeadFireGrow();
+void A_WhirlwindSeek();
+void A_ClinkAttack();
+void A_WizAtk1();
+void A_WizAtk2();
+void A_WizAtk3();
+void A_GhostOff();
+void A_ImpMeAttack();
+void A_ImpMsAttack();
+void A_ImpMsAttack2();
+void A_ImpDeath();
+void A_ImpXDeath1();
+void A_ImpXDeath2();
+void A_ImpExplode();
+void A_KnightAttack();
+void A_DripBlood();
+void A_Sor1Chase();
+void A_Sor1Pain();
+void A_Srcr1Attack();
+void A_SorZap();
+void A_SorcererRise();
+void A_SorRise();
+void A_SorSightSnd();
+void A_Srcr2Decide();
+void A_Srcr2Attack();
+void A_Sor2DthInit();
+void A_SorDSph();
+void A_Sor2DthLoop();
+void A_SorDExp();
+void A_SorDBon();
+void A_BlueSpark();
+void A_GenWizard();
+void A_MinotaurAtk1();
+void A_MinotaurDecide();
+void A_MinotaurAtk2();
+void A_MinotaurAtk3();
+void A_MinotaurCharge();
+void A_MntrFloorFire();
+void A_ESound();
+
+state_t states[NUMSTATES] = {
+ {SPR_IMPX, 0, -1, NULL, S_NULL, 0, 0}, // S_NULL
+ {SPR_ACLO, 4, 1050, A_FreeTargMobj, S_NULL, 0, 0}, // S_FREETARGMOBJ
+ {SPR_PTN1, 0, 3, NULL, S_ITEM_PTN1_2, 0, 0}, // S_ITEM_PTN1_1
+ {SPR_PTN1, 1, 3, NULL, S_ITEM_PTN1_3, 0, 0}, // S_ITEM_PTN1_2
+ {SPR_PTN1, 2, 3, NULL, S_ITEM_PTN1_1, 0, 0}, // S_ITEM_PTN1_3
+ {SPR_SHLD, 0, -1, NULL, S_NULL, 0, 0}, // S_ITEM_SHLD1
+ {SPR_SHD2, 0, -1, NULL, S_NULL, 0, 0}, // S_ITEM_SHD2_1
+ {SPR_BAGH, 0, -1, NULL, S_NULL, 0, 0}, // S_ITEM_BAGH1
+ {SPR_SPMP, 0, -1, NULL, S_NULL, 0, 0}, // S_ITEM_SPMP1
+ {SPR_ACLO, 4, 1400, NULL, S_HIDESPECIAL2, 0, 0}, // S_HIDESPECIAL1
+ {SPR_ACLO, 0, 4, A_RestoreSpecialThing1, S_HIDESPECIAL3, 0, 0}, // S_HIDESPECIAL2
+ {SPR_ACLO, 1, 4, NULL, S_HIDESPECIAL4, 0, 0}, // S_HIDESPECIAL3
+ {SPR_ACLO, 0, 4, NULL, S_HIDESPECIAL5, 0, 0}, // S_HIDESPECIAL4
+ {SPR_ACLO, 1, 4, NULL, S_HIDESPECIAL6, 0, 0}, // S_HIDESPECIAL5
+ {SPR_ACLO, 2, 4, NULL, S_HIDESPECIAL7, 0, 0}, // S_HIDESPECIAL6
+ {SPR_ACLO, 1, 4, NULL, S_HIDESPECIAL8, 0, 0}, // S_HIDESPECIAL7
+ {SPR_ACLO, 2, 4, NULL, S_HIDESPECIAL9, 0, 0}, // S_HIDESPECIAL8
+ {SPR_ACLO, 3, 4, NULL, S_HIDESPECIAL10, 0, 0}, // S_HIDESPECIAL9
+ {SPR_ACLO, 2, 4, NULL, S_HIDESPECIAL11, 0, 0}, // S_HIDESPECIAL10
+ {SPR_ACLO, 3, 4, A_RestoreSpecialThing2, S_NULL, 0, 0}, // S_HIDESPECIAL11
+ {SPR_ACLO, 3, 3, NULL, S_DORMANTARTI2, 0, 0}, // S_DORMANTARTI1
+ {SPR_ACLO, 2, 3, NULL, S_DORMANTARTI3, 0, 0}, // S_DORMANTARTI2
+ {SPR_ACLO, 3, 3, NULL, S_DORMANTARTI4, 0, 0}, // S_DORMANTARTI3
+ {SPR_ACLO, 2, 3, NULL, S_DORMANTARTI5, 0, 0}, // S_DORMANTARTI4
+ {SPR_ACLO, 1, 3, NULL, S_DORMANTARTI6, 0, 0}, // S_DORMANTARTI5
+ {SPR_ACLO, 2, 3, NULL, S_DORMANTARTI7, 0, 0}, // S_DORMANTARTI6
+ {SPR_ACLO, 1, 3, NULL, S_DORMANTARTI8, 0, 0}, // S_DORMANTARTI7
+ {SPR_ACLO, 0, 3, NULL, S_DORMANTARTI9, 0, 0}, // S_DORMANTARTI8
+ {SPR_ACLO, 1, 3, NULL, S_DORMANTARTI10, 0, 0}, // S_DORMANTARTI9
+ {SPR_ACLO, 0, 3, NULL, S_DORMANTARTI11, 0, 0}, // S_DORMANTARTI10
+ {SPR_ACLO, 0, 1400, A_HideThing, S_DORMANTARTI12, 0, 0}, // S_DORMANTARTI11
+ {SPR_ACLO, 0, 3, A_UnHideThing, S_DORMANTARTI13, 0, 0}, // S_DORMANTARTI12
+ {SPR_ACLO, 1, 3, NULL, S_DORMANTARTI14, 0, 0}, // S_DORMANTARTI13
+ {SPR_ACLO, 0, 3, NULL, S_DORMANTARTI15, 0, 0}, // S_DORMANTARTI14
+ {SPR_ACLO, 1, 3, NULL, S_DORMANTARTI16, 0, 0}, // S_DORMANTARTI15
+ {SPR_ACLO, 2, 3, NULL, S_DORMANTARTI17, 0, 0}, // S_DORMANTARTI16
+ {SPR_ACLO, 1, 3, NULL, S_DORMANTARTI18, 0, 0}, // S_DORMANTARTI17
+ {SPR_ACLO, 2, 3, NULL, S_DORMANTARTI19, 0, 0}, // S_DORMANTARTI18
+ {SPR_ACLO, 3, 3, NULL, S_DORMANTARTI20, 0, 0}, // S_DORMANTARTI19
+ {SPR_ACLO, 2, 3, NULL, S_DORMANTARTI21, 0, 0}, // S_DORMANTARTI20
+ {SPR_ACLO, 3, 3, A_RestoreArtifact, S_NULL, 0, 0}, // S_DORMANTARTI21
+ {SPR_ACLO, 3, 3, NULL, S_DEADARTI2, 0, 0}, // S_DEADARTI1
+ {SPR_ACLO, 2, 3, NULL, S_DEADARTI3, 0, 0}, // S_DEADARTI2
+ {SPR_ACLO, 3, 3, NULL, S_DEADARTI4, 0, 0}, // S_DEADARTI3
+ {SPR_ACLO, 2, 3, NULL, S_DEADARTI5, 0, 0}, // S_DEADARTI4
+ {SPR_ACLO, 1, 3, NULL, S_DEADARTI6, 0, 0}, // S_DEADARTI5
+ {SPR_ACLO, 2, 3, NULL, S_DEADARTI7, 0, 0}, // S_DEADARTI6
+ {SPR_ACLO, 1, 3, NULL, S_DEADARTI8, 0, 0}, // S_DEADARTI7
+ {SPR_ACLO, 0, 3, NULL, S_DEADARTI9, 0, 0}, // S_DEADARTI8
+ {SPR_ACLO, 1, 3, NULL, S_DEADARTI10, 0, 0}, // S_DEADARTI9
+ {SPR_ACLO, 0, 3, NULL, S_NULL, 0, 0}, // S_DEADARTI10
+ {SPR_INVS, 32768, 350, NULL, S_ARTI_INVS1, 0, 0}, // S_ARTI_INVS1
+ {SPR_PTN2, 0, 4, NULL, S_ARTI_PTN2_2, 0, 0}, // S_ARTI_PTN2_1
+ {SPR_PTN2, 1, 4, NULL, S_ARTI_PTN2_3, 0, 0}, // S_ARTI_PTN2_2
+ {SPR_PTN2, 2, 4, NULL, S_ARTI_PTN2_1, 0, 0}, // S_ARTI_PTN2_3
+ {SPR_SOAR, 0, 5, NULL, S_ARTI_SOAR2, 0, 0}, // S_ARTI_SOAR1
+ {SPR_SOAR, 1, 5, NULL, S_ARTI_SOAR3, 0, 0}, // S_ARTI_SOAR2
+ {SPR_SOAR, 2, 5, NULL, S_ARTI_SOAR4, 0, 0}, // S_ARTI_SOAR3
+ {SPR_SOAR, 1, 5, NULL, S_ARTI_SOAR1, 0, 0}, // S_ARTI_SOAR4
+ {SPR_INVU, 0, 3, NULL, S_ARTI_INVU2, 0, 0}, // S_ARTI_INVU1
+ {SPR_INVU, 1, 3, NULL, S_ARTI_INVU3, 0, 0}, // S_ARTI_INVU2
+ {SPR_INVU, 2, 3, NULL, S_ARTI_INVU4, 0, 0}, // S_ARTI_INVU3
+ {SPR_INVU, 3, 3, NULL, S_ARTI_INVU1, 0, 0}, // S_ARTI_INVU4
+ {SPR_PWBK, 0, 350, NULL, S_ARTI_PWBK1, 0, 0}, // S_ARTI_PWBK1
+ {SPR_EGGC, 0, 6, NULL, S_ARTI_EGGC2, 0, 0}, // S_ARTI_EGGC1
+ {SPR_EGGC, 1, 6, NULL, S_ARTI_EGGC3, 0, 0}, // S_ARTI_EGGC2
+ {SPR_EGGC, 2, 6, NULL, S_ARTI_EGGC4, 0, 0}, // S_ARTI_EGGC3
+ {SPR_EGGC, 1, 6, NULL, S_ARTI_EGGC1, 0, 0}, // S_ARTI_EGGC4
+ {SPR_EGGM, 0, 4, NULL, S_EGGFX2, 0, 0}, // S_EGGFX1
+ {SPR_EGGM, 1, 4, NULL, S_EGGFX3, 0, 0}, // S_EGGFX2
+ {SPR_EGGM, 2, 4, NULL, S_EGGFX4, 0, 0}, // S_EGGFX3
+ {SPR_EGGM, 3, 4, NULL, S_EGGFX5, 0, 0}, // S_EGGFX4
+ {SPR_EGGM, 4, 4, NULL, S_EGGFX1, 0, 0}, // S_EGGFX5
+ {SPR_FX01, 32772, 3, NULL, S_EGGFXI1_2, 0, 0}, // S_EGGFXI1_1
+ {SPR_FX01, 32773, 3, NULL, S_EGGFXI1_3, 0, 0}, // S_EGGFXI1_2
+ {SPR_FX01, 32774, 3, NULL, S_EGGFXI1_4, 0, 0}, // S_EGGFXI1_3
+ {SPR_FX01, 32775, 3, NULL, S_NULL, 0, 0}, // S_EGGFXI1_4
+ {SPR_SPHL, 0, 350, NULL, S_ARTI_SPHL1, 0, 0}, // S_ARTI_SPHL1
+ {SPR_TRCH, 32768, 3, NULL, S_ARTI_TRCH2, 0, 0}, // S_ARTI_TRCH1
+ {SPR_TRCH, 32769, 3, NULL, S_ARTI_TRCH3, 0, 0}, // S_ARTI_TRCH2
+ {SPR_TRCH, 32770, 3, NULL, S_ARTI_TRCH1, 0, 0}, // S_ARTI_TRCH3
+ {SPR_FBMB, 4, 350, NULL, S_ARTI_FBMB1, 0, 0}, // S_ARTI_FBMB1
+ {SPR_FBMB, 0, 10, NULL, S_FIREBOMB2, 0, 0}, // S_FIREBOMB1
+ {SPR_FBMB, 1, 10, NULL, S_FIREBOMB3, 0, 0}, // S_FIREBOMB2
+ {SPR_FBMB, 2, 10, NULL, S_FIREBOMB4, 0, 0}, // S_FIREBOMB3
+ {SPR_FBMB, 3, 10, NULL, S_FIREBOMB5, 0, 0}, // S_FIREBOMB4
+ {SPR_FBMB, 4, 6, A_Scream, S_FIREBOMB6, 0, 0}, // S_FIREBOMB5
+ {SPR_XPL1, 32768, 4, A_Explode, S_FIREBOMB7, 0, 0}, // S_FIREBOMB6
+ {SPR_XPL1, 32769, 4, NULL, S_FIREBOMB8, 0, 0}, // S_FIREBOMB7
+ {SPR_XPL1, 32770, 4, NULL, S_FIREBOMB9, 0, 0}, // S_FIREBOMB8
+ {SPR_XPL1, 32771, 4, NULL, S_FIREBOMB10, 0, 0}, // S_FIREBOMB9
+ {SPR_XPL1, 32772, 4, NULL, S_FIREBOMB11, 0, 0}, // S_FIREBOMB10
+ {SPR_XPL1, 32773, 4, NULL, S_NULL, 0, 0}, // S_FIREBOMB11
+ {SPR_ATLP, 0, 4, NULL, S_ARTI_ATLP2, 0, 0}, // S_ARTI_ATLP1
+ {SPR_ATLP, 1, 4, NULL, S_ARTI_ATLP3, 0, 0}, // S_ARTI_ATLP2
+ {SPR_ATLP, 2, 4, NULL, S_ARTI_ATLP4, 0, 0}, // S_ARTI_ATLP3
+ {SPR_ATLP, 1, 4, NULL, S_ARTI_ATLP1, 0, 0}, // S_ARTI_ATLP4
+ {SPR_PPOD, 0, 10, NULL, S_POD_WAIT1, 0, 0}, // S_POD_WAIT1
+ {SPR_PPOD, 1, 14, A_PodPain, S_POD_WAIT1, 0, 0}, // S_POD_PAIN1
+ {SPR_PPOD, 32770, 5, A_RemovePod, S_POD_DIE2, 0, 0}, // S_POD_DIE1
+ {SPR_PPOD, 32771, 5, A_Scream, S_POD_DIE3, 0, 0}, // S_POD_DIE2
+ {SPR_PPOD, 32772, 5, A_Explode, S_POD_DIE4, 0, 0}, // S_POD_DIE3
+ {SPR_PPOD, 32773, 10, NULL, S_FREETARGMOBJ, 0, 0}, // S_POD_DIE4
+ {SPR_PPOD, 8, 3, NULL, S_POD_GROW2, 0, 0}, // S_POD_GROW1
+ {SPR_PPOD, 9, 3, NULL, S_POD_GROW3, 0, 0}, // S_POD_GROW2
+ {SPR_PPOD, 10, 3, NULL, S_POD_GROW4, 0, 0}, // S_POD_GROW3
+ {SPR_PPOD, 11, 3, NULL, S_POD_GROW5, 0, 0}, // S_POD_GROW4
+ {SPR_PPOD, 12, 3, NULL, S_POD_GROW6, 0, 0}, // S_POD_GROW5
+ {SPR_PPOD, 13, 3, NULL, S_POD_GROW7, 0, 0}, // S_POD_GROW6
+ {SPR_PPOD, 14, 3, NULL, S_POD_GROW8, 0, 0}, // S_POD_GROW7
+ {SPR_PPOD, 15, 3, NULL, S_POD_WAIT1, 0, 0}, // S_POD_GROW8
+ {SPR_PPOD, 6, 8, NULL, S_PODGOO2, 0, 0}, // S_PODGOO1
+ {SPR_PPOD, 7, 8, NULL, S_PODGOO1, 0, 0}, // S_PODGOO2
+ {SPR_PPOD, 6, 10, NULL, S_NULL, 0, 0}, // S_PODGOOX
+ {SPR_AMG1, 0, 35, A_MakePod, S_PODGENERATOR, 0, 0}, // S_PODGENERATOR
+ {SPR_SPSH, 0, 8, NULL, S_SPLASH2, 0, 0}, // S_SPLASH1
+ {SPR_SPSH, 1, 8, NULL, S_SPLASH3, 0, 0}, // S_SPLASH2
+ {SPR_SPSH, 2, 8, NULL, S_SPLASH4, 0, 0}, // S_SPLASH3
+ {SPR_SPSH, 3, 16, NULL, S_NULL, 0, 0}, // S_SPLASH4
+ {SPR_SPSH, 3, 10, NULL, S_NULL, 0, 0}, // S_SPLASHX
+ {SPR_SPSH, 4, 5, NULL, S_SPLASHBASE2, 0, 0}, // S_SPLASHBASE1
+ {SPR_SPSH, 5, 5, NULL, S_SPLASHBASE3, 0, 0}, // S_SPLASHBASE2
+ {SPR_SPSH, 6, 5, NULL, S_SPLASHBASE4, 0, 0}, // S_SPLASHBASE3
+ {SPR_SPSH, 7, 5, NULL, S_SPLASHBASE5, 0, 0}, // S_SPLASHBASE4
+ {SPR_SPSH, 8, 5, NULL, S_SPLASHBASE6, 0, 0}, // S_SPLASHBASE5
+ {SPR_SPSH, 9, 5, NULL, S_SPLASHBASE7, 0, 0}, // S_SPLASHBASE6
+ {SPR_SPSH, 10, 5, NULL, S_NULL, 0, 0}, // S_SPLASHBASE7
+ {SPR_LVAS, 32768, 5, NULL, S_LAVASPLASH2, 0, 0}, // S_LAVASPLASH1
+ {SPR_LVAS, 32769, 5, NULL, S_LAVASPLASH3, 0, 0}, // S_LAVASPLASH2
+ {SPR_LVAS, 32770, 5, NULL, S_LAVASPLASH4, 0, 0}, // S_LAVASPLASH3
+ {SPR_LVAS, 32771, 5, NULL, S_LAVASPLASH5, 0, 0}, // S_LAVASPLASH4
+ {SPR_LVAS, 32772, 5, NULL, S_LAVASPLASH6, 0, 0}, // S_LAVASPLASH5
+ {SPR_LVAS, 32773, 5, NULL, S_NULL, 0, 0}, // S_LAVASPLASH6
+ {SPR_LVAS, 32774, 5, NULL, S_LAVASMOKE2, 0, 0}, // S_LAVASMOKE1
+ {SPR_LVAS, 32775, 5, NULL, S_LAVASMOKE3, 0, 0}, // S_LAVASMOKE2
+ {SPR_LVAS, 32776, 5, NULL, S_LAVASMOKE4, 0, 0}, // S_LAVASMOKE3
+ {SPR_LVAS, 32777, 5, NULL, S_LAVASMOKE5, 0, 0}, // S_LAVASMOKE4
+ {SPR_LVAS, 32778, 5, NULL, S_NULL, 0, 0}, // S_LAVASMOKE5
+ {SPR_SLDG, 0, 8, NULL, S_SLUDGECHUNK2, 0, 0}, // S_SLUDGECHUNK1
+ {SPR_SLDG, 1, 8, NULL, S_SLUDGECHUNK3, 0, 0}, // S_SLUDGECHUNK2
+ {SPR_SLDG, 2, 8, NULL, S_SLUDGECHUNK4, 0, 0}, // S_SLUDGECHUNK3
+ {SPR_SLDG, 3, 8, NULL, S_NULL, 0, 0}, // S_SLUDGECHUNK4
+ {SPR_SLDG, 3, 6, NULL, S_NULL, 0, 0}, // S_SLUDGECHUNKX
+ {SPR_SLDG, 4, 5, NULL, S_SLUDGESPLASH2, 0, 0}, // S_SLUDGESPLASH1
+ {SPR_SLDG, 5, 5, NULL, S_SLUDGESPLASH3, 0, 0}, // S_SLUDGESPLASH2
+ {SPR_SLDG, 6, 5, NULL, S_SLUDGESPLASH4, 0, 0}, // S_SLUDGESPLASH3
+ {SPR_SLDG, 7, 5, NULL, S_NULL, 0, 0}, // S_SLUDGESPLASH4
+ {SPR_SKH1, 0, -1, NULL, S_NULL, 0, 0}, // S_SKULLHANG70_1
+ {SPR_SKH2, 0, -1, NULL, S_NULL, 0, 0}, // S_SKULLHANG60_1
+ {SPR_SKH3, 0, -1, NULL, S_NULL, 0, 0}, // S_SKULLHANG45_1
+ {SPR_SKH4, 0, -1, NULL, S_NULL, 0, 0}, // S_SKULLHANG35_1
+ {SPR_CHDL, 0, 4, NULL, S_CHANDELIER2, 0, 0}, // S_CHANDELIER1
+ {SPR_CHDL, 1, 4, NULL, S_CHANDELIER3, 0, 0}, // S_CHANDELIER2
+ {SPR_CHDL, 2, 4, NULL, S_CHANDELIER1, 0, 0}, // S_CHANDELIER3
+ {SPR_SRTC, 0, 4, NULL, S_SERPTORCH2, 0, 0}, // S_SERPTORCH1
+ {SPR_SRTC, 1, 4, NULL, S_SERPTORCH3, 0, 0}, // S_SERPTORCH2
+ {SPR_SRTC, 2, 4, NULL, S_SERPTORCH1, 0, 0}, // S_SERPTORCH3
+ {SPR_SMPL, 0, -1, NULL, S_NULL, 0, 0}, // S_SMALLPILLAR
+ {SPR_STGS, 0, -1, NULL, S_NULL, 0, 0}, // S_STALAGMITESMALL
+ {SPR_STGL, 0, -1, NULL, S_NULL, 0, 0}, // S_STALAGMITELARGE
+ {SPR_STCS, 0, -1, NULL, S_NULL, 0, 0}, // S_STALACTITESMALL
+ {SPR_STCL, 0, -1, NULL, S_NULL, 0, 0}, // S_STALACTITELARGE
+ {SPR_KFR1, 32768, 3, NULL, S_FIREBRAZIER2, 0, 0}, // S_FIREBRAZIER1
+ {SPR_KFR1, 32769, 3, NULL, S_FIREBRAZIER3, 0, 0}, // S_FIREBRAZIER2
+ {SPR_KFR1, 32770, 3, NULL, S_FIREBRAZIER4, 0, 0}, // S_FIREBRAZIER3
+ {SPR_KFR1, 32771, 3, NULL, S_FIREBRAZIER5, 0, 0}, // S_FIREBRAZIER4
+ {SPR_KFR1, 32772, 3, NULL, S_FIREBRAZIER6, 0, 0}, // S_FIREBRAZIER5
+ {SPR_KFR1, 32773, 3, NULL, S_FIREBRAZIER7, 0, 0}, // S_FIREBRAZIER6
+ {SPR_KFR1, 32774, 3, NULL, S_FIREBRAZIER8, 0, 0}, // S_FIREBRAZIER7
+ {SPR_KFR1, 32775, 3, NULL, S_FIREBRAZIER1, 0, 0}, // S_FIREBRAZIER8
+ {SPR_BARL, 0, -1, NULL, S_NULL, 0, 0}, // S_BARREL
+ {SPR_BRPL, 0, -1, NULL, S_NULL, 0, 0}, // S_BRPILLAR
+ {SPR_MOS1, 0, -1, NULL, S_NULL, 0, 0}, // S_MOSS1
+ {SPR_MOS2, 0, -1, NULL, S_NULL, 0, 0}, // S_MOSS2
+ {SPR_WTRH, 32768, 6, NULL, S_WALLTORCH2, 0, 0}, // S_WALLTORCH1
+ {SPR_WTRH, 32769, 6, NULL, S_WALLTORCH3, 0, 0}, // S_WALLTORCH2
+ {SPR_WTRH, 32770, 6, NULL, S_WALLTORCH1, 0, 0}, // S_WALLTORCH3
+ {SPR_HCOR, 0, -1, NULL, S_NULL, 0, 0}, // S_HANGINGCORPSE
+ {SPR_KGZ1, 0, 1, NULL, S_KEYGIZMO2, 0, 0}, // S_KEYGIZMO1
+ {SPR_KGZ1, 0, 1, A_InitKeyGizmo, S_KEYGIZMO3, 0, 0}, // S_KEYGIZMO2
+ {SPR_KGZ1, 0, -1, NULL, S_NULL, 0, 0}, // S_KEYGIZMO3
+ {SPR_KGZB, 0, 1, NULL, S_KGZ_START, 0, 0}, // S_KGZ_START
+ {SPR_KGZB, 32768, -1, NULL, S_NULL, 0, 0}, // S_KGZ_BLUEFLOAT1
+ {SPR_KGZG, 32768, -1, NULL, S_NULL, 0, 0}, // S_KGZ_GREENFLOAT1
+ {SPR_KGZY, 32768, -1, NULL, S_NULL, 0, 0}, // S_KGZ_YELLOWFLOAT1
+ {SPR_VLCO, 0, 350, NULL, S_VOLCANO2, 0, 0}, // S_VOLCANO1
+ {SPR_VLCO, 0, 35, A_VolcanoSet, S_VOLCANO3, 0, 0}, // S_VOLCANO2
+ {SPR_VLCO, 1, 3, NULL, S_VOLCANO4, 0, 0}, // S_VOLCANO3
+ {SPR_VLCO, 2, 3, NULL, S_VOLCANO5, 0, 0}, // S_VOLCANO4
+ {SPR_VLCO, 3, 3, NULL, S_VOLCANO6, 0, 0}, // S_VOLCANO5
+ {SPR_VLCO, 1, 3, NULL, S_VOLCANO7, 0, 0}, // S_VOLCANO6
+ {SPR_VLCO, 2, 3, NULL, S_VOLCANO8, 0, 0}, // S_VOLCANO7
+ {SPR_VLCO, 3, 3, NULL, S_VOLCANO9, 0, 0}, // S_VOLCANO8
+ {SPR_VLCO, 4, 10, A_VolcanoBlast, S_VOLCANO2, 0, 0}, // S_VOLCANO9
+ {SPR_VFBL, 0, 4, A_BeastPuff, S_VOLCANOBALL2, 0, 0}, // S_VOLCANOBALL1
+ {SPR_VFBL, 1, 4, A_BeastPuff, S_VOLCANOBALL1, 0, 0}, // S_VOLCANOBALL2
+ {SPR_XPL1, 0, 4, A_VolcBallImpact, S_VOLCANOBALLX2, 0, 0}, // S_VOLCANOBALLX1
+ {SPR_XPL1, 1, 4, NULL, S_VOLCANOBALLX3, 0, 0}, // S_VOLCANOBALLX2
+ {SPR_XPL1, 2, 4, NULL, S_VOLCANOBALLX4, 0, 0}, // S_VOLCANOBALLX3
+ {SPR_XPL1, 3, 4, NULL, S_VOLCANOBALLX5, 0, 0}, // S_VOLCANOBALLX4
+ {SPR_XPL1, 4, 4, NULL, S_VOLCANOBALLX6, 0, 0}, // S_VOLCANOBALLX5
+ {SPR_XPL1, 5, 4, NULL, S_NULL, 0, 0}, // S_VOLCANOBALLX6
+ {SPR_VTFB, 0, 4, NULL, S_VOLCANOTBALL2, 0, 0}, // S_VOLCANOTBALL1
+ {SPR_VTFB, 1, 4, NULL, S_VOLCANOTBALL1, 0, 0}, // S_VOLCANOTBALL2
+ {SPR_SFFI, 2, 4, NULL, S_VOLCANOTBALLX2, 0, 0}, // S_VOLCANOTBALLX1
+ {SPR_SFFI, 1, 4, NULL, S_VOLCANOTBALLX3, 0, 0}, // S_VOLCANOTBALLX2
+ {SPR_SFFI, 0, 4, NULL, S_VOLCANOTBALLX4, 0, 0}, // S_VOLCANOTBALLX3
+ {SPR_SFFI, 1, 4, NULL, S_VOLCANOTBALLX5, 0, 0}, // S_VOLCANOTBALLX4
+ {SPR_SFFI, 2, 4, NULL, S_VOLCANOTBALLX6, 0, 0}, // S_VOLCANOTBALLX5
+ {SPR_SFFI, 3, 4, NULL, S_VOLCANOTBALLX7, 0, 0}, // S_VOLCANOTBALLX6
+ {SPR_SFFI, 4, 4, NULL, S_NULL, 0, 0}, // S_VOLCANOTBALLX7
+ {SPR_TGLT, 0, 8, A_SpawnTeleGlitter, S_TELEGLITGEN1, 0, 0}, // S_TELEGLITGEN1
+ {SPR_TGLT, 5, 8, A_SpawnTeleGlitter2, S_TELEGLITGEN2, 0, 0}, // S_TELEGLITGEN2
+ {SPR_TGLT, 32768, 2, NULL, S_TELEGLITTER1_2, 0, 0}, // S_TELEGLITTER1_1
+ {SPR_TGLT, 32769, 2, A_AccTeleGlitter, S_TELEGLITTER1_3, 0, 0}, // S_TELEGLITTER1_2
+ {SPR_TGLT, 32770, 2, NULL, S_TELEGLITTER1_4, 0, 0}, // S_TELEGLITTER1_3
+ {SPR_TGLT, 32771, 2, A_AccTeleGlitter, S_TELEGLITTER1_5, 0, 0}, // S_TELEGLITTER1_4
+ {SPR_TGLT, 32772, 2, NULL, S_TELEGLITTER1_1, 0, 0}, // S_TELEGLITTER1_5
+ {SPR_TGLT, 32773, 2, NULL, S_TELEGLITTER2_2, 0, 0}, // S_TELEGLITTER2_1
+ {SPR_TGLT, 32774, 2, A_AccTeleGlitter, S_TELEGLITTER2_3, 0, 0}, // S_TELEGLITTER2_2
+ {SPR_TGLT, 32775, 2, NULL, S_TELEGLITTER2_4, 0, 0}, // S_TELEGLITTER2_3
+ {SPR_TGLT, 32776, 2, A_AccTeleGlitter, S_TELEGLITTER2_5, 0, 0}, // S_TELEGLITTER2_4
+ {SPR_TGLT, 32777, 2, NULL, S_TELEGLITTER2_1, 0, 0}, // S_TELEGLITTER2_5
+ {SPR_TELE, 32768, 6, NULL, S_TFOG2, 0, 0}, // S_TFOG1
+ {SPR_TELE, 32769, 6, NULL, S_TFOG3, 0, 0}, // S_TFOG2
+ {SPR_TELE, 32770, 6, NULL, S_TFOG4, 0, 0}, // S_TFOG3
+ {SPR_TELE, 32771, 6, NULL, S_TFOG5, 0, 0}, // S_TFOG4
+ {SPR_TELE, 32772, 6, NULL, S_TFOG6, 0, 0}, // S_TFOG5
+ {SPR_TELE, 32773, 6, NULL, S_TFOG7, 0, 0}, // S_TFOG6
+ {SPR_TELE, 32774, 6, NULL, S_TFOG8, 0, 0}, // S_TFOG7
+ {SPR_TELE, 32775, 6, NULL, S_TFOG9, 0, 0}, // S_TFOG8
+ {SPR_TELE, 32774, 6, NULL, S_TFOG10, 0, 0}, // S_TFOG9
+ {SPR_TELE, 32773, 6, NULL, S_TFOG11, 0, 0}, // S_TFOG10
+ {SPR_TELE, 32772, 6, NULL, S_TFOG12, 0, 0}, // S_TFOG11
+ {SPR_TELE, 32771, 6, NULL, S_TFOG13, 0, 0}, // S_TFOG12
+ {SPR_TELE, 32770, 6, NULL, S_NULL, 0, 0}, // S_TFOG13
+ {SPR_STFF, 0, 0, A_Light0, S_NULL, 0, 0}, // S_LIGHTDONE
+ {SPR_STFF, 0, 1, A_WeaponReady, S_STAFFREADY, 0, 0}, // S_STAFFREADY
+ {SPR_STFF, 0, 1, A_Lower, S_STAFFDOWN, 0, 0}, // S_STAFFDOWN
+ {SPR_STFF, 0, 1, A_Raise, S_STAFFUP, 0, 0}, // S_STAFFUP
+ {SPR_STFF, 3, 4, A_WeaponReady, S_STAFFREADY2_2, 0, 0}, // S_STAFFREADY2_1
+ {SPR_STFF, 4, 4, A_WeaponReady, S_STAFFREADY2_3, 0, 0}, // S_STAFFREADY2_2
+ {SPR_STFF, 5, 4, A_WeaponReady, S_STAFFREADY2_1, 0, 0}, // S_STAFFREADY2_3
+ {SPR_STFF, 3, 1, A_Lower, S_STAFFDOWN2, 0, 0}, // S_STAFFDOWN2
+ {SPR_STFF, 3, 1, A_Raise, S_STAFFUP2, 0, 0}, // S_STAFFUP2
+ {SPR_STFF, 1, 6, NULL, S_STAFFATK1_2, 0, 0}, // S_STAFFATK1_1
+ {SPR_STFF, 2, 8, A_StaffAttackPL1, S_STAFFATK1_3, 0, 0}, // S_STAFFATK1_2
+ {SPR_STFF, 1, 8, A_ReFire, S_STAFFREADY, 0, 0}, // S_STAFFATK1_3
+ {SPR_STFF, 6, 6, NULL, S_STAFFATK2_2, 0, 0}, // S_STAFFATK2_1
+ {SPR_STFF, 7, 8, A_StaffAttackPL2, S_STAFFATK2_3, 0, 0}, // S_STAFFATK2_2
+ {SPR_STFF, 6, 8, A_ReFire, S_STAFFREADY2_1, 0, 0}, // S_STAFFATK2_3
+ {SPR_PUF3, 32768, 4, NULL, S_STAFFPUFF2, 0, 0}, // S_STAFFPUFF1
+ {SPR_PUF3, 1, 4, NULL, S_STAFFPUFF3, 0, 0}, // S_STAFFPUFF2
+ {SPR_PUF3, 2, 4, NULL, S_STAFFPUFF4, 0, 0}, // S_STAFFPUFF3
+ {SPR_PUF3, 3, 4, NULL, S_NULL, 0, 0}, // S_STAFFPUFF4
+ {SPR_PUF4, 32768, 4, NULL, S_STAFFPUFF2_2, 0, 0}, // S_STAFFPUFF2_1
+ {SPR_PUF4, 32769, 4, NULL, S_STAFFPUFF2_3, 0, 0}, // S_STAFFPUFF2_2
+ {SPR_PUF4, 32770, 4, NULL, S_STAFFPUFF2_4, 0, 0}, // S_STAFFPUFF2_3
+ {SPR_PUF4, 32771, 4, NULL, S_STAFFPUFF2_5, 0, 0}, // S_STAFFPUFF2_4
+ {SPR_PUF4, 32772, 4, NULL, S_STAFFPUFF2_6, 0, 0}, // S_STAFFPUFF2_5
+ {SPR_PUF4, 32773, 4, NULL, S_NULL, 0, 0}, // S_STAFFPUFF2_6
+ {SPR_BEAK, 0, 1, A_BeakReady, S_BEAKREADY, 0, 0}, // S_BEAKREADY
+ {SPR_BEAK, 0, 1, A_Lower, S_BEAKDOWN, 0, 0}, // S_BEAKDOWN
+ {SPR_BEAK, 0, 1, A_BeakRaise, S_BEAKUP, 0, 0}, // S_BEAKUP
+ {SPR_BEAK, 0, 18, A_BeakAttackPL1, S_BEAKREADY, 0, 0}, // S_BEAKATK1_1
+ {SPR_BEAK, 0, 12, A_BeakAttackPL2, S_BEAKREADY, 0, 0}, // S_BEAKATK2_1
+ {SPR_WGNT, 0, -1, NULL, S_NULL, 0, 0}, // S_WGNT
+ {SPR_GAUN, 0, 1, A_WeaponReady, S_GAUNTLETREADY, 0, 0}, // S_GAUNTLETREADY
+ {SPR_GAUN, 0, 1, A_Lower, S_GAUNTLETDOWN, 0, 0}, // S_GAUNTLETDOWN
+ {SPR_GAUN, 0, 1, A_Raise, S_GAUNTLETUP, 0, 0}, // S_GAUNTLETUP
+ {SPR_GAUN, 6, 4, A_WeaponReady, S_GAUNTLETREADY2_2, 0, 0}, // S_GAUNTLETREADY2_1
+ {SPR_GAUN, 7, 4, A_WeaponReady, S_GAUNTLETREADY2_3, 0, 0}, // S_GAUNTLETREADY2_2
+ {SPR_GAUN, 8, 4, A_WeaponReady, S_GAUNTLETREADY2_1, 0, 0}, // S_GAUNTLETREADY2_3
+ {SPR_GAUN, 6, 1, A_Lower, S_GAUNTLETDOWN2, 0, 0}, // S_GAUNTLETDOWN2
+ {SPR_GAUN, 6, 1, A_Raise, S_GAUNTLETUP2, 0, 0}, // S_GAUNTLETUP2
+ {SPR_GAUN, 1, 4, NULL, S_GAUNTLETATK1_2, 0, 0}, // S_GAUNTLETATK1_1
+ {SPR_GAUN, 2, 4, NULL, S_GAUNTLETATK1_3, 0, 0}, // S_GAUNTLETATK1_2
+ {SPR_GAUN, 32771, 4, A_GauntletAttack, S_GAUNTLETATK1_4, 0, 0}, // S_GAUNTLETATK1_3
+ {SPR_GAUN, 32772, 4, A_GauntletAttack, S_GAUNTLETATK1_5, 0, 0}, // S_GAUNTLETATK1_4
+ {SPR_GAUN, 32773, 4, A_GauntletAttack, S_GAUNTLETATK1_6, 0, 0}, // S_GAUNTLETATK1_5
+ {SPR_GAUN, 2, 4, A_ReFire, S_GAUNTLETATK1_7, 0, 0}, // S_GAUNTLETATK1_6
+ {SPR_GAUN, 1, 4, A_Light0, S_GAUNTLETREADY, 0, 0}, // S_GAUNTLETATK1_7
+ {SPR_GAUN, 9, 4, NULL, S_GAUNTLETATK2_2, 0, 0}, // S_GAUNTLETATK2_1
+ {SPR_GAUN, 10, 4, NULL, S_GAUNTLETATK2_3, 0, 0}, // S_GAUNTLETATK2_2
+ {SPR_GAUN, 32779, 4, A_GauntletAttack, S_GAUNTLETATK2_4, 0, 0}, // S_GAUNTLETATK2_3
+ {SPR_GAUN, 32780, 4, A_GauntletAttack, S_GAUNTLETATK2_5, 0, 0}, // S_GAUNTLETATK2_4
+ {SPR_GAUN, 32781, 4, A_GauntletAttack, S_GAUNTLETATK2_6, 0, 0}, // S_GAUNTLETATK2_5
+ {SPR_GAUN, 10, 4, A_ReFire, S_GAUNTLETATK2_7, 0, 0}, // S_GAUNTLETATK2_6
+ {SPR_GAUN, 9, 4, A_Light0, S_GAUNTLETREADY2_1, 0, 0}, // S_GAUNTLETATK2_7
+ {SPR_PUF1, 32768, 4, NULL, S_GAUNTLETPUFF1_2, 0, 0}, // S_GAUNTLETPUFF1_1
+ {SPR_PUF1, 32769, 4, NULL, S_GAUNTLETPUFF1_3, 0, 0}, // S_GAUNTLETPUFF1_2
+ {SPR_PUF1, 32770, 4, NULL, S_GAUNTLETPUFF1_4, 0, 0}, // S_GAUNTLETPUFF1_3
+ {SPR_PUF1, 32771, 4, NULL, S_NULL, 0, 0}, // S_GAUNTLETPUFF1_4
+ {SPR_PUF1, 32772, 4, NULL, S_GAUNTLETPUFF2_2, 0, 0}, // S_GAUNTLETPUFF2_1
+ {SPR_PUF1, 32773, 4, NULL, S_GAUNTLETPUFF2_3, 0, 0}, // S_GAUNTLETPUFF2_2
+ {SPR_PUF1, 32774, 4, NULL, S_GAUNTLETPUFF2_4, 0, 0}, // S_GAUNTLETPUFF2_3
+ {SPR_PUF1, 32775, 4, NULL, S_NULL, 0, 0}, // S_GAUNTLETPUFF2_4
+ {SPR_WBLS, 0, -1, NULL, S_NULL, 0, 0}, // S_BLSR
+ {SPR_BLSR, 0, 1, A_WeaponReady, S_BLASTERREADY, 0, 0}, // S_BLASTERREADY
+ {SPR_BLSR, 0, 1, A_Lower, S_BLASTERDOWN, 0, 0}, // S_BLASTERDOWN
+ {SPR_BLSR, 0, 1, A_Raise, S_BLASTERUP, 0, 0}, // S_BLASTERUP
+ {SPR_BLSR, 1, 3, NULL, S_BLASTERATK1_2, 0, 0}, // S_BLASTERATK1_1
+ {SPR_BLSR, 2, 3, NULL, S_BLASTERATK1_3, 0, 0}, // S_BLASTERATK1_2
+ {SPR_BLSR, 3, 2, A_FireBlasterPL1, S_BLASTERATK1_4, 0, 0}, // S_BLASTERATK1_3
+ {SPR_BLSR, 2, 2, NULL, S_BLASTERATK1_5, 0, 0}, // S_BLASTERATK1_4
+ {SPR_BLSR, 1, 2, NULL, S_BLASTERATK1_6, 0, 0}, // S_BLASTERATK1_5
+ {SPR_BLSR, 0, 0, A_ReFire, S_BLASTERREADY, 0, 0}, // S_BLASTERATK1_6
+ {SPR_BLSR, 1, 0, NULL, S_BLASTERATK2_2, 0, 0}, // S_BLASTERATK2_1
+ {SPR_BLSR, 2, 0, NULL, S_BLASTERATK2_3, 0, 0}, // S_BLASTERATK2_2
+ {SPR_BLSR, 3, 3, A_FireBlasterPL2, S_BLASTERATK2_4, 0, 0}, // S_BLASTERATK2_3
+ {SPR_BLSR, 2, 4, NULL, S_BLASTERATK2_5, 0, 0}, // S_BLASTERATK2_4
+ {SPR_BLSR, 1, 4, NULL, S_BLASTERATK2_6, 0, 0}, // S_BLASTERATK2_5
+ {SPR_BLSR, 0, 0, A_ReFire, S_BLASTERREADY, 0, 0}, // S_BLASTERATK2_6
+ {SPR_ACLO, 4, 200, NULL, S_BLASTERFX1_1, 0, 0}, // S_BLASTERFX1_1
+ {SPR_FX18, 32768, 3, A_SpawnRippers, S_BLASTERFXI1_2, 0, 0}, // S_BLASTERFXI1_1
+ {SPR_FX18, 32769, 3, NULL, S_BLASTERFXI1_3, 0, 0}, // S_BLASTERFXI1_2
+ {SPR_FX18, 32770, 4, NULL, S_BLASTERFXI1_4, 0, 0}, // S_BLASTERFXI1_3
+ {SPR_FX18, 32771, 4, NULL, S_BLASTERFXI1_5, 0, 0}, // S_BLASTERFXI1_4
+ {SPR_FX18, 32772, 4, NULL, S_BLASTERFXI1_6, 0, 0}, // S_BLASTERFXI1_5
+ {SPR_FX18, 32773, 4, NULL, S_BLASTERFXI1_7, 0, 0}, // S_BLASTERFXI1_6
+ {SPR_FX18, 32774, 4, NULL, S_NULL, 0, 0}, // S_BLASTERFXI1_7
+ {SPR_FX18, 7, 4, NULL, S_BLASTERSMOKE2, 0, 0}, // S_BLASTERSMOKE1
+ {SPR_FX18, 8, 4, NULL, S_BLASTERSMOKE3, 0, 0}, // S_BLASTERSMOKE2
+ {SPR_FX18, 9, 4, NULL, S_BLASTERSMOKE4, 0, 0}, // S_BLASTERSMOKE3
+ {SPR_FX18, 10, 4, NULL, S_BLASTERSMOKE5, 0, 0}, // S_BLASTERSMOKE4
+ {SPR_FX18, 11, 4, NULL, S_NULL, 0, 0}, // S_BLASTERSMOKE5
+ {SPR_FX18, 12, 4, NULL, S_RIPPER2, 0, 0}, // S_RIPPER1
+ {SPR_FX18, 13, 5, NULL, S_RIPPER1, 0, 0}, // S_RIPPER2
+ {SPR_FX18, 32782, 4, NULL, S_RIPPERX2, 0, 0}, // S_RIPPERX1
+ {SPR_FX18, 32783, 4, NULL, S_RIPPERX3, 0, 0}, // S_RIPPERX2
+ {SPR_FX18, 32784, 4, NULL, S_RIPPERX4, 0, 0}, // S_RIPPERX3
+ {SPR_FX18, 32785, 4, NULL, S_RIPPERX5, 0, 0}, // S_RIPPERX4
+ {SPR_FX18, 32786, 4, NULL, S_NULL, 0, 0}, // S_RIPPERX5
+ {SPR_FX17, 32768, 4, NULL, S_BLASTERPUFF1_2, 0, 0}, // S_BLASTERPUFF1_1
+ {SPR_FX17, 32769, 4, NULL, S_BLASTERPUFF1_3, 0, 0}, // S_BLASTERPUFF1_2
+ {SPR_FX17, 32770, 4, NULL, S_BLASTERPUFF1_4, 0, 0}, // S_BLASTERPUFF1_3
+ {SPR_FX17, 32771, 4, NULL, S_BLASTERPUFF1_5, 0, 0}, // S_BLASTERPUFF1_4
+ {SPR_FX17, 32772, 4, NULL, S_NULL, 0, 0}, // S_BLASTERPUFF1_5
+ {SPR_FX17, 32773, 3, NULL, S_BLASTERPUFF2_2, 0, 0}, // S_BLASTERPUFF2_1
+ {SPR_FX17, 32774, 3, NULL, S_BLASTERPUFF2_3, 0, 0}, // S_BLASTERPUFF2_2
+ {SPR_FX17, 32775, 4, NULL, S_BLASTERPUFF2_4, 0, 0}, // S_BLASTERPUFF2_3
+ {SPR_FX17, 32776, 4, NULL, S_BLASTERPUFF2_5, 0, 0}, // S_BLASTERPUFF2_4
+ {SPR_FX17, 32777, 4, NULL, S_BLASTERPUFF2_6, 0, 0}, // S_BLASTERPUFF2_5
+ {SPR_FX17, 32778, 4, NULL, S_BLASTERPUFF2_7, 0, 0}, // S_BLASTERPUFF2_6
+ {SPR_FX17, 32779, 4, NULL, S_NULL, 0, 0}, // S_BLASTERPUFF2_7
+ {SPR_WMCE, 0, -1, NULL, S_NULL, 0, 0}, // S_WMCE
+ {SPR_MACE, 0, 1, A_WeaponReady, S_MACEREADY, 0, 0}, // S_MACEREADY
+ {SPR_MACE, 0, 1, A_Lower, S_MACEDOWN, 0, 0}, // S_MACEDOWN
+ {SPR_MACE, 0, 1, A_Raise, S_MACEUP, 0, 0}, // S_MACEUP
+ {SPR_MACE, 1, 4, NULL, S_MACEATK1_2, 0, 0}, // S_MACEATK1_1
+ {SPR_MACE, 2, 3, A_FireMacePL1, S_MACEATK1_3, 0, 0}, // S_MACEATK1_2
+ {SPR_MACE, 3, 3, A_FireMacePL1, S_MACEATK1_4, 0, 0}, // S_MACEATK1_3
+ {SPR_MACE, 4, 3, A_FireMacePL1, S_MACEATK1_5, 0, 0}, // S_MACEATK1_4
+ {SPR_MACE, 5, 3, A_FireMacePL1, S_MACEATK1_6, 0, 0}, // S_MACEATK1_5
+ {SPR_MACE, 2, 4, A_ReFire, S_MACEATK1_7, 0, 0}, // S_MACEATK1_6
+ {SPR_MACE, 3, 4, NULL, S_MACEATK1_8, 0, 0}, // S_MACEATK1_7
+ {SPR_MACE, 4, 4, NULL, S_MACEATK1_9, 0, 0}, // S_MACEATK1_8
+ {SPR_MACE, 5, 4, NULL, S_MACEATK1_10, 0, 0}, // S_MACEATK1_9
+ {SPR_MACE, 1, 4, NULL, S_MACEREADY, 0, 0}, // S_MACEATK1_10
+ {SPR_MACE, 1, 4, NULL, S_MACEATK2_2, 0, 0}, // S_MACEATK2_1
+ {SPR_MACE, 3, 4, A_FireMacePL2, S_MACEATK2_3, 0, 0}, // S_MACEATK2_2
+ {SPR_MACE, 1, 4, NULL, S_MACEATK2_4, 0, 0}, // S_MACEATK2_3
+ {SPR_MACE, 0, 8, A_ReFire, S_MACEREADY, 0, 0}, // S_MACEATK2_4
+ {SPR_FX02, 0, 4, A_MacePL1Check, S_MACEFX1_2, 0, 0}, // S_MACEFX1_1
+ {SPR_FX02, 1, 4, A_MacePL1Check, S_MACEFX1_1, 0, 0}, // S_MACEFX1_2
+ {SPR_FX02, 32773, 4, A_MaceBallImpact, S_MACEFXI1_2, 0, 0}, // S_MACEFXI1_1
+ {SPR_FX02, 32774, 4, NULL, S_MACEFXI1_3, 0, 0}, // S_MACEFXI1_2
+ {SPR_FX02, 32775, 4, NULL, S_MACEFXI1_4, 0, 0}, // S_MACEFXI1_3
+ {SPR_FX02, 32776, 4, NULL, S_MACEFXI1_5, 0, 0}, // S_MACEFXI1_4
+ {SPR_FX02, 32777, 4, NULL, S_NULL, 0, 0}, // S_MACEFXI1_5
+ {SPR_FX02, 2, 4, NULL, S_MACEFX2_2, 0, 0}, // S_MACEFX2_1
+ {SPR_FX02, 3, 4, NULL, S_MACEFX2_1, 0, 0}, // S_MACEFX2_2
+ {SPR_FX02, 32773, 4, A_MaceBallImpact2, S_MACEFXI1_2, 0, 0}, // S_MACEFXI2_1
+ {SPR_FX02, 0, 4, NULL, S_MACEFX3_2, 0, 0}, // S_MACEFX3_1
+ {SPR_FX02, 1, 4, NULL, S_MACEFX3_1, 0, 0}, // S_MACEFX3_2
+ {SPR_FX02, 4, 99, NULL, S_MACEFX4_1, 0, 0}, // S_MACEFX4_1
+ {SPR_FX02, 32770, 4, A_DeathBallImpact, S_MACEFXI1_2, 0, 0}, // S_MACEFXI4_1
+ {SPR_WSKL, 0, -1, NULL, S_NULL, 0, 0}, // S_WSKL
+ {SPR_HROD, 0, 1, A_WeaponReady, S_HORNRODREADY, 0, 0}, // S_HORNRODREADY
+ {SPR_HROD, 0, 1, A_Lower, S_HORNRODDOWN, 0, 0}, // S_HORNRODDOWN
+ {SPR_HROD, 0, 1, A_Raise, S_HORNRODUP, 0, 0}, // S_HORNRODUP
+ {SPR_HROD, 0, 4, A_FireSkullRodPL1, S_HORNRODATK1_2, 0, 0}, // S_HORNRODATK1_1
+ {SPR_HROD, 1, 4, A_FireSkullRodPL1, S_HORNRODATK1_3, 0, 0}, // S_HORNRODATK1_2
+ {SPR_HROD, 1, 0, A_ReFire, S_HORNRODREADY, 0, 0}, // S_HORNRODATK1_3
+ {SPR_HROD, 2, 2, NULL, S_HORNRODATK2_2, 0, 0}, // S_HORNRODATK2_1
+ {SPR_HROD, 3, 3, NULL, S_HORNRODATK2_3, 0, 0}, // S_HORNRODATK2_2
+ {SPR_HROD, 4, 2, NULL, S_HORNRODATK2_4, 0, 0}, // S_HORNRODATK2_3
+ {SPR_HROD, 5, 3, NULL, S_HORNRODATK2_5, 0, 0}, // S_HORNRODATK2_4
+ {SPR_HROD, 6, 4, A_FireSkullRodPL2, S_HORNRODATK2_6, 0, 0}, // S_HORNRODATK2_5
+ {SPR_HROD, 5, 2, NULL, S_HORNRODATK2_7, 0, 0}, // S_HORNRODATK2_6
+ {SPR_HROD, 4, 3, NULL, S_HORNRODATK2_8, 0, 0}, // S_HORNRODATK2_7
+ {SPR_HROD, 3, 2, NULL, S_HORNRODATK2_9, 0, 0}, // S_HORNRODATK2_8
+ {SPR_HROD, 2, 2, A_ReFire, S_HORNRODREADY, 0, 0}, // S_HORNRODATK2_9
+ {SPR_FX00, 32768, 6, NULL, S_HRODFX1_2, 0, 0}, // S_HRODFX1_1
+ {SPR_FX00, 32769, 6, NULL, S_HRODFX1_1, 0, 0}, // S_HRODFX1_2
+ {SPR_FX00, 32775, 5, NULL, S_HRODFXI1_2, 0, 0}, // S_HRODFXI1_1
+ {SPR_FX00, 32776, 5, NULL, S_HRODFXI1_3, 0, 0}, // S_HRODFXI1_2
+ {SPR_FX00, 32777, 4, NULL, S_HRODFXI1_4, 0, 0}, // S_HRODFXI1_3
+ {SPR_FX00, 32778, 4, NULL, S_HRODFXI1_5, 0, 0}, // S_HRODFXI1_4
+ {SPR_FX00, 32779, 3, NULL, S_HRODFXI1_6, 0, 0}, // S_HRODFXI1_5
+ {SPR_FX00, 32780, 3, NULL, S_NULL, 0, 0}, // S_HRODFXI1_6
+ {SPR_FX00, 32770, 3, NULL, S_HRODFX2_2, 0, 0}, // S_HRODFX2_1
+ {SPR_FX00, 32771, 3, A_SkullRodPL2Seek, S_HRODFX2_3, 0, 0}, // S_HRODFX2_2
+ {SPR_FX00, 32772, 3, NULL, S_HRODFX2_4, 0, 0}, // S_HRODFX2_3
+ {SPR_FX00, 32773, 3, A_SkullRodPL2Seek, S_HRODFX2_1, 0, 0}, // S_HRODFX2_4
+ {SPR_FX00, 32775, 5, A_AddPlayerRain, S_HRODFXI2_2, 0, 0}, // S_HRODFXI2_1
+ {SPR_FX00, 32776, 5, NULL, S_HRODFXI2_3, 0, 0}, // S_HRODFXI2_2
+ {SPR_FX00, 32777, 4, NULL, S_HRODFXI2_4, 0, 0}, // S_HRODFXI2_3
+ {SPR_FX00, 32778, 3, NULL, S_HRODFXI2_5, 0, 0}, // S_HRODFXI2_4
+ {SPR_FX00, 32779, 3, NULL, S_HRODFXI2_6, 0, 0}, // S_HRODFXI2_5
+ {SPR_FX00, 32780, 3, NULL, S_HRODFXI2_7, 0, 0}, // S_HRODFXI2_6
+ {SPR_FX00, 6, 1, A_HideInCeiling, S_HRODFXI2_8, 0, 0}, // S_HRODFXI2_7
+ {SPR_FX00, 6, 1, A_SkullRodStorm, S_HRODFXI2_8, 0, 0}, // S_HRODFXI2_8
+ {SPR_FX20, 32768, -1, NULL, S_NULL, 0, 0}, // S_RAINPLR1_1
+ {SPR_FX21, 32768, -1, NULL, S_NULL, 0, 0}, // S_RAINPLR2_1
+ {SPR_FX22, 32768, -1, NULL, S_NULL, 0, 0}, // S_RAINPLR3_1
+ {SPR_FX23, 32768, -1, NULL, S_NULL, 0, 0}, // S_RAINPLR4_1
+ {SPR_FX20, 32769, 4, A_RainImpact, S_RAINPLR1X_2, 0, 0}, // S_RAINPLR1X_1
+ {SPR_FX20, 32770, 4, NULL, S_RAINPLR1X_3, 0, 0}, // S_RAINPLR1X_2
+ {SPR_FX20, 32771, 4, NULL, S_RAINPLR1X_4, 0, 0}, // S_RAINPLR1X_3
+ {SPR_FX20, 32772, 4, NULL, S_RAINPLR1X_5, 0, 0}, // S_RAINPLR1X_4
+ {SPR_FX20, 32773, 4, NULL, S_NULL, 0, 0}, // S_RAINPLR1X_5
+ {SPR_FX21, 32769, 4, A_RainImpact, S_RAINPLR2X_2, 0, 0}, // S_RAINPLR2X_1
+ {SPR_FX21, 32770, 4, NULL, S_RAINPLR2X_3, 0, 0}, // S_RAINPLR2X_2
+ {SPR_FX21, 32771, 4, NULL, S_RAINPLR2X_4, 0, 0}, // S_RAINPLR2X_3
+ {SPR_FX21, 32772, 4, NULL, S_RAINPLR2X_5, 0, 0}, // S_RAINPLR2X_4
+ {SPR_FX21, 32773, 4, NULL, S_NULL, 0, 0}, // S_RAINPLR2X_5
+ {SPR_FX22, 32769, 4, A_RainImpact, S_RAINPLR3X_2, 0, 0}, // S_RAINPLR3X_1
+ {SPR_FX22, 32770, 4, NULL, S_RAINPLR3X_3, 0, 0}, // S_RAINPLR3X_2
+ {SPR_FX22, 32771, 4, NULL, S_RAINPLR3X_4, 0, 0}, // S_RAINPLR3X_3
+ {SPR_FX22, 32772, 4, NULL, S_RAINPLR3X_5, 0, 0}, // S_RAINPLR3X_4
+ {SPR_FX22, 32773, 4, NULL, S_NULL, 0, 0}, // S_RAINPLR3X_5
+ {SPR_FX23, 32769, 4, A_RainImpact, S_RAINPLR4X_2, 0, 0}, // S_RAINPLR4X_1
+ {SPR_FX23, 32770, 4, NULL, S_RAINPLR4X_3, 0, 0}, // S_RAINPLR4X_2
+ {SPR_FX23, 32771, 4, NULL, S_RAINPLR4X_4, 0, 0}, // S_RAINPLR4X_3
+ {SPR_FX23, 32772, 4, NULL, S_RAINPLR4X_5, 0, 0}, // S_RAINPLR4X_4
+ {SPR_FX23, 32773, 4, NULL, S_NULL, 0, 0}, // S_RAINPLR4X_5
+ {SPR_FX20, 32774, 4, NULL, S_RAINAIRXPLR1_2, 0, 0}, // S_RAINAIRXPLR1_1
+ {SPR_FX21, 32774, 4, NULL, S_RAINAIRXPLR2_2, 0, 0}, // S_RAINAIRXPLR2_1
+ {SPR_FX22, 32774, 4, NULL, S_RAINAIRXPLR3_2, 0, 0}, // S_RAINAIRXPLR3_1
+ {SPR_FX23, 32774, 4, NULL, S_RAINAIRXPLR4_2, 0, 0}, // S_RAINAIRXPLR4_1
+ {SPR_FX20, 32775, 4, NULL, S_RAINAIRXPLR1_3, 0, 0}, // S_RAINAIRXPLR1_2
+ {SPR_FX21, 32775, 4, NULL, S_RAINAIRXPLR2_3, 0, 0}, // S_RAINAIRXPLR2_2
+ {SPR_FX22, 32775, 4, NULL, S_RAINAIRXPLR3_3, 0, 0}, // S_RAINAIRXPLR3_2
+ {SPR_FX23, 32775, 4, NULL, S_RAINAIRXPLR4_3, 0, 0}, // S_RAINAIRXPLR4_2
+ {SPR_FX20, 32776, 4, NULL, S_NULL, 0, 0}, // S_RAINAIRXPLR1_3
+ {SPR_FX21, 32776, 4, NULL, S_NULL, 0, 0}, // S_RAINAIRXPLR2_3
+ {SPR_FX22, 32776, 4, NULL, S_NULL, 0, 0}, // S_RAINAIRXPLR3_3
+ {SPR_FX23, 32776, 4, NULL, S_NULL, 0, 0}, // S_RAINAIRXPLR4_3
+ {SPR_GWND, 0, 1, A_WeaponReady, S_GOLDWANDREADY, 0, 0}, // S_GOLDWANDREADY
+ {SPR_GWND, 0, 1, A_Lower, S_GOLDWANDDOWN, 0, 0}, // S_GOLDWANDDOWN
+ {SPR_GWND, 0, 1, A_Raise, S_GOLDWANDUP, 0, 0}, // S_GOLDWANDUP
+ {SPR_GWND, 1, 3, NULL, S_GOLDWANDATK1_2, 0, 0}, // S_GOLDWANDATK1_1
+ {SPR_GWND, 2, 5, A_FireGoldWandPL1, S_GOLDWANDATK1_3, 0, 0}, // S_GOLDWANDATK1_2
+ {SPR_GWND, 3, 3, NULL, S_GOLDWANDATK1_4, 0, 0}, // S_GOLDWANDATK1_3
+ {SPR_GWND, 3, 0, A_ReFire, S_GOLDWANDREADY, 0, 0}, // S_GOLDWANDATK1_4
+ {SPR_GWND, 1, 3, NULL, S_GOLDWANDATK2_2, 0, 0}, // S_GOLDWANDATK2_1
+ {SPR_GWND, 2, 4, A_FireGoldWandPL2, S_GOLDWANDATK2_3, 0, 0}, // S_GOLDWANDATK2_2
+ {SPR_GWND, 3, 3, NULL, S_GOLDWANDATK2_4, 0, 0}, // S_GOLDWANDATK2_3
+ {SPR_GWND, 3, 0, A_ReFire, S_GOLDWANDREADY, 0, 0}, // S_GOLDWANDATK2_4
+ {SPR_FX01, 32768, 6, NULL, S_GWANDFX1_2, 0, 0}, // S_GWANDFX1_1
+ {SPR_FX01, 32769, 6, NULL, S_GWANDFX1_1, 0, 0}, // S_GWANDFX1_2
+ {SPR_FX01, 32772, 3, NULL, S_GWANDFXI1_2, 0, 0}, // S_GWANDFXI1_1
+ {SPR_FX01, 32773, 3, NULL, S_GWANDFXI1_3, 0, 0}, // S_GWANDFXI1_2
+ {SPR_FX01, 32774, 3, NULL, S_GWANDFXI1_4, 0, 0}, // S_GWANDFXI1_3
+ {SPR_FX01, 32775, 3, NULL, S_NULL, 0, 0}, // S_GWANDFXI1_4
+ {SPR_FX01, 32770, 6, NULL, S_GWANDFX2_2, 0, 0}, // S_GWANDFX2_1
+ {SPR_FX01, 32771, 6, NULL, S_GWANDFX2_1, 0, 0}, // S_GWANDFX2_2
+ {SPR_PUF2, 32768, 3, NULL, S_GWANDPUFF1_2, 0, 0}, // S_GWANDPUFF1_1
+ {SPR_PUF2, 32769, 3, NULL, S_GWANDPUFF1_3, 0, 0}, // S_GWANDPUFF1_2
+ {SPR_PUF2, 32770, 3, NULL, S_GWANDPUFF1_4, 0, 0}, // S_GWANDPUFF1_3
+ {SPR_PUF2, 32771, 3, NULL, S_GWANDPUFF1_5, 0, 0}, // S_GWANDPUFF1_4
+ {SPR_PUF2, 32772, 3, NULL, S_NULL, 0, 0}, // S_GWANDPUFF1_5
+ {SPR_WPHX, 0, -1, NULL, S_NULL, 0, 0}, // S_WPHX
+ {SPR_PHNX, 0, 1, A_WeaponReady, S_PHOENIXREADY, 0, 0}, // S_PHOENIXREADY
+ {SPR_PHNX, 0, 1, A_Lower, S_PHOENIXDOWN, 0, 0}, // S_PHOENIXDOWN
+ {SPR_PHNX, 0, 1, A_Raise, S_PHOENIXUP, 0, 0}, // S_PHOENIXUP
+ {SPR_PHNX, 1, 5, NULL, S_PHOENIXATK1_2, 0, 0}, // S_PHOENIXATK1_1
+ {SPR_PHNX, 2, 7, A_FirePhoenixPL1, S_PHOENIXATK1_3, 0, 0}, // S_PHOENIXATK1_2
+ {SPR_PHNX, 3, 4, NULL, S_PHOENIXATK1_4, 0, 0}, // S_PHOENIXATK1_3
+ {SPR_PHNX, 1, 4, NULL, S_PHOENIXATK1_5, 0, 0}, // S_PHOENIXATK1_4
+ {SPR_PHNX, 1, 0, A_ReFire, S_PHOENIXREADY, 0, 0}, // S_PHOENIXATK1_5
+ {SPR_PHNX, 1, 3, A_InitPhoenixPL2, S_PHOENIXATK2_2, 0, 0}, // S_PHOENIXATK2_1
+ {SPR_PHNX, 32770, 1, A_FirePhoenixPL2, S_PHOENIXATK2_3, 0, 0}, // S_PHOENIXATK2_2
+ {SPR_PHNX, 1, 4, A_ReFire, S_PHOENIXATK2_4, 0, 0}, // S_PHOENIXATK2_3
+ {SPR_PHNX, 1, 4, A_ShutdownPhoenixPL2, S_PHOENIXREADY, 0, 0}, // S_PHOENIXATK2_4
+ {SPR_FX04, 32768, 4, A_PhoenixPuff, S_PHOENIXFX1_1, 0, 0}, // S_PHOENIXFX1_1
+ {SPR_FX08, 32768, 6, A_Explode, S_PHOENIXFXI1_2, 0, 0}, // S_PHOENIXFXI1_1
+ {SPR_FX08, 32769, 5, NULL, S_PHOENIXFXI1_3, 0, 0}, // S_PHOENIXFXI1_2
+ {SPR_FX08, 32770, 5, NULL, S_PHOENIXFXI1_4, 0, 0}, // S_PHOENIXFXI1_3
+ {SPR_FX08, 32771, 4, NULL, S_PHOENIXFXI1_5, 0, 0}, // S_PHOENIXFXI1_4
+ {SPR_FX08, 32772, 4, NULL, S_PHOENIXFXI1_6, 0, 0}, // S_PHOENIXFXI1_5
+ {SPR_FX08, 32773, 4, NULL, S_PHOENIXFXI1_7, 0, 0}, // S_PHOENIXFXI1_6
+ {SPR_FX08, 32774, 4, NULL, S_PHOENIXFXI1_8, 0, 0}, // S_PHOENIXFXI1_7
+ {SPR_FX08, 32775, 4, NULL, S_NULL, 0, 0}, // S_PHOENIXFXI1_8
+ {SPR_FX04, 1, 4, NULL, S_PHOENIXPUFF2, 0, 0}, // S_PHOENIXPUFF1
+ {SPR_FX04, 2, 4, NULL, S_PHOENIXPUFF3, 0, 0}, // S_PHOENIXPUFF2
+ {SPR_FX04, 3, 4, NULL, S_PHOENIXPUFF4, 0, 0}, // S_PHOENIXPUFF3
+ {SPR_FX04, 4, 4, NULL, S_PHOENIXPUFF5, 0, 0}, // S_PHOENIXPUFF4
+ {SPR_FX04, 5, 4, NULL, S_NULL, 0, 0}, // S_PHOENIXPUFF5
+ {SPR_FX09, 32768, 2, NULL, S_PHOENIXFX2_2, 0, 0}, // S_PHOENIXFX2_1
+ {SPR_FX09, 32769, 2, NULL, S_PHOENIXFX2_3, 0, 0}, // S_PHOENIXFX2_2
+ {SPR_FX09, 32768, 2, NULL, S_PHOENIXFX2_4, 0, 0}, // S_PHOENIXFX2_3
+ {SPR_FX09, 32769, 2, NULL, S_PHOENIXFX2_5, 0, 0}, // S_PHOENIXFX2_4
+ {SPR_FX09, 32768, 2, NULL, S_PHOENIXFX2_6, 0, 0}, // S_PHOENIXFX2_5
+ {SPR_FX09, 32769, 2, A_FlameEnd, S_PHOENIXFX2_7, 0, 0}, // S_PHOENIXFX2_6
+ {SPR_FX09, 32770, 2, NULL, S_PHOENIXFX2_8, 0, 0}, // S_PHOENIXFX2_7
+ {SPR_FX09, 32771, 2, NULL, S_PHOENIXFX2_9, 0, 0}, // S_PHOENIXFX2_8
+ {SPR_FX09, 32772, 2, NULL, S_PHOENIXFX2_10, 0, 0}, // S_PHOENIXFX2_9
+ {SPR_FX09, 32773, 2, NULL, S_NULL, 0, 0}, // S_PHOENIXFX2_10
+ {SPR_FX09, 32774, 3, NULL, S_PHOENIXFXI2_2, 0, 0}, // S_PHOENIXFXI2_1
+ {SPR_FX09, 32775, 3, A_FloatPuff, S_PHOENIXFXI2_3, 0, 0}, // S_PHOENIXFXI2_2
+ {SPR_FX09, 32776, 4, NULL, S_PHOENIXFXI2_4, 0, 0}, // S_PHOENIXFXI2_3
+ {SPR_FX09, 32777, 5, NULL, S_PHOENIXFXI2_5, 0, 0}, // S_PHOENIXFXI2_4
+ {SPR_FX09, 32778, 5, NULL, S_NULL, 0, 0}, // S_PHOENIXFXI2_5
+ {SPR_WBOW, 0, -1, NULL, S_NULL, 0, 0}, // S_WBOW
+ {SPR_CRBW, 0, 1, A_WeaponReady, S_CRBOW2, 0, 0}, // S_CRBOW1
+ {SPR_CRBW, 0, 1, A_WeaponReady, S_CRBOW3, 0, 0}, // S_CRBOW2
+ {SPR_CRBW, 0, 1, A_WeaponReady, S_CRBOW4, 0, 0}, // S_CRBOW3
+ {SPR_CRBW, 0, 1, A_WeaponReady, S_CRBOW5, 0, 0}, // S_CRBOW4
+ {SPR_CRBW, 0, 1, A_WeaponReady, S_CRBOW6, 0, 0}, // S_CRBOW5
+ {SPR_CRBW, 0, 1, A_WeaponReady, S_CRBOW7, 0, 0}, // S_CRBOW6
+ {SPR_CRBW, 1, 1, A_WeaponReady, S_CRBOW8, 0, 0}, // S_CRBOW7
+ {SPR_CRBW, 1, 1, A_WeaponReady, S_CRBOW9, 0, 0}, // S_CRBOW8
+ {SPR_CRBW, 1, 1, A_WeaponReady, S_CRBOW10, 0, 0}, // S_CRBOW9
+ {SPR_CRBW, 1, 1, A_WeaponReady, S_CRBOW11, 0, 0}, // S_CRBOW10
+ {SPR_CRBW, 1, 1, A_WeaponReady, S_CRBOW12, 0, 0}, // S_CRBOW11
+ {SPR_CRBW, 1, 1, A_WeaponReady, S_CRBOW13, 0, 0}, // S_CRBOW12
+ {SPR_CRBW, 2, 1, A_WeaponReady, S_CRBOW14, 0, 0}, // S_CRBOW13
+ {SPR_CRBW, 2, 1, A_WeaponReady, S_CRBOW15, 0, 0}, // S_CRBOW14
+ {SPR_CRBW, 2, 1, A_WeaponReady, S_CRBOW16, 0, 0}, // S_CRBOW15
+ {SPR_CRBW, 2, 1, A_WeaponReady, S_CRBOW17, 0, 0}, // S_CRBOW16
+ {SPR_CRBW, 2, 1, A_WeaponReady, S_CRBOW18, 0, 0}, // S_CRBOW17
+ {SPR_CRBW, 2, 1, A_WeaponReady, S_CRBOW1, 0, 0}, // S_CRBOW18
+ {SPR_CRBW, 0, 1, A_Lower, S_CRBOWDOWN, 0, 0}, // S_CRBOWDOWN
+ {SPR_CRBW, 0, 1, A_Raise, S_CRBOWUP, 0, 0}, // S_CRBOWUP
+ {SPR_CRBW, 3, 6, A_FireCrossbowPL1, S_CRBOWATK1_2, 0, 0}, // S_CRBOWATK1_1
+ {SPR_CRBW, 4, 3, NULL, S_CRBOWATK1_3, 0, 0}, // S_CRBOWATK1_2
+ {SPR_CRBW, 5, 3, NULL, S_CRBOWATK1_4, 0, 0}, // S_CRBOWATK1_3
+ {SPR_CRBW, 6, 3, NULL, S_CRBOWATK1_5, 0, 0}, // S_CRBOWATK1_4
+ {SPR_CRBW, 7, 3, NULL, S_CRBOWATK1_6, 0, 0}, // S_CRBOWATK1_5
+ {SPR_CRBW, 0, 4, NULL, S_CRBOWATK1_7, 0, 0}, // S_CRBOWATK1_6
+ {SPR_CRBW, 1, 4, NULL, S_CRBOWATK1_8, 0, 0}, // S_CRBOWATK1_7
+ {SPR_CRBW, 2, 5, A_ReFire, S_CRBOW1, 0, 0}, // S_CRBOWATK1_8
+ {SPR_CRBW, 3, 5, A_FireCrossbowPL2, S_CRBOWATK2_2, 0, 0}, // S_CRBOWATK2_1
+ {SPR_CRBW, 4, 3, NULL, S_CRBOWATK2_3, 0, 0}, // S_CRBOWATK2_2
+ {SPR_CRBW, 5, 2, NULL, S_CRBOWATK2_4, 0, 0}, // S_CRBOWATK2_3
+ {SPR_CRBW, 6, 3, NULL, S_CRBOWATK2_5, 0, 0}, // S_CRBOWATK2_4
+ {SPR_CRBW, 7, 2, NULL, S_CRBOWATK2_6, 0, 0}, // S_CRBOWATK2_5
+ {SPR_CRBW, 0, 3, NULL, S_CRBOWATK2_7, 0, 0}, // S_CRBOWATK2_6
+ {SPR_CRBW, 1, 3, NULL, S_CRBOWATK2_8, 0, 0}, // S_CRBOWATK2_7
+ {SPR_CRBW, 2, 4, A_ReFire, S_CRBOW1, 0, 0}, // S_CRBOWATK2_8
+ {SPR_FX03, 32769, 1, NULL, S_CRBOWFX1, 0, 0}, // S_CRBOWFX1
+ {SPR_FX03, 32775, 8, NULL, S_CRBOWFXI1_2, 0, 0}, // S_CRBOWFXI1_1
+ {SPR_FX03, 32776, 8, NULL, S_CRBOWFXI1_3, 0, 0}, // S_CRBOWFXI1_2
+ {SPR_FX03, 32777, 8, NULL, S_NULL, 0, 0}, // S_CRBOWFXI1_3
+ {SPR_FX03, 32769, 1, A_BoltSpark, S_CRBOWFX2, 0, 0}, // S_CRBOWFX2
+ {SPR_FX03, 32768, 1, NULL, S_CRBOWFX3, 0, 0}, // S_CRBOWFX3
+ {SPR_FX03, 32770, 8, NULL, S_CRBOWFXI3_2, 0, 0}, // S_CRBOWFXI3_1
+ {SPR_FX03, 32771, 8, NULL, S_CRBOWFXI3_3, 0, 0}, // S_CRBOWFXI3_2
+ {SPR_FX03, 32772, 8, NULL, S_NULL, 0, 0}, // S_CRBOWFXI3_3
+ {SPR_FX03, 32773, 8, NULL, S_CRBOWFX4_2, 0, 0}, // S_CRBOWFX4_1
+ {SPR_FX03, 32774, 8, NULL, S_NULL, 0, 0}, // S_CRBOWFX4_2
+ {SPR_BLOD, 2, 8, NULL, S_BLOOD2, 0, 0}, // S_BLOOD1
+ {SPR_BLOD, 1, 8, NULL, S_BLOOD3, 0, 0}, // S_BLOOD2
+ {SPR_BLOD, 0, 8, NULL, S_NULL, 0, 0}, // S_BLOOD3
+ {SPR_BLOD, 2, 8, NULL, S_BLOODSPLATTER2, 0, 0}, // S_BLOODSPLATTER1
+ {SPR_BLOD, 1, 8, NULL, S_BLOODSPLATTER3, 0, 0}, // S_BLOODSPLATTER2
+ {SPR_BLOD, 0, 8, NULL, S_NULL, 0, 0}, // S_BLOODSPLATTER3
+ {SPR_BLOD, 0, 6, NULL, S_NULL, 0, 0}, // S_BLOODSPLATTERX
+ {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, 6, NULL, S_PLAY_DIE2, 0, 0}, // S_PLAY_DIE1
+ {SPR_PLAY, 8, 6, A_Scream, S_PLAY_DIE3, 0, 0}, // S_PLAY_DIE2
+ {SPR_PLAY, 9, 6, NULL, S_PLAY_DIE4, 0, 0}, // S_PLAY_DIE3
+ {SPR_PLAY, 10, 6, NULL, S_PLAY_DIE5, 0, 0}, // S_PLAY_DIE4
+ {SPR_PLAY, 11, 6, A_NoBlocking, S_PLAY_DIE6, 0, 0}, // S_PLAY_DIE5
+ {SPR_PLAY, 12, 6, NULL, S_PLAY_DIE7, 0, 0}, // S_PLAY_DIE6
+ {SPR_PLAY, 13, 6, NULL, S_PLAY_DIE8, 0, 0}, // S_PLAY_DIE7
+ {SPR_PLAY, 14, 6, NULL, S_PLAY_DIE9, 0, 0}, // S_PLAY_DIE8
+ {SPR_PLAY, 15, -1, A_AddPlayerCorpse, S_NULL, 0, 0}, // S_PLAY_DIE9
+ {SPR_PLAY, 16, 5, A_Scream, S_PLAY_XDIE2, 0, 0}, // S_PLAY_XDIE1
+ {SPR_PLAY, 17, 5, A_SkullPop, S_PLAY_XDIE3, 0, 0}, // S_PLAY_XDIE2
+ {SPR_PLAY, 18, 5, A_NoBlocking, S_PLAY_XDIE4, 0, 0}, // S_PLAY_XDIE3
+ {SPR_PLAY, 19, 5, NULL, S_PLAY_XDIE5, 0, 0}, // S_PLAY_XDIE4
+ {SPR_PLAY, 20, 5, NULL, S_PLAY_XDIE6, 0, 0}, // S_PLAY_XDIE5
+ {SPR_PLAY, 21, 5, NULL, S_PLAY_XDIE7, 0, 0}, // S_PLAY_XDIE6
+ {SPR_PLAY, 22, 5, NULL, S_PLAY_XDIE8, 0, 0}, // S_PLAY_XDIE7
+ {SPR_PLAY, 23, 5, NULL, S_PLAY_XDIE9, 0, 0}, // S_PLAY_XDIE8
+ {SPR_PLAY, 24, -1, A_AddPlayerCorpse, S_NULL, 0, 0}, // S_PLAY_XDIE9
+ {SPR_FDTH, 32768, 5, A_FlameSnd, S_PLAY_FDTH2, 0, 0}, // S_PLAY_FDTH1
+ {SPR_FDTH, 32769, 4, NULL, S_PLAY_FDTH3, 0, 0}, // S_PLAY_FDTH2
+ {SPR_FDTH, 32770, 5, NULL, S_PLAY_FDTH4, 0, 0}, // S_PLAY_FDTH3
+ {SPR_FDTH, 32771, 4, A_Scream, S_PLAY_FDTH5, 0, 0}, // S_PLAY_FDTH4
+ {SPR_FDTH, 32772, 5, NULL, S_PLAY_FDTH6, 0, 0}, // S_PLAY_FDTH5
+ {SPR_FDTH, 32773, 4, NULL, S_PLAY_FDTH7, 0, 0}, // S_PLAY_FDTH6
+ {SPR_FDTH, 32774, 5, A_FlameSnd, S_PLAY_FDTH8, 0, 0}, // S_PLAY_FDTH7
+ {SPR_FDTH, 32775, 4, NULL, S_PLAY_FDTH9, 0, 0}, // S_PLAY_FDTH8
+ {SPR_FDTH, 32776, 5, NULL, S_PLAY_FDTH10, 0, 0}, // S_PLAY_FDTH9
+ {SPR_FDTH, 32777, 4, NULL, S_PLAY_FDTH11, 0, 0}, // S_PLAY_FDTH10
+ {SPR_FDTH, 32778, 5, NULL, S_PLAY_FDTH12, 0, 0}, // S_PLAY_FDTH11
+ {SPR_FDTH, 32779, 4, NULL, S_PLAY_FDTH13, 0, 0}, // S_PLAY_FDTH12
+ {SPR_FDTH, 32780, 5, NULL, S_PLAY_FDTH14, 0, 0}, // S_PLAY_FDTH13
+ {SPR_FDTH, 32781, 4, NULL, S_PLAY_FDTH15, 0, 0}, // S_PLAY_FDTH14
+ {SPR_FDTH, 32782, 5, A_NoBlocking, S_PLAY_FDTH16, 0, 0}, // S_PLAY_FDTH15
+ {SPR_FDTH, 32783, 4, NULL, S_PLAY_FDTH17, 0, 0}, // S_PLAY_FDTH16
+ {SPR_FDTH, 32784, 5, NULL, S_PLAY_FDTH18, 0, 0}, // S_PLAY_FDTH17
+ {SPR_FDTH, 32785, 4, NULL, S_PLAY_FDTH19, 0, 0}, // S_PLAY_FDTH18
+ {SPR_ACLO, 4, 35, A_CheckBurnGone, S_PLAY_FDTH19, 0, 0}, // S_PLAY_FDTH19
+ {SPR_ACLO, 4, 8, NULL, S_NULL, 0, 0}, // S_PLAY_FDTH20
+ {SPR_BSKL, 0, 5, A_CheckSkullFloor, S_BLOODYSKULL2, 0, 0}, // S_BLOODYSKULL1
+ {SPR_BSKL, 1, 5, A_CheckSkullFloor, S_BLOODYSKULL3, 0, 0}, // S_BLOODYSKULL2
+ {SPR_BSKL, 2, 5, A_CheckSkullFloor, S_BLOODYSKULL4, 0, 0}, // S_BLOODYSKULL3
+ {SPR_BSKL, 3, 5, A_CheckSkullFloor, S_BLOODYSKULL5, 0, 0}, // S_BLOODYSKULL4
+ {SPR_BSKL, 4, 5, A_CheckSkullFloor, S_BLOODYSKULL1, 0, 0}, // S_BLOODYSKULL5
+ {SPR_BSKL, 5, 16, A_CheckSkullDone, S_BLOODYSKULLX1, 0, 0}, // S_BLOODYSKULLX1
+ {SPR_BSKL, 5, 1050, NULL, S_NULL, 0, 0}, // S_BLOODYSKULLX2
+ {SPR_CHKN, 0, -1, NULL, S_NULL, 0, 0}, // S_CHICPLAY
+ {SPR_CHKN, 0, 3, NULL, S_CHICPLAY_RUN2, 0, 0}, // S_CHICPLAY_RUN1
+ {SPR_CHKN, 1, 3, NULL, S_CHICPLAY_RUN3, 0, 0}, // S_CHICPLAY_RUN2
+ {SPR_CHKN, 0, 3, NULL, S_CHICPLAY_RUN4, 0, 0}, // S_CHICPLAY_RUN3
+ {SPR_CHKN, 1, 3, NULL, S_CHICPLAY_RUN1, 0, 0}, // S_CHICPLAY_RUN4
+ {SPR_CHKN, 2, 12, NULL, S_CHICPLAY, 0, 0}, // S_CHICPLAY_ATK1
+ {SPR_CHKN, 3, 4, A_Feathers, S_CHICPLAY_PAIN2, 0, 0}, // S_CHICPLAY_PAIN
+ {SPR_CHKN, 2, 4, A_Pain, S_CHICPLAY, 0, 0}, // S_CHICPLAY_PAIN2
+ {SPR_CHKN, 0, 10, A_ChicLook, S_CHICKEN_LOOK2, 0, 0}, // S_CHICKEN_LOOK1
+ {SPR_CHKN, 1, 10, A_ChicLook, S_CHICKEN_LOOK1, 0, 0}, // S_CHICKEN_LOOK2
+ {SPR_CHKN, 0, 3, A_ChicChase, S_CHICKEN_WALK2, 0, 0}, // S_CHICKEN_WALK1
+ {SPR_CHKN, 1, 3, A_ChicChase, S_CHICKEN_WALK1, 0, 0}, // S_CHICKEN_WALK2
+ {SPR_CHKN, 3, 5, A_Feathers, S_CHICKEN_PAIN2, 0, 0}, // S_CHICKEN_PAIN1
+ {SPR_CHKN, 2, 5, A_ChicPain, S_CHICKEN_WALK1, 0, 0}, // S_CHICKEN_PAIN2
+ {SPR_CHKN, 0, 8, A_FaceTarget, S_CHICKEN_ATK2, 0, 0}, // S_CHICKEN_ATK1
+ {SPR_CHKN, 2, 10, A_ChicAttack, S_CHICKEN_WALK1, 0, 0}, // S_CHICKEN_ATK2
+ {SPR_CHKN, 4, 6, A_Scream, S_CHICKEN_DIE2, 0, 0}, // S_CHICKEN_DIE1
+ {SPR_CHKN, 5, 6, A_Feathers, S_CHICKEN_DIE3, 0, 0}, // S_CHICKEN_DIE2
+ {SPR_CHKN, 6, 6, NULL, S_CHICKEN_DIE4, 0, 0}, // S_CHICKEN_DIE3
+ {SPR_CHKN, 7, 6, A_NoBlocking, S_CHICKEN_DIE5, 0, 0}, // S_CHICKEN_DIE4
+ {SPR_CHKN, 8, 6, NULL, S_CHICKEN_DIE6, 0, 0}, // S_CHICKEN_DIE5
+ {SPR_CHKN, 9, 6, NULL, S_CHICKEN_DIE7, 0, 0}, // S_CHICKEN_DIE6
+ {SPR_CHKN, 10, 6, NULL, S_CHICKEN_DIE8, 0, 0}, // S_CHICKEN_DIE7
+ {SPR_CHKN, 11, -1, NULL, S_NULL, 0, 0}, // S_CHICKEN_DIE8
+ {SPR_CHKN, 12, 3, NULL, S_FEATHER2, 0, 0}, // S_FEATHER1
+ {SPR_CHKN, 13, 3, NULL, S_FEATHER3, 0, 0}, // S_FEATHER2
+ {SPR_CHKN, 14, 3, NULL, S_FEATHER4, 0, 0}, // S_FEATHER3
+ {SPR_CHKN, 15, 3, NULL, S_FEATHER5, 0, 0}, // S_FEATHER4
+ {SPR_CHKN, 16, 3, NULL, S_FEATHER6, 0, 0}, // S_FEATHER5
+ {SPR_CHKN, 15, 3, NULL, S_FEATHER7, 0, 0}, // S_FEATHER6
+ {SPR_CHKN, 14, 3, NULL, S_FEATHER8, 0, 0}, // S_FEATHER7
+ {SPR_CHKN, 13, 3, NULL, S_FEATHER1, 0, 0}, // S_FEATHER8
+ {SPR_CHKN, 13, 6, NULL, S_NULL, 0, 0}, // S_FEATHERX
+ {SPR_MUMM, 0, 10, A_Look, S_MUMMY_LOOK2, 0, 0}, // S_MUMMY_LOOK1
+ {SPR_MUMM, 1, 10, A_Look, S_MUMMY_LOOK1, 0, 0}, // S_MUMMY_LOOK2
+ {SPR_MUMM, 0, 4, A_Chase, S_MUMMY_WALK2, 0, 0}, // S_MUMMY_WALK1
+ {SPR_MUMM, 1, 4, A_Chase, S_MUMMY_WALK3, 0, 0}, // S_MUMMY_WALK2
+ {SPR_MUMM, 2, 4, A_Chase, S_MUMMY_WALK4, 0, 0}, // S_MUMMY_WALK3
+ {SPR_MUMM, 3, 4, A_Chase, S_MUMMY_WALK1, 0, 0}, // S_MUMMY_WALK4
+ {SPR_MUMM, 4, 6, A_FaceTarget, S_MUMMY_ATK2, 0, 0}, // S_MUMMY_ATK1
+ {SPR_MUMM, 5, 6, A_MummyAttack, S_MUMMY_ATK3, 0, 0}, // S_MUMMY_ATK2
+ {SPR_MUMM, 6, 6, A_FaceTarget, S_MUMMY_WALK1, 0, 0}, // S_MUMMY_ATK3
+ {SPR_MUMM, 23, 5, A_FaceTarget, S_MUMMYL_ATK2, 0, 0}, // S_MUMMYL_ATK1
+ {SPR_MUMM, 32792, 5, A_FaceTarget, S_MUMMYL_ATK3, 0, 0}, // S_MUMMYL_ATK2
+ {SPR_MUMM, 23, 5, A_FaceTarget, S_MUMMYL_ATK4, 0, 0}, // S_MUMMYL_ATK3
+ {SPR_MUMM, 32792, 5, A_FaceTarget, S_MUMMYL_ATK5, 0, 0}, // S_MUMMYL_ATK4
+ {SPR_MUMM, 23, 5, A_FaceTarget, S_MUMMYL_ATK6, 0, 0}, // S_MUMMYL_ATK5
+ {SPR_MUMM, 32792, 15, A_MummyAttack2, S_MUMMY_WALK1, 0, 0}, // S_MUMMYL_ATK6
+ {SPR_MUMM, 7, 4, NULL, S_MUMMY_PAIN2, 0, 0}, // S_MUMMY_PAIN1
+ {SPR_MUMM, 7, 4, A_Pain, S_MUMMY_WALK1, 0, 0}, // S_MUMMY_PAIN2
+ {SPR_MUMM, 8, 5, NULL, S_MUMMY_DIE2, 0, 0}, // S_MUMMY_DIE1
+ {SPR_MUMM, 9, 5, A_Scream, S_MUMMY_DIE3, 0, 0}, // S_MUMMY_DIE2
+ {SPR_MUMM, 10, 5, A_MummySoul, S_MUMMY_DIE4, 0, 0}, // S_MUMMY_DIE3
+ {SPR_MUMM, 11, 5, NULL, S_MUMMY_DIE5, 0, 0}, // S_MUMMY_DIE4
+ {SPR_MUMM, 12, 5, A_NoBlocking, S_MUMMY_DIE6, 0, 0}, // S_MUMMY_DIE5
+ {SPR_MUMM, 13, 5, NULL, S_MUMMY_DIE7, 0, 0}, // S_MUMMY_DIE6
+ {SPR_MUMM, 14, 5, NULL, S_MUMMY_DIE8, 0, 0}, // S_MUMMY_DIE7
+ {SPR_MUMM, 15, -1, NULL, S_NULL, 0, 0}, // S_MUMMY_DIE8
+ {SPR_MUMM, 16, 5, NULL, S_MUMMY_SOUL2, 0, 0}, // S_MUMMY_SOUL1
+ {SPR_MUMM, 17, 5, NULL, S_MUMMY_SOUL3, 0, 0}, // S_MUMMY_SOUL2
+ {SPR_MUMM, 18, 5, NULL, S_MUMMY_SOUL4, 0, 0}, // S_MUMMY_SOUL3
+ {SPR_MUMM, 19, 9, NULL, S_MUMMY_SOUL5, 0, 0}, // S_MUMMY_SOUL4
+ {SPR_MUMM, 20, 5, NULL, S_MUMMY_SOUL6, 0, 0}, // S_MUMMY_SOUL5
+ {SPR_MUMM, 21, 5, NULL, S_MUMMY_SOUL7, 0, 0}, // S_MUMMY_SOUL6
+ {SPR_MUMM, 22, 5, NULL, S_NULL, 0, 0}, // S_MUMMY_SOUL7
+ {SPR_FX15, 32768, 5, A_ContMobjSound, S_MUMMYFX1_2, 0, 0}, // S_MUMMYFX1_1
+ {SPR_FX15, 32769, 5, A_MummyFX1Seek, S_MUMMYFX1_3, 0, 0}, // S_MUMMYFX1_2
+ {SPR_FX15, 32770, 5, NULL, S_MUMMYFX1_4, 0, 0}, // S_MUMMYFX1_3
+ {SPR_FX15, 32769, 5, A_MummyFX1Seek, S_MUMMYFX1_1, 0, 0}, // S_MUMMYFX1_4
+ {SPR_FX15, 32771, 5, NULL, S_MUMMYFXI1_2, 0, 0}, // S_MUMMYFXI1_1
+ {SPR_FX15, 32772, 5, NULL, S_MUMMYFXI1_3, 0, 0}, // S_MUMMYFXI1_2
+ {SPR_FX15, 32773, 5, NULL, S_MUMMYFXI1_4, 0, 0}, // S_MUMMYFXI1_3
+ {SPR_FX15, 32774, 5, NULL, S_NULL, 0, 0}, // S_MUMMYFXI1_4
+ {SPR_BEAS, 0, 10, A_Look, S_BEAST_LOOK2, 0, 0}, // S_BEAST_LOOK1
+ {SPR_BEAS, 1, 10, A_Look, S_BEAST_LOOK1, 0, 0}, // S_BEAST_LOOK2
+ {SPR_BEAS, 0, 3, A_Chase, S_BEAST_WALK2, 0, 0}, // S_BEAST_WALK1
+ {SPR_BEAS, 1, 3, A_Chase, S_BEAST_WALK3, 0, 0}, // S_BEAST_WALK2
+ {SPR_BEAS, 2, 3, A_Chase, S_BEAST_WALK4, 0, 0}, // S_BEAST_WALK3
+ {SPR_BEAS, 3, 3, A_Chase, S_BEAST_WALK5, 0, 0}, // S_BEAST_WALK4
+ {SPR_BEAS, 4, 3, A_Chase, S_BEAST_WALK6, 0, 0}, // S_BEAST_WALK5
+ {SPR_BEAS, 5, 3, A_Chase, S_BEAST_WALK1, 0, 0}, // S_BEAST_WALK6
+ {SPR_BEAS, 7, 10, A_FaceTarget, S_BEAST_ATK2, 0, 0}, // S_BEAST_ATK1
+ {SPR_BEAS, 8, 10, A_BeastAttack, S_BEAST_WALK1, 0, 0}, // S_BEAST_ATK2
+ {SPR_BEAS, 6, 3, NULL, S_BEAST_PAIN2, 0, 0}, // S_BEAST_PAIN1
+ {SPR_BEAS, 6, 3, A_Pain, S_BEAST_WALK1, 0, 0}, // S_BEAST_PAIN2
+ {SPR_BEAS, 17, 6, NULL, S_BEAST_DIE2, 0, 0}, // S_BEAST_DIE1
+ {SPR_BEAS, 18, 6, A_Scream, S_BEAST_DIE3, 0, 0}, // S_BEAST_DIE2
+ {SPR_BEAS, 19, 6, NULL, S_BEAST_DIE4, 0, 0}, // S_BEAST_DIE3
+ {SPR_BEAS, 20, 6, NULL, S_BEAST_DIE5, 0, 0}, // S_BEAST_DIE4
+ {SPR_BEAS, 21, 6, NULL, S_BEAST_DIE6, 0, 0}, // S_BEAST_DIE5
+ {SPR_BEAS, 22, 6, A_NoBlocking, S_BEAST_DIE7, 0, 0}, // S_BEAST_DIE6
+ {SPR_BEAS, 23, 6, NULL, S_BEAST_DIE8, 0, 0}, // S_BEAST_DIE7
+ {SPR_BEAS, 24, 6, NULL, S_BEAST_DIE9, 0, 0}, // S_BEAST_DIE8
+ {SPR_BEAS, 25, -1, NULL, S_NULL, 0, 0}, // S_BEAST_DIE9
+ {SPR_BEAS, 9, 5, NULL, S_BEAST_XDIE2, 0, 0}, // S_BEAST_XDIE1
+ {SPR_BEAS, 10, 6, A_Scream, S_BEAST_XDIE3, 0, 0}, // S_BEAST_XDIE2
+ {SPR_BEAS, 11, 5, NULL, S_BEAST_XDIE4, 0, 0}, // S_BEAST_XDIE3
+ {SPR_BEAS, 12, 6, NULL, S_BEAST_XDIE5, 0, 0}, // S_BEAST_XDIE4
+ {SPR_BEAS, 13, 5, NULL, S_BEAST_XDIE6, 0, 0}, // S_BEAST_XDIE5
+ {SPR_BEAS, 14, 6, A_NoBlocking, S_BEAST_XDIE7, 0, 0}, // S_BEAST_XDIE6
+ {SPR_BEAS, 15, 5, NULL, S_BEAST_XDIE8, 0, 0}, // S_BEAST_XDIE7
+ {SPR_BEAS, 16, -1, NULL, S_NULL, 0, 0}, // S_BEAST_XDIE8
+ {SPR_FRB1, 0, 2, A_BeastPuff, S_BEASTBALL2, 0, 0}, // S_BEASTBALL1
+ {SPR_FRB1, 0, 2, A_BeastPuff, S_BEASTBALL3, 0, 0}, // S_BEASTBALL2
+ {SPR_FRB1, 1, 2, A_BeastPuff, S_BEASTBALL4, 0, 0}, // S_BEASTBALL3
+ {SPR_FRB1, 1, 2, A_BeastPuff, S_BEASTBALL5, 0, 0}, // S_BEASTBALL4
+ {SPR_FRB1, 2, 2, A_BeastPuff, S_BEASTBALL6, 0, 0}, // S_BEASTBALL5
+ {SPR_FRB1, 2, 2, A_BeastPuff, S_BEASTBALL1, 0, 0}, // S_BEASTBALL6
+ {SPR_FRB1, 3, 4, NULL, S_BEASTBALLX2, 0, 0}, // S_BEASTBALLX1
+ {SPR_FRB1, 4, 4, NULL, S_BEASTBALLX3, 0, 0}, // S_BEASTBALLX2
+ {SPR_FRB1, 5, 4, NULL, S_BEASTBALLX4, 0, 0}, // S_BEASTBALLX3
+ {SPR_FRB1, 6, 4, NULL, S_BEASTBALLX5, 0, 0}, // S_BEASTBALLX4
+ {SPR_FRB1, 7, 4, NULL, S_NULL, 0, 0}, // S_BEASTBALLX5
+ {SPR_FRB1, 0, 4, NULL, S_BURNBALL2, 0, 0}, // S_BURNBALL1
+ {SPR_FRB1, 1, 4, NULL, S_BURNBALL3, 0, 0}, // S_BURNBALL2
+ {SPR_FRB1, 2, 4, NULL, S_BURNBALL4, 0, 0}, // S_BURNBALL3
+ {SPR_FRB1, 3, 4, NULL, S_BURNBALL5, 0, 0}, // S_BURNBALL4
+ {SPR_FRB1, 4, 4, NULL, S_BURNBALL6, 0, 0}, // S_BURNBALL5
+ {SPR_FRB1, 5, 4, NULL, S_BURNBALL7, 0, 0}, // S_BURNBALL6
+ {SPR_FRB1, 6, 4, NULL, S_BURNBALL8, 0, 0}, // S_BURNBALL7
+ {SPR_FRB1, 7, 4, NULL, S_NULL, 0, 0}, // S_BURNBALL8
+ {SPR_FRB1, 32768, 4, NULL, S_BURNBALLFB2, 0, 0}, // S_BURNBALLFB1
+ {SPR_FRB1, 32769, 4, NULL, S_BURNBALLFB3, 0, 0}, // S_BURNBALLFB2
+ {SPR_FRB1, 32770, 4, NULL, S_BURNBALLFB4, 0, 0}, // S_BURNBALLFB3
+ {SPR_FRB1, 32771, 4, NULL, S_BURNBALLFB5, 0, 0}, // S_BURNBALLFB4
+ {SPR_FRB1, 32772, 4, NULL, S_BURNBALLFB6, 0, 0}, // S_BURNBALLFB5
+ {SPR_FRB1, 32773, 4, NULL, S_BURNBALLFB7, 0, 0}, // S_BURNBALLFB6
+ {SPR_FRB1, 32774, 4, NULL, S_BURNBALLFB8, 0, 0}, // S_BURNBALLFB7
+ {SPR_FRB1, 32775, 4, NULL, S_NULL, 0, 0}, // S_BURNBALLFB8
+ {SPR_FRB1, 3, 4, NULL, S_PUFFY2, 0, 0}, // S_PUFFY1
+ {SPR_FRB1, 4, 4, NULL, S_PUFFY3, 0, 0}, // S_PUFFY2
+ {SPR_FRB1, 5, 4, NULL, S_PUFFY4, 0, 0}, // S_PUFFY3
+ {SPR_FRB1, 6, 4, NULL, S_PUFFY5, 0, 0}, // S_PUFFY4
+ {SPR_FRB1, 7, 4, NULL, S_NULL, 0, 0}, // S_PUFFY5
+ {SPR_SNKE, 0, 10, A_Look, S_SNAKE_LOOK2, 0, 0}, // S_SNAKE_LOOK1
+ {SPR_SNKE, 1, 10, A_Look, S_SNAKE_LOOK1, 0, 0}, // S_SNAKE_LOOK2
+ {SPR_SNKE, 0, 4, A_Chase, S_SNAKE_WALK2, 0, 0}, // S_SNAKE_WALK1
+ {SPR_SNKE, 1, 4, A_Chase, S_SNAKE_WALK3, 0, 0}, // S_SNAKE_WALK2
+ {SPR_SNKE, 2, 4, A_Chase, S_SNAKE_WALK4, 0, 0}, // S_SNAKE_WALK3
+ {SPR_SNKE, 3, 4, A_Chase, S_SNAKE_WALK1, 0, 0}, // S_SNAKE_WALK4
+ {SPR_SNKE, 5, 5, A_FaceTarget, S_SNAKE_ATK2, 0, 0}, // S_SNAKE_ATK1
+ {SPR_SNKE, 5, 5, A_FaceTarget, S_SNAKE_ATK3, 0, 0}, // S_SNAKE_ATK2
+ {SPR_SNKE, 5, 4, A_SnakeAttack, S_SNAKE_ATK4, 0, 0}, // S_SNAKE_ATK3
+ {SPR_SNKE, 5, 4, A_SnakeAttack, S_SNAKE_ATK5, 0, 0}, // S_SNAKE_ATK4
+ {SPR_SNKE, 5, 4, A_SnakeAttack, S_SNAKE_ATK6, 0, 0}, // S_SNAKE_ATK5
+ {SPR_SNKE, 5, 5, A_FaceTarget, S_SNAKE_ATK7, 0, 0}, // S_SNAKE_ATK6
+ {SPR_SNKE, 5, 5, A_FaceTarget, S_SNAKE_ATK8, 0, 0}, // S_SNAKE_ATK7
+ {SPR_SNKE, 5, 5, A_FaceTarget, S_SNAKE_ATK9, 0, 0}, // S_SNAKE_ATK8
+ {SPR_SNKE, 5, 4, A_SnakeAttack2, S_SNAKE_WALK1, 0, 0}, // S_SNAKE_ATK9
+ {SPR_SNKE, 4, 3, NULL, S_SNAKE_PAIN2, 0, 0}, // S_SNAKE_PAIN1
+ {SPR_SNKE, 4, 3, A_Pain, S_SNAKE_WALK1, 0, 0}, // S_SNAKE_PAIN2
+ {SPR_SNKE, 6, 5, NULL, S_SNAKE_DIE2, 0, 0}, // S_SNAKE_DIE1
+ {SPR_SNKE, 7, 5, A_Scream, S_SNAKE_DIE3, 0, 0}, // S_SNAKE_DIE2
+ {SPR_SNKE, 8, 5, NULL, S_SNAKE_DIE4, 0, 0}, // S_SNAKE_DIE3
+ {SPR_SNKE, 9, 5, NULL, S_SNAKE_DIE5, 0, 0}, // S_SNAKE_DIE4
+ {SPR_SNKE, 10, 5, NULL, S_SNAKE_DIE6, 0, 0}, // S_SNAKE_DIE5
+ {SPR_SNKE, 11, 5, NULL, S_SNAKE_DIE7, 0, 0}, // S_SNAKE_DIE6
+ {SPR_SNKE, 12, 5, A_NoBlocking, S_SNAKE_DIE8, 0, 0}, // S_SNAKE_DIE7
+ {SPR_SNKE, 13, 5, NULL, S_SNAKE_DIE9, 0, 0}, // S_SNAKE_DIE8
+ {SPR_SNKE, 14, 5, NULL, S_SNAKE_DIE10, 0, 0}, // S_SNAKE_DIE9
+ {SPR_SNKE, 15, -1, NULL, S_NULL, 0, 0}, // S_SNAKE_DIE10
+ {SPR_SNFX, 32768, 5, NULL, S_SNAKEPRO_A2, 0, 0}, // S_SNAKEPRO_A1
+ {SPR_SNFX, 32769, 5, NULL, S_SNAKEPRO_A3, 0, 0}, // S_SNAKEPRO_A2
+ {SPR_SNFX, 32770, 5, NULL, S_SNAKEPRO_A4, 0, 0}, // S_SNAKEPRO_A3
+ {SPR_SNFX, 32771, 5, NULL, S_SNAKEPRO_A1, 0, 0}, // S_SNAKEPRO_A4
+ {SPR_SNFX, 32772, 5, NULL, S_SNAKEPRO_AX2, 0, 0}, // S_SNAKEPRO_AX1
+ {SPR_SNFX, 32773, 5, NULL, S_SNAKEPRO_AX3, 0, 0}, // S_SNAKEPRO_AX2
+ {SPR_SNFX, 32774, 4, NULL, S_SNAKEPRO_AX4, 0, 0}, // S_SNAKEPRO_AX3
+ {SPR_SNFX, 32775, 3, NULL, S_SNAKEPRO_AX5, 0, 0}, // S_SNAKEPRO_AX4
+ {SPR_SNFX, 32776, 3, NULL, S_NULL, 0, 0}, // S_SNAKEPRO_AX5
+ {SPR_SNFX, 32777, 6, NULL, S_SNAKEPRO_B2, 0, 0}, // S_SNAKEPRO_B1
+ {SPR_SNFX, 32778, 6, NULL, S_SNAKEPRO_B1, 0, 0}, // S_SNAKEPRO_B2
+ {SPR_SNFX, 32779, 5, NULL, S_SNAKEPRO_BX2, 0, 0}, // S_SNAKEPRO_BX1
+ {SPR_SNFX, 32780, 5, NULL, S_SNAKEPRO_BX3, 0, 0}, // S_SNAKEPRO_BX2
+ {SPR_SNFX, 32781, 4, NULL, S_SNAKEPRO_BX4, 0, 0}, // S_SNAKEPRO_BX3
+ {SPR_SNFX, 32782, 3, NULL, S_NULL, 0, 0}, // S_SNAKEPRO_BX4
+ {SPR_HEAD, 0, 10, A_Look, S_HEAD_LOOK, 0, 0}, // S_HEAD_LOOK
+ {SPR_HEAD, 0, 4, A_Chase, S_HEAD_FLOAT, 0, 0}, // S_HEAD_FLOAT
+ {SPR_HEAD, 0, 5, A_FaceTarget, S_HEAD_ATK2, 0, 0}, // S_HEAD_ATK1
+ {SPR_HEAD, 1, 20, A_HeadAttack, S_HEAD_FLOAT, 0, 0}, // S_HEAD_ATK2
+ {SPR_HEAD, 0, 4, NULL, S_HEAD_PAIN2, 0, 0}, // S_HEAD_PAIN1
+ {SPR_HEAD, 0, 4, A_Pain, S_HEAD_FLOAT, 0, 0}, // S_HEAD_PAIN2
+ {SPR_HEAD, 2, 7, NULL, S_HEAD_DIE2, 0, 0}, // S_HEAD_DIE1
+ {SPR_HEAD, 3, 7, A_Scream, S_HEAD_DIE3, 0, 0}, // S_HEAD_DIE2
+ {SPR_HEAD, 4, 7, NULL, S_HEAD_DIE4, 0, 0}, // S_HEAD_DIE3
+ {SPR_HEAD, 5, 7, NULL, S_HEAD_DIE5, 0, 0}, // S_HEAD_DIE4
+ {SPR_HEAD, 6, 7, A_NoBlocking, S_HEAD_DIE6, 0, 0}, // S_HEAD_DIE5
+ {SPR_HEAD, 7, 7, NULL, S_HEAD_DIE7, 0, 0}, // S_HEAD_DIE6
+ {SPR_HEAD, 8, -1, A_BossDeath, S_NULL, 0, 0}, // S_HEAD_DIE7
+ {SPR_FX05, 0, 6, NULL, S_HEADFX1_2, 0, 0}, // S_HEADFX1_1
+ {SPR_FX05, 1, 6, NULL, S_HEADFX1_3, 0, 0}, // S_HEADFX1_2
+ {SPR_FX05, 2, 6, NULL, S_HEADFX1_1, 0, 0}, // S_HEADFX1_3
+ {SPR_FX05, 3, 5, A_HeadIceImpact, S_HEADFXI1_2, 0, 0}, // S_HEADFXI1_1
+ {SPR_FX05, 4, 5, NULL, S_HEADFXI1_3, 0, 0}, // S_HEADFXI1_2
+ {SPR_FX05, 5, 5, NULL, S_HEADFXI1_4, 0, 0}, // S_HEADFXI1_3
+ {SPR_FX05, 6, 5, NULL, S_NULL, 0, 0}, // S_HEADFXI1_4
+ {SPR_FX05, 7, 6, NULL, S_HEADFX2_2, 0, 0}, // S_HEADFX2_1
+ {SPR_FX05, 8, 6, NULL, S_HEADFX2_3, 0, 0}, // S_HEADFX2_2
+ {SPR_FX05, 9, 6, NULL, S_HEADFX2_1, 0, 0}, // S_HEADFX2_3
+ {SPR_FX05, 3, 5, NULL, S_HEADFXI2_2, 0, 0}, // S_HEADFXI2_1
+ {SPR_FX05, 4, 5, NULL, S_HEADFXI2_3, 0, 0}, // S_HEADFXI2_2
+ {SPR_FX05, 5, 5, NULL, S_HEADFXI2_4, 0, 0}, // S_HEADFXI2_3
+ {SPR_FX05, 6, 5, NULL, S_NULL, 0, 0}, // S_HEADFXI2_4
+ {SPR_FX06, 0, 4, A_HeadFireGrow, S_HEADFX3_2, 0, 0}, // S_HEADFX3_1
+ {SPR_FX06, 1, 4, A_HeadFireGrow, S_HEADFX3_3, 0, 0}, // S_HEADFX3_2
+ {SPR_FX06, 2, 4, A_HeadFireGrow, S_HEADFX3_1, 0, 0}, // S_HEADFX3_3
+ {SPR_FX06, 0, 5, NULL, S_HEADFX3_5, 0, 0}, // S_HEADFX3_4
+ {SPR_FX06, 1, 5, NULL, S_HEADFX3_6, 0, 0}, // S_HEADFX3_5
+ {SPR_FX06, 2, 5, NULL, S_HEADFX3_4, 0, 0}, // S_HEADFX3_6
+ {SPR_FX06, 3, 5, NULL, S_HEADFXI3_2, 0, 0}, // S_HEADFXI3_1
+ {SPR_FX06, 4, 5, NULL, S_HEADFXI3_3, 0, 0}, // S_HEADFXI3_2
+ {SPR_FX06, 5, 5, NULL, S_HEADFXI3_4, 0, 0}, // S_HEADFXI3_3
+ {SPR_FX06, 6, 5, NULL, S_NULL, 0, 0}, // S_HEADFXI3_4
+ {SPR_FX07, 3, 3, NULL, S_HEADFX4_2, 0, 0}, // S_HEADFX4_1
+ {SPR_FX07, 4, 3, NULL, S_HEADFX4_3, 0, 0}, // S_HEADFX4_2
+ {SPR_FX07, 5, 3, NULL, S_HEADFX4_4, 0, 0}, // S_HEADFX4_3
+ {SPR_FX07, 6, 3, NULL, S_HEADFX4_5, 0, 0}, // S_HEADFX4_4
+ {SPR_FX07, 0, 3, A_WhirlwindSeek, S_HEADFX4_6, 0, 0}, // S_HEADFX4_5
+ {SPR_FX07, 1, 3, A_WhirlwindSeek, S_HEADFX4_7, 0, 0}, // S_HEADFX4_6
+ {SPR_FX07, 2, 3, A_WhirlwindSeek, S_HEADFX4_5, 0, 0}, // S_HEADFX4_7
+ {SPR_FX07, 6, 4, NULL, S_HEADFXI4_2, 0, 0}, // S_HEADFXI4_1
+ {SPR_FX07, 5, 4, NULL, S_HEADFXI4_3, 0, 0}, // S_HEADFXI4_2
+ {SPR_FX07, 4, 4, NULL, S_HEADFXI4_4, 0, 0}, // S_HEADFXI4_3
+ {SPR_FX07, 3, 4, NULL, S_NULL, 0, 0}, // S_HEADFXI4_4
+ {SPR_CLNK, 0, 10, A_Look, S_CLINK_LOOK2, 0, 0}, // S_CLINK_LOOK1
+ {SPR_CLNK, 1, 10, A_Look, S_CLINK_LOOK1, 0, 0}, // S_CLINK_LOOK2
+ {SPR_CLNK, 0, 3, A_Chase, S_CLINK_WALK2, 0, 0}, // S_CLINK_WALK1
+ {SPR_CLNK, 1, 3, A_Chase, S_CLINK_WALK3, 0, 0}, // S_CLINK_WALK2
+ {SPR_CLNK, 2, 3, A_Chase, S_CLINK_WALK4, 0, 0}, // S_CLINK_WALK3
+ {SPR_CLNK, 3, 3, A_Chase, S_CLINK_WALK1, 0, 0}, // S_CLINK_WALK4
+ {SPR_CLNK, 4, 5, A_FaceTarget, S_CLINK_ATK2, 0, 0}, // S_CLINK_ATK1
+ {SPR_CLNK, 5, 4, A_FaceTarget, S_CLINK_ATK3, 0, 0}, // S_CLINK_ATK2
+ {SPR_CLNK, 6, 7, A_ClinkAttack, S_CLINK_WALK1, 0, 0}, // S_CLINK_ATK3
+ {SPR_CLNK, 7, 3, NULL, S_CLINK_PAIN2, 0, 0}, // S_CLINK_PAIN1
+ {SPR_CLNK, 7, 3, A_Pain, S_CLINK_WALK1, 0, 0}, // S_CLINK_PAIN2
+ {SPR_CLNK, 8, 6, NULL, S_CLINK_DIE2, 0, 0}, // S_CLINK_DIE1
+ {SPR_CLNK, 9, 6, NULL, S_CLINK_DIE3, 0, 0}, // S_CLINK_DIE2
+ {SPR_CLNK, 10, 5, A_Scream, S_CLINK_DIE4, 0, 0}, // S_CLINK_DIE3
+ {SPR_CLNK, 11, 5, A_NoBlocking, S_CLINK_DIE5, 0, 0}, // S_CLINK_DIE4
+ {SPR_CLNK, 12, 5, NULL, S_CLINK_DIE6, 0, 0}, // S_CLINK_DIE5
+ {SPR_CLNK, 13, 5, NULL, S_CLINK_DIE7, 0, 0}, // S_CLINK_DIE6
+ {SPR_CLNK, 14, -1, NULL, S_NULL, 0, 0}, // S_CLINK_DIE7
+ {SPR_WZRD, 0, 10, A_Look, S_WIZARD_LOOK2, 0, 0}, // S_WIZARD_LOOK1
+ {SPR_WZRD, 1, 10, A_Look, S_WIZARD_LOOK1, 0, 0}, // S_WIZARD_LOOK2
+ {SPR_WZRD, 0, 3, A_Chase, S_WIZARD_WALK2, 0, 0}, // S_WIZARD_WALK1
+ {SPR_WZRD, 0, 4, A_Chase, S_WIZARD_WALK3, 0, 0}, // S_WIZARD_WALK2
+ {SPR_WZRD, 0, 3, A_Chase, S_WIZARD_WALK4, 0, 0}, // S_WIZARD_WALK3
+ {SPR_WZRD, 0, 4, A_Chase, S_WIZARD_WALK5, 0, 0}, // S_WIZARD_WALK4
+ {SPR_WZRD, 1, 3, A_Chase, S_WIZARD_WALK6, 0, 0}, // S_WIZARD_WALK5
+ {SPR_WZRD, 1, 4, A_Chase, S_WIZARD_WALK7, 0, 0}, // S_WIZARD_WALK6
+ {SPR_WZRD, 1, 3, A_Chase, S_WIZARD_WALK8, 0, 0}, // S_WIZARD_WALK7
+ {SPR_WZRD, 1, 4, A_Chase, S_WIZARD_WALK1, 0, 0}, // S_WIZARD_WALK8
+ {SPR_WZRD, 2, 4, A_WizAtk1, S_WIZARD_ATK2, 0, 0}, // S_WIZARD_ATK1
+ {SPR_WZRD, 2, 4, A_WizAtk2, S_WIZARD_ATK3, 0, 0}, // S_WIZARD_ATK2
+ {SPR_WZRD, 2, 4, A_WizAtk1, S_WIZARD_ATK4, 0, 0}, // S_WIZARD_ATK3
+ {SPR_WZRD, 2, 4, A_WizAtk2, S_WIZARD_ATK5, 0, 0}, // S_WIZARD_ATK4
+ {SPR_WZRD, 2, 4, A_WizAtk1, S_WIZARD_ATK6, 0, 0}, // S_WIZARD_ATK5
+ {SPR_WZRD, 2, 4, A_WizAtk2, S_WIZARD_ATK7, 0, 0}, // S_WIZARD_ATK6
+ {SPR_WZRD, 2, 4, A_WizAtk1, S_WIZARD_ATK8, 0, 0}, // S_WIZARD_ATK7
+ {SPR_WZRD, 2, 4, A_WizAtk2, S_WIZARD_ATK9, 0, 0}, // S_WIZARD_ATK8
+ {SPR_WZRD, 3, 12, A_WizAtk3, S_WIZARD_WALK1, 0, 0}, // S_WIZARD_ATK9
+ {SPR_WZRD, 4, 3, A_GhostOff, S_WIZARD_PAIN2, 0, 0}, // S_WIZARD_PAIN1
+ {SPR_WZRD, 4, 3, A_Pain, S_WIZARD_WALK1, 0, 0}, // S_WIZARD_PAIN2
+ {SPR_WZRD, 5, 6, A_GhostOff, S_WIZARD_DIE2, 0, 0}, // S_WIZARD_DIE1
+ {SPR_WZRD, 6, 6, A_Scream, S_WIZARD_DIE3, 0, 0}, // S_WIZARD_DIE2
+ {SPR_WZRD, 7, 6, NULL, S_WIZARD_DIE4, 0, 0}, // S_WIZARD_DIE3
+ {SPR_WZRD, 8, 6, NULL, S_WIZARD_DIE5, 0, 0}, // S_WIZARD_DIE4
+ {SPR_WZRD, 9, 6, A_NoBlocking, S_WIZARD_DIE6, 0, 0}, // S_WIZARD_DIE5
+ {SPR_WZRD, 10, 6, NULL, S_WIZARD_DIE7, 0, 0}, // S_WIZARD_DIE6
+ {SPR_WZRD, 11, 6, NULL, S_WIZARD_DIE8, 0, 0}, // S_WIZARD_DIE7
+ {SPR_WZRD, 12, -1, NULL, S_NULL, 0, 0}, // S_WIZARD_DIE8
+ {SPR_FX11, 32768, 6, NULL, S_WIZFX1_2, 0, 0}, // S_WIZFX1_1
+ {SPR_FX11, 32769, 6, NULL, S_WIZFX1_1, 0, 0}, // S_WIZFX1_2
+ {SPR_FX11, 32770, 5, NULL, S_WIZFXI1_2, 0, 0}, // S_WIZFXI1_1
+ {SPR_FX11, 32771, 5, NULL, S_WIZFXI1_3, 0, 0}, // S_WIZFXI1_2
+ {SPR_FX11, 32772, 5, NULL, S_WIZFXI1_4, 0, 0}, // S_WIZFXI1_3
+ {SPR_FX11, 32773, 5, NULL, S_WIZFXI1_5, 0, 0}, // S_WIZFXI1_4
+ {SPR_FX11, 32774, 5, NULL, S_NULL, 0, 0}, // S_WIZFXI1_5
+ {SPR_IMPX, 0, 10, A_Look, S_IMP_LOOK2, 0, 0}, // S_IMP_LOOK1
+ {SPR_IMPX, 1, 10, A_Look, S_IMP_LOOK3, 0, 0}, // S_IMP_LOOK2
+ {SPR_IMPX, 2, 10, A_Look, S_IMP_LOOK4, 0, 0}, // S_IMP_LOOK3
+ {SPR_IMPX, 1, 10, A_Look, S_IMP_LOOK1, 0, 0}, // S_IMP_LOOK4
+ {SPR_IMPX, 0, 3, A_Chase, S_IMP_FLY2, 0, 0}, // S_IMP_FLY1
+ {SPR_IMPX, 0, 3, A_Chase, S_IMP_FLY3, 0, 0}, // S_IMP_FLY2
+ {SPR_IMPX, 1, 3, A_Chase, S_IMP_FLY4, 0, 0}, // S_IMP_FLY3
+ {SPR_IMPX, 1, 3, A_Chase, S_IMP_FLY5, 0, 0}, // S_IMP_FLY4
+ {SPR_IMPX, 2, 3, A_Chase, S_IMP_FLY6, 0, 0}, // S_IMP_FLY5
+ {SPR_IMPX, 2, 3, A_Chase, S_IMP_FLY7, 0, 0}, // S_IMP_FLY6
+ {SPR_IMPX, 1, 3, A_Chase, S_IMP_FLY8, 0, 0}, // S_IMP_FLY7
+ {SPR_IMPX, 1, 3, A_Chase, S_IMP_FLY1, 0, 0}, // S_IMP_FLY8
+ {SPR_IMPX, 3, 6, A_FaceTarget, S_IMP_MEATK2, 0, 0}, // S_IMP_MEATK1
+ {SPR_IMPX, 4, 6, A_FaceTarget, S_IMP_MEATK3, 0, 0}, // S_IMP_MEATK2
+ {SPR_IMPX, 5, 6, A_ImpMeAttack, S_IMP_FLY1, 0, 0}, // S_IMP_MEATK3
+ {SPR_IMPX, 0, 10, A_FaceTarget, S_IMP_MSATK1_2, 0, 0}, // S_IMP_MSATK1_1
+ {SPR_IMPX, 1, 6, A_ImpMsAttack, S_IMP_MSATK1_3, 0, 0}, // S_IMP_MSATK1_2
+ {SPR_IMPX, 2, 6, NULL, S_IMP_MSATK1_4, 0, 0}, // S_IMP_MSATK1_3
+ {SPR_IMPX, 1, 6, NULL, S_IMP_MSATK1_5, 0, 0}, // S_IMP_MSATK1_4
+ {SPR_IMPX, 0, 6, NULL, S_IMP_MSATK1_6, 0, 0}, // S_IMP_MSATK1_5
+ {SPR_IMPX, 1, 6, NULL, S_IMP_MSATK1_3, 0, 0}, // S_IMP_MSATK1_6
+ {SPR_IMPX, 3, 6, A_FaceTarget, S_IMP_MSATK2_2, 0, 0}, // S_IMP_MSATK2_1
+ {SPR_IMPX, 4, 6, A_FaceTarget, S_IMP_MSATK2_3, 0, 0}, // S_IMP_MSATK2_2
+ {SPR_IMPX, 5, 6, A_ImpMsAttack2, S_IMP_FLY1, 0, 0}, // S_IMP_MSATK2_3
+ {SPR_IMPX, 6, 3, NULL, S_IMP_PAIN2, 0, 0}, // S_IMP_PAIN1
+ {SPR_IMPX, 6, 3, A_Pain, S_IMP_FLY1, 0, 0}, // S_IMP_PAIN2
+ {SPR_IMPX, 6, 4, A_ImpDeath, S_IMP_DIE2, 0, 0}, // S_IMP_DIE1
+ {SPR_IMPX, 7, 5, NULL, S_IMP_DIE2, 0, 0}, // S_IMP_DIE2
+ {SPR_IMPX, 18, 5, A_ImpXDeath1, S_IMP_XDIE2, 0, 0}, // S_IMP_XDIE1
+ {SPR_IMPX, 19, 5, NULL, S_IMP_XDIE3, 0, 0}, // S_IMP_XDIE2
+ {SPR_IMPX, 20, 5, NULL, S_IMP_XDIE4, 0, 0}, // S_IMP_XDIE3
+ {SPR_IMPX, 21, 5, A_ImpXDeath2, S_IMP_XDIE5, 0, 0}, // S_IMP_XDIE4
+ {SPR_IMPX, 22, 5, NULL, S_IMP_XDIE5, 0, 0}, // S_IMP_XDIE5
+ {SPR_IMPX, 8, 7, A_ImpExplode, S_IMP_CRASH2, 0, 0}, // S_IMP_CRASH1
+ {SPR_IMPX, 9, 7, A_Scream, S_IMP_CRASH3, 0, 0}, // S_IMP_CRASH2
+ {SPR_IMPX, 10, 7, NULL, S_IMP_CRASH4, 0, 0}, // S_IMP_CRASH3
+ {SPR_IMPX, 11, -1, NULL, S_NULL, 0, 0}, // S_IMP_CRASH4
+ {SPR_IMPX, 23, 7, NULL, S_IMP_XCRASH2, 0, 0}, // S_IMP_XCRASH1
+ {SPR_IMPX, 24, 7, NULL, S_IMP_XCRASH3, 0, 0}, // S_IMP_XCRASH2
+ {SPR_IMPX, 25, -1, NULL, S_NULL, 0, 0}, // S_IMP_XCRASH3
+ {SPR_IMPX, 12, 5, NULL, S_IMP_CHUNKA2, 0, 0}, // S_IMP_CHUNKA1
+ {SPR_IMPX, 13, 700, NULL, S_IMP_CHUNKA3, 0, 0}, // S_IMP_CHUNKA2
+ {SPR_IMPX, 14, 700, NULL, S_NULL, 0, 0}, // S_IMP_CHUNKA3
+ {SPR_IMPX, 15, 5, NULL, S_IMP_CHUNKB2, 0, 0}, // S_IMP_CHUNKB1
+ {SPR_IMPX, 16, 700, NULL, S_IMP_CHUNKB3, 0, 0}, // S_IMP_CHUNKB2
+ {SPR_IMPX, 17, 700, NULL, S_NULL, 0, 0}, // S_IMP_CHUNKB3
+ {SPR_FX10, 32768, 6, NULL, S_IMPFX2, 0, 0}, // S_IMPFX1
+ {SPR_FX10, 32769, 6, NULL, S_IMPFX3, 0, 0}, // S_IMPFX2
+ {SPR_FX10, 32770, 6, NULL, S_IMPFX1, 0, 0}, // S_IMPFX3
+ {SPR_FX10, 32771, 5, NULL, S_IMPFXI2, 0, 0}, // S_IMPFXI1
+ {SPR_FX10, 32772, 5, NULL, S_IMPFXI3, 0, 0}, // S_IMPFXI2
+ {SPR_FX10, 32773, 5, NULL, S_IMPFXI4, 0, 0}, // S_IMPFXI3
+ {SPR_FX10, 32774, 5, NULL, S_NULL, 0, 0}, // S_IMPFXI4
+ {SPR_KNIG, 0, 10, A_Look, S_KNIGHT_STND2, 0, 0}, // S_KNIGHT_STND1
+ {SPR_KNIG, 1, 10, A_Look, S_KNIGHT_STND1, 0, 0}, // S_KNIGHT_STND2
+ {SPR_KNIG, 0, 4, A_Chase, S_KNIGHT_WALK2, 0, 0}, // S_KNIGHT_WALK1
+ {SPR_KNIG, 1, 4, A_Chase, S_KNIGHT_WALK3, 0, 0}, // S_KNIGHT_WALK2
+ {SPR_KNIG, 2, 4, A_Chase, S_KNIGHT_WALK4, 0, 0}, // S_KNIGHT_WALK3
+ {SPR_KNIG, 3, 4, A_Chase, S_KNIGHT_WALK1, 0, 0}, // S_KNIGHT_WALK4
+ {SPR_KNIG, 4, 10, A_FaceTarget, S_KNIGHT_ATK2, 0, 0}, // S_KNIGHT_ATK1
+ {SPR_KNIG, 5, 8, A_FaceTarget, S_KNIGHT_ATK3, 0, 0}, // S_KNIGHT_ATK2
+ {SPR_KNIG, 6, 8, A_KnightAttack, S_KNIGHT_ATK4, 0, 0}, // S_KNIGHT_ATK3
+ {SPR_KNIG, 4, 10, A_FaceTarget, S_KNIGHT_ATK5, 0, 0}, // S_KNIGHT_ATK4
+ {SPR_KNIG, 5, 8, A_FaceTarget, S_KNIGHT_ATK6, 0, 0}, // S_KNIGHT_ATK5
+ {SPR_KNIG, 6, 8, A_KnightAttack, S_KNIGHT_WALK1, 0, 0}, // S_KNIGHT_ATK6
+ {SPR_KNIG, 7, 3, NULL, S_KNIGHT_PAIN2, 0, 0}, // S_KNIGHT_PAIN1
+ {SPR_KNIG, 7, 3, A_Pain, S_KNIGHT_WALK1, 0, 0}, // S_KNIGHT_PAIN2
+ {SPR_KNIG, 8, 6, NULL, S_KNIGHT_DIE2, 0, 0}, // S_KNIGHT_DIE1
+ {SPR_KNIG, 9, 6, A_Scream, S_KNIGHT_DIE3, 0, 0}, // S_KNIGHT_DIE2
+ {SPR_KNIG, 10, 6, NULL, S_KNIGHT_DIE4, 0, 0}, // S_KNIGHT_DIE3
+ {SPR_KNIG, 11, 6, A_NoBlocking, S_KNIGHT_DIE5, 0, 0}, // S_KNIGHT_DIE4
+ {SPR_KNIG, 12, 6, NULL, S_KNIGHT_DIE6, 0, 0}, // S_KNIGHT_DIE5
+ {SPR_KNIG, 13, 6, NULL, S_KNIGHT_DIE7, 0, 0}, // S_KNIGHT_DIE6
+ {SPR_KNIG, 14, -1, NULL, S_NULL, 0, 0}, // S_KNIGHT_DIE7
+ {SPR_SPAX, 32768, 3, A_ContMobjSound, S_SPINAXE2, 0, 0}, // S_SPINAXE1
+ {SPR_SPAX, 32769, 3, NULL, S_SPINAXE3, 0, 0}, // S_SPINAXE2
+ {SPR_SPAX, 32770, 3, NULL, S_SPINAXE1, 0, 0}, // S_SPINAXE3
+ {SPR_SPAX, 32771, 6, NULL, S_SPINAXEX2, 0, 0}, // S_SPINAXEX1
+ {SPR_SPAX, 32772, 6, NULL, S_SPINAXEX3, 0, 0}, // S_SPINAXEX2
+ {SPR_SPAX, 32773, 6, NULL, S_NULL, 0, 0}, // S_SPINAXEX3
+ {SPR_RAXE, 32768, 5, A_DripBlood, S_REDAXE2, 0, 0}, // S_REDAXE1
+ {SPR_RAXE, 32769, 5, A_DripBlood, S_REDAXE1, 0, 0}, // S_REDAXE2
+ {SPR_RAXE, 32770, 6, NULL, S_REDAXEX2, 0, 0}, // S_REDAXEX1
+ {SPR_RAXE, 32771, 6, NULL, S_REDAXEX3, 0, 0}, // S_REDAXEX2
+ {SPR_RAXE, 32772, 6, NULL, S_NULL, 0, 0}, // S_REDAXEX3
+ {SPR_SRCR, 0, 10, A_Look, S_SRCR1_LOOK2, 0, 0}, // S_SRCR1_LOOK1
+ {SPR_SRCR, 1, 10, A_Look, S_SRCR1_LOOK1, 0, 0}, // S_SRCR1_LOOK2
+ {SPR_SRCR, 0, 5, A_Sor1Chase, S_SRCR1_WALK2, 0, 0}, // S_SRCR1_WALK1
+ {SPR_SRCR, 1, 5, A_Sor1Chase, S_SRCR1_WALK3, 0, 0}, // S_SRCR1_WALK2
+ {SPR_SRCR, 2, 5, A_Sor1Chase, S_SRCR1_WALK4, 0, 0}, // S_SRCR1_WALK3
+ {SPR_SRCR, 3, 5, A_Sor1Chase, S_SRCR1_WALK1, 0, 0}, // S_SRCR1_WALK4
+ {SPR_SRCR, 16, 6, A_Sor1Pain, S_SRCR1_WALK1, 0, 0}, // S_SRCR1_PAIN1
+ {SPR_SRCR, 16, 7, A_FaceTarget, S_SRCR1_ATK2, 0, 0}, // S_SRCR1_ATK1
+ {SPR_SRCR, 17, 6, A_FaceTarget, S_SRCR1_ATK3, 0, 0}, // S_SRCR1_ATK2
+ {SPR_SRCR, 18, 10, A_Srcr1Attack, S_SRCR1_WALK1, 0, 0}, // S_SRCR1_ATK3
+ {SPR_SRCR, 18, 10, A_FaceTarget, S_SRCR1_ATK5, 0, 0}, // S_SRCR1_ATK4
+ {SPR_SRCR, 16, 7, A_FaceTarget, S_SRCR1_ATK6, 0, 0}, // S_SRCR1_ATK5
+ {SPR_SRCR, 17, 6, A_FaceTarget, S_SRCR1_ATK7, 0, 0}, // S_SRCR1_ATK6
+ {SPR_SRCR, 18, 10, A_Srcr1Attack, S_SRCR1_WALK1, 0, 0}, // S_SRCR1_ATK7
+ {SPR_SRCR, 4, 7, NULL, S_SRCR1_DIE2, 0, 0}, // S_SRCR1_DIE1
+ {SPR_SRCR, 5, 7, A_Scream, S_SRCR1_DIE3, 0, 0}, // S_SRCR1_DIE2
+ {SPR_SRCR, 6, 7, NULL, S_SRCR1_DIE4, 0, 0}, // S_SRCR1_DIE3
+ {SPR_SRCR, 7, 6, NULL, S_SRCR1_DIE5, 0, 0}, // S_SRCR1_DIE4
+ {SPR_SRCR, 8, 6, NULL, S_SRCR1_DIE6, 0, 0}, // S_SRCR1_DIE5
+ {SPR_SRCR, 9, 6, NULL, S_SRCR1_DIE7, 0, 0}, // S_SRCR1_DIE6
+ {SPR_SRCR, 10, 6, NULL, S_SRCR1_DIE8, 0, 0}, // S_SRCR1_DIE7
+ {SPR_SRCR, 11, 25, A_SorZap, S_SRCR1_DIE9, 0, 0}, // S_SRCR1_DIE8
+ {SPR_SRCR, 12, 5, NULL, S_SRCR1_DIE10, 0, 0}, // S_SRCR1_DIE9
+ {SPR_SRCR, 13, 5, NULL, S_SRCR1_DIE11, 0, 0}, // S_SRCR1_DIE10
+ {SPR_SRCR, 14, 4, NULL, S_SRCR1_DIE12, 0, 0}, // S_SRCR1_DIE11
+ {SPR_SRCR, 11, 20, A_SorZap, S_SRCR1_DIE13, 0, 0}, // S_SRCR1_DIE12
+ {SPR_SRCR, 12, 5, NULL, S_SRCR1_DIE14, 0, 0}, // S_SRCR1_DIE13
+ {SPR_SRCR, 13, 5, NULL, S_SRCR1_DIE15, 0, 0}, // S_SRCR1_DIE14
+ {SPR_SRCR, 14, 4, NULL, S_SRCR1_DIE16, 0, 0}, // S_SRCR1_DIE15
+ {SPR_SRCR, 11, 12, NULL, S_SRCR1_DIE17, 0, 0}, // S_SRCR1_DIE16
+ {SPR_SRCR, 15, -1, A_SorcererRise, S_NULL, 0, 0}, // S_SRCR1_DIE17
+ {SPR_FX14, 32768, 6, NULL, S_SRCRFX1_2, 0, 0}, // S_SRCRFX1_1
+ {SPR_FX14, 32769, 6, NULL, S_SRCRFX1_3, 0, 0}, // S_SRCRFX1_2
+ {SPR_FX14, 32770, 6, NULL, S_SRCRFX1_1, 0, 0}, // S_SRCRFX1_3
+ {SPR_FX14, 32771, 5, NULL, S_SRCRFXI1_2, 0, 0}, // S_SRCRFXI1_1
+ {SPR_FX14, 32772, 5, NULL, S_SRCRFXI1_3, 0, 0}, // S_SRCRFXI1_2
+ {SPR_FX14, 32773, 5, NULL, S_SRCRFXI1_4, 0, 0}, // S_SRCRFXI1_3
+ {SPR_FX14, 32774, 5, NULL, S_SRCRFXI1_5, 0, 0}, // S_SRCRFXI1_4
+ {SPR_FX14, 32775, 5, NULL, S_NULL, 0, 0}, // S_SRCRFXI1_5
+ {SPR_SOR2, 0, 4, NULL, S_SOR2_RISE2, 0, 0}, // S_SOR2_RISE1
+ {SPR_SOR2, 1, 4, NULL, S_SOR2_RISE3, 0, 0}, // S_SOR2_RISE2
+ {SPR_SOR2, 2, 4, A_SorRise, S_SOR2_RISE4, 0, 0}, // S_SOR2_RISE3
+ {SPR_SOR2, 3, 4, NULL, S_SOR2_RISE5, 0, 0}, // S_SOR2_RISE4
+ {SPR_SOR2, 4, 4, NULL, S_SOR2_RISE6, 0, 0}, // S_SOR2_RISE5
+ {SPR_SOR2, 5, 4, NULL, S_SOR2_RISE7, 0, 0}, // S_SOR2_RISE6
+ {SPR_SOR2, 6, 12, A_SorSightSnd, S_SOR2_WALK1, 0, 0}, // S_SOR2_RISE7
+ {SPR_SOR2, 12, 10, A_Look, S_SOR2_LOOK2, 0, 0}, // S_SOR2_LOOK1
+ {SPR_SOR2, 13, 10, A_Look, S_SOR2_LOOK1, 0, 0}, // S_SOR2_LOOK2
+ {SPR_SOR2, 12, 4, A_Chase, S_SOR2_WALK2, 0, 0}, // S_SOR2_WALK1
+ {SPR_SOR2, 13, 4, A_Chase, S_SOR2_WALK3, 0, 0}, // S_SOR2_WALK2
+ {SPR_SOR2, 14, 4, A_Chase, S_SOR2_WALK4, 0, 0}, // S_SOR2_WALK3
+ {SPR_SOR2, 15, 4, A_Chase, S_SOR2_WALK1, 0, 0}, // S_SOR2_WALK4
+ {SPR_SOR2, 16, 3, NULL, S_SOR2_PAIN2, 0, 0}, // S_SOR2_PAIN1
+ {SPR_SOR2, 16, 6, A_Pain, S_SOR2_WALK1, 0, 0}, // S_SOR2_PAIN2
+ {SPR_SOR2, 17, 9, A_Srcr2Decide, S_SOR2_ATK2, 0, 0}, // S_SOR2_ATK1
+ {SPR_SOR2, 18, 9, A_FaceTarget, S_SOR2_ATK3, 0, 0}, // S_SOR2_ATK2
+ {SPR_SOR2, 19, 20, A_Srcr2Attack, S_SOR2_WALK1, 0, 0}, // S_SOR2_ATK3
+ {SPR_SOR2, 11, 6, NULL, S_SOR2_TELE2, 0, 0}, // S_SOR2_TELE1
+ {SPR_SOR2, 10, 6, NULL, S_SOR2_TELE3, 0, 0}, // S_SOR2_TELE2
+ {SPR_SOR2, 9, 6, NULL, S_SOR2_TELE4, 0, 0}, // S_SOR2_TELE3
+ {SPR_SOR2, 8, 6, NULL, S_SOR2_TELE5, 0, 0}, // S_SOR2_TELE4
+ {SPR_SOR2, 7, 6, NULL, S_SOR2_TELE6, 0, 0}, // S_SOR2_TELE5
+ {SPR_SOR2, 6, 6, NULL, S_SOR2_WALK1, 0, 0}, // S_SOR2_TELE6
+ {SPR_SDTH, 0, 8, A_Sor2DthInit, S_SOR2_DIE2, 0, 0}, // S_SOR2_DIE1
+ {SPR_SDTH, 1, 8, NULL, S_SOR2_DIE3, 0, 0}, // S_SOR2_DIE2
+ {SPR_SDTH, 2, 8, A_SorDSph, S_SOR2_DIE4, 0, 0}, // S_SOR2_DIE3
+ {SPR_SDTH, 3, 7, NULL, S_SOR2_DIE5, 0, 0}, // S_SOR2_DIE4
+ {SPR_SDTH, 4, 7, NULL, S_SOR2_DIE6, 0, 0}, // S_SOR2_DIE5
+ {SPR_SDTH, 5, 7, A_Sor2DthLoop, S_SOR2_DIE7, 0, 0}, // S_SOR2_DIE6
+ {SPR_SDTH, 6, 6, A_SorDExp, S_SOR2_DIE8, 0, 0}, // S_SOR2_DIE7
+ {SPR_SDTH, 7, 6, NULL, S_SOR2_DIE9, 0, 0}, // S_SOR2_DIE8
+ {SPR_SDTH, 8, 18, NULL, S_SOR2_DIE10, 0, 0}, // S_SOR2_DIE9
+ {SPR_SDTH, 9, 6, A_NoBlocking, S_SOR2_DIE11, 0, 0}, // S_SOR2_DIE10
+ {SPR_SDTH, 10, 6, A_SorDBon, S_SOR2_DIE12, 0, 0}, // S_SOR2_DIE11
+ {SPR_SDTH, 11, 6, NULL, S_SOR2_DIE13, 0, 0}, // S_SOR2_DIE12
+ {SPR_SDTH, 12, 6, NULL, S_SOR2_DIE14, 0, 0}, // S_SOR2_DIE13
+ {SPR_SDTH, 13, 6, NULL, S_SOR2_DIE15, 0, 0}, // S_SOR2_DIE14
+ {SPR_SDTH, 14, -1, A_BossDeath, S_NULL, 0, 0}, // S_SOR2_DIE15
+ {SPR_FX16, 32768, 3, A_BlueSpark, S_SOR2FX1_2, 0, 0}, // S_SOR2FX1_1
+ {SPR_FX16, 32769, 3, A_BlueSpark, S_SOR2FX1_3, 0, 0}, // S_SOR2FX1_2
+ {SPR_FX16, 32770, 3, A_BlueSpark, S_SOR2FX1_1, 0, 0}, // S_SOR2FX1_3
+ {SPR_FX16, 32774, 5, A_Explode, S_SOR2FXI1_2, 0, 0}, // S_SOR2FXI1_1
+ {SPR_FX16, 32775, 5, NULL, S_SOR2FXI1_3, 0, 0}, // S_SOR2FXI1_2
+ {SPR_FX16, 32776, 5, NULL, S_SOR2FXI1_4, 0, 0}, // S_SOR2FXI1_3
+ {SPR_FX16, 32777, 5, NULL, S_SOR2FXI1_5, 0, 0}, // S_SOR2FXI1_4
+ {SPR_FX16, 32778, 5, NULL, S_SOR2FXI1_6, 0, 0}, // S_SOR2FXI1_5
+ {SPR_FX16, 32779, 5, NULL, S_NULL, 0, 0}, // S_SOR2FXI1_6
+ {SPR_FX16, 32771, 12, NULL, S_SOR2FXSPARK2, 0, 0}, // S_SOR2FXSPARK1
+ {SPR_FX16, 32772, 12, NULL, S_SOR2FXSPARK3, 0, 0}, // S_SOR2FXSPARK2
+ {SPR_FX16, 32773, 12, NULL, S_NULL, 0, 0}, // S_SOR2FXSPARK3
+ {SPR_FX11, 32768, 35, NULL, S_SOR2FX2_2, 0, 0}, // S_SOR2FX2_1
+ {SPR_FX11, 32768, 5, A_GenWizard, S_SOR2FX2_3, 0, 0}, // S_SOR2FX2_2
+ {SPR_FX11, 32769, 5, NULL, S_SOR2FX2_2, 0, 0}, // S_SOR2FX2_3
+ {SPR_FX11, 32770, 5, NULL, S_SOR2FXI2_2, 0, 0}, // S_SOR2FXI2_1
+ {SPR_FX11, 32771, 5, NULL, S_SOR2FXI2_3, 0, 0}, // S_SOR2FXI2_2
+ {SPR_FX11, 32772, 5, NULL, S_SOR2FXI2_4, 0, 0}, // S_SOR2FXI2_3
+ {SPR_FX11, 32773, 5, NULL, S_SOR2FXI2_5, 0, 0}, // S_SOR2FXI2_4
+ {SPR_FX11, 32774, 5, NULL, S_NULL, 0, 0}, // S_SOR2FXI2_5
+ {SPR_SOR2, 6, 8, NULL, S_SOR2TELEFADE2, 0, 0}, // S_SOR2TELEFADE1
+ {SPR_SOR2, 7, 6, NULL, S_SOR2TELEFADE3, 0, 0}, // S_SOR2TELEFADE2
+ {SPR_SOR2, 8, 6, NULL, S_SOR2TELEFADE4, 0, 0}, // S_SOR2TELEFADE3
+ {SPR_SOR2, 9, 6, NULL, S_SOR2TELEFADE5, 0, 0}, // S_SOR2TELEFADE4
+ {SPR_SOR2, 10, 6, NULL, S_SOR2TELEFADE6, 0, 0}, // S_SOR2TELEFADE5
+ {SPR_SOR2, 11, 6, NULL, S_NULL, 0, 0}, // S_SOR2TELEFADE6
+ {SPR_MNTR, 0, 10, A_Look, S_MNTR_LOOK2, 0, 0}, // S_MNTR_LOOK1
+ {SPR_MNTR, 1, 10, A_Look, S_MNTR_LOOK1, 0, 0}, // S_MNTR_LOOK2
+ {SPR_MNTR, 0, 5, A_Chase, S_MNTR_WALK2, 0, 0}, // S_MNTR_WALK1
+ {SPR_MNTR, 1, 5, A_Chase, S_MNTR_WALK3, 0, 0}, // S_MNTR_WALK2
+ {SPR_MNTR, 2, 5, A_Chase, S_MNTR_WALK4, 0, 0}, // S_MNTR_WALK3
+ {SPR_MNTR, 3, 5, A_Chase, S_MNTR_WALK1, 0, 0}, // S_MNTR_WALK4
+ {SPR_MNTR, 21, 10, A_FaceTarget, S_MNTR_ATK1_2, 0, 0}, // S_MNTR_ATK1_1
+ {SPR_MNTR, 22, 7, A_FaceTarget, S_MNTR_ATK1_3, 0, 0}, // S_MNTR_ATK1_2
+ {SPR_MNTR, 23, 12, A_MinotaurAtk1, S_MNTR_WALK1, 0, 0}, // S_MNTR_ATK1_3
+ {SPR_MNTR, 21, 10, A_MinotaurDecide, S_MNTR_ATK2_2, 0, 0}, // S_MNTR_ATK2_1
+ {SPR_MNTR, 24, 4, A_FaceTarget, S_MNTR_ATK2_3, 0, 0}, // S_MNTR_ATK2_2
+ {SPR_MNTR, 25, 9, A_MinotaurAtk2, S_MNTR_WALK1, 0, 0}, // S_MNTR_ATK2_3
+ {SPR_MNTR, 21, 10, A_FaceTarget, S_MNTR_ATK3_2, 0, 0}, // S_MNTR_ATK3_1
+ {SPR_MNTR, 22, 7, A_FaceTarget, S_MNTR_ATK3_3, 0, 0}, // S_MNTR_ATK3_2
+ {SPR_MNTR, 23, 12, A_MinotaurAtk3, S_MNTR_WALK1, 0, 0}, // S_MNTR_ATK3_3
+ {SPR_MNTR, 23, 12, NULL, S_MNTR_ATK3_1, 0, 0}, // S_MNTR_ATK3_4
+ {SPR_MNTR, 20, 2, A_MinotaurCharge, S_MNTR_ATK4_1, 0, 0}, // S_MNTR_ATK4_1
+ {SPR_MNTR, 4, 3, NULL, S_MNTR_PAIN2, 0, 0}, // S_MNTR_PAIN1
+ {SPR_MNTR, 4, 6, A_Pain, S_MNTR_WALK1, 0, 0}, // S_MNTR_PAIN2
+ {SPR_MNTR, 5, 6, NULL, S_MNTR_DIE2, 0, 0}, // S_MNTR_DIE1
+ {SPR_MNTR, 6, 5, NULL, S_MNTR_DIE3, 0, 0}, // S_MNTR_DIE2
+ {SPR_MNTR, 7, 6, A_Scream, S_MNTR_DIE4, 0, 0}, // S_MNTR_DIE3
+ {SPR_MNTR, 8, 5, NULL, S_MNTR_DIE5, 0, 0}, // S_MNTR_DIE4
+ {SPR_MNTR, 9, 6, NULL, S_MNTR_DIE6, 0, 0}, // S_MNTR_DIE5
+ {SPR_MNTR, 10, 5, NULL, S_MNTR_DIE7, 0, 0}, // S_MNTR_DIE6
+ {SPR_MNTR, 11, 6, NULL, S_MNTR_DIE8, 0, 0}, // S_MNTR_DIE7
+ {SPR_MNTR, 12, 5, A_NoBlocking, S_MNTR_DIE9, 0, 0}, // S_MNTR_DIE8
+ {SPR_MNTR, 13, 6, NULL, S_MNTR_DIE10, 0, 0}, // S_MNTR_DIE9
+ {SPR_MNTR, 14, 5, NULL, S_MNTR_DIE11, 0, 0}, // S_MNTR_DIE10
+ {SPR_MNTR, 15, 6, NULL, S_MNTR_DIE12, 0, 0}, // S_MNTR_DIE11
+ {SPR_MNTR, 16, 5, NULL, S_MNTR_DIE13, 0, 0}, // S_MNTR_DIE12
+ {SPR_MNTR, 17, 6, NULL, S_MNTR_DIE14, 0, 0}, // S_MNTR_DIE13
+ {SPR_MNTR, 18, 5, NULL, S_MNTR_DIE15, 0, 0}, // S_MNTR_DIE14
+ {SPR_MNTR, 19, -1, A_BossDeath, S_NULL, 0, 0}, // S_MNTR_DIE15
+ {SPR_FX12, 32768, 6, NULL, S_MNTRFX1_2, 0, 0}, // S_MNTRFX1_1
+ {SPR_FX12, 32769, 6, NULL, S_MNTRFX1_1, 0, 0}, // S_MNTRFX1_2
+ {SPR_FX12, 32770, 5, NULL, S_MNTRFXI1_2, 0, 0}, // S_MNTRFXI1_1
+ {SPR_FX12, 32771, 5, NULL, S_MNTRFXI1_3, 0, 0}, // S_MNTRFXI1_2
+ {SPR_FX12, 32772, 5, NULL, S_MNTRFXI1_4, 0, 0}, // S_MNTRFXI1_3
+ {SPR_FX12, 32773, 5, NULL, S_MNTRFXI1_5, 0, 0}, // S_MNTRFXI1_4
+ {SPR_FX12, 32774, 5, NULL, S_MNTRFXI1_6, 0, 0}, // S_MNTRFXI1_5
+ {SPR_FX12, 32775, 5, NULL, S_NULL, 0, 0}, // S_MNTRFXI1_6
+ {SPR_FX13, 0, 2, A_MntrFloorFire, S_MNTRFX2_1, 0, 0}, // S_MNTRFX2_1
+ {SPR_FX13, 32776, 4, A_Explode, S_MNTRFXI2_2, 0, 0}, // S_MNTRFXI2_1
+ {SPR_FX13, 32777, 4, NULL, S_MNTRFXI2_3, 0, 0}, // S_MNTRFXI2_2
+ {SPR_FX13, 32778, 4, NULL, S_MNTRFXI2_4, 0, 0}, // S_MNTRFXI2_3
+ {SPR_FX13, 32779, 4, NULL, S_MNTRFXI2_5, 0, 0}, // S_MNTRFXI2_4
+ {SPR_FX13, 32780, 4, NULL, S_NULL, 0, 0}, // S_MNTRFXI2_5
+ {SPR_FX13, 32771, 4, NULL, S_MNTRFX3_2, 0, 0}, // S_MNTRFX3_1
+ {SPR_FX13, 32770, 4, NULL, S_MNTRFX3_3, 0, 0}, // S_MNTRFX3_2
+ {SPR_FX13, 32769, 5, NULL, S_MNTRFX3_4, 0, 0}, // S_MNTRFX3_3
+ {SPR_FX13, 32770, 5, NULL, S_MNTRFX3_5, 0, 0}, // S_MNTRFX3_4
+ {SPR_FX13, 32771, 5, NULL, S_MNTRFX3_6, 0, 0}, // S_MNTRFX3_5
+ {SPR_FX13, 32772, 5, NULL, S_MNTRFX3_7, 0, 0}, // S_MNTRFX3_6
+ {SPR_FX13, 32773, 4, NULL, S_MNTRFX3_8, 0, 0}, // S_MNTRFX3_7
+ {SPR_FX13, 32774, 4, NULL, S_MNTRFX3_9, 0, 0}, // S_MNTRFX3_8
+ {SPR_FX13, 32775, 4, NULL, S_NULL, 0, 0}, // S_MNTRFX3_9
+ {SPR_AKYY, 32768, 3, NULL, S_AKYY2, 0, 0}, // S_AKYY1
+ {SPR_AKYY, 32769, 3, NULL, S_AKYY3, 0, 0}, // S_AKYY2
+ {SPR_AKYY, 32770, 3, NULL, S_AKYY4, 0, 0}, // S_AKYY3
+ {SPR_AKYY, 32771, 3, NULL, S_AKYY5, 0, 0}, // S_AKYY4
+ {SPR_AKYY, 32772, 3, NULL, S_AKYY6, 0, 0}, // S_AKYY5
+ {SPR_AKYY, 32773, 3, NULL, S_AKYY7, 0, 0}, // S_AKYY6
+ {SPR_AKYY, 32774, 3, NULL, S_AKYY8, 0, 0}, // S_AKYY7
+ {SPR_AKYY, 32775, 3, NULL, S_AKYY9, 0, 0}, // S_AKYY8
+ {SPR_AKYY, 32776, 3, NULL, S_AKYY10, 0, 0}, // S_AKYY9
+ {SPR_AKYY, 32777, 3, NULL, S_AKYY1, 0, 0}, // S_AKYY10
+ {SPR_BKYY, 32768, 3, NULL, S_BKYY2, 0, 0}, // S_BKYY1
+ {SPR_BKYY, 32769, 3, NULL, S_BKYY3, 0, 0}, // S_BKYY2
+ {SPR_BKYY, 32770, 3, NULL, S_BKYY4, 0, 0}, // S_BKYY3
+ {SPR_BKYY, 32771, 3, NULL, S_BKYY5, 0, 0}, // S_BKYY4
+ {SPR_BKYY, 32772, 3, NULL, S_BKYY6, 0, 0}, // S_BKYY5
+ {SPR_BKYY, 32773, 3, NULL, S_BKYY7, 0, 0}, // S_BKYY6
+ {SPR_BKYY, 32774, 3, NULL, S_BKYY8, 0, 0}, // S_BKYY7
+ {SPR_BKYY, 32775, 3, NULL, S_BKYY9, 0, 0}, // S_BKYY8
+ {SPR_BKYY, 32776, 3, NULL, S_BKYY10, 0, 0}, // S_BKYY9
+ {SPR_BKYY, 32777, 3, NULL, S_BKYY1, 0, 0}, // S_BKYY10
+ {SPR_CKYY, 32768, 3, NULL, S_CKYY2, 0, 0}, // S_CKYY1
+ {SPR_CKYY, 32769, 3, NULL, S_CKYY3, 0, 0}, // S_CKYY2
+ {SPR_CKYY, 32770, 3, NULL, S_CKYY4, 0, 0}, // S_CKYY3
+ {SPR_CKYY, 32771, 3, NULL, S_CKYY5, 0, 0}, // S_CKYY4
+ {SPR_CKYY, 32772, 3, NULL, S_CKYY6, 0, 0}, // S_CKYY5
+ {SPR_CKYY, 32773, 3, NULL, S_CKYY7, 0, 0}, // S_CKYY6
+ {SPR_CKYY, 32774, 3, NULL, S_CKYY8, 0, 0}, // S_CKYY7
+ {SPR_CKYY, 32775, 3, NULL, S_CKYY9, 0, 0}, // S_CKYY8
+ {SPR_CKYY, 32776, 3, NULL, S_CKYY1, 0, 0}, // S_CKYY9
+ {SPR_AMG1, 0, -1, NULL, S_NULL, 0, 0}, // S_AMG1
+ {SPR_AMG2, 0, 4, NULL, S_AMG2_2, 0, 0}, // S_AMG2_1
+ {SPR_AMG2, 1, 4, NULL, S_AMG2_3, 0, 0}, // S_AMG2_2
+ {SPR_AMG2, 2, 4, NULL, S_AMG2_1, 0, 0}, // S_AMG2_3
+ {SPR_AMM1, 0, -1, NULL, S_NULL, 0, 0}, // S_AMM1
+ {SPR_AMM2, 0, -1, NULL, S_NULL, 0, 0}, // S_AMM2
+ {SPR_AMC1, 0, -1, NULL, S_NULL, 0, 0}, // S_AMC1
+ {SPR_AMC2, 0, 5, NULL, S_AMC2_2, 0, 0}, // S_AMC2_1
+ {SPR_AMC2, 1, 5, NULL, S_AMC2_3, 0, 0}, // S_AMC2_2
+ {SPR_AMC2, 2, 5, NULL, S_AMC2_1, 0, 0}, // S_AMC2_3
+ {SPR_AMS1, 0, 5, NULL, S_AMS1_2, 0, 0}, // S_AMS1_1
+ {SPR_AMS1, 1, 5, NULL, S_AMS1_1, 0, 0}, // S_AMS1_2
+ {SPR_AMS2, 0, 5, NULL, S_AMS2_2, 0, 0}, // S_AMS2_1
+ {SPR_AMS2, 1, 5, NULL, S_AMS2_1, 0, 0}, // S_AMS2_2
+ {SPR_AMP1, 0, 4, NULL, S_AMP1_2, 0, 0}, // S_AMP1_1
+ {SPR_AMP1, 1, 4, NULL, S_AMP1_3, 0, 0}, // S_AMP1_2
+ {SPR_AMP1, 2, 4, NULL, S_AMP1_1, 0, 0}, // S_AMP1_3
+ {SPR_AMP2, 0, 4, NULL, S_AMP2_2, 0, 0}, // S_AMP2_1
+ {SPR_AMP2, 1, 4, NULL, S_AMP2_3, 0, 0}, // S_AMP2_2
+ {SPR_AMP2, 2, 4, NULL, S_AMP2_1, 0, 0}, // S_AMP2_3
+ {SPR_AMB1, 0, 4, NULL, S_AMB1_2, 0, 0}, // S_AMB1_1
+ {SPR_AMB1, 1, 4, NULL, S_AMB1_3, 0, 0}, // S_AMB1_2
+ {SPR_AMB1, 2, 4, NULL, S_AMB1_1, 0, 0}, // S_AMB1_3
+ {SPR_AMB2, 0, 4, NULL, S_AMB2_2, 0, 0}, // S_AMB2_1
+ {SPR_AMB2, 1, 4, NULL, S_AMB2_3, 0, 0}, // S_AMB2_2
+ {SPR_AMB2, 2, 4, NULL, S_AMB2_1, 0, 0}, // S_AMB2_3
+ {SPR_AMG1, 0, 100, A_ESound, S_SND_WIND, 0, 0}, // S_SND_WIND
+ {SPR_AMG1, 0, 85, A_ESound, S_SND_WATERFALL, 0, 0} // S_SND_WATERFALL
};
mobjinfo_t mobjinfo[NUMMOBJTYPES] = {
-{ // MT_MISC0
-81, // doomednum
-S_ITEM_PTN1_1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_MISC0
+ 81, // doomednum
+ S_ITEM_PTN1_1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_ITEMSHIELD1
-85, // doomednum
-S_ITEM_SHLD1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_ITEMSHIELD1
+ 85, // doomednum
+ S_ITEM_SHLD1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_ITEMSHIELD2
-31, // doomednum
-S_ITEM_SHD2_1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_ITEMSHIELD2
+ 31, // doomednum
+ S_ITEM_SHD2_1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_MISC1
-8, // doomednum
-S_ITEM_BAGH1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_MISC1
+ 8, // doomednum
+ S_ITEM_BAGH1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_MISC2
-35, // doomednum
-S_ITEM_SPMP1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_MISC2
+ 35, // doomednum
+ S_ITEM_SPMP1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_ARTIINVISIBILITY
-75, // doomednum
-S_ARTI_INVS1, // 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, // crashstate
-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_SHADOW|MF_COUNTITEM, // flags
-MF2_FLOATBOB // flags2
- },
+ { // MT_ARTIINVISIBILITY
+ 75, // doomednum
+ S_ARTI_INVS1, // 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, // crashstate
+ 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_SHADOW | MF_COUNTITEM, // flags
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_MISC3
-82, // doomednum
-S_ARTI_PTN2_1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_MISC3
+ 82, // doomednum
+ S_ARTI_PTN2_1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_ARTIFLY
-83, // doomednum
-S_ARTI_SOAR1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_ARTIFLY
+ 83, // doomednum
+ S_ARTI_SOAR1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_ARTIINVULNERABILITY
-84, // doomednum
-S_ARTI_INVU1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_ARTIINVULNERABILITY
+ 84, // doomednum
+ S_ARTI_INVU1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_ARTITOMEOFPOWER
-86, // doomednum
-S_ARTI_PWBK1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_ARTITOMEOFPOWER
+ 86, // doomednum
+ S_ARTI_PWBK1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_ARTIEGG
-30, // doomednum
-S_ARTI_EGGC1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_ARTIEGG
+ 30, // doomednum
+ S_ARTI_EGGC1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_EGGFX
--1, // doomednum
-S_EGGFX1, // 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_NULL, // crashstate
-S_EGGFXI1_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-18*FRACUNIT, // speed
-8*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-1, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_EGGFX
+ -1, // doomednum
+ S_EGGFX1, // 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_NULL, // crashstate
+ S_EGGFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 18 * FRACUNIT, // speed
+ 8 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 1, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_ARTISUPERHEAL
-32, // doomednum
-S_ARTI_SPHL1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_ARTISUPERHEAL
+ 32, // doomednum
+ S_ARTI_SPHL1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_MISC4
-33, // doomednum
-S_ARTI_TRCH1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_MISC4
+ 33, // doomednum
+ S_ARTI_TRCH1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_MISC5
-34, // doomednum
-S_ARTI_FBMB1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_MISC5
+ 34, // doomednum
+ S_ARTI_FBMB1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_FIREBOMB
--1, // doomednum
-S_FIREBOMB1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_phohit, // deathsound
-0, // speed
-20*FRACUNIT, // radius
-16*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_NOGRAVITY|MF_SHADOW, // flags
-0 // flags2
- },
+ { // MT_FIREBOMB
+ -1, // doomednum
+ S_FIREBOMB1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_phohit, // deathsound
+ 0, // speed
+ 20 * FRACUNIT, // radius
+ 16 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_NOGRAVITY | MF_SHADOW, // flags
+ 0 // flags2
+ },
-{ // MT_ARTITELEPORT
-36, // doomednum
-S_ARTI_ATLP1, // 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, // crashstate
-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
-MF2_FLOATBOB // flags2
- },
+ { // MT_ARTITELEPORT
+ 36, // doomednum
+ S_ARTI_ATLP1, // 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, // crashstate
+ 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
+ MF2_FLOATBOB // flags2
+ },
-{ // MT_POD
-2035, // doomednum
-S_POD_WAIT1, // spawnstate
-45, // spawnhealth
-S_NULL, // seestate
-sfx_None, // seesound
-8, // reactiontime
-sfx_None, // attacksound
-S_POD_PAIN1, // painstate
-255, // painchance
-sfx_None, // painsound
-S_NULL, // meleestate
-S_NULL, // missilestate
-S_NULL, // crashstate
-S_POD_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_podexp, // deathsound
-0, // speed
-16*FRACUNIT, // radius
-54*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID|MF_NOBLOOD|MF_SHOOTABLE|MF_DROPOFF, // flags
-MF2_WINDTHRUST|MF2_PUSHABLE|MF2_SLIDE|MF2_PASSMOBJ|MF2_TELESTOMP // flags2
- },
+ { // MT_POD
+ 2035, // doomednum
+ S_POD_WAIT1, // spawnstate
+ 45, // spawnhealth
+ S_NULL, // seestate
+ sfx_None, // seesound
+ 8, // reactiontime
+ sfx_None, // attacksound
+ S_POD_PAIN1, // painstate
+ 255, // painchance
+ sfx_None, // painsound
+ S_NULL, // meleestate
+ S_NULL, // missilestate
+ S_NULL, // crashstate
+ S_POD_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_podexp, // deathsound
+ 0, // speed
+ 16 * FRACUNIT, // radius
+ 54 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID | MF_NOBLOOD | MF_SHOOTABLE | MF_DROPOFF, // flags
+ MF2_WINDTHRUST | MF2_PUSHABLE | MF2_SLIDE | MF2_PASSMOBJ | MF2_TELESTOMP // flags2
+ },
-{ // MT_PODGOO
--1, // doomednum
-S_PODGOO1, // 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, // crashstate
-S_PODGOOX, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-2*FRACUNIT, // radius
-4*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF, // flags
-MF2_NOTELEPORT|MF2_LOGRAV|MF2_CANNOTPUSH // flags2
- },
+ { // MT_PODGOO
+ -1, // doomednum
+ S_PODGOO1, // 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, // crashstate
+ S_PODGOOX, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 2 * FRACUNIT, // radius
+ 4 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF, // flags
+ MF2_NOTELEPORT | MF2_LOGRAV | MF2_CANNOTPUSH // flags2
+ },
-{ // MT_PODGENERATOR
-43, // doomednum
-S_PODGENERATOR, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_PODGENERATOR
+ 43, // doomednum
+ S_PODGENERATOR, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_SPLASH
--1, // doomednum
-S_SPLASH1, // 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, // crashstate
-S_SPLASHX, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-2*FRACUNIT, // radius
-4*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF, // flags
-MF2_NOTELEPORT|MF2_LOGRAV|MF2_CANNOTPUSH // flags2
- },
+ { // MT_SPLASH
+ -1, // doomednum
+ S_SPLASH1, // 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, // crashstate
+ S_SPLASHX, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 2 * FRACUNIT, // radius
+ 4 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF, // flags
+ MF2_NOTELEPORT | MF2_LOGRAV | MF2_CANNOTPUSH // flags2
+ },
-{ // MT_SPLASHBASE
--1, // doomednum
-S_SPLASHBASE1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_SPLASHBASE
+ -1, // doomednum
+ S_SPLASHBASE1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_LAVASPLASH
--1, // doomednum
-S_LAVASPLASH1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_LAVASPLASH
+ -1, // doomednum
+ S_LAVASPLASH1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_LAVASMOKE
--1, // doomednum
-S_LAVASMOKE1, // 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, // crashstate
-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|MF_SHADOW, // flags
-0 // flags2
- },
+ { // MT_LAVASMOKE
+ -1, // doomednum
+ S_LAVASMOKE1, // 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, // crashstate
+ 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 | MF_SHADOW, // flags
+ 0 // flags2
+ },
-{ // MT_SLUDGECHUNK
--1, // doomednum
-S_SLUDGECHUNK1, // 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, // crashstate
-S_SLUDGECHUNKX, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-2*FRACUNIT, // radius
-4*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF, // flags
-MF2_NOTELEPORT|MF2_LOGRAV|MF2_CANNOTPUSH // flags2
- },
+ { // MT_SLUDGECHUNK
+ -1, // doomednum
+ S_SLUDGECHUNK1, // 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, // crashstate
+ S_SLUDGECHUNKX, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 2 * FRACUNIT, // radius
+ 4 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF, // flags
+ MF2_NOTELEPORT | MF2_LOGRAV | MF2_CANNOTPUSH // flags2
+ },
-{ // MT_SLUDGESPLASH
--1, // doomednum
-S_SLUDGESPLASH1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_SLUDGESPLASH
+ -1, // doomednum
+ S_SLUDGESPLASH1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_SKULLHANG70
-17, // doomednum
-S_SKULLHANG70_1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-20*FRACUNIT, // radius
-70*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SPAWNCEILING|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_SKULLHANG70
+ 17, // doomednum
+ S_SKULLHANG70_1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 20 * FRACUNIT, // radius
+ 70 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SPAWNCEILING | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_SKULLHANG60
-24, // doomednum
-S_SKULLHANG60_1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-20*FRACUNIT, // radius
-60*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SPAWNCEILING|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_SKULLHANG60
+ 24, // doomednum
+ S_SKULLHANG60_1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 20 * FRACUNIT, // radius
+ 60 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SPAWNCEILING | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_SKULLHANG45
-25, // doomednum
-S_SKULLHANG45_1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-20*FRACUNIT, // radius
-45*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SPAWNCEILING|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_SKULLHANG45
+ 25, // doomednum
+ S_SKULLHANG45_1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 20 * FRACUNIT, // radius
+ 45 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SPAWNCEILING | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_SKULLHANG35
-26, // doomednum
-S_SKULLHANG35_1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-20*FRACUNIT, // radius
-35*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SPAWNCEILING|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_SKULLHANG35
+ 26, // doomednum
+ S_SKULLHANG35_1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 20 * FRACUNIT, // radius
+ 35 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SPAWNCEILING | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_CHANDELIER
-28, // doomednum
-S_CHANDELIER1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-20*FRACUNIT, // radius
-60*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SPAWNCEILING|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_CHANDELIER
+ 28, // doomednum
+ S_CHANDELIER1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 20 * FRACUNIT, // radius
+ 60 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SPAWNCEILING | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_SERPTORCH
-27, // doomednum
-S_SERPTORCH1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-12*FRACUNIT, // radius
-54*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_SERPTORCH
+ 27, // doomednum
+ S_SERPTORCH1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 12 * FRACUNIT, // radius
+ 54 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_SMALLPILLAR
-29, // doomednum
-S_SMALLPILLAR, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-16*FRACUNIT, // radius
-34*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_SMALLPILLAR
+ 29, // doomednum
+ S_SMALLPILLAR, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 16 * FRACUNIT, // radius
+ 34 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_STALAGMITESMALL
-37, // doomednum
-S_STALAGMITESMALL, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-8*FRACUNIT, // radius
-32*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_STALAGMITESMALL
+ 37, // doomednum
+ S_STALAGMITESMALL, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 8 * FRACUNIT, // radius
+ 32 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_STALAGMITELARGE
-38, // doomednum
-S_STALAGMITELARGE, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-12*FRACUNIT, // radius
-64*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_STALAGMITELARGE
+ 38, // doomednum
+ S_STALAGMITELARGE, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 12 * FRACUNIT, // radius
+ 64 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_STALACTITESMALL
-39, // doomednum
-S_STALACTITESMALL, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-8*FRACUNIT, // radius
-36*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_STALACTITESMALL
+ 39, // doomednum
+ S_STALACTITESMALL, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 8 * FRACUNIT, // radius
+ 36 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_STALACTITELARGE
-40, // doomednum
-S_STALACTITELARGE, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-12*FRACUNIT, // radius
-68*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_STALACTITELARGE
+ 40, // doomednum
+ S_STALACTITELARGE, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 12 * FRACUNIT, // radius
+ 68 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_MISC6
-76, // doomednum
-S_FIREBRAZIER1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-16*FRACUNIT, // radius
-44*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_MISC6
+ 76, // doomednum
+ S_FIREBRAZIER1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 16 * FRACUNIT, // radius
+ 44 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_BARREL
-44, // doomednum
-S_BARREL, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-12*FRACUNIT, // radius
-32*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_BARREL
+ 44, // doomednum
+ S_BARREL, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 12 * FRACUNIT, // radius
+ 32 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_MISC7
-47, // doomednum
-S_BRPILLAR, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-14*FRACUNIT, // radius
-128*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_MISC7
+ 47, // doomednum
+ S_BRPILLAR, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 14 * FRACUNIT, // radius
+ 128 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_MISC8
-48, // doomednum
-S_MOSS1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-20*FRACUNIT, // radius
-23*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SPAWNCEILING|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_MISC8
+ 48, // doomednum
+ S_MOSS1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 20 * FRACUNIT, // radius
+ 23 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SPAWNCEILING | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_MISC9
-49, // doomednum
-S_MOSS2, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-20*FRACUNIT, // radius
-27*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SPAWNCEILING|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_MISC9
+ 49, // doomednum
+ S_MOSS2, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 20 * FRACUNIT, // radius
+ 27 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SPAWNCEILING | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_MISC10
-50, // doomednum
-S_WALLTORCH1, // 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, // crashstate
-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_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_MISC10
+ 50, // doomednum
+ S_WALLTORCH1, // 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, // crashstate
+ 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_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_MISC11
-51, // doomednum
-S_HANGINGCORPSE, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-8*FRACUNIT, // radius
-104*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_MISC11
+ 51, // doomednum
+ S_HANGINGCORPSE, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 8 * FRACUNIT, // radius
+ 104 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_KEYGIZMOBLUE
-94, // doomednum
-S_KEYGIZMO1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-16*FRACUNIT, // radius
-50*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_KEYGIZMOBLUE
+ 94, // doomednum
+ S_KEYGIZMO1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 16 * FRACUNIT, // radius
+ 50 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_KEYGIZMOGREEN
-95, // doomednum
-S_KEYGIZMO1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-16*FRACUNIT, // radius
-50*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_KEYGIZMOGREEN
+ 95, // doomednum
+ S_KEYGIZMO1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 16 * FRACUNIT, // radius
+ 50 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_KEYGIZMOYELLOW
-96, // doomednum
-S_KEYGIZMO1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-16*FRACUNIT, // radius
-50*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_KEYGIZMOYELLOW
+ 96, // doomednum
+ S_KEYGIZMO1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 16 * FRACUNIT, // radius
+ 50 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_KEYGIZMOFLOAT
--1, // doomednum
-S_KGZ_START, // 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, // crashstate
-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|MF_NOGRAVITY, // flags
-0 // flags2
- },
+ { // MT_KEYGIZMOFLOAT
+ -1, // doomednum
+ S_KGZ_START, // 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, // crashstate
+ 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 | MF_NOGRAVITY, // flags
+ 0 // flags2
+ },
-{ // MT_MISC12
-87, // doomednum
-S_VOLCANO1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-12*FRACUNIT, // radius
-20*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID, // flags
-0 // flags2
- },
+ { // MT_MISC12
+ 87, // doomednum
+ S_VOLCANO1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 12 * FRACUNIT, // radius
+ 20 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID, // flags
+ 0 // flags2
+ },
-{ // MT_VOLCANOBLAST
--1, // doomednum
-S_VOLCANOBALL1, // 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, // crashstate
-S_VOLCANOBALLX1, // deathstate
-S_NULL, // xdeathstate
-sfx_volhit, // deathsound
-2*FRACUNIT, // speed
-8*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-2, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF, // flags
-MF2_LOGRAV|MF2_NOTELEPORT|MF2_FIREDAMAGE // flags2
- },
+ { // MT_VOLCANOBLAST
+ -1, // doomednum
+ S_VOLCANOBALL1, // 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, // crashstate
+ S_VOLCANOBALLX1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_volhit, // deathsound
+ 2 * FRACUNIT, // speed
+ 8 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 2, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF, // flags
+ MF2_LOGRAV | MF2_NOTELEPORT | MF2_FIREDAMAGE // flags2
+ },
-{ // MT_VOLCANOTBLAST
--1, // doomednum
-S_VOLCANOTBALL1, // 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, // crashstate
-S_VOLCANOTBALLX1, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-2*FRACUNIT, // speed
-8*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-1, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF, // flags
-MF2_LOGRAV|MF2_NOTELEPORT|MF2_FIREDAMAGE // flags2
- },
+ { // MT_VOLCANOTBLAST
+ -1, // doomednum
+ S_VOLCANOTBALL1, // 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, // crashstate
+ S_VOLCANOTBALLX1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 2 * FRACUNIT, // speed
+ 8 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 1, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF, // flags
+ MF2_LOGRAV | MF2_NOTELEPORT | MF2_FIREDAMAGE // flags2
+ },
-{ // MT_TELEGLITGEN
-74, // doomednum
-S_TELEGLITGEN1, // 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, // crashstate
-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|MF_NOSECTOR, // flags
-0 // flags2
- },
+ { // MT_TELEGLITGEN
+ 74, // doomednum
+ S_TELEGLITGEN1, // 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, // crashstate
+ 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 | MF_NOSECTOR, // flags
+ 0 // flags2
+ },
-{ // MT_TELEGLITGEN2
-52, // doomednum
-S_TELEGLITGEN2, // 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, // crashstate
-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|MF_NOSECTOR, // flags
-0 // flags2
- },
+ { // MT_TELEGLITGEN2
+ 52, // doomednum
+ S_TELEGLITGEN2, // 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, // crashstate
+ 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 | MF_NOSECTOR, // flags
+ 0 // flags2
+ },
-{ // MT_TELEGLITTER
--1, // doomednum
-S_TELEGLITTER1_1, // 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, // crashstate
-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|MF_MISSILE, // flags
-0 // flags2
- },
+ { // MT_TELEGLITTER
+ -1, // doomednum
+ S_TELEGLITTER1_1, // 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, // crashstate
+ 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 | MF_MISSILE, // flags
+ 0 // flags2
+ },
-{ // MT_TELEGLITTER2
--1, // doomednum
-S_TELEGLITTER2_1, // 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, // crashstate
-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|MF_MISSILE, // flags
-0 // flags2
- },
+ { // MT_TELEGLITTER2
+ -1, // doomednum
+ S_TELEGLITTER2_1, // 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, // crashstate
+ 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 | MF_MISSILE, // flags
+ 0 // flags2
+ },
-{ // MT_TFOG
--1, // doomednum
-S_TFOG1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_TFOG
+ -1, // doomednum
+ S_TFOG1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // 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, // crashstate
-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
-0 // flags2
- },
+ { // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_STAFFPUFF
--1, // doomednum
-S_STAFFPUFF1, // spawnstate
-1000, // spawnhealth
-S_NULL, // seestate
-sfx_None, // seesound
-8, // reactiontime
-sfx_stfhit, // attacksound
-S_NULL, // painstate
-0, // painchance
-sfx_None, // painsound
-S_NULL, // meleestate
-S_NULL, // missilestate
-S_NULL, // crashstate
-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
-0 // flags2
- },
+ { // MT_STAFFPUFF
+ -1, // doomednum
+ S_STAFFPUFF1, // spawnstate
+ 1000, // spawnhealth
+ S_NULL, // seestate
+ sfx_None, // seesound
+ 8, // reactiontime
+ sfx_stfhit, // attacksound
+ S_NULL, // painstate
+ 0, // painchance
+ sfx_None, // painsound
+ S_NULL, // meleestate
+ S_NULL, // missilestate
+ S_NULL, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_STAFFPUFF2
--1, // doomednum
-S_STAFFPUFF2_1, // spawnstate
-1000, // spawnhealth
-S_NULL, // seestate
-sfx_None, // seesound
-8, // reactiontime
-sfx_stfpow, // attacksound
-S_NULL, // painstate
-0, // painchance
-sfx_None, // painsound
-S_NULL, // meleestate
-S_NULL, // missilestate
-S_NULL, // crashstate
-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
-0 // flags2
- },
+ { // MT_STAFFPUFF2
+ -1, // doomednum
+ S_STAFFPUFF2_1, // spawnstate
+ 1000, // spawnhealth
+ S_NULL, // seestate
+ sfx_None, // seesound
+ 8, // reactiontime
+ sfx_stfpow, // attacksound
+ S_NULL, // painstate
+ 0, // painchance
+ sfx_None, // painsound
+ S_NULL, // meleestate
+ S_NULL, // missilestate
+ S_NULL, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_BEAKPUFF
--1, // doomednum
-S_STAFFPUFF1, // spawnstate
-1000, // spawnhealth
-S_NULL, // seestate
-sfx_None, // seesound
-8, // reactiontime
-sfx_chicatk, // attacksound
-S_NULL, // painstate
-0, // painchance
-sfx_None, // painsound
-S_NULL, // meleestate
-S_NULL, // missilestate
-S_NULL, // crashstate
-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
-0 // flags2
- },
+ { // MT_BEAKPUFF
+ -1, // doomednum
+ S_STAFFPUFF1, // spawnstate
+ 1000, // spawnhealth
+ S_NULL, // seestate
+ sfx_None, // seesound
+ 8, // reactiontime
+ sfx_chicatk, // attacksound
+ S_NULL, // painstate
+ 0, // painchance
+ sfx_None, // painsound
+ S_NULL, // meleestate
+ S_NULL, // missilestate
+ S_NULL, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_MISC13
-2005, // doomednum
-S_WGNT, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_MISC13
+ 2005, // doomednum
+ S_WGNT, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_GAUNTLETPUFF1
--1, // doomednum
-S_GAUNTLETPUFF1_1, // 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, // crashstate
-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|MF_SHADOW, // flags
-0 // flags2
- },
+ { // MT_GAUNTLETPUFF1
+ -1, // doomednum
+ S_GAUNTLETPUFF1_1, // 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, // crashstate
+ 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 | MF_SHADOW, // flags
+ 0 // flags2
+ },
-{ // MT_GAUNTLETPUFF2
--1, // doomednum
-S_GAUNTLETPUFF2_1, // 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, // crashstate
-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|MF_SHADOW, // flags
-0 // flags2
- },
+ { // MT_GAUNTLETPUFF2
+ -1, // doomednum
+ S_GAUNTLETPUFF2_1, // 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, // crashstate
+ 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 | MF_SHADOW, // flags
+ 0 // flags2
+ },
-{ // MT_MISC14
-53, // doomednum
-S_BLSR, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_MISC14
+ 53, // doomednum
+ S_BLSR, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_BLASTERFX1
--1, // doomednum
-S_BLASTERFX1_1, // 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, // crashstate
-S_BLASTERFXI1_1, // deathstate
-S_NULL, // xdeathstate
-sfx_blshit, // deathsound
-184*FRACUNIT, // speed
-12*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-2, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_BLASTERFX1
+ -1, // doomednum
+ S_BLASTERFX1_1, // 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, // crashstate
+ S_BLASTERFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_blshit, // deathsound
+ 184 * FRACUNIT, // speed
+ 12 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 2, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_BLASTERSMOKE
--1, // doomednum
-S_BLASTERSMOKE1, // 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, // crashstate
-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|MF_SHADOW, // flags
-MF2_NOTELEPORT|MF2_CANNOTPUSH // flags2
- },
+ { // MT_BLASTERSMOKE
+ -1, // doomednum
+ S_BLASTERSMOKE1, // 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, // crashstate
+ 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 | MF_SHADOW, // flags
+ MF2_NOTELEPORT | MF2_CANNOTPUSH // flags2
+ },
-{ // MT_RIPPER
--1, // doomednum
-S_RIPPER1, // 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_NULL, // crashstate
-S_RIPPERX1, // deathstate
-S_NULL, // xdeathstate
-sfx_hrnhit, // deathsound
-14*FRACUNIT, // speed
-8*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-1, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT|MF2_RIP // flags2
- },
+ { // MT_RIPPER
+ -1, // doomednum
+ S_RIPPER1, // 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_NULL, // crashstate
+ S_RIPPERX1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_hrnhit, // deathsound
+ 14 * FRACUNIT, // speed
+ 8 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 1, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT | MF2_RIP // flags2
+ },
-{ // MT_BLASTERPUFF1
--1, // doomednum
-S_BLASTERPUFF1_1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_BLASTERPUFF1
+ -1, // doomednum
+ S_BLASTERPUFF1_1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_BLASTERPUFF2
--1, // doomednum
-S_BLASTERPUFF2_1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_BLASTERPUFF2
+ -1, // doomednum
+ S_BLASTERPUFF2_1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_WMACE
-2002, // doomednum
-S_WMCE, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_WMACE
+ 2002, // doomednum
+ S_WMCE, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_MACEFX1
--1, // doomednum
-S_MACEFX1_1, // spawnstate
-1000, // spawnhealth
-S_NULL, // seestate
-sfx_lobsht, // seesound
-8, // reactiontime
-sfx_None, // attacksound
-S_NULL, // painstate
-0, // painchance
-sfx_None, // painsound
-S_NULL, // meleestate
-S_NULL, // missilestate
-S_NULL, // crashstate
-S_MACEFXI1_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-20*FRACUNIT, // speed
-8*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-2, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_FLOORBOUNCE|MF2_THRUGHOST|MF2_NOTELEPORT // flags2
- },
+ { // MT_MACEFX1
+ -1, // doomednum
+ S_MACEFX1_1, // spawnstate
+ 1000, // spawnhealth
+ S_NULL, // seestate
+ sfx_lobsht, // seesound
+ 8, // reactiontime
+ sfx_None, // attacksound
+ S_NULL, // painstate
+ 0, // painchance
+ sfx_None, // painsound
+ S_NULL, // meleestate
+ S_NULL, // missilestate
+ S_NULL, // crashstate
+ S_MACEFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 20 * FRACUNIT, // speed
+ 8 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 2, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_FLOORBOUNCE | MF2_THRUGHOST | MF2_NOTELEPORT // flags2
+ },
-{ // MT_MACEFX2
--1, // doomednum
-S_MACEFX2_1, // 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_NULL, // crashstate
-S_MACEFXI2_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-10*FRACUNIT, // speed
-8*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-6, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF, // flags
-MF2_LOGRAV|MF2_FLOORBOUNCE|MF2_THRUGHOST|MF2_NOTELEPORT // flags2
- },
+ { // MT_MACEFX2
+ -1, // doomednum
+ S_MACEFX2_1, // 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_NULL, // crashstate
+ S_MACEFXI2_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 10 * FRACUNIT, // speed
+ 8 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 6, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF, // flags
+ MF2_LOGRAV | MF2_FLOORBOUNCE | MF2_THRUGHOST | MF2_NOTELEPORT // flags2
+ },
-{ // MT_MACEFX3
--1, // doomednum
-S_MACEFX3_1, // 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_NULL, // crashstate
-S_MACEFXI1_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-7*FRACUNIT, // speed
-8*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-4, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF, // flags
-MF2_LOGRAV|MF2_FLOORBOUNCE|MF2_THRUGHOST|MF2_NOTELEPORT // flags2
- },
+ { // MT_MACEFX3
+ -1, // doomednum
+ S_MACEFX3_1, // 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_NULL, // crashstate
+ S_MACEFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 7 * FRACUNIT, // speed
+ 8 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 4, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF, // flags
+ MF2_LOGRAV | MF2_FLOORBOUNCE | MF2_THRUGHOST | MF2_NOTELEPORT // flags2
+ },
-{ // MT_MACEFX4
--1, // doomednum
-S_MACEFX4_1, // 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_NULL, // crashstate
-S_MACEFXI4_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-7*FRACUNIT, // speed
-8*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-18, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF, // flags
-MF2_LOGRAV|MF2_FLOORBOUNCE|MF2_THRUGHOST|MF2_TELESTOMP // flags2
- },
+ { // MT_MACEFX4
+ -1, // doomednum
+ S_MACEFX4_1, // 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_NULL, // crashstate
+ S_MACEFXI4_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 7 * FRACUNIT, // speed
+ 8 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 18, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF, // flags
+ MF2_LOGRAV | MF2_FLOORBOUNCE | MF2_THRUGHOST | MF2_TELESTOMP // flags2
+ },
-{ // MT_WSKULLROD
-2004, // doomednum
-S_WSKL, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_WSKULLROD
+ 2004, // doomednum
+ S_WSKL, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_HORNRODFX1
--1, // doomednum
-S_HRODFX1_1, // spawnstate
-1000, // spawnhealth
-S_NULL, // seestate
-sfx_hrnsht, // seesound
-8, // reactiontime
-sfx_None, // attacksound
-S_NULL, // painstate
-0, // painchance
-sfx_None, // painsound
-S_NULL, // meleestate
-S_NULL, // missilestate
-S_NULL, // crashstate
-S_HRODFXI1_1, // deathstate
-S_NULL, // xdeathstate
-sfx_hrnhit, // deathsound
-22*FRACUNIT, // speed
-12*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-3, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_WINDTHRUST|MF2_NOTELEPORT // flags2
- },
+ { // MT_HORNRODFX1
+ -1, // doomednum
+ S_HRODFX1_1, // spawnstate
+ 1000, // spawnhealth
+ S_NULL, // seestate
+ sfx_hrnsht, // seesound
+ 8, // reactiontime
+ sfx_None, // attacksound
+ S_NULL, // painstate
+ 0, // painchance
+ sfx_None, // painsound
+ S_NULL, // meleestate
+ S_NULL, // missilestate
+ S_NULL, // crashstate
+ S_HRODFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_hrnhit, // deathsound
+ 22 * FRACUNIT, // speed
+ 12 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 3, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_WINDTHRUST | MF2_NOTELEPORT // flags2
+ },
-{ // MT_HORNRODFX2
--1, // doomednum
-S_HRODFX2_1, // spawnstate
-4*35, // spawnhealth
-S_NULL, // seestate
-sfx_hrnsht, // seesound
-8, // reactiontime
-sfx_None, // attacksound
-S_NULL, // painstate
-0, // painchance
-sfx_None, // painsound
-S_NULL, // meleestate
-S_NULL, // missilestate
-S_NULL, // crashstate
-S_HRODFXI2_1, // deathstate
-S_NULL, // xdeathstate
-sfx_ramphit, // deathsound
-22*FRACUNIT, // speed
-12*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-10, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_HORNRODFX2
+ -1, // doomednum
+ S_HRODFX2_1, // spawnstate
+ 4 * 35, // spawnhealth
+ S_NULL, // seestate
+ sfx_hrnsht, // seesound
+ 8, // reactiontime
+ sfx_None, // attacksound
+ S_NULL, // painstate
+ 0, // painchance
+ sfx_None, // painsound
+ S_NULL, // meleestate
+ S_NULL, // missilestate
+ S_NULL, // crashstate
+ S_HRODFXI2_1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_ramphit, // deathsound
+ 22 * FRACUNIT, // speed
+ 12 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 10, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_RAINPLR1
--1, // doomednum
-S_RAINPLR1_1, // 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_NULL, // crashstate
-S_RAINPLR1X_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-12*FRACUNIT, // speed
-5*FRACUNIT, // radius
-12*FRACUNIT, // height
-100, // mass
-5, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_RAINPLR1
+ -1, // doomednum
+ S_RAINPLR1_1, // 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_NULL, // crashstate
+ S_RAINPLR1X_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 12 * FRACUNIT, // speed
+ 5 * FRACUNIT, // radius
+ 12 * FRACUNIT, // height
+ 100, // mass
+ 5, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_RAINPLR2
--1, // doomednum
-S_RAINPLR2_1, // 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_NULL, // crashstate
-S_RAINPLR2X_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-12*FRACUNIT, // speed
-5*FRACUNIT, // radius
-12*FRACUNIT, // height
-100, // mass
-5, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_RAINPLR2
+ -1, // doomednum
+ S_RAINPLR2_1, // 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_NULL, // crashstate
+ S_RAINPLR2X_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 12 * FRACUNIT, // speed
+ 5 * FRACUNIT, // radius
+ 12 * FRACUNIT, // height
+ 100, // mass
+ 5, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_RAINPLR3
--1, // doomednum
-S_RAINPLR3_1, // 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_NULL, // crashstate
-S_RAINPLR3X_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-12*FRACUNIT, // speed
-5*FRACUNIT, // radius
-12*FRACUNIT, // height
-100, // mass
-5, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_RAINPLR3
+ -1, // doomednum
+ S_RAINPLR3_1, // 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_NULL, // crashstate
+ S_RAINPLR3X_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 12 * FRACUNIT, // speed
+ 5 * FRACUNIT, // radius
+ 12 * FRACUNIT, // height
+ 100, // mass
+ 5, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_RAINPLR4
--1, // doomednum
-S_RAINPLR4_1, // 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_NULL, // crashstate
-S_RAINPLR4X_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-12*FRACUNIT, // speed
-5*FRACUNIT, // radius
-12*FRACUNIT, // height
-100, // mass
-5, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_RAINPLR4
+ -1, // doomednum
+ S_RAINPLR4_1, // 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_NULL, // crashstate
+ S_RAINPLR4X_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 12 * FRACUNIT, // speed
+ 5 * FRACUNIT, // radius
+ 12 * FRACUNIT, // height
+ 100, // mass
+ 5, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_GOLDWANDFX1
--1, // doomednum
-S_GWANDFX1_1, // 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_NULL, // crashstate
-S_GWANDFXI1_1, // deathstate
-S_NULL, // xdeathstate
-sfx_gldhit, // deathsound
-22*FRACUNIT, // speed
-10*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-2, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_GOLDWANDFX1
+ -1, // doomednum
+ S_GWANDFX1_1, // 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_NULL, // crashstate
+ S_GWANDFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_gldhit, // deathsound
+ 22 * FRACUNIT, // speed
+ 10 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 2, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_GOLDWANDFX2
--1, // doomednum
-S_GWANDFX2_1, // 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_NULL, // crashstate
-S_GWANDFXI1_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-18*FRACUNIT, // speed
-10*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-1, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_GOLDWANDFX2
+ -1, // doomednum
+ S_GWANDFX2_1, // 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_NULL, // crashstate
+ S_GWANDFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 18 * FRACUNIT, // speed
+ 10 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 1, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_GOLDWANDPUFF1
--1, // doomednum
-S_GWANDPUFF1_1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_GOLDWANDPUFF1
+ -1, // doomednum
+ S_GWANDPUFF1_1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_GOLDWANDPUFF2
--1, // doomednum
-S_GWANDFXI1_1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_GOLDWANDPUFF2
+ -1, // doomednum
+ S_GWANDFXI1_1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_WPHOENIXROD
-2003, // doomednum
-S_WPHX, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_WPHOENIXROD
+ 2003, // doomednum
+ S_WPHX, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_PHOENIXFX1
--1, // doomednum
-S_PHOENIXFX1_1, // spawnstate
-1000, // spawnhealth
-S_NULL, // seestate
-sfx_phosht, // seesound
-8, // reactiontime
-sfx_None, // attacksound
-S_NULL, // painstate
-0, // painchance
-sfx_None, // painsound
-S_NULL, // meleestate
-S_NULL, // missilestate
-S_NULL, // crashstate
-S_PHOENIXFXI1_1, // deathstate
-S_NULL, // xdeathstate
-sfx_phohit, // 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
-MF2_THRUGHOST|MF2_NOTELEPORT // flags2
- },
+ { // MT_PHOENIXFX1
+ -1, // doomednum
+ S_PHOENIXFX1_1, // spawnstate
+ 1000, // spawnhealth
+ S_NULL, // seestate
+ sfx_phosht, // seesound
+ 8, // reactiontime
+ sfx_None, // attacksound
+ S_NULL, // painstate
+ 0, // painchance
+ sfx_None, // painsound
+ S_NULL, // meleestate
+ S_NULL, // missilestate
+ S_NULL, // crashstate
+ S_PHOENIXFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_phohit, // 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
+ MF2_THRUGHOST | MF2_NOTELEPORT // flags2
+ },
-{ // MT_PHOENIXPUFF
--1, // doomednum
-S_PHOENIXPUFF1, // 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, // crashstate
-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|MF_SHADOW, // flags
-MF2_NOTELEPORT|MF2_CANNOTPUSH // flags2
- },
+ { // MT_PHOENIXPUFF
+ -1, // doomednum
+ S_PHOENIXPUFF1, // 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, // crashstate
+ 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 | MF_SHADOW, // flags
+ MF2_NOTELEPORT | MF2_CANNOTPUSH // flags2
+ },
-{ // MT_PHOENIXFX2
--1, // doomednum
-S_PHOENIXFX2_1, // 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_NULL, // crashstate
-S_PHOENIXFXI2_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-10*FRACUNIT, // speed
-6*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-2, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT|MF2_FIREDAMAGE // flags2
- },
+ { // MT_PHOENIXFX2
+ -1, // doomednum
+ S_PHOENIXFX2_1, // 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_NULL, // crashstate
+ S_PHOENIXFXI2_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 10 * FRACUNIT, // speed
+ 6 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 2, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT | MF2_FIREDAMAGE // flags2
+ },
-{ // MT_MISC15
-2001, // doomednum
-S_WBOW, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_MISC15
+ 2001, // doomednum
+ S_WBOW, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_CRBOWFX1
--1, // doomednum
-S_CRBOWFX1, // spawnstate
-1000, // spawnhealth
-S_NULL, // seestate
-sfx_bowsht, // seesound
-8, // reactiontime
-sfx_None, // attacksound
-S_NULL, // painstate
-0, // painchance
-sfx_None, // painsound
-S_NULL, // meleestate
-S_NULL, // missilestate
-S_NULL, // crashstate
-S_CRBOWFXI1_1, // deathstate
-S_NULL, // xdeathstate
-sfx_hrnhit, // deathsound
-30*FRACUNIT, // speed
-11*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-10, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_CRBOWFX1
+ -1, // doomednum
+ S_CRBOWFX1, // spawnstate
+ 1000, // spawnhealth
+ S_NULL, // seestate
+ sfx_bowsht, // seesound
+ 8, // reactiontime
+ sfx_None, // attacksound
+ S_NULL, // painstate
+ 0, // painchance
+ sfx_None, // painsound
+ S_NULL, // meleestate
+ S_NULL, // missilestate
+ S_NULL, // crashstate
+ S_CRBOWFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_hrnhit, // deathsound
+ 30 * FRACUNIT, // speed
+ 11 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 10, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_CRBOWFX2
--1, // doomednum
-S_CRBOWFX2, // spawnstate
-1000, // spawnhealth
-S_NULL, // seestate
-sfx_bowsht, // seesound
-8, // reactiontime
-sfx_None, // attacksound
-S_NULL, // painstate
-0, // painchance
-sfx_None, // painsound
-S_NULL, // meleestate
-S_NULL, // missilestate
-S_NULL, // crashstate
-S_CRBOWFXI1_1, // deathstate
-S_NULL, // xdeathstate
-sfx_hrnhit, // deathsound
-32*FRACUNIT, // speed
-11*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-6, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_CRBOWFX2
+ -1, // doomednum
+ S_CRBOWFX2, // spawnstate
+ 1000, // spawnhealth
+ S_NULL, // seestate
+ sfx_bowsht, // seesound
+ 8, // reactiontime
+ sfx_None, // attacksound
+ S_NULL, // painstate
+ 0, // painchance
+ sfx_None, // painsound
+ S_NULL, // meleestate
+ S_NULL, // missilestate
+ S_NULL, // crashstate
+ S_CRBOWFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_hrnhit, // deathsound
+ 32 * FRACUNIT, // speed
+ 11 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 6, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_CRBOWFX3
--1, // doomednum
-S_CRBOWFX3, // 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_NULL, // crashstate
-S_CRBOWFXI3_1, // deathstate
-S_NULL, // xdeathstate
-sfx_hrnhit, // deathsound
-20*FRACUNIT, // speed
-11*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-2, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_WINDTHRUST|MF2_THRUGHOST|MF2_NOTELEPORT // flags2
- },
+ { // MT_CRBOWFX3
+ -1, // doomednum
+ S_CRBOWFX3, // 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_NULL, // crashstate
+ S_CRBOWFXI3_1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_hrnhit, // deathsound
+ 20 * FRACUNIT, // speed
+ 11 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 2, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_WINDTHRUST | MF2_THRUGHOST | MF2_NOTELEPORT // flags2
+ },
-{ // MT_CRBOWFX4
--1, // doomednum
-S_CRBOWFX4_1, // 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, // crashstate
-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
-MF2_LOGRAV // flags2
- },
+ { // MT_CRBOWFX4
+ -1, // doomednum
+ S_CRBOWFX4_1, // 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, // crashstate
+ 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
+ MF2_LOGRAV // flags2
+ },
-{ // 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, // crashstate
-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
-0 // flags2
- },
+ { // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_BLOODSPLATTER
--1, // doomednum
-S_BLOODSPLATTER1, // 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, // crashstate
-S_BLOODSPLATTERX, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-2*FRACUNIT, // radius
-4*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF, // flags
-MF2_NOTELEPORT|MF2_CANNOTPUSH // flags2
- },
+ { // MT_BLOODSPLATTER
+ -1, // doomednum
+ S_BLOODSPLATTER1, // 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, // crashstate
+ S_BLOODSPLATTERX, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 2 * FRACUNIT, // radius
+ 4 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF, // flags
+ MF2_NOTELEPORT | MF2_CANNOTPUSH // flags2
+ },
-{ // 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_plrpai, // painsound
-S_NULL, // meleestate
-S_PLAY_ATK1, // missilestate
-S_NULL, // crashstate
-S_PLAY_DIE1, // deathstate
-S_PLAY_XDIE1, // xdeathstate
-sfx_plrdth, // 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
-MF2_WINDTHRUST|MF2_FOOTCLIP|MF2_SLIDE|MF2_PASSMOBJ|MF2_TELESTOMP // flags2
- },
+ { // 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_plrpai, // painsound
+ S_NULL, // meleestate
+ S_PLAY_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_PLAY_DIE1, // deathstate
+ S_PLAY_XDIE1, // xdeathstate
+ sfx_plrdth, // 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
+ MF2_WINDTHRUST | MF2_FOOTCLIP | MF2_SLIDE | MF2_PASSMOBJ | MF2_TELESTOMP // flags2
+ },
-{ // MT_BLOODYSKULL
--1, // doomednum
-S_BLOODYSKULL1, // 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, // crashstate
-S_NULL, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-4*FRACUNIT, // radius
-4*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_DROPOFF, // flags
-MF2_LOGRAV|MF2_CANNOTPUSH // flags2
- },
+ { // MT_BLOODYSKULL
+ -1, // doomednum
+ S_BLOODYSKULL1, // 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, // crashstate
+ S_NULL, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 4 * FRACUNIT, // radius
+ 4 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_DROPOFF, // flags
+ MF2_LOGRAV | MF2_CANNOTPUSH // flags2
+ },
-{ // MT_CHICPLAYER
--1, // doomednum
-S_CHICPLAY, // spawnstate
-100, // spawnhealth
-S_CHICPLAY_RUN1, // seestate
-sfx_None, // seesound
-0, // reactiontime
-sfx_None, // attacksound
-S_CHICPLAY_PAIN, // painstate
-255, // painchance
-sfx_chicpai, // painsound
-S_NULL, // meleestate
-S_CHICPLAY_ATK1, // missilestate
-S_NULL, // crashstate
-S_CHICKEN_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_chicdth, // deathsound
-0, // speed
-16*FRACUNIT, // radius
-24*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_NOTDMATCH, // flags
-MF2_WINDTHRUST|MF2_SLIDE|MF2_PASSMOBJ|MF2_FOOTCLIP|MF2_LOGRAV|MF2_TELESTOMP // flags2
- },
+ { // MT_CHICPLAYER
+ -1, // doomednum
+ S_CHICPLAY, // spawnstate
+ 100, // spawnhealth
+ S_CHICPLAY_RUN1, // seestate
+ sfx_None, // seesound
+ 0, // reactiontime
+ sfx_None, // attacksound
+ S_CHICPLAY_PAIN, // painstate
+ 255, // painchance
+ sfx_chicpai, // painsound
+ S_NULL, // meleestate
+ S_CHICPLAY_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_CHICKEN_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_chicdth, // deathsound
+ 0, // speed
+ 16 * FRACUNIT, // radius
+ 24 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_DROPOFF | MF_NOTDMATCH, // flags
+ MF2_WINDTHRUST | MF2_SLIDE | MF2_PASSMOBJ | MF2_FOOTCLIP | MF2_LOGRAV | MF2_TELESTOMP // flags2
+ },
-{ // MT_CHICKEN
--1, // doomednum
-S_CHICKEN_LOOK1, // spawnstate
-10, // spawnhealth
-S_CHICKEN_WALK1, // seestate
-sfx_chicpai, // seesound
-8, // reactiontime
-sfx_chicatk, // attacksound
-S_CHICKEN_PAIN1, // painstate
-200, // painchance
-sfx_chicpai, // painsound
-S_CHICKEN_ATK1, // meleestate
-0, // missilestate
-S_NULL, // crashstate
-S_CHICKEN_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_chicdth, // deathsound
-4, // speed
-9*FRACUNIT, // radius
-22*FRACUNIT, // height
-40, // mass
-0, // damage
-sfx_chicact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_DROPOFF, // flags
-MF2_WINDTHRUST|MF2_FOOTCLIP|MF2_PASSMOBJ // flags2
- },
+ { // MT_CHICKEN
+ -1, // doomednum
+ S_CHICKEN_LOOK1, // spawnstate
+ 10, // spawnhealth
+ S_CHICKEN_WALK1, // seestate
+ sfx_chicpai, // seesound
+ 8, // reactiontime
+ sfx_chicatk, // attacksound
+ S_CHICKEN_PAIN1, // painstate
+ 200, // painchance
+ sfx_chicpai, // painsound
+ S_CHICKEN_ATK1, // meleestate
+ 0, // missilestate
+ S_NULL, // crashstate
+ S_CHICKEN_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_chicdth, // deathsound
+ 4, // speed
+ 9 * FRACUNIT, // radius
+ 22 * FRACUNIT, // height
+ 40, // mass
+ 0, // damage
+ sfx_chicact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL | MF_DROPOFF, // flags
+ MF2_WINDTHRUST | MF2_FOOTCLIP | MF2_PASSMOBJ // flags2
+ },
-{ // MT_FEATHER
--1, // doomednum
-S_FEATHER1, // 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, // crashstate
-S_FEATHERX, // deathstate
-S_NULL, // xdeathstate
-sfx_None, // deathsound
-0, // speed
-2*FRACUNIT, // radius
-4*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF, // flags
-MF2_NOTELEPORT|MF2_LOGRAV|MF2_CANNOTPUSH|MF2_WINDTHRUST // flags2
- },
+ { // MT_FEATHER
+ -1, // doomednum
+ S_FEATHER1, // 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, // crashstate
+ S_FEATHERX, // deathstate
+ S_NULL, // xdeathstate
+ sfx_None, // deathsound
+ 0, // speed
+ 2 * FRACUNIT, // radius
+ 4 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF, // flags
+ MF2_NOTELEPORT | MF2_LOGRAV | MF2_CANNOTPUSH | MF2_WINDTHRUST // flags2
+ },
-{ // MT_MUMMY
-68, // doomednum
-S_MUMMY_LOOK1, // spawnstate
-80, // spawnhealth
-S_MUMMY_WALK1, // seestate
-sfx_mumsit, // seesound
-8, // reactiontime
-sfx_mumat1, // attacksound
-S_MUMMY_PAIN1, // painstate
-128, // painchance
-sfx_mumpai, // painsound
-S_MUMMY_ATK1, // meleestate
-0, // missilestate
-S_NULL, // crashstate
-S_MUMMY_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_mumdth, // deathsound
-12, // speed
-22*FRACUNIT, // radius
-62*FRACUNIT, // height
-75, // mass
-0, // damage
-sfx_mumact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ // flags2
- },
+ { // MT_MUMMY
+ 68, // doomednum
+ S_MUMMY_LOOK1, // spawnstate
+ 80, // spawnhealth
+ S_MUMMY_WALK1, // seestate
+ sfx_mumsit, // seesound
+ 8, // reactiontime
+ sfx_mumat1, // attacksound
+ S_MUMMY_PAIN1, // painstate
+ 128, // painchance
+ sfx_mumpai, // painsound
+ S_MUMMY_ATK1, // meleestate
+ 0, // missilestate
+ S_NULL, // crashstate
+ S_MUMMY_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_mumdth, // deathsound
+ 12, // speed
+ 22 * FRACUNIT, // radius
+ 62 * FRACUNIT, // height
+ 75, // mass
+ 0, // damage
+ sfx_mumact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ // flags2
+ },
-{ // MT_MUMMYLEADER
-45, // doomednum
-S_MUMMY_LOOK1, // spawnstate
-100, // spawnhealth
-S_MUMMY_WALK1, // seestate
-sfx_mumsit, // seesound
-8, // reactiontime
-sfx_mumat1, // attacksound
-S_MUMMY_PAIN1, // painstate
-64, // painchance
-sfx_mumpai, // painsound
-S_MUMMY_ATK1, // meleestate
-S_MUMMYL_ATK1, // missilestate
-S_NULL, // crashstate
-S_MUMMY_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_mumdth, // deathsound
-12, // speed
-22*FRACUNIT, // radius
-62*FRACUNIT, // height
-75, // mass
-0, // damage
-sfx_mumact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ // flags2
- },
+ { // MT_MUMMYLEADER
+ 45, // doomednum
+ S_MUMMY_LOOK1, // spawnstate
+ 100, // spawnhealth
+ S_MUMMY_WALK1, // seestate
+ sfx_mumsit, // seesound
+ 8, // reactiontime
+ sfx_mumat1, // attacksound
+ S_MUMMY_PAIN1, // painstate
+ 64, // painchance
+ sfx_mumpai, // painsound
+ S_MUMMY_ATK1, // meleestate
+ S_MUMMYL_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_MUMMY_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_mumdth, // deathsound
+ 12, // speed
+ 22 * FRACUNIT, // radius
+ 62 * FRACUNIT, // height
+ 75, // mass
+ 0, // damage
+ sfx_mumact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ // flags2
+ },
-{ // MT_MUMMYGHOST
-69, // doomednum
-S_MUMMY_LOOK1, // spawnstate
-80, // spawnhealth
-S_MUMMY_WALK1, // seestate
-sfx_mumsit, // seesound
-8, // reactiontime
-sfx_mumat1, // attacksound
-S_MUMMY_PAIN1, // painstate
-128, // painchance
-sfx_mumpai, // painsound
-S_MUMMY_ATK1, // meleestate
-0, // missilestate
-S_NULL, // crashstate
-S_MUMMY_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_mumdth, // deathsound
-12, // speed
-22*FRACUNIT, // radius
-62*FRACUNIT, // height
-75, // mass
-0, // damage
-sfx_mumact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_SHADOW, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ // flags2
- },
+ { // MT_MUMMYGHOST
+ 69, // doomednum
+ S_MUMMY_LOOK1, // spawnstate
+ 80, // spawnhealth
+ S_MUMMY_WALK1, // seestate
+ sfx_mumsit, // seesound
+ 8, // reactiontime
+ sfx_mumat1, // attacksound
+ S_MUMMY_PAIN1, // painstate
+ 128, // painchance
+ sfx_mumpai, // painsound
+ S_MUMMY_ATK1, // meleestate
+ 0, // missilestate
+ S_NULL, // crashstate
+ S_MUMMY_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_mumdth, // deathsound
+ 12, // speed
+ 22 * FRACUNIT, // radius
+ 62 * FRACUNIT, // height
+ 75, // mass
+ 0, // damage
+ sfx_mumact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL | MF_SHADOW, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ // flags2
+ },
-{ // MT_MUMMYLEADERGHOST
-46, // doomednum
-S_MUMMY_LOOK1, // spawnstate
-100, // spawnhealth
-S_MUMMY_WALK1, // seestate
-sfx_mumsit, // seesound
-8, // reactiontime
-sfx_mumat1, // attacksound
-S_MUMMY_PAIN1, // painstate
-64, // painchance
-sfx_mumpai, // painsound
-S_MUMMY_ATK1, // meleestate
-S_MUMMYL_ATK1, // missilestate
-S_NULL, // crashstate
-S_MUMMY_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_mumdth, // deathsound
-12, // speed
-22*FRACUNIT, // radius
-62*FRACUNIT, // height
-75, // mass
-0, // damage
-sfx_mumact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_SHADOW, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ // flags2
- },
+ { // MT_MUMMYLEADERGHOST
+ 46, // doomednum
+ S_MUMMY_LOOK1, // spawnstate
+ 100, // spawnhealth
+ S_MUMMY_WALK1, // seestate
+ sfx_mumsit, // seesound
+ 8, // reactiontime
+ sfx_mumat1, // attacksound
+ S_MUMMY_PAIN1, // painstate
+ 64, // painchance
+ sfx_mumpai, // painsound
+ S_MUMMY_ATK1, // meleestate
+ S_MUMMYL_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_MUMMY_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_mumdth, // deathsound
+ 12, // speed
+ 22 * FRACUNIT, // radius
+ 62 * FRACUNIT, // height
+ 75, // mass
+ 0, // damage
+ sfx_mumact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL | MF_SHADOW, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ // flags2
+ },
-{ // MT_MUMMYSOUL
--1, // doomednum
-S_MUMMY_SOUL1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_MUMMYSOUL
+ -1, // doomednum
+ S_MUMMY_SOUL1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_MUMMYFX1
--1, // doomednum
-S_MUMMYFX1_1, // 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_NULL, // crashstate
-S_MUMMYFXI1_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-9*FRACUNIT, // speed
-8*FRACUNIT, // radius
-14*FRACUNIT, // height
-100, // mass
-4, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_MUMMYFX1
+ -1, // doomednum
+ S_MUMMYFX1_1, // 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_NULL, // crashstate
+ S_MUMMYFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 9 * FRACUNIT, // speed
+ 8 * FRACUNIT, // radius
+ 14 * FRACUNIT, // height
+ 100, // mass
+ 4, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_BEAST
-70, // doomednum
-S_BEAST_LOOK1, // spawnstate
-220, // spawnhealth
-S_BEAST_WALK1, // seestate
-sfx_bstsit, // seesound
-8, // reactiontime
-sfx_bstatk, // attacksound
-S_BEAST_PAIN1, // painstate
-100, // painchance
-sfx_bstpai, // painsound
-0, // meleestate
-S_BEAST_ATK1, // missilestate
-S_NULL, // crashstate
-S_BEAST_DIE1, // deathstate
-S_BEAST_XDIE1, // xdeathstate
-sfx_bstdth, // deathsound
-14, // speed
-32*FRACUNIT, // radius
-74*FRACUNIT, // height
-200, // mass
-0, // damage
-sfx_bstact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ // flags2
- },
+ { // MT_BEAST
+ 70, // doomednum
+ S_BEAST_LOOK1, // spawnstate
+ 220, // spawnhealth
+ S_BEAST_WALK1, // seestate
+ sfx_bstsit, // seesound
+ 8, // reactiontime
+ sfx_bstatk, // attacksound
+ S_BEAST_PAIN1, // painstate
+ 100, // painchance
+ sfx_bstpai, // painsound
+ 0, // meleestate
+ S_BEAST_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_BEAST_DIE1, // deathstate
+ S_BEAST_XDIE1, // xdeathstate
+ sfx_bstdth, // deathsound
+ 14, // speed
+ 32 * FRACUNIT, // radius
+ 74 * FRACUNIT, // height
+ 200, // mass
+ 0, // damage
+ sfx_bstact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ // flags2
+ },
+
+ { // MT_BEASTBALL
+ -1, // doomednum
+ S_BEASTBALL1, // 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_NULL, // crashstate
+ S_BEASTBALLX1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 12 * FRACUNIT, // speed
+ 9 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 4, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_WINDTHRUST | MF2_NOTELEPORT // flags2
+ },
-{ // MT_BEASTBALL
--1, // doomednum
-S_BEASTBALL1, // 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_NULL, // crashstate
-S_BEASTBALLX1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-12*FRACUNIT, // speed
-9*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-4, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_WINDTHRUST|MF2_NOTELEPORT // flags2
- },
+ { // MT_BURNBALL
+ -1, // doomednum
+ S_BURNBALL1, // 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_NULL, // crashstate
+ S_BEASTBALLX1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 10 * FRACUNIT, // speed
+ 6 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 2, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_NOGRAVITY | MF_MISSILE, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_BURNBALL
--1, // doomednum
-S_BURNBALL1, // 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_NULL, // crashstate
-S_BEASTBALLX1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-10*FRACUNIT, // speed
-6*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-2, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_BURNBALLFB
+ -1, // doomednum
+ S_BURNBALLFB1, // 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_NULL, // crashstate
+ S_BEASTBALLX1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 10 * FRACUNIT, // speed
+ 6 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 2, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_NOGRAVITY | MF_MISSILE, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_BURNBALLFB
--1, // doomednum
-S_BURNBALLFB1, // 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_NULL, // crashstate
-S_BEASTBALLX1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-10*FRACUNIT, // speed
-6*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-2, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_PUFFY
+ -1, // doomednum
+ S_PUFFY1, // 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_NULL, // crashstate
+ S_PUFFY1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 10 * FRACUNIT, // speed
+ 6 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 2, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_NOGRAVITY | MF_MISSILE, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_PUFFY
--1, // doomednum
-S_PUFFY1, // 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_NULL, // crashstate
-S_PUFFY1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-10*FRACUNIT, // speed
-6*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-2, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_SNAKE
+ 92, // doomednum
+ S_SNAKE_LOOK1, // spawnstate
+ 280, // spawnhealth
+ S_SNAKE_WALK1, // seestate
+ sfx_snksit, // seesound
+ 8, // reactiontime
+ sfx_snkatk, // attacksound
+ S_SNAKE_PAIN1, // painstate
+ 48, // painchance
+ sfx_snkpai, // painsound
+ 0, // meleestate
+ S_SNAKE_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_SNAKE_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_snkdth, // deathsound
+ 10, // speed
+ 22 * FRACUNIT, // radius
+ 70 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_snkact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ // flags2
+ },
-{ // MT_SNAKE
-92, // doomednum
-S_SNAKE_LOOK1, // spawnstate
-280, // spawnhealth
-S_SNAKE_WALK1, // seestate
-sfx_snksit, // seesound
-8, // reactiontime
-sfx_snkatk, // attacksound
-S_SNAKE_PAIN1, // painstate
-48, // painchance
-sfx_snkpai, // painsound
-0, // meleestate
-S_SNAKE_ATK1, // missilestate
-S_NULL, // crashstate
-S_SNAKE_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_snkdth, // deathsound
-10, // speed
-22*FRACUNIT, // radius
-70*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_snkact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ // flags2
- },
+ { // MT_SNAKEPRO_A
+ -1, // doomednum
+ S_SNAKEPRO_A1, // 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_NULL, // crashstate
+ S_SNAKEPRO_AX1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 14 * FRACUNIT, // speed
+ 12 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 1, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_WINDTHRUST | MF2_NOTELEPORT // flags2
+ },
-{ // MT_SNAKEPRO_A
--1, // doomednum
-S_SNAKEPRO_A1, // 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_NULL, // crashstate
-S_SNAKEPRO_AX1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-14*FRACUNIT, // speed
-12*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-1, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_WINDTHRUST|MF2_NOTELEPORT // flags2
- },
+ { // MT_SNAKEPRO_B
+ -1, // doomednum
+ S_SNAKEPRO_B1, // 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_NULL, // crashstate
+ S_SNAKEPRO_BX1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 14 * FRACUNIT, // speed
+ 12 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 3, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_SNAKEPRO_B
--1, // doomednum
-S_SNAKEPRO_B1, // 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_NULL, // crashstate
-S_SNAKEPRO_BX1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-14*FRACUNIT, // speed
-12*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-3, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_HEAD
+ 6, // doomednum
+ S_HEAD_LOOK, // spawnstate
+ 700, // spawnhealth
+ S_HEAD_FLOAT, // seestate
+ sfx_hedsit, // seesound
+ 8, // reactiontime
+ sfx_hedat1, // attacksound
+ S_HEAD_PAIN1, // painstate
+ 32, // painchance
+ sfx_hedpai, // painsound
+ 0, // meleestate
+ S_HEAD_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_HEAD_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_heddth, // deathsound
+ 6, // speed
+ 40 * FRACUNIT, // radius
+ 72 * FRACUNIT, // height
+ 325, // mass
+ 0, // damage
+ sfx_hedact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL | MF_NOBLOOD, // flags
+ MF2_PASSMOBJ // flags2
+ },
-{ // MT_HEAD
-6, // doomednum
-S_HEAD_LOOK, // spawnstate
-700, // spawnhealth
-S_HEAD_FLOAT, // seestate
-sfx_hedsit, // seesound
-8, // reactiontime
-sfx_hedat1, // attacksound
-S_HEAD_PAIN1, // painstate
-32, // painchance
-sfx_hedpai, // painsound
-0, // meleestate
-S_HEAD_ATK1, // missilestate
-S_NULL, // crashstate
-S_HEAD_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_heddth, // deathsound
-6, // speed
-40*FRACUNIT, // radius
-72*FRACUNIT, // height
-325, // mass
-0, // damage
-sfx_hedact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_NOBLOOD, // flags
-MF2_PASSMOBJ // flags2
- },
+ { // MT_HEADFX1
+ -1, // doomednum
+ S_HEADFX1_1, // 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_NULL, // crashstate
+ S_HEADFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 13 * FRACUNIT, // speed
+ 12 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 1, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT | MF2_THRUGHOST // flags2
+ },
-{ // MT_HEADFX1
--1, // doomednum
-S_HEADFX1_1, // 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_NULL, // crashstate
-S_HEADFXI1_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-13*FRACUNIT, // speed
-12*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-1, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT|MF2_THRUGHOST // flags2
- },
+ { // MT_HEADFX2
+ -1, // doomednum
+ S_HEADFX2_1, // 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_NULL, // crashstate
+ S_HEADFXI2_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 8 * FRACUNIT, // speed
+ 12 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 3, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_HEADFX2
--1, // doomednum
-S_HEADFX2_1, // 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_NULL, // crashstate
-S_HEADFXI2_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-8*FRACUNIT, // speed
-12*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-3, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_HEADFX3
+ -1, // doomednum
+ S_HEADFX3_1, // 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_NULL, // crashstate
+ S_HEADFXI3_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 10 * FRACUNIT, // speed
+ 14 * FRACUNIT, // radius
+ 12 * FRACUNIT, // height
+ 100, // mass
+ 5, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_WINDTHRUST | MF2_NOTELEPORT // flags2
+ },
-{ // MT_HEADFX3
--1, // doomednum
-S_HEADFX3_1, // 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_NULL, // crashstate
-S_HEADFXI3_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-10*FRACUNIT, // speed
-14*FRACUNIT, // radius
-12*FRACUNIT, // height
-100, // mass
-5, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_WINDTHRUST|MF2_NOTELEPORT // flags2
- },
+ { // MT_WHIRLWIND
+ -1, // doomednum
+ S_HEADFX4_1, // 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_NULL, // crashstate
+ S_HEADFXI4_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 10 * FRACUNIT, // speed
+ 16 * FRACUNIT, // radius
+ 74 * FRACUNIT, // height
+ 100, // mass
+ 1, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY | MF_SHADOW, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_WHIRLWIND
--1, // doomednum
-S_HEADFX4_1, // 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_NULL, // crashstate
-S_HEADFXI4_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-10*FRACUNIT, // speed
-16*FRACUNIT, // radius
-74*FRACUNIT, // height
-100, // mass
-1, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY|MF_SHADOW, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_CLINK
+ 90, // doomednum
+ S_CLINK_LOOK1, // spawnstate
+ 150, // spawnhealth
+ S_CLINK_WALK1, // seestate
+ sfx_clksit, // seesound
+ 8, // reactiontime
+ sfx_clkatk, // attacksound
+ S_CLINK_PAIN1, // painstate
+ 32, // painchance
+ sfx_clkpai, // painsound
+ S_CLINK_ATK1, // meleestate
+ 0, // missilestate
+ S_NULL, // crashstate
+ S_CLINK_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_clkdth, // deathsound
+ 14, // speed
+ 20 * FRACUNIT, // radius
+ 64 * FRACUNIT, // height
+ 75, // mass
+ 0, // damage
+ sfx_clkact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL | MF_NOBLOOD, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ // flags2
+ },
-{ // MT_CLINK
-90, // doomednum
-S_CLINK_LOOK1, // spawnstate
-150, // spawnhealth
-S_CLINK_WALK1, // seestate
-sfx_clksit, // seesound
-8, // reactiontime
-sfx_clkatk, // attacksound
-S_CLINK_PAIN1, // painstate
-32, // painchance
-sfx_clkpai, // painsound
-S_CLINK_ATK1, // meleestate
-0, // missilestate
-S_NULL, // crashstate
-S_CLINK_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_clkdth, // deathsound
-14, // speed
-20*FRACUNIT, // radius
-64*FRACUNIT, // height
-75, // mass
-0, // damage
-sfx_clkact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_NOBLOOD, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ // flags2
- },
+ { // MT_WIZARD
+ 15, // doomednum
+ S_WIZARD_LOOK1, // spawnstate
+ 180, // spawnhealth
+ S_WIZARD_WALK1, // seestate
+ sfx_wizsit, // seesound
+ 8, // reactiontime
+ sfx_wizatk, // attacksound
+ S_WIZARD_PAIN1, // painstate
+ 64, // painchance
+ sfx_wizpai, // painsound
+ 0, // meleestate
+ S_WIZARD_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_WIZARD_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_wizdth, // deathsound
+ 12, // speed
+ 16 * FRACUNIT, // radius
+ 68 * FRACUNIT, // height
+ 100, // mass
+ 0, // damage
+ sfx_wizact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL | MF_FLOAT | MF_NOGRAVITY, // flags
+ MF2_PASSMOBJ // flags2
+ },
-{ // MT_WIZARD
-15, // doomednum
-S_WIZARD_LOOK1, // spawnstate
-180, // spawnhealth
-S_WIZARD_WALK1, // seestate
-sfx_wizsit, // seesound
-8, // reactiontime
-sfx_wizatk, // attacksound
-S_WIZARD_PAIN1, // painstate
-64, // painchance
-sfx_wizpai, // painsound
-0, // meleestate
-S_WIZARD_ATK1, // missilestate
-S_NULL, // crashstate
-S_WIZARD_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_wizdth, // deathsound
-12, // speed
-16*FRACUNIT, // radius
-68*FRACUNIT, // height
-100, // mass
-0, // damage
-sfx_wizact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_FLOAT|MF_NOGRAVITY, // flags
-MF2_PASSMOBJ // flags2
- },
+ { // MT_WIZFX1
+ -1, // doomednum
+ S_WIZFX1_1, // 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_NULL, // crashstate
+ S_WIZFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 18 * FRACUNIT, // speed
+ 10 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 3, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_WIZFX1
--1, // doomednum
-S_WIZFX1_1, // 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_NULL, // crashstate
-S_WIZFXI1_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-18*FRACUNIT, // speed
-10*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-3, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_IMP
+ 66, // doomednum
+ S_IMP_LOOK1, // spawnstate
+ 40, // spawnhealth
+ S_IMP_FLY1, // seestate
+ sfx_impsit, // seesound
+ 8, // reactiontime
+ sfx_impat1, // attacksound
+ S_IMP_PAIN1, // painstate
+ 200, // painchance
+ sfx_imppai, // painsound
+ S_IMP_MEATK1, // meleestate
+ S_IMP_MSATK1_1, // missilestate
+ S_IMP_CRASH1, // crashstate
+ S_IMP_DIE1, // deathstate
+ S_IMP_XDIE1, // xdeathstate
+ sfx_impdth, // deathsound
+ 10, // speed
+ 16 * FRACUNIT, // radius
+ 36 * FRACUNIT, // height
+ 50, // mass
+ 0, // damage
+ sfx_impact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_FLOAT | MF_NOGRAVITY | MF_COUNTKILL, // flags
+ MF2_SPAWNFLOAT | MF2_PASSMOBJ // flags2
+ },
-{ // MT_IMP
-66, // doomednum
-S_IMP_LOOK1, // spawnstate
-40, // spawnhealth
-S_IMP_FLY1, // seestate
-sfx_impsit, // seesound
-8, // reactiontime
-sfx_impat1, // attacksound
-S_IMP_PAIN1, // painstate
-200, // painchance
-sfx_imppai, // painsound
-S_IMP_MEATK1, // meleestate
-S_IMP_MSATK1_1, // missilestate
-S_IMP_CRASH1, // crashstate
-S_IMP_DIE1, // deathstate
-S_IMP_XDIE1, // xdeathstate
-sfx_impdth, // deathsound
-10, // speed
-16*FRACUNIT, // radius
-36*FRACUNIT, // height
-50, // mass
-0, // damage
-sfx_impact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY|MF_COUNTKILL, // flags
-MF2_SPAWNFLOAT|MF2_PASSMOBJ // flags2
- },
+ { // MT_IMPLEADER
+ 5, // doomednum
+ S_IMP_LOOK1, // spawnstate
+ 80, // spawnhealth
+ S_IMP_FLY1, // seestate
+ sfx_impsit, // seesound
+ 8, // reactiontime
+ sfx_impat2, // attacksound
+ S_IMP_PAIN1, // painstate
+ 200, // painchance
+ sfx_imppai, // painsound
+ 0, // meleestate
+ S_IMP_MSATK2_1, // missilestate
+ S_IMP_CRASH1, // crashstate
+ S_IMP_DIE1, // deathstate
+ S_IMP_XDIE1, // xdeathstate
+ sfx_impdth, // deathsound
+ 10, // speed
+ 16 * FRACUNIT, // radius
+ 36 * FRACUNIT, // height
+ 50, // mass
+ 0, // damage
+ sfx_impact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_FLOAT | MF_NOGRAVITY | MF_COUNTKILL, // flags
+ MF2_SPAWNFLOAT | MF2_PASSMOBJ // flags2
+ },
-{ // MT_IMPLEADER
-5, // doomednum
-S_IMP_LOOK1, // spawnstate
-80, // spawnhealth
-S_IMP_FLY1, // seestate
-sfx_impsit, // seesound
-8, // reactiontime
-sfx_impat2, // attacksound
-S_IMP_PAIN1, // painstate
-200, // painchance
-sfx_imppai, // painsound
-0, // meleestate
-S_IMP_MSATK2_1, // missilestate
-S_IMP_CRASH1, // crashstate
-S_IMP_DIE1, // deathstate
-S_IMP_XDIE1, // xdeathstate
-sfx_impdth, // deathsound
-10, // speed
-16*FRACUNIT, // radius
-36*FRACUNIT, // height
-50, // mass
-0, // damage
-sfx_impact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY|MF_COUNTKILL, // flags
-MF2_SPAWNFLOAT|MF2_PASSMOBJ // flags2
- },
+ { // MT_IMPCHUNK1
+ -1, // doomednum
+ S_IMP_CHUNKA1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_IMPCHUNK1
--1, // doomednum
-S_IMP_CHUNKA1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_IMPCHUNK2
+ -1, // doomednum
+ S_IMP_CHUNKB1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_IMPCHUNK2
--1, // doomednum
-S_IMP_CHUNKB1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_IMPBALL
+ -1, // doomednum
+ S_IMPFX1, // 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_NULL, // crashstate
+ S_IMPFXI1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 10 * FRACUNIT, // speed
+ 8 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 1, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_WINDTHRUST | MF2_NOTELEPORT // flags2
+ },
-{ // MT_IMPBALL
--1, // doomednum
-S_IMPFX1, // 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_NULL, // crashstate
-S_IMPFXI1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-10*FRACUNIT, // speed
-8*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-1, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_WINDTHRUST|MF2_NOTELEPORT // flags2
- },
+ { // MT_KNIGHT
+ 64, // doomednum
+ S_KNIGHT_STND1, // spawnstate
+ 200, // spawnhealth
+ S_KNIGHT_WALK1, // seestate
+ sfx_kgtsit, // seesound
+ 8, // reactiontime
+ sfx_kgtatk, // attacksound
+ S_KNIGHT_PAIN1, // painstate
+ 100, // painchance
+ sfx_kgtpai, // painsound
+ S_KNIGHT_ATK1, // meleestate
+ S_KNIGHT_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_KNIGHT_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_kgtdth, // deathsound
+ 12, // speed
+ 24 * FRACUNIT, // radius
+ 78 * FRACUNIT, // height
+ 150, // mass
+ 0, // damage
+ sfx_kgtact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ // flags2
+ },
-{ // MT_KNIGHT
-64, // doomednum
-S_KNIGHT_STND1, // spawnstate
-200, // spawnhealth
-S_KNIGHT_WALK1, // seestate
-sfx_kgtsit, // seesound
-8, // reactiontime
-sfx_kgtatk, // attacksound
-S_KNIGHT_PAIN1, // painstate
-100, // painchance
-sfx_kgtpai, // painsound
-S_KNIGHT_ATK1, // meleestate
-S_KNIGHT_ATK1, // missilestate
-S_NULL, // crashstate
-S_KNIGHT_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_kgtdth, // deathsound
-12, // speed
-24*FRACUNIT, // radius
-78*FRACUNIT, // height
-150, // mass
-0, // damage
-sfx_kgtact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ // flags2
- },
+ { // MT_KNIGHTGHOST
+ 65, // doomednum
+ S_KNIGHT_STND1, // spawnstate
+ 200, // spawnhealth
+ S_KNIGHT_WALK1, // seestate
+ sfx_kgtsit, // seesound
+ 8, // reactiontime
+ sfx_kgtatk, // attacksound
+ S_KNIGHT_PAIN1, // painstate
+ 100, // painchance
+ sfx_kgtpai, // painsound
+ S_KNIGHT_ATK1, // meleestate
+ S_KNIGHT_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_KNIGHT_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_kgtdth, // deathsound
+ 12, // speed
+ 24 * FRACUNIT, // radius
+ 78 * FRACUNIT, // height
+ 150, // mass
+ 0, // damage
+ sfx_kgtact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL | MF_SHADOW, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ // flags2
+ },
-{ // MT_KNIGHTGHOST
-65, // doomednum
-S_KNIGHT_STND1, // spawnstate
-200, // spawnhealth
-S_KNIGHT_WALK1, // seestate
-sfx_kgtsit, // seesound
-8, // reactiontime
-sfx_kgtatk, // attacksound
-S_KNIGHT_PAIN1, // painstate
-100, // painchance
-sfx_kgtpai, // painsound
-S_KNIGHT_ATK1, // meleestate
-S_KNIGHT_ATK1, // missilestate
-S_NULL, // crashstate
-S_KNIGHT_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_kgtdth, // deathsound
-12, // speed
-24*FRACUNIT, // radius
-78*FRACUNIT, // height
-150, // mass
-0, // damage
-sfx_kgtact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_SHADOW, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ // flags2
- },
+ { // MT_KNIGHTAXE
+ -1, // doomednum
+ S_SPINAXE1, // 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_NULL, // crashstate
+ S_SPINAXEX1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_hrnhit, // deathsound
+ 9 * FRACUNIT, // speed
+ 10 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 2, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_WINDTHRUST | MF2_NOTELEPORT | MF2_THRUGHOST // flags2
+ },
-{ // MT_KNIGHTAXE
--1, // doomednum
-S_SPINAXE1, // 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_NULL, // crashstate
-S_SPINAXEX1, // deathstate
-S_NULL, // xdeathstate
-sfx_hrnhit, // deathsound
-9*FRACUNIT, // speed
-10*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-2, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_WINDTHRUST|MF2_NOTELEPORT|MF2_THRUGHOST // flags2
- },
+ { // MT_REDAXE
+ -1, // doomednum
+ S_REDAXE1, // 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_NULL, // crashstate
+ S_REDAXEX1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_hrnhit, // deathsound
+ 9 * FRACUNIT, // speed
+ 10 * FRACUNIT, // radius
+ 8 * FRACUNIT, // height
+ 100, // mass
+ 7, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT | MF2_THRUGHOST // flags2
+ },
-{ // MT_REDAXE
--1, // doomednum
-S_REDAXE1, // 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_NULL, // crashstate
-S_REDAXEX1, // deathstate
-S_NULL, // xdeathstate
-sfx_hrnhit, // deathsound
-9*FRACUNIT, // speed
-10*FRACUNIT, // radius
-8*FRACUNIT, // height
-100, // mass
-7, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT|MF2_THRUGHOST // flags2
- },
+ { // MT_SORCERER1
+ 7, // doomednum
+ S_SRCR1_LOOK1, // spawnstate
+ 2000, // spawnhealth
+ S_SRCR1_WALK1, // seestate
+ sfx_sbtsit, // seesound
+ 8, // reactiontime
+ sfx_sbtatk, // attacksound
+ S_SRCR1_PAIN1, // painstate
+ 56, // painchance
+ sfx_sbtpai, // painsound
+ 0, // meleestate
+ S_SRCR1_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_SRCR1_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_sbtdth, // deathsound
+ 16, // speed
+ 28 * FRACUNIT, // radius
+ 100 * FRACUNIT, // height
+ 800, // mass
+ 0, // damage
+ sfx_sbtact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ | MF2_BOSS // flags2
+ },
-{ // MT_SORCERER1
-7, // doomednum
-S_SRCR1_LOOK1, // spawnstate
-2000, // spawnhealth
-S_SRCR1_WALK1, // seestate
-sfx_sbtsit, // seesound
-8, // reactiontime
-sfx_sbtatk, // attacksound
-S_SRCR1_PAIN1, // painstate
-56, // painchance
-sfx_sbtpai, // painsound
-0, // meleestate
-S_SRCR1_ATK1, // missilestate
-S_NULL, // crashstate
-S_SRCR1_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_sbtdth, // deathsound
-16, // speed
-28*FRACUNIT, // radius
-100*FRACUNIT, // height
-800, // mass
-0, // damage
-sfx_sbtact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ|MF2_BOSS // flags2
- },
+ { // MT_SRCRFX1
+ -1, // doomednum
+ S_SRCRFX1_1, // 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_NULL, // crashstate
+ S_SRCRFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 20 * FRACUNIT, // speed
+ 10 * FRACUNIT, // radius
+ 10 * FRACUNIT, // height
+ 100, // mass
+ 10, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT | MF2_FIREDAMAGE // flags2
+ },
-{ // MT_SRCRFX1
--1, // doomednum
-S_SRCRFX1_1, // 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_NULL, // crashstate
-S_SRCRFXI1_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-20*FRACUNIT, // speed
-10*FRACUNIT, // radius
-10*FRACUNIT, // height
-100, // mass
-10, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT|MF2_FIREDAMAGE // flags2
- },
+ { // MT_SORCERER2
+ -1, // doomednum
+ S_SOR2_LOOK1, // spawnstate
+ 3500, // spawnhealth
+ S_SOR2_WALK1, // seestate
+ sfx_sorsit, // seesound
+ 8, // reactiontime
+ sfx_soratk, // attacksound
+ S_SOR2_PAIN1, // painstate
+ 32, // painchance
+ sfx_sorpai, // painsound
+ 0, // meleestate
+ S_SOR2_ATK1, // missilestate
+ S_NULL, // crashstate
+ S_SOR2_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 14, // speed
+ 16 * FRACUNIT, // radius
+ 70 * FRACUNIT, // height
+ 300, // mass
+ 0, // damage
+ sfx_soract, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL | MF_DROPOFF, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ | MF2_BOSS // flags2
+ },
-{ // MT_SORCERER2
--1, // doomednum
-S_SOR2_LOOK1, // spawnstate
-3500, // spawnhealth
-S_SOR2_WALK1, // seestate
-sfx_sorsit, // seesound
-8, // reactiontime
-sfx_soratk, // attacksound
-S_SOR2_PAIN1, // painstate
-32, // painchance
-sfx_sorpai, // painsound
-0, // meleestate
-S_SOR2_ATK1, // missilestate
-S_NULL, // crashstate
-S_SOR2_DIE1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-14, // speed
-16*FRACUNIT, // radius
-70*FRACUNIT, // height
-300, // mass
-0, // damage
-sfx_soract, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_DROPOFF, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ|MF2_BOSS // flags2
- },
+ { // MT_SOR2FX1
+ -1, // doomednum
+ S_SOR2FX1_1, // 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_NULL, // crashstate
+ S_SOR2FXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 20 * FRACUNIT, // speed
+ 10 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 1, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_SOR2FX1
--1, // doomednum
-S_SOR2FX1_1, // 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_NULL, // crashstate
-S_SOR2FXI1_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-20*FRACUNIT, // speed
-10*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-1, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_SOR2FXSPARK
+ -1, // doomednum
+ S_SOR2FXSPARK1, // 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, // crashstate
+ 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
+ MF2_NOTELEPORT | MF2_CANNOTPUSH // flags2
+ },
-{ // MT_SOR2FXSPARK
--1, // doomednum
-S_SOR2FXSPARK1, // 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, // crashstate
-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
-MF2_NOTELEPORT|MF2_CANNOTPUSH // flags2
- },
+ { // MT_SOR2FX2
+ -1, // doomednum
+ S_SOR2FX2_1, // 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_NULL, // crashstate
+ S_SOR2FXI2_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 6 * FRACUNIT, // speed
+ 10 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 10, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT // flags2
+ },
-{ // MT_SOR2FX2
--1, // doomednum
-S_SOR2FX2_1, // 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_NULL, // crashstate
-S_SOR2FXI2_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-6*FRACUNIT, // speed
-10*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-10, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT // flags2
- },
+ { // MT_SOR2TELEFADE
+ -1, // doomednum
+ S_SOR2TELEFADE1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_SOR2TELEFADE
--1, // doomednum
-S_SOR2TELEFADE1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_MINOTAUR
+ 9, // doomednum
+ S_MNTR_LOOK1, // spawnstate
+ 3000, // spawnhealth
+ S_MNTR_WALK1, // seestate
+ sfx_minsit, // seesound
+ 8, // reactiontime
+ sfx_minat1, // attacksound
+ S_MNTR_PAIN1, // painstate
+ 25, // painchance
+ sfx_minpai, // painsound
+ S_MNTR_ATK1_1, // meleestate
+ S_MNTR_ATK2_1, // missilestate
+ S_NULL, // crashstate
+ S_MNTR_DIE1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_mindth, // deathsound
+ 16, // speed
+ 28 * FRACUNIT, // radius
+ 100 * FRACUNIT, // height
+ 800, // mass
+ 7, // damage
+ sfx_minact, // activesound
+ MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL | MF_DROPOFF, // flags
+ MF2_FOOTCLIP | MF2_PASSMOBJ | MF2_BOSS // flags2
+ },
-{ // MT_MINOTAUR
-9, // doomednum
-S_MNTR_LOOK1, // spawnstate
-3000, // spawnhealth
-S_MNTR_WALK1, // seestate
-sfx_minsit, // seesound
-8, // reactiontime
-sfx_minat1, // attacksound
-S_MNTR_PAIN1, // painstate
-25, // painchance
-sfx_minpai, // painsound
-S_MNTR_ATK1_1, // meleestate
-S_MNTR_ATK2_1, // missilestate
-S_NULL, // crashstate
-S_MNTR_DIE1, // deathstate
-S_NULL, // xdeathstate
-sfx_mindth, // deathsound
-16, // speed
-28*FRACUNIT, // radius
-100*FRACUNIT, // height
-800, // mass
-7, // damage
-sfx_minact, // activesound
-MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_DROPOFF, // flags
-MF2_FOOTCLIP|MF2_PASSMOBJ|MF2_BOSS // flags2
- },
+ { // MT_MNTRFX1
+ -1, // doomednum
+ S_MNTRFX1_1, // 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_NULL, // crashstate
+ S_MNTRFXI1_1, // deathstate
+ S_NULL, // xdeathstate
+ 0, // deathsound
+ 20 * FRACUNIT, // speed
+ 10 * FRACUNIT, // radius
+ 6 * FRACUNIT, // height
+ 100, // mass
+ 3, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT | MF2_FIREDAMAGE // flags2
+ },
-{ // MT_MNTRFX1
--1, // doomednum
-S_MNTRFX1_1, // 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_NULL, // crashstate
-S_MNTRFXI1_1, // deathstate
-S_NULL, // xdeathstate
-0, // deathsound
-20*FRACUNIT, // speed
-10*FRACUNIT, // radius
-6*FRACUNIT, // height
-100, // mass
-3, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT|MF2_FIREDAMAGE // flags2
- },
+ { // MT_MNTRFX2
+ -1, // doomednum
+ S_MNTRFX2_1, // 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_NULL, // crashstate
+ S_MNTRFXI2_1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_phohit, // deathsound
+ 14 * FRACUNIT, // speed
+ 5 * FRACUNIT, // radius
+ 12 * FRACUNIT, // height
+ 100, // mass
+ 4, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT | MF2_FIREDAMAGE // flags2
+ },
-{ // MT_MNTRFX2
--1, // doomednum
-S_MNTRFX2_1, // 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_NULL, // crashstate
-S_MNTRFXI2_1, // deathstate
-S_NULL, // xdeathstate
-sfx_phohit, // deathsound
-14*FRACUNIT, // speed
-5*FRACUNIT, // radius
-12*FRACUNIT, // height
-100, // mass
-4, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT|MF2_FIREDAMAGE // flags2
- },
+ { // MT_MNTRFX3
+ -1, // doomednum
+ S_MNTRFX3_1, // 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_NULL, // crashstate
+ S_MNTRFXI2_1, // deathstate
+ S_NULL, // xdeathstate
+ sfx_phohit, // deathsound
+ 0, // speed
+ 8 * FRACUNIT, // radius
+ 16 * FRACUNIT, // height
+ 100, // mass
+ 4, // damage
+ sfx_None, // activesound
+ MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags
+ MF2_NOTELEPORT | MF2_FIREDAMAGE // flags2
+ },
-{ // MT_MNTRFX3
--1, // doomednum
-S_MNTRFX3_1, // 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_NULL, // crashstate
-S_MNTRFXI2_1, // deathstate
-S_NULL, // xdeathstate
-sfx_phohit, // deathsound
-0, // speed
-8*FRACUNIT, // radius
-16*FRACUNIT, // height
-100, // mass
-4, // damage
-sfx_None, // activesound
-MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags
-MF2_NOTELEPORT|MF2_FIREDAMAGE // flags2
- },
+ { // MT_AKYY
+ 73, // doomednum
+ S_AKYY1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AKYY
-73, // doomednum
-S_AKYY1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_BKYY
+ 79, // doomednum
+ S_BKYY1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_BKYY
-79, // doomednum
-S_BKYY1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_CKEY
+ 80, // doomednum
+ S_CKYY1, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_CKEY
-80, // doomednum
-S_CKYY1, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMGWNDWIMPY
+ 10, // doomednum
+ S_AMG1, // spawnstate
+ AMMO_GWND_WIMPY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMGWNDWIMPY
-10, // doomednum
-S_AMG1, // spawnstate
-AMMO_GWND_WIMPY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMGWNDHEFTY
+ 12, // doomednum
+ S_AMG2_1, // spawnstate
+ AMMO_GWND_HEFTY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMGWNDHEFTY
-12, // doomednum
-S_AMG2_1, // spawnstate
-AMMO_GWND_HEFTY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMMACEWIMPY
+ 13, // doomednum
+ S_AMM1, // spawnstate
+ AMMO_MACE_WIMPY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMMACEWIMPY
-13, // doomednum
-S_AMM1, // spawnstate
-AMMO_MACE_WIMPY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMMACEHEFTY
+ 16, // doomednum
+ S_AMM2, // spawnstate
+ AMMO_MACE_HEFTY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMMACEHEFTY
-16, // doomednum
-S_AMM2, // spawnstate
-AMMO_MACE_HEFTY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMCBOWWIMPY
+ 18, // doomednum
+ S_AMC1, // spawnstate
+ AMMO_CBOW_WIMPY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMCBOWWIMPY
-18, // doomednum
-S_AMC1, // spawnstate
-AMMO_CBOW_WIMPY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMCBOWHEFTY
+ 19, // doomednum
+ S_AMC2_1, // spawnstate
+ AMMO_CBOW_HEFTY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMCBOWHEFTY
-19, // doomednum
-S_AMC2_1, // spawnstate
-AMMO_CBOW_HEFTY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMSKRDWIMPY
+ 20, // doomednum
+ S_AMS1_1, // spawnstate
+ AMMO_SKRD_WIMPY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMSKRDWIMPY
-20, // doomednum
-S_AMS1_1, // spawnstate
-AMMO_SKRD_WIMPY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMSKRDHEFTY
+ 21, // doomednum
+ S_AMS2_1, // spawnstate
+ AMMO_SKRD_HEFTY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMSKRDHEFTY
-21, // doomednum
-S_AMS2_1, // spawnstate
-AMMO_SKRD_HEFTY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMPHRDWIMPY
+ 22, // doomednum
+ S_AMP1_1, // spawnstate
+ AMMO_PHRD_WIMPY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMPHRDWIMPY
-22, // doomednum
-S_AMP1_1, // spawnstate
-AMMO_PHRD_WIMPY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMPHRDHEFTY
+ 23, // doomednum
+ S_AMP2_1, // spawnstate
+ AMMO_PHRD_HEFTY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMPHRDHEFTY
-23, // doomednum
-S_AMP2_1, // spawnstate
-AMMO_PHRD_HEFTY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMBLSRWIMPY
+ 54, // doomednum
+ S_AMB1_1, // spawnstate
+ AMMO_BLSR_WIMPY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMBLSRWIMPY
-54, // doomednum
-S_AMB1_1, // spawnstate
-AMMO_BLSR_WIMPY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_AMBLSRHEFTY
+ 55, // doomednum
+ S_AMB2_1, // spawnstate
+ AMMO_BLSR_HEFTY, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_AMBLSRHEFTY
-55, // doomednum
-S_AMB2_1, // spawnstate
-AMMO_BLSR_HEFTY, // 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, // crashstate
-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
-0 // flags2
- },
+ { // MT_SOUNDWIND
+ 42, // doomednum
+ S_SND_WIND, // 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, // crashstate
+ 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
+ 0 // flags2
+ },
-{ // MT_SOUNDWIND
-42, // doomednum
-S_SND_WIND, // 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, // crashstate
-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
-0 // flags2
- },
-
-{ // MT_SOUNDWATERFALL
-41, // doomednum
-S_SND_WATERFALL, // 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, // crashstate
-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
-0 // flags2
- }
+ { // MT_SOUNDWATERFALL
+ 41, // doomednum
+ S_SND_WATERFALL, // 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, // crashstate
+ 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
+ 0 // flags2
+ }
};
-
--- a/src/heretic/info.h
+++ b/src/heretic/info.h
@@ -1,1550 +1,1576 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// generated by multigen
-typedef enum {
-SPR_IMPX,
-SPR_ACLO,
-SPR_PTN1,
-SPR_SHLD,
-SPR_SHD2,
-SPR_BAGH,
-SPR_SPMP,
-SPR_INVS,
-SPR_PTN2,
-SPR_SOAR,
-SPR_INVU,
-SPR_PWBK,
-SPR_EGGC,
-SPR_EGGM,
-SPR_FX01,
-SPR_SPHL,
-SPR_TRCH,
-SPR_FBMB,
-SPR_XPL1,
-SPR_ATLP,
-SPR_PPOD,
-SPR_AMG1,
-SPR_SPSH,
-SPR_LVAS,
-SPR_SLDG,
-SPR_SKH1,
-SPR_SKH2,
-SPR_SKH3,
-SPR_SKH4,
-SPR_CHDL,
-SPR_SRTC,
-SPR_SMPL,
-SPR_STGS,
-SPR_STGL,
-SPR_STCS,
-SPR_STCL,
-SPR_KFR1,
-SPR_BARL,
-SPR_BRPL,
-SPR_MOS1,
-SPR_MOS2,
-SPR_WTRH,
-SPR_HCOR,
-SPR_KGZ1,
-SPR_KGZB,
-SPR_KGZG,
-SPR_KGZY,
-SPR_VLCO,
-SPR_VFBL,
-SPR_VTFB,
-SPR_SFFI,
-SPR_TGLT,
-SPR_TELE,
-SPR_STFF,
-SPR_PUF3,
-SPR_PUF4,
-SPR_BEAK,
-SPR_WGNT,
-SPR_GAUN,
-SPR_PUF1,
-SPR_WBLS,
-SPR_BLSR,
-SPR_FX18,
-SPR_FX17,
-SPR_WMCE,
-SPR_MACE,
-SPR_FX02,
-SPR_WSKL,
-SPR_HROD,
-SPR_FX00,
-SPR_FX20,
-SPR_FX21,
-SPR_FX22,
-SPR_FX23,
-SPR_GWND,
-SPR_PUF2,
-SPR_WPHX,
-SPR_PHNX,
-SPR_FX04,
-SPR_FX08,
-SPR_FX09,
-SPR_WBOW,
-SPR_CRBW,
-SPR_FX03,
-SPR_BLOD,
-SPR_PLAY,
-SPR_FDTH,
-SPR_BSKL,
-SPR_CHKN,
-SPR_MUMM,
-SPR_FX15,
-SPR_BEAS,
-SPR_FRB1,
-SPR_SNKE,
-SPR_SNFX,
-SPR_HEAD,
-SPR_FX05,
-SPR_FX06,
-SPR_FX07,
-SPR_CLNK,
-SPR_WZRD,
-SPR_FX11,
-SPR_FX10,
-SPR_KNIG,
-SPR_SPAX,
-SPR_RAXE,
-SPR_SRCR,
-SPR_FX14,
-SPR_SOR2,
-SPR_SDTH,
-SPR_FX16,
-SPR_MNTR,
-SPR_FX12,
-SPR_FX13,
-SPR_AKYY,
-SPR_BKYY,
-SPR_CKYY,
-SPR_AMG2,
-SPR_AMM1,
-SPR_AMM2,
-SPR_AMC1,
-SPR_AMC2,
-SPR_AMS1,
-SPR_AMS2,
-SPR_AMP1,
-SPR_AMP2,
-SPR_AMB1,
-SPR_AMB2,
-NUMSPRITES
+typedef enum
+{
+ SPR_IMPX,
+ SPR_ACLO,
+ SPR_PTN1,
+ SPR_SHLD,
+ SPR_SHD2,
+ SPR_BAGH,
+ SPR_SPMP,
+ SPR_INVS,
+ SPR_PTN2,
+ SPR_SOAR,
+ SPR_INVU,
+ SPR_PWBK,
+ SPR_EGGC,
+ SPR_EGGM,
+ SPR_FX01,
+ SPR_SPHL,
+ SPR_TRCH,
+ SPR_FBMB,
+ SPR_XPL1,
+ SPR_ATLP,
+ SPR_PPOD,
+ SPR_AMG1,
+ SPR_SPSH,
+ SPR_LVAS,
+ SPR_SLDG,
+ SPR_SKH1,
+ SPR_SKH2,
+ SPR_SKH3,
+ SPR_SKH4,
+ SPR_CHDL,
+ SPR_SRTC,
+ SPR_SMPL,
+ SPR_STGS,
+ SPR_STGL,
+ SPR_STCS,
+ SPR_STCL,
+ SPR_KFR1,
+ SPR_BARL,
+ SPR_BRPL,
+ SPR_MOS1,
+ SPR_MOS2,
+ SPR_WTRH,
+ SPR_HCOR,
+ SPR_KGZ1,
+ SPR_KGZB,
+ SPR_KGZG,
+ SPR_KGZY,
+ SPR_VLCO,
+ SPR_VFBL,
+ SPR_VTFB,
+ SPR_SFFI,
+ SPR_TGLT,
+ SPR_TELE,
+ SPR_STFF,
+ SPR_PUF3,
+ SPR_PUF4,
+ SPR_BEAK,
+ SPR_WGNT,
+ SPR_GAUN,
+ SPR_PUF1,
+ SPR_WBLS,
+ SPR_BLSR,
+ SPR_FX18,
+ SPR_FX17,
+ SPR_WMCE,
+ SPR_MACE,
+ SPR_FX02,
+ SPR_WSKL,
+ SPR_HROD,
+ SPR_FX00,
+ SPR_FX20,
+ SPR_FX21,
+ SPR_FX22,
+ SPR_FX23,
+ SPR_GWND,
+ SPR_PUF2,
+ SPR_WPHX,
+ SPR_PHNX,
+ SPR_FX04,
+ SPR_FX08,
+ SPR_FX09,
+ SPR_WBOW,
+ SPR_CRBW,
+ SPR_FX03,
+ SPR_BLOD,
+ SPR_PLAY,
+ SPR_FDTH,
+ SPR_BSKL,
+ SPR_CHKN,
+ SPR_MUMM,
+ SPR_FX15,
+ SPR_BEAS,
+ SPR_FRB1,
+ SPR_SNKE,
+ SPR_SNFX,
+ SPR_HEAD,
+ SPR_FX05,
+ SPR_FX06,
+ SPR_FX07,
+ SPR_CLNK,
+ SPR_WZRD,
+ SPR_FX11,
+ SPR_FX10,
+ SPR_KNIG,
+ SPR_SPAX,
+ SPR_RAXE,
+ SPR_SRCR,
+ SPR_FX14,
+ SPR_SOR2,
+ SPR_SDTH,
+ SPR_FX16,
+ SPR_MNTR,
+ SPR_FX12,
+ SPR_FX13,
+ SPR_AKYY,
+ SPR_BKYY,
+ SPR_CKYY,
+ SPR_AMG2,
+ SPR_AMM1,
+ SPR_AMM2,
+ SPR_AMC1,
+ SPR_AMC2,
+ SPR_AMS1,
+ SPR_AMS2,
+ SPR_AMP1,
+ SPR_AMP2,
+ SPR_AMB1,
+ SPR_AMB2,
+ NUMSPRITES
} spritenum_t;
-typedef enum {
-S_NULL,
-S_FREETARGMOBJ,
-S_ITEM_PTN1_1,
-S_ITEM_PTN1_2,
-S_ITEM_PTN1_3,
-S_ITEM_SHLD1,
-S_ITEM_SHD2_1,
-S_ITEM_BAGH1,
-S_ITEM_SPMP1,
-S_HIDESPECIAL1,
-S_HIDESPECIAL2,
-S_HIDESPECIAL3,
-S_HIDESPECIAL4,
-S_HIDESPECIAL5,
-S_HIDESPECIAL6,
-S_HIDESPECIAL7,
-S_HIDESPECIAL8,
-S_HIDESPECIAL9,
-S_HIDESPECIAL10,
-S_HIDESPECIAL11,
-S_DORMANTARTI1,
-S_DORMANTARTI2,
-S_DORMANTARTI3,
-S_DORMANTARTI4,
-S_DORMANTARTI5,
-S_DORMANTARTI6,
-S_DORMANTARTI7,
-S_DORMANTARTI8,
-S_DORMANTARTI9,
-S_DORMANTARTI10,
-S_DORMANTARTI11,
-S_DORMANTARTI12,
-S_DORMANTARTI13,
-S_DORMANTARTI14,
-S_DORMANTARTI15,
-S_DORMANTARTI16,
-S_DORMANTARTI17,
-S_DORMANTARTI18,
-S_DORMANTARTI19,
-S_DORMANTARTI20,
-S_DORMANTARTI21,
-S_DEADARTI1,
-S_DEADARTI2,
-S_DEADARTI3,
-S_DEADARTI4,
-S_DEADARTI5,
-S_DEADARTI6,
-S_DEADARTI7,
-S_DEADARTI8,
-S_DEADARTI9,
-S_DEADARTI10,
-S_ARTI_INVS1,
-S_ARTI_PTN2_1,
-S_ARTI_PTN2_2,
-S_ARTI_PTN2_3,
-S_ARTI_SOAR1,
-S_ARTI_SOAR2,
-S_ARTI_SOAR3,
-S_ARTI_SOAR4,
-S_ARTI_INVU1,
-S_ARTI_INVU2,
-S_ARTI_INVU3,
-S_ARTI_INVU4,
-S_ARTI_PWBK1,
-S_ARTI_EGGC1,
-S_ARTI_EGGC2,
-S_ARTI_EGGC3,
-S_ARTI_EGGC4,
-S_EGGFX1,
-S_EGGFX2,
-S_EGGFX3,
-S_EGGFX4,
-S_EGGFX5,
-S_EGGFXI1_1,
-S_EGGFXI1_2,
-S_EGGFXI1_3,
-S_EGGFXI1_4,
-S_ARTI_SPHL1,
-S_ARTI_TRCH1,
-S_ARTI_TRCH2,
-S_ARTI_TRCH3,
-S_ARTI_FBMB1,
-S_FIREBOMB1,
-S_FIREBOMB2,
-S_FIREBOMB3,
-S_FIREBOMB4,
-S_FIREBOMB5,
-S_FIREBOMB6,
-S_FIREBOMB7,
-S_FIREBOMB8,
-S_FIREBOMB9,
-S_FIREBOMB10,
-S_FIREBOMB11,
-S_ARTI_ATLP1,
-S_ARTI_ATLP2,
-S_ARTI_ATLP3,
-S_ARTI_ATLP4,
-S_POD_WAIT1,
-S_POD_PAIN1,
-S_POD_DIE1,
-S_POD_DIE2,
-S_POD_DIE3,
-S_POD_DIE4,
-S_POD_GROW1,
-S_POD_GROW2,
-S_POD_GROW3,
-S_POD_GROW4,
-S_POD_GROW5,
-S_POD_GROW6,
-S_POD_GROW7,
-S_POD_GROW8,
-S_PODGOO1,
-S_PODGOO2,
-S_PODGOOX,
-S_PODGENERATOR,
-S_SPLASH1,
-S_SPLASH2,
-S_SPLASH3,
-S_SPLASH4,
-S_SPLASHX,
-S_SPLASHBASE1,
-S_SPLASHBASE2,
-S_SPLASHBASE3,
-S_SPLASHBASE4,
-S_SPLASHBASE5,
-S_SPLASHBASE6,
-S_SPLASHBASE7,
-S_LAVASPLASH1,
-S_LAVASPLASH2,
-S_LAVASPLASH3,
-S_LAVASPLASH4,
-S_LAVASPLASH5,
-S_LAVASPLASH6,
-S_LAVASMOKE1,
-S_LAVASMOKE2,
-S_LAVASMOKE3,
-S_LAVASMOKE4,
-S_LAVASMOKE5,
-S_SLUDGECHUNK1,
-S_SLUDGECHUNK2,
-S_SLUDGECHUNK3,
-S_SLUDGECHUNK4,
-S_SLUDGECHUNKX,
-S_SLUDGESPLASH1,
-S_SLUDGESPLASH2,
-S_SLUDGESPLASH3,
-S_SLUDGESPLASH4,
-S_SKULLHANG70_1,
-S_SKULLHANG60_1,
-S_SKULLHANG45_1,
-S_SKULLHANG35_1,
-S_CHANDELIER1,
-S_CHANDELIER2,
-S_CHANDELIER3,
-S_SERPTORCH1,
-S_SERPTORCH2,
-S_SERPTORCH3,
-S_SMALLPILLAR,
-S_STALAGMITESMALL,
-S_STALAGMITELARGE,
-S_STALACTITESMALL,
-S_STALACTITELARGE,
-S_FIREBRAZIER1,
-S_FIREBRAZIER2,
-S_FIREBRAZIER3,
-S_FIREBRAZIER4,
-S_FIREBRAZIER5,
-S_FIREBRAZIER6,
-S_FIREBRAZIER7,
-S_FIREBRAZIER8,
-S_BARREL,
-S_BRPILLAR,
-S_MOSS1,
-S_MOSS2,
-S_WALLTORCH1,
-S_WALLTORCH2,
-S_WALLTORCH3,
-S_HANGINGCORPSE,
-S_KEYGIZMO1,
-S_KEYGIZMO2,
-S_KEYGIZMO3,
-S_KGZ_START,
-S_KGZ_BLUEFLOAT1,
-S_KGZ_GREENFLOAT1,
-S_KGZ_YELLOWFLOAT1,
-S_VOLCANO1,
-S_VOLCANO2,
-S_VOLCANO3,
-S_VOLCANO4,
-S_VOLCANO5,
-S_VOLCANO6,
-S_VOLCANO7,
-S_VOLCANO8,
-S_VOLCANO9,
-S_VOLCANOBALL1,
-S_VOLCANOBALL2,
-S_VOLCANOBALLX1,
-S_VOLCANOBALLX2,
-S_VOLCANOBALLX3,
-S_VOLCANOBALLX4,
-S_VOLCANOBALLX5,
-S_VOLCANOBALLX6,
-S_VOLCANOTBALL1,
-S_VOLCANOTBALL2,
-S_VOLCANOTBALLX1,
-S_VOLCANOTBALLX2,
-S_VOLCANOTBALLX3,
-S_VOLCANOTBALLX4,
-S_VOLCANOTBALLX5,
-S_VOLCANOTBALLX6,
-S_VOLCANOTBALLX7,
-S_TELEGLITGEN1,
-S_TELEGLITGEN2,
-S_TELEGLITTER1_1,
-S_TELEGLITTER1_2,
-S_TELEGLITTER1_3,
-S_TELEGLITTER1_4,
-S_TELEGLITTER1_5,
-S_TELEGLITTER2_1,
-S_TELEGLITTER2_2,
-S_TELEGLITTER2_3,
-S_TELEGLITTER2_4,
-S_TELEGLITTER2_5,
-S_TFOG1,
-S_TFOG2,
-S_TFOG3,
-S_TFOG4,
-S_TFOG5,
-S_TFOG6,
-S_TFOG7,
-S_TFOG8,
-S_TFOG9,
-S_TFOG10,
-S_TFOG11,
-S_TFOG12,
-S_TFOG13,
-S_LIGHTDONE,
-S_STAFFREADY,
-S_STAFFDOWN,
-S_STAFFUP,
-S_STAFFREADY2_1,
-S_STAFFREADY2_2,
-S_STAFFREADY2_3,
-S_STAFFDOWN2,
-S_STAFFUP2,
-S_STAFFATK1_1,
-S_STAFFATK1_2,
-S_STAFFATK1_3,
-S_STAFFATK2_1,
-S_STAFFATK2_2,
-S_STAFFATK2_3,
-S_STAFFPUFF1,
-S_STAFFPUFF2,
-S_STAFFPUFF3,
-S_STAFFPUFF4,
-S_STAFFPUFF2_1,
-S_STAFFPUFF2_2,
-S_STAFFPUFF2_3,
-S_STAFFPUFF2_4,
-S_STAFFPUFF2_5,
-S_STAFFPUFF2_6,
-S_BEAKREADY,
-S_BEAKDOWN,
-S_BEAKUP,
-S_BEAKATK1_1,
-S_BEAKATK2_1,
-S_WGNT,
-S_GAUNTLETREADY,
-S_GAUNTLETDOWN,
-S_GAUNTLETUP,
-S_GAUNTLETREADY2_1,
-S_GAUNTLETREADY2_2,
-S_GAUNTLETREADY2_3,
-S_GAUNTLETDOWN2,
-S_GAUNTLETUP2,
-S_GAUNTLETATK1_1,
-S_GAUNTLETATK1_2,
-S_GAUNTLETATK1_3,
-S_GAUNTLETATK1_4,
-S_GAUNTLETATK1_5,
-S_GAUNTLETATK1_6,
-S_GAUNTLETATK1_7,
-S_GAUNTLETATK2_1,
-S_GAUNTLETATK2_2,
-S_GAUNTLETATK2_3,
-S_GAUNTLETATK2_4,
-S_GAUNTLETATK2_5,
-S_GAUNTLETATK2_6,
-S_GAUNTLETATK2_7,
-S_GAUNTLETPUFF1_1,
-S_GAUNTLETPUFF1_2,
-S_GAUNTLETPUFF1_3,
-S_GAUNTLETPUFF1_4,
-S_GAUNTLETPUFF2_1,
-S_GAUNTLETPUFF2_2,
-S_GAUNTLETPUFF2_3,
-S_GAUNTLETPUFF2_4,
-S_BLSR,
-S_BLASTERREADY,
-S_BLASTERDOWN,
-S_BLASTERUP,
-S_BLASTERATK1_1,
-S_BLASTERATK1_2,
-S_BLASTERATK1_3,
-S_BLASTERATK1_4,
-S_BLASTERATK1_5,
-S_BLASTERATK1_6,
-S_BLASTERATK2_1,
-S_BLASTERATK2_2,
-S_BLASTERATK2_3,
-S_BLASTERATK2_4,
-S_BLASTERATK2_5,
-S_BLASTERATK2_6,
-S_BLASTERFX1_1,
-S_BLASTERFXI1_1,
-S_BLASTERFXI1_2,
-S_BLASTERFXI1_3,
-S_BLASTERFXI1_4,
-S_BLASTERFXI1_5,
-S_BLASTERFXI1_6,
-S_BLASTERFXI1_7,
-S_BLASTERSMOKE1,
-S_BLASTERSMOKE2,
-S_BLASTERSMOKE3,
-S_BLASTERSMOKE4,
-S_BLASTERSMOKE5,
-S_RIPPER1,
-S_RIPPER2,
-S_RIPPERX1,
-S_RIPPERX2,
-S_RIPPERX3,
-S_RIPPERX4,
-S_RIPPERX5,
-S_BLASTERPUFF1_1,
-S_BLASTERPUFF1_2,
-S_BLASTERPUFF1_3,
-S_BLASTERPUFF1_4,
-S_BLASTERPUFF1_5,
-S_BLASTERPUFF2_1,
-S_BLASTERPUFF2_2,
-S_BLASTERPUFF2_3,
-S_BLASTERPUFF2_4,
-S_BLASTERPUFF2_5,
-S_BLASTERPUFF2_6,
-S_BLASTERPUFF2_7,
-S_WMCE,
-S_MACEREADY,
-S_MACEDOWN,
-S_MACEUP,
-S_MACEATK1_1,
-S_MACEATK1_2,
-S_MACEATK1_3,
-S_MACEATK1_4,
-S_MACEATK1_5,
-S_MACEATK1_6,
-S_MACEATK1_7,
-S_MACEATK1_8,
-S_MACEATK1_9,
-S_MACEATK1_10,
-S_MACEATK2_1,
-S_MACEATK2_2,
-S_MACEATK2_3,
-S_MACEATK2_4,
-S_MACEFX1_1,
-S_MACEFX1_2,
-S_MACEFXI1_1,
-S_MACEFXI1_2,
-S_MACEFXI1_3,
-S_MACEFXI1_4,
-S_MACEFXI1_5,
-S_MACEFX2_1,
-S_MACEFX2_2,
-S_MACEFXI2_1,
-S_MACEFX3_1,
-S_MACEFX3_2,
-S_MACEFX4_1,
-S_MACEFXI4_1,
-S_WSKL,
-S_HORNRODREADY,
-S_HORNRODDOWN,
-S_HORNRODUP,
-S_HORNRODATK1_1,
-S_HORNRODATK1_2,
-S_HORNRODATK1_3,
-S_HORNRODATK2_1,
-S_HORNRODATK2_2,
-S_HORNRODATK2_3,
-S_HORNRODATK2_4,
-S_HORNRODATK2_5,
-S_HORNRODATK2_6,
-S_HORNRODATK2_7,
-S_HORNRODATK2_8,
-S_HORNRODATK2_9,
-S_HRODFX1_1,
-S_HRODFX1_2,
-S_HRODFXI1_1,
-S_HRODFXI1_2,
-S_HRODFXI1_3,
-S_HRODFXI1_4,
-S_HRODFXI1_5,
-S_HRODFXI1_6,
-S_HRODFX2_1,
-S_HRODFX2_2,
-S_HRODFX2_3,
-S_HRODFX2_4,
-S_HRODFXI2_1,
-S_HRODFXI2_2,
-S_HRODFXI2_3,
-S_HRODFXI2_4,
-S_HRODFXI2_5,
-S_HRODFXI2_6,
-S_HRODFXI2_7,
-S_HRODFXI2_8,
-S_RAINPLR1_1,
-S_RAINPLR2_1,
-S_RAINPLR3_1,
-S_RAINPLR4_1,
-S_RAINPLR1X_1,
-S_RAINPLR1X_2,
-S_RAINPLR1X_3,
-S_RAINPLR1X_4,
-S_RAINPLR1X_5,
-S_RAINPLR2X_1,
-S_RAINPLR2X_2,
-S_RAINPLR2X_3,
-S_RAINPLR2X_4,
-S_RAINPLR2X_5,
-S_RAINPLR3X_1,
-S_RAINPLR3X_2,
-S_RAINPLR3X_3,
-S_RAINPLR3X_4,
-S_RAINPLR3X_5,
-S_RAINPLR4X_1,
-S_RAINPLR4X_2,
-S_RAINPLR4X_3,
-S_RAINPLR4X_4,
-S_RAINPLR4X_5,
-S_RAINAIRXPLR1_1,
-S_RAINAIRXPLR2_1,
-S_RAINAIRXPLR3_1,
-S_RAINAIRXPLR4_1,
-S_RAINAIRXPLR1_2,
-S_RAINAIRXPLR2_2,
-S_RAINAIRXPLR3_2,
-S_RAINAIRXPLR4_2,
-S_RAINAIRXPLR1_3,
-S_RAINAIRXPLR2_3,
-S_RAINAIRXPLR3_3,
-S_RAINAIRXPLR4_3,
-S_GOLDWANDREADY,
-S_GOLDWANDDOWN,
-S_GOLDWANDUP,
-S_GOLDWANDATK1_1,
-S_GOLDWANDATK1_2,
-S_GOLDWANDATK1_3,
-S_GOLDWANDATK1_4,
-S_GOLDWANDATK2_1,
-S_GOLDWANDATK2_2,
-S_GOLDWANDATK2_3,
-S_GOLDWANDATK2_4,
-S_GWANDFX1_1,
-S_GWANDFX1_2,
-S_GWANDFXI1_1,
-S_GWANDFXI1_2,
-S_GWANDFXI1_3,
-S_GWANDFXI1_4,
-S_GWANDFX2_1,
-S_GWANDFX2_2,
-S_GWANDPUFF1_1,
-S_GWANDPUFF1_2,
-S_GWANDPUFF1_3,
-S_GWANDPUFF1_4,
-S_GWANDPUFF1_5,
-S_WPHX,
-S_PHOENIXREADY,
-S_PHOENIXDOWN,
-S_PHOENIXUP,
-S_PHOENIXATK1_1,
-S_PHOENIXATK1_2,
-S_PHOENIXATK1_3,
-S_PHOENIXATK1_4,
-S_PHOENIXATK1_5,
-S_PHOENIXATK2_1,
-S_PHOENIXATK2_2,
-S_PHOENIXATK2_3,
-S_PHOENIXATK2_4,
-S_PHOENIXFX1_1,
-S_PHOENIXFXI1_1,
-S_PHOENIXFXI1_2,
-S_PHOENIXFXI1_3,
-S_PHOENIXFXI1_4,
-S_PHOENIXFXI1_5,
-S_PHOENIXFXI1_6,
-S_PHOENIXFXI1_7,
-S_PHOENIXFXI1_8,
-S_PHOENIXPUFF1,
-S_PHOENIXPUFF2,
-S_PHOENIXPUFF3,
-S_PHOENIXPUFF4,
-S_PHOENIXPUFF5,
-S_PHOENIXFX2_1,
-S_PHOENIXFX2_2,
-S_PHOENIXFX2_3,
-S_PHOENIXFX2_4,
-S_PHOENIXFX2_5,
-S_PHOENIXFX2_6,
-S_PHOENIXFX2_7,
-S_PHOENIXFX2_8,
-S_PHOENIXFX2_9,
-S_PHOENIXFX2_10,
-S_PHOENIXFXI2_1,
-S_PHOENIXFXI2_2,
-S_PHOENIXFXI2_3,
-S_PHOENIXFXI2_4,
-S_PHOENIXFXI2_5,
-S_WBOW,
-S_CRBOW1,
-S_CRBOW2,
-S_CRBOW3,
-S_CRBOW4,
-S_CRBOW5,
-S_CRBOW6,
-S_CRBOW7,
-S_CRBOW8,
-S_CRBOW9,
-S_CRBOW10,
-S_CRBOW11,
-S_CRBOW12,
-S_CRBOW13,
-S_CRBOW14,
-S_CRBOW15,
-S_CRBOW16,
-S_CRBOW17,
-S_CRBOW18,
-S_CRBOWDOWN,
-S_CRBOWUP,
-S_CRBOWATK1_1,
-S_CRBOWATK1_2,
-S_CRBOWATK1_3,
-S_CRBOWATK1_4,
-S_CRBOWATK1_5,
-S_CRBOWATK1_6,
-S_CRBOWATK1_7,
-S_CRBOWATK1_8,
-S_CRBOWATK2_1,
-S_CRBOWATK2_2,
-S_CRBOWATK2_3,
-S_CRBOWATK2_4,
-S_CRBOWATK2_5,
-S_CRBOWATK2_6,
-S_CRBOWATK2_7,
-S_CRBOWATK2_8,
-S_CRBOWFX1,
-S_CRBOWFXI1_1,
-S_CRBOWFXI1_2,
-S_CRBOWFXI1_3,
-S_CRBOWFX2,
-S_CRBOWFX3,
-S_CRBOWFXI3_1,
-S_CRBOWFXI3_2,
-S_CRBOWFXI3_3,
-S_CRBOWFX4_1,
-S_CRBOWFX4_2,
-S_BLOOD1,
-S_BLOOD2,
-S_BLOOD3,
-S_BLOODSPLATTER1,
-S_BLOODSPLATTER2,
-S_BLOODSPLATTER3,
-S_BLOODSPLATTERX,
-S_PLAY,
-S_PLAY_RUN1,
-S_PLAY_RUN2,
-S_PLAY_RUN3,
-S_PLAY_RUN4,
-S_PLAY_ATK1,
-S_PLAY_ATK2,
-S_PLAY_PAIN,
-S_PLAY_PAIN2,
-S_PLAY_DIE1,
-S_PLAY_DIE2,
-S_PLAY_DIE3,
-S_PLAY_DIE4,
-S_PLAY_DIE5,
-S_PLAY_DIE6,
-S_PLAY_DIE7,
-S_PLAY_DIE8,
-S_PLAY_DIE9,
-S_PLAY_XDIE1,
-S_PLAY_XDIE2,
-S_PLAY_XDIE3,
-S_PLAY_XDIE4,
-S_PLAY_XDIE5,
-S_PLAY_XDIE6,
-S_PLAY_XDIE7,
-S_PLAY_XDIE8,
-S_PLAY_XDIE9,
-S_PLAY_FDTH1,
-S_PLAY_FDTH2,
-S_PLAY_FDTH3,
-S_PLAY_FDTH4,
-S_PLAY_FDTH5,
-S_PLAY_FDTH6,
-S_PLAY_FDTH7,
-S_PLAY_FDTH8,
-S_PLAY_FDTH9,
-S_PLAY_FDTH10,
-S_PLAY_FDTH11,
-S_PLAY_FDTH12,
-S_PLAY_FDTH13,
-S_PLAY_FDTH14,
-S_PLAY_FDTH15,
-S_PLAY_FDTH16,
-S_PLAY_FDTH17,
-S_PLAY_FDTH18,
-S_PLAY_FDTH19,
-S_PLAY_FDTH20,
-S_BLOODYSKULL1,
-S_BLOODYSKULL2,
-S_BLOODYSKULL3,
-S_BLOODYSKULL4,
-S_BLOODYSKULL5,
-S_BLOODYSKULLX1,
-S_BLOODYSKULLX2,
-S_CHICPLAY,
-S_CHICPLAY_RUN1,
-S_CHICPLAY_RUN2,
-S_CHICPLAY_RUN3,
-S_CHICPLAY_RUN4,
-S_CHICPLAY_ATK1,
-S_CHICPLAY_PAIN,
-S_CHICPLAY_PAIN2,
-S_CHICKEN_LOOK1,
-S_CHICKEN_LOOK2,
-S_CHICKEN_WALK1,
-S_CHICKEN_WALK2,
-S_CHICKEN_PAIN1,
-S_CHICKEN_PAIN2,
-S_CHICKEN_ATK1,
-S_CHICKEN_ATK2,
-S_CHICKEN_DIE1,
-S_CHICKEN_DIE2,
-S_CHICKEN_DIE3,
-S_CHICKEN_DIE4,
-S_CHICKEN_DIE5,
-S_CHICKEN_DIE6,
-S_CHICKEN_DIE7,
-S_CHICKEN_DIE8,
-S_FEATHER1,
-S_FEATHER2,
-S_FEATHER3,
-S_FEATHER4,
-S_FEATHER5,
-S_FEATHER6,
-S_FEATHER7,
-S_FEATHER8,
-S_FEATHERX,
-S_MUMMY_LOOK1,
-S_MUMMY_LOOK2,
-S_MUMMY_WALK1,
-S_MUMMY_WALK2,
-S_MUMMY_WALK3,
-S_MUMMY_WALK4,
-S_MUMMY_ATK1,
-S_MUMMY_ATK2,
-S_MUMMY_ATK3,
-S_MUMMYL_ATK1,
-S_MUMMYL_ATK2,
-S_MUMMYL_ATK3,
-S_MUMMYL_ATK4,
-S_MUMMYL_ATK5,
-S_MUMMYL_ATK6,
-S_MUMMY_PAIN1,
-S_MUMMY_PAIN2,
-S_MUMMY_DIE1,
-S_MUMMY_DIE2,
-S_MUMMY_DIE3,
-S_MUMMY_DIE4,
-S_MUMMY_DIE5,
-S_MUMMY_DIE6,
-S_MUMMY_DIE7,
-S_MUMMY_DIE8,
-S_MUMMY_SOUL1,
-S_MUMMY_SOUL2,
-S_MUMMY_SOUL3,
-S_MUMMY_SOUL4,
-S_MUMMY_SOUL5,
-S_MUMMY_SOUL6,
-S_MUMMY_SOUL7,
-S_MUMMYFX1_1,
-S_MUMMYFX1_2,
-S_MUMMYFX1_3,
-S_MUMMYFX1_4,
-S_MUMMYFXI1_1,
-S_MUMMYFXI1_2,
-S_MUMMYFXI1_3,
-S_MUMMYFXI1_4,
-S_BEAST_LOOK1,
-S_BEAST_LOOK2,
-S_BEAST_WALK1,
-S_BEAST_WALK2,
-S_BEAST_WALK3,
-S_BEAST_WALK4,
-S_BEAST_WALK5,
-S_BEAST_WALK6,
-S_BEAST_ATK1,
-S_BEAST_ATK2,
-S_BEAST_PAIN1,
-S_BEAST_PAIN2,
-S_BEAST_DIE1,
-S_BEAST_DIE2,
-S_BEAST_DIE3,
-S_BEAST_DIE4,
-S_BEAST_DIE5,
-S_BEAST_DIE6,
-S_BEAST_DIE7,
-S_BEAST_DIE8,
-S_BEAST_DIE9,
-S_BEAST_XDIE1,
-S_BEAST_XDIE2,
-S_BEAST_XDIE3,
-S_BEAST_XDIE4,
-S_BEAST_XDIE5,
-S_BEAST_XDIE6,
-S_BEAST_XDIE7,
-S_BEAST_XDIE8,
-S_BEASTBALL1,
-S_BEASTBALL2,
-S_BEASTBALL3,
-S_BEASTBALL4,
-S_BEASTBALL5,
-S_BEASTBALL6,
-S_BEASTBALLX1,
-S_BEASTBALLX2,
-S_BEASTBALLX3,
-S_BEASTBALLX4,
-S_BEASTBALLX5,
-S_BURNBALL1,
-S_BURNBALL2,
-S_BURNBALL3,
-S_BURNBALL4,
-S_BURNBALL5,
-S_BURNBALL6,
-S_BURNBALL7,
-S_BURNBALL8,
-S_BURNBALLFB1,
-S_BURNBALLFB2,
-S_BURNBALLFB3,
-S_BURNBALLFB4,
-S_BURNBALLFB5,
-S_BURNBALLFB6,
-S_BURNBALLFB7,
-S_BURNBALLFB8,
-S_PUFFY1,
-S_PUFFY2,
-S_PUFFY3,
-S_PUFFY4,
-S_PUFFY5,
-S_SNAKE_LOOK1,
-S_SNAKE_LOOK2,
-S_SNAKE_WALK1,
-S_SNAKE_WALK2,
-S_SNAKE_WALK3,
-S_SNAKE_WALK4,
-S_SNAKE_ATK1,
-S_SNAKE_ATK2,
-S_SNAKE_ATK3,
-S_SNAKE_ATK4,
-S_SNAKE_ATK5,
-S_SNAKE_ATK6,
-S_SNAKE_ATK7,
-S_SNAKE_ATK8,
-S_SNAKE_ATK9,
-S_SNAKE_PAIN1,
-S_SNAKE_PAIN2,
-S_SNAKE_DIE1,
-S_SNAKE_DIE2,
-S_SNAKE_DIE3,
-S_SNAKE_DIE4,
-S_SNAKE_DIE5,
-S_SNAKE_DIE6,
-S_SNAKE_DIE7,
-S_SNAKE_DIE8,
-S_SNAKE_DIE9,
-S_SNAKE_DIE10,
-S_SNAKEPRO_A1,
-S_SNAKEPRO_A2,
-S_SNAKEPRO_A3,
-S_SNAKEPRO_A4,
-S_SNAKEPRO_AX1,
-S_SNAKEPRO_AX2,
-S_SNAKEPRO_AX3,
-S_SNAKEPRO_AX4,
-S_SNAKEPRO_AX5,
-S_SNAKEPRO_B1,
-S_SNAKEPRO_B2,
-S_SNAKEPRO_BX1,
-S_SNAKEPRO_BX2,
-S_SNAKEPRO_BX3,
-S_SNAKEPRO_BX4,
-S_HEAD_LOOK,
-S_HEAD_FLOAT,
-S_HEAD_ATK1,
-S_HEAD_ATK2,
-S_HEAD_PAIN1,
-S_HEAD_PAIN2,
-S_HEAD_DIE1,
-S_HEAD_DIE2,
-S_HEAD_DIE3,
-S_HEAD_DIE4,
-S_HEAD_DIE5,
-S_HEAD_DIE6,
-S_HEAD_DIE7,
-S_HEADFX1_1,
-S_HEADFX1_2,
-S_HEADFX1_3,
-S_HEADFXI1_1,
-S_HEADFXI1_2,
-S_HEADFXI1_3,
-S_HEADFXI1_4,
-S_HEADFX2_1,
-S_HEADFX2_2,
-S_HEADFX2_3,
-S_HEADFXI2_1,
-S_HEADFXI2_2,
-S_HEADFXI2_3,
-S_HEADFXI2_4,
-S_HEADFX3_1,
-S_HEADFX3_2,
-S_HEADFX3_3,
-S_HEADFX3_4,
-S_HEADFX3_5,
-S_HEADFX3_6,
-S_HEADFXI3_1,
-S_HEADFXI3_2,
-S_HEADFXI3_3,
-S_HEADFXI3_4,
-S_HEADFX4_1,
-S_HEADFX4_2,
-S_HEADFX4_3,
-S_HEADFX4_4,
-S_HEADFX4_5,
-S_HEADFX4_6,
-S_HEADFX4_7,
-S_HEADFXI4_1,
-S_HEADFXI4_2,
-S_HEADFXI4_3,
-S_HEADFXI4_4,
-S_CLINK_LOOK1,
-S_CLINK_LOOK2,
-S_CLINK_WALK1,
-S_CLINK_WALK2,
-S_CLINK_WALK3,
-S_CLINK_WALK4,
-S_CLINK_ATK1,
-S_CLINK_ATK2,
-S_CLINK_ATK3,
-S_CLINK_PAIN1,
-S_CLINK_PAIN2,
-S_CLINK_DIE1,
-S_CLINK_DIE2,
-S_CLINK_DIE3,
-S_CLINK_DIE4,
-S_CLINK_DIE5,
-S_CLINK_DIE6,
-S_CLINK_DIE7,
-S_WIZARD_LOOK1,
-S_WIZARD_LOOK2,
-S_WIZARD_WALK1,
-S_WIZARD_WALK2,
-S_WIZARD_WALK3,
-S_WIZARD_WALK4,
-S_WIZARD_WALK5,
-S_WIZARD_WALK6,
-S_WIZARD_WALK7,
-S_WIZARD_WALK8,
-S_WIZARD_ATK1,
-S_WIZARD_ATK2,
-S_WIZARD_ATK3,
-S_WIZARD_ATK4,
-S_WIZARD_ATK5,
-S_WIZARD_ATK6,
-S_WIZARD_ATK7,
-S_WIZARD_ATK8,
-S_WIZARD_ATK9,
-S_WIZARD_PAIN1,
-S_WIZARD_PAIN2,
-S_WIZARD_DIE1,
-S_WIZARD_DIE2,
-S_WIZARD_DIE3,
-S_WIZARD_DIE4,
-S_WIZARD_DIE5,
-S_WIZARD_DIE6,
-S_WIZARD_DIE7,
-S_WIZARD_DIE8,
-S_WIZFX1_1,
-S_WIZFX1_2,
-S_WIZFXI1_1,
-S_WIZFXI1_2,
-S_WIZFXI1_3,
-S_WIZFXI1_4,
-S_WIZFXI1_5,
-S_IMP_LOOK1,
-S_IMP_LOOK2,
-S_IMP_LOOK3,
-S_IMP_LOOK4,
-S_IMP_FLY1,
-S_IMP_FLY2,
-S_IMP_FLY3,
-S_IMP_FLY4,
-S_IMP_FLY5,
-S_IMP_FLY6,
-S_IMP_FLY7,
-S_IMP_FLY8,
-S_IMP_MEATK1,
-S_IMP_MEATK2,
-S_IMP_MEATK3,
-S_IMP_MSATK1_1,
-S_IMP_MSATK1_2,
-S_IMP_MSATK1_3,
-S_IMP_MSATK1_4,
-S_IMP_MSATK1_5,
-S_IMP_MSATK1_6,
-S_IMP_MSATK2_1,
-S_IMP_MSATK2_2,
-S_IMP_MSATK2_3,
-S_IMP_PAIN1,
-S_IMP_PAIN2,
-S_IMP_DIE1,
-S_IMP_DIE2,
-S_IMP_XDIE1,
-S_IMP_XDIE2,
-S_IMP_XDIE3,
-S_IMP_XDIE4,
-S_IMP_XDIE5,
-S_IMP_CRASH1,
-S_IMP_CRASH2,
-S_IMP_CRASH3,
-S_IMP_CRASH4,
-S_IMP_XCRASH1,
-S_IMP_XCRASH2,
-S_IMP_XCRASH3,
-S_IMP_CHUNKA1,
-S_IMP_CHUNKA2,
-S_IMP_CHUNKA3,
-S_IMP_CHUNKB1,
-S_IMP_CHUNKB2,
-S_IMP_CHUNKB3,
-S_IMPFX1,
-S_IMPFX2,
-S_IMPFX3,
-S_IMPFXI1,
-S_IMPFXI2,
-S_IMPFXI3,
-S_IMPFXI4,
-S_KNIGHT_STND1,
-S_KNIGHT_STND2,
-S_KNIGHT_WALK1,
-S_KNIGHT_WALK2,
-S_KNIGHT_WALK3,
-S_KNIGHT_WALK4,
-S_KNIGHT_ATK1,
-S_KNIGHT_ATK2,
-S_KNIGHT_ATK3,
-S_KNIGHT_ATK4,
-S_KNIGHT_ATK5,
-S_KNIGHT_ATK6,
-S_KNIGHT_PAIN1,
-S_KNIGHT_PAIN2,
-S_KNIGHT_DIE1,
-S_KNIGHT_DIE2,
-S_KNIGHT_DIE3,
-S_KNIGHT_DIE4,
-S_KNIGHT_DIE5,
-S_KNIGHT_DIE6,
-S_KNIGHT_DIE7,
-S_SPINAXE1,
-S_SPINAXE2,
-S_SPINAXE3,
-S_SPINAXEX1,
-S_SPINAXEX2,
-S_SPINAXEX3,
-S_REDAXE1,
-S_REDAXE2,
-S_REDAXEX1,
-S_REDAXEX2,
-S_REDAXEX3,
-S_SRCR1_LOOK1,
-S_SRCR1_LOOK2,
-S_SRCR1_WALK1,
-S_SRCR1_WALK2,
-S_SRCR1_WALK3,
-S_SRCR1_WALK4,
-S_SRCR1_PAIN1,
-S_SRCR1_ATK1,
-S_SRCR1_ATK2,
-S_SRCR1_ATK3,
-S_SRCR1_ATK4,
-S_SRCR1_ATK5,
-S_SRCR1_ATK6,
-S_SRCR1_ATK7,
-S_SRCR1_DIE1,
-S_SRCR1_DIE2,
-S_SRCR1_DIE3,
-S_SRCR1_DIE4,
-S_SRCR1_DIE5,
-S_SRCR1_DIE6,
-S_SRCR1_DIE7,
-S_SRCR1_DIE8,
-S_SRCR1_DIE9,
-S_SRCR1_DIE10,
-S_SRCR1_DIE11,
-S_SRCR1_DIE12,
-S_SRCR1_DIE13,
-S_SRCR1_DIE14,
-S_SRCR1_DIE15,
-S_SRCR1_DIE16,
-S_SRCR1_DIE17,
-S_SRCRFX1_1,
-S_SRCRFX1_2,
-S_SRCRFX1_3,
-S_SRCRFXI1_1,
-S_SRCRFXI1_2,
-S_SRCRFXI1_3,
-S_SRCRFXI1_4,
-S_SRCRFXI1_5,
-S_SOR2_RISE1,
-S_SOR2_RISE2,
-S_SOR2_RISE3,
-S_SOR2_RISE4,
-S_SOR2_RISE5,
-S_SOR2_RISE6,
-S_SOR2_RISE7,
-S_SOR2_LOOK1,
-S_SOR2_LOOK2,
-S_SOR2_WALK1,
-S_SOR2_WALK2,
-S_SOR2_WALK3,
-S_SOR2_WALK4,
-S_SOR2_PAIN1,
-S_SOR2_PAIN2,
-S_SOR2_ATK1,
-S_SOR2_ATK2,
-S_SOR2_ATK3,
-S_SOR2_TELE1,
-S_SOR2_TELE2,
-S_SOR2_TELE3,
-S_SOR2_TELE4,
-S_SOR2_TELE5,
-S_SOR2_TELE6,
-S_SOR2_DIE1,
-S_SOR2_DIE2,
-S_SOR2_DIE3,
-S_SOR2_DIE4,
-S_SOR2_DIE5,
-S_SOR2_DIE6,
-S_SOR2_DIE7,
-S_SOR2_DIE8,
-S_SOR2_DIE9,
-S_SOR2_DIE10,
-S_SOR2_DIE11,
-S_SOR2_DIE12,
-S_SOR2_DIE13,
-S_SOR2_DIE14,
-S_SOR2_DIE15,
-S_SOR2FX1_1,
-S_SOR2FX1_2,
-S_SOR2FX1_3,
-S_SOR2FXI1_1,
-S_SOR2FXI1_2,
-S_SOR2FXI1_3,
-S_SOR2FXI1_4,
-S_SOR2FXI1_5,
-S_SOR2FXI1_6,
-S_SOR2FXSPARK1,
-S_SOR2FXSPARK2,
-S_SOR2FXSPARK3,
-S_SOR2FX2_1,
-S_SOR2FX2_2,
-S_SOR2FX2_3,
-S_SOR2FXI2_1,
-S_SOR2FXI2_2,
-S_SOR2FXI2_3,
-S_SOR2FXI2_4,
-S_SOR2FXI2_5,
-S_SOR2TELEFADE1,
-S_SOR2TELEFADE2,
-S_SOR2TELEFADE3,
-S_SOR2TELEFADE4,
-S_SOR2TELEFADE5,
-S_SOR2TELEFADE6,
-S_MNTR_LOOK1,
-S_MNTR_LOOK2,
-S_MNTR_WALK1,
-S_MNTR_WALK2,
-S_MNTR_WALK3,
-S_MNTR_WALK4,
-S_MNTR_ATK1_1,
-S_MNTR_ATK1_2,
-S_MNTR_ATK1_3,
-S_MNTR_ATK2_1,
-S_MNTR_ATK2_2,
-S_MNTR_ATK2_3,
-S_MNTR_ATK3_1,
-S_MNTR_ATK3_2,
-S_MNTR_ATK3_3,
-S_MNTR_ATK3_4,
-S_MNTR_ATK4_1,
-S_MNTR_PAIN1,
-S_MNTR_PAIN2,
-S_MNTR_DIE1,
-S_MNTR_DIE2,
-S_MNTR_DIE3,
-S_MNTR_DIE4,
-S_MNTR_DIE5,
-S_MNTR_DIE6,
-S_MNTR_DIE7,
-S_MNTR_DIE8,
-S_MNTR_DIE9,
-S_MNTR_DIE10,
-S_MNTR_DIE11,
-S_MNTR_DIE12,
-S_MNTR_DIE13,
-S_MNTR_DIE14,
-S_MNTR_DIE15,
-S_MNTRFX1_1,
-S_MNTRFX1_2,
-S_MNTRFXI1_1,
-S_MNTRFXI1_2,
-S_MNTRFXI1_3,
-S_MNTRFXI1_4,
-S_MNTRFXI1_5,
-S_MNTRFXI1_6,
-S_MNTRFX2_1,
-S_MNTRFXI2_1,
-S_MNTRFXI2_2,
-S_MNTRFXI2_3,
-S_MNTRFXI2_4,
-S_MNTRFXI2_5,
-S_MNTRFX3_1,
-S_MNTRFX3_2,
-S_MNTRFX3_3,
-S_MNTRFX3_4,
-S_MNTRFX3_5,
-S_MNTRFX3_6,
-S_MNTRFX3_7,
-S_MNTRFX3_8,
-S_MNTRFX3_9,
-S_AKYY1,
-S_AKYY2,
-S_AKYY3,
-S_AKYY4,
-S_AKYY5,
-S_AKYY6,
-S_AKYY7,
-S_AKYY8,
-S_AKYY9,
-S_AKYY10,
-S_BKYY1,
-S_BKYY2,
-S_BKYY3,
-S_BKYY4,
-S_BKYY5,
-S_BKYY6,
-S_BKYY7,
-S_BKYY8,
-S_BKYY9,
-S_BKYY10,
-S_CKYY1,
-S_CKYY2,
-S_CKYY3,
-S_CKYY4,
-S_CKYY5,
-S_CKYY6,
-S_CKYY7,
-S_CKYY8,
-S_CKYY9,
-S_AMG1,
-S_AMG2_1,
-S_AMG2_2,
-S_AMG2_3,
-S_AMM1,
-S_AMM2,
-S_AMC1,
-S_AMC2_1,
-S_AMC2_2,
-S_AMC2_3,
-S_AMS1_1,
-S_AMS1_2,
-S_AMS2_1,
-S_AMS2_2,
-S_AMP1_1,
-S_AMP1_2,
-S_AMP1_3,
-S_AMP2_1,
-S_AMP2_2,
-S_AMP2_3,
-S_AMB1_1,
-S_AMB1_2,
-S_AMB1_3,
-S_AMB2_1,
-S_AMB2_2,
-S_AMB2_3,
-S_SND_WIND,
-S_SND_WATERFALL,
-NUMSTATES
+typedef enum
+{
+ S_NULL,
+ S_FREETARGMOBJ,
+ S_ITEM_PTN1_1,
+ S_ITEM_PTN1_2,
+ S_ITEM_PTN1_3,
+ S_ITEM_SHLD1,
+ S_ITEM_SHD2_1,
+ S_ITEM_BAGH1,
+ S_ITEM_SPMP1,
+ S_HIDESPECIAL1,
+ S_HIDESPECIAL2,
+ S_HIDESPECIAL3,
+ S_HIDESPECIAL4,
+ S_HIDESPECIAL5,
+ S_HIDESPECIAL6,
+ S_HIDESPECIAL7,
+ S_HIDESPECIAL8,
+ S_HIDESPECIAL9,
+ S_HIDESPECIAL10,
+ S_HIDESPECIAL11,
+ S_DORMANTARTI1,
+ S_DORMANTARTI2,
+ S_DORMANTARTI3,
+ S_DORMANTARTI4,
+ S_DORMANTARTI5,
+ S_DORMANTARTI6,
+ S_DORMANTARTI7,
+ S_DORMANTARTI8,
+ S_DORMANTARTI9,
+ S_DORMANTARTI10,
+ S_DORMANTARTI11,
+ S_DORMANTARTI12,
+ S_DORMANTARTI13,
+ S_DORMANTARTI14,
+ S_DORMANTARTI15,
+ S_DORMANTARTI16,
+ S_DORMANTARTI17,
+ S_DORMANTARTI18,
+ S_DORMANTARTI19,
+ S_DORMANTARTI20,
+ S_DORMANTARTI21,
+ S_DEADARTI1,
+ S_DEADARTI2,
+ S_DEADARTI3,
+ S_DEADARTI4,
+ S_DEADARTI5,
+ S_DEADARTI6,
+ S_DEADARTI7,
+ S_DEADARTI8,
+ S_DEADARTI9,
+ S_DEADARTI10,
+ S_ARTI_INVS1,
+ S_ARTI_PTN2_1,
+ S_ARTI_PTN2_2,
+ S_ARTI_PTN2_3,
+ S_ARTI_SOAR1,
+ S_ARTI_SOAR2,
+ S_ARTI_SOAR3,
+ S_ARTI_SOAR4,
+ S_ARTI_INVU1,
+ S_ARTI_INVU2,
+ S_ARTI_INVU3,
+ S_ARTI_INVU4,
+ S_ARTI_PWBK1,
+ S_ARTI_EGGC1,
+ S_ARTI_EGGC2,
+ S_ARTI_EGGC3,
+ S_ARTI_EGGC4,
+ S_EGGFX1,
+ S_EGGFX2,
+ S_EGGFX3,
+ S_EGGFX4,
+ S_EGGFX5,
+ S_EGGFXI1_1,
+ S_EGGFXI1_2,
+ S_EGGFXI1_3,
+ S_EGGFXI1_4,
+ S_ARTI_SPHL1,
+ S_ARTI_TRCH1,
+ S_ARTI_TRCH2,
+ S_ARTI_TRCH3,
+ S_ARTI_FBMB1,
+ S_FIREBOMB1,
+ S_FIREBOMB2,
+ S_FIREBOMB3,
+ S_FIREBOMB4,
+ S_FIREBOMB5,
+ S_FIREBOMB6,
+ S_FIREBOMB7,
+ S_FIREBOMB8,
+ S_FIREBOMB9,
+ S_FIREBOMB10,
+ S_FIREBOMB11,
+ S_ARTI_ATLP1,
+ S_ARTI_ATLP2,
+ S_ARTI_ATLP3,
+ S_ARTI_ATLP4,
+ S_POD_WAIT1,
+ S_POD_PAIN1,
+ S_POD_DIE1,
+ S_POD_DIE2,
+ S_POD_DIE3,
+ S_POD_DIE4,
+ S_POD_GROW1,
+ S_POD_GROW2,
+ S_POD_GROW3,
+ S_POD_GROW4,
+ S_POD_GROW5,
+ S_POD_GROW6,
+ S_POD_GROW7,
+ S_POD_GROW8,
+ S_PODGOO1,
+ S_PODGOO2,
+ S_PODGOOX,
+ S_PODGENERATOR,
+ S_SPLASH1,
+ S_SPLASH2,
+ S_SPLASH3,
+ S_SPLASH4,
+ S_SPLASHX,
+ S_SPLASHBASE1,
+ S_SPLASHBASE2,
+ S_SPLASHBASE3,
+ S_SPLASHBASE4,
+ S_SPLASHBASE5,
+ S_SPLASHBASE6,
+ S_SPLASHBASE7,
+ S_LAVASPLASH1,
+ S_LAVASPLASH2,
+ S_LAVASPLASH3,
+ S_LAVASPLASH4,
+ S_LAVASPLASH5,
+ S_LAVASPLASH6,
+ S_LAVASMOKE1,
+ S_LAVASMOKE2,
+ S_LAVASMOKE3,
+ S_LAVASMOKE4,
+ S_LAVASMOKE5,
+ S_SLUDGECHUNK1,
+ S_SLUDGECHUNK2,
+ S_SLUDGECHUNK3,
+ S_SLUDGECHUNK4,
+ S_SLUDGECHUNKX,
+ S_SLUDGESPLASH1,
+ S_SLUDGESPLASH2,
+ S_SLUDGESPLASH3,
+ S_SLUDGESPLASH4,
+ S_SKULLHANG70_1,
+ S_SKULLHANG60_1,
+ S_SKULLHANG45_1,
+ S_SKULLHANG35_1,
+ S_CHANDELIER1,
+ S_CHANDELIER2,
+ S_CHANDELIER3,
+ S_SERPTORCH1,
+ S_SERPTORCH2,
+ S_SERPTORCH3,
+ S_SMALLPILLAR,
+ S_STALAGMITESMALL,
+ S_STALAGMITELARGE,
+ S_STALACTITESMALL,
+ S_STALACTITELARGE,
+ S_FIREBRAZIER1,
+ S_FIREBRAZIER2,
+ S_FIREBRAZIER3,
+ S_FIREBRAZIER4,
+ S_FIREBRAZIER5,
+ S_FIREBRAZIER6,
+ S_FIREBRAZIER7,
+ S_FIREBRAZIER8,
+ S_BARREL,
+ S_BRPILLAR,
+ S_MOSS1,
+ S_MOSS2,
+ S_WALLTORCH1,
+ S_WALLTORCH2,
+ S_WALLTORCH3,
+ S_HANGINGCORPSE,
+ S_KEYGIZMO1,
+ S_KEYGIZMO2,
+ S_KEYGIZMO3,
+ S_KGZ_START,
+ S_KGZ_BLUEFLOAT1,
+ S_KGZ_GREENFLOAT1,
+ S_KGZ_YELLOWFLOAT1,
+ S_VOLCANO1,
+ S_VOLCANO2,
+ S_VOLCANO3,
+ S_VOLCANO4,
+ S_VOLCANO5,
+ S_VOLCANO6,
+ S_VOLCANO7,
+ S_VOLCANO8,
+ S_VOLCANO9,
+ S_VOLCANOBALL1,
+ S_VOLCANOBALL2,
+ S_VOLCANOBALLX1,
+ S_VOLCANOBALLX2,
+ S_VOLCANOBALLX3,
+ S_VOLCANOBALLX4,
+ S_VOLCANOBALLX5,
+ S_VOLCANOBALLX6,
+ S_VOLCANOTBALL1,
+ S_VOLCANOTBALL2,
+ S_VOLCANOTBALLX1,
+ S_VOLCANOTBALLX2,
+ S_VOLCANOTBALLX3,
+ S_VOLCANOTBALLX4,
+ S_VOLCANOTBALLX5,
+ S_VOLCANOTBALLX6,
+ S_VOLCANOTBALLX7,
+ S_TELEGLITGEN1,
+ S_TELEGLITGEN2,
+ S_TELEGLITTER1_1,
+ S_TELEGLITTER1_2,
+ S_TELEGLITTER1_3,
+ S_TELEGLITTER1_4,
+ S_TELEGLITTER1_5,
+ S_TELEGLITTER2_1,
+ S_TELEGLITTER2_2,
+ S_TELEGLITTER2_3,
+ S_TELEGLITTER2_4,
+ S_TELEGLITTER2_5,
+ S_TFOG1,
+ S_TFOG2,
+ S_TFOG3,
+ S_TFOG4,
+ S_TFOG5,
+ S_TFOG6,
+ S_TFOG7,
+ S_TFOG8,
+ S_TFOG9,
+ S_TFOG10,
+ S_TFOG11,
+ S_TFOG12,
+ S_TFOG13,
+ S_LIGHTDONE,
+ S_STAFFREADY,
+ S_STAFFDOWN,
+ S_STAFFUP,
+ S_STAFFREADY2_1,
+ S_STAFFREADY2_2,
+ S_STAFFREADY2_3,
+ S_STAFFDOWN2,
+ S_STAFFUP2,
+ S_STAFFATK1_1,
+ S_STAFFATK1_2,
+ S_STAFFATK1_3,
+ S_STAFFATK2_1,
+ S_STAFFATK2_2,
+ S_STAFFATK2_3,
+ S_STAFFPUFF1,
+ S_STAFFPUFF2,
+ S_STAFFPUFF3,
+ S_STAFFPUFF4,
+ S_STAFFPUFF2_1,
+ S_STAFFPUFF2_2,
+ S_STAFFPUFF2_3,
+ S_STAFFPUFF2_4,
+ S_STAFFPUFF2_5,
+ S_STAFFPUFF2_6,
+ S_BEAKREADY,
+ S_BEAKDOWN,
+ S_BEAKUP,
+ S_BEAKATK1_1,
+ S_BEAKATK2_1,
+ S_WGNT,
+ S_GAUNTLETREADY,
+ S_GAUNTLETDOWN,
+ S_GAUNTLETUP,
+ S_GAUNTLETREADY2_1,
+ S_GAUNTLETREADY2_2,
+ S_GAUNTLETREADY2_3,
+ S_GAUNTLETDOWN2,
+ S_GAUNTLETUP2,
+ S_GAUNTLETATK1_1,
+ S_GAUNTLETATK1_2,
+ S_GAUNTLETATK1_3,
+ S_GAUNTLETATK1_4,
+ S_GAUNTLETATK1_5,
+ S_GAUNTLETATK1_6,
+ S_GAUNTLETATK1_7,
+ S_GAUNTLETATK2_1,
+ S_GAUNTLETATK2_2,
+ S_GAUNTLETATK2_3,
+ S_GAUNTLETATK2_4,
+ S_GAUNTLETATK2_5,
+ S_GAUNTLETATK2_6,
+ S_GAUNTLETATK2_7,
+ S_GAUNTLETPUFF1_1,
+ S_GAUNTLETPUFF1_2,
+ S_GAUNTLETPUFF1_3,
+ S_GAUNTLETPUFF1_4,
+ S_GAUNTLETPUFF2_1,
+ S_GAUNTLETPUFF2_2,
+ S_GAUNTLETPUFF2_3,
+ S_GAUNTLETPUFF2_4,
+ S_BLSR,
+ S_BLASTERREADY,
+ S_BLASTERDOWN,
+ S_BLASTERUP,
+ S_BLASTERATK1_1,
+ S_BLASTERATK1_2,
+ S_BLASTERATK1_3,
+ S_BLASTERATK1_4,
+ S_BLASTERATK1_5,
+ S_BLASTERATK1_6,
+ S_BLASTERATK2_1,
+ S_BLASTERATK2_2,
+ S_BLASTERATK2_3,
+ S_BLASTERATK2_4,
+ S_BLASTERATK2_5,
+ S_BLASTERATK2_6,
+ S_BLASTERFX1_1,
+ S_BLASTERFXI1_1,
+ S_BLASTERFXI1_2,
+ S_BLASTERFXI1_3,
+ S_BLASTERFXI1_4,
+ S_BLASTERFXI1_5,
+ S_BLASTERFXI1_6,
+ S_BLASTERFXI1_7,
+ S_BLASTERSMOKE1,
+ S_BLASTERSMOKE2,
+ S_BLASTERSMOKE3,
+ S_BLASTERSMOKE4,
+ S_BLASTERSMOKE5,
+ S_RIPPER1,
+ S_RIPPER2,
+ S_RIPPERX1,
+ S_RIPPERX2,
+ S_RIPPERX3,
+ S_RIPPERX4,
+ S_RIPPERX5,
+ S_BLASTERPUFF1_1,
+ S_BLASTERPUFF1_2,
+ S_BLASTERPUFF1_3,
+ S_BLASTERPUFF1_4,
+ S_BLASTERPUFF1_5,
+ S_BLASTERPUFF2_1,
+ S_BLASTERPUFF2_2,
+ S_BLASTERPUFF2_3,
+ S_BLASTERPUFF2_4,
+ S_BLASTERPUFF2_5,
+ S_BLASTERPUFF2_6,
+ S_BLASTERPUFF2_7,
+ S_WMCE,
+ S_MACEREADY,
+ S_MACEDOWN,
+ S_MACEUP,
+ S_MACEATK1_1,
+ S_MACEATK1_2,
+ S_MACEATK1_3,
+ S_MACEATK1_4,
+ S_MACEATK1_5,
+ S_MACEATK1_6,
+ S_MACEATK1_7,
+ S_MACEATK1_8,
+ S_MACEATK1_9,
+ S_MACEATK1_10,
+ S_MACEATK2_1,
+ S_MACEATK2_2,
+ S_MACEATK2_3,
+ S_MACEATK2_4,
+ S_MACEFX1_1,
+ S_MACEFX1_2,
+ S_MACEFXI1_1,
+ S_MACEFXI1_2,
+ S_MACEFXI1_3,
+ S_MACEFXI1_4,
+ S_MACEFXI1_5,
+ S_MACEFX2_1,
+ S_MACEFX2_2,
+ S_MACEFXI2_1,
+ S_MACEFX3_1,
+ S_MACEFX3_2,
+ S_MACEFX4_1,
+ S_MACEFXI4_1,
+ S_WSKL,
+ S_HORNRODREADY,
+ S_HORNRODDOWN,
+ S_HORNRODUP,
+ S_HORNRODATK1_1,
+ S_HORNRODATK1_2,
+ S_HORNRODATK1_3,
+ S_HORNRODATK2_1,
+ S_HORNRODATK2_2,
+ S_HORNRODATK2_3,
+ S_HORNRODATK2_4,
+ S_HORNRODATK2_5,
+ S_HORNRODATK2_6,
+ S_HORNRODATK2_7,
+ S_HORNRODATK2_8,
+ S_HORNRODATK2_9,
+ S_HRODFX1_1,
+ S_HRODFX1_2,
+ S_HRODFXI1_1,
+ S_HRODFXI1_2,
+ S_HRODFXI1_3,
+ S_HRODFXI1_4,
+ S_HRODFXI1_5,
+ S_HRODFXI1_6,
+ S_HRODFX2_1,
+ S_HRODFX2_2,
+ S_HRODFX2_3,
+ S_HRODFX2_4,
+ S_HRODFXI2_1,
+ S_HRODFXI2_2,
+ S_HRODFXI2_3,
+ S_HRODFXI2_4,
+ S_HRODFXI2_5,
+ S_HRODFXI2_6,
+ S_HRODFXI2_7,
+ S_HRODFXI2_8,
+ S_RAINPLR1_1,
+ S_RAINPLR2_1,
+ S_RAINPLR3_1,
+ S_RAINPLR4_1,
+ S_RAINPLR1X_1,
+ S_RAINPLR1X_2,
+ S_RAINPLR1X_3,
+ S_RAINPLR1X_4,
+ S_RAINPLR1X_5,
+ S_RAINPLR2X_1,
+ S_RAINPLR2X_2,
+ S_RAINPLR2X_3,
+ S_RAINPLR2X_4,
+ S_RAINPLR2X_5,
+ S_RAINPLR3X_1,
+ S_RAINPLR3X_2,
+ S_RAINPLR3X_3,
+ S_RAINPLR3X_4,
+ S_RAINPLR3X_5,
+ S_RAINPLR4X_1,
+ S_RAINPLR4X_2,
+ S_RAINPLR4X_3,
+ S_RAINPLR4X_4,
+ S_RAINPLR4X_5,
+ S_RAINAIRXPLR1_1,
+ S_RAINAIRXPLR2_1,
+ S_RAINAIRXPLR3_1,
+ S_RAINAIRXPLR4_1,
+ S_RAINAIRXPLR1_2,
+ S_RAINAIRXPLR2_2,
+ S_RAINAIRXPLR3_2,
+ S_RAINAIRXPLR4_2,
+ S_RAINAIRXPLR1_3,
+ S_RAINAIRXPLR2_3,
+ S_RAINAIRXPLR3_3,
+ S_RAINAIRXPLR4_3,
+ S_GOLDWANDREADY,
+ S_GOLDWANDDOWN,
+ S_GOLDWANDUP,
+ S_GOLDWANDATK1_1,
+ S_GOLDWANDATK1_2,
+ S_GOLDWANDATK1_3,
+ S_GOLDWANDATK1_4,
+ S_GOLDWANDATK2_1,
+ S_GOLDWANDATK2_2,
+ S_GOLDWANDATK2_3,
+ S_GOLDWANDATK2_4,
+ S_GWANDFX1_1,
+ S_GWANDFX1_2,
+ S_GWANDFXI1_1,
+ S_GWANDFXI1_2,
+ S_GWANDFXI1_3,
+ S_GWANDFXI1_4,
+ S_GWANDFX2_1,
+ S_GWANDFX2_2,
+ S_GWANDPUFF1_1,
+ S_GWANDPUFF1_2,
+ S_GWANDPUFF1_3,
+ S_GWANDPUFF1_4,
+ S_GWANDPUFF1_5,
+ S_WPHX,
+ S_PHOENIXREADY,
+ S_PHOENIXDOWN,
+ S_PHOENIXUP,
+ S_PHOENIXATK1_1,
+ S_PHOENIXATK1_2,
+ S_PHOENIXATK1_3,
+ S_PHOENIXATK1_4,
+ S_PHOENIXATK1_5,
+ S_PHOENIXATK2_1,
+ S_PHOENIXATK2_2,
+ S_PHOENIXATK2_3,
+ S_PHOENIXATK2_4,
+ S_PHOENIXFX1_1,
+ S_PHOENIXFXI1_1,
+ S_PHOENIXFXI1_2,
+ S_PHOENIXFXI1_3,
+ S_PHOENIXFXI1_4,
+ S_PHOENIXFXI1_5,
+ S_PHOENIXFXI1_6,
+ S_PHOENIXFXI1_7,
+ S_PHOENIXFXI1_8,
+ S_PHOENIXPUFF1,
+ S_PHOENIXPUFF2,
+ S_PHOENIXPUFF3,
+ S_PHOENIXPUFF4,
+ S_PHOENIXPUFF5,
+ S_PHOENIXFX2_1,
+ S_PHOENIXFX2_2,
+ S_PHOENIXFX2_3,
+ S_PHOENIXFX2_4,
+ S_PHOENIXFX2_5,
+ S_PHOENIXFX2_6,
+ S_PHOENIXFX2_7,
+ S_PHOENIXFX2_8,
+ S_PHOENIXFX2_9,
+ S_PHOENIXFX2_10,
+ S_PHOENIXFXI2_1,
+ S_PHOENIXFXI2_2,
+ S_PHOENIXFXI2_3,
+ S_PHOENIXFXI2_4,
+ S_PHOENIXFXI2_5,
+ S_WBOW,
+ S_CRBOW1,
+ S_CRBOW2,
+ S_CRBOW3,
+ S_CRBOW4,
+ S_CRBOW5,
+ S_CRBOW6,
+ S_CRBOW7,
+ S_CRBOW8,
+ S_CRBOW9,
+ S_CRBOW10,
+ S_CRBOW11,
+ S_CRBOW12,
+ S_CRBOW13,
+ S_CRBOW14,
+ S_CRBOW15,
+ S_CRBOW16,
+ S_CRBOW17,
+ S_CRBOW18,
+ S_CRBOWDOWN,
+ S_CRBOWUP,
+ S_CRBOWATK1_1,
+ S_CRBOWATK1_2,
+ S_CRBOWATK1_3,
+ S_CRBOWATK1_4,
+ S_CRBOWATK1_5,
+ S_CRBOWATK1_6,
+ S_CRBOWATK1_7,
+ S_CRBOWATK1_8,
+ S_CRBOWATK2_1,
+ S_CRBOWATK2_2,
+ S_CRBOWATK2_3,
+ S_CRBOWATK2_4,
+ S_CRBOWATK2_5,
+ S_CRBOWATK2_6,
+ S_CRBOWATK2_7,
+ S_CRBOWATK2_8,
+ S_CRBOWFX1,
+ S_CRBOWFXI1_1,
+ S_CRBOWFXI1_2,
+ S_CRBOWFXI1_3,
+ S_CRBOWFX2,
+ S_CRBOWFX3,
+ S_CRBOWFXI3_1,
+ S_CRBOWFXI3_2,
+ S_CRBOWFXI3_3,
+ S_CRBOWFX4_1,
+ S_CRBOWFX4_2,
+ S_BLOOD1,
+ S_BLOOD2,
+ S_BLOOD3,
+ S_BLOODSPLATTER1,
+ S_BLOODSPLATTER2,
+ S_BLOODSPLATTER3,
+ S_BLOODSPLATTERX,
+ S_PLAY,
+ S_PLAY_RUN1,
+ S_PLAY_RUN2,
+ S_PLAY_RUN3,
+ S_PLAY_RUN4,
+ S_PLAY_ATK1,
+ S_PLAY_ATK2,
+ S_PLAY_PAIN,
+ S_PLAY_PAIN2,
+ S_PLAY_DIE1,
+ S_PLAY_DIE2,
+ S_PLAY_DIE3,
+ S_PLAY_DIE4,
+ S_PLAY_DIE5,
+ S_PLAY_DIE6,
+ S_PLAY_DIE7,
+ S_PLAY_DIE8,
+ S_PLAY_DIE9,
+ S_PLAY_XDIE1,
+ S_PLAY_XDIE2,
+ S_PLAY_XDIE3,
+ S_PLAY_XDIE4,
+ S_PLAY_XDIE5,
+ S_PLAY_XDIE6,
+ S_PLAY_XDIE7,
+ S_PLAY_XDIE8,
+ S_PLAY_XDIE9,
+ S_PLAY_FDTH1,
+ S_PLAY_FDTH2,
+ S_PLAY_FDTH3,
+ S_PLAY_FDTH4,
+ S_PLAY_FDTH5,
+ S_PLAY_FDTH6,
+ S_PLAY_FDTH7,
+ S_PLAY_FDTH8,
+ S_PLAY_FDTH9,
+ S_PLAY_FDTH10,
+ S_PLAY_FDTH11,
+ S_PLAY_FDTH12,
+ S_PLAY_FDTH13,
+ S_PLAY_FDTH14,
+ S_PLAY_FDTH15,
+ S_PLAY_FDTH16,
+ S_PLAY_FDTH17,
+ S_PLAY_FDTH18,
+ S_PLAY_FDTH19,
+ S_PLAY_FDTH20,
+ S_BLOODYSKULL1,
+ S_BLOODYSKULL2,
+ S_BLOODYSKULL3,
+ S_BLOODYSKULL4,
+ S_BLOODYSKULL5,
+ S_BLOODYSKULLX1,
+ S_BLOODYSKULLX2,
+ S_CHICPLAY,
+ S_CHICPLAY_RUN1,
+ S_CHICPLAY_RUN2,
+ S_CHICPLAY_RUN3,
+ S_CHICPLAY_RUN4,
+ S_CHICPLAY_ATK1,
+ S_CHICPLAY_PAIN,
+ S_CHICPLAY_PAIN2,
+ S_CHICKEN_LOOK1,
+ S_CHICKEN_LOOK2,
+ S_CHICKEN_WALK1,
+ S_CHICKEN_WALK2,
+ S_CHICKEN_PAIN1,
+ S_CHICKEN_PAIN2,
+ S_CHICKEN_ATK1,
+ S_CHICKEN_ATK2,
+ S_CHICKEN_DIE1,
+ S_CHICKEN_DIE2,
+ S_CHICKEN_DIE3,
+ S_CHICKEN_DIE4,
+ S_CHICKEN_DIE5,
+ S_CHICKEN_DIE6,
+ S_CHICKEN_DIE7,
+ S_CHICKEN_DIE8,
+ S_FEATHER1,
+ S_FEATHER2,
+ S_FEATHER3,
+ S_FEATHER4,
+ S_FEATHER5,
+ S_FEATHER6,
+ S_FEATHER7,
+ S_FEATHER8,
+ S_FEATHERX,
+ S_MUMMY_LOOK1,
+ S_MUMMY_LOOK2,
+ S_MUMMY_WALK1,
+ S_MUMMY_WALK2,
+ S_MUMMY_WALK3,
+ S_MUMMY_WALK4,
+ S_MUMMY_ATK1,
+ S_MUMMY_ATK2,
+ S_MUMMY_ATK3,
+ S_MUMMYL_ATK1,
+ S_MUMMYL_ATK2,
+ S_MUMMYL_ATK3,
+ S_MUMMYL_ATK4,
+ S_MUMMYL_ATK5,
+ S_MUMMYL_ATK6,
+ S_MUMMY_PAIN1,
+ S_MUMMY_PAIN2,
+ S_MUMMY_DIE1,
+ S_MUMMY_DIE2,
+ S_MUMMY_DIE3,
+ S_MUMMY_DIE4,
+ S_MUMMY_DIE5,
+ S_MUMMY_DIE6,
+ S_MUMMY_DIE7,
+ S_MUMMY_DIE8,
+ S_MUMMY_SOUL1,
+ S_MUMMY_SOUL2,
+ S_MUMMY_SOUL3,
+ S_MUMMY_SOUL4,
+ S_MUMMY_SOUL5,
+ S_MUMMY_SOUL6,
+ S_MUMMY_SOUL7,
+ S_MUMMYFX1_1,
+ S_MUMMYFX1_2,
+ S_MUMMYFX1_3,
+ S_MUMMYFX1_4,
+ S_MUMMYFXI1_1,
+ S_MUMMYFXI1_2,
+ S_MUMMYFXI1_3,
+ S_MUMMYFXI1_4,
+ S_BEAST_LOOK1,
+ S_BEAST_LOOK2,
+ S_BEAST_WALK1,
+ S_BEAST_WALK2,
+ S_BEAST_WALK3,
+ S_BEAST_WALK4,
+ S_BEAST_WALK5,
+ S_BEAST_WALK6,
+ S_BEAST_ATK1,
+ S_BEAST_ATK2,
+ S_BEAST_PAIN1,
+ S_BEAST_PAIN2,
+ S_BEAST_DIE1,
+ S_BEAST_DIE2,
+ S_BEAST_DIE3,
+ S_BEAST_DIE4,
+ S_BEAST_DIE5,
+ S_BEAST_DIE6,
+ S_BEAST_DIE7,
+ S_BEAST_DIE8,
+ S_BEAST_DIE9,
+ S_BEAST_XDIE1,
+ S_BEAST_XDIE2,
+ S_BEAST_XDIE3,
+ S_BEAST_XDIE4,
+ S_BEAST_XDIE5,
+ S_BEAST_XDIE6,
+ S_BEAST_XDIE7,
+ S_BEAST_XDIE8,
+ S_BEASTBALL1,
+ S_BEASTBALL2,
+ S_BEASTBALL3,
+ S_BEASTBALL4,
+ S_BEASTBALL5,
+ S_BEASTBALL6,
+ S_BEASTBALLX1,
+ S_BEASTBALLX2,
+ S_BEASTBALLX3,
+ S_BEASTBALLX4,
+ S_BEASTBALLX5,
+ S_BURNBALL1,
+ S_BURNBALL2,
+ S_BURNBALL3,
+ S_BURNBALL4,
+ S_BURNBALL5,
+ S_BURNBALL6,
+ S_BURNBALL7,
+ S_BURNBALL8,
+ S_BURNBALLFB1,
+ S_BURNBALLFB2,
+ S_BURNBALLFB3,
+ S_BURNBALLFB4,
+ S_BURNBALLFB5,
+ S_BURNBALLFB6,
+ S_BURNBALLFB7,
+ S_BURNBALLFB8,
+ S_PUFFY1,
+ S_PUFFY2,
+ S_PUFFY3,
+ S_PUFFY4,
+ S_PUFFY5,
+ S_SNAKE_LOOK1,
+ S_SNAKE_LOOK2,
+ S_SNAKE_WALK1,
+ S_SNAKE_WALK2,
+ S_SNAKE_WALK3,
+ S_SNAKE_WALK4,
+ S_SNAKE_ATK1,
+ S_SNAKE_ATK2,
+ S_SNAKE_ATK3,
+ S_SNAKE_ATK4,
+ S_SNAKE_ATK5,
+ S_SNAKE_ATK6,
+ S_SNAKE_ATK7,
+ S_SNAKE_ATK8,
+ S_SNAKE_ATK9,
+ S_SNAKE_PAIN1,
+ S_SNAKE_PAIN2,
+ S_SNAKE_DIE1,
+ S_SNAKE_DIE2,
+ S_SNAKE_DIE3,
+ S_SNAKE_DIE4,
+ S_SNAKE_DIE5,
+ S_SNAKE_DIE6,
+ S_SNAKE_DIE7,
+ S_SNAKE_DIE8,
+ S_SNAKE_DIE9,
+ S_SNAKE_DIE10,
+ S_SNAKEPRO_A1,
+ S_SNAKEPRO_A2,
+ S_SNAKEPRO_A3,
+ S_SNAKEPRO_A4,
+ S_SNAKEPRO_AX1,
+ S_SNAKEPRO_AX2,
+ S_SNAKEPRO_AX3,
+ S_SNAKEPRO_AX4,
+ S_SNAKEPRO_AX5,
+ S_SNAKEPRO_B1,
+ S_SNAKEPRO_B2,
+ S_SNAKEPRO_BX1,
+ S_SNAKEPRO_BX2,
+ S_SNAKEPRO_BX3,
+ S_SNAKEPRO_BX4,
+ S_HEAD_LOOK,
+ S_HEAD_FLOAT,
+ S_HEAD_ATK1,
+ S_HEAD_ATK2,
+ S_HEAD_PAIN1,
+ S_HEAD_PAIN2,
+ S_HEAD_DIE1,
+ S_HEAD_DIE2,
+ S_HEAD_DIE3,
+ S_HEAD_DIE4,
+ S_HEAD_DIE5,
+ S_HEAD_DIE6,
+ S_HEAD_DIE7,
+ S_HEADFX1_1,
+ S_HEADFX1_2,
+ S_HEADFX1_3,
+ S_HEADFXI1_1,
+ S_HEADFXI1_2,
+ S_HEADFXI1_3,
+ S_HEADFXI1_4,
+ S_HEADFX2_1,
+ S_HEADFX2_2,
+ S_HEADFX2_3,
+ S_HEADFXI2_1,
+ S_HEADFXI2_2,
+ S_HEADFXI2_3,
+ S_HEADFXI2_4,
+ S_HEADFX3_1,
+ S_HEADFX3_2,
+ S_HEADFX3_3,
+ S_HEADFX3_4,
+ S_HEADFX3_5,
+ S_HEADFX3_6,
+ S_HEADFXI3_1,
+ S_HEADFXI3_2,
+ S_HEADFXI3_3,
+ S_HEADFXI3_4,
+ S_HEADFX4_1,
+ S_HEADFX4_2,
+ S_HEADFX4_3,
+ S_HEADFX4_4,
+ S_HEADFX4_5,
+ S_HEADFX4_6,
+ S_HEADFX4_7,
+ S_HEADFXI4_1,
+ S_HEADFXI4_2,
+ S_HEADFXI4_3,
+ S_HEADFXI4_4,
+ S_CLINK_LOOK1,
+ S_CLINK_LOOK2,
+ S_CLINK_WALK1,
+ S_CLINK_WALK2,
+ S_CLINK_WALK3,
+ S_CLINK_WALK4,
+ S_CLINK_ATK1,
+ S_CLINK_ATK2,
+ S_CLINK_ATK3,
+ S_CLINK_PAIN1,
+ S_CLINK_PAIN2,
+ S_CLINK_DIE1,
+ S_CLINK_DIE2,
+ S_CLINK_DIE3,
+ S_CLINK_DIE4,
+ S_CLINK_DIE5,
+ S_CLINK_DIE6,
+ S_CLINK_DIE7,
+ S_WIZARD_LOOK1,
+ S_WIZARD_LOOK2,
+ S_WIZARD_WALK1,
+ S_WIZARD_WALK2,
+ S_WIZARD_WALK3,
+ S_WIZARD_WALK4,
+ S_WIZARD_WALK5,
+ S_WIZARD_WALK6,
+ S_WIZARD_WALK7,
+ S_WIZARD_WALK8,
+ S_WIZARD_ATK1,
+ S_WIZARD_ATK2,
+ S_WIZARD_ATK3,
+ S_WIZARD_ATK4,
+ S_WIZARD_ATK5,
+ S_WIZARD_ATK6,
+ S_WIZARD_ATK7,
+ S_WIZARD_ATK8,
+ S_WIZARD_ATK9,
+ S_WIZARD_PAIN1,
+ S_WIZARD_PAIN2,
+ S_WIZARD_DIE1,
+ S_WIZARD_DIE2,
+ S_WIZARD_DIE3,
+ S_WIZARD_DIE4,
+ S_WIZARD_DIE5,
+ S_WIZARD_DIE6,
+ S_WIZARD_DIE7,
+ S_WIZARD_DIE8,
+ S_WIZFX1_1,
+ S_WIZFX1_2,
+ S_WIZFXI1_1,
+ S_WIZFXI1_2,
+ S_WIZFXI1_3,
+ S_WIZFXI1_4,
+ S_WIZFXI1_5,
+ S_IMP_LOOK1,
+ S_IMP_LOOK2,
+ S_IMP_LOOK3,
+ S_IMP_LOOK4,
+ S_IMP_FLY1,
+ S_IMP_FLY2,
+ S_IMP_FLY3,
+ S_IMP_FLY4,
+ S_IMP_FLY5,
+ S_IMP_FLY6,
+ S_IMP_FLY7,
+ S_IMP_FLY8,
+ S_IMP_MEATK1,
+ S_IMP_MEATK2,
+ S_IMP_MEATK3,
+ S_IMP_MSATK1_1,
+ S_IMP_MSATK1_2,
+ S_IMP_MSATK1_3,
+ S_IMP_MSATK1_4,
+ S_IMP_MSATK1_5,
+ S_IMP_MSATK1_6,
+ S_IMP_MSATK2_1,
+ S_IMP_MSATK2_2,
+ S_IMP_MSATK2_3,
+ S_IMP_PAIN1,
+ S_IMP_PAIN2,
+ S_IMP_DIE1,
+ S_IMP_DIE2,
+ S_IMP_XDIE1,
+ S_IMP_XDIE2,
+ S_IMP_XDIE3,
+ S_IMP_XDIE4,
+ S_IMP_XDIE5,
+ S_IMP_CRASH1,
+ S_IMP_CRASH2,
+ S_IMP_CRASH3,
+ S_IMP_CRASH4,
+ S_IMP_XCRASH1,
+ S_IMP_XCRASH2,
+ S_IMP_XCRASH3,
+ S_IMP_CHUNKA1,
+ S_IMP_CHUNKA2,
+ S_IMP_CHUNKA3,
+ S_IMP_CHUNKB1,
+ S_IMP_CHUNKB2,
+ S_IMP_CHUNKB3,
+ S_IMPFX1,
+ S_IMPFX2,
+ S_IMPFX3,
+ S_IMPFXI1,
+ S_IMPFXI2,
+ S_IMPFXI3,
+ S_IMPFXI4,
+ S_KNIGHT_STND1,
+ S_KNIGHT_STND2,
+ S_KNIGHT_WALK1,
+ S_KNIGHT_WALK2,
+ S_KNIGHT_WALK3,
+ S_KNIGHT_WALK4,
+ S_KNIGHT_ATK1,
+ S_KNIGHT_ATK2,
+ S_KNIGHT_ATK3,
+ S_KNIGHT_ATK4,
+ S_KNIGHT_ATK5,
+ S_KNIGHT_ATK6,
+ S_KNIGHT_PAIN1,
+ S_KNIGHT_PAIN2,
+ S_KNIGHT_DIE1,
+ S_KNIGHT_DIE2,
+ S_KNIGHT_DIE3,
+ S_KNIGHT_DIE4,
+ S_KNIGHT_DIE5,
+ S_KNIGHT_DIE6,
+ S_KNIGHT_DIE7,
+ S_SPINAXE1,
+ S_SPINAXE2,
+ S_SPINAXE3,
+ S_SPINAXEX1,
+ S_SPINAXEX2,
+ S_SPINAXEX3,
+ S_REDAXE1,
+ S_REDAXE2,
+ S_REDAXEX1,
+ S_REDAXEX2,
+ S_REDAXEX3,
+ S_SRCR1_LOOK1,
+ S_SRCR1_LOOK2,
+ S_SRCR1_WALK1,
+ S_SRCR1_WALK2,
+ S_SRCR1_WALK3,
+ S_SRCR1_WALK4,
+ S_SRCR1_PAIN1,
+ S_SRCR1_ATK1,
+ S_SRCR1_ATK2,
+ S_SRCR1_ATK3,
+ S_SRCR1_ATK4,
+ S_SRCR1_ATK5,
+ S_SRCR1_ATK6,
+ S_SRCR1_ATK7,
+ S_SRCR1_DIE1,
+ S_SRCR1_DIE2,
+ S_SRCR1_DIE3,
+ S_SRCR1_DIE4,
+ S_SRCR1_DIE5,
+ S_SRCR1_DIE6,
+ S_SRCR1_DIE7,
+ S_SRCR1_DIE8,
+ S_SRCR1_DIE9,
+ S_SRCR1_DIE10,
+ S_SRCR1_DIE11,
+ S_SRCR1_DIE12,
+ S_SRCR1_DIE13,
+ S_SRCR1_DIE14,
+ S_SRCR1_DIE15,
+ S_SRCR1_DIE16,
+ S_SRCR1_DIE17,
+ S_SRCRFX1_1,
+ S_SRCRFX1_2,
+ S_SRCRFX1_3,
+ S_SRCRFXI1_1,
+ S_SRCRFXI1_2,
+ S_SRCRFXI1_3,
+ S_SRCRFXI1_4,
+ S_SRCRFXI1_5,
+ S_SOR2_RISE1,
+ S_SOR2_RISE2,
+ S_SOR2_RISE3,
+ S_SOR2_RISE4,
+ S_SOR2_RISE5,
+ S_SOR2_RISE6,
+ S_SOR2_RISE7,
+ S_SOR2_LOOK1,
+ S_SOR2_LOOK2,
+ S_SOR2_WALK1,
+ S_SOR2_WALK2,
+ S_SOR2_WALK3,
+ S_SOR2_WALK4,
+ S_SOR2_PAIN1,
+ S_SOR2_PAIN2,
+ S_SOR2_ATK1,
+ S_SOR2_ATK2,
+ S_SOR2_ATK3,
+ S_SOR2_TELE1,
+ S_SOR2_TELE2,
+ S_SOR2_TELE3,
+ S_SOR2_TELE4,
+ S_SOR2_TELE5,
+ S_SOR2_TELE6,
+ S_SOR2_DIE1,
+ S_SOR2_DIE2,
+ S_SOR2_DIE3,
+ S_SOR2_DIE4,
+ S_SOR2_DIE5,
+ S_SOR2_DIE6,
+ S_SOR2_DIE7,
+ S_SOR2_DIE8,
+ S_SOR2_DIE9,
+ S_SOR2_DIE10,
+ S_SOR2_DIE11,
+ S_SOR2_DIE12,
+ S_SOR2_DIE13,
+ S_SOR2_DIE14,
+ S_SOR2_DIE15,
+ S_SOR2FX1_1,
+ S_SOR2FX1_2,
+ S_SOR2FX1_3,
+ S_SOR2FXI1_1,
+ S_SOR2FXI1_2,
+ S_SOR2FXI1_3,
+ S_SOR2FXI1_4,
+ S_SOR2FXI1_5,
+ S_SOR2FXI1_6,
+ S_SOR2FXSPARK1,
+ S_SOR2FXSPARK2,
+ S_SOR2FXSPARK3,
+ S_SOR2FX2_1,
+ S_SOR2FX2_2,
+ S_SOR2FX2_3,
+ S_SOR2FXI2_1,
+ S_SOR2FXI2_2,
+ S_SOR2FXI2_3,
+ S_SOR2FXI2_4,
+ S_SOR2FXI2_5,
+ S_SOR2TELEFADE1,
+ S_SOR2TELEFADE2,
+ S_SOR2TELEFADE3,
+ S_SOR2TELEFADE4,
+ S_SOR2TELEFADE5,
+ S_SOR2TELEFADE6,
+ S_MNTR_LOOK1,
+ S_MNTR_LOOK2,
+ S_MNTR_WALK1,
+ S_MNTR_WALK2,
+ S_MNTR_WALK3,
+ S_MNTR_WALK4,
+ S_MNTR_ATK1_1,
+ S_MNTR_ATK1_2,
+ S_MNTR_ATK1_3,
+ S_MNTR_ATK2_1,
+ S_MNTR_ATK2_2,
+ S_MNTR_ATK2_3,
+ S_MNTR_ATK3_1,
+ S_MNTR_ATK3_2,
+ S_MNTR_ATK3_3,
+ S_MNTR_ATK3_4,
+ S_MNTR_ATK4_1,
+ S_MNTR_PAIN1,
+ S_MNTR_PAIN2,
+ S_MNTR_DIE1,
+ S_MNTR_DIE2,
+ S_MNTR_DIE3,
+ S_MNTR_DIE4,
+ S_MNTR_DIE5,
+ S_MNTR_DIE6,
+ S_MNTR_DIE7,
+ S_MNTR_DIE8,
+ S_MNTR_DIE9,
+ S_MNTR_DIE10,
+ S_MNTR_DIE11,
+ S_MNTR_DIE12,
+ S_MNTR_DIE13,
+ S_MNTR_DIE14,
+ S_MNTR_DIE15,
+ S_MNTRFX1_1,
+ S_MNTRFX1_2,
+ S_MNTRFXI1_1,
+ S_MNTRFXI1_2,
+ S_MNTRFXI1_3,
+ S_MNTRFXI1_4,
+ S_MNTRFXI1_5,
+ S_MNTRFXI1_6,
+ S_MNTRFX2_1,
+ S_MNTRFXI2_1,
+ S_MNTRFXI2_2,
+ S_MNTRFXI2_3,
+ S_MNTRFXI2_4,
+ S_MNTRFXI2_5,
+ S_MNTRFX3_1,
+ S_MNTRFX3_2,
+ S_MNTRFX3_3,
+ S_MNTRFX3_4,
+ S_MNTRFX3_5,
+ S_MNTRFX3_6,
+ S_MNTRFX3_7,
+ S_MNTRFX3_8,
+ S_MNTRFX3_9,
+ S_AKYY1,
+ S_AKYY2,
+ S_AKYY3,
+ S_AKYY4,
+ S_AKYY5,
+ S_AKYY6,
+ S_AKYY7,
+ S_AKYY8,
+ S_AKYY9,
+ S_AKYY10,
+ S_BKYY1,
+ S_BKYY2,
+ S_BKYY3,
+ S_BKYY4,
+ S_BKYY5,
+ S_BKYY6,
+ S_BKYY7,
+ S_BKYY8,
+ S_BKYY9,
+ S_BKYY10,
+ S_CKYY1,
+ S_CKYY2,
+ S_CKYY3,
+ S_CKYY4,
+ S_CKYY5,
+ S_CKYY6,
+ S_CKYY7,
+ S_CKYY8,
+ S_CKYY9,
+ S_AMG1,
+ S_AMG2_1,
+ S_AMG2_2,
+ S_AMG2_3,
+ S_AMM1,
+ S_AMM2,
+ S_AMC1,
+ S_AMC2_1,
+ S_AMC2_2,
+ S_AMC2_3,
+ S_AMS1_1,
+ S_AMS1_2,
+ S_AMS2_1,
+ S_AMS2_2,
+ S_AMP1_1,
+ S_AMP1_2,
+ S_AMP1_3,
+ S_AMP2_1,
+ S_AMP2_2,
+ S_AMP2_3,
+ S_AMB1_1,
+ S_AMB1_2,
+ S_AMB1_3,
+ S_AMB2_1,
+ S_AMB2_2,
+ S_AMB2_3,
+ S_SND_WIND,
+ S_SND_WATERFALL,
+ NUMSTATES
} statenum_t;
typedef struct
{
- spritenum_t sprite;
- long frame;
- long tics;
- void (*action) ();
- statenum_t nextstate;
- long misc1, misc2;
+ spritenum_t sprite;
+ long frame;
+ long tics;
+ void (*action) ();
+ statenum_t nextstate;
+ long misc1, misc2;
} state_t;
-extern state_t states[NUMSTATES];
+extern state_t states[NUMSTATES];
extern char *sprnames[NUMSPRITES];
-typedef enum {
-MT_MISC0,
-MT_ITEMSHIELD1,
-MT_ITEMSHIELD2,
-MT_MISC1,
-MT_MISC2,
-MT_ARTIINVISIBILITY,
-MT_MISC3,
-MT_ARTIFLY,
-MT_ARTIINVULNERABILITY,
-MT_ARTITOMEOFPOWER,
-MT_ARTIEGG,
-MT_EGGFX,
-MT_ARTISUPERHEAL,
-MT_MISC4,
-MT_MISC5,
-MT_FIREBOMB,
-MT_ARTITELEPORT,
-MT_POD,
-MT_PODGOO,
-MT_PODGENERATOR,
-MT_SPLASH,
-MT_SPLASHBASE,
-MT_LAVASPLASH,
-MT_LAVASMOKE,
-MT_SLUDGECHUNK,
-MT_SLUDGESPLASH,
-MT_SKULLHANG70,
-MT_SKULLHANG60,
-MT_SKULLHANG45,
-MT_SKULLHANG35,
-MT_CHANDELIER,
-MT_SERPTORCH,
-MT_SMALLPILLAR,
-MT_STALAGMITESMALL,
-MT_STALAGMITELARGE,
-MT_STALACTITESMALL,
-MT_STALACTITELARGE,
-MT_MISC6,
-MT_BARREL,
-MT_MISC7,
-MT_MISC8,
-MT_MISC9,
-MT_MISC10,
-MT_MISC11,
-MT_KEYGIZMOBLUE,
-MT_KEYGIZMOGREEN,
-MT_KEYGIZMOYELLOW,
-MT_KEYGIZMOFLOAT,
-MT_MISC12,
-MT_VOLCANOBLAST,
-MT_VOLCANOTBLAST,
-MT_TELEGLITGEN,
-MT_TELEGLITGEN2,
-MT_TELEGLITTER,
-MT_TELEGLITTER2,
-MT_TFOG,
-MT_TELEPORTMAN,
-MT_STAFFPUFF,
-MT_STAFFPUFF2,
-MT_BEAKPUFF,
-MT_MISC13,
-MT_GAUNTLETPUFF1,
-MT_GAUNTLETPUFF2,
-MT_MISC14,
-MT_BLASTERFX1,
-MT_BLASTERSMOKE,
-MT_RIPPER,
-MT_BLASTERPUFF1,
-MT_BLASTERPUFF2,
-MT_WMACE,
-MT_MACEFX1,
-MT_MACEFX2,
-MT_MACEFX3,
-MT_MACEFX4,
-MT_WSKULLROD,
-MT_HORNRODFX1,
-MT_HORNRODFX2,
-MT_RAINPLR1,
-MT_RAINPLR2,
-MT_RAINPLR3,
-MT_RAINPLR4,
-MT_GOLDWANDFX1,
-MT_GOLDWANDFX2,
-MT_GOLDWANDPUFF1,
-MT_GOLDWANDPUFF2,
-MT_WPHOENIXROD,
-MT_PHOENIXFX1,
-MT_PHOENIXPUFF,
-MT_PHOENIXFX2,
-MT_MISC15,
-MT_CRBOWFX1,
-MT_CRBOWFX2,
-MT_CRBOWFX3,
-MT_CRBOWFX4,
-MT_BLOOD,
-MT_BLOODSPLATTER,
-MT_PLAYER,
-MT_BLOODYSKULL,
-MT_CHICPLAYER,
-MT_CHICKEN,
-MT_FEATHER,
-MT_MUMMY,
-MT_MUMMYLEADER,
-MT_MUMMYGHOST,
-MT_MUMMYLEADERGHOST,
-MT_MUMMYSOUL,
-MT_MUMMYFX1,
-MT_BEAST,
-MT_BEASTBALL,
-MT_BURNBALL,
-MT_BURNBALLFB,
-MT_PUFFY,
-MT_SNAKE,
-MT_SNAKEPRO_A,
-MT_SNAKEPRO_B,
-MT_HEAD,
-MT_HEADFX1,
-MT_HEADFX2,
-MT_HEADFX3,
-MT_WHIRLWIND,
-MT_CLINK,
-MT_WIZARD,
-MT_WIZFX1,
-MT_IMP,
-MT_IMPLEADER,
-MT_IMPCHUNK1,
-MT_IMPCHUNK2,
-MT_IMPBALL,
-MT_KNIGHT,
-MT_KNIGHTGHOST,
-MT_KNIGHTAXE,
-MT_REDAXE,
-MT_SORCERER1,
-MT_SRCRFX1,
-MT_SORCERER2,
-MT_SOR2FX1,
-MT_SOR2FXSPARK,
-MT_SOR2FX2,
-MT_SOR2TELEFADE,
-MT_MINOTAUR,
-MT_MNTRFX1,
-MT_MNTRFX2,
-MT_MNTRFX3,
-MT_AKYY,
-MT_BKYY,
-MT_CKEY,
-MT_AMGWNDWIMPY,
-MT_AMGWNDHEFTY,
-MT_AMMACEWIMPY,
-MT_AMMACEHEFTY,
-MT_AMCBOWWIMPY,
-MT_AMCBOWHEFTY,
-MT_AMSKRDWIMPY,
-MT_AMSKRDHEFTY,
-MT_AMPHRDWIMPY,
-MT_AMPHRDHEFTY,
-MT_AMBLSRWIMPY,
-MT_AMBLSRHEFTY,
-MT_SOUNDWIND,
-MT_SOUNDWATERFALL,
-NUMMOBJTYPES} mobjtype_t;
+typedef enum
+{
+ MT_MISC0,
+ MT_ITEMSHIELD1,
+ MT_ITEMSHIELD2,
+ MT_MISC1,
+ MT_MISC2,
+ MT_ARTIINVISIBILITY,
+ MT_MISC3,
+ MT_ARTIFLY,
+ MT_ARTIINVULNERABILITY,
+ MT_ARTITOMEOFPOWER,
+ MT_ARTIEGG,
+ MT_EGGFX,
+ MT_ARTISUPERHEAL,
+ MT_MISC4,
+ MT_MISC5,
+ MT_FIREBOMB,
+ MT_ARTITELEPORT,
+ MT_POD,
+ MT_PODGOO,
+ MT_PODGENERATOR,
+ MT_SPLASH,
+ MT_SPLASHBASE,
+ MT_LAVASPLASH,
+ MT_LAVASMOKE,
+ MT_SLUDGECHUNK,
+ MT_SLUDGESPLASH,
+ MT_SKULLHANG70,
+ MT_SKULLHANG60,
+ MT_SKULLHANG45,
+ MT_SKULLHANG35,
+ MT_CHANDELIER,
+ MT_SERPTORCH,
+ MT_SMALLPILLAR,
+ MT_STALAGMITESMALL,
+ MT_STALAGMITELARGE,
+ MT_STALACTITESMALL,
+ MT_STALACTITELARGE,
+ MT_MISC6,
+ MT_BARREL,
+ MT_MISC7,
+ MT_MISC8,
+ MT_MISC9,
+ MT_MISC10,
+ MT_MISC11,
+ MT_KEYGIZMOBLUE,
+ MT_KEYGIZMOGREEN,
+ MT_KEYGIZMOYELLOW,
+ MT_KEYGIZMOFLOAT,
+ MT_MISC12,
+ MT_VOLCANOBLAST,
+ MT_VOLCANOTBLAST,
+ MT_TELEGLITGEN,
+ MT_TELEGLITGEN2,
+ MT_TELEGLITTER,
+ MT_TELEGLITTER2,
+ MT_TFOG,
+ MT_TELEPORTMAN,
+ MT_STAFFPUFF,
+ MT_STAFFPUFF2,
+ MT_BEAKPUFF,
+ MT_MISC13,
+ MT_GAUNTLETPUFF1,
+ MT_GAUNTLETPUFF2,
+ MT_MISC14,
+ MT_BLASTERFX1,
+ MT_BLASTERSMOKE,
+ MT_RIPPER,
+ MT_BLASTERPUFF1,
+ MT_BLASTERPUFF2,
+ MT_WMACE,
+ MT_MACEFX1,
+ MT_MACEFX2,
+ MT_MACEFX3,
+ MT_MACEFX4,
+ MT_WSKULLROD,
+ MT_HORNRODFX1,
+ MT_HORNRODFX2,
+ MT_RAINPLR1,
+ MT_RAINPLR2,
+ MT_RAINPLR3,
+ MT_RAINPLR4,
+ MT_GOLDWANDFX1,
+ MT_GOLDWANDFX2,
+ MT_GOLDWANDPUFF1,
+ MT_GOLDWANDPUFF2,
+ MT_WPHOENIXROD,
+ MT_PHOENIXFX1,
+ MT_PHOENIXPUFF,
+ MT_PHOENIXFX2,
+ MT_MISC15,
+ MT_CRBOWFX1,
+ MT_CRBOWFX2,
+ MT_CRBOWFX3,
+ MT_CRBOWFX4,
+ MT_BLOOD,
+ MT_BLOODSPLATTER,
+ MT_PLAYER,
+ MT_BLOODYSKULL,
+ MT_CHICPLAYER,
+ MT_CHICKEN,
+ MT_FEATHER,
+ MT_MUMMY,
+ MT_MUMMYLEADER,
+ MT_MUMMYGHOST,
+ MT_MUMMYLEADERGHOST,
+ MT_MUMMYSOUL,
+ MT_MUMMYFX1,
+ MT_BEAST,
+ MT_BEASTBALL,
+ MT_BURNBALL,
+ MT_BURNBALLFB,
+ MT_PUFFY,
+ MT_SNAKE,
+ MT_SNAKEPRO_A,
+ MT_SNAKEPRO_B,
+ MT_HEAD,
+ MT_HEADFX1,
+ MT_HEADFX2,
+ MT_HEADFX3,
+ MT_WHIRLWIND,
+ MT_CLINK,
+ MT_WIZARD,
+ MT_WIZFX1,
+ MT_IMP,
+ MT_IMPLEADER,
+ MT_IMPCHUNK1,
+ MT_IMPCHUNK2,
+ MT_IMPBALL,
+ MT_KNIGHT,
+ MT_KNIGHTGHOST,
+ MT_KNIGHTAXE,
+ MT_REDAXE,
+ MT_SORCERER1,
+ MT_SRCRFX1,
+ MT_SORCERER2,
+ MT_SOR2FX1,
+ MT_SOR2FXSPARK,
+ MT_SOR2FX2,
+ MT_SOR2TELEFADE,
+ MT_MINOTAUR,
+ MT_MNTRFX1,
+ MT_MNTRFX2,
+ MT_MNTRFX3,
+ MT_AKYY,
+ MT_BKYY,
+ MT_CKEY,
+ MT_AMGWNDWIMPY,
+ MT_AMGWNDHEFTY,
+ MT_AMMACEWIMPY,
+ MT_AMMACEHEFTY,
+ MT_AMCBOWWIMPY,
+ MT_AMCBOWHEFTY,
+ MT_AMSKRDWIMPY,
+ MT_AMSKRDHEFTY,
+ MT_AMPHRDWIMPY,
+ MT_AMPHRDHEFTY,
+ MT_AMBLSRWIMPY,
+ MT_AMBLSRHEFTY,
+ MT_SOUNDWIND,
+ MT_SOUNDWATERFALL,
+ NUMMOBJTYPES
+} mobjtype_t;
-typedef struct {
- int doomednum;
- int spawnstate;
- int spawnhealth;
- int seestate;
- int seesound;
- int reactiontime;
- int attacksound;
- int painstate;
- int painchance;
- int painsound;
- int meleestate;
- int missilestate;
- int crashstate;
- int deathstate;
- int xdeathstate;
- int deathsound;
- int speed;
- int radius;
- int height;
- int mass;
- int damage;
- int activesound;
- int flags;
- int flags2;
+typedef struct
+{
+ int doomednum;
+ int spawnstate;
+ int spawnhealth;
+ int seestate;
+ int seesound;
+ int reactiontime;
+ int attacksound;
+ int painstate;
+ int painchance;
+ int painsound;
+ int meleestate;
+ int missilestate;
+ int crashstate;
+ int deathstate;
+ int xdeathstate;
+ int deathsound;
+ int speed;
+ int radius;
+ int height;
+ int mass;
+ int damage;
+ int activesound;
+ int flags;
+ int flags2;
} mobjinfo_t;
extern mobjinfo_t mobjinfo[NUMMOBJTYPES];
-
--- a/src/heretic/m_misc.c
+++ b/src/heretic/m_misc.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// M_misc.c
@@ -27,207 +49,207 @@
boolean M_ValidEpisodeMap(int episode, int map)
{
- if(episode < 1 || map < 1 || map > 9)
- {
- return false;
- }
- if(shareware)
- { // Shareware version checks
- if(episode != 1)
- {
- return false;
- }
- }
- else if(ExtendedWAD)
- { // Extended version checks
- if(episode == 6)
- {
- if(map > 3)
- {
- return false;
- }
- }
- else if(episode > 5)
- {
- return false;
- }
- }
- else
- { // Registered version checks
- if(episode == 4)
- {
- if(map != 1)
- {
- return false;
- }
- }
- else if(episode > 3)
- {
- return false;
- }
- }
- return true;
+ if (episode < 1 || map < 1 || map > 9)
+ {
+ return false;
+ }
+ if (shareware)
+ { // Shareware version checks
+ if (episode != 1)
+ {
+ return false;
+ }
+ }
+ else if (ExtendedWAD)
+ { // Extended version checks
+ if (episode == 6)
+ {
+ if (map > 3)
+ {
+ return false;
+ }
+ }
+ else if (episode > 5)
+ {
+ return false;
+ }
+ }
+ else
+ { // Registered version checks
+ if (episode == 4)
+ {
+ if (map != 1)
+ {
+ return false;
+ }
+ }
+ else if (episode > 3)
+ {
+ return false;
+ }
+ }
+ return true;
}
-/*
-=================
-=
-= M_CheckParm
-=
-= Checks for the given parameter in the program's command line arguments
-=
-= Returns the argument number (1 to argc-1) or 0 if not present
-=
-=================
-*/
-
-int M_CheckParm (char *check)
-{
- int i;
-
- for (i = 1;i<myargc;i++)
- {
- if ( !strcasecmp(check, myargv[i]) )
- return i;
- }
-
- return 0;
-}
-
-
-
-/*
-===============
-=
-= M_Random
-=
-= Returns a 0-255 number
-=
-===============
-*/
-
-unsigned char rndtable[256] = {
- 0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66,
- 74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36,
- 95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188,
- 52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224,
- 149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242,
- 145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0,
- 175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235,
- 25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113,
- 94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75,
- 136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196,
- 135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113,
- 80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241,
- 24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224,
- 145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95,
- 28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226,
- 71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36,
- 17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106,
- 197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136,
- 120, 163, 236, 249
-};
-int rndindex = 0;
-int prndindex = 0;
-
-int P_Random (void)
-{
- prndindex = (prndindex+1)&0xff;
- return rndtable[prndindex];
-}
-
-int M_Random (void)
-{
- rndindex = (rndindex+1)&0xff;
- return rndtable[rndindex];
-}
-
-void M_ClearRandom (void)
-{
- rndindex = prndindex = 0;
-}
-
-
-void M_ClearBox (fixed_t *box)
-{
- box[BOXTOP] = box[BOXRIGHT] = MININT;
- box[BOXBOTTOM] = box[BOXLEFT] = MAXINT;
-}
-
-void M_AddToBox (fixed_t *box, fixed_t x, fixed_t y)
-{
- if (x<box[BOXLEFT])
- box[BOXLEFT] = x;
- else if (x>box[BOXRIGHT])
- box[BOXRIGHT] = x;
- if (y<box[BOXBOTTOM])
- box[BOXBOTTOM] = y;
- else if (y>box[BOXTOP])
- box[BOXTOP] = y;
-}
-
-
-
-/*
-==================
-=
-= M_WriteFile
-=
-==================
-*/
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-boolean M_WriteFile (char const *name, void *source, int length)
-{
- int handle, count;
-
- handle = open (name, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666);
- if (handle == -1)
- return false;
- count = write (handle, source, length);
- close (handle);
-
- if (count < length)
- return false;
-
- return true;
-}
-
-
-/*
-==================
-=
-= M_ReadFile
-=
-==================
-*/
-
-int M_ReadFile (char const *name, byte **buffer)
-{
- int handle, count, length;
- struct stat fileinfo;
- byte *buf;
-
- handle = open (name, O_RDONLY | O_BINARY, 0666);
- if (handle == -1)
- I_Error ("Couldn't read file %s", name);
- if (fstat (handle,&fileinfo) == -1)
- I_Error ("Couldn't read file %s", name);
- length = fileinfo.st_size;
- buf = Z_Malloc (length, PU_STATIC, NULL);
- count = read (handle, buf, length);
- close (handle);
-
- if (count < length)
- I_Error ("Couldn't read file %s", name);
-
- *buffer = buf;
- return length;
-}
+/*
+=================
+=
+= M_CheckParm
+=
+= Checks for the given parameter in the program's command line arguments
+=
+= Returns the argument number (1 to argc-1) or 0 if not present
+=
+=================
+*/
+int M_CheckParm(char *check)
+{
+ int i;
+
+ for (i = 1; i < myargc; i++)
+ {
+ if (!strcasecmp(check, myargv[i]))
+ return i;
+ }
+
+ return 0;
+}
+
+
+
+/*
+===============
+=
+= M_Random
+=
+= Returns a 0-255 number
+=
+===============
+*/
+
+unsigned char rndtable[256] = {
+ 0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66,
+ 74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36,
+ 95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188,
+ 52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224,
+ 149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242,
+ 145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0,
+ 175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235,
+ 25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113,
+ 94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75,
+ 136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196,
+ 135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113,
+ 80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241,
+ 24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224,
+ 145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95,
+ 28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226,
+ 71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36,
+ 17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106,
+ 197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136,
+ 120, 163, 236, 249
+};
+int rndindex = 0;
+int prndindex = 0;
+
+int P_Random(void)
+{
+ prndindex = (prndindex + 1) & 0xff;
+ return rndtable[prndindex];
+}
+
+int M_Random(void)
+{
+ rndindex = (rndindex + 1) & 0xff;
+ return rndtable[rndindex];
+}
+
+void M_ClearRandom(void)
+{
+ rndindex = prndindex = 0;
+}
+
+
+void M_ClearBox(fixed_t * box)
+{
+ box[BOXTOP] = box[BOXRIGHT] = MININT;
+ box[BOXBOTTOM] = box[BOXLEFT] = MAXINT;
+}
+
+void M_AddToBox(fixed_t * box, fixed_t x, fixed_t y)
+{
+ if (x < box[BOXLEFT])
+ box[BOXLEFT] = x;
+ else if (x > box[BOXRIGHT])
+ box[BOXRIGHT] = x;
+ if (y < box[BOXBOTTOM])
+ box[BOXBOTTOM] = y;
+ else if (y > box[BOXTOP])
+ box[BOXTOP] = y;
+}
+
+
+
+/*
+==================
+=
+= M_WriteFile
+=
+==================
+*/
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+boolean M_WriteFile(char const *name, void *source, int length)
+{
+ int handle, count;
+
+ handle = open(name, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666);
+ if (handle == -1)
+ return false;
+ count = write(handle, source, length);
+ close(handle);
+
+ if (count < length)
+ return false;
+
+ return true;
+}
+
+
+/*
+==================
+=
+= M_ReadFile
+=
+==================
+*/
+
+int M_ReadFile(char const *name, byte ** buffer)
+{
+ int handle, count, length;
+ struct stat fileinfo;
+ byte *buf;
+
+ handle = open(name, O_RDONLY | O_BINARY, 0666);
+ if (handle == -1)
+ I_Error("Couldn't read file %s", name);
+ if (fstat(handle, &fileinfo) == -1)
+ I_Error("Couldn't read file %s", name);
+ length = fileinfo.st_size;
+ buf = Z_Malloc(length, PU_STATIC, NULL);
+ count = read(handle, buf, length);
+ close(handle);
+
+ if (count < length)
+ I_Error("Couldn't read file %s", name);
+
+ *buffer = buf;
+ return length;
+}
+
//---------------------------------------------------------------------------
//
// PROC M_FindResponseFile
@@ -238,78 +260,78 @@
void M_FindResponseFile(void)
{
- int i;
+ int i;
- for(i = 1; i < myargc; i++)
- {
- if(myargv[i][0] == '@')
- {
- FILE *handle;
- int size;
- int k;
- int index;
- int indexinfile;
- char *infile;
- char *file;
- char *moreargs[20];
- char *firstargv;
+ for (i = 1; i < myargc; i++)
+ {
+ if (myargv[i][0] == '@')
+ {
+ FILE *handle;
+ int size;
+ int k;
+ int index;
+ int indexinfile;
+ char *infile;
+ char *file;
+ char *moreargs[20];
+ char *firstargv;
- // READ THE RESPONSE FILE INTO MEMORY
- handle = fopen(&myargv[i][1], "rb");
- if(!handle)
- {
- printf("\nNo such response file!");
- exit(1);
- }
- printf("Found response file %s!\n",&myargv[i][1]);
- fseek (handle,0,SEEK_END);
- size = ftell(handle);
- fseek (handle,0,SEEK_SET);
- file = malloc (size);
- fread (file,size,1,handle);
- fclose (handle);
+ // READ THE RESPONSE FILE INTO MEMORY
+ handle = fopen(&myargv[i][1], "rb");
+ if (!handle)
+ {
+ printf("\nNo such response file!");
+ exit(1);
+ }
+ printf("Found response file %s!\n", &myargv[i][1]);
+ fseek(handle, 0, SEEK_END);
+ size = ftell(handle);
+ fseek(handle, 0, SEEK_SET);
+ file = malloc(size);
+ 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];
-
- firstargv = myargv[0];
- myargv = malloc(sizeof(char *)*MAXARGVS);
- memset(myargv,0,sizeof(char *)*MAXARGVS);
- myargv[0] = firstargv;
-
- infile = file;
- indexinfile = k = 0;
- indexinfile++; // SKIP PAST ARGV[0] (KEEP IT)
- do
- {
- myargv[indexinfile++] = infile+k;
- while(k < size &&
-
- ((*(infile+k)>= ' '+1) && (*(infile+k)<='z')))
- k++;
- *(infile+k) = 0;
- while(k < size &&
- ((*(infile+k)<= ' ') || (*(infile+k)>'z')))
- k++;
- } while(k < size);
-
- for (k = 0;k < index;k++)
- myargv[indexinfile++] = moreargs[k];
- myargc = indexinfile;
- // DISPLAY ARGS
- if(M_CheckParm("-debug"))
- {
- printf("%d command-line args:\n", myargc);
- for(k = 1; k < myargc; k++)
- {
- printf("%s\n", myargv[k]);
- }
- }
- break;
- }
- }
-}
+ // KEEP ALL CMDLINE ARGS FOLLOWING @RESPONSEFILE ARG
+ for (index = 0, k = i + 1; k < myargc; k++)
+ moreargs[index++] = myargv[k];
+
+ firstargv = myargv[0];
+ myargv = malloc(sizeof(char *) * MAXARGVS);
+ memset(myargv, 0, sizeof(char *) * MAXARGVS);
+ myargv[0] = firstargv;
+
+ infile = file;
+ indexinfile = k = 0;
+ indexinfile++; // SKIP PAST ARGV[0] (KEEP IT)
+ do
+ {
+ myargv[indexinfile++] = infile + k;
+ while (k < size &&
+ ((*(infile + k) >= ' ' + 1) && (*(infile + k) <= 'z')))
+ k++;
+ *(infile + k) = 0;
+ while (k < size &&
+ ((*(infile + k) <= ' ') || (*(infile + k) > 'z')))
+ k++;
+ }
+ while (k < size);
+
+ for (k = 0; k < index; k++)
+ myargv[indexinfile++] = moreargs[k];
+ myargc = indexinfile;
+ // DISPLAY ARGS
+ if (M_CheckParm("-debug"))
+ {
+ printf("%d command-line args:\n", myargc);
+ for (k = 1; k < myargc; k++)
+ {
+ printf("%s\n", myargv[k]);
+ }
+ }
+ break;
+ }
+ }
+}
//---------------------------------------------------------------------------
//
@@ -321,82 +343,81 @@
void M_ForceUppercase(char *text)
{
- char c;
+ char c;
- while((c = *text) != 0)
- {
- if(c >= 'a' && c <= 'z')
- {
- *text++ = c-('a'-'A');
- }
- else
- {
- text++;
- }
- }
+ while ((c = *text) != 0)
+ {
+ if (c >= 'a' && c <= 'z')
+ {
+ *text++ = c - ('a' - 'A');
+ }
+ else
+ {
+ text++;
+ }
+ }
}
-/*
-==============================================================================
-
- DEFAULTS
-
-==============================================================================
-*/
-
-int usemouse;
-int usejoystick;
-
-extern int key_right, key_left, key_up, key_down;
-extern int key_strafeleft, key_straferight;
-extern int key_fire, key_use, key_strafe, key_speed;
-extern int key_flyup, key_flydown, key_flycenter;
-extern int key_lookup, key_lookdown, key_lookcenter;
-extern int key_invleft, key_invright, key_useartifact;
+/*
+==============================================================================
-extern int mousebfire;
-extern int mousebstrafe;
-extern int mousebforward;
-
-extern int joybfire;
-extern int joybstrafe;
-extern int joybuse;
-extern int joybspeed;
-
-extern int viewwidth, viewheight;
-
-int mouseSensitivity;
-
-extern int screenblocks;
-
-extern char *chat_macros[10];
+ DEFAULTS
-typedef struct
-{
- char *name;
- int *location;
- int defaultvalue;
- int scantranslate; // PC scan code hack
- int untranslated; // lousy hack
-} default_t;
+==============================================================================
+*/
+int usemouse;
+int usejoystick;
+
+extern int key_right, key_left, key_up, key_down;
+extern int key_strafeleft, key_straferight;
+extern int key_fire, key_use, key_strafe, key_speed;
+extern int key_flyup, key_flydown, key_flycenter;
+extern int key_lookup, key_lookdown, key_lookcenter;
+extern int key_invleft, key_invright, key_useartifact;
+
+extern int mousebfire;
+extern int mousebstrafe;
+extern int mousebforward;
+
+extern int joybfire;
+extern int joybstrafe;
+extern int joybuse;
+extern int joybspeed;
+
+extern int viewwidth, viewheight;
+
+int mouseSensitivity;
+
+extern int screenblocks;
+
+extern char *chat_macros[10];
+
+typedef struct
+{
+ char *name;
+ int *location;
+ int defaultvalue;
+ int scantranslate; // PC scan code hack
+ int untranslated; // lousy hack
+} default_t;
+
#ifndef __NeXT__
extern int snd_Channels;
-extern int snd_DesiredMusicDevice, snd_DesiredSfxDevice;
-extern int snd_MusicDevice, // current music card # (index to dmxCodes)
- snd_SfxDevice; // current sfx card # (index to dmxCodes)
-
-extern int snd_SBport, snd_SBirq, snd_SBdma; // sound blaster variables
-extern int snd_Mport; // midi variables
-#endif
+extern int snd_DesiredMusicDevice, snd_DesiredSfxDevice;
+extern int snd_MusicDevice, // current music card # (index to dmxCodes)
+ snd_SfxDevice; // current sfx card # (index to dmxCodes)
-default_t defaults[] =
-{
- { "mouse_sensitivity", &mouseSensitivity, 5 },
+extern int snd_SBport, snd_SBirq, snd_SBdma; // sound blaster variables
+extern int snd_Mport; // midi variables
+#endif
+default_t defaults[] = {
+ {"mouse_sensitivity", &mouseSensitivity, 5},
+
#ifndef __NeXT__
- { "sfx_volume", &snd_MaxVolume, 10},
- { "music_volume", &snd_MusicVolume, 10},
+ {"sfx_volume", &snd_MaxVolume, 10},
+ {"music_volume", &snd_MusicVolume, 10},
#endif
#ifdef __WATCOMC__
@@ -418,381 +439,382 @@
#define SC_END 0x4f
#define SC_ENTER 0x1c
- { "key_right", &key_right, SC_RIGHTARROW, 1 },
- { "key_left", &key_left, SC_LEFTARROW, 1 },
- { "key_up", &key_up, SC_UPARROW, 1 },
- { "key_down", &key_down, SC_DOWNARROW, 1 },
- { "key_strafeleft", &key_strafeleft, SC_COMMA, 1 },
- { "key_straferight", &key_straferight, SC_PERIOD, 1 },
- { "key_flyup", &key_flyup, SC_PAGEUP, 1 },
- { "key_flydown", &key_flydown, SC_INSERT, 1 },
- { "key_flycenter", &key_flycenter, SC_HOME, 1 },
- { "key_lookup", &key_lookup, SC_PAGEDOWN, 1 },
- { "key_lookdown", &key_lookdown, SC_DELETE, 1 },
- { "key_lookcenter", &key_lookcenter, SC_END, 1 },
- { "key_invleft", &key_invleft, 0x1a, 1 },
- { "key_invright", &key_invright, 0x1b, 1 },
- { "key_useartifact", &key_useartifact, SC_ENTER, 1 },
+ {"key_right", &key_right, SC_RIGHTARROW, 1},
+ {"key_left", &key_left, SC_LEFTARROW, 1},
+ {"key_up", &key_up, SC_UPARROW, 1},
+ {"key_down", &key_down, SC_DOWNARROW, 1},
+ {"key_strafeleft", &key_strafeleft, SC_COMMA, 1},
+ {"key_straferight", &key_straferight, SC_PERIOD, 1},
+ {"key_flyup", &key_flyup, SC_PAGEUP, 1},
+ {"key_flydown", &key_flydown, SC_INSERT, 1},
+ {"key_flycenter", &key_flycenter, SC_HOME, 1},
+ {"key_lookup", &key_lookup, SC_PAGEDOWN, 1},
+ {"key_lookdown", &key_lookdown, SC_DELETE, 1},
+ {"key_lookcenter", &key_lookcenter, SC_END, 1},
+ {"key_invleft", &key_invleft, 0x1a, 1},
+ {"key_invright", &key_invright, 0x1b, 1},
+ {"key_useartifact", &key_useartifact, SC_ENTER, 1},
- { "key_fire", &key_fire, SC_RCTRL, 1 },
- { "key_use", &key_use, SC_SPACE, 1 },
- { "key_strafe", &key_strafe, SC_RALT, 1 },
- { "key_speed", &key_speed, SC_RSHIFT, 1 },
+ {"key_fire", &key_fire, SC_RCTRL, 1},
+ {"key_use", &key_use, SC_SPACE, 1},
+ {"key_strafe", &key_strafe, SC_RALT, 1},
+ {"key_speed", &key_speed, SC_RSHIFT, 1},
#endif
#ifdef __NeXT__
- { "key_right", &key_right, KEY_RIGHTARROW },
- { "key_left", &key_left, KEY_LEFTARROW },
- { "key_up", &key_up, KEY_UPARROW },
- { "key_down", &key_down, KEY_DOWNARROW },
- { "key_strafeleft", &key_strafeleft, ',' },
- { "key_straferight", &key_straferight, '.' },
- { "key_flyup", &key_flyup, 'u' },
- { "key_flydown", &key_flydown, 'j' },
- { "key_flycenter", &key_flycenter, 'k' },
- { "key_lookup", &key_lookup, 'm' },
- { "key_lookdown", &key_lookdown, 'b' },
- { "key_lookcenter", &key_lookcenter, 'n' },
- { "key_invleft", &key_invleft, '[' },
- { "key_invright", &key_invright, ']' },
- { "key_useartifact", &key_useartifact, 13 },
+ {"key_right", &key_right, KEY_RIGHTARROW},
+ {"key_left", &key_left, KEY_LEFTARROW},
+ {"key_up", &key_up, KEY_UPARROW},
+ {"key_down", &key_down, KEY_DOWNARROW},
+ {"key_strafeleft", &key_strafeleft, ','},
+ {"key_straferight", &key_straferight, '.'},
+ {"key_flyup", &key_flyup, 'u'},
+ {"key_flydown", &key_flydown, 'j'},
+ {"key_flycenter", &key_flycenter, 'k'},
+ {"key_lookup", &key_lookup, 'm'},
+ {"key_lookdown", &key_lookdown, 'b'},
+ {"key_lookcenter", &key_lookcenter, 'n'},
+ {"key_invleft", &key_invleft, '['},
+ {"key_invright", &key_invright, ']'},
+ {"key_useartifact", &key_useartifact, 13},
- { "key_fire", &key_fire, ' ', 1 },
- { "key_use", &key_use, 'x', 1 },
- { "key_strafe", &key_strafe, 'c', 1 },
- { "key_speed", &key_speed, 'z', 1 },
+ {"key_fire", &key_fire, ' ', 1},
+ {"key_use", &key_use, 'x', 1},
+ {"key_strafe", &key_strafe, 'c', 1},
+ {"key_speed", &key_speed, 'z', 1},
#endif
- { "use_mouse", &usemouse, 1 },
- { "mouseb_fire", &mousebfire, 0 },
- { "mouseb_strafe", &mousebstrafe, 1 },
- { "mouseb_forward", &mousebforward, 2 },
+ {"use_mouse", &usemouse, 1},
+ {"mouseb_fire", &mousebfire, 0},
+ {"mouseb_strafe", &mousebstrafe, 1},
+ {"mouseb_forward", &mousebforward, 2},
- { "use_joystick", &usejoystick, 0 },
- { "joyb_fire", &joybfire, 0 },
- { "joyb_strafe", &joybstrafe, 1 },
- { "joyb_use", &joybuse, 3 },
- { "joyb_speed", &joybspeed, 2 },
+ {"use_joystick", &usejoystick, 0},
+ {"joyb_fire", &joybfire, 0},
+ {"joyb_strafe", &joybstrafe, 1},
+ {"joyb_use", &joybuse, 3},
+ {"joyb_speed", &joybspeed, 2},
- { "screenblocks", &screenblocks, 10 },
+ {"screenblocks", &screenblocks, 10},
#ifndef __NeXT__
- { "snd_channels", &snd_Channels, 3 },
- { "snd_musicdevice", &snd_DesiredMusicDevice, 0 },
- { "snd_sfxdevice", &snd_DesiredSfxDevice, 0 },
- { "snd_sbport", &snd_SBport, 544 },
- { "snd_sbirq", &snd_SBirq, -1 },
- { "snd_sbdma", &snd_SBdma, -1 },
- { "snd_mport", &snd_Mport, -1 },
+ {"snd_channels", &snd_Channels, 3},
+ {"snd_musicdevice", &snd_DesiredMusicDevice, 0},
+ {"snd_sfxdevice", &snd_DesiredSfxDevice, 0},
+ {"snd_sbport", &snd_SBport, 544},
+ {"snd_sbirq", &snd_SBirq, -1},
+ {"snd_sbdma", &snd_SBdma, -1},
+ {"snd_mport", &snd_Mport, -1},
#endif
- { "usegamma", &usegamma, 0 },
+ {"usegamma", &usegamma, 0},
- { "chatmacro0", (int *) &chat_macros[0], (int) HUSTR_CHATMACRO0 },
- { "chatmacro1", (int *) &chat_macros[1], (int) HUSTR_CHATMACRO1 },
- { "chatmacro2", (int *) &chat_macros[2], (int) HUSTR_CHATMACRO2 },
- { "chatmacro3", (int *) &chat_macros[3], (int) HUSTR_CHATMACRO3 },
- { "chatmacro4", (int *) &chat_macros[4], (int) HUSTR_CHATMACRO4 },
- { "chatmacro5", (int *) &chat_macros[5], (int) HUSTR_CHATMACRO5 },
- { "chatmacro6", (int *) &chat_macros[6], (int) HUSTR_CHATMACRO6 },
- { "chatmacro7", (int *) &chat_macros[7], (int) HUSTR_CHATMACRO7 },
- { "chatmacro8", (int *) &chat_macros[8], (int) HUSTR_CHATMACRO8 },
- { "chatmacro9", (int *) &chat_macros[9], (int) HUSTR_CHATMACRO9 }
+ {"chatmacro0", (int *) &chat_macros[0], (int) HUSTR_CHATMACRO0},
+ {"chatmacro1", (int *) &chat_macros[1], (int) HUSTR_CHATMACRO1},
+ {"chatmacro2", (int *) &chat_macros[2], (int) HUSTR_CHATMACRO2},
+ {"chatmacro3", (int *) &chat_macros[3], (int) HUSTR_CHATMACRO3},
+ {"chatmacro4", (int *) &chat_macros[4], (int) HUSTR_CHATMACRO4},
+ {"chatmacro5", (int *) &chat_macros[5], (int) HUSTR_CHATMACRO5},
+ {"chatmacro6", (int *) &chat_macros[6], (int) HUSTR_CHATMACRO6},
+ {"chatmacro7", (int *) &chat_macros[7], (int) HUSTR_CHATMACRO7},
+ {"chatmacro8", (int *) &chat_macros[8], (int) HUSTR_CHATMACRO8},
+ {"chatmacro9", (int *) &chat_macros[9], (int) HUSTR_CHATMACRO9}
};
int numdefaults;
char *defaultfile;
-/*
-==============
-=
-= M_SaveDefaults
-=
-==============
-*/
-
-void M_SaveDefaults (void)
-{
- int i,v;
- FILE *f;
-
- f = fopen (defaultfile, "w");
- if (!f)
- return; // can't write the file, but don't complain
-
- for (i=0 ; i<numdefaults ; i++)
- {
-#ifdef __WATCOMC__
- if (defaults[i].scantranslate)
- defaults[i].location = &defaults[i].untranslated;
-#endif
- if (defaults[i].defaultvalue > -0xfff
- && defaults[i].defaultvalue < 0xfff)
- {
- v = *defaults[i].location;
- fprintf (f,"%s\t\t%i\n",defaults[i].name,v);
- } else {
- fprintf (f,"%s\t\t\"%s\"\n",defaults[i].name,
- * (char **) (defaults[i].location));
- }
- }
-
- fclose (f);
-}
-
-
-/*
-==============
-=
-= M_LoadDefaults
-=
-==============
-*/
-
-extern byte scantokey[128];
-extern char *basedefault;
-
-void M_LoadDefaults (void)
-{
- int i, len;
- FILE *f;
- char def[80];
- char strparm[100];
- char *newstring;
- int parm;
- boolean isstring;
-
-//
-// set everything to base values
-//
- numdefaults = sizeof(defaults)/sizeof(defaults[0]);
- for (i=0 ; i<numdefaults ; i++)
- *defaults[i].location = defaults[i].defaultvalue;
-
+/*
+==============
+=
+= M_SaveDefaults
+=
+==============
+*/
+
+void M_SaveDefaults(void)
+{
+ int i, v;
+ FILE *f;
+
+ f = fopen(defaultfile, "w");
+ if (!f)
+ return; // can't write the file, but don't complain
+
+ for (i = 0; i < numdefaults; i++)
+ {
+#ifdef __WATCOMC__
+ if (defaults[i].scantranslate)
+ defaults[i].location = &defaults[i].untranslated;
+#endif
+ if (defaults[i].defaultvalue > -0xfff
+ && defaults[i].defaultvalue < 0xfff)
+ {
+ v = *defaults[i].location;
+ fprintf(f, "%s\t\t%i\n", defaults[i].name, v);
+ }
+ else
+ {
+ fprintf(f, "%s\t\t\"%s\"\n", defaults[i].name,
+ *(char **) (defaults[i].location));
+ }
+ }
+
+ fclose(f);
+}
+
+
+/*
+==============
+=
+= M_LoadDefaults
+=
+==============
+*/
+
+extern byte scantokey[128];
+extern char *basedefault;
+
+void M_LoadDefaults(void)
+{
+ int i, len;
+ FILE *f;
+ char def[80];
+ char strparm[100];
+ char *newstring;
+ int parm;
+ boolean isstring;
+
//
+// set everything to base values
+//
+ numdefaults = sizeof(defaults) / sizeof(defaults[0]);
+ for (i = 0; i < numdefaults; i++)
+ *defaults[i].location = defaults[i].defaultvalue;
+
+//
// check for a custom default file
//
- i = M_CheckParm("-config");
- if(i && i<myargc-1)
- {
- defaultfile = myargv[i+1];
- printf("default file: %s\n", defaultfile);
- }
- else if(cdrom)
- {
- defaultfile = "c:\\heretic.cd\\heretic.cfg";
- }
- else
- {
- defaultfile = basedefault;
- }
+ i = M_CheckParm("-config");
+ if (i && i < myargc - 1)
+ {
+ defaultfile = myargv[i + 1];
+ printf("default file: %s\n", defaultfile);
+ }
+ else if (cdrom)
+ {
+ defaultfile = "c:\\heretic.cd\\heretic.cfg";
+ }
+ else
+ {
+ defaultfile = basedefault;
+ }
-//
-// read the file in, overriding any set defaults
-//
- f = fopen (defaultfile, "r");
- if (f)
- {
- while (!feof(f))
- {
- isstring = false;
- if (fscanf (f, "%79s %[^\n]\n", def, strparm) == 2)
- {
- if (strparm[0] == '"')
- {
- // get a string default
- isstring = true;
- len = strlen(strparm);
- newstring = (char *) malloc(len);
- strparm[len-1] = 0;
- strcpy(newstring, strparm+1);
- }
- else if (strparm[0] == '0' && strparm[1] == 'x')
- sscanf(strparm+2, "%x", &parm);
- else
- sscanf(strparm, "%i", &parm);
- for (i=0 ; i<numdefaults ; i++)
- if (!strcmp(def, defaults[i].name))
- {
- if (!isstring)
- *defaults[i].location = parm;
- else
- *defaults[i].location =
- (int) newstring;
- break;
- }
- }
- }
-
- fclose (f);
- }
-
+//
+// read the file in, overriding any set defaults
+//
+ f = fopen(defaultfile, "r");
+ if (f)
+ {
+ while (!feof(f))
+ {
+ isstring = false;
+ if (fscanf(f, "%79s %[^\n]\n", def, strparm) == 2)
+ {
+ if (strparm[0] == '"')
+ {
+ // get a string default
+ isstring = true;
+ len = strlen(strparm);
+ newstring = (char *) malloc(len);
+ strparm[len - 1] = 0;
+ strcpy(newstring, strparm + 1);
+ }
+ else if (strparm[0] == '0' && strparm[1] == 'x')
+ sscanf(strparm + 2, "%x", &parm);
+ else
+ sscanf(strparm, "%i", &parm);
+ for (i = 0; i < numdefaults; i++)
+ if (!strcmp(def, defaults[i].name))
+ {
+ if (!isstring)
+ *defaults[i].location = parm;
+ else
+ *defaults[i].location = (int) newstring;
+ break;
+ }
+ }
+ }
+ fclose(f);
+ }
+
+
#ifdef __WATCOMC__
- for(i = 0; i < numdefaults; i++)
- {
- if(defaults[i].scantranslate)
- {
- parm = *defaults[i].location;
- defaults[i].untranslated = parm;
- *defaults[i].location = scantokey[parm];
- }
- }
+ for (i = 0; i < numdefaults; i++)
+ {
+ if (defaults[i].scantranslate)
+ {
+ parm = *defaults[i].location;
+ defaults[i].untranslated = parm;
+ *defaults[i].location = scantokey[parm];
+ }
+ }
#endif
}
-
-
-/*
-==============================================================================
-
- SCREEN SHOTS
-
-==============================================================================
-*/
-
-
-typedef struct
-{
- char manufacturer;
- char version;
- char encoding;
- char bits_per_pixel;
- unsigned short xmin,ymin,xmax,ymax;
- unsigned short hres,vres;
- unsigned char palette[48];
- char reserved;
- char color_planes;
- unsigned short bytes_per_line;
- unsigned short palette_type;
- char filler[58];
- unsigned char data; // unbounded
-} pcx_t;
-
-/*
-==============
-=
-= WritePCXfile
-=
-==============
-*/
-
-void WritePCXfile (char *filename, byte *data, int width, int height, byte *palette)
-{
- int i, length;
- pcx_t *pcx;
- byte *pack;
-
- pcx = Z_Malloc (width*height*2+1000, PU_STATIC, NULL);
-
- pcx->manufacturer = 0x0a; // PCX id
- pcx->version = 5; // 256 color
- pcx->encoding = 1; // uncompressed
- pcx->bits_per_pixel = 8; // 256 color
- pcx->xmin = 0;
- pcx->ymin = 0;
- pcx->xmax = SHORT(width-1);
- pcx->ymax = SHORT(height-1);
- pcx->hres = SHORT(width);
- pcx->vres = SHORT(height);
- memset (pcx->palette,0,sizeof(pcx->palette));
- pcx->color_planes = 1; // chunky image
- pcx->bytes_per_line = SHORT(width);
- pcx->palette_type = SHORT(2); // not a grey scale
- memset (pcx->filler,0,sizeof(pcx->filler));
-
-//
-// pack the image
-//
- pack = &pcx->data;
-
- for (i=0 ; i<width*height ; i++)
- if ( (*data & 0xc0) != 0xc0)
- *pack++ = *data++;
- else
- {
- *pack++ = 0xc1;
- *pack++ = *data++;
- }
-
-//
-// write the palette
-//
- *pack++ = 0x0c; // palette ID byte
- for (i=0 ; i<768 ; i++)
- *pack++ = *palette++;
-
-//
-// write output file
-//
- length = pack - (byte *)pcx;
- M_WriteFile (filename, pcx, length);
-
- Z_Free (pcx);
-}
-
-
-//==============================================================================
-
-/*
-==================
-=
-= M_ScreenShot
-=
-==================
-*/
-
-void M_ScreenShot (void)
-{
- int i;
- byte *linear;
- char lbmname[12];
- byte *pal;
-
-#ifdef _WATCOMC_
- extern byte *pcscreen;
-#endif
-//
-// munge planar buffer to linear
-//
-#ifdef _WATCOMC_
- linear = pcscreen;
-#else
- linear = screen;
-#endif
-//
-// find a file name to save it to
-//
- strcpy(lbmname,"HRTIC00.pcx");
-
- for (i=0 ; i<=99 ; i++)
- {
- lbmname[5] = i/10 + '0';
- lbmname[6] = i%10 + '0';
- if (access(lbmname,0) == -1)
- break; // file doesn't exist
- }
- if (i==100)
- I_Error ("M_ScreenShot: Couldn't create a PCX");
-
-//
-// save the pcx file
-//
+
+
+/*
+==============================================================================
+
+ SCREEN SHOTS
+
+==============================================================================
+*/
+
+
+typedef struct
+{
+ char manufacturer;
+ char version;
+ char encoding;
+ char bits_per_pixel;
+ unsigned short xmin, ymin, xmax, ymax;
+ unsigned short hres, vres;
+ unsigned char palette[48];
+ char reserved;
+ char color_planes;
+ unsigned short bytes_per_line;
+ unsigned short palette_type;
+ char filler[58];
+ unsigned char data; // unbounded
+} pcx_t;
+
+/*
+==============
+=
+= WritePCXfile
+=
+==============
+*/
+
+void WritePCXfile(char *filename, byte * data, int width, int height,
+ byte * palette)
+{
+ int i, length;
+ pcx_t *pcx;
+ byte *pack;
+
+ pcx = Z_Malloc(width * height * 2 + 1000, PU_STATIC, NULL);
+
+ pcx->manufacturer = 0x0a; // PCX id
+ pcx->version = 5; // 256 color
+ pcx->encoding = 1; // uncompressed
+ pcx->bits_per_pixel = 8; // 256 color
+ pcx->xmin = 0;
+ pcx->ymin = 0;
+ pcx->xmax = SHORT(width - 1);
+ pcx->ymax = SHORT(height - 1);
+ pcx->hres = SHORT(width);
+ pcx->vres = SHORT(height);
+ memset(pcx->palette, 0, sizeof(pcx->palette));
+ pcx->color_planes = 1; // chunky image
+ pcx->bytes_per_line = SHORT(width);
+ pcx->palette_type = SHORT(2); // not a grey scale
+ memset(pcx->filler, 0, sizeof(pcx->filler));
+
+//
+// pack the image
+//
+ pack = &pcx->data;
+
+ for (i = 0; i < width * height; i++)
+ if ((*data & 0xc0) != 0xc0)
+ *pack++ = *data++;
+ else
+ {
+ *pack++ = 0xc1;
+ *pack++ = *data++;
+ }
+
+//
+// write the palette
+//
+ *pack++ = 0x0c; // palette ID byte
+ for (i = 0; i < 768; i++)
+ *pack++ = *palette++;
+
+//
+// write output file
+//
+ length = pack - (byte *) pcx;
+ M_WriteFile(filename, pcx, length);
+
+ Z_Free(pcx);
+}
+
+
+//==============================================================================
+
+/*
+==================
+=
+= M_ScreenShot
+=
+==================
+*/
+
+void M_ScreenShot(void)
+{
+ int i;
+ byte *linear;
+ char lbmname[12];
+ byte *pal;
+
+#ifdef _WATCOMC_
+ extern byte *pcscreen;
+#endif
+//
+// munge planar buffer to linear
+//
+#ifdef _WATCOMC_
+ linear = pcscreen;
+#else
+ linear = screen;
+#endif
+//
+// find a file name to save it to
+//
+ strcpy(lbmname, "HRTIC00.pcx");
+
+ for (i = 0; i <= 99; i++)
+ {
+ lbmname[5] = i / 10 + '0';
+ lbmname[6] = i % 10 + '0';
+ if (access(lbmname, 0) == -1)
+ break; // file doesn't exist
+ }
+ if (i == 100)
+ I_Error("M_ScreenShot: Couldn't create a PCX");
+
+//
+// save the pcx file
+//
#ifdef __WATCOMC__
- pal = (byte *)Z_Malloc(768, PU_STATIC, NULL);
- outp(0x3c7, 0);
- for(i = 0; i < 768; i++)
- {
- *(pal+i) = inp(0x3c9)<<2;
- }
+ pal = (byte *) Z_Malloc(768, PU_STATIC, NULL);
+ outp(0x3c7, 0);
+ for (i = 0; i < 768; i++)
+ {
+ *(pal + i) = inp(0x3c9) << 2;
+ }
#else
- pal = (byte *)W_CacheLumpName("PLAYPAL", PU_CACHE);
+ pal = (byte *) W_CacheLumpName("PLAYPAL", PU_CACHE);
#endif
- WritePCXfile (lbmname, linear, SCREENWIDTH, SCREENHEIGHT
- , pal);
-
- players[consoleplayer].message = "SCREEN SHOT";
+ WritePCXfile(lbmname, linear, SCREENWIDTH, SCREENHEIGHT, pal);
+
+ players[consoleplayer].message = "SCREEN SHOT";
#ifdef __WATCOMC__
- Z_Free(pal);
+ Z_Free(pal);
#endif
-}
+}
--- a/src/heretic/mn_menu.c
+++ b/src/heretic/mn_menu.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// MN_menu.c
@@ -21,44 +43,44 @@
typedef enum
{
- ITT_EMPTY,
- ITT_EFUNC,
- ITT_LRFUNC,
- ITT_SETMENU,
- ITT_INERT
+ ITT_EMPTY,
+ ITT_EFUNC,
+ ITT_LRFUNC,
+ ITT_SETMENU,
+ ITT_INERT
} ItemType_t;
typedef enum
{
- MENU_MAIN,
- MENU_EPISODE,
- MENU_SKILL,
- MENU_OPTIONS,
- MENU_OPTIONS2,
- MENU_FILES,
- MENU_LOAD,
- MENU_SAVE,
- MENU_NONE
+ MENU_MAIN,
+ MENU_EPISODE,
+ MENU_SKILL,
+ MENU_OPTIONS,
+ MENU_OPTIONS2,
+ MENU_FILES,
+ MENU_LOAD,
+ MENU_SAVE,
+ MENU_NONE
} MenuType_t;
typedef struct
{
- ItemType_t type;
- char *text;
- boolean (*func)(int option);
- int option;
- MenuType_t menu;
+ ItemType_t type;
+ char *text;
+ boolean(*func) (int option);
+ int option;
+ MenuType_t menu;
} MenuItem_t;
typedef struct
{
- int x;
- int y;
- void (*drawFunc)(void);
- int itemCount;
- MenuItem_t *items;
- int oldItPos;
- MenuType_t prevMenu;
+ int x;
+ int y;
+ void (*drawFunc) (void);
+ int itemCount;
+ MenuItem_t *items;
+ int oldItPos;
+ MenuType_t prevMenu;
} Menu_t;
// Private Functions
@@ -83,12 +105,12 @@
static void DrawSkillMenu(void);
static void DrawOptionsMenu(void);
static void DrawOptions2Menu(void);
-static void DrawFileSlots(Menu_t *menu);
+static void DrawFileSlots(Menu_t * menu);
static void DrawFilesMenu(void);
static void MN_DrawInfo(void);
static void DrawLoadMenu(void);
static void DrawSaveMenu(void);
-static void DrawSlider(Menu_t *menu, int item, int width, int slot);
+static void DrawSlider(Menu_t * menu, int item, int width, int slot);
void MN_LoadSlotText(void);
// External Data
@@ -117,8 +139,8 @@
boolean typeofask;
static boolean FileMenuKeySteal;
static boolean slottextloaded;
-static char SlotText[6][SLOTTEXTLEN+2];
-static char oldSlotText[SLOTTEXTLEN+2];
+static char SlotText[6][SLOTTEXTLEN + 2];
+static char oldSlotText[SLOTTEXTLEN + 2];
static int SlotStatus[6];
static int slotptr;
static int currentSlot;
@@ -125,161 +147,144 @@
static int quicksave;
static int quickload;
-static MenuItem_t MainItems[] =
-{
- { ITT_EFUNC, "NEW GAME", SCNetCheck, 1, MENU_EPISODE },
- { ITT_SETMENU, "OPTIONS", NULL, 0, MENU_OPTIONS },
- { ITT_SETMENU, "GAME FILES", NULL, 0, MENU_FILES },
- { ITT_EFUNC, "INFO", SCInfo, 0, MENU_NONE },
- { ITT_EFUNC, "QUIT GAME", SCQuitGame, 0, MENU_NONE }
+static MenuItem_t MainItems[] = {
+ {ITT_EFUNC, "NEW GAME", SCNetCheck, 1, MENU_EPISODE},
+ {ITT_SETMENU, "OPTIONS", NULL, 0, MENU_OPTIONS},
+ {ITT_SETMENU, "GAME FILES", NULL, 0, MENU_FILES},
+ {ITT_EFUNC, "INFO", SCInfo, 0, MENU_NONE},
+ {ITT_EFUNC, "QUIT GAME", SCQuitGame, 0, MENU_NONE}
};
-static Menu_t MainMenu =
-{
- 110, 56,
- DrawMainMenu,
- 5, MainItems,
- 0,
- MENU_NONE
+static Menu_t MainMenu = {
+ 110, 56,
+ DrawMainMenu,
+ 5, MainItems,
+ 0,
+ MENU_NONE
};
-static MenuItem_t EpisodeItems[] =
-{
- { ITT_EFUNC, "CITY OF THE DAMNED", SCEpisode, 1, MENU_NONE },
- { ITT_EFUNC, "HELL'S MAW", SCEpisode, 2, MENU_NONE },
- { ITT_EFUNC, "THE DOME OF D'SPARIL", SCEpisode, 3, MENU_NONE },
- { ITT_EFUNC, "THE OSSUARY", SCEpisode, 4, MENU_NONE },
- { ITT_EFUNC, "THE STAGNANT DEMESNE", SCEpisode, 5, MENU_NONE }
+static MenuItem_t EpisodeItems[] = {
+ {ITT_EFUNC, "CITY OF THE DAMNED", SCEpisode, 1, MENU_NONE},
+ {ITT_EFUNC, "HELL'S MAW", SCEpisode, 2, MENU_NONE},
+ {ITT_EFUNC, "THE DOME OF D'SPARIL", SCEpisode, 3, MENU_NONE},
+ {ITT_EFUNC, "THE OSSUARY", SCEpisode, 4, MENU_NONE},
+ {ITT_EFUNC, "THE STAGNANT DEMESNE", SCEpisode, 5, MENU_NONE}
};
-static Menu_t EpisodeMenu =
-{
- 80, 50,
- DrawEpisodeMenu,
- 3, EpisodeItems,
- 0,
- MENU_MAIN
+static Menu_t EpisodeMenu = {
+ 80, 50,
+ DrawEpisodeMenu,
+ 3, EpisodeItems,
+ 0,
+ MENU_MAIN
};
-static MenuItem_t FilesItems[] =
-{
- { ITT_EFUNC, "LOAD GAME", SCNetCheck, 2, MENU_LOAD },
- { ITT_SETMENU, "SAVE GAME", NULL, 0, MENU_SAVE }
+static MenuItem_t FilesItems[] = {
+ {ITT_EFUNC, "LOAD GAME", SCNetCheck, 2, MENU_LOAD},
+ {ITT_SETMENU, "SAVE GAME", NULL, 0, MENU_SAVE}
};
-static Menu_t FilesMenu =
-{
- 110, 60,
- DrawFilesMenu,
- 2, FilesItems,
- 0,
- MENU_MAIN
+static Menu_t FilesMenu = {
+ 110, 60,
+ DrawFilesMenu,
+ 2, FilesItems,
+ 0,
+ MENU_MAIN
};
-static MenuItem_t LoadItems[] =
-{
- { ITT_EFUNC, NULL, SCLoadGame, 0, MENU_NONE },
- { ITT_EFUNC, NULL, SCLoadGame, 1, MENU_NONE },
- { ITT_EFUNC, NULL, SCLoadGame, 2, MENU_NONE },
- { ITT_EFUNC, NULL, SCLoadGame, 3, MENU_NONE },
- { ITT_EFUNC, NULL, SCLoadGame, 4, MENU_NONE },
- { ITT_EFUNC, NULL, SCLoadGame, 5, MENU_NONE }
+static MenuItem_t LoadItems[] = {
+ {ITT_EFUNC, NULL, SCLoadGame, 0, MENU_NONE},
+ {ITT_EFUNC, NULL, SCLoadGame, 1, MENU_NONE},
+ {ITT_EFUNC, NULL, SCLoadGame, 2, MENU_NONE},
+ {ITT_EFUNC, NULL, SCLoadGame, 3, MENU_NONE},
+ {ITT_EFUNC, NULL, SCLoadGame, 4, MENU_NONE},
+ {ITT_EFUNC, NULL, SCLoadGame, 5, MENU_NONE}
};
-static Menu_t LoadMenu =
-{
- 70, 30,
- DrawLoadMenu,
- 6, LoadItems,
- 0,
- MENU_FILES
+static Menu_t LoadMenu = {
+ 70, 30,
+ DrawLoadMenu,
+ 6, LoadItems,
+ 0,
+ MENU_FILES
};
-static MenuItem_t SaveItems[] =
-{
- { ITT_EFUNC, NULL, SCSaveGame, 0, MENU_NONE },
- { ITT_EFUNC, NULL, SCSaveGame, 1, MENU_NONE },
- { ITT_EFUNC, NULL, SCSaveGame, 2, MENU_NONE },
- { ITT_EFUNC, NULL, SCSaveGame, 3, MENU_NONE },
- { ITT_EFUNC, NULL, SCSaveGame, 4, MENU_NONE },
- { ITT_EFUNC, NULL, SCSaveGame, 5, MENU_NONE }
+static MenuItem_t SaveItems[] = {
+ {ITT_EFUNC, NULL, SCSaveGame, 0, MENU_NONE},
+ {ITT_EFUNC, NULL, SCSaveGame, 1, MENU_NONE},
+ {ITT_EFUNC, NULL, SCSaveGame, 2, MENU_NONE},
+ {ITT_EFUNC, NULL, SCSaveGame, 3, MENU_NONE},
+ {ITT_EFUNC, NULL, SCSaveGame, 4, MENU_NONE},
+ {ITT_EFUNC, NULL, SCSaveGame, 5, MENU_NONE}
};
-static Menu_t SaveMenu =
-{
- 70, 30,
- DrawSaveMenu,
- 6, SaveItems,
- 0,
- MENU_FILES
+static Menu_t SaveMenu = {
+ 70, 30,
+ DrawSaveMenu,
+ 6, SaveItems,
+ 0,
+ MENU_FILES
};
-static MenuItem_t SkillItems[] =
-{
- { ITT_EFUNC, "THOU NEEDETH A WET-NURSE", SCSkill, sk_baby, MENU_NONE },
- { ITT_EFUNC, "YELLOWBELLIES-R-US", SCSkill, sk_easy, MENU_NONE },
- { ITT_EFUNC, "BRINGEST THEM ONETH", SCSkill, sk_medium, MENU_NONE },
- { ITT_EFUNC, "THOU ART A SMITE-MEISTER", SCSkill, sk_hard, MENU_NONE },
- { ITT_EFUNC, "BLACK PLAGUE POSSESSES THEE",
- SCSkill, sk_nightmare, MENU_NONE }
+static MenuItem_t SkillItems[] = {
+ {ITT_EFUNC, "THOU NEEDETH A WET-NURSE", SCSkill, sk_baby, MENU_NONE},
+ {ITT_EFUNC, "YELLOWBELLIES-R-US", SCSkill, sk_easy, MENU_NONE},
+ {ITT_EFUNC, "BRINGEST THEM ONETH", SCSkill, sk_medium, MENU_NONE},
+ {ITT_EFUNC, "THOU ART A SMITE-MEISTER", SCSkill, sk_hard, MENU_NONE},
+ {ITT_EFUNC, "BLACK PLAGUE POSSESSES THEE",
+ SCSkill, sk_nightmare, MENU_NONE}
};
-static Menu_t SkillMenu =
-{
- 38, 30,
- DrawSkillMenu,
- 5, SkillItems,
- 2,
- MENU_EPISODE
+static Menu_t SkillMenu = {
+ 38, 30,
+ DrawSkillMenu,
+ 5, SkillItems,
+ 2,
+ MENU_EPISODE
};
-static MenuItem_t OptionsItems[] =
-{
- { ITT_EFUNC, "END GAME", SCEndGame, 0, MENU_NONE },
- { ITT_EFUNC, "MESSAGES : ", SCMessages, 0, MENU_NONE },
- { ITT_LRFUNC, "MOUSE SENSITIVITY", SCMouseSensi, 0, MENU_NONE },
- { ITT_EMPTY, NULL, NULL, 0, MENU_NONE },
- { ITT_SETMENU, "MORE...", NULL, 0, MENU_OPTIONS2 }
+static MenuItem_t OptionsItems[] = {
+ {ITT_EFUNC, "END GAME", SCEndGame, 0, MENU_NONE},
+ {ITT_EFUNC, "MESSAGES : ", SCMessages, 0, MENU_NONE},
+ {ITT_LRFUNC, "MOUSE SENSITIVITY", SCMouseSensi, 0, MENU_NONE},
+ {ITT_EMPTY, NULL, NULL, 0, MENU_NONE},
+ {ITT_SETMENU, "MORE...", NULL, 0, MENU_OPTIONS2}
};
-static Menu_t OptionsMenu =
-{
- 88, 30,
- DrawOptionsMenu,
- 5, OptionsItems,
- 0,
- MENU_MAIN
+static Menu_t OptionsMenu = {
+ 88, 30,
+ DrawOptionsMenu,
+ 5, OptionsItems,
+ 0,
+ MENU_MAIN
};
-static MenuItem_t Options2Items[] =
-{
- { ITT_LRFUNC, "SCREEN SIZE", SCScreenSize, 0, MENU_NONE },
- { ITT_EMPTY, NULL, NULL, 0, MENU_NONE },
- { ITT_LRFUNC, "SFX VOLUME", SCSfxVolume, 0, MENU_NONE },
- { ITT_EMPTY, NULL, NULL, 0, MENU_NONE },
- { ITT_LRFUNC, "MUSIC VOLUME", SCMusicVolume, 0, MENU_NONE },
- { ITT_EMPTY, NULL, NULL, 0, MENU_NONE }
+static MenuItem_t Options2Items[] = {
+ {ITT_LRFUNC, "SCREEN SIZE", SCScreenSize, 0, MENU_NONE},
+ {ITT_EMPTY, NULL, NULL, 0, MENU_NONE},
+ {ITT_LRFUNC, "SFX VOLUME", SCSfxVolume, 0, MENU_NONE},
+ {ITT_EMPTY, NULL, NULL, 0, MENU_NONE},
+ {ITT_LRFUNC, "MUSIC VOLUME", SCMusicVolume, 0, MENU_NONE},
+ {ITT_EMPTY, NULL, NULL, 0, MENU_NONE}
};
-static Menu_t Options2Menu =
-{
- 90, 20,
- DrawOptions2Menu,
- 6, Options2Items,
- 0,
- MENU_OPTIONS
+static Menu_t Options2Menu = {
+ 90, 20,
+ DrawOptions2Menu,
+ 6, Options2Items,
+ 0,
+ MENU_OPTIONS
};
-static Menu_t *Menus[] =
-{
- &MainMenu,
- &EpisodeMenu,
- &SkillMenu,
- &OptionsMenu,
- &Options2Menu,
- &FilesMenu,
- &LoadMenu,
- &SaveMenu
+static Menu_t *Menus[] = {
+ &MainMenu,
+ &EpisodeMenu,
+ &SkillMenu,
+ &OptionsMenu,
+ &Options2Menu,
+ &FilesMenu,
+ &LoadMenu,
+ &SaveMenu
};
//---------------------------------------------------------------------------
@@ -290,15 +295,15 @@
void MN_Init(void)
{
- InitFonts();
- MenuActive = false;
- messageson = true;
- SkullBaseLump = W_GetNumForName("M_SKL00");
- if(ExtendedWAD)
- { // Add episodes 4 and 5 to the menu
- EpisodeMenu.itemCount = 5;
- EpisodeMenu.y -= ITEM_HEIGHT;
- }
+ InitFonts();
+ MenuActive = false;
+ messageson = true;
+ SkullBaseLump = W_GetNumForName("M_SKL00");
+ if (ExtendedWAD)
+ { // Add episodes 4 and 5 to the menu
+ EpisodeMenu.itemCount = 5;
+ EpisodeMenu.y -= ITEM_HEIGHT;
+ }
}
//---------------------------------------------------------------------------
@@ -309,8 +314,8 @@
static void InitFonts(void)
{
- FontABaseLump = W_GetNumForName("FONTA_S")+1;
- FontBBaseLump = W_GetNumForName("FONTB_S")+1;
+ FontABaseLump = W_GetNumForName("FONTA_S") + 1;
+ FontBBaseLump = W_GetNumForName("FONTB_S") + 1;
}
//---------------------------------------------------------------------------
@@ -323,22 +328,22 @@
void MN_DrTextA(char *text, int x, int y)
{
- char c;
- patch_t *p;
+ char c;
+ patch_t *p;
- while((c = *text++) != 0)
- {
- if(c < 33)
- {
- x += 5;
- }
- else
- {
- p = W_CacheLumpNum(FontABaseLump+c-33, PU_CACHE);
- V_DrawPatch(x, y, p);
- x += p->width-1;
- }
- }
+ while ((c = *text++) != 0)
+ {
+ if (c < 33)
+ {
+ x += 5;
+ }
+ else
+ {
+ p = W_CacheLumpNum(FontABaseLump + c - 33, PU_CACHE);
+ V_DrawPatch(x, y, p);
+ x += p->width - 1;
+ }
+ }
}
//---------------------------------------------------------------------------
@@ -351,24 +356,24 @@
int MN_TextAWidth(char *text)
{
- char c;
- int width;
- patch_t *p;
+ char c;
+ int width;
+ patch_t *p;
- width = 0;
- while((c = *text++) != 0)
- {
- if(c < 33)
- {
- width += 5;
- }
- else
- {
- p = W_CacheLumpNum(FontABaseLump+c-33, PU_CACHE);
- width += p->width-1;
- }
- }
- return(width);
+ width = 0;
+ while ((c = *text++) != 0)
+ {
+ if (c < 33)
+ {
+ width += 5;
+ }
+ else
+ {
+ p = W_CacheLumpNum(FontABaseLump + c - 33, PU_CACHE);
+ width += p->width - 1;
+ }
+ }
+ return (width);
}
//---------------------------------------------------------------------------
@@ -381,22 +386,22 @@
void MN_DrTextB(char *text, int x, int y)
{
- char c;
- patch_t *p;
+ char c;
+ patch_t *p;
- while((c = *text++) != 0)
- {
- if(c < 33)
- {
- x += 8;
- }
- else
- {
- p = W_CacheLumpNum(FontBBaseLump+c-33, PU_CACHE);
- V_DrawPatch(x, y, p);
- x += p->width-1;
- }
- }
+ while ((c = *text++) != 0)
+ {
+ if (c < 33)
+ {
+ x += 8;
+ }
+ else
+ {
+ p = W_CacheLumpNum(FontBBaseLump + c - 33, PU_CACHE);
+ V_DrawPatch(x, y, p);
+ x += p->width - 1;
+ }
+ }
}
//---------------------------------------------------------------------------
@@ -409,24 +414,24 @@
int MN_TextBWidth(char *text)
{
- char c;
- int width;
- patch_t *p;
+ char c;
+ int width;
+ patch_t *p;
- width = 0;
- while((c = *text++) != 0)
- {
- if(c < 33)
- {
- width += 5;
- }
- else
- {
- p = W_CacheLumpNum(FontBBaseLump+c-33, PU_CACHE);
- width += p->width-1;
- }
- }
- return(width);
+ width = 0;
+ while ((c = *text++) != 0)
+ {
+ if (c < 33)
+ {
+ width += 5;
+ }
+ else
+ {
+ p = W_CacheLumpNum(FontBBaseLump + c - 33, PU_CACHE);
+ width += p->width - 1;
+ }
+ }
+ return (width);
}
//---------------------------------------------------------------------------
@@ -437,11 +442,11 @@
void MN_Ticker(void)
{
- if(MenuActive == false)
- {
- return;
- }
- MenuTime++;
+ if (MenuActive == false)
+ {
+ return;
+ }
+ MenuTime++;
}
//---------------------------------------------------------------------------
@@ -450,79 +455,78 @@
//
//---------------------------------------------------------------------------
-char *QuitEndMsg[] =
-{
- "ARE YOU SURE YOU WANT TO QUIT?",
- "ARE YOU SURE YOU WANT TO END THE GAME?",
- "DO YOU WANT TO QUICKSAVE THE GAME NAMED",
- "DO YOU WANT TO QUICKLOAD THE GAME NAMED"
+char *QuitEndMsg[] = {
+ "ARE YOU SURE YOU WANT TO QUIT?",
+ "ARE YOU SURE YOU WANT TO END THE GAME?",
+ "DO YOU WANT TO QUICKSAVE THE GAME NAMED",
+ "DO YOU WANT TO QUICKLOAD THE GAME NAMED"
};
void MN_Drawer(void)
{
- int i;
- int x;
- int y;
- MenuItem_t *item;
- char *selName;
+ int i;
+ int x;
+ int y;
+ MenuItem_t *item;
+ char *selName;
- if(MenuActive == false)
- {
- if(askforquit)
- {
- MN_DrTextA(QuitEndMsg[typeofask-1], 160-
- MN_TextAWidth(QuitEndMsg[typeofask-1])/2, 80);
- if(typeofask == 3)
- {
- MN_DrTextA(SlotText[quicksave-1], 160-
- MN_TextAWidth(SlotText[quicksave-1])/2, 90);
- MN_DrTextA("?", 160+
- MN_TextAWidth(SlotText[quicksave-1])/2, 90);
- }
- if(typeofask == 4)
- {
- MN_DrTextA(SlotText[quickload-1], 160-
- MN_TextAWidth(SlotText[quickload-1])/2, 90);
- MN_DrTextA("?", 160+
- MN_TextAWidth(SlotText[quickload-1])/2, 90);
- }
- UpdateState |= I_FULLSCRN;
- }
- return;
- }
- else
- {
- UpdateState |= I_FULLSCRN;
- if(InfoType)
- {
- MN_DrawInfo();
- return;
- }
- if(screenblocks < 10)
- {
- BorderNeedRefresh = true;
- }
- if(CurrentMenu->drawFunc != NULL)
- {
- CurrentMenu->drawFunc();
- }
- x = CurrentMenu->x;
- y = CurrentMenu->y;
- item = CurrentMenu->items;
- for(i = 0; i < CurrentMenu->itemCount; i++)
- {
- if(item->type != ITT_EMPTY && item->text)
- {
- MN_DrTextB(item->text, x, y);
- }
- y += ITEM_HEIGHT;
- item++;
- }
- y = CurrentMenu->y+(CurrentItPos*ITEM_HEIGHT)+SELECTOR_YOFFSET;
- selName = MenuTime&16 ? "M_SLCTR1" : "M_SLCTR2";
- V_DrawPatch(x+SELECTOR_XOFFSET, y,
- W_CacheLumpName(selName, PU_CACHE));
- }
+ if (MenuActive == false)
+ {
+ if (askforquit)
+ {
+ MN_DrTextA(QuitEndMsg[typeofask - 1], 160 -
+ MN_TextAWidth(QuitEndMsg[typeofask - 1]) / 2, 80);
+ if (typeofask == 3)
+ {
+ MN_DrTextA(SlotText[quicksave - 1], 160 -
+ MN_TextAWidth(SlotText[quicksave - 1]) / 2, 90);
+ MN_DrTextA("?", 160 +
+ MN_TextAWidth(SlotText[quicksave - 1]) / 2, 90);
+ }
+ if (typeofask == 4)
+ {
+ MN_DrTextA(SlotText[quickload - 1], 160 -
+ MN_TextAWidth(SlotText[quickload - 1]) / 2, 90);
+ MN_DrTextA("?", 160 +
+ MN_TextAWidth(SlotText[quickload - 1]) / 2, 90);
+ }
+ UpdateState |= I_FULLSCRN;
+ }
+ return;
+ }
+ else
+ {
+ UpdateState |= I_FULLSCRN;
+ if (InfoType)
+ {
+ MN_DrawInfo();
+ return;
+ }
+ if (screenblocks < 10)
+ {
+ BorderNeedRefresh = true;
+ }
+ if (CurrentMenu->drawFunc != NULL)
+ {
+ CurrentMenu->drawFunc();
+ }
+ x = CurrentMenu->x;
+ y = CurrentMenu->y;
+ item = CurrentMenu->items;
+ for (i = 0; i < CurrentMenu->itemCount; i++)
+ {
+ if (item->type != ITT_EMPTY && item->text)
+ {
+ MN_DrTextB(item->text, x, y);
+ }
+ y += ITEM_HEIGHT;
+ item++;
+ }
+ y = CurrentMenu->y + (CurrentItPos * ITEM_HEIGHT) + SELECTOR_YOFFSET;
+ selName = MenuTime & 16 ? "M_SLCTR1" : "M_SLCTR2";
+ V_DrawPatch(x + SELECTOR_XOFFSET, y,
+ W_CacheLumpName(selName, PU_CACHE));
+ }
}
//---------------------------------------------------------------------------
@@ -533,13 +537,13 @@
static void DrawMainMenu(void)
{
- int frame;
+ int frame;
- frame = (MenuTime/3)%18;
- V_DrawPatch(88, 0, W_CacheLumpName("M_HTIC", PU_CACHE));
- V_DrawPatch(40, 10, W_CacheLumpNum(SkullBaseLump+(17-frame),
- PU_CACHE));
- V_DrawPatch(232, 10, W_CacheLumpNum(SkullBaseLump+frame, PU_CACHE));
+ frame = (MenuTime / 3) % 18;
+ V_DrawPatch(88, 0, W_CacheLumpName("M_HTIC", PU_CACHE));
+ V_DrawPatch(40, 10, W_CacheLumpNum(SkullBaseLump + (17 - frame),
+ PU_CACHE));
+ V_DrawPatch(232, 10, W_CacheLumpNum(SkullBaseLump + frame, PU_CACHE));
}
//---------------------------------------------------------------------------
@@ -571,10 +575,10 @@
static void DrawFilesMenu(void)
{
// clear out the quicksave/quickload stuff
- quicksave = 0;
- quickload = 0;
- players[consoleplayer].message = NULL;
- players[consoleplayer].messageTics = 1;
+ quicksave = 0;
+ quickload = 0;
+ players[consoleplayer].message = NULL;
+ players[consoleplayer].messageTics = 1;
}
//---------------------------------------------------------------------------
@@ -585,12 +589,12 @@
static void DrawLoadMenu(void)
{
- MN_DrTextB("LOAD GAME", 160-MN_TextBWidth("LOAD GAME")/2, 10);
- if(!slottextloaded)
- {
- MN_LoadSlotText();
- }
- DrawFileSlots(&LoadMenu);
+ MN_DrTextB("LOAD GAME", 160 - MN_TextBWidth("LOAD GAME") / 2, 10);
+ if (!slottextloaded)
+ {
+ MN_LoadSlotText();
+ }
+ DrawFileSlots(&LoadMenu);
}
//---------------------------------------------------------------------------
@@ -601,12 +605,12 @@
static void DrawSaveMenu(void)
{
- MN_DrTextB("SAVE GAME", 160-MN_TextBWidth("SAVE GAME")/2, 10);
- if(!slottextloaded)
- {
- MN_LoadSlotText();
- }
- DrawFileSlots(&SaveMenu);
+ MN_DrTextB("SAVE GAME", 160 - MN_TextBWidth("SAVE GAME") / 2, 10);
+ if (!slottextloaded)
+ {
+ MN_LoadSlotText();
+ }
+ DrawFileSlots(&SaveMenu);
}
//===========================================================================
@@ -618,33 +622,33 @@
void MN_LoadSlotText(void)
{
- FILE *fp;
- int count;
- int i;
- char name[256];
+ FILE *fp;
+ int count;
+ int i;
+ char name[256];
- for (i = 0; i < 6; i++)
- {
- if(cdrom)
- {
- sprintf(name, SAVEGAMENAMECD"%d.hsg", i);
- }
- else
- {
- sprintf(name, SAVEGAMENAME"%d.hsg", i);
- }
- fp = fopen(name, "rb+");
- if (!fp)
- {
- SlotText[i][0] = 0; // empty the string
- SlotStatus[i] = 0;
- continue;
- }
- count = fread(&SlotText[i], SLOTTEXTLEN, 1, fp);
- fclose(fp);
- SlotStatus[i] = 1;
- }
- slottextloaded = true;
+ for (i = 0; i < 6; i++)
+ {
+ if (cdrom)
+ {
+ sprintf(name, SAVEGAMENAMECD "%d.hsg", i);
+ }
+ else
+ {
+ sprintf(name, SAVEGAMENAME "%d.hsg", i);
+ }
+ fp = fopen(name, "rb+");
+ if (!fp)
+ {
+ SlotText[i][0] = 0; // empty the string
+ SlotStatus[i] = 0;
+ continue;
+ }
+ count = fread(&SlotText[i], SLOTTEXTLEN, 1, fp);
+ fclose(fp);
+ SlotStatus[i] = 1;
+ }
+ slottextloaded = true;
}
//---------------------------------------------------------------------------
@@ -653,23 +657,23 @@
//
//---------------------------------------------------------------------------
-static void DrawFileSlots(Menu_t *menu)
+static void DrawFileSlots(Menu_t * menu)
{
- int i;
- int x;
- int y;
+ int i;
+ int x;
+ int y;
- x = menu->x;
- y = menu->y;
- for(i = 0; i < 6; i++)
- {
- V_DrawPatch(x, y, W_CacheLumpName("M_FSLOT", PU_CACHE));
- if(SlotStatus[i])
- {
- MN_DrTextA(SlotText[i], x+5, y+5);
- }
- y += ITEM_HEIGHT;
- }
+ x = menu->x;
+ y = menu->y;
+ for (i = 0; i < 6; i++)
+ {
+ V_DrawPatch(x, y, W_CacheLumpName("M_FSLOT", PU_CACHE));
+ if (SlotStatus[i])
+ {
+ MN_DrTextA(SlotText[i], x + 5, y + 5);
+ }
+ y += ITEM_HEIGHT;
+ }
}
//---------------------------------------------------------------------------
@@ -680,15 +684,15 @@
static void DrawOptionsMenu(void)
{
- if(messageson)
- {
- MN_DrTextB("ON", 196, 50);
- }
- else
- {
- MN_DrTextB("OFF", 196, 50);
- }
- DrawSlider(&OptionsMenu, 3, 10, mouseSensitivity);
+ if (messageson)
+ {
+ MN_DrTextB("ON", 196, 50);
+ }
+ else
+ {
+ MN_DrTextB("OFF", 196, 50);
+ }
+ DrawSlider(&OptionsMenu, 3, 10, mouseSensitivity);
}
//---------------------------------------------------------------------------
@@ -699,9 +703,9 @@
static void DrawOptions2Menu(void)
{
- DrawSlider(&Options2Menu, 1, 9, screenblocks-3);
- DrawSlider(&Options2Menu, 3, 16, snd_MaxVolume);
- DrawSlider(&Options2Menu, 5, 16, snd_MusicVolume);
+ DrawSlider(&Options2Menu, 1, 9, screenblocks - 3);
+ DrawSlider(&Options2Menu, 3, 16, snd_MaxVolume);
+ DrawSlider(&Options2Menu, 5, 16, snd_MusicVolume);
}
//---------------------------------------------------------------------------
@@ -712,25 +716,25 @@
static boolean SCNetCheck(int option)
{
- if(!netgame)
- { // okay to go into the menu
- return true;
- }
- switch(option)
- {
- case 1:
- P_SetMessage(&players[consoleplayer],
- "YOU CAN'T START A NEW GAME IN NETPLAY!", true);
- break;
- case 2:
- P_SetMessage(&players[consoleplayer],
- "YOU CAN'T LOAD A GAME IN NETPLAY!", true);
- break;
- default:
- break;
- }
- MenuActive = false;
- return false;
+ if (!netgame)
+ { // okay to go into the menu
+ return true;
+ }
+ switch (option)
+ {
+ case 1:
+ P_SetMessage(&players[consoleplayer],
+ "YOU CAN'T START A NEW GAME IN NETPLAY!", true);
+ break;
+ case 2:
+ P_SetMessage(&players[consoleplayer],
+ "YOU CAN'T LOAD A GAME IN NETPLAY!", true);
+ break;
+ default:
+ break;
+ }
+ MenuActive = false;
+ return false;
}
//---------------------------------------------------------------------------
@@ -741,14 +745,14 @@
static boolean SCQuitGame(int option)
{
- MenuActive = false;
- askforquit = true;
- typeofask = 1; //quit game
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- return true;
+ MenuActive = false;
+ askforquit = true;
+ typeofask = 1; //quit game
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ return true;
}
//---------------------------------------------------------------------------
@@ -759,18 +763,18 @@
static boolean SCEndGame(int option)
{
- if(demoplayback || netgame)
- {
- return false;
- }
- MenuActive = false;
- askforquit = true;
- typeofask = 2; //endgame
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- return true;
+ if (demoplayback || netgame)
+ {
+ return false;
+ }
+ MenuActive = false;
+ askforquit = true;
+ typeofask = 2; //endgame
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ return true;
}
//---------------------------------------------------------------------------
@@ -781,17 +785,17 @@
static boolean SCMessages(int option)
{
- messageson ^= 1;
- if(messageson)
- {
- P_SetMessage(&players[consoleplayer], "MESSAGES ON", true);
- }
- else
- {
- P_SetMessage(&players[consoleplayer], "MESSAGES OFF", true);
- }
- S_StartSound(NULL, sfx_chat);
- return true;
+ messageson ^= 1;
+ if (messageson)
+ {
+ P_SetMessage(&players[consoleplayer], "MESSAGES ON", true);
+ }
+ else
+ {
+ P_SetMessage(&players[consoleplayer], "MESSAGES OFF", true);
+ }
+ S_StartSound(NULL, sfx_chat);
+ return true;
}
//---------------------------------------------------------------------------
@@ -802,30 +806,30 @@
static boolean SCLoadGame(int option)
{
- char name[256];
+ char name[256];
- if(!SlotStatus[option])
- { // slot's empty...don't try and load
- return false;
- }
- if(cdrom)
- {
- sprintf(name, SAVEGAMENAMECD"%d.hsg", option);
- }
- else
- {
- sprintf(name, SAVEGAMENAME"%d.hsg", option);
- }
- G_LoadGame(name);
- MN_DeactivateMenu();
- BorderNeedRefresh = true;
- if(quickload == -1)
- {
- quickload = option+1;
- players[consoleplayer].message = NULL;
- players[consoleplayer].messageTics = 1;
- }
- return true;
+ if (!SlotStatus[option])
+ { // slot's empty...don't try and load
+ return false;
+ }
+ if (cdrom)
+ {
+ sprintf(name, SAVEGAMENAMECD "%d.hsg", option);
+ }
+ else
+ {
+ sprintf(name, SAVEGAMENAME "%d.hsg", option);
+ }
+ G_LoadGame(name);
+ MN_DeactivateMenu();
+ BorderNeedRefresh = true;
+ if (quickload == -1)
+ {
+ quickload = option + 1;
+ players[consoleplayer].message = NULL;
+ players[consoleplayer].messageTics = 1;
+ }
+ return true;
}
//---------------------------------------------------------------------------
@@ -836,38 +840,38 @@
static boolean SCSaveGame(int option)
{
- char *ptr;
+ char *ptr;
- if(!FileMenuKeySteal)
- {
- FileMenuKeySteal = true;
- strcpy(oldSlotText, SlotText[option]);
- ptr = SlotText[option];
- while(*ptr)
- {
- ptr++;
- }
- *ptr = '[';
- *(ptr+1) = 0;
- SlotStatus[option]++;
- currentSlot = option;
- slotptr = ptr-SlotText[option];
- return false;
- }
- else
- {
- G_SaveGame(option, SlotText[option]);
- FileMenuKeySteal = false;
- MN_DeactivateMenu();
- }
- BorderNeedRefresh = true;
- if(quicksave == -1)
- {
- quicksave = option+1;
- players[consoleplayer].message = NULL;
- players[consoleplayer].messageTics = 1;
- }
- return true;
+ if (!FileMenuKeySteal)
+ {
+ FileMenuKeySteal = true;
+ strcpy(oldSlotText, SlotText[option]);
+ ptr = SlotText[option];
+ while (*ptr)
+ {
+ ptr++;
+ }
+ *ptr = '[';
+ *(ptr + 1) = 0;
+ SlotStatus[option]++;
+ currentSlot = option;
+ slotptr = ptr - SlotText[option];
+ return false;
+ }
+ else
+ {
+ G_SaveGame(option, SlotText[option]);
+ FileMenuKeySteal = false;
+ MN_DeactivateMenu();
+ }
+ BorderNeedRefresh = true;
+ if (quicksave == -1)
+ {
+ quicksave = option + 1;
+ players[consoleplayer].message = NULL;
+ players[consoleplayer].messageTics = 1;
+ }
+ return true;
}
//---------------------------------------------------------------------------
@@ -878,17 +882,17 @@
static boolean SCEpisode(int option)
{
- if(shareware && option > 1)
- {
- P_SetMessage(&players[consoleplayer],
- "ONLY AVAILABLE IN THE REGISTERED VERSION", true);
- }
- else
- {
- MenuEpisode = option;
- SetMenu(MENU_SKILL);
- }
- return true;
+ if (shareware && option > 1)
+ {
+ P_SetMessage(&players[consoleplayer],
+ "ONLY AVAILABLE IN THE REGISTERED VERSION", true);
+ }
+ else
+ {
+ MenuEpisode = option;
+ SetMenu(MENU_SKILL);
+ }
+ return true;
}
//---------------------------------------------------------------------------
@@ -899,9 +903,9 @@
static boolean SCSkill(int option)
{
- G_DeferedInitNew(option, MenuEpisode, 1);
- MN_DeactivateMenu();
- return true;
+ G_DeferedInitNew(option, MenuEpisode, 1);
+ MN_DeactivateMenu();
+ return true;
}
//---------------------------------------------------------------------------
@@ -912,18 +916,18 @@
static boolean SCMouseSensi(int option)
{
- if(option == RIGHT_DIR)
- {
- if(mouseSensitivity < 9)
- {
- mouseSensitivity++;
- }
- }
- else if(mouseSensitivity)
- {
- mouseSensitivity--;
- }
- return true;
+ if (option == RIGHT_DIR)
+ {
+ if (mouseSensitivity < 9)
+ {
+ mouseSensitivity++;
+ }
+ }
+ else if (mouseSensitivity)
+ {
+ mouseSensitivity--;
+ }
+ return true;
}
//---------------------------------------------------------------------------
@@ -934,20 +938,20 @@
static boolean SCSfxVolume(int option)
{
- if(option == RIGHT_DIR)
- {
- if(snd_MaxVolume < 15)
- {
- snd_MaxVolume++;
- }
- }
- else if(snd_MaxVolume)
- {
- snd_MaxVolume--;
- }
- S_SetMaxVolume(false); // don't recalc the sound curve, yet
- soundchanged = true; // we'll set it when we leave the menu
- return true;
+ if (option == RIGHT_DIR)
+ {
+ if (snd_MaxVolume < 15)
+ {
+ snd_MaxVolume++;
+ }
+ }
+ else if (snd_MaxVolume)
+ {
+ snd_MaxVolume--;
+ }
+ S_SetMaxVolume(false); // don't recalc the sound curve, yet
+ soundchanged = true; // we'll set it when we leave the menu
+ return true;
}
//---------------------------------------------------------------------------
@@ -958,19 +962,19 @@
static boolean SCMusicVolume(int option)
{
- if(option == RIGHT_DIR)
- {
- if(snd_MusicVolume < 15)
- {
- snd_MusicVolume++;
- }
- }
- else if(snd_MusicVolume)
- {
- snd_MusicVolume--;
- }
- S_SetMusicVolume();
- return true;
+ if (option == RIGHT_DIR)
+ {
+ if (snd_MusicVolume < 15)
+ {
+ snd_MusicVolume++;
+ }
+ }
+ else if (snd_MusicVolume)
+ {
+ snd_MusicVolume--;
+ }
+ S_SetMusicVolume();
+ return true;
}
//---------------------------------------------------------------------------
@@ -981,19 +985,19 @@
static boolean SCScreenSize(int option)
{
- if(option == RIGHT_DIR)
- {
- if(screenblocks < 11)
- {
- screenblocks++;
- }
- }
- else if(screenblocks > 3)
- {
- screenblocks--;
- }
- R_SetViewSize(screenblocks, detailLevel);
- return true;
+ if (option == RIGHT_DIR)
+ {
+ if (screenblocks < 11)
+ {
+ screenblocks++;
+ }
+ }
+ else if (screenblocks > 3)
+ {
+ screenblocks--;
+ }
+ R_SetViewSize(screenblocks, detailLevel);
+ return true;
}
//---------------------------------------------------------------------------
@@ -1004,13 +1008,13 @@
static boolean SCInfo(int option)
{
- InfoType = 1;
- S_StartSound(NULL, sfx_dorcls);
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- return true;
+ InfoType = 1;
+ S_StartSound(NULL, sfx_dorcls);
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ return true;
}
//---------------------------------------------------------------------------
@@ -1019,466 +1023,470 @@
//
//---------------------------------------------------------------------------
-boolean MN_Responder(event_t *event)
+boolean MN_Responder(event_t * event)
{
- int key;
- int i;
- MenuItem_t *item;
- extern boolean automapactive;
- static boolean shiftdown;
- extern void D_StartTitle(void);
- extern void G_CheckDemoStatus(void);
- char *textBuffer;
+ int key;
+ int i;
+ MenuItem_t *item;
+ extern boolean automapactive;
+ static boolean shiftdown;
+ extern void D_StartTitle(void);
+ extern void G_CheckDemoStatus(void);
+ char *textBuffer;
- if(event->data1 == KEY_RSHIFT)
- {
- shiftdown = (event->type == ev_keydown);
- }
- if(event->type != ev_keydown)
- {
- return(false);
- }
- key = event->data1;
- if(InfoType)
- {
- if(shareware)
- {
- InfoType = (InfoType+1)%5;
- }
- else
- {
- InfoType = (InfoType+1)%4;
- }
- if(key == KEY_ESCAPE)
- {
- InfoType = 0;
- }
- if(!InfoType)
- {
- paused = false;
- MN_DeactivateMenu();
- SB_state = -1; //refresh the statbar
- BorderNeedRefresh = true;
- }
- S_StartSound(NULL, sfx_dorcls);
- return(true); //make the info screen eat the keypress
- }
+ if (event->data1 == KEY_RSHIFT)
+ {
+ shiftdown = (event->type == ev_keydown);
+ }
+ if (event->type != ev_keydown)
+ {
+ return (false);
+ }
+ key = event->data1;
+ if (InfoType)
+ {
+ if (shareware)
+ {
+ InfoType = (InfoType + 1) % 5;
+ }
+ else
+ {
+ InfoType = (InfoType + 1) % 4;
+ }
+ if (key == KEY_ESCAPE)
+ {
+ InfoType = 0;
+ }
+ if (!InfoType)
+ {
+ paused = false;
+ MN_DeactivateMenu();
+ SB_state = -1; //refresh the statbar
+ BorderNeedRefresh = true;
+ }
+ S_StartSound(NULL, sfx_dorcls);
+ return (true); //make the info screen eat the keypress
+ }
- if(ravpic && key == KEY_F1)
- {
- G_ScreenShot();
- return(true);
- }
+ if (ravpic && key == KEY_F1)
+ {
+ G_ScreenShot();
+ return (true);
+ }
- if(askforquit)
- {
- switch(key)
- {
- case 'y':
- if(askforquit)
- {
- switch(typeofask)
- {
- case 1:
- G_CheckDemoStatus();
- I_Quit();
- break;
- case 2:
- players[consoleplayer].messageTics = 0;
- //set the msg to be cleared
- players[consoleplayer].message = NULL;
- typeofask = 0;
- askforquit = false;
- paused = false;
- I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));
- D_StartTitle(); // go to intro/demo mode.
- break;
- case 3:
- P_SetMessage(&players[consoleplayer], "QUICKSAVING....", false);
- FileMenuKeySteal = true;
- SCSaveGame(quicksave-1);
- askforquit = false;
- typeofask = 0;
- BorderNeedRefresh = true;
- return true;
- case 4:
- P_SetMessage(&players[consoleplayer], "QUICKLOADING....", false);
- SCLoadGame(quickload-1);
- askforquit = false;
- typeofask = 0;
- BorderNeedRefresh = true;
- return true;
- default:
- return true; // eat the 'y' keypress
- }
- }
- return false;
- case 'n':
- case KEY_ESCAPE:
- if(askforquit)
- {
- players[consoleplayer].messageTics = 1; //set the msg to be cleared
- askforquit = false;
- typeofask = 0;
- paused = false;
- UpdateState |= I_FULLSCRN;
- BorderNeedRefresh = true;
- return true;
- }
- return false;
- }
- return false; // don't let the keys filter thru
- }
- if(MenuActive == false && !chatmodeon)
- {
- switch(key)
- {
- case KEY_MINUS:
- if(automapactive)
- { // Don't screen size in automap
- return(false);
- }
- SCScreenSize(LEFT_DIR);
- S_StartSound(NULL, sfx_keyup);
- BorderNeedRefresh = true;
- UpdateState |= I_FULLSCRN;
- return(true);
- case KEY_EQUALS:
- if(automapactive)
- { // Don't screen size in automap
- return(false);
- }
- SCScreenSize(RIGHT_DIR);
- S_StartSound(NULL, sfx_keyup);
- BorderNeedRefresh = true;
- UpdateState |= I_FULLSCRN;
- return(true);
+ if (askforquit)
+ {
+ switch (key)
+ {
+ case 'y':
+ if (askforquit)
+ {
+ switch (typeofask)
+ {
+ case 1:
+ G_CheckDemoStatus();
+ I_Quit();
+ break;
+ case 2:
+ players[consoleplayer].messageTics = 0;
+ //set the msg to be cleared
+ players[consoleplayer].message = NULL;
+ typeofask = 0;
+ askforquit = false;
+ paused = false;
+ I_SetPalette(W_CacheLumpName
+ ("PLAYPAL", PU_CACHE));
+ D_StartTitle(); // go to intro/demo mode.
+ break;
+ case 3:
+ P_SetMessage(&players[consoleplayer],
+ "QUICKSAVING....", false);
+ FileMenuKeySteal = true;
+ SCSaveGame(quicksave - 1);
+ askforquit = false;
+ typeofask = 0;
+ BorderNeedRefresh = true;
+ return true;
+ case 4:
+ P_SetMessage(&players[consoleplayer],
+ "QUICKLOADING....", false);
+ SCLoadGame(quickload - 1);
+ askforquit = false;
+ typeofask = 0;
+ BorderNeedRefresh = true;
+ return true;
+ default:
+ return true; // eat the 'y' keypress
+ }
+ }
+ return false;
+ case 'n':
+ case KEY_ESCAPE:
+ if (askforquit)
+ {
+ players[consoleplayer].messageTics = 1; //set the msg to be cleared
+ askforquit = false;
+ typeofask = 0;
+ paused = false;
+ UpdateState |= I_FULLSCRN;
+ BorderNeedRefresh = true;
+ return true;
+ }
+ return false;
+ }
+ return false; // don't let the keys filter thru
+ }
+ if (MenuActive == false && !chatmodeon)
+ {
+ switch (key)
+ {
+ case KEY_MINUS:
+ if (automapactive)
+ { // Don't screen size in automap
+ return (false);
+ }
+ SCScreenSize(LEFT_DIR);
+ S_StartSound(NULL, sfx_keyup);
+ BorderNeedRefresh = true;
+ UpdateState |= I_FULLSCRN;
+ return (true);
+ case KEY_EQUALS:
+ if (automapactive)
+ { // Don't screen size in automap
+ return (false);
+ }
+ SCScreenSize(RIGHT_DIR);
+ S_StartSound(NULL, sfx_keyup);
+ BorderNeedRefresh = true;
+ UpdateState |= I_FULLSCRN;
+ return (true);
#ifndef __NeXT__
- case KEY_F1: // help screen
- SCInfo(0); // start up info screens
- MenuActive = true;
- return(true);
- case KEY_F2: // save game
- if(gamestate == GS_LEVEL && !demoplayback)
- {
- MenuActive = true;
- FileMenuKeySteal = false;
- MenuTime = 0;
- CurrentMenu = &SaveMenu;
- CurrentItPos = CurrentMenu->oldItPos;
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- S_StartSound(NULL, sfx_dorcls);
- slottextloaded = false; //reload the slot text, when needed
- }
- return true;
- case KEY_F3: // load game
- if(SCNetCheck(2))
- {
- MenuActive = true;
- FileMenuKeySteal = false;
- MenuTime = 0;
- CurrentMenu = &LoadMenu;
- CurrentItPos = CurrentMenu->oldItPos;
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- S_StartSound(NULL, sfx_dorcls);
- slottextloaded = false; //reload the slot text, when needed
- }
- return true;
- case KEY_F4: // volume
- MenuActive = true;
- FileMenuKeySteal = false;
- MenuTime = 0;
- CurrentMenu = &Options2Menu;
- CurrentItPos = CurrentMenu->oldItPos;
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- S_StartSound(NULL, sfx_dorcls);
- slottextloaded = false; //reload the slot text, when needed
- return true;
- case KEY_F5: // F5 isn't used in Heretic. (detail level)
- return true;
- case KEY_F6: // quicksave
- if(gamestate == GS_LEVEL && !demoplayback)
- {
- if(!quicksave || quicksave == -1)
- {
- MenuActive = true;
- FileMenuKeySteal = false;
- MenuTime = 0;
- CurrentMenu = &SaveMenu;
- CurrentItPos = CurrentMenu->oldItPos;
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- S_StartSound(NULL, sfx_dorcls);
- slottextloaded = false; //reload the slot text, when needed
- quicksave = -1;
- P_SetMessage(&players[consoleplayer],
- "CHOOSE A QUICKSAVE SLOT", true);
- }
- else
- {
- askforquit = true;
- typeofask = 3;
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- S_StartSound(NULL, sfx_chat);
- }
- }
- return true;
- case KEY_F7: // endgame
- if(gamestate == GS_LEVEL && !demoplayback)
- {
- S_StartSound(NULL, sfx_chat);
- SCEndGame(0);
- }
- return true;
- case KEY_F8: // toggle messages
- SCMessages(0);
- return true;
- case KEY_F9: // quickload
- if(!quickload || quickload == -1)
- {
- MenuActive = true;
- FileMenuKeySteal = false;
- MenuTime = 0;
- CurrentMenu = &LoadMenu;
- CurrentItPos = CurrentMenu->oldItPos;
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- S_StartSound(NULL, sfx_dorcls);
- slottextloaded = false; //reload the slot text, when needed
- quickload = -1;
- P_SetMessage(&players[consoleplayer],
- "CHOOSE A QUICKLOAD SLOT", true);
- }
- else
- {
- askforquit = true;
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- typeofask = 4;
- S_StartSound(NULL, sfx_chat);
- }
- return true;
- case KEY_F10: // quit
- if(gamestate == GS_LEVEL)
- {
- SCQuitGame(0);
- S_StartSound(NULL, sfx_chat);
- }
- return true;
- case KEY_F11: // F11 - gamma mode correction
- usegamma++;
- if(usegamma > 4)
- {
- usegamma = 0;
- }
- I_SetPalette((byte *)W_CacheLumpName("PLAYPAL", PU_CACHE));
- return true;
+ case KEY_F1: // help screen
+ SCInfo(0); // start up info screens
+ MenuActive = true;
+ return (true);
+ case KEY_F2: // save game
+ if (gamestate == GS_LEVEL && !demoplayback)
+ {
+ MenuActive = true;
+ FileMenuKeySteal = false;
+ MenuTime = 0;
+ CurrentMenu = &SaveMenu;
+ CurrentItPos = CurrentMenu->oldItPos;
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ S_StartSound(NULL, sfx_dorcls);
+ slottextloaded = false; //reload the slot text, when needed
+ }
+ return true;
+ case KEY_F3: // load game
+ if (SCNetCheck(2))
+ {
+ MenuActive = true;
+ FileMenuKeySteal = false;
+ MenuTime = 0;
+ CurrentMenu = &LoadMenu;
+ CurrentItPos = CurrentMenu->oldItPos;
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ S_StartSound(NULL, sfx_dorcls);
+ slottextloaded = false; //reload the slot text, when needed
+ }
+ return true;
+ case KEY_F4: // volume
+ MenuActive = true;
+ FileMenuKeySteal = false;
+ MenuTime = 0;
+ CurrentMenu = &Options2Menu;
+ CurrentItPos = CurrentMenu->oldItPos;
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ S_StartSound(NULL, sfx_dorcls);
+ slottextloaded = false; //reload the slot text, when needed
+ return true;
+ case KEY_F5: // F5 isn't used in Heretic. (detail level)
+ return true;
+ case KEY_F6: // quicksave
+ if (gamestate == GS_LEVEL && !demoplayback)
+ {
+ if (!quicksave || quicksave == -1)
+ {
+ MenuActive = true;
+ FileMenuKeySteal = false;
+ MenuTime = 0;
+ CurrentMenu = &SaveMenu;
+ CurrentItPos = CurrentMenu->oldItPos;
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ S_StartSound(NULL, sfx_dorcls);
+ slottextloaded = false; //reload the slot text, when needed
+ quicksave = -1;
+ P_SetMessage(&players[consoleplayer],
+ "CHOOSE A QUICKSAVE SLOT", true);
+ }
+ else
+ {
+ askforquit = true;
+ typeofask = 3;
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ S_StartSound(NULL, sfx_chat);
+ }
+ }
+ return true;
+ case KEY_F7: // endgame
+ if (gamestate == GS_LEVEL && !demoplayback)
+ {
+ S_StartSound(NULL, sfx_chat);
+ SCEndGame(0);
+ }
+ return true;
+ case KEY_F8: // toggle messages
+ SCMessages(0);
+ return true;
+ case KEY_F9: // quickload
+ if (!quickload || quickload == -1)
+ {
+ MenuActive = true;
+ FileMenuKeySteal = false;
+ MenuTime = 0;
+ CurrentMenu = &LoadMenu;
+ CurrentItPos = CurrentMenu->oldItPos;
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ S_StartSound(NULL, sfx_dorcls);
+ slottextloaded = false; //reload the slot text, when needed
+ quickload = -1;
+ P_SetMessage(&players[consoleplayer],
+ "CHOOSE A QUICKLOAD SLOT", true);
+ }
+ else
+ {
+ askforquit = true;
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ typeofask = 4;
+ S_StartSound(NULL, sfx_chat);
+ }
+ return true;
+ case KEY_F10: // quit
+ if (gamestate == GS_LEVEL)
+ {
+ SCQuitGame(0);
+ S_StartSound(NULL, sfx_chat);
+ }
+ return true;
+ case KEY_F11: // F11 - gamma mode correction
+ usegamma++;
+ if (usegamma > 4)
+ {
+ usegamma = 0;
+ }
+ I_SetPalette((byte *) W_CacheLumpName("PLAYPAL", PU_CACHE));
+ return true;
#endif
- }
+ }
- }
+ }
- if(MenuActive == false)
- {
- if(key == KEY_ESCAPE || gamestate == GS_DEMOSCREEN || demoplayback)
- {
- MN_ActivateMenu();
- return(true);
- }
- return(false);
- }
- if(!FileMenuKeySteal)
- {
- item = &CurrentMenu->items[CurrentItPos];
- switch(key)
- {
- case KEY_DOWNARROW:
- do
- {
- if(CurrentItPos+1 > CurrentMenu->itemCount-1)
- {
- CurrentItPos = 0;
- }
- else
- {
- CurrentItPos++;
- }
- } while(CurrentMenu->items[CurrentItPos].type == ITT_EMPTY);
- S_StartSound(NULL, sfx_switch);
- return(true);
- break;
- case KEY_UPARROW:
- do
- {
- if(CurrentItPos == 0)
- {
- CurrentItPos = CurrentMenu->itemCount-1;
- }
- else
- {
- CurrentItPos--;
- }
- } while(CurrentMenu->items[CurrentItPos].type == ITT_EMPTY);
- S_StartSound(NULL, sfx_switch);
- return(true);
- break;
- case KEY_LEFTARROW:
- if(item->type == ITT_LRFUNC && item->func != NULL)
- {
- item->func(LEFT_DIR);
- S_StartSound(NULL, sfx_keyup);
- }
- return(true);
- break;
- case KEY_RIGHTARROW:
- if(item->type == ITT_LRFUNC && item->func != NULL)
- {
- item->func(RIGHT_DIR);
- S_StartSound(NULL, sfx_keyup);
- }
- return(true);
- break;
- case KEY_ENTER:
- if(item->type == ITT_SETMENU)
- {
- SetMenu(item->menu);
- }
- else if(item->func != NULL)
- {
- CurrentMenu->oldItPos = CurrentItPos;
- if(item->type == ITT_LRFUNC)
- {
- item->func(RIGHT_DIR);
- }
- else if(item->type == ITT_EFUNC)
- {
- if(item->func(item->option))
- {
- if(item->menu != MENU_NONE)
- {
- SetMenu(item->menu);
- }
- }
- }
- }
- S_StartSound(NULL, sfx_dorcls);
- return(true);
- break;
- case KEY_ESCAPE:
- MN_DeactivateMenu();
- return(true);
- case KEY_BACKSPACE:
- S_StartSound(NULL, sfx_switch);
- if(CurrentMenu->prevMenu == MENU_NONE)
- {
- MN_DeactivateMenu();
- }
- else
- {
- SetMenu(CurrentMenu->prevMenu);
- }
- return(true);
- default:
- for(i = 0; i < CurrentMenu->itemCount; i++)
- {
- if(CurrentMenu->items[i].text)
- {
- if(toupper(key)
- == toupper(CurrentMenu->items[i].text[0]))
- {
- CurrentItPos = i;
- return(true);
- }
- }
- }
- break;
- }
- return(false);
- }
- else
- { // Editing file names
- textBuffer = &SlotText[currentSlot][slotptr];
- if(key == KEY_BACKSPACE)
- {
- if(slotptr)
- {
- *textBuffer-- = 0;
- *textBuffer = ASCII_CURSOR;
- slotptr--;
- }
- return(true);
- }
- if(key == KEY_ESCAPE)
- {
- memset(SlotText[currentSlot], 0, SLOTTEXTLEN+2);
- strcpy(SlotText[currentSlot], oldSlotText);
- SlotStatus[currentSlot]--;
- MN_DeactivateMenu();
- return(true);
- }
- if(key == KEY_ENTER)
- {
- SlotText[currentSlot][slotptr] = 0; // clear the cursor
- item = &CurrentMenu->items[CurrentItPos];
- CurrentMenu->oldItPos = CurrentItPos;
- if(item->type == ITT_EFUNC)
- {
- item->func(item->option);
- if(item->menu != MENU_NONE)
- {
- SetMenu(item->menu);
- }
- }
- return(true);
- }
- if(slotptr < SLOTTEXTLEN && key != KEY_BACKSPACE)
- {
- if((key >= 'a' && key <= 'z'))
- {
- *textBuffer++ = key-32;
- *textBuffer = ASCII_CURSOR;
- slotptr++;
- return(true);
- }
- if(((key >= '0' && key <= '9') || key == ' '
- || key == ',' || key == '.' || key == '-')
- && !shiftdown)
- {
- *textBuffer++ = key;
- *textBuffer = ASCII_CURSOR;
- slotptr++;
- return(true);
- }
- if(shiftdown && key == '1')
- {
- *textBuffer++ = '!';
- *textBuffer = ASCII_CURSOR;
- slotptr++;
- return(true);
- }
- }
- return(true);
- }
- return(false);
-}
+ if (MenuActive == false)
+ {
+ if (key == KEY_ESCAPE || gamestate == GS_DEMOSCREEN || demoplayback)
+ {
+ MN_ActivateMenu();
+ return (true);
+ }
+ return (false);
+ }
+ if (!FileMenuKeySteal)
+ {
+ item = &CurrentMenu->items[CurrentItPos];
+ switch (key)
+ {
+ case KEY_DOWNARROW:
+ do
+ {
+ if (CurrentItPos + 1 > CurrentMenu->itemCount - 1)
+ {
+ CurrentItPos = 0;
+ }
+ else
+ {
+ CurrentItPos++;
+ }
+ }
+ while (CurrentMenu->items[CurrentItPos].type == ITT_EMPTY);
+ S_StartSound(NULL, sfx_switch);
+ return (true);
+ break;
+ case KEY_UPARROW:
+ do
+ {
+ if (CurrentItPos == 0)
+ {
+ CurrentItPos = CurrentMenu->itemCount - 1;
+ }
+ else
+ {
+ CurrentItPos--;
+ }
+ }
+ while (CurrentMenu->items[CurrentItPos].type == ITT_EMPTY);
+ S_StartSound(NULL, sfx_switch);
+ return (true);
+ break;
+ case KEY_LEFTARROW:
+ if (item->type == ITT_LRFUNC && item->func != NULL)
+ {
+ item->func(LEFT_DIR);
+ S_StartSound(NULL, sfx_keyup);
+ }
+ return (true);
+ break;
+ case KEY_RIGHTARROW:
+ if (item->type == ITT_LRFUNC && item->func != NULL)
+ {
+ item->func(RIGHT_DIR);
+ S_StartSound(NULL, sfx_keyup);
+ }
+ return (true);
+ break;
+ case KEY_ENTER:
+ if (item->type == ITT_SETMENU)
+ {
+ SetMenu(item->menu);
+ }
+ else if (item->func != NULL)
+ {
+ CurrentMenu->oldItPos = CurrentItPos;
+ if (item->type == ITT_LRFUNC)
+ {
+ item->func(RIGHT_DIR);
+ }
+ else if (item->type == ITT_EFUNC)
+ {
+ if (item->func(item->option))
+ {
+ if (item->menu != MENU_NONE)
+ {
+ SetMenu(item->menu);
+ }
+ }
+ }
+ }
+ S_StartSound(NULL, sfx_dorcls);
+ return (true);
+ break;
+ case KEY_ESCAPE:
+ MN_DeactivateMenu();
+ return (true);
+ case KEY_BACKSPACE:
+ S_StartSound(NULL, sfx_switch);
+ if (CurrentMenu->prevMenu == MENU_NONE)
+ {
+ MN_DeactivateMenu();
+ }
+ else
+ {
+ SetMenu(CurrentMenu->prevMenu);
+ }
+ return (true);
+ default:
+ for (i = 0; i < CurrentMenu->itemCount; i++)
+ {
+ if (CurrentMenu->items[i].text)
+ {
+ if (toupper(key)
+ == toupper(CurrentMenu->items[i].text[0]))
+ {
+ CurrentItPos = i;
+ return (true);
+ }
+ }
+ }
+ break;
+ }
+ return (false);
+ }
+ else
+ { // Editing file names
+ textBuffer = &SlotText[currentSlot][slotptr];
+ if (key == KEY_BACKSPACE)
+ {
+ if (slotptr)
+ {
+ *textBuffer-- = 0;
+ *textBuffer = ASCII_CURSOR;
+ slotptr--;
+ }
+ return (true);
+ }
+ if (key == KEY_ESCAPE)
+ {
+ memset(SlotText[currentSlot], 0, SLOTTEXTLEN + 2);
+ strcpy(SlotText[currentSlot], oldSlotText);
+ SlotStatus[currentSlot]--;
+ MN_DeactivateMenu();
+ return (true);
+ }
+ if (key == KEY_ENTER)
+ {
+ SlotText[currentSlot][slotptr] = 0; // clear the cursor
+ item = &CurrentMenu->items[CurrentItPos];
+ CurrentMenu->oldItPos = CurrentItPos;
+ if (item->type == ITT_EFUNC)
+ {
+ item->func(item->option);
+ if (item->menu != MENU_NONE)
+ {
+ SetMenu(item->menu);
+ }
+ }
+ return (true);
+ }
+ if (slotptr < SLOTTEXTLEN && key != KEY_BACKSPACE)
+ {
+ if ((key >= 'a' && key <= 'z'))
+ {
+ *textBuffer++ = key - 32;
+ *textBuffer = ASCII_CURSOR;
+ slotptr++;
+ return (true);
+ }
+ if (((key >= '0' && key <= '9') || key == ' '
+ || key == ',' || key == '.' || key == '-') && !shiftdown)
+ {
+ *textBuffer++ = key;
+ *textBuffer = ASCII_CURSOR;
+ slotptr++;
+ return (true);
+ }
+ if (shiftdown && key == '1')
+ {
+ *textBuffer++ = '!';
+ *textBuffer = ASCII_CURSOR;
+ slotptr++;
+ return (true);
+ }
+ }
+ return (true);
+ }
+ return (false);
+}
//---------------------------------------------------------------------------
//
@@ -1488,25 +1496,25 @@
void MN_ActivateMenu(void)
{
- if(MenuActive)
- {
- return;
- }
- if(paused)
- {
- S_ResumeSound();
- }
- MenuActive = true;
- FileMenuKeySteal = false;
- MenuTime = 0;
- CurrentMenu = &MainMenu;
- CurrentItPos = CurrentMenu->oldItPos;
- if(!netgame && !demoplayback)
- {
- paused = true;
- }
- S_StartSound(NULL, sfx_dorcls);
- slottextloaded = false; //reload the slot text, when needed
+ if (MenuActive)
+ {
+ return;
+ }
+ if (paused)
+ {
+ S_ResumeSound();
+ }
+ MenuActive = true;
+ FileMenuKeySteal = false;
+ MenuTime = 0;
+ CurrentMenu = &MainMenu;
+ CurrentItPos = CurrentMenu->oldItPos;
+ if (!netgame && !demoplayback)
+ {
+ paused = true;
+ }
+ S_StartSound(NULL, sfx_dorcls);
+ slottextloaded = false; //reload the slot text, when needed
}
//---------------------------------------------------------------------------
@@ -1517,20 +1525,20 @@
void MN_DeactivateMenu(void)
{
- CurrentMenu->oldItPos = CurrentItPos;
- MenuActive = false;
- if(!netgame)
- {
- paused = false;
- }
- S_StartSound(NULL, sfx_dorcls);
- if(soundchanged)
- {
- S_SetMaxVolume(true); //recalc the sound curve
- soundchanged = false;
- }
- players[consoleplayer].message = NULL;
- players[consoleplayer].messageTics = 1;
+ CurrentMenu->oldItPos = CurrentItPos;
+ MenuActive = false;
+ if (!netgame)
+ {
+ paused = false;
+ }
+ S_StartSound(NULL, sfx_dorcls);
+ if (soundchanged)
+ {
+ S_SetMaxVolume(true); //recalc the sound curve
+ soundchanged = false;
+ }
+ players[consoleplayer].message = NULL;
+ players[consoleplayer].messageTics = 1;
}
//---------------------------------------------------------------------------
@@ -1541,9 +1549,10 @@
void MN_DrawInfo(void)
{
- I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));
- memcpy(screen, (byte *)W_CacheLumpNum(W_GetNumForName("TITLE")+InfoType,
- PU_CACHE), SCREENWIDTH*SCREENHEIGHT);
+ I_SetPalette(W_CacheLumpName("PLAYPAL", PU_CACHE));
+ memcpy(screen,
+ (byte *) W_CacheLumpNum(W_GetNumForName("TITLE") + InfoType,
+ PU_CACHE), SCREENWIDTH * SCREENHEIGHT);
// V_DrawPatch(0, 0, W_CacheLumpNum(W_GetNumForName("TITLE")+InfoType,
// PU_CACHE));
}
@@ -1557,9 +1566,9 @@
static void SetMenu(MenuType_t menu)
{
- CurrentMenu->oldItPos = CurrentItPos;
- CurrentMenu = Menus[menu];
- CurrentItPos = CurrentMenu->oldItPos;
+ CurrentMenu->oldItPos = CurrentItPos;
+ CurrentMenu = Menus[menu];
+ CurrentItPos = CurrentMenu->oldItPos;
}
//---------------------------------------------------------------------------
@@ -1568,21 +1577,22 @@
//
//---------------------------------------------------------------------------
-static void DrawSlider(Menu_t *menu, int item, int width, int slot)
+static void DrawSlider(Menu_t * menu, int item, int width, int slot)
{
- int x;
- int y;
- int x2;
- int count;
+ int x;
+ int y;
+ int x2;
+ int count;
- x = menu->x+24;
- y = menu->y+2+(item*ITEM_HEIGHT);
- V_DrawPatch(x-32, y, W_CacheLumpName("M_SLDLT", PU_CACHE));
- for(x2 = x, count = width; count--; x2 += 8)
- {
- V_DrawPatch(x2, y, W_CacheLumpName(count&1 ? "M_SLDMD1"
- : "M_SLDMD2", PU_CACHE));
- }
- V_DrawPatch(x2, y, W_CacheLumpName("M_SLDRT", PU_CACHE));
- V_DrawPatch(x+4+slot*8, y+7, W_CacheLumpName("M_SLDKB", PU_CACHE));
+ x = menu->x + 24;
+ y = menu->y + 2 + (item * ITEM_HEIGHT);
+ V_DrawPatch(x - 32, y, W_CacheLumpName("M_SLDLT", PU_CACHE));
+ for (x2 = x, count = width; count--; x2 += 8)
+ {
+ V_DrawPatch(x2, y, W_CacheLumpName(count & 1 ? "M_SLDMD1"
+ : "M_SLDMD2", PU_CACHE));
+ }
+ V_DrawPatch(x2, y, W_CacheLumpName("M_SLDRT", PU_CACHE));
+ V_DrawPatch(x + 4 + slot * 8, y + 7,
+ W_CacheLumpName("M_SLDKB", PU_CACHE));
}
--- a/src/heretic/p_ceilng.c
+++ b/src/heretic/p_ceilng.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
#include "DoomDef.h"
#include "P_local.h"
@@ -6,231 +28,234 @@
//==================================================================
//==================================================================
//
-// CEILINGS
+// CEILINGS
//
//==================================================================
//==================================================================
-ceiling_t *activeceilings[MAXCEILINGS];
+ceiling_t *activeceilings[MAXCEILINGS];
//==================================================================
//
-// T_MoveCeiling
+// T_MoveCeiling
//
//==================================================================
-void T_MoveCeiling (ceiling_t *ceiling)
+void T_MoveCeiling(ceiling_t * ceiling)
{
- result_e res;
-
- switch(ceiling->direction)
- {
- case 0: // IN STASIS
- break;
- case 1: // UP
- res = T_MovePlane(ceiling->sector,ceiling->speed,
- ceiling->topheight,false,1,ceiling->direction);
- if(!(leveltime&7))
- S_StartSound((mobj_t *)&ceiling->sector->soundorg, sfx_dormov);
- if (res == pastdest)
- switch(ceiling->type)
- {
- case raiseToHighest:
- P_RemoveActiveCeiling(ceiling);
- break;
- case fastCrushAndRaise:
- case crushAndRaise:
- ceiling->direction = -1;
- break;
- default:
- break;
- }
- break;
- case -1: // DOWN
- res = T_MovePlane(ceiling->sector,ceiling->speed,
- ceiling->bottomheight,ceiling->crush,1,ceiling->direction);
- if (!(leveltime&7))
- S_StartSound((mobj_t *)&ceiling->sector->soundorg,sfx_dormov);
- if (res == pastdest)
- switch(ceiling->type)
- {
- case crushAndRaise:
- ceiling->speed = CEILSPEED;
- case fastCrushAndRaise:
- ceiling->direction = 1;
- break;
- case lowerAndCrush:
- case lowerToFloor:
- P_RemoveActiveCeiling(ceiling);
- break;
- default:
- break;
- }
- else
- if (res == crushed)
- switch(ceiling->type)
- {
- case crushAndRaise:
- case lowerAndCrush:
- ceiling->speed = CEILSPEED / 8;
- break;
- default:
- break;
- }
- break;
- }
-}
+ result_e res;
+
+ switch (ceiling->direction)
+ {
+ case 0: // IN STASIS
+ break;
+ case 1: // UP
+ res = T_MovePlane(ceiling->sector, ceiling->speed,
+ ceiling->topheight, false, 1,
+ ceiling->direction);
+ if (!(leveltime & 7))
+ S_StartSound((mobj_t *) & ceiling->sector->soundorg,
+ sfx_dormov);
+ if (res == pastdest)
+ switch (ceiling->type)
+ {
+ case raiseToHighest:
+ P_RemoveActiveCeiling(ceiling);
+ break;
+ case fastCrushAndRaise:
+ case crushAndRaise:
+ ceiling->direction = -1;
+ break;
+ default:
+ break;
+ }
+ break;
+ case -1: // DOWN
+ res = T_MovePlane(ceiling->sector, ceiling->speed,
+ ceiling->bottomheight, ceiling->crush, 1,
+ ceiling->direction);
+ if (!(leveltime & 7))
+ S_StartSound((mobj_t *) & ceiling->sector->soundorg,
+ sfx_dormov);
+ if (res == pastdest)
+ switch (ceiling->type)
+ {
+ case crushAndRaise:
+ ceiling->speed = CEILSPEED;
+ case fastCrushAndRaise:
+ ceiling->direction = 1;
+ break;
+ case lowerAndCrush:
+ case lowerToFloor:
+ P_RemoveActiveCeiling(ceiling);
+ break;
+ default:
+ break;
+ }
+ else if (res == crushed)
+ switch (ceiling->type)
+ {
+ case crushAndRaise:
+ case lowerAndCrush:
+ ceiling->speed = CEILSPEED / 8;
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+}
//==================================================================
//
-// EV_DoCeiling
-// Move a ceiling up/down and all around!
+// EV_DoCeiling
+// Move a ceiling up/down and all around!
//
//==================================================================
-int EV_DoCeiling (line_t *line, ceiling_e type)
+int EV_DoCeiling(line_t * line, ceiling_e type)
{
- int secnum,rtn;
- sector_t *sec;
- ceiling_t *ceiling;
-
- secnum = -1;
- rtn = 0;
-
- //
- // Reactivate in-stasis ceilings...for certain types.
- //
- switch(type)
- {
- case fastCrushAndRaise:
- case crushAndRaise:
- P_ActivateInStasisCeiling(line);
- default:
- break;
- }
-
- while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
- {
- sec = §ors[secnum];
- if (sec->specialdata)
- continue;
-
- //
- // new door thinker
- //
- rtn = 1;
- ceiling = Z_Malloc (sizeof(*ceiling), PU_LEVSPEC, 0);
- P_AddThinker (&ceiling->thinker);
- sec->specialdata = ceiling;
- ceiling->thinker.function = T_MoveCeiling;
- ceiling->sector = sec;
- ceiling->crush = false;
- switch(type)
- {
- case fastCrushAndRaise:
- ceiling->crush = true;
- ceiling->topheight = sec->ceilingheight;
- ceiling->bottomheight = sec->floorheight + (8*FRACUNIT);
- ceiling->direction = -1;
- ceiling->speed = CEILSPEED * 2;
- break;
- case crushAndRaise:
- ceiling->crush = true;
- ceiling->topheight = sec->ceilingheight;
- case lowerAndCrush:
- case lowerToFloor:
- ceiling->bottomheight = sec->floorheight;
- if (type != lowerToFloor)
- ceiling->bottomheight += 8*FRACUNIT;
- ceiling->direction = -1;
- ceiling->speed = CEILSPEED;
- break;
- case raiseToHighest:
- ceiling->topheight = P_FindHighestCeilingSurrounding(sec);
- ceiling->direction = 1;
- ceiling->speed = CEILSPEED;
- break;
- }
-
- ceiling->tag = sec->tag;
- ceiling->type = type;
- P_AddActiveCeiling(ceiling);
- }
- return rtn;
+ int secnum, rtn;
+ sector_t *sec;
+ ceiling_t *ceiling;
+
+ secnum = -1;
+ rtn = 0;
+
+ //
+ // Reactivate in-stasis ceilings...for certain types.
+ //
+ switch (type)
+ {
+ case fastCrushAndRaise:
+ case crushAndRaise:
+ P_ActivateInStasisCeiling(line);
+ default:
+ break;
+ }
+
+ while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0)
+ {
+ sec = §ors[secnum];
+ if (sec->specialdata)
+ continue;
+
+ //
+ // new door thinker
+ //
+ rtn = 1;
+ ceiling = Z_Malloc(sizeof(*ceiling), PU_LEVSPEC, 0);
+ P_AddThinker(&ceiling->thinker);
+ sec->specialdata = ceiling;
+ ceiling->thinker.function = T_MoveCeiling;
+ ceiling->sector = sec;
+ ceiling->crush = false;
+ switch (type)
+ {
+ case fastCrushAndRaise:
+ ceiling->crush = true;
+ ceiling->topheight = sec->ceilingheight;
+ ceiling->bottomheight = sec->floorheight + (8 * FRACUNIT);
+ ceiling->direction = -1;
+ ceiling->speed = CEILSPEED * 2;
+ break;
+ case crushAndRaise:
+ ceiling->crush = true;
+ ceiling->topheight = sec->ceilingheight;
+ case lowerAndCrush:
+ case lowerToFloor:
+ ceiling->bottomheight = sec->floorheight;
+ if (type != lowerToFloor)
+ ceiling->bottomheight += 8 * FRACUNIT;
+ ceiling->direction = -1;
+ ceiling->speed = CEILSPEED;
+ break;
+ case raiseToHighest:
+ ceiling->topheight = P_FindHighestCeilingSurrounding(sec);
+ ceiling->direction = 1;
+ ceiling->speed = CEILSPEED;
+ break;
+ }
+
+ ceiling->tag = sec->tag;
+ ceiling->type = type;
+ P_AddActiveCeiling(ceiling);
+ }
+ return rtn;
}
//==================================================================
//
-// Add an active ceiling
+// Add an active ceiling
//
//==================================================================
-void P_AddActiveCeiling(ceiling_t *c)
+void P_AddActiveCeiling(ceiling_t * c)
{
- int i;
- for (i = 0; i < MAXCEILINGS;i++)
- if (activeceilings[i] == NULL)
- {
- activeceilings[i] = c;
- return;
- }
+ int i;
+ for (i = 0; i < MAXCEILINGS; i++)
+ if (activeceilings[i] == NULL)
+ {
+ activeceilings[i] = c;
+ return;
+ }
}
//==================================================================
//
-// Remove a ceiling's thinker
+// Remove a ceiling's thinker
//
//==================================================================
-void P_RemoveActiveCeiling(ceiling_t *c)
+void P_RemoveActiveCeiling(ceiling_t * c)
{
- int i;
-
- for (i = 0;i < MAXCEILINGS;i++)
- if (activeceilings[i] == c)
- {
- activeceilings[i]->sector->specialdata = NULL;
- P_RemoveThinker (&activeceilings[i]->thinker);
- activeceilings[i] = NULL;
- break;
- }
+ int i;
+
+ for (i = 0; i < MAXCEILINGS; i++)
+ if (activeceilings[i] == c)
+ {
+ activeceilings[i]->sector->specialdata = NULL;
+ P_RemoveThinker(&activeceilings[i]->thinker);
+ activeceilings[i] = NULL;
+ break;
+ }
}
//==================================================================
//
-// Restart a ceiling that's in-stasis
+// Restart a ceiling that's in-stasis
//
//==================================================================
-void P_ActivateInStasisCeiling(line_t *line)
+void P_ActivateInStasisCeiling(line_t * line)
{
- int i;
-
- for (i = 0;i < MAXCEILINGS;i++)
- if (activeceilings[i] && (activeceilings[i]->tag == line->tag) &&
- (activeceilings[i]->direction == 0))
- {
- activeceilings[i]->direction = activeceilings[i]->olddirection;
- activeceilings[i]->thinker.function = T_MoveCeiling;
- }
+ int i;
+
+ for (i = 0; i < MAXCEILINGS; i++)
+ if (activeceilings[i] && (activeceilings[i]->tag == line->tag) &&
+ (activeceilings[i]->direction == 0))
+ {
+ activeceilings[i]->direction = activeceilings[i]->olddirection;
+ activeceilings[i]->thinker.function = T_MoveCeiling;
+ }
}
//==================================================================
//
-// EV_CeilingCrushStop
-// Stop a ceiling from crushing!
+// EV_CeilingCrushStop
+// Stop a ceiling from crushing!
//
//==================================================================
-int EV_CeilingCrushStop(line_t *line)
+int EV_CeilingCrushStop(line_t * line)
{
- int i;
- int rtn;
-
- rtn = 0;
- for (i = 0;i < MAXCEILINGS;i++)
- if (activeceilings[i] && (activeceilings[i]->tag == line->tag) &&
- (activeceilings[i]->direction != 0))
- {
- activeceilings[i]->olddirection = activeceilings[i]->direction;
- activeceilings[i]->thinker.function = NULL;
- activeceilings[i]->direction = 0; // in-stasis
- rtn = 1;
- }
+ int i;
+ int rtn;
- return rtn;
+ rtn = 0;
+ for (i = 0; i < MAXCEILINGS; i++)
+ if (activeceilings[i] && (activeceilings[i]->tag == line->tag) &&
+ (activeceilings[i]->direction != 0))
+ {
+ activeceilings[i]->olddirection = activeceilings[i]->direction;
+ activeceilings[i]->thinker.function = NULL;
+ activeceilings[i]->direction = 0; // in-stasis
+ rtn = 1;
+ }
+
+ return rtn;
}
--- a/src/heretic/p_doors.c
+++ b/src/heretic/p_doors.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_doors.c
@@ -8,7 +30,7 @@
//==================================================================
//==================================================================
//
-// VERTICAL DOORS
+// VERTICAL DOORS
//
//==================================================================
//==================================================================
@@ -15,109 +37,110 @@
//==================================================================
//
-// T_VerticalDoor
+// T_VerticalDoor
//
//==================================================================
-void T_VerticalDoor(vldoor_t *door)
+void T_VerticalDoor(vldoor_t * door)
{
- result_e res;
+ result_e res;
- switch(door->direction)
- {
- case 0: // WAITING
- if(!--door->topcountdown)
- switch(door->type)
- {
- case normal:
- door->direction = -1; // time to go back down
- S_StartSound((mobj_t *)
- &door->sector->soundorg, sfx_doropn);
- break;
- case close30ThenOpen:
- door->direction = 1;
- S_StartSound((mobj_t *)
- &door->sector->soundorg, sfx_doropn);
- break;
- default:
- break;
- }
- break;
- case 2: // INITIAL WAIT
- if(!--door->topcountdown)
- {
- switch(door->type)
- {
- case raiseIn5Mins:
- door->direction = 1;
- door->type = normal;
- S_StartSound((mobj_t *)
- &door->sector->soundorg, sfx_doropn);
- break;
- default:
- break;
- }
- }
- break;
- case -1: // DOWN
- res = T_MovePlane(door->sector, door->speed,
- door->sector->floorheight, false, 1, door->direction);
- if(res == pastdest)
- {
- switch(door->type)
- {
- case normal:
- case close:
- door->sector->specialdata = NULL;
- P_RemoveThinker(&door->thinker); // unlink and free
- S_StartSound((mobj_t *)
- &door->sector->soundorg, sfx_dorcls);
- break;
- case close30ThenOpen:
- door->direction = 0;
- door->topcountdown = 35*30;
- break;
- default:
- break;
- }
- }
- else if(res == crushed)
- {
- switch(door->type)
- {
- case close: // DON'T GO BACK UP!
- break;
- default:
- door->direction = 1;
- S_StartSound((mobj_t *)
- &door->sector->soundorg,sfx_doropn);
- break;
- }
- }
- break;
- case 1: // UP
- res = T_MovePlane(door->sector, door->speed,
- door->topheight, false, 1, door->direction);
- if(res == pastdest)
- {
- switch(door->type)
- {
- case normal:
- door->direction = 0; // wait at top
- door->topcountdown = door->topwait;
- break;
- case close30ThenOpen:
- case open:
- door->sector->specialdata = NULL;
- P_RemoveThinker (&door->thinker); // unlink and free
- S_StopSound((mobj_t *)&door->sector->soundorg);
- break;
- default:
- break;
- }
- }
- break;
- }
-}
+ switch (door->direction)
+ {
+ case 0: // WAITING
+ if (!--door->topcountdown)
+ switch (door->type)
+ {
+ case normal:
+ door->direction = -1; // time to go back down
+ S_StartSound((mobj_t *)
+ & door->sector->soundorg, sfx_doropn);
+ break;
+ case close30ThenOpen:
+ door->direction = 1;
+ S_StartSound((mobj_t *)
+ & door->sector->soundorg, sfx_doropn);
+ break;
+ default:
+ break;
+ }
+ break;
+ case 2: // INITIAL WAIT
+ if (!--door->topcountdown)
+ {
+ switch (door->type)
+ {
+ case raiseIn5Mins:
+ door->direction = 1;
+ door->type = normal;
+ S_StartSound((mobj_t *)
+ & door->sector->soundorg, sfx_doropn);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case -1: // DOWN
+ res = T_MovePlane(door->sector, door->speed,
+ door->sector->floorheight, false, 1,
+ door->direction);
+ if (res == pastdest)
+ {
+ switch (door->type)
+ {
+ case normal:
+ case close:
+ door->sector->specialdata = NULL;
+ P_RemoveThinker(&door->thinker); // unlink and free
+ S_StartSound((mobj_t *)
+ & door->sector->soundorg, sfx_dorcls);
+ break;
+ case close30ThenOpen:
+ door->direction = 0;
+ door->topcountdown = 35 * 30;
+ break;
+ default:
+ break;
+ }
+ }
+ else if (res == crushed)
+ {
+ switch (door->type)
+ {
+ case close: // DON'T GO BACK UP!
+ break;
+ default:
+ door->direction = 1;
+ S_StartSound((mobj_t *)
+ & door->sector->soundorg, sfx_doropn);
+ break;
+ }
+ }
+ break;
+ case 1: // UP
+ res = T_MovePlane(door->sector, door->speed,
+ door->topheight, false, 1, door->direction);
+ if (res == pastdest)
+ {
+ switch (door->type)
+ {
+ case normal:
+ door->direction = 0; // wait at top
+ door->topcountdown = door->topwait;
+ break;
+ case close30ThenOpen:
+ case open:
+ door->sector->specialdata = NULL;
+ P_RemoveThinker(&door->thinker); // unlink and free
+ S_StopSound((mobj_t *) & door->sector->soundorg);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ }
+}
//----------------------------------------------------------------------------
//
@@ -127,242 +150,242 @@
//
//----------------------------------------------------------------------------
-int EV_DoDoor(line_t *line, vldoor_e type, fixed_t speed)
+int EV_DoDoor(line_t * line, vldoor_e type, fixed_t speed)
{
- int secnum;
- int retcode;
- sector_t *sec;
- vldoor_t *door;
+ int secnum;
+ int retcode;
+ sector_t *sec;
+ vldoor_t *door;
- secnum = -1;
- retcode = 0;
- while((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0)
- {
- sec = §ors[secnum];
- if(sec->specialdata)
- {
- continue;
- }
- // Add new door thinker
- retcode = 1;
- door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0);
- P_AddThinker(&door->thinker);
- sec->specialdata = door;
- door->thinker.function = T_VerticalDoor;
- door->sector = sec;
- switch(type)
- {
- case close:
- door->topheight = P_FindLowestCeilingSurrounding(sec);
- door->topheight -= 4*FRACUNIT;
- door->direction = -1;
- S_StartSound((mobj_t *)&door->sector->soundorg, sfx_doropn);
- break;
- case close30ThenOpen:
- door->topheight = sec->ceilingheight;
- door->direction = -1;
- S_StartSound((mobj_t *)&door->sector->soundorg, sfx_doropn);
- break;
- case normal:
- case open:
- door->direction = 1;
- door->topheight = P_FindLowestCeilingSurrounding(sec);
- door->topheight -= 4*FRACUNIT;
- if(door->topheight != sec->ceilingheight)
- {
- S_StartSound((mobj_t *)&door->sector->soundorg,
- sfx_doropn);
- }
- break;
- default:
- break;
- }
- door->type = type;
- door->speed = speed;
- door->topwait = VDOORWAIT;
- }
- return(retcode);
-}
+ secnum = -1;
+ retcode = 0;
+ while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0)
+ {
+ sec = §ors[secnum];
+ if (sec->specialdata)
+ {
+ continue;
+ }
+ // Add new door thinker
+ retcode = 1;
+ door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0);
+ P_AddThinker(&door->thinker);
+ sec->specialdata = door;
+ door->thinker.function = T_VerticalDoor;
+ door->sector = sec;
+ switch (type)
+ {
+ case close:
+ door->topheight = P_FindLowestCeilingSurrounding(sec);
+ door->topheight -= 4 * FRACUNIT;
+ door->direction = -1;
+ S_StartSound((mobj_t *) & door->sector->soundorg, sfx_doropn);
+ break;
+ case close30ThenOpen:
+ door->topheight = sec->ceilingheight;
+ door->direction = -1;
+ S_StartSound((mobj_t *) & door->sector->soundorg, sfx_doropn);
+ break;
+ case normal:
+ case open:
+ door->direction = 1;
+ door->topheight = P_FindLowestCeilingSurrounding(sec);
+ door->topheight -= 4 * FRACUNIT;
+ if (door->topheight != sec->ceilingheight)
+ {
+ S_StartSound((mobj_t *) & door->sector->soundorg,
+ sfx_doropn);
+ }
+ break;
+ default:
+ break;
+ }
+ door->type = type;
+ door->speed = speed;
+ door->topwait = VDOORWAIT;
+ }
+ return (retcode);
+}
//==================================================================
//
-// EV_VerticalDoor : open a door manually, no tag value
+// EV_VerticalDoor : open a door manually, no tag value
//
//==================================================================
-void EV_VerticalDoor(line_t *line, mobj_t *thing)
+void EV_VerticalDoor(line_t * line, mobj_t * thing)
{
- player_t *player;
- int secnum;
- sector_t *sec;
- vldoor_t *door;
- int side;
-
- side = 0; // only front sides can be used
+ player_t *player;
+ int secnum;
+ sector_t *sec;
+ vldoor_t *door;
+ int side;
+
+ side = 0; // only front sides can be used
//
-// Check for locks
+// Check for locks
//
- player = thing->player;
- switch(line->special)
- {
- case 26: // Blue Lock
- case 32:
- if(!player)
- {
- return;
- }
- if(!player->keys[key_blue])
- {
- P_SetMessage(player, TXT_NEEDBLUEKEY, false);
- S_StartSound(NULL, sfx_plroof);
- return;
- }
- break;
- case 27: // Yellow Lock
- case 34:
- if(!player)
- {
- return;
- }
- if(!player->keys[key_yellow])
- {
- P_SetMessage(player, TXT_NEEDYELLOWKEY, false);
- S_StartSound(NULL, sfx_plroof);
- return;
- }
- break;
- case 28: // Green Lock
- case 33:
- if(!player)
- {
- return;
- }
- if(!player->keys[key_green])
- {
- P_SetMessage(player, TXT_NEEDGREENKEY, false);
- S_StartSound(NULL, sfx_plroof);
- return;
- }
- break;
- }
+ player = thing->player;
+ switch (line->special)
+ {
+ case 26: // Blue Lock
+ case 32:
+ if (!player)
+ {
+ return;
+ }
+ if (!player->keys[key_blue])
+ {
+ P_SetMessage(player, TXT_NEEDBLUEKEY, false);
+ S_StartSound(NULL, sfx_plroof);
+ return;
+ }
+ break;
+ case 27: // Yellow Lock
+ case 34:
+ if (!player)
+ {
+ return;
+ }
+ if (!player->keys[key_yellow])
+ {
+ P_SetMessage(player, TXT_NEEDYELLOWKEY, false);
+ S_StartSound(NULL, sfx_plroof);
+ return;
+ }
+ break;
+ case 28: // Green Lock
+ case 33:
+ if (!player)
+ {
+ return;
+ }
+ if (!player->keys[key_green])
+ {
+ P_SetMessage(player, TXT_NEEDGREENKEY, false);
+ S_StartSound(NULL, sfx_plroof);
+ return;
+ }
+ break;
+ }
- // if the sector has an active thinker, use it
- sec = sides[line->sidenum[side^1]].sector;
- secnum = sec-sectors;
- if(sec->specialdata)
- {
- door = sec->specialdata;
- switch(line->special)
- {
- case 1: // ONLY FOR "RAISE" DOORS, NOT "OPEN"s
- case 26:
- case 27:
- case 28:
- if(door->direction == -1)
- {
- door->direction = 1; // go back up
- }
- else
- {
- if(!thing->player)
- { // Monsters don't close doors
- return;
- }
- door->direction = -1; // start going down immediately
- }
- return;
- }
- }
+ // if the sector has an active thinker, use it
+ sec = sides[line->sidenum[side ^ 1]].sector;
+ secnum = sec - sectors;
+ if (sec->specialdata)
+ {
+ door = sec->specialdata;
+ switch (line->special)
+ {
+ case 1: // ONLY FOR "RAISE" DOORS, NOT "OPEN"s
+ case 26:
+ case 27:
+ case 28:
+ if (door->direction == -1)
+ {
+ door->direction = 1; // go back up
+ }
+ else
+ {
+ if (!thing->player)
+ { // Monsters don't close doors
+ return;
+ }
+ door->direction = -1; // start going down immediately
+ }
+ return;
+ }
+ }
- // for proper sound
- switch(line->special)
- {
- case 1: // NORMAL DOOR SOUND
- case 31:
- S_StartSound((mobj_t *)&sec->soundorg, sfx_doropn);
- //S_StartSound((mobj_t *)&sec->soundorg, sfx_dormov);
- break;
- default: // LOCKED DOOR SOUND
- S_StartSound((mobj_t *)&sec->soundorg, sfx_doropn);
- //S_StartSound((mobj_t *)&sec->soundorg, sfx_dormov);
- break;
- }
+ // for proper sound
+ switch (line->special)
+ {
+ case 1: // NORMAL DOOR SOUND
+ case 31:
+ S_StartSound((mobj_t *) & sec->soundorg, sfx_doropn);
+ //S_StartSound((mobj_t *)&sec->soundorg, sfx_dormov);
+ break;
+ default: // LOCKED DOOR SOUND
+ S_StartSound((mobj_t *) & sec->soundorg, sfx_doropn);
+ //S_StartSound((mobj_t *)&sec->soundorg, sfx_dormov);
+ break;
+ }
- //
- // new door thinker
- //
- door = Z_Malloc (sizeof(*door), PU_LEVSPEC, 0);
- P_AddThinker(&door->thinker);
- sec->specialdata = door;
- door->thinker.function = T_VerticalDoor;
- door->sector = sec;
- door->direction = 1;
- switch(line->special)
- {
- case 1:
- case 26:
- case 27:
- case 28:
- door->type = normal;
- break;
- case 31:
- case 32:
- case 33:
- case 34:
- door->type = open;
- line->special = 0;
- break;
- }
- door->speed = VDOORSPEED;
- door->topwait = VDOORWAIT;
-
- //
- // find the top and bottom of the movement range
- //
- door->topheight = P_FindLowestCeilingSurrounding(sec);
- door->topheight -= 4*FRACUNIT;
+ //
+ // new door thinker
+ //
+ door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0);
+ P_AddThinker(&door->thinker);
+ sec->specialdata = door;
+ door->thinker.function = T_VerticalDoor;
+ door->sector = sec;
+ door->direction = 1;
+ switch (line->special)
+ {
+ case 1:
+ case 26:
+ case 27:
+ case 28:
+ door->type = normal;
+ break;
+ case 31:
+ case 32:
+ case 33:
+ case 34:
+ door->type = open;
+ line->special = 0;
+ break;
+ }
+ door->speed = VDOORSPEED;
+ door->topwait = VDOORWAIT;
+
+ //
+ // find the top and bottom of the movement range
+ //
+ door->topheight = P_FindLowestCeilingSurrounding(sec);
+ door->topheight -= 4 * FRACUNIT;
}
//==================================================================
//
-// Spawn a door that closes after 30 seconds
+// Spawn a door that closes after 30 seconds
//
//==================================================================
-void P_SpawnDoorCloseIn30(sector_t *sec)
+void P_SpawnDoorCloseIn30(sector_t * sec)
{
- vldoor_t *door;
+ vldoor_t *door;
- door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0);
- P_AddThinker(&door->thinker);
- sec->specialdata = door;
- sec->special = 0;
- door->thinker.function = T_VerticalDoor;
- door->sector = sec;
- door->direction = 0;
- door->type = normal;
- door->speed = VDOORSPEED;
- door->topcountdown = 30*35;
+ door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0);
+ P_AddThinker(&door->thinker);
+ sec->specialdata = door;
+ sec->special = 0;
+ door->thinker.function = T_VerticalDoor;
+ door->sector = sec;
+ door->direction = 0;
+ door->type = normal;
+ door->speed = VDOORSPEED;
+ door->topcountdown = 30 * 35;
}
//==================================================================
//
-// Spawn a door that opens after 5 minutes
+// Spawn a door that opens after 5 minutes
//
//==================================================================
-void P_SpawnDoorRaiseIn5Mins(sector_t *sec, int secnum)
+void P_SpawnDoorRaiseIn5Mins(sector_t * sec, int secnum)
{
- vldoor_t *door;
+ vldoor_t *door;
- door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0);
- P_AddThinker(&door->thinker);
- sec->specialdata = door;
- sec->special = 0;
- door->thinker.function = T_VerticalDoor;
- door->sector = sec;
- door->direction = 2;
- door->type = raiseIn5Mins;
- door->speed = VDOORSPEED;
- door->topheight = P_FindLowestCeilingSurrounding(sec);
- door->topheight -= 4*FRACUNIT;
- door->topwait = VDOORWAIT;
- door->topcountdown = 5*60*35;
+ door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0);
+ P_AddThinker(&door->thinker);
+ sec->specialdata = door;
+ sec->special = 0;
+ door->thinker.function = T_VerticalDoor;
+ door->sector = sec;
+ door->direction = 2;
+ door->type = raiseIn5Mins;
+ door->speed = VDOORSPEED;
+ door->topheight = P_FindLowestCeilingSurrounding(sec);
+ door->topheight -= 4 * FRACUNIT;
+ door->topwait = VDOORWAIT;
+ door->topcountdown = 5 * 60 * 35;
}
--- a/src/heretic/p_enemy.c
+++ b/src/heretic/p_enemy.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_enemy.c
@@ -13,9 +35,9 @@
typedef struct
{
- fixed_t x;
- fixed_t y;
- angle_t angle;
+ fixed_t x;
+ fixed_t y;
+ angle_t angle;
} BossSpot_t;
// Private Data
@@ -33,7 +55,7 @@
void P_InitMonsters(void)
{
- BossSpotCount = 0;
+ BossSpotCount = 0;
}
//----------------------------------------------------------------------------
@@ -44,14 +66,14 @@
void P_AddBossSpot(fixed_t x, fixed_t y, angle_t angle)
{
- if(BossSpotCount == MAX_BOSS_SPOTS)
- {
- I_Error("Too many boss spots.");
- }
- BossSpots[BossSpotCount].x = x;
- BossSpots[BossSpotCount].y = y;
- BossSpots[BossSpotCount].angle = angle;
- BossSpotCount++;
+ if (BossSpotCount == MAX_BOSS_SPOTS)
+ {
+ I_Error("Too many boss spots.");
+ }
+ BossSpots[BossSpotCount].x = x;
+ BossSpots[BossSpotCount].y = y;
+ BossSpots[BossSpotCount].angle = angle;
+ BossSpotCount++;
}
//----------------------------------------------------------------------------
@@ -62,52 +84,53 @@
mobj_t *soundtarget;
-void P_RecursiveSound(sector_t *sec, int soundblocks)
+void P_RecursiveSound(sector_t * sec, int soundblocks)
{
- int i;
- line_t *check;
- sector_t *other;
+ int i;
+ line_t *check;
+ sector_t *other;
- // Wake up all monsters in this sector
- if(sec->validcount == validcount && sec->soundtraversed <= soundblocks+1)
- { // Already flooded
- return;
- }
- sec->validcount = validcount;
- sec->soundtraversed = soundblocks+1;
- sec->soundtarget = soundtarget;
- for(i = 0; i < sec->linecount; i++)
- {
- check = sec->lines[i];
- if(!(check->flags&ML_TWOSIDED))
- {
- continue;
- }
- P_LineOpening(check);
- if(openrange <= 0)
- { // Closed door
- continue;
- }
- if(sides[check->sidenum[0]].sector == sec)
- {
- other = sides[check->sidenum[1]].sector;
- }
- else
- {
- other = sides[check->sidenum[0]].sector;
- }
- if(check->flags&ML_SOUNDBLOCK)
- {
- if(!soundblocks)
- {
- P_RecursiveSound(other, 1);
- }
- }
- else
- {
- P_RecursiveSound(other, soundblocks);
- }
- }
+ // Wake up all monsters in this sector
+ if (sec->validcount == validcount
+ && sec->soundtraversed <= soundblocks + 1)
+ { // Already flooded
+ return;
+ }
+ sec->validcount = validcount;
+ sec->soundtraversed = soundblocks + 1;
+ sec->soundtarget = soundtarget;
+ for (i = 0; i < sec->linecount; i++)
+ {
+ check = sec->lines[i];
+ if (!(check->flags & ML_TWOSIDED))
+ {
+ continue;
+ }
+ P_LineOpening(check);
+ if (openrange <= 0)
+ { // Closed door
+ continue;
+ }
+ if (sides[check->sidenum[0]].sector == sec)
+ {
+ other = sides[check->sidenum[1]].sector;
+ }
+ else
+ {
+ other = sides[check->sidenum[0]].sector;
+ }
+ if (check->flags & ML_SOUNDBLOCK)
+ {
+ if (!soundblocks)
+ {
+ P_RecursiveSound(other, 1);
+ }
+ }
+ else
+ {
+ P_RecursiveSound(other, soundblocks);
+ }
+ }
}
//----------------------------------------------------------------------------
@@ -119,11 +142,11 @@
//
//----------------------------------------------------------------------------
-void P_NoiseAlert(mobj_t *target, mobj_t *emmiter)
+void P_NoiseAlert(mobj_t * target, mobj_t * emmiter)
{
- soundtarget = target;
- validcount++;
- P_RecursiveSound(emmiter->subsector->sector, 0);
+ soundtarget = target;
+ validcount++;
+ P_RecursiveSound(emmiter->subsector->sector, 0);
}
//----------------------------------------------------------------------------
@@ -132,34 +155,34 @@
//
//----------------------------------------------------------------------------
-boolean P_CheckMeleeRange(mobj_t *actor)
+boolean P_CheckMeleeRange(mobj_t * actor)
{
- mobj_t *mo;
- fixed_t dist;
+ mobj_t *mo;
+ fixed_t dist;
- if(!actor->target)
- {
- return(false);
- }
- mo = actor->target;
- dist = P_AproxDistance(mo->x-actor->x, mo->y-actor->y);
- if(dist >= MELEERANGE)
- {
- return(false);
- }
- if(!P_CheckSight(actor, mo))
- {
- return(false);
- }
- if(mo->z > actor->z+actor->height)
- { // Target is higher than the attacker
- return(false);
- }
- else if(actor->z > mo->z+mo->height)
- { // Attacker is higher
- return(false);
- }
- return(true);
+ if (!actor->target)
+ {
+ return (false);
+ }
+ mo = actor->target;
+ dist = P_AproxDistance(mo->x - actor->x, mo->y - actor->y);
+ if (dist >= MELEERANGE)
+ {
+ return (false);
+ }
+ if (!P_CheckSight(actor, mo))
+ {
+ return (false);
+ }
+ if (mo->z > actor->z + actor->height)
+ { // Target is higher than the attacker
+ return (false);
+ }
+ else if (actor->z > mo->z + mo->height)
+ { // Attacker is higher
+ return (false);
+ }
+ return (true);
}
//----------------------------------------------------------------------------
@@ -168,42 +191,42 @@
//
//----------------------------------------------------------------------------
-boolean P_CheckMissileRange(mobj_t *actor)
+boolean P_CheckMissileRange(mobj_t * actor)
{
- fixed_t dist;
+ fixed_t dist;
- if(!P_CheckSight(actor, actor->target))
- {
- return(false);
- }
- if(actor->flags&MF_JUSTHIT)
- { // The target just hit the enemy, so fight back!
- actor->flags &= ~MF_JUSTHIT;
- return(true);
- }
- if(actor->reactiontime)
- { // Don't attack yet
- return(false);
- }
- dist = (P_AproxDistance(actor->x-actor->target->x,
- actor->y-actor->target->y)>>FRACBITS)-64;
- if(!actor->info->meleestate)
- { // No melee attack, so fire more frequently
- dist -= 128;
- }
- if(actor->type == MT_IMP)
- { // Imp's fly attack from far away
- dist >>= 1;
- }
- if(dist > 200)
- {
- dist = 200;
- }
- if(P_Random() < dist)
- {
- return(false);
- }
- return(true);
+ if (!P_CheckSight(actor, actor->target))
+ {
+ return (false);
+ }
+ if (actor->flags & MF_JUSTHIT)
+ { // The target just hit the enemy, so fight back!
+ actor->flags &= ~MF_JUSTHIT;
+ return (true);
+ }
+ if (actor->reactiontime)
+ { // Don't attack yet
+ return (false);
+ }
+ dist = (P_AproxDistance(actor->x - actor->target->x,
+ actor->y - actor->target->y) >> FRACBITS) - 64;
+ if (!actor->info->meleestate)
+ { // No melee attack, so fire more frequently
+ dist -= 128;
+ }
+ if (actor->type == MT_IMP)
+ { // Imp's fly attack from far away
+ dist >>= 1;
+ }
+ if (dist > 200)
+ {
+ dist = 200;
+ }
+ if (P_Random() < dist)
+ {
+ return (false);
+ }
+ return (true);
}
/*
@@ -216,70 +239,72 @@
================
*/
-fixed_t xspeed[8] = {FRACUNIT,47000,0,-47000,-FRACUNIT,-47000,0,47000};
-fixed_t yspeed[8] = {0,47000,FRACUNIT,47000,0,-47000,-FRACUNIT,-47000};
+fixed_t xspeed[8] =
+ { FRACUNIT, 47000, 0, -47000, -FRACUNIT, -47000, 0, 47000 };
+fixed_t yspeed[8] =
+ { 0, 47000, FRACUNIT, 47000, 0, -47000, -FRACUNIT, -47000 };
#define MAXSPECIALCROSS 8
-extern line_t *spechit[MAXSPECIALCROSS];
-extern int numspechit;
+extern line_t *spechit[MAXSPECIALCROSS];
+extern int numspechit;
-boolean P_Move(mobj_t *actor)
+boolean P_Move(mobj_t * actor)
{
- fixed_t tryx, tryy;
- line_t *ld;
- boolean good;
+ fixed_t tryx, tryy;
+ line_t *ld;
+ boolean good;
- if(actor->movedir == DI_NODIR)
- {
- return(false);
- }
- tryx = actor->x+actor->info->speed*xspeed[actor->movedir];
- tryy = actor->y+actor->info->speed*yspeed[actor->movedir];
- if(!P_TryMove(actor, tryx, tryy))
- { // open any specials
- if(actor->flags&MF_FLOAT && floatok)
- { // must adjust height
- if(actor->z < tmfloorz)
- {
- actor->z += FLOATSPEED;
- }
- else
- {
- actor->z -= FLOATSPEED;
- }
- actor->flags |= MF_INFLOAT;
- return(true);
- }
- if(!numspechit)
- {
- return false;
- }
- actor->movedir = DI_NODIR;
- good = false;
- while(numspechit--)
- {
- ld = spechit[numspechit];
- // if the special isn't a door that can be opened, return false
- if(P_UseSpecialLine(actor, ld))
- {
- good = true;
- }
- }
- return(good);
- }
- else
- {
- actor->flags &= ~MF_INFLOAT;
- }
- if(!(actor->flags&MF_FLOAT))
- {
- if(actor->z > actor->floorz)
- {
- P_HitFloor(actor);
- }
- actor->z = actor->floorz;
- }
- return(true);
+ if (actor->movedir == DI_NODIR)
+ {
+ return (false);
+ }
+ tryx = actor->x + actor->info->speed * xspeed[actor->movedir];
+ tryy = actor->y + actor->info->speed * yspeed[actor->movedir];
+ if (!P_TryMove(actor, tryx, tryy))
+ { // open any specials
+ if (actor->flags & MF_FLOAT && floatok)
+ { // must adjust height
+ if (actor->z < tmfloorz)
+ {
+ actor->z += FLOATSPEED;
+ }
+ else
+ {
+ actor->z -= FLOATSPEED;
+ }
+ actor->flags |= MF_INFLOAT;
+ return (true);
+ }
+ if (!numspechit)
+ {
+ return false;
+ }
+ actor->movedir = DI_NODIR;
+ good = false;
+ while (numspechit--)
+ {
+ ld = spechit[numspechit];
+ // if the special isn't a door that can be opened, return false
+ if (P_UseSpecialLine(actor, ld))
+ {
+ good = true;
+ }
+ }
+ return (good);
+ }
+ else
+ {
+ actor->flags &= ~MF_INFLOAT;
+ }
+ if (!(actor->flags & MF_FLOAT))
+ {
+ if (actor->z > actor->floorz)
+ {
+ P_HitFloor(actor);
+ }
+ actor->z = actor->floorz;
+ }
+ return (true);
}
//----------------------------------------------------------------------------
@@ -293,14 +318,14 @@
//
//----------------------------------------------------------------------------
-boolean P_TryWalk(mobj_t *actor)
+boolean P_TryWalk(mobj_t * actor)
{
- if(!P_Move(actor))
- {
- return(false);
- }
- actor->movecount = P_Random()&15;
- return(true);
+ if (!P_Move(actor))
+ {
+ return (false);
+ }
+ actor->movecount = P_Random() & 15;
+ return (true);
}
/*
@@ -312,115 +337,117 @@
*/
dirtype_t opposite[] =
-{DI_WEST, DI_SOUTHWEST, DI_SOUTH, DI_SOUTHEAST, DI_EAST, DI_NORTHEAST,
-DI_NORTH, DI_NORTHWEST, DI_NODIR};
+ { DI_WEST, DI_SOUTHWEST, DI_SOUTH, DI_SOUTHEAST, DI_EAST, DI_NORTHEAST,
+ DI_NORTH, DI_NORTHWEST, DI_NODIR
+};
-dirtype_t diags[] = {DI_NORTHWEST,DI_NORTHEAST,DI_SOUTHWEST,DI_SOUTHEAST};
+dirtype_t diags[] =
+ { DI_NORTHWEST, DI_NORTHEAST, DI_SOUTHWEST, DI_SOUTHEAST };
-void P_NewChaseDir (mobj_t *actor)
+void P_NewChaseDir(mobj_t * actor)
{
- fixed_t deltax,deltay;
- dirtype_t d[3];
- dirtype_t tdir, olddir, turnaround;
+ fixed_t deltax, deltay;
+ dirtype_t d[3];
+ dirtype_t tdir, olddir, turnaround;
- if (!actor->target)
- I_Error ("P_NewChaseDir: called with no target");
-
- olddir = actor->movedir;
- turnaround=opposite[olddir];
+ if (!actor->target)
+ I_Error("P_NewChaseDir: called with no target");
- deltax = actor->target->x - actor->x;
- deltay = actor->target->y - actor->y;
- if (deltax>10*FRACUNIT)
- d[1]= DI_EAST;
- else if (deltax<-10*FRACUNIT)
- d[1]= DI_WEST;
- else
- d[1]=DI_NODIR;
- if (deltay<-10*FRACUNIT)
- d[2]= DI_SOUTH;
- else if (deltay>10*FRACUNIT)
- d[2]= DI_NORTH;
- else
- d[2]=DI_NODIR;
+ olddir = actor->movedir;
+ turnaround = opposite[olddir];
+ deltax = actor->target->x - actor->x;
+ deltay = actor->target->y - actor->y;
+ if (deltax > 10 * FRACUNIT)
+ d[1] = DI_EAST;
+ else if (deltax < -10 * FRACUNIT)
+ d[1] = DI_WEST;
+ else
+ d[1] = DI_NODIR;
+ if (deltay < -10 * FRACUNIT)
+ d[2] = DI_SOUTH;
+ else if (deltay > 10 * FRACUNIT)
+ d[2] = DI_NORTH;
+ else
+ d[2] = DI_NODIR;
+
// try direct route
- if (d[1] != DI_NODIR && d[2] != DI_NODIR)
- {
- actor->movedir = diags[((deltay<0)<<1)+(deltax>0)];
- if (actor->movedir != turnaround && P_TryWalk(actor))
- return;
- }
+ if (d[1] != DI_NODIR && d[2] != DI_NODIR)
+ {
+ actor->movedir = diags[((deltay < 0) << 1) + (deltax > 0)];
+ if (actor->movedir != turnaround && P_TryWalk(actor))
+ return;
+ }
// try other directions
- if (P_Random() > 200 || abs(deltay)>abs(deltax))
- {
- tdir=d[1];
- d[1]=d[2];
- d[2]=tdir;
- }
+ if (P_Random() > 200 || abs(deltay) > abs(deltax))
+ {
+ tdir = d[1];
+ d[1] = d[2];
+ d[2] = tdir;
+ }
- if (d[1]==turnaround)
- d[1]=DI_NODIR;
- if (d[2]==turnaround)
- d[2]=DI_NODIR;
-
- if (d[1]!=DI_NODIR)
- {
- actor->movedir = d[1];
- if (P_TryWalk(actor))
- return; /*either moved forward or attacked*/
- }
+ if (d[1] == turnaround)
+ d[1] = DI_NODIR;
+ if (d[2] == turnaround)
+ d[2] = DI_NODIR;
- if (d[2]!=DI_NODIR)
- {
- actor->movedir =d[2];
- if (P_TryWalk(actor))
- return;
- }
+ if (d[1] != DI_NODIR)
+ {
+ actor->movedir = d[1];
+ if (P_TryWalk(actor))
+ return; /*either moved forward or attacked */
+ }
+ if (d[2] != DI_NODIR)
+ {
+ actor->movedir = d[2];
+ if (P_TryWalk(actor))
+ return;
+ }
+
/* there is no direct path to the player, so pick another direction */
- if (olddir!=DI_NODIR)
- {
- actor->movedir =olddir;
- if (P_TryWalk(actor))
- return;
- }
+ if (olddir != DI_NODIR)
+ {
+ actor->movedir = olddir;
+ if (P_TryWalk(actor))
+ return;
+ }
- if (P_Random()&1) /*randomly determine direction of search*/
- {
- for (tdir=DI_EAST ; tdir<=DI_SOUTHEAST ; tdir++)
- {
- if (tdir!=turnaround)
- {
- actor->movedir =tdir;
- if ( P_TryWalk(actor) )
- return;
- }
- }
- }
- else
- {
- for (tdir=DI_SOUTHEAST ; tdir >= DI_EAST;tdir--)
- {
- if (tdir!=turnaround)
- {
- actor->movedir =tdir;
- if ( P_TryWalk(actor) )
- return;
- }
- }
- }
+ if (P_Random() & 1) /*randomly determine direction of search */
+ {
+ for (tdir = DI_EAST; tdir <= DI_SOUTHEAST; tdir++)
+ {
+ if (tdir != turnaround)
+ {
+ actor->movedir = tdir;
+ if (P_TryWalk(actor))
+ return;
+ }
+ }
+ }
+ else
+ {
+ for (tdir = DI_SOUTHEAST; tdir >= DI_EAST; tdir--)
+ {
+ if (tdir != turnaround)
+ {
+ actor->movedir = tdir;
+ if (P_TryWalk(actor))
+ return;
+ }
+ }
+ }
- if (turnaround != DI_NODIR)
- {
- actor->movedir =turnaround;
- if ( P_TryWalk(actor) )
- return;
- }
+ if (turnaround != DI_NODIR)
+ {
+ actor->movedir = turnaround;
+ if (P_TryWalk(actor))
+ return;
+ }
- actor->movedir = DI_NODIR; // can't move
+ actor->movedir = DI_NODIR; // can't move
}
//---------------------------------------------------------------------------
@@ -432,50 +459,50 @@
#define MONS_LOOK_RANGE (20*64*FRACUNIT)
#define MONS_LOOK_LIMIT 64
-boolean P_LookForMonsters(mobj_t *actor)
+boolean P_LookForMonsters(mobj_t * actor)
{
- int count;
- mobj_t *mo;
- thinker_t *think;
+ int count;
+ mobj_t *mo;
+ thinker_t *think;
- if(!P_CheckSight(players[0].mo, actor))
- { // Player can't see monster
- return(false);
- }
- count = 0;
- for(think = thinkercap.next; think != &thinkercap; think = think->next)
- {
- if(think->function != P_MobjThinker)
- { // Not a mobj thinker
- continue;
- }
- mo = (mobj_t *)think;
- if(!(mo->flags&MF_COUNTKILL) || (mo == actor) || (mo->health <= 0))
- { // Not a valid monster
- continue;
- }
- if(P_AproxDistance(actor->x-mo->x, actor->y-mo->y)
- > MONS_LOOK_RANGE)
- { // Out of range
- continue;
- }
- if(P_Random() < 16)
- { // Skip
- continue;
- }
- if(count++ > MONS_LOOK_LIMIT)
- { // Stop searching
- return(false);
- }
- if(!P_CheckSight(actor, mo))
- { // Out of sight
- continue;
- }
- // Found a target monster
- actor->target = mo;
- return(true);
- }
- return(false);
+ if (!P_CheckSight(players[0].mo, actor))
+ { // Player can't see monster
+ return (false);
+ }
+ count = 0;
+ for (think = thinkercap.next; think != &thinkercap; think = think->next)
+ {
+ if (think->function != P_MobjThinker)
+ { // Not a mobj thinker
+ continue;
+ }
+ mo = (mobj_t *) think;
+ if (!(mo->flags & MF_COUNTKILL) || (mo == actor) || (mo->health <= 0))
+ { // Not a valid monster
+ continue;
+ }
+ if (P_AproxDistance(actor->x - mo->x, actor->y - mo->y)
+ > MONS_LOOK_RANGE)
+ { // Out of range
+ continue;
+ }
+ if (P_Random() < 16)
+ { // Skip
+ continue;
+ }
+ if (count++ > MONS_LOOK_LIMIT)
+ { // Stop searching
+ return (false);
+ }
+ if (!P_CheckSight(actor, mo))
+ { // Out of sight
+ continue;
+ }
+ // Found a target monster
+ actor->target = mo;
+ return (true);
+ }
+ return (false);
}
/*
@@ -488,67 +515,67 @@
================
*/
-boolean P_LookForPlayers(mobj_t *actor, boolean allaround)
+boolean P_LookForPlayers(mobj_t * actor, boolean allaround)
{
- int c;
- int stop;
- player_t *player;
- sector_t *sector;
- angle_t an;
- fixed_t dist;
+ int c;
+ int stop;
+ player_t *player;
+ sector_t *sector;
+ angle_t an;
+ fixed_t dist;
- if(!netgame && players[0].health <= 0)
- { // Single player game and player is dead, look for monsters
- return(P_LookForMonsters(actor));
- }
- sector = actor->subsector->sector;
- c = 0;
- stop = (actor->lastlook-1)&3;
- for( ; ; actor->lastlook = (actor->lastlook+1)&3 )
- {
- if (!playeringame[actor->lastlook])
- continue;
-
- if (c++ == 2 || actor->lastlook == stop)
- return false; // done looking
+ if (!netgame && players[0].health <= 0)
+ { // Single player game and player is dead, look for monsters
+ return (P_LookForMonsters(actor));
+ }
+ sector = actor->subsector->sector;
+ c = 0;
+ stop = (actor->lastlook - 1) & 3;
+ for (;; actor->lastlook = (actor->lastlook + 1) & 3)
+ {
+ if (!playeringame[actor->lastlook])
+ continue;
- player = &players[actor->lastlook];
- if (player->health <= 0)
- continue; // dead
- if (!P_CheckSight (actor, player->mo))
- continue; // out of sight
-
- if (!allaround)
- {
- an = R_PointToAngle2 (actor->x, actor->y,
- player->mo->x, player->mo->y) - actor->angle;
- if (an > ANG90 && an < ANG270)
- {
- dist = P_AproxDistance (player->mo->x - actor->x,
- player->mo->y - actor->y);
- // if real close, react anyway
- if (dist > MELEERANGE)
- continue; // behind back
- }
- }
- if(player->mo->flags&MF_SHADOW)
- { // Player is invisible
- if((P_AproxDistance(player->mo->x-actor->x,
- player->mo->y-actor->y) > 2*MELEERANGE)
- && P_AproxDistance(player->mo->momx, player->mo->momy)
- < 5*FRACUNIT)
- { // Player is sneaking - can't detect
- return(false);
- }
- if(P_Random() < 225)
- { // Player isn't sneaking, but still didn't detect
- return(false);
- }
- }
- actor->target = player->mo;
- return(true);
- }
- return(false);
+ if (c++ == 2 || actor->lastlook == stop)
+ return false; // done looking
+
+ player = &players[actor->lastlook];
+ if (player->health <= 0)
+ continue; // dead
+ if (!P_CheckSight(actor, player->mo))
+ continue; // out of sight
+
+ if (!allaround)
+ {
+ an = R_PointToAngle2(actor->x, actor->y,
+ player->mo->x, player->mo->y) - actor->angle;
+ if (an > ANG90 && an < ANG270)
+ {
+ dist = P_AproxDistance(player->mo->x - actor->x,
+ player->mo->y - actor->y);
+ // if real close, react anyway
+ if (dist > MELEERANGE)
+ continue; // behind back
+ }
+ }
+ if (player->mo->flags & MF_SHADOW)
+ { // Player is invisible
+ if ((P_AproxDistance(player->mo->x - actor->x,
+ player->mo->y - actor->y) > 2 * MELEERANGE)
+ && P_AproxDistance(player->mo->momx, player->mo->momy)
+ < 5 * FRACUNIT)
+ { // Player is sneaking - can't detect
+ return (false);
+ }
+ if (P_Random() < 225)
+ { // Player isn't sneaking, but still didn't detect
+ return (false);
+ }
+ }
+ actor->target = player->mo;
+ return (true);
+ }
+ return (false);
}
/*
@@ -569,34 +596,34 @@
==============
*/
-void A_Look (mobj_t *actor)
+void A_Look(mobj_t * actor)
{
- mobj_t *targ;
-
- actor->threshold = 0; // any shot will wake up
- targ = actor->subsector->sector->soundtarget;
- if (targ && (targ->flags & MF_SHOOTABLE) )
- {
- actor->target = targ;
- if ( actor->flags & MF_AMBUSH )
- {
- if (P_CheckSight (actor, actor->target))
- goto seeyou;
- }
- else
- goto seeyou;
- }
-
-
- if (!P_LookForPlayers (actor, false) )
- return;
-
+ mobj_t *targ;
+
+ actor->threshold = 0; // any shot will wake up
+ targ = actor->subsector->sector->soundtarget;
+ if (targ && (targ->flags & MF_SHOOTABLE))
+ {
+ actor->target = targ;
+ if (actor->flags & MF_AMBUSH)
+ {
+ if (P_CheckSight(actor, actor->target))
+ goto seeyou;
+ }
+ else
+ goto seeyou;
+ }
+
+
+ if (!P_LookForPlayers(actor, false))
+ return;
+
// go into chase state
-seeyou:
- if (actor->info->seesound)
- {
- int sound;
-
+ seeyou:
+ if (actor->info->seesound)
+ {
+ int sound;
+
/*
switch (actor->info->seesound)
{
@@ -614,17 +641,17 @@
break;
}
*/
- sound = actor->info->seesound;
- if(actor->flags2&MF2_BOSS)
- { // Full volume
- S_StartSound(NULL, sound);
- }
- else
- {
- S_StartSound(actor, sound);
- }
- }
- P_SetMobjState(actor, actor->info->seestate);
+ sound = actor->info->seesound;
+ if (actor->flags2 & MF2_BOSS)
+ { // Full volume
+ S_StartSound(NULL, sound);
+ }
+ else
+ {
+ S_StartSound(actor, sound);
+ }
+ }
+ P_SetMobjState(actor, actor->info->seestate);
}
@@ -638,129 +665,129 @@
==============
*/
-void A_Chase(mobj_t *actor)
+void A_Chase(mobj_t * actor)
{
- int delta;
+ int delta;
- if(actor->reactiontime)
- {
- actor->reactiontime--;
- }
+ if (actor->reactiontime)
+ {
+ actor->reactiontime--;
+ }
- // Modify target threshold
- if(actor->threshold)
- {
- actor->threshold--;
- }
+ // Modify target threshold
+ if (actor->threshold)
+ {
+ actor->threshold--;
+ }
- if(gameskill == sk_nightmare)
- { // Monsters move faster in nightmare mode
- actor->tics -= actor->tics/2;
- if(actor->tics < 3)
- {
- actor->tics = 3;
- }
- }
+ if (gameskill == sk_nightmare)
+ { // Monsters move faster in nightmare mode
+ actor->tics -= actor->tics / 2;
+ if (actor->tics < 3)
+ {
+ actor->tics = 3;
+ }
+ }
//
// turn towards movement direction if not there yet
//
- if(actor->movedir < 8)
- {
- actor->angle &= (7<<29);
- delta = actor->angle-(actor->movedir << 29);
- if(delta > 0)
- {
- actor->angle -= ANG90/2;
- }
- else if(delta < 0)
- {
- actor->angle += ANG90/2;
- }
- }
+ if (actor->movedir < 8)
+ {
+ actor->angle &= (7 << 29);
+ delta = actor->angle - (actor->movedir << 29);
+ if (delta > 0)
+ {
+ actor->angle -= ANG90 / 2;
+ }
+ else if (delta < 0)
+ {
+ actor->angle += ANG90 / 2;
+ }
+ }
- if(!actor->target || !(actor->target->flags&MF_SHOOTABLE))
- { // look for a new target
- if(P_LookForPlayers(actor, true))
- { // got a new target
- return;
- }
- P_SetMobjState(actor, actor->info->spawnstate);
- return;
- }
-
+ if (!actor->target || !(actor->target->flags & MF_SHOOTABLE))
+ { // look for a new target
+ if (P_LookForPlayers(actor, true))
+ { // got a new target
+ return;
+ }
+ P_SetMobjState(actor, actor->info->spawnstate);
+ return;
+ }
+
//
// don't attack twice in a row
//
- if(actor->flags & MF_JUSTATTACKED)
- {
- actor->flags &= ~MF_JUSTATTACKED;
- if (gameskill != sk_nightmare)
- P_NewChaseDir (actor);
- return;
- }
-
+ if (actor->flags & MF_JUSTATTACKED)
+ {
+ actor->flags &= ~MF_JUSTATTACKED;
+ if (gameskill != sk_nightmare)
+ P_NewChaseDir(actor);
+ return;
+ }
+
//
// check for melee attack
-//
- if (actor->info->meleestate && P_CheckMeleeRange (actor))
- {
- if (actor->info->attacksound)
- S_StartSound (actor, actor->info->attacksound);
- P_SetMobjState (actor, actor->info->meleestate);
- return;
- }
+//
+ if (actor->info->meleestate && P_CheckMeleeRange(actor))
+ {
+ if (actor->info->attacksound)
+ S_StartSound(actor, actor->info->attacksound);
+ P_SetMobjState(actor, actor->info->meleestate);
+ return;
+ }
//
// check for missile attack
//
- if (actor->info->missilestate)
- {
- if (gameskill < sk_nightmare && actor->movecount)
- goto nomissile;
- if (!P_CheckMissileRange (actor))
- goto nomissile;
- P_SetMobjState (actor, actor->info->missilestate);
- actor->flags |= MF_JUSTATTACKED;
- return;
- }
-nomissile:
+ if (actor->info->missilestate)
+ {
+ if (gameskill < sk_nightmare && actor->movecount)
+ goto nomissile;
+ if (!P_CheckMissileRange(actor))
+ goto nomissile;
+ P_SetMobjState(actor, actor->info->missilestate);
+ actor->flags |= MF_JUSTATTACKED;
+ return;
+ }
+ nomissile:
//
// possibly choose another target
//
- if (netgame && !actor->threshold && !P_CheckSight (actor, actor->target) )
- {
- if (P_LookForPlayers(actor,true))
- return; // got a new target
- }
-
+ if (netgame && !actor->threshold && !P_CheckSight(actor, actor->target))
+ {
+ if (P_LookForPlayers(actor, true))
+ return; // got a new target
+ }
+
//
// chase towards player
//
- if (--actor->movecount<0 || !P_Move (actor))
- {
- P_NewChaseDir (actor);
- }
+ if (--actor->movecount < 0 || !P_Move(actor))
+ {
+ P_NewChaseDir(actor);
+ }
//
// make active sound
//
- if(actor->info->activesound && P_Random() < 3)
- {
- if(actor->type == MT_WIZARD && P_Random() < 128)
- {
- S_StartSound(actor, actor->info->seesound);
- }
- else if(actor->type == MT_SORCERER2)
- {
- S_StartSound(NULL, actor->info->activesound);
- }
- else
- {
- S_StartSound(actor, actor->info->activesound);
- }
- }
+ if (actor->info->activesound && P_Random() < 3)
+ {
+ if (actor->type == MT_WIZARD && P_Random() < 128)
+ {
+ S_StartSound(actor, actor->info->seesound);
+ }
+ else if (actor->type == MT_SORCERER2)
+ {
+ S_StartSound(NULL, actor->info->activesound);
+ }
+ else
+ {
+ S_StartSound(actor, actor->info->activesound);
+ }
+ }
}
//----------------------------------------------------------------------------
@@ -769,19 +796,19 @@
//
//----------------------------------------------------------------------------
-void A_FaceTarget(mobj_t *actor)
+void A_FaceTarget(mobj_t * actor)
{
- if(!actor->target)
- {
- return;
- }
- actor->flags &= ~MF_AMBUSH;
- actor->angle = R_PointToAngle2(actor->x, actor->y, actor->target->x,
- actor->target->y);
- if(actor->target->flags&MF_SHADOW)
- { // Target is a ghost
- actor->angle += (P_Random()-P_Random())<<21;
- }
+ if (!actor->target)
+ {
+ return;
+ }
+ actor->flags &= ~MF_AMBUSH;
+ actor->angle = R_PointToAngle2(actor->x, actor->y, actor->target->x,
+ actor->target->y);
+ if (actor->target->flags & MF_SHADOW)
+ { // Target is a ghost
+ actor->angle += (P_Random() - P_Random()) << 21;
+ }
}
//----------------------------------------------------------------------------
@@ -790,12 +817,12 @@
//
//----------------------------------------------------------------------------
-void A_Pain(mobj_t *actor)
+void A_Pain(mobj_t * actor)
{
- if(actor->info->painsound)
- {
- S_StartSound(actor, actor->info->painsound);
- }
+ if (actor->info->painsound)
+ {
+ S_StartSound(actor, actor->info->painsound);
+ }
}
//----------------------------------------------------------------------------
@@ -804,15 +831,16 @@
//
//----------------------------------------------------------------------------
-void A_DripBlood(mobj_t *actor)
+void A_DripBlood(mobj_t * actor)
{
- mobj_t *mo;
+ mobj_t *mo;
- mo = P_SpawnMobj(actor->x+((P_Random()-P_Random())<<11),
- actor->y+((P_Random()-P_Random())<<11), actor->z, MT_BLOOD);
- mo->momx = (P_Random()-P_Random())<<10;
- mo->momy = (P_Random()-P_Random())<<10;
- mo->flags2 |= MF2_LOGRAV;
+ mo = P_SpawnMobj(actor->x + ((P_Random() - P_Random()) << 11),
+ actor->y + ((P_Random() - P_Random()) << 11), actor->z,
+ MT_BLOOD);
+ mo->momx = (P_Random() - P_Random()) << 10;
+ mo->momy = (P_Random() - P_Random()) << 10;
+ mo->flags2 |= MF2_LOGRAV;
}
//----------------------------------------------------------------------------
@@ -821,27 +849,27 @@
//
//----------------------------------------------------------------------------
-void A_KnightAttack(mobj_t *actor)
+void A_KnightAttack(mobj_t * actor)
{
- if(!actor->target)
- {
- return;
- }
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, HITDICE(3));
- S_StartSound(actor, sfx_kgtat2);
- return;
- }
- // Throw axe
- S_StartSound(actor, actor->info->attacksound);
- if(actor->type == MT_KNIGHTGHOST || P_Random() < 40)
- { // Red axe
- P_SpawnMissile(actor, actor->target, MT_REDAXE);
- return;
- }
- // Green axe
- P_SpawnMissile(actor, actor->target, MT_KNIGHTAXE);
+ if (!actor->target)
+ {
+ return;
+ }
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, HITDICE(3));
+ S_StartSound(actor, sfx_kgtat2);
+ return;
+ }
+ // Throw axe
+ S_StartSound(actor, actor->info->attacksound);
+ if (actor->type == MT_KNIGHTGHOST || P_Random() < 40)
+ { // Red axe
+ P_SpawnMissile(actor, actor->target, MT_REDAXE);
+ return;
+ }
+ // Green axe
+ P_SpawnMissile(actor, actor->target, MT_KNIGHTAXE);
}
//----------------------------------------------------------------------------
@@ -850,22 +878,22 @@
//
//----------------------------------------------------------------------------
-void A_ImpExplode(mobj_t *actor)
+void A_ImpExplode(mobj_t * actor)
{
- mobj_t *mo;
+ mobj_t *mo;
- mo = P_SpawnMobj(actor->x, actor->y, actor->z, MT_IMPCHUNK1);
- mo->momx = (P_Random() - P_Random ())<<10;
- mo->momy = (P_Random() - P_Random ())<<10;
- mo->momz = 9*FRACUNIT;
- mo = P_SpawnMobj(actor->x, actor->y, actor->z, MT_IMPCHUNK2);
- mo->momx = (P_Random() - P_Random ())<<10;
- mo->momy = (P_Random() - P_Random ())<<10;
- mo->momz = 9*FRACUNIT;
- if(actor->special1 == 666)
- { // Extreme death crash
- P_SetMobjState(actor, S_IMP_XCRASH1);
- }
+ mo = P_SpawnMobj(actor->x, actor->y, actor->z, MT_IMPCHUNK1);
+ mo->momx = (P_Random() - P_Random()) << 10;
+ mo->momy = (P_Random() - P_Random()) << 10;
+ mo->momz = 9 * FRACUNIT;
+ mo = P_SpawnMobj(actor->x, actor->y, actor->z, MT_IMPCHUNK2);
+ mo->momx = (P_Random() - P_Random()) << 10;
+ mo->momy = (P_Random() - P_Random()) << 10;
+ mo->momz = 9 * FRACUNIT;
+ if (actor->special1 == 666)
+ { // Extreme death crash
+ P_SetMobjState(actor, S_IMP_XCRASH1);
+ }
}
//----------------------------------------------------------------------------
@@ -874,14 +902,14 @@
//
//----------------------------------------------------------------------------
-void A_BeastPuff(mobj_t *actor)
+void A_BeastPuff(mobj_t * actor)
{
- if(P_Random() > 64)
- {
- P_SpawnMobj(actor->x+((P_Random()-P_Random())<<10),
- actor->y+((P_Random()-P_Random())<<10),
- actor->z+((P_Random()-P_Random())<<10), MT_PUFFY);
- }
+ if (P_Random() > 64)
+ {
+ P_SpawnMobj(actor->x + ((P_Random() - P_Random()) << 10),
+ actor->y + ((P_Random() - P_Random()) << 10),
+ actor->z + ((P_Random() - P_Random()) << 10), MT_PUFFY);
+ }
}
//----------------------------------------------------------------------------
@@ -890,17 +918,17 @@
//
//----------------------------------------------------------------------------
-void A_ImpMeAttack(mobj_t *actor)
+void A_ImpMeAttack(mobj_t * actor)
{
- if(!actor->target)
- {
- return;
- }
- S_StartSound(actor, actor->info->attacksound);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, 5+(P_Random()&7));
- }
+ if (!actor->target)
+ {
+ return;
+ }
+ S_StartSound(actor, actor->info->attacksound);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, 5 + (P_Random() & 7));
+ }
}
//----------------------------------------------------------------------------
@@ -909,31 +937,31 @@
//
//----------------------------------------------------------------------------
-void A_ImpMsAttack(mobj_t *actor)
+void A_ImpMsAttack(mobj_t * actor)
{
- mobj_t *dest;
- angle_t an;
- int dist;
+ mobj_t *dest;
+ angle_t an;
+ int dist;
- if(!actor->target || P_Random() > 64)
- {
- P_SetMobjState(actor, actor->info->seestate);
- return;
- }
- dest = actor->target;
- actor->flags |= MF_SKULLFLY;
- S_StartSound(actor, actor->info->attacksound);
- A_FaceTarget(actor);
- an = actor->angle >> ANGLETOFINESHIFT;
- actor->momx = FixedMul(12*FRACUNIT, finecosine[an]);
- actor->momy = FixedMul(12*FRACUNIT, finesine[an]);
- dist = P_AproxDistance(dest->x-actor->x, dest->y-actor->y);
- dist = dist/(12*FRACUNIT);
- if(dist < 1)
- {
- dist = 1;
- }
- actor->momz = (dest->z+(dest->height>>1)-actor->z)/dist;
+ if (!actor->target || P_Random() > 64)
+ {
+ P_SetMobjState(actor, actor->info->seestate);
+ return;
+ }
+ dest = actor->target;
+ actor->flags |= MF_SKULLFLY;
+ S_StartSound(actor, actor->info->attacksound);
+ A_FaceTarget(actor);
+ an = actor->angle >> ANGLETOFINESHIFT;
+ actor->momx = FixedMul(12 * FRACUNIT, finecosine[an]);
+ actor->momy = FixedMul(12 * FRACUNIT, finesine[an]);
+ dist = P_AproxDistance(dest->x - actor->x, dest->y - actor->y);
+ dist = dist / (12 * FRACUNIT);
+ if (dist < 1)
+ {
+ dist = 1;
+ }
+ actor->momz = (dest->z + (dest->height >> 1) - actor->z) / dist;
}
//----------------------------------------------------------------------------
@@ -944,19 +972,19 @@
//
//----------------------------------------------------------------------------
-void A_ImpMsAttack2(mobj_t *actor)
+void A_ImpMsAttack2(mobj_t * actor)
{
- if(!actor->target)
- {
- return;
- }
- S_StartSound(actor, actor->info->attacksound);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, 5+(P_Random()&7));
- return;
- }
- P_SpawnMissile(actor, actor->target, MT_IMPBALL);
+ if (!actor->target)
+ {
+ return;
+ }
+ S_StartSound(actor, actor->info->attacksound);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, 5 + (P_Random() & 7));
+ return;
+ }
+ P_SpawnMissile(actor, actor->target, MT_IMPBALL);
}
//----------------------------------------------------------------------------
@@ -965,14 +993,14 @@
//
//----------------------------------------------------------------------------
-void A_ImpDeath(mobj_t *actor)
+void A_ImpDeath(mobj_t * actor)
{
- actor->flags &= ~MF_SOLID;
- actor->flags2 |= MF2_FOOTCLIP;
- if(actor->z <= actor->floorz)
- {
- P_SetMobjState(actor, S_IMP_CRASH1);
- }
+ actor->flags &= ~MF_SOLID;
+ actor->flags2 |= MF2_FOOTCLIP;
+ if (actor->z <= actor->floorz)
+ {
+ P_SetMobjState(actor, S_IMP_CRASH1);
+ }
}
//----------------------------------------------------------------------------
@@ -981,12 +1009,12 @@
//
//----------------------------------------------------------------------------
-void A_ImpXDeath1(mobj_t *actor)
+void A_ImpXDeath1(mobj_t * actor)
{
- actor->flags &= ~MF_SOLID;
- actor->flags |= MF_NOGRAVITY;
- actor->flags2 |= MF2_FOOTCLIP;
- actor->special1 = 666; // Flag the crash routine
+ actor->flags &= ~MF_SOLID;
+ actor->flags |= MF_NOGRAVITY;
+ actor->flags2 |= MF2_FOOTCLIP;
+ actor->special1 = 666; // Flag the crash routine
}
//----------------------------------------------------------------------------
@@ -995,13 +1023,13 @@
//
//----------------------------------------------------------------------------
-void A_ImpXDeath2(mobj_t *actor)
+void A_ImpXDeath2(mobj_t * actor)
{
- actor->flags &= ~MF_NOGRAVITY;
- if(actor->z <= actor->floorz)
- {
- P_SetMobjState(actor, S_IMP_CRASH1);
- }
+ actor->flags &= ~MF_NOGRAVITY;
+ if (actor->z <= actor->floorz)
+ {
+ P_SetMobjState(actor, S_IMP_CRASH1);
+ }
}
//----------------------------------------------------------------------------
@@ -1012,45 +1040,45 @@
//
//----------------------------------------------------------------------------
-boolean P_UpdateChicken(mobj_t *actor, int tics)
+boolean P_UpdateChicken(mobj_t * actor, int tics)
{
- mobj_t *fog;
- fixed_t x;
- fixed_t y;
- fixed_t z;
- mobjtype_t moType;
- mobj_t *mo;
- mobj_t oldChicken;
+ mobj_t *fog;
+ fixed_t x;
+ fixed_t y;
+ fixed_t z;
+ mobjtype_t moType;
+ mobj_t *mo;
+ mobj_t oldChicken;
- actor->special1 -= tics;
- if(actor->special1 > 0)
- {
- return(false);
- }
- moType = actor->special2;
- x = actor->x;
- y = actor->y;
- z = actor->z;
- oldChicken = *actor;
- P_SetMobjState(actor, S_FREETARGMOBJ);
- mo = P_SpawnMobj(x, y, z, moType);
- if(P_TestMobjLocation(mo) == false)
- { // Didn't fit
- P_RemoveMobj(mo);
- mo = P_SpawnMobj(x, y, z, MT_CHICKEN);
- mo->angle = oldChicken.angle;
- mo->flags = oldChicken.flags;
- mo->health = oldChicken.health;
- mo->target = oldChicken.target;
- mo->special1 = 5*35; // Next try in 5 seconds
- mo->special2 = moType;
- return(false);
- }
- mo->angle = oldChicken.angle;
- mo->target = oldChicken.target;
- fog = P_SpawnMobj(x, y, z+TELEFOGHEIGHT, MT_TFOG);
- S_StartSound(fog, sfx_telept);
- return(true);
+ actor->special1 -= tics;
+ if (actor->special1 > 0)
+ {
+ return (false);
+ }
+ moType = actor->special2;
+ x = actor->x;
+ y = actor->y;
+ z = actor->z;
+ oldChicken = *actor;
+ P_SetMobjState(actor, S_FREETARGMOBJ);
+ mo = P_SpawnMobj(x, y, z, moType);
+ if (P_TestMobjLocation(mo) == false)
+ { // Didn't fit
+ P_RemoveMobj(mo);
+ mo = P_SpawnMobj(x, y, z, MT_CHICKEN);
+ mo->angle = oldChicken.angle;
+ mo->flags = oldChicken.flags;
+ mo->health = oldChicken.health;
+ mo->target = oldChicken.target;
+ mo->special1 = 5 * 35; // Next try in 5 seconds
+ mo->special2 = moType;
+ return (false);
+ }
+ mo->angle = oldChicken.angle;
+ mo->target = oldChicken.target;
+ fog = P_SpawnMobj(x, y, z + TELEFOGHEIGHT, MT_TFOG);
+ S_StartSound(fog, sfx_telept);
+ return (true);
}
//----------------------------------------------------------------------------
@@ -1059,20 +1087,20 @@
//
//----------------------------------------------------------------------------
-void A_ChicAttack(mobj_t *actor)
+void A_ChicAttack(mobj_t * actor)
{
- if(P_UpdateChicken(actor, 18))
- {
- return;
- }
- if(!actor->target)
- {
- return;
- }
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, 1+(P_Random()&1));
- }
+ if (P_UpdateChicken(actor, 18))
+ {
+ return;
+ }
+ if (!actor->target)
+ {
+ return;
+ }
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, 1 + (P_Random() & 1));
+ }
}
//----------------------------------------------------------------------------
@@ -1081,13 +1109,13 @@
//
//----------------------------------------------------------------------------
-void A_ChicLook(mobj_t *actor)
+void A_ChicLook(mobj_t * actor)
{
- if(P_UpdateChicken(actor, 10))
- {
- return;
- }
- A_Look(actor);
+ if (P_UpdateChicken(actor, 10))
+ {
+ return;
+ }
+ A_Look(actor);
}
//----------------------------------------------------------------------------
@@ -1096,13 +1124,13 @@
//
//----------------------------------------------------------------------------
-void A_ChicChase(mobj_t *actor)
+void A_ChicChase(mobj_t * actor)
{
- if(P_UpdateChicken(actor, 3))
- {
- return;
- }
- A_Chase(actor);
+ if (P_UpdateChicken(actor, 3))
+ {
+ return;
+ }
+ A_Chase(actor);
}
//----------------------------------------------------------------------------
@@ -1111,13 +1139,13 @@
//
//----------------------------------------------------------------------------
-void A_ChicPain(mobj_t *actor)
+void A_ChicPain(mobj_t * actor)
{
- if(P_UpdateChicken(actor, 10))
- {
- return;
- }
- S_StartSound(actor, actor->info->painsound);
+ if (P_UpdateChicken(actor, 10))
+ {
+ return;
+ }
+ S_StartSound(actor, actor->info->painsound);
}
//----------------------------------------------------------------------------
@@ -1126,30 +1154,30 @@
//
//----------------------------------------------------------------------------
-void A_Feathers(mobj_t *actor)
+void A_Feathers(mobj_t * actor)
{
- int i;
- int count;
- mobj_t *mo;
+ int i;
+ int count;
+ mobj_t *mo;
- if(actor->health > 0)
- { // Pain
- count = P_Random() < 32 ? 2 : 1;
- }
- else
- { // Death
- count = 5+(P_Random()&3);
- }
- for(i = 0; i < count; i++)
- {
- mo = P_SpawnMobj(actor->x, actor->y, actor->z+20*FRACUNIT,
- MT_FEATHER);
- mo->target = actor;
- mo->momx = (P_Random()-P_Random())<<8;
- mo->momy = (P_Random()-P_Random())<<8;
- mo->momz = FRACUNIT+(P_Random()<<9);
- P_SetMobjState(mo, S_FEATHER1+(P_Random()&7));
- }
+ if (actor->health > 0)
+ { // Pain
+ count = P_Random() < 32 ? 2 : 1;
+ }
+ else
+ { // Death
+ count = 5 + (P_Random() & 3);
+ }
+ for (i = 0; i < count; i++)
+ {
+ mo = P_SpawnMobj(actor->x, actor->y, actor->z + 20 * FRACUNIT,
+ MT_FEATHER);
+ mo->target = actor;
+ mo->momx = (P_Random() - P_Random()) << 8;
+ mo->momy = (P_Random() - P_Random()) << 8;
+ mo->momz = FRACUNIT + (P_Random() << 9);
+ P_SetMobjState(mo, S_FEATHER1 + (P_Random() & 7));
+ }
}
//----------------------------------------------------------------------------
@@ -1158,20 +1186,20 @@
//
//----------------------------------------------------------------------------
-void A_MummyAttack(mobj_t *actor)
+void A_MummyAttack(mobj_t * actor)
{
- if(!actor->target)
- {
- return;
- }
- S_StartSound(actor, actor->info->attacksound);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, HITDICE(2));
- S_StartSound(actor, sfx_mumat2);
- return;
- }
- S_StartSound(actor, sfx_mumat1);
+ if (!actor->target)
+ {
+ return;
+ }
+ S_StartSound(actor, actor->info->attacksound);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, HITDICE(2));
+ S_StartSound(actor, sfx_mumat2);
+ return;
+ }
+ S_StartSound(actor, sfx_mumat1);
}
//----------------------------------------------------------------------------
@@ -1182,26 +1210,26 @@
//
//----------------------------------------------------------------------------
-void A_MummyAttack2(mobj_t *actor)
+void A_MummyAttack2(mobj_t * actor)
{
- mobj_t *mo;
+ mobj_t *mo;
- if(!actor->target)
- {
- return;
- }
- //S_StartSound(actor, actor->info->attacksound);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, HITDICE(2));
- return;
- }
- mo = P_SpawnMissile(actor, actor->target, MT_MUMMYFX1);
- //mo = P_SpawnMissile(actor, actor->target, MT_EGGFX);
- if(mo != NULL)
- {
- mo->special1 = (int)actor->target;
- }
+ if (!actor->target)
+ {
+ return;
+ }
+ //S_StartSound(actor, actor->info->attacksound);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, HITDICE(2));
+ return;
+ }
+ mo = P_SpawnMissile(actor, actor->target, MT_MUMMYFX1);
+ //mo = P_SpawnMissile(actor, actor->target, MT_EGGFX);
+ if (mo != NULL)
+ {
+ mo->special1 = (int) actor->target;
+ }
}
//----------------------------------------------------------------------------
@@ -1210,9 +1238,9 @@
//
//----------------------------------------------------------------------------
-void A_MummyFX1Seek(mobj_t *actor)
+void A_MummyFX1Seek(mobj_t * actor)
{
- P_SeekerMissile(actor, ANGLE_1*10, ANGLE_1*20);
+ P_SeekerMissile(actor, ANGLE_1 * 10, ANGLE_1 * 20);
}
//----------------------------------------------------------------------------
@@ -1221,12 +1249,13 @@
//
//----------------------------------------------------------------------------
-void A_MummySoul(mobj_t *mummy)
+void A_MummySoul(mobj_t * mummy)
{
- mobj_t *mo;
+ mobj_t *mo;
- mo = P_SpawnMobj(mummy->x, mummy->y, mummy->z+10*FRACUNIT, MT_MUMMYSOUL);
- mo->momz = FRACUNIT;
+ mo = P_SpawnMobj(mummy->x, mummy->y, mummy->z + 10 * FRACUNIT,
+ MT_MUMMYSOUL);
+ mo->momz = FRACUNIT;
}
//----------------------------------------------------------------------------
@@ -1235,10 +1264,10 @@
//
//----------------------------------------------------------------------------
-void A_Sor1Pain(mobj_t *actor)
+void A_Sor1Pain(mobj_t * actor)
{
- actor->special1 = 20; // Number of steps to walk fast
- A_Pain(actor);
+ actor->special1 = 20; // Number of steps to walk fast
+ A_Pain(actor);
}
//----------------------------------------------------------------------------
@@ -1247,14 +1276,14 @@
//
//----------------------------------------------------------------------------
-void A_Sor1Chase(mobj_t *actor)
+void A_Sor1Chase(mobj_t * actor)
{
- if(actor->special1)
- {
- actor->special1--;
- actor->tics -= 3;
- }
- A_Chase(actor);
+ if (actor->special1)
+ {
+ actor->special1--;
+ actor->tics -= 3;
+ }
+ A_Chase(actor);
}
//----------------------------------------------------------------------------
@@ -1265,49 +1294,49 @@
//
//----------------------------------------------------------------------------
-void A_Srcr1Attack(mobj_t *actor)
+void A_Srcr1Attack(mobj_t * actor)
{
- mobj_t *mo;
- fixed_t momz;
- angle_t angle;
+ mobj_t *mo;
+ fixed_t momz;
+ angle_t angle;
- if(!actor->target)
- {
- return;
- }
- S_StartSound(actor, actor->info->attacksound);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, HITDICE(8));
- return;
- }
- if(actor->health > (actor->info->spawnhealth/3)*2)
- { // Spit one fireball
- P_SpawnMissile(actor, actor->target, MT_SRCRFX1);
- }
- else
- { // Spit three fireballs
- mo = P_SpawnMissile(actor, actor->target, MT_SRCRFX1);
- if(mo)
- {
- momz = mo->momz;
- angle = mo->angle;
- P_SpawnMissileAngle(actor, MT_SRCRFX1, angle-ANGLE_1*3, momz);
- P_SpawnMissileAngle(actor, MT_SRCRFX1, angle+ANGLE_1*3, momz);
- }
- if(actor->health < actor->info->spawnhealth/3)
- { // Maybe attack again
- if(actor->special1)
- { // Just attacked, so don't attack again
- actor->special1 = 0;
- }
- else
- { // Set state to attack again
- actor->special1 = 1;
- P_SetMobjState(actor, S_SRCR1_ATK4);
- }
- }
- }
+ if (!actor->target)
+ {
+ return;
+ }
+ S_StartSound(actor, actor->info->attacksound);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, HITDICE(8));
+ return;
+ }
+ if (actor->health > (actor->info->spawnhealth / 3) * 2)
+ { // Spit one fireball
+ P_SpawnMissile(actor, actor->target, MT_SRCRFX1);
+ }
+ else
+ { // Spit three fireballs
+ mo = P_SpawnMissile(actor, actor->target, MT_SRCRFX1);
+ if (mo)
+ {
+ momz = mo->momz;
+ angle = mo->angle;
+ P_SpawnMissileAngle(actor, MT_SRCRFX1, angle - ANGLE_1 * 3, momz);
+ P_SpawnMissileAngle(actor, MT_SRCRFX1, angle + ANGLE_1 * 3, momz);
+ }
+ if (actor->health < actor->info->spawnhealth / 3)
+ { // Maybe attack again
+ if (actor->special1)
+ { // Just attacked, so don't attack again
+ actor->special1 = 0;
+ }
+ else
+ { // Set state to attack again
+ actor->special1 = 1;
+ P_SetMobjState(actor, S_SRCR1_ATK4);
+ }
+ }
+ }
}
//----------------------------------------------------------------------------
@@ -1316,15 +1345,15 @@
//
//----------------------------------------------------------------------------
-void A_SorcererRise(mobj_t *actor)
+void A_SorcererRise(mobj_t * actor)
{
- mobj_t *mo;
+ mobj_t *mo;
- actor->flags &= ~MF_SOLID;
- mo = P_SpawnMobj(actor->x, actor->y, actor->z, MT_SORCERER2);
- P_SetMobjState(mo, S_SOR2_RISE1);
- mo->angle = actor->angle;
- mo->target = actor->target;
+ actor->flags &= ~MF_SOLID;
+ mo = P_SpawnMobj(actor->x, actor->y, actor->z, MT_SORCERER2);
+ P_SetMobjState(mo, S_SOR2_RISE1);
+ mo->angle = actor->angle;
+ mo->target = actor->target;
}
//----------------------------------------------------------------------------
@@ -1333,40 +1362,41 @@
//
//----------------------------------------------------------------------------
-void P_DSparilTeleport(mobj_t *actor)
+void P_DSparilTeleport(mobj_t * actor)
{
- int i;
- fixed_t x;
- fixed_t y;
- fixed_t prevX;
- fixed_t prevY;
- fixed_t prevZ;
- mobj_t *mo;
+ int i;
+ fixed_t x;
+ fixed_t y;
+ fixed_t prevX;
+ fixed_t prevY;
+ fixed_t prevZ;
+ mobj_t *mo;
- if(!BossSpotCount)
- { // No spots
- return;
- }
- i = P_Random();
- do
- {
- i++;
- x = BossSpots[i%BossSpotCount].x;
- y = BossSpots[i%BossSpotCount].y;
- } while(P_AproxDistance(actor->x-x, actor->y-y) < 128*FRACUNIT);
- prevX = actor->x;
- prevY = actor->y;
- prevZ = actor->z;
- if(P_TeleportMove(actor, x, y))
- {
- mo = P_SpawnMobj(prevX, prevY, prevZ, MT_SOR2TELEFADE);
- S_StartSound(mo, sfx_telept);
- P_SetMobjState(actor, S_SOR2_TELE1);
- S_StartSound(actor, sfx_telept);
- actor->z = actor->floorz;
- actor->angle = BossSpots[i%BossSpotCount].angle;
- actor->momx = actor->momy = actor->momz = 0;
- }
+ if (!BossSpotCount)
+ { // No spots
+ return;
+ }
+ i = P_Random();
+ do
+ {
+ i++;
+ x = BossSpots[i % BossSpotCount].x;
+ y = BossSpots[i % BossSpotCount].y;
+ }
+ while (P_AproxDistance(actor->x - x, actor->y - y) < 128 * FRACUNIT);
+ prevX = actor->x;
+ prevY = actor->y;
+ prevZ = actor->z;
+ if (P_TeleportMove(actor, x, y))
+ {
+ mo = P_SpawnMobj(prevX, prevY, prevZ, MT_SOR2TELEFADE);
+ S_StartSound(mo, sfx_telept);
+ P_SetMobjState(actor, S_SOR2_TELE1);
+ S_StartSound(actor, sfx_telept);
+ actor->z = actor->floorz;
+ actor->angle = BossSpots[i % BossSpotCount].angle;
+ actor->momx = actor->momy = actor->momz = 0;
+ }
}
//----------------------------------------------------------------------------
@@ -1375,21 +1405,20 @@
//
//----------------------------------------------------------------------------
-void A_Srcr2Decide(mobj_t *actor)
+void A_Srcr2Decide(mobj_t * actor)
{
- static int chance[] =
- {
- 192, 120, 120, 120, 64, 64, 32, 16, 0
- };
+ static int chance[] = {
+ 192, 120, 120, 120, 64, 64, 32, 16, 0
+ };
- if(!BossSpotCount)
- { // No spots
- return;
- }
- if(P_Random() < chance[actor->health/(actor->info->spawnhealth/8)])
- {
- P_DSparilTeleport(actor);
- }
+ if (!BossSpotCount)
+ { // No spots
+ return;
+ }
+ if (P_Random() < chance[actor->health / (actor->info->spawnhealth / 8)])
+ {
+ P_DSparilTeleport(actor);
+ }
}
//----------------------------------------------------------------------------
@@ -1398,32 +1427,32 @@
//
//----------------------------------------------------------------------------
-void A_Srcr2Attack(mobj_t *actor)
+void A_Srcr2Attack(mobj_t * actor)
{
- int chance;
+ int chance;
- if(!actor->target)
- {
- return;
- }
- S_StartSound(NULL, actor->info->attacksound);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, HITDICE(20));
- return;
- }
- chance = actor->health < actor->info->spawnhealth/2 ? 96 : 48;
- if(P_Random() < chance)
- { // Wizard spawners
- P_SpawnMissileAngle(actor, MT_SOR2FX2,
- actor->angle-ANG45, FRACUNIT/2);
- P_SpawnMissileAngle(actor, MT_SOR2FX2,
- actor->angle+ANG45, FRACUNIT/2);
- }
- else
- { // Blue bolt
- P_SpawnMissile(actor, actor->target, MT_SOR2FX1);
- }
+ if (!actor->target)
+ {
+ return;
+ }
+ S_StartSound(NULL, actor->info->attacksound);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, HITDICE(20));
+ return;
+ }
+ chance = actor->health < actor->info->spawnhealth / 2 ? 96 : 48;
+ if (P_Random() < chance)
+ { // Wizard spawners
+ P_SpawnMissileAngle(actor, MT_SOR2FX2,
+ actor->angle - ANG45, FRACUNIT / 2);
+ P_SpawnMissileAngle(actor, MT_SOR2FX2,
+ actor->angle + ANG45, FRACUNIT / 2);
+ }
+ else
+ { // Blue bolt
+ P_SpawnMissile(actor, actor->target, MT_SOR2FX1);
+ }
}
//----------------------------------------------------------------------------
@@ -1432,18 +1461,18 @@
//
//----------------------------------------------------------------------------
-void A_BlueSpark(mobj_t *actor)
+void A_BlueSpark(mobj_t * actor)
{
- int i;
- mobj_t *mo;
+ int i;
+ mobj_t *mo;
- for(i = 0; i < 2; i++)
- {
- mo = P_SpawnMobj(actor->x, actor->y, actor->z, MT_SOR2FXSPARK);
- mo->momx = (P_Random()-P_Random())<<9;
- mo->momy = (P_Random()-P_Random())<<9;
- mo->momz = FRACUNIT+(P_Random()<<8);
- }
+ for (i = 0; i < 2; i++)
+ {
+ mo = P_SpawnMobj(actor->x, actor->y, actor->z, MT_SOR2FXSPARK);
+ mo->momx = (P_Random() - P_Random()) << 9;
+ mo->momy = (P_Random() - P_Random()) << 9;
+ mo->momz = FRACUNIT + (P_Random() << 8);
+ }
}
//----------------------------------------------------------------------------
@@ -1452,23 +1481,23 @@
//
//----------------------------------------------------------------------------
-void A_GenWizard(mobj_t *actor)
+void A_GenWizard(mobj_t * actor)
{
- mobj_t *mo;
- mobj_t *fog;
+ mobj_t *mo;
+ mobj_t *fog;
- mo = P_SpawnMobj(actor->x, actor->y,
- actor->z-mobjinfo[MT_WIZARD].height/2, MT_WIZARD);
- if(P_TestMobjLocation(mo) == false)
- { // Didn't fit
- P_RemoveMobj(mo);
- return;
- }
- actor->momx = actor->momy = actor->momz = 0;
- P_SetMobjState(actor, mobjinfo[actor->type].deathstate);
- actor->flags &= ~MF_MISSILE;
- fog = P_SpawnMobj(actor->x, actor->y, actor->z, MT_TFOG);
- S_StartSound(fog, sfx_telept);
+ mo = P_SpawnMobj(actor->x, actor->y,
+ actor->z - mobjinfo[MT_WIZARD].height / 2, MT_WIZARD);
+ if (P_TestMobjLocation(mo) == false)
+ { // Didn't fit
+ P_RemoveMobj(mo);
+ return;
+ }
+ actor->momx = actor->momy = actor->momz = 0;
+ P_SetMobjState(actor, mobjinfo[actor->type].deathstate);
+ actor->flags &= ~MF_MISSILE;
+ fog = P_SpawnMobj(actor->x, actor->y, actor->z, MT_TFOG);
+ S_StartSound(fog, sfx_telept);
}
//----------------------------------------------------------------------------
@@ -1477,10 +1506,10 @@
//
//----------------------------------------------------------------------------
-void A_Sor2DthInit(mobj_t *actor)
+void A_Sor2DthInit(mobj_t * actor)
{
- actor->special1 = 7; // Animation loop counter
- P_Massacre(); // Kill monsters early
+ actor->special1 = 7; // Animation loop counter
+ P_Massacre(); // Kill monsters early
}
//----------------------------------------------------------------------------
@@ -1489,12 +1518,12 @@
//
//----------------------------------------------------------------------------
-void A_Sor2DthLoop(mobj_t *actor)
+void A_Sor2DthLoop(mobj_t * actor)
{
- if(--actor->special1)
- { // Need to loop
- P_SetMobjState(actor, S_SOR2_DIE4);
- }
+ if (--actor->special1)
+ { // Need to loop
+ P_SetMobjState(actor, S_SOR2_DIE4);
+ }
}
//----------------------------------------------------------------------------
@@ -1503,13 +1532,36 @@
//
//----------------------------------------------------------------------------
-void A_SorZap(mobj_t *actor) {S_StartSound(NULL, sfx_sorzap);}
-void A_SorRise(mobj_t *actor) {S_StartSound(NULL, sfx_sorrise);}
-void A_SorDSph(mobj_t *actor) {S_StartSound(NULL, sfx_sordsph);}
-void A_SorDExp(mobj_t *actor) {S_StartSound(NULL, sfx_sordexp);}
-void A_SorDBon(mobj_t *actor) {S_StartSound(NULL, sfx_sordbon);}
-void A_SorSightSnd(mobj_t *actor) {S_StartSound(NULL, sfx_sorsit);}
+void A_SorZap(mobj_t * actor)
+{
+ S_StartSound(NULL, sfx_sorzap);
+}
+void A_SorRise(mobj_t * actor)
+{
+ S_StartSound(NULL, sfx_sorrise);
+}
+
+void A_SorDSph(mobj_t * actor)
+{
+ S_StartSound(NULL, sfx_sordsph);
+}
+
+void A_SorDExp(mobj_t * actor)
+{
+ S_StartSound(NULL, sfx_sordexp);
+}
+
+void A_SorDBon(mobj_t * actor)
+{
+ S_StartSound(NULL, sfx_sordbon);
+}
+
+void A_SorSightSnd(mobj_t * actor)
+{
+ S_StartSound(NULL, sfx_sorsit);
+}
+
//----------------------------------------------------------------------------
//
// PROC A_MinotaurAtk1
@@ -1518,23 +1570,23 @@
//
//----------------------------------------------------------------------------
-void A_MinotaurAtk1(mobj_t *actor)
+void A_MinotaurAtk1(mobj_t * actor)
{
- player_t *player;
+ player_t *player;
- if(!actor->target)
- {
- return;
- }
- S_StartSound(actor, sfx_stfpow);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, HITDICE(4));
- if((player = actor->target->player) != NULL)
- { // Squish the player
- player->deltaviewheight = -16*FRACUNIT;
- }
- }
+ if (!actor->target)
+ {
+ return;
+ }
+ S_StartSound(actor, sfx_stfpow);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, HITDICE(4));
+ if ((player = actor->target->player) != NULL)
+ { // Squish the player
+ player->deltaviewheight = -16 * FRACUNIT;
+ }
+ }
}
//----------------------------------------------------------------------------
@@ -1547,47 +1599,45 @@
#define MNTR_CHARGE_SPEED (13*FRACUNIT)
-void A_MinotaurDecide(mobj_t *actor)
+void A_MinotaurDecide(mobj_t * actor)
{
- angle_t angle;
- mobj_t *target;
- int dist;
+ angle_t angle;
+ mobj_t *target;
+ int dist;
- target = actor->target;
- if(!target)
- {
- return;
- }
- S_StartSound(actor, sfx_minsit);
- dist = P_AproxDistance(actor->x-target->x, actor->y-target->y);
- if(target->z+target->height > actor->z
- && target->z+target->height < actor->z+actor->height
- && dist < 8*64*FRACUNIT
- && dist > 1*64*FRACUNIT
- && P_Random() < 150)
- { // Charge attack
- // Don't call the state function right away
- P_SetMobjStateNF(actor, S_MNTR_ATK4_1);
- actor->flags |= MF_SKULLFLY;
- A_FaceTarget(actor);
- angle = actor->angle>>ANGLETOFINESHIFT;
- actor->momx = FixedMul(MNTR_CHARGE_SPEED, finecosine[angle]);
- actor->momy = FixedMul(MNTR_CHARGE_SPEED, finesine[angle]);
- actor->special1 = 35/2; // Charge duration
- }
- else if(target->z == target->floorz
- && dist < 9*64*FRACUNIT
- && P_Random() < 220)
- { // Floor fire attack
- P_SetMobjState(actor, S_MNTR_ATK3_1);
- actor->special2 = 0;
- }
- else
- { // Swing attack
- A_FaceTarget(actor);
- // Don't need to call P_SetMobjState because the current state
- // falls through to the swing attack
- }
+ target = actor->target;
+ if (!target)
+ {
+ return;
+ }
+ S_StartSound(actor, sfx_minsit);
+ dist = P_AproxDistance(actor->x - target->x, actor->y - target->y);
+ if (target->z + target->height > actor->z
+ && target->z + target->height < actor->z + actor->height
+ && dist < 8 * 64 * FRACUNIT
+ && dist > 1 * 64 * FRACUNIT && P_Random() < 150)
+ { // Charge attack
+ // Don't call the state function right away
+ P_SetMobjStateNF(actor, S_MNTR_ATK4_1);
+ actor->flags |= MF_SKULLFLY;
+ A_FaceTarget(actor);
+ angle = actor->angle >> ANGLETOFINESHIFT;
+ actor->momx = FixedMul(MNTR_CHARGE_SPEED, finecosine[angle]);
+ actor->momy = FixedMul(MNTR_CHARGE_SPEED, finesine[angle]);
+ actor->special1 = 35 / 2; // Charge duration
+ }
+ else if (target->z == target->floorz
+ && dist < 9 * 64 * FRACUNIT && P_Random() < 220)
+ { // Floor fire attack
+ P_SetMobjState(actor, S_MNTR_ATK3_1);
+ actor->special2 = 0;
+ }
+ else
+ { // Swing attack
+ A_FaceTarget(actor);
+ // Don't need to call P_SetMobjState because the current state
+ // falls through to the swing attack
+ }
}
//----------------------------------------------------------------------------
@@ -1596,21 +1646,21 @@
//
//----------------------------------------------------------------------------
-void A_MinotaurCharge(mobj_t *actor)
+void A_MinotaurCharge(mobj_t * actor)
{
- mobj_t *puff;
+ mobj_t *puff;
- if(actor->special1)
- {
- puff = P_SpawnMobj(actor->x, actor->y, actor->z, MT_PHOENIXPUFF);
- puff->momz = 2*FRACUNIT;
- actor->special1--;
- }
- else
- {
- actor->flags &= ~MF_SKULLFLY;
- P_SetMobjState(actor, actor->info->seestate);
- }
+ if (actor->special1)
+ {
+ puff = P_SpawnMobj(actor->x, actor->y, actor->z, MT_PHOENIXPUFF);
+ puff->momz = 2 * FRACUNIT;
+ actor->special1--;
+ }
+ else
+ {
+ actor->flags &= ~MF_SKULLFLY;
+ P_SetMobjState(actor, actor->info->seestate);
+ }
}
//----------------------------------------------------------------------------
@@ -1621,33 +1671,33 @@
//
//----------------------------------------------------------------------------
-void A_MinotaurAtk2(mobj_t *actor)
+void A_MinotaurAtk2(mobj_t * actor)
{
- mobj_t *mo;
- angle_t angle;
- fixed_t momz;
+ mobj_t *mo;
+ angle_t angle;
+ fixed_t momz;
- if(!actor->target)
- {
- return;
- }
- S_StartSound(actor, sfx_minat2);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, HITDICE(5));
- return;
- }
- mo = P_SpawnMissile(actor, actor->target, MT_MNTRFX1);
- if(mo)
- {
- S_StartSound(mo, sfx_minat2);
- momz = mo->momz;
- angle = mo->angle;
- P_SpawnMissileAngle(actor, MT_MNTRFX1, angle-(ANG45/8), momz);
- P_SpawnMissileAngle(actor, MT_MNTRFX1, angle+(ANG45/8), momz);
- P_SpawnMissileAngle(actor, MT_MNTRFX1, angle-(ANG45/16), momz);
- P_SpawnMissileAngle(actor, MT_MNTRFX1, angle+(ANG45/16), momz);
- }
+ if (!actor->target)
+ {
+ return;
+ }
+ S_StartSound(actor, sfx_minat2);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, HITDICE(5));
+ return;
+ }
+ mo = P_SpawnMissile(actor, actor->target, MT_MNTRFX1);
+ if (mo)
+ {
+ S_StartSound(mo, sfx_minat2);
+ momz = mo->momz;
+ angle = mo->angle;
+ P_SpawnMissileAngle(actor, MT_MNTRFX1, angle - (ANG45 / 8), momz);
+ P_SpawnMissileAngle(actor, MT_MNTRFX1, angle + (ANG45 / 8), momz);
+ P_SpawnMissileAngle(actor, MT_MNTRFX1, angle - (ANG45 / 16), momz);
+ P_SpawnMissileAngle(actor, MT_MNTRFX1, angle + (ANG45 / 16), momz);
+ }
}
//----------------------------------------------------------------------------
@@ -1658,36 +1708,36 @@
//
//----------------------------------------------------------------------------
-void A_MinotaurAtk3(mobj_t *actor)
+void A_MinotaurAtk3(mobj_t * actor)
{
- mobj_t *mo;
- player_t *player;
+ mobj_t *mo;
+ player_t *player;
- if(!actor->target)
- {
- return;
- }
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, HITDICE(5));
- if((player = actor->target->player) != NULL)
- { // Squish the player
- player->deltaviewheight = -16*FRACUNIT;
- }
- }
- else
- {
- mo = P_SpawnMissile(actor, actor->target, MT_MNTRFX2);
- if(mo != NULL)
- {
- S_StartSound(mo, sfx_minat1);
- }
- }
- if(P_Random() < 192 && actor->special2 == 0)
- {
- P_SetMobjState(actor, S_MNTR_ATK3_4);
- actor->special2 = 1;
- }
+ if (!actor->target)
+ {
+ return;
+ }
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, HITDICE(5));
+ if ((player = actor->target->player) != NULL)
+ { // Squish the player
+ player->deltaviewheight = -16 * FRACUNIT;
+ }
+ }
+ else
+ {
+ mo = P_SpawnMissile(actor, actor->target, MT_MNTRFX2);
+ if (mo != NULL)
+ {
+ S_StartSound(mo, sfx_minat1);
+ }
+ }
+ if (P_Random() < 192 && actor->special2 == 0)
+ {
+ P_SetMobjState(actor, S_MNTR_ATK3_4);
+ actor->special2 = 1;
+ }
}
//----------------------------------------------------------------------------
@@ -1696,16 +1746,17 @@
//
//----------------------------------------------------------------------------
-void A_MntrFloorFire(mobj_t *actor)
+void A_MntrFloorFire(mobj_t * actor)
{
- mobj_t *mo;
+ mobj_t *mo;
- actor->z = actor->floorz;
- mo = P_SpawnMobj(actor->x+((P_Random()-P_Random())<<10),
- actor->y+((P_Random()-P_Random())<<10), ONFLOORZ, MT_MNTRFX3);
- mo->target = actor->target;
- mo->momx = 1; // Force block checking
- P_CheckMissileSpawn(mo);
+ actor->z = actor->floorz;
+ mo = P_SpawnMobj(actor->x + ((P_Random() - P_Random()) << 10),
+ actor->y + ((P_Random() - P_Random()) << 10), ONFLOORZ,
+ MT_MNTRFX3);
+ mo->target = actor->target;
+ mo->momx = 1; // Force block checking
+ P_CheckMissileSpawn(mo);
}
//----------------------------------------------------------------------------
@@ -1714,19 +1765,19 @@
//
//----------------------------------------------------------------------------
-void A_BeastAttack(mobj_t *actor)
+void A_BeastAttack(mobj_t * actor)
{
- if(!actor->target)
- {
- return;
- }
- S_StartSound(actor, actor->info->attacksound);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, HITDICE(3));
- return;
- }
- P_SpawnMissile(actor, actor->target, MT_BEASTBALL);
+ if (!actor->target)
+ {
+ return;
+ }
+ S_StartSound(actor, actor->info->attacksound);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, HITDICE(3));
+ return;
+ }
+ P_SpawnMissile(actor, actor->target, MT_BEASTBALL);
}
//----------------------------------------------------------------------------
@@ -1735,80 +1786,80 @@
//
//----------------------------------------------------------------------------
-void A_HeadAttack(mobj_t *actor)
+void A_HeadAttack(mobj_t * actor)
{
- int i;
- mobj_t *fire;
- mobj_t *baseFire;
- mobj_t *mo;
- mobj_t *target;
- int randAttack;
- static int atkResolve1[] = { 50, 150 };
- static int atkResolve2[] = { 150, 200 };
- int dist;
+ int i;
+ mobj_t *fire;
+ mobj_t *baseFire;
+ mobj_t *mo;
+ mobj_t *target;
+ int randAttack;
+ static int atkResolve1[] = { 50, 150 };
+ static int atkResolve2[] = { 150, 200 };
+ int dist;
- // Ice ball (close 20% : far 60%)
- // Fire column (close 40% : far 20%)
- // Whirlwind (close 40% : far 20%)
- // Distance threshold = 8 cells
+ // Ice ball (close 20% : far 60%)
+ // Fire column (close 40% : far 20%)
+ // Whirlwind (close 40% : far 20%)
+ // Distance threshold = 8 cells
- target = actor->target;
- if(target == NULL)
- {
- return;
- }
- A_FaceTarget(actor);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(target, actor, actor, HITDICE(6));
- return;
- }
- dist = P_AproxDistance(actor->x-target->x, actor->y-target->y)
- > 8*64*FRACUNIT;
- randAttack = P_Random();
- if(randAttack < atkResolve1[dist])
- { // Ice ball
- P_SpawnMissile(actor, target, MT_HEADFX1);
- S_StartSound(actor, sfx_hedat2);
- }
- else if(randAttack < atkResolve2[dist])
- { // Fire column
- baseFire = P_SpawnMissile(actor, target, MT_HEADFX3);
- if(baseFire != NULL)
- {
- P_SetMobjState(baseFire, S_HEADFX3_4); // Don't grow
- for(i = 0; i < 5; i++)
- {
- fire = P_SpawnMobj(baseFire->x, baseFire->y,
- baseFire->z, MT_HEADFX3);
- if(i == 0)
- {
- S_StartSound(actor, sfx_hedat1);
- }
- fire->target = baseFire->target;
- fire->angle = baseFire->angle;
- fire->momx = baseFire->momx;
- fire->momy = baseFire->momy;
- fire->momz = baseFire->momz;
- fire->damage = 0;
- fire->health = (i+1)*2;
- P_CheckMissileSpawn(fire);
- }
- }
- }
- else
- { // Whirlwind
- mo = P_SpawnMissile(actor, target, MT_WHIRLWIND);
- if(mo != NULL)
- {
- mo->z -= 32*FRACUNIT;
- mo->special1 = (int)target;
- mo->special2 = 50; // Timer for active sound
- mo->health = 20*TICSPERSEC; // Duration
- S_StartSound(actor, sfx_hedat3);
- }
- }
-}
+ target = actor->target;
+ if (target == NULL)
+ {
+ return;
+ }
+ A_FaceTarget(actor);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(target, actor, actor, HITDICE(6));
+ return;
+ }
+ dist = P_AproxDistance(actor->x - target->x, actor->y - target->y)
+ > 8 * 64 * FRACUNIT;
+ randAttack = P_Random();
+ if (randAttack < atkResolve1[dist])
+ { // Ice ball
+ P_SpawnMissile(actor, target, MT_HEADFX1);
+ S_StartSound(actor, sfx_hedat2);
+ }
+ else if (randAttack < atkResolve2[dist])
+ { // Fire column
+ baseFire = P_SpawnMissile(actor, target, MT_HEADFX3);
+ if (baseFire != NULL)
+ {
+ P_SetMobjState(baseFire, S_HEADFX3_4); // Don't grow
+ for (i = 0; i < 5; i++)
+ {
+ fire = P_SpawnMobj(baseFire->x, baseFire->y,
+ baseFire->z, MT_HEADFX3);
+ if (i == 0)
+ {
+ S_StartSound(actor, sfx_hedat1);
+ }
+ fire->target = baseFire->target;
+ fire->angle = baseFire->angle;
+ fire->momx = baseFire->momx;
+ fire->momy = baseFire->momy;
+ fire->momz = baseFire->momz;
+ fire->damage = 0;
+ fire->health = (i + 1) * 2;
+ P_CheckMissileSpawn(fire);
+ }
+ }
+ }
+ else
+ { // Whirlwind
+ mo = P_SpawnMissile(actor, target, MT_WHIRLWIND);
+ if (mo != NULL)
+ {
+ mo->z -= 32 * FRACUNIT;
+ mo->special1 = (int) target;
+ mo->special2 = 50; // Timer for active sound
+ mo->health = 20 * TICSPERSEC; // Duration
+ S_StartSound(actor, sfx_hedat3);
+ }
+ }
+}
//----------------------------------------------------------------------------
//
@@ -1816,27 +1867,27 @@
//
//----------------------------------------------------------------------------
-void A_WhirlwindSeek(mobj_t *actor)
+void A_WhirlwindSeek(mobj_t * actor)
{
- actor->health -= 3;
- if(actor->health < 0)
- {
- actor->momx = actor->momy = actor->momz = 0;
- P_SetMobjState(actor, mobjinfo[actor->type].deathstate);
- actor->flags &= ~MF_MISSILE;
- return;
- }
- if((actor->special2 -= 3) < 0)
- {
- actor->special2 = 58+(P_Random()&31);
- S_StartSound(actor, sfx_hedat3);
- }
- if(actor->special1
- && (((mobj_t *)(actor->special1))->flags&MF_SHADOW))
- {
- return;
- }
- P_SeekerMissile(actor, ANGLE_1*10, ANGLE_1*30);
+ actor->health -= 3;
+ if (actor->health < 0)
+ {
+ actor->momx = actor->momy = actor->momz = 0;
+ P_SetMobjState(actor, mobjinfo[actor->type].deathstate);
+ actor->flags &= ~MF_MISSILE;
+ return;
+ }
+ if ((actor->special2 -= 3) < 0)
+ {
+ actor->special2 = 58 + (P_Random() & 31);
+ S_StartSound(actor, sfx_hedat3);
+ }
+ if (actor->special1
+ && (((mobj_t *) (actor->special1))->flags & MF_SHADOW))
+ {
+ return;
+ }
+ P_SeekerMissile(actor, ANGLE_1 * 10, ANGLE_1 * 30);
}
//----------------------------------------------------------------------------
@@ -1845,24 +1896,24 @@
//
//----------------------------------------------------------------------------
-void A_HeadIceImpact(mobj_t *ice)
+void A_HeadIceImpact(mobj_t * ice)
{
- int i;
- angle_t angle;
- mobj_t *shard;
+ int i;
+ angle_t angle;
+ mobj_t *shard;
- for(i = 0; i < 8; i++)
- {
- shard = P_SpawnMobj(ice->x, ice->y, ice->z, MT_HEADFX2);
- angle = i*ANG45;
- shard->target = ice->target;
- shard->angle = angle;
- angle >>= ANGLETOFINESHIFT;
- shard->momx = FixedMul(shard->info->speed, finecosine[angle]);
- shard->momy = FixedMul(shard->info->speed, finesine[angle]);
- shard->momz = -.6*FRACUNIT;
- P_CheckMissileSpawn(shard);
- }
+ for (i = 0; i < 8; i++)
+ {
+ shard = P_SpawnMobj(ice->x, ice->y, ice->z, MT_HEADFX2);
+ angle = i * ANG45;
+ shard->target = ice->target;
+ shard->angle = angle;
+ angle >>= ANGLETOFINESHIFT;
+ shard->momx = FixedMul(shard->info->speed, finecosine[angle]);
+ shard->momy = FixedMul(shard->info->speed, finesine[angle]);
+ shard->momz = -.6 * FRACUNIT;
+ P_CheckMissileSpawn(shard);
+ }
}
//----------------------------------------------------------------------------
@@ -1871,15 +1922,15 @@
//
//----------------------------------------------------------------------------
-void A_HeadFireGrow(mobj_t *fire)
+void A_HeadFireGrow(mobj_t * fire)
{
- fire->health--;
- fire->z += 9*FRACUNIT;
- if(fire->health == 0)
- {
- fire->damage = fire->info->damage;
- P_SetMobjState(fire, S_HEADFX3_4);
- }
+ fire->health--;
+ fire->z += 9 * FRACUNIT;
+ if (fire->health == 0)
+ {
+ fire->damage = fire->info->damage;
+ P_SetMobjState(fire, S_HEADFX3_4);
+ }
}
//----------------------------------------------------------------------------
@@ -1888,16 +1939,16 @@
//
//----------------------------------------------------------------------------
-void A_SnakeAttack(mobj_t *actor)
+void A_SnakeAttack(mobj_t * actor)
{
- if(!actor->target)
- {
- P_SetMobjState(actor, S_SNAKE_WALK1);
- return;
- }
- S_StartSound(actor, actor->info->attacksound);
- A_FaceTarget(actor);
- P_SpawnMissile(actor, actor->target, MT_SNAKEPRO_A);
+ if (!actor->target)
+ {
+ P_SetMobjState(actor, S_SNAKE_WALK1);
+ return;
+ }
+ S_StartSound(actor, actor->info->attacksound);
+ A_FaceTarget(actor);
+ P_SpawnMissile(actor, actor->target, MT_SNAKEPRO_A);
}
//----------------------------------------------------------------------------
@@ -1906,16 +1957,16 @@
//
//----------------------------------------------------------------------------
-void A_SnakeAttack2(mobj_t *actor)
+void A_SnakeAttack2(mobj_t * actor)
{
- if(!actor->target)
- {
- P_SetMobjState(actor, S_SNAKE_WALK1);
- return;
- }
- S_StartSound(actor, actor->info->attacksound);
- A_FaceTarget(actor);
- P_SpawnMissile(actor, actor->target, MT_SNAKEPRO_B);
+ if (!actor->target)
+ {
+ P_SetMobjState(actor, S_SNAKE_WALK1);
+ return;
+ }
+ S_StartSound(actor, actor->info->attacksound);
+ A_FaceTarget(actor);
+ P_SpawnMissile(actor, actor->target, MT_SNAKEPRO_B);
}
//----------------------------------------------------------------------------
@@ -1924,20 +1975,20 @@
//
//----------------------------------------------------------------------------
-void A_ClinkAttack(mobj_t *actor)
+void A_ClinkAttack(mobj_t * actor)
{
- int damage;
+ int damage;
- if(!actor->target)
- {
- return;
- }
- S_StartSound(actor, actor->info->attacksound);
- if(P_CheckMeleeRange(actor))
- {
- damage = ((P_Random()%7)+3);
- P_DamageMobj(actor->target, actor, actor, damage);
- }
+ if (!actor->target)
+ {
+ return;
+ }
+ S_StartSound(actor, actor->info->attacksound);
+ if (P_CheckMeleeRange(actor))
+ {
+ damage = ((P_Random() % 7) + 3);
+ P_DamageMobj(actor->target, actor, actor, damage);
+ }
}
//----------------------------------------------------------------------------
@@ -1946,9 +1997,9 @@
//
//----------------------------------------------------------------------------
-void A_GhostOff(mobj_t *actor)
+void A_GhostOff(mobj_t * actor)
{
- actor->flags &= ~MF_SHADOW;
+ actor->flags &= ~MF_SHADOW;
}
//----------------------------------------------------------------------------
@@ -1957,10 +2008,10 @@
//
//----------------------------------------------------------------------------
-void A_WizAtk1(mobj_t *actor)
+void A_WizAtk1(mobj_t * actor)
{
- A_FaceTarget(actor);
- actor->flags &= ~MF_SHADOW;
+ A_FaceTarget(actor);
+ actor->flags &= ~MF_SHADOW;
}
//----------------------------------------------------------------------------
@@ -1969,10 +2020,10 @@
//
//----------------------------------------------------------------------------
-void A_WizAtk2(mobj_t *actor)
+void A_WizAtk2(mobj_t * actor)
{
- A_FaceTarget(actor);
- actor->flags |= MF_SHADOW;
+ A_FaceTarget(actor);
+ actor->flags |= MF_SHADOW;
}
//----------------------------------------------------------------------------
@@ -1981,31 +2032,31 @@
//
//----------------------------------------------------------------------------
-void A_WizAtk3(mobj_t *actor)
+void A_WizAtk3(mobj_t * actor)
{
- mobj_t *mo;
- angle_t angle;
- fixed_t momz;
+ mobj_t *mo;
+ angle_t angle;
+ fixed_t momz;
- actor->flags &= ~MF_SHADOW;
- if(!actor->target)
- {
- return;
- }
- S_StartSound(actor, actor->info->attacksound);
- if(P_CheckMeleeRange(actor))
- {
- P_DamageMobj(actor->target, actor, actor, HITDICE(4));
- return;
- }
- mo = P_SpawnMissile(actor, actor->target, MT_WIZFX1);
- if(mo)
- {
- momz = mo->momz;
- angle = mo->angle;
- P_SpawnMissileAngle(actor, MT_WIZFX1, angle-(ANG45/8), momz);
- P_SpawnMissileAngle(actor, MT_WIZFX1, angle+(ANG45/8), momz);
- }
+ actor->flags &= ~MF_SHADOW;
+ if (!actor->target)
+ {
+ return;
+ }
+ S_StartSound(actor, actor->info->attacksound);
+ if (P_CheckMeleeRange(actor))
+ {
+ P_DamageMobj(actor->target, actor, actor, HITDICE(4));
+ return;
+ }
+ mo = P_SpawnMissile(actor, actor->target, MT_WIZFX1);
+ if (mo)
+ {
+ momz = mo->momz;
+ angle = mo->angle;
+ P_SpawnMissileAngle(actor, MT_WIZFX1, angle - (ANG45 / 8), momz);
+ P_SpawnMissileAngle(actor, MT_WIZFX1, angle + (ANG45 / 8), momz);
+ }
}
//----------------------------------------------------------------------------
@@ -2014,39 +2065,39 @@
//
//----------------------------------------------------------------------------
-void A_Scream(mobj_t *actor)
+void A_Scream(mobj_t * actor)
{
- switch(actor->type)
- {
- case MT_CHICPLAYER:
- case MT_SORCERER1:
- case MT_MINOTAUR:
- // Make boss death sounds full volume
- S_StartSound(NULL, actor->info->deathsound);
- break;
- case MT_PLAYER:
- // Handle the different player death screams
- if(actor->special1 < 10)
- { // Wimpy death sound
- S_StartSound(actor, sfx_plrwdth);
- }
- else if(actor->health > -50)
- { // Normal death sound
- S_StartSound(actor, actor->info->deathsound);
- }
- else if(actor->health > -100)
- { // Crazy death sound
- S_StartSound(actor, sfx_plrcdth);
- }
- else
- { // Extreme death sound
- S_StartSound(actor, sfx_gibdth);
- }
- break;
- default:
- S_StartSound(actor, actor->info->deathsound);
- break;
- }
+ switch (actor->type)
+ {
+ case MT_CHICPLAYER:
+ case MT_SORCERER1:
+ case MT_MINOTAUR:
+ // Make boss death sounds full volume
+ S_StartSound(NULL, actor->info->deathsound);
+ break;
+ case MT_PLAYER:
+ // Handle the different player death screams
+ if (actor->special1 < 10)
+ { // Wimpy death sound
+ S_StartSound(actor, sfx_plrwdth);
+ }
+ else if (actor->health > -50)
+ { // Normal death sound
+ S_StartSound(actor, actor->info->deathsound);
+ }
+ else if (actor->health > -100)
+ { // Crazy death sound
+ S_StartSound(actor, sfx_plrcdth);
+ }
+ else
+ { // Extreme death sound
+ S_StartSound(actor, sfx_gibdth);
+ }
+ break;
+ default:
+ S_StartSound(actor, actor->info->deathsound);
+ break;
+ }
}
//---------------------------------------------------------------------------
@@ -2055,21 +2106,21 @@
//
//---------------------------------------------------------------------------
-void P_DropItem(mobj_t *source, mobjtype_t type, int special, int chance)
+void P_DropItem(mobj_t * source, mobjtype_t type, int special, int chance)
{
- mobj_t *mo;
+ mobj_t *mo;
- if(P_Random() > chance)
- {
- return;
- }
- mo = P_SpawnMobj(source->x, source->y,
- source->z+(source->height>>1), type);
- mo->momx = (P_Random()-P_Random())<<8;
- mo->momy = (P_Random()-P_Random())<<8;
- mo->momz = FRACUNIT*5+(P_Random()<<10);
- mo->flags |= MF_DROPPED;
- mo->health = special;
+ if (P_Random() > chance)
+ {
+ return;
+ }
+ mo = P_SpawnMobj(source->x, source->y,
+ source->z + (source->height >> 1), type);
+ mo->momx = (P_Random() - P_Random()) << 8;
+ mo->momy = (P_Random() - P_Random()) << 8;
+ mo->momz = FRACUNIT * 5 + (P_Random() << 10);
+ mo->flags |= MF_DROPPED;
+ mo->health = special;
}
//----------------------------------------------------------------------------
@@ -2078,46 +2129,46 @@
//
//----------------------------------------------------------------------------
-void A_NoBlocking(mobj_t *actor)
+void A_NoBlocking(mobj_t * actor)
{
- actor->flags &= ~MF_SOLID;
- // Check for monsters dropping things
- switch(actor->type)
- {
- case MT_MUMMY:
- case MT_MUMMYLEADER:
- case MT_MUMMYGHOST:
- case MT_MUMMYLEADERGHOST:
- P_DropItem(actor, MT_AMGWNDWIMPY, 3, 84);
- break;
- case MT_KNIGHT:
- case MT_KNIGHTGHOST:
- P_DropItem(actor, MT_AMCBOWWIMPY, 5, 84);
- break;
- case MT_WIZARD:
- P_DropItem(actor, MT_AMBLSRWIMPY, 10, 84);
- P_DropItem(actor, MT_ARTITOMEOFPOWER, 0, 4);
- break;
- case MT_HEAD:
- P_DropItem(actor, MT_AMBLSRWIMPY, 10, 84);
- P_DropItem(actor, MT_ARTIEGG, 0, 51);
- break;
- case MT_BEAST:
- P_DropItem(actor, MT_AMCBOWWIMPY, 10, 84);
- break;
- case MT_CLINK:
- P_DropItem(actor, MT_AMSKRDWIMPY, 20, 84);
- break;
- case MT_SNAKE:
- P_DropItem(actor, MT_AMPHRDWIMPY, 5, 84);
- break;
- case MT_MINOTAUR:
- P_DropItem(actor, MT_ARTISUPERHEAL, 0, 51);
- P_DropItem(actor, MT_AMPHRDWIMPY, 10, 84);
- break;
- default:
- break;
- }
+ actor->flags &= ~MF_SOLID;
+ // Check for monsters dropping things
+ switch (actor->type)
+ {
+ case MT_MUMMY:
+ case MT_MUMMYLEADER:
+ case MT_MUMMYGHOST:
+ case MT_MUMMYLEADERGHOST:
+ P_DropItem(actor, MT_AMGWNDWIMPY, 3, 84);
+ break;
+ case MT_KNIGHT:
+ case MT_KNIGHTGHOST:
+ P_DropItem(actor, MT_AMCBOWWIMPY, 5, 84);
+ break;
+ case MT_WIZARD:
+ P_DropItem(actor, MT_AMBLSRWIMPY, 10, 84);
+ P_DropItem(actor, MT_ARTITOMEOFPOWER, 0, 4);
+ break;
+ case MT_HEAD:
+ P_DropItem(actor, MT_AMBLSRWIMPY, 10, 84);
+ P_DropItem(actor, MT_ARTIEGG, 0, 51);
+ break;
+ case MT_BEAST:
+ P_DropItem(actor, MT_AMCBOWWIMPY, 10, 84);
+ break;
+ case MT_CLINK:
+ P_DropItem(actor, MT_AMSKRDWIMPY, 20, 84);
+ break;
+ case MT_SNAKE:
+ P_DropItem(actor, MT_AMPHRDWIMPY, 5, 84);
+ break;
+ case MT_MINOTAUR:
+ P_DropItem(actor, MT_ARTISUPERHEAL, 0, 51);
+ P_DropItem(actor, MT_AMPHRDWIMPY, 10, 84);
+ break;
+ default:
+ break;
+ }
}
//----------------------------------------------------------------------------
@@ -2128,28 +2179,28 @@
//
//----------------------------------------------------------------------------
-void A_Explode(mobj_t *actor)
+void A_Explode(mobj_t * actor)
{
- int damage;
+ int damage;
- damage = 128;
- switch(actor->type)
- {
- case MT_FIREBOMB: // Time Bombs
- actor->z += 32*FRACUNIT;
- actor->flags &= ~MF_SHADOW;
- break;
- case MT_MNTRFX2: // Minotaur floor fire
- damage = 24;
- break;
- case MT_SOR2FX1: // D'Sparil missile
- damage = 80+(P_Random()&31);
- break;
- default:
- break;
- }
- P_RadiusAttack(actor, actor->target, damage);
- P_HitFloor(actor);
+ damage = 128;
+ switch (actor->type)
+ {
+ case MT_FIREBOMB: // Time Bombs
+ actor->z += 32 * FRACUNIT;
+ actor->flags &= ~MF_SHADOW;
+ break;
+ case MT_MNTRFX2: // Minotaur floor fire
+ damage = 24;
+ break;
+ case MT_SOR2FX1: // D'Sparil missile
+ damage = 80 + (P_Random() & 31);
+ break;
+ default:
+ break;
+ }
+ P_RadiusAttack(actor, actor->target, damage);
+ P_HitFloor(actor);
}
//----------------------------------------------------------------------------
@@ -2158,28 +2209,28 @@
//
//----------------------------------------------------------------------------
-void A_PodPain(mobj_t *actor)
+void A_PodPain(mobj_t * actor)
{
- int i;
- int count;
- int chance;
- mobj_t *goo;
+ int i;
+ int count;
+ int chance;
+ mobj_t *goo;
- chance = P_Random();
- if(chance < 128)
- {
- return;
- }
- count = chance > 240 ? 2 : 1;
- for(i = 0; i < count; i++)
- {
- goo = P_SpawnMobj(actor->x, actor->y,
- actor->z+48*FRACUNIT, MT_PODGOO);
- goo->target = actor;
- goo->momx = (P_Random()-P_Random())<<9;
- goo->momy = (P_Random()-P_Random())<<9;
- goo->momz = FRACUNIT/2+(P_Random()<<9);
- }
+ chance = P_Random();
+ if (chance < 128)
+ {
+ return;
+ }
+ count = chance > 240 ? 2 : 1;
+ for (i = 0; i < count; i++)
+ {
+ goo = P_SpawnMobj(actor->x, actor->y,
+ actor->z + 48 * FRACUNIT, MT_PODGOO);
+ goo->target = actor;
+ goo->momx = (P_Random() - P_Random()) << 9;
+ goo->momy = (P_Random() - P_Random()) << 9;
+ goo->momz = FRACUNIT / 2 + (P_Random() << 9);
+ }
}
//----------------------------------------------------------------------------
@@ -2188,18 +2239,18 @@
//
//----------------------------------------------------------------------------
-void A_RemovePod(mobj_t *actor)
+void A_RemovePod(mobj_t * actor)
{
- mobj_t *mo;
+ mobj_t *mo;
- if(actor->special2)
- {
- mo = (mobj_t *)actor->special2;
- if(mo->special1 > 0)
- {
- mo->special1--;
- }
- }
+ if (actor->special2)
+ {
+ mo = (mobj_t *) actor->special2;
+ if (mo->special1 > 0)
+ {
+ mo->special1--;
+ }
+ }
}
//----------------------------------------------------------------------------
@@ -2210,32 +2261,32 @@
#define MAX_GEN_PODS 16
-void A_MakePod(mobj_t *actor)
+void A_MakePod(mobj_t * actor)
{
- mobj_t *mo;
- fixed_t x;
- fixed_t y;
- fixed_t z;
+ mobj_t *mo;
+ fixed_t x;
+ fixed_t y;
+ fixed_t z;
- if(actor->special1 == MAX_GEN_PODS)
- { // Too many generated pods
- return;
- }
- x = actor->x;
- y = actor->y;
- z = actor->z;
- mo = P_SpawnMobj(x, y, ONFLOORZ, MT_POD);
- if(P_CheckPosition(mo, x, y) == false)
- { // Didn't fit
- P_RemoveMobj(mo);
- return;
- }
- P_SetMobjState(mo, S_POD_GROW1);
- P_ThrustMobj(mo, P_Random()<<24, (fixed_t)(4.5*FRACUNIT));
- S_StartSound(mo, sfx_newpod);
- actor->special1++; // Increment generated pod count
- mo->special2 = (int)actor; // Link the generator to the pod
- return;
+ if (actor->special1 == MAX_GEN_PODS)
+ { // Too many generated pods
+ return;
+ }
+ x = actor->x;
+ y = actor->y;
+ z = actor->z;
+ mo = P_SpawnMobj(x, y, ONFLOORZ, MT_POD);
+ if (P_CheckPosition(mo, x, y) == false)
+ { // Didn't fit
+ P_RemoveMobj(mo);
+ return;
+ }
+ P_SetMobjState(mo, S_POD_GROW1);
+ P_ThrustMobj(mo, P_Random() << 24, (fixed_t) (4.5 * FRACUNIT));
+ S_StartSound(mo, sfx_newpod);
+ actor->special1++; // Increment generated pod count
+ mo->special2 = (int) actor; // Link the generator to the pod
+ return;
}
//----------------------------------------------------------------------------
@@ -2248,22 +2299,21 @@
void P_Massacre(void)
{
- mobj_t *mo;
- thinker_t *think;
+ mobj_t *mo;
+ thinker_t *think;
- for(think = thinkercap.next; think != &thinkercap;
- think = think->next)
- {
- if(think->function != P_MobjThinker)
- { // Not a mobj thinker
- continue;
- }
- mo = (mobj_t *)think;
- if((mo->flags&MF_COUNTKILL) && (mo->health > 0))
- {
- P_DamageMobj(mo, NULL, NULL, 10000);
- }
- }
+ for (think = thinkercap.next; think != &thinkercap; think = think->next)
+ {
+ if (think->function != P_MobjThinker)
+ { // Not a mobj thinker
+ continue;
+ }
+ mo = (mobj_t *) think;
+ if ((mo->flags & MF_COUNTKILL) && (mo->health > 0))
+ {
+ P_DamageMobj(mo, NULL, NULL, 10000);
+ }
+ }
}
//----------------------------------------------------------------------------
@@ -2274,48 +2324,47 @@
//
//----------------------------------------------------------------------------
-void A_BossDeath(mobj_t *actor)
+void A_BossDeath(mobj_t * actor)
{
- mobj_t *mo;
- thinker_t *think;
- line_t dummyLine;
- static mobjtype_t bossType[6] =
- {
- MT_HEAD,
- MT_MINOTAUR,
- MT_SORCERER2,
- MT_HEAD,
- MT_MINOTAUR,
- -1
- };
+ mobj_t *mo;
+ thinker_t *think;
+ line_t dummyLine;
+ static mobjtype_t bossType[6] = {
+ MT_HEAD,
+ MT_MINOTAUR,
+ MT_SORCERER2,
+ MT_HEAD,
+ MT_MINOTAUR,
+ -1
+ };
- if(gamemap != 8)
- { // Not a boss level
- return;
- }
- if(actor->type != bossType[gameepisode-1])
- { // Not considered a boss in this episode
- return;
- }
- // Make sure all bosses are dead
- for(think = thinkercap.next; think != &thinkercap; think = think->next)
- {
- if(think->function != P_MobjThinker)
- { // Not a mobj thinker
- continue;
- }
- mo = (mobj_t *)think;
- if((mo != actor) && (mo->type == actor->type) && (mo->health > 0))
- { // Found a living boss
- return;
- }
- }
- if(gameepisode > 1)
- { // Kill any remaining monsters
- P_Massacre();
- }
- dummyLine.tag = 666;
- EV_DoFloor(&dummyLine, lowerFloor);
+ if (gamemap != 8)
+ { // Not a boss level
+ return;
+ }
+ if (actor->type != bossType[gameepisode - 1])
+ { // Not considered a boss in this episode
+ return;
+ }
+ // Make sure all bosses are dead
+ for (think = thinkercap.next; think != &thinkercap; think = think->next)
+ {
+ if (think->function != P_MobjThinker)
+ { // Not a mobj thinker
+ continue;
+ }
+ mo = (mobj_t *) think;
+ if ((mo != actor) && (mo->type == actor->type) && (mo->health > 0))
+ { // Found a living boss
+ return;
+ }
+ }
+ if (gameepisode > 1)
+ { // Kill any remaining monsters
+ P_Massacre();
+ }
+ dummyLine.tag = 666;
+ EV_DoFloor(&dummyLine, lowerFloor);
}
//----------------------------------------------------------------------------
@@ -2324,22 +2373,22 @@
//
//----------------------------------------------------------------------------
-void A_ESound(mobj_t *mo)
+void A_ESound(mobj_t * mo)
{
- int sound;
+ int sound;
- switch(mo->type)
- {
- case MT_SOUNDWATERFALL:
- sound = sfx_waterfl;
- break;
- case MT_SOUNDWIND:
- sound = sfx_wind;
- break;
- default:
- break;
- }
- S_StartSound(mo, sound);
+ switch (mo->type)
+ {
+ case MT_SOUNDWATERFALL:
+ sound = sfx_waterfl;
+ break;
+ case MT_SOUNDWIND:
+ sound = sfx_wind;
+ break;
+ default:
+ break;
+ }
+ S_StartSound(mo, sound);
}
//----------------------------------------------------------------------------
@@ -2348,14 +2397,14 @@
//
//----------------------------------------------------------------------------
-void A_SpawnTeleGlitter(mobj_t *actor)
+void A_SpawnTeleGlitter(mobj_t * actor)
{
- mobj_t *mo;
+ mobj_t *mo;
- mo = P_SpawnMobj(actor->x+((P_Random()&31)-16)*FRACUNIT,
- actor->y+((P_Random()&31)-16)*FRACUNIT,
- actor->subsector->sector->floorheight, MT_TELEGLITTER);
- mo->momz = FRACUNIT/4;
+ mo = P_SpawnMobj(actor->x + ((P_Random() & 31) - 16) * FRACUNIT,
+ actor->y + ((P_Random() & 31) - 16) * FRACUNIT,
+ actor->subsector->sector->floorheight, MT_TELEGLITTER);
+ mo->momz = FRACUNIT / 4;
}
//----------------------------------------------------------------------------
@@ -2364,14 +2413,14 @@
//
//----------------------------------------------------------------------------
-void A_SpawnTeleGlitter2(mobj_t *actor)
+void A_SpawnTeleGlitter2(mobj_t * actor)
{
- mobj_t *mo;
+ mobj_t *mo;
- mo = P_SpawnMobj(actor->x+((P_Random()&31)-16)*FRACUNIT,
- actor->y+((P_Random()&31)-16)*FRACUNIT,
- actor->subsector->sector->floorheight, MT_TELEGLITTER2);
- mo->momz = FRACUNIT/4;
+ mo = P_SpawnMobj(actor->x + ((P_Random() & 31) - 16) * FRACUNIT,
+ actor->y + ((P_Random() & 31) - 16) * FRACUNIT,
+ actor->subsector->sector->floorheight, MT_TELEGLITTER2);
+ mo->momz = FRACUNIT / 4;
}
//----------------------------------------------------------------------------
@@ -2380,12 +2429,12 @@
//
//----------------------------------------------------------------------------
-void A_AccTeleGlitter(mobj_t *actor)
+void A_AccTeleGlitter(mobj_t * actor)
{
- if(++actor->health > 35)
- {
- actor->momz += actor->momz/2;
- }
+ if (++actor->health > 35)
+ {
+ actor->momz += actor->momz / 2;
+ }
}
//----------------------------------------------------------------------------
@@ -2394,28 +2443,28 @@
//
//----------------------------------------------------------------------------
-void A_InitKeyGizmo(mobj_t *gizmo)
+void A_InitKeyGizmo(mobj_t * gizmo)
{
- mobj_t *mo;
- statenum_t state;
+ mobj_t *mo;
+ statenum_t state;
- switch(gizmo->type)
- {
- case MT_KEYGIZMOBLUE:
- state = S_KGZ_BLUEFLOAT1;
- break;
- case MT_KEYGIZMOGREEN:
- state = S_KGZ_GREENFLOAT1;
- break;
- case MT_KEYGIZMOYELLOW:
- state = S_KGZ_YELLOWFLOAT1;
- break;
- default:
- break;
- }
- mo = P_SpawnMobj(gizmo->x, gizmo->y, gizmo->z+60*FRACUNIT,
- MT_KEYGIZMOFLOAT);
- P_SetMobjState(mo, state);
+ switch (gizmo->type)
+ {
+ case MT_KEYGIZMOBLUE:
+ state = S_KGZ_BLUEFLOAT1;
+ break;
+ case MT_KEYGIZMOGREEN:
+ state = S_KGZ_GREENFLOAT1;
+ break;
+ case MT_KEYGIZMOYELLOW:
+ state = S_KGZ_YELLOWFLOAT1;
+ break;
+ default:
+ break;
+ }
+ mo = P_SpawnMobj(gizmo->x, gizmo->y, gizmo->z + 60 * FRACUNIT,
+ MT_KEYGIZMOFLOAT);
+ P_SetMobjState(mo, state);
}
//----------------------------------------------------------------------------
@@ -2424,9 +2473,9 @@
//
//----------------------------------------------------------------------------
-void A_VolcanoSet(mobj_t *volcano)
+void A_VolcanoSet(mobj_t * volcano)
{
- volcano->tics = 105+(P_Random()&127);
+ volcano->tics = 105 + (P_Random() & 127);
}
//----------------------------------------------------------------------------
@@ -2435,28 +2484,27 @@
//
//----------------------------------------------------------------------------
-void A_VolcanoBlast(mobj_t *volcano)
+void A_VolcanoBlast(mobj_t * volcano)
{
- int i;
- int count;
- mobj_t *blast;
- angle_t angle;
+ int i;
+ int count;
+ mobj_t *blast;
+ angle_t angle;
- count = 1+(P_Random()%3);
- for(i = 0; i < count; i++)
- {
- blast = P_SpawnMobj(volcano->x, volcano->y,
- volcano->z+44*FRACUNIT, MT_VOLCANOBLAST); // MT_VOLCANOBLAST
- blast->target = volcano;
- angle = P_Random()<<24;
- blast->angle = angle;
- angle >>= ANGLETOFINESHIFT;
- blast->momx = FixedMul(1*FRACUNIT, finecosine[angle]);
- blast->momy = FixedMul(1*FRACUNIT, finesine[angle]);
- blast->momz = (2.5*FRACUNIT)+(P_Random()<<10);
- S_StartSound(blast, sfx_volsht);
- P_CheckMissileSpawn(blast);
- }
+ count = 1 + (P_Random() % 3);
+ for (i = 0; i < count; i++)
+ {
+ blast = P_SpawnMobj(volcano->x, volcano->y, volcano->z + 44 * FRACUNIT, MT_VOLCANOBLAST); // MT_VOLCANOBLAST
+ blast->target = volcano;
+ angle = P_Random() << 24;
+ blast->angle = angle;
+ angle >>= ANGLETOFINESHIFT;
+ blast->momx = FixedMul(1 * FRACUNIT, finecosine[angle]);
+ blast->momy = FixedMul(1 * FRACUNIT, finesine[angle]);
+ blast->momz = (2.5 * FRACUNIT) + (P_Random() << 10);
+ S_StartSound(blast, sfx_volsht);
+ P_CheckMissileSpawn(blast);
+ }
}
//----------------------------------------------------------------------------
@@ -2465,32 +2513,32 @@
//
//----------------------------------------------------------------------------
-void A_VolcBallImpact(mobj_t *ball)
+void A_VolcBallImpact(mobj_t * ball)
{
- int i;
- mobj_t *tiny;
- angle_t angle;
+ int i;
+ mobj_t *tiny;
+ angle_t angle;
- if(ball->z <= ball->floorz)
- {
- ball->flags |= MF_NOGRAVITY;
- ball->flags2 &= ~MF2_LOGRAV;
- ball->z += 28*FRACUNIT;
- //ball->momz = 3*FRACUNIT;
- }
- P_RadiusAttack(ball, ball->target, 25);
- for(i = 0; i < 4; i++)
- {
- tiny = P_SpawnMobj(ball->x, ball->y, ball->z, MT_VOLCANOTBLAST);
- tiny->target = ball;
- angle = i*ANG90;
- tiny->angle = angle;
- angle >>= ANGLETOFINESHIFT;
- tiny->momx = FixedMul(FRACUNIT*.7, finecosine[angle]);
- tiny->momy = FixedMul(FRACUNIT*.7, finesine[angle]);
- tiny->momz = FRACUNIT+(P_Random()<<9);
- P_CheckMissileSpawn(tiny);
- }
+ if (ball->z <= ball->floorz)
+ {
+ ball->flags |= MF_NOGRAVITY;
+ ball->flags2 &= ~MF2_LOGRAV;
+ ball->z += 28 * FRACUNIT;
+ //ball->momz = 3*FRACUNIT;
+ }
+ P_RadiusAttack(ball, ball->target, 25);
+ for (i = 0; i < 4; i++)
+ {
+ tiny = P_SpawnMobj(ball->x, ball->y, ball->z, MT_VOLCANOTBLAST);
+ tiny->target = ball;
+ angle = i * ANG90;
+ tiny->angle = angle;
+ angle >>= ANGLETOFINESHIFT;
+ tiny->momx = FixedMul(FRACUNIT * .7, finecosine[angle]);
+ tiny->momy = FixedMul(FRACUNIT * .7, finesine[angle]);
+ tiny->momz = FRACUNIT + (P_Random() << 9);
+ P_CheckMissileSpawn(tiny);
+ }
}
//----------------------------------------------------------------------------
@@ -2499,27 +2547,27 @@
//
//----------------------------------------------------------------------------
-void A_SkullPop(mobj_t *actor)
+void A_SkullPop(mobj_t * actor)
{
- mobj_t *mo;
- player_t *player;
+ mobj_t *mo;
+ player_t *player;
- actor->flags &= ~MF_SOLID;
- mo = P_SpawnMobj(actor->x, actor->y, actor->z+48*FRACUNIT,
- MT_BLOODYSKULL);
- //mo->target = actor;
- mo->momx = (P_Random()-P_Random())<<9;
- mo->momy = (P_Random()-P_Random())<<9;
- mo->momz = FRACUNIT*2+(P_Random()<<6);
- // Attach player mobj to bloody skull
- player = actor->player;
- actor->player = NULL;
- mo->player = player;
- mo->health = actor->health;
- mo->angle = actor->angle;
- player->mo = mo;
- player->lookdir = 0;
- player->damagecount = 32;
+ actor->flags &= ~MF_SOLID;
+ mo = P_SpawnMobj(actor->x, actor->y, actor->z + 48 * FRACUNIT,
+ MT_BLOODYSKULL);
+ //mo->target = actor;
+ mo->momx = (P_Random() - P_Random()) << 9;
+ mo->momy = (P_Random() - P_Random()) << 9;
+ mo->momz = FRACUNIT * 2 + (P_Random() << 6);
+ // Attach player mobj to bloody skull
+ player = actor->player;
+ actor->player = NULL;
+ mo->player = player;
+ mo->health = actor->health;
+ mo->angle = actor->angle;
+ player->mo = mo;
+ player->lookdir = 0;
+ player->damagecount = 32;
}
//----------------------------------------------------------------------------
@@ -2528,12 +2576,12 @@
//
//----------------------------------------------------------------------------
-void A_CheckSkullFloor(mobj_t *actor)
+void A_CheckSkullFloor(mobj_t * actor)
{
- if(actor->z <= actor->floorz)
- {
- P_SetMobjState(actor, S_BLOODYSKULLX1);
- }
+ if (actor->z <= actor->floorz)
+ {
+ P_SetMobjState(actor, S_BLOODYSKULLX1);
+ }
}
//----------------------------------------------------------------------------
@@ -2542,12 +2590,12 @@
//
//----------------------------------------------------------------------------
-void A_CheckSkullDone(mobj_t *actor)
+void A_CheckSkullDone(mobj_t * actor)
{
- if(actor->special2 == 666)
- {
- P_SetMobjState(actor, S_BLOODYSKULLX2);
- }
+ if (actor->special2 == 666)
+ {
+ P_SetMobjState(actor, S_BLOODYSKULLX2);
+ }
}
//----------------------------------------------------------------------------
@@ -2556,12 +2604,12 @@
//
//----------------------------------------------------------------------------
-void A_CheckBurnGone(mobj_t *actor)
+void A_CheckBurnGone(mobj_t * actor)
{
- if(actor->special2 == 666)
- {
- P_SetMobjState(actor, S_PLAY_FDTH20);
- }
+ if (actor->special2 == 666)
+ {
+ P_SetMobjState(actor, S_PLAY_FDTH20);
+ }
}
//----------------------------------------------------------------------------
@@ -2570,14 +2618,14 @@
//
//----------------------------------------------------------------------------
-void A_FreeTargMobj(mobj_t *mo)
+void A_FreeTargMobj(mobj_t * mo)
{
- mo->momx = mo->momy = mo->momz = 0;
- mo->z = mo->ceilingz+4*FRACUNIT;
- mo->flags &= ~(MF_SHOOTABLE|MF_FLOAT|MF_SKULLFLY|MF_SOLID);
- mo->flags |= MF_CORPSE|MF_DROPOFF|MF_NOGRAVITY;
- mo->flags2 &= ~(MF2_PASSMOBJ|MF2_LOGRAV);
- mo->player = NULL;
+ mo->momx = mo->momy = mo->momz = 0;
+ mo->z = mo->ceilingz + 4 * FRACUNIT;
+ mo->flags &= ~(MF_SHOOTABLE | MF_FLOAT | MF_SKULLFLY | MF_SOLID);
+ mo->flags |= MF_CORPSE | MF_DROPOFF | MF_NOGRAVITY;
+ mo->flags2 &= ~(MF2_PASSMOBJ | MF2_LOGRAV);
+ mo->player = NULL;
}
//----------------------------------------------------------------------------
@@ -2590,14 +2638,14 @@
mobj_t *bodyque[BODYQUESIZE];
int bodyqueslot;
-void A_AddPlayerCorpse(mobj_t *actor)
+void A_AddPlayerCorpse(mobj_t * actor)
{
- if(bodyqueslot >= BODYQUESIZE)
- { // Too many player corpses - remove an old one
- P_RemoveMobj(bodyque[bodyqueslot%BODYQUESIZE]);
- }
- bodyque[bodyqueslot%BODYQUESIZE] = actor;
- bodyqueslot++;
+ if (bodyqueslot >= BODYQUESIZE)
+ { // Too many player corpses - remove an old one
+ P_RemoveMobj(bodyque[bodyqueslot % BODYQUESIZE]);
+ }
+ bodyque[bodyqueslot % BODYQUESIZE] = actor;
+ bodyqueslot++;
}
//----------------------------------------------------------------------------
@@ -2606,9 +2654,9 @@
//
//----------------------------------------------------------------------------
-void A_FlameSnd(mobj_t *actor)
+void A_FlameSnd(mobj_t * actor)
{
- S_StartSound(actor, sfx_hedat1); // Burn sound
+ S_StartSound(actor, sfx_hedat1); // Burn sound
}
//----------------------------------------------------------------------------
@@ -2617,10 +2665,10 @@
//
//----------------------------------------------------------------------------
-void A_HideThing(mobj_t *actor)
+void A_HideThing(mobj_t * actor)
{
- //P_UnsetThingPosition(actor);
- actor->flags2 |= MF2_DONTDRAW;
+ //P_UnsetThingPosition(actor);
+ actor->flags2 |= MF2_DONTDRAW;
}
//----------------------------------------------------------------------------
@@ -2629,8 +2677,8 @@
//
//----------------------------------------------------------------------------
-void A_UnHideThing(mobj_t *actor)
+void A_UnHideThing(mobj_t * actor)
{
- //P_SetThingPosition(actor);
- actor->flags2 &= ~MF2_DONTDRAW;
+ //P_SetThingPosition(actor);
+ actor->flags2 &= ~MF2_DONTDRAW;
}
--- a/src/heretic/p_floor.c
+++ b/src/heretic/p_floor.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
#include "DoomDef.h"
#include "P_local.h"
#include "soundst.h"
@@ -5,7 +27,7 @@
//==================================================================
//==================================================================
//
-// FLOORS
+// FLOORS
//
//==================================================================
//==================================================================
@@ -14,432 +36,431 @@
//==================================================================
//
-// Move a plane (floor or ceiling) and check for crushing
+// Move a plane (floor or ceiling) and check for crushing
//
//==================================================================
-result_e T_MovePlane(sector_t *sector,fixed_t speed,
- fixed_t dest,boolean crush,int floorOrCeiling,int direction)
+result_e T_MovePlane(sector_t * sector, fixed_t speed,
+ fixed_t dest, boolean crush, int floorOrCeiling,
+ int direction)
{
- boolean flag;
- fixed_t lastpos;
-
- switch(floorOrCeiling)
- {
- case 0: // FLOOR
- switch(direction)
- {
- case -1: // DOWN
- if (sector->floorheight - speed < dest)
- {
- lastpos = sector->floorheight;
- sector->floorheight = dest;
- flag = P_ChangeSector(sector,crush);
- if (flag == true)
- {
- sector->floorheight =lastpos;
- P_ChangeSector(sector,crush);
- //return crushed;
- }
- return pastdest;
- }
- else
- {
- lastpos = sector->floorheight;
- sector->floorheight -= speed;
- flag = P_ChangeSector(sector,crush);
- if (flag == true)
- {
- sector->floorheight = lastpos;
- P_ChangeSector(sector,crush);
- return crushed;
- }
- }
- break;
-
- case 1: // UP
- if (sector->floorheight + speed > dest)
- {
- lastpos = sector->floorheight;
- sector->floorheight = dest;
- flag = P_ChangeSector(sector,crush);
- if (flag == true)
- {
- sector->floorheight = lastpos;
- P_ChangeSector(sector,crush);
- //return crushed;
- }
- return pastdest;
- }
- else // COULD GET CRUSHED
- {
- lastpos = sector->floorheight;
- sector->floorheight += speed;
- flag = P_ChangeSector(sector,crush);
- if (flag == true)
- {
- if (crush == true)
- return crushed;
- sector->floorheight = lastpos;
- P_ChangeSector(sector,crush);
- return crushed;
- }
- }
- break;
- }
- break;
-
- case 1: // CEILING
- switch(direction)
- {
- case -1: // DOWN
- if (sector->ceilingheight - speed < dest)
- {
- lastpos = sector->ceilingheight;
- sector->ceilingheight = dest;
- flag = P_ChangeSector(sector,crush);
- if (flag == true)
- {
- sector->ceilingheight = lastpos;
- P_ChangeSector(sector,crush);
- //return crushed;
- }
- return pastdest;
- }
- else // COULD GET CRUSHED
- {
- lastpos = sector->ceilingheight;
- sector->ceilingheight -= speed;
- flag = P_ChangeSector(sector,crush);
- if (flag == true)
- {
- if (crush == true)
- return crushed;
- sector->ceilingheight = lastpos;
- P_ChangeSector(sector,crush);
- return crushed;
- }
- }
- break;
-
- case 1: // UP
- if (sector->ceilingheight + speed > dest)
- {
- lastpos = sector->ceilingheight;
- sector->ceilingheight = dest;
- flag = P_ChangeSector(sector,crush);
- if (flag == true)
- {
- sector->ceilingheight = lastpos;
- P_ChangeSector(sector,crush);
- //return crushed;
- }
- return pastdest;
- }
- else
- {
- lastpos = sector->ceilingheight;
- sector->ceilingheight += speed;
- flag = P_ChangeSector(sector,crush);
- #if 0
- if (flag == true)
- {
- sector->ceilingheight = lastpos;
- P_ChangeSector(sector,crush);
- return crushed;
- }
- #endif
- }
- break;
- }
- break;
-
- }
- return ok;
+ boolean flag;
+ fixed_t lastpos;
+
+ switch (floorOrCeiling)
+ {
+ case 0: // FLOOR
+ switch (direction)
+ {
+ case -1: // DOWN
+ if (sector->floorheight - speed < dest)
+ {
+ lastpos = sector->floorheight;
+ sector->floorheight = dest;
+ flag = P_ChangeSector(sector, crush);
+ if (flag == true)
+ {
+ sector->floorheight = lastpos;
+ P_ChangeSector(sector, crush);
+ //return crushed;
+ }
+ return pastdest;
+ }
+ else
+ {
+ lastpos = sector->floorheight;
+ sector->floorheight -= speed;
+ flag = P_ChangeSector(sector, crush);
+ if (flag == true)
+ {
+ sector->floorheight = lastpos;
+ P_ChangeSector(sector, crush);
+ return crushed;
+ }
+ }
+ break;
+
+ case 1: // UP
+ if (sector->floorheight + speed > dest)
+ {
+ lastpos = sector->floorheight;
+ sector->floorheight = dest;
+ flag = P_ChangeSector(sector, crush);
+ if (flag == true)
+ {
+ sector->floorheight = lastpos;
+ P_ChangeSector(sector, crush);
+ //return crushed;
+ }
+ return pastdest;
+ }
+ else // COULD GET CRUSHED
+ {
+ lastpos = sector->floorheight;
+ sector->floorheight += speed;
+ flag = P_ChangeSector(sector, crush);
+ if (flag == true)
+ {
+ if (crush == true)
+ return crushed;
+ sector->floorheight = lastpos;
+ P_ChangeSector(sector, crush);
+ return crushed;
+ }
+ }
+ break;
+ }
+ break;
+
+ case 1: // CEILING
+ switch (direction)
+ {
+ case -1: // DOWN
+ if (sector->ceilingheight - speed < dest)
+ {
+ lastpos = sector->ceilingheight;
+ sector->ceilingheight = dest;
+ flag = P_ChangeSector(sector, crush);
+ if (flag == true)
+ {
+ sector->ceilingheight = lastpos;
+ P_ChangeSector(sector, crush);
+ //return crushed;
+ }
+ return pastdest;
+ }
+ else // COULD GET CRUSHED
+ {
+ lastpos = sector->ceilingheight;
+ sector->ceilingheight -= speed;
+ flag = P_ChangeSector(sector, crush);
+ if (flag == true)
+ {
+ if (crush == true)
+ return crushed;
+ sector->ceilingheight = lastpos;
+ P_ChangeSector(sector, crush);
+ return crushed;
+ }
+ }
+ break;
+
+ case 1: // UP
+ if (sector->ceilingheight + speed > dest)
+ {
+ lastpos = sector->ceilingheight;
+ sector->ceilingheight = dest;
+ flag = P_ChangeSector(sector, crush);
+ if (flag == true)
+ {
+ sector->ceilingheight = lastpos;
+ P_ChangeSector(sector, crush);
+ //return crushed;
+ }
+ return pastdest;
+ }
+ else
+ {
+ lastpos = sector->ceilingheight;
+ sector->ceilingheight += speed;
+ flag = P_ChangeSector(sector, crush);
+#if 0
+ if (flag == true)
+ {
+ sector->ceilingheight = lastpos;
+ P_ChangeSector(sector, crush);
+ return crushed;
+ }
+#endif
+ }
+ break;
+ }
+ break;
+
+ }
+ return ok;
}
//==================================================================
//
-// MOVE A FLOOR TO IT'S DESTINATION (UP OR DOWN)
+// MOVE A FLOOR TO IT'S DESTINATION (UP OR DOWN)
//
//==================================================================
-void T_MoveFloor(floormove_t *floor)
+void T_MoveFloor(floormove_t * floor)
{
- result_e res;
+ result_e res;
- res = T_MovePlane(floor->sector,floor->speed,
- floor->floordestheight,floor->crush,0,floor->direction);
- if(!(leveltime&7))
- {
- S_StartSound((mobj_t *)&floor->sector->soundorg, sfx_dormov);
- }
+ res = T_MovePlane(floor->sector, floor->speed,
+ floor->floordestheight, floor->crush, 0,
+ floor->direction);
+ if (!(leveltime & 7))
+ {
+ S_StartSound((mobj_t *) & floor->sector->soundorg, sfx_dormov);
+ }
- if (res == pastdest)
- {
- floor->sector->specialdata = NULL;
- if(floor->type == raiseBuildStep)
- {
- S_StartSound((mobj_t *)&floor->sector->soundorg, sfx_pstop);
- }
- if (floor->direction == 1)
- switch(floor->type)
- {
- case donutRaise:
- floor->sector->special = floor->newspecial;
- floor->sector->floorpic = floor->texture;
- default:
- break;
- }
- else if (floor->direction == -1)
- switch(floor->type)
- {
- case lowerAndChange:
- floor->sector->special = floor->newspecial;
- floor->sector->floorpic = floor->texture;
- default:
- break;
- }
- P_RemoveThinker(&floor->thinker);
- }
+ if (res == pastdest)
+ {
+ floor->sector->specialdata = NULL;
+ if (floor->type == raiseBuildStep)
+ {
+ S_StartSound((mobj_t *) & floor->sector->soundorg, sfx_pstop);
+ }
+ if (floor->direction == 1)
+ switch (floor->type)
+ {
+ case donutRaise:
+ floor->sector->special = floor->newspecial;
+ floor->sector->floorpic = floor->texture;
+ default:
+ break;
+ }
+ else if (floor->direction == -1)
+ switch (floor->type)
+ {
+ case lowerAndChange:
+ floor->sector->special = floor->newspecial;
+ floor->sector->floorpic = floor->texture;
+ default:
+ break;
+ }
+ P_RemoveThinker(&floor->thinker);
+ }
}
//==================================================================
//
-// HANDLE FLOOR TYPES
+// HANDLE FLOOR TYPES
//
//==================================================================
-int EV_DoFloor(line_t *line,floor_e floortype)
+int EV_DoFloor(line_t * line, floor_e floortype)
{
- int secnum;
- int rtn;
- int i;
- sector_t *sec;
- floormove_t *floor;
+ int secnum;
+ int rtn;
+ int i;
+ sector_t *sec;
+ floormove_t *floor;
- secnum = -1;
- rtn = 0;
- while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
- {
- sec = §ors[secnum];
-
- // ALREADY MOVING? IF SO, KEEP GOING...
- if (sec->specialdata)
- continue;
-
- //
- // new floor thinker
- //
- rtn = 1;
- floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0);
- P_AddThinker (&floor->thinker);
- sec->specialdata = floor;
- floor->thinker.function = T_MoveFloor;
- floor->type = floortype;
- floor->crush = false;
- switch(floortype)
- {
- case lowerFloor:
- floor->direction = -1;
- floor->sector = sec;
- floor->speed = FLOORSPEED;
- floor->floordestheight =
- P_FindHighestFloorSurrounding(sec);
- break;
- case lowerFloorToLowest:
- floor->direction = -1;
- floor->sector = sec;
- floor->speed = FLOORSPEED;
- floor->floordestheight =
- P_FindLowestFloorSurrounding(sec);
- break;
- case turboLower:
- floor->direction = -1;
- floor->sector = sec;
- floor->speed = FLOORSPEED * 4;
- floor->floordestheight = (8*FRACUNIT) +
- P_FindHighestFloorSurrounding(sec);
- break;
- case raiseFloorCrush:
- floor->crush = true;
- case raiseFloor:
- floor->direction = 1;
- floor->sector = sec;
- floor->speed = FLOORSPEED;
- floor->floordestheight =
- P_FindLowestCeilingSurrounding(sec);
- if (floor->floordestheight > sec->ceilingheight)
- floor->floordestheight = sec->ceilingheight;
- floor->floordestheight -= (8*FRACUNIT)*
- (floortype == raiseFloorCrush);
- break;
- case raiseFloorToNearest:
- floor->direction = 1;
- floor->sector = sec;
- floor->speed = FLOORSPEED;
- floor->floordestheight =
- P_FindNextHighestFloor(sec,sec->floorheight);
- break;
- case raiseFloor24:
- floor->direction = 1;
- floor->sector = sec;
- floor->speed = FLOORSPEED;
- floor->floordestheight = floor->sector->floorheight +
- 24 * FRACUNIT;
- break;
- case raiseFloor24AndChange:
- floor->direction = 1;
- floor->sector = sec;
- floor->speed = FLOORSPEED;
- floor->floordestheight = floor->sector->floorheight +
- 24 * FRACUNIT;
- sec->floorpic = line->frontsector->floorpic;
- sec->special = line->frontsector->special;
- break;
- case raiseToTexture:
- {
- int minsize = MAXINT;
- side_t *side;
-
- floor->direction = 1;
- floor->sector = sec;
- floor->speed = FLOORSPEED;
- for (i = 0; i < sec->linecount; i++)
- if (twoSided (secnum, i) )
- {
- side = getSide(secnum,i,0);
- if (side->bottomtexture >= 0)
- if (textureheight[side->bottomtexture] <
- minsize)
- minsize =
- textureheight[side->bottomtexture];
- side = getSide(secnum,i,1);
- if (side->bottomtexture >= 0)
- if (textureheight[side->bottomtexture] <
- minsize)
- minsize =
- textureheight[side->bottomtexture];
- }
- floor->floordestheight = floor->sector->floorheight +
- minsize;
- }
- break;
- case lowerAndChange:
- floor->direction = -1;
- floor->sector = sec;
- floor->speed = FLOORSPEED;
- floor->floordestheight =
- P_FindLowestFloorSurrounding(sec);
- floor->texture = sec->floorpic;
- for (i = 0; i < sec->linecount; i++)
- if ( twoSided(secnum, i) )
- {
- if (getSide(secnum,i,0)->sector-sectors == secnum)
- {
- sec = getSector(secnum,i,1);
- floor->texture = sec->floorpic;
- floor->newspecial = sec->special;
- break;
- }
- else
- {
- sec = getSector(secnum,i,0);
- floor->texture = sec->floorpic;
- floor->newspecial = sec->special;
- break;
- }
- }
- default:
- break;
- }
- }
- return rtn;
-}
+ secnum = -1;
+ rtn = 0;
+ while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0)
+ {
+ sec = §ors[secnum];
+
+ // ALREADY MOVING? IF SO, KEEP GOING...
+ if (sec->specialdata)
+ continue;
+
+ //
+ // new floor thinker
+ //
+ rtn = 1;
+ floor = Z_Malloc(sizeof(*floor), PU_LEVSPEC, 0);
+ P_AddThinker(&floor->thinker);
+ sec->specialdata = floor;
+ floor->thinker.function = T_MoveFloor;
+ floor->type = floortype;
+ floor->crush = false;
+ switch (floortype)
+ {
+ case lowerFloor:
+ floor->direction = -1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED;
+ floor->floordestheight = P_FindHighestFloorSurrounding(sec);
+ break;
+ case lowerFloorToLowest:
+ floor->direction = -1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED;
+ floor->floordestheight = P_FindLowestFloorSurrounding(sec);
+ break;
+ case turboLower:
+ floor->direction = -1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED * 4;
+ floor->floordestheight = (8 * FRACUNIT) +
+ P_FindHighestFloorSurrounding(sec);
+ break;
+ case raiseFloorCrush:
+ floor->crush = true;
+ case raiseFloor:
+ floor->direction = 1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED;
+ floor->floordestheight = P_FindLowestCeilingSurrounding(sec);
+ if (floor->floordestheight > sec->ceilingheight)
+ floor->floordestheight = sec->ceilingheight;
+ floor->floordestheight -= (8 * FRACUNIT) *
+ (floortype == raiseFloorCrush);
+ break;
+ case raiseFloorToNearest:
+ floor->direction = 1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED;
+ floor->floordestheight =
+ P_FindNextHighestFloor(sec, sec->floorheight);
+ break;
+ case raiseFloor24:
+ floor->direction = 1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED;
+ floor->floordestheight = floor->sector->floorheight +
+ 24 * FRACUNIT;
+ break;
+ case raiseFloor24AndChange:
+ floor->direction = 1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED;
+ floor->floordestheight = floor->sector->floorheight +
+ 24 * FRACUNIT;
+ sec->floorpic = line->frontsector->floorpic;
+ sec->special = line->frontsector->special;
+ break;
+ case raiseToTexture:
+ {
+ int minsize = MAXINT;
+ side_t *side;
+
+ floor->direction = 1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED;
+ for (i = 0; i < sec->linecount; i++)
+ if (twoSided(secnum, i))
+ {
+ side = getSide(secnum, i, 0);
+ if (side->bottomtexture >= 0)
+ if (textureheight[side->bottomtexture] <
+ minsize)
+ minsize =
+ textureheight[side->bottomtexture];
+ side = getSide(secnum, i, 1);
+ if (side->bottomtexture >= 0)
+ if (textureheight[side->bottomtexture] <
+ minsize)
+ minsize =
+ textureheight[side->bottomtexture];
+ }
+ floor->floordestheight = floor->sector->floorheight +
+ minsize;
+ }
+ break;
+ case lowerAndChange:
+ floor->direction = -1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED;
+ floor->floordestheight = P_FindLowestFloorSurrounding(sec);
+ floor->texture = sec->floorpic;
+ for (i = 0; i < sec->linecount; i++)
+ if (twoSided(secnum, i))
+ {
+ if (getSide(secnum, i, 0)->sector - sectors == secnum)
+ {
+ sec = getSector(secnum, i, 1);
+ floor->texture = sec->floorpic;
+ floor->newspecial = sec->special;
+ break;
+ }
+ else
+ {
+ sec = getSector(secnum, i, 0);
+ floor->texture = sec->floorpic;
+ floor->newspecial = sec->special;
+ break;
+ }
+ }
+ default:
+ break;
+ }
+ }
+ return rtn;
+}
//==================================================================
//
-// BUILD A STAIRCASE!
+// BUILD A STAIRCASE!
//
//==================================================================
-int EV_BuildStairs(line_t *line, fixed_t stepDelta)
+int EV_BuildStairs(line_t * line, fixed_t stepDelta)
{
- int secnum;
- int height;
- int i;
- int newsecnum;
- int texture;
- int ok;
- int rtn;
- sector_t *sec, *tsec;
- floormove_t *floor;
+ int secnum;
+ int height;
+ int i;
+ int newsecnum;
+ int texture;
+ int ok;
+ int rtn;
+ sector_t *sec, *tsec;
+ floormove_t *floor;
- secnum = -1;
- rtn = 0;
- while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
- {
- sec = §ors[secnum];
-
- // ALREADY MOVING? IF SO, KEEP GOING...
- if (sec->specialdata)
- continue;
+ secnum = -1;
+ rtn = 0;
+ while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0)
+ {
+ sec = §ors[secnum];
- //
- // new floor thinker
- //
- rtn = 1;
- height = sec->floorheight+stepDelta;
- floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0);
- P_AddThinker (&floor->thinker);
- sec->specialdata = floor;
- floor->thinker.function = T_MoveFloor;
- floor->type = raiseBuildStep;
- floor->direction = 1;
- floor->sector = sec;
- floor->speed = FLOORSPEED;
- floor->floordestheight = height;
-
- texture = sec->floorpic;
+ // ALREADY MOVING? IF SO, KEEP GOING...
+ if (sec->specialdata)
+ continue;
- //
- // Find next sector to raise
- // 1. Find 2-sided line with same sector side[0]
- // 2. Other side is the next sector to raise
- //
- do
- {
- ok = 0;
- for (i = 0;i < sec->linecount;i++)
- {
- if ( !((sec->lines[i])->flags & ML_TWOSIDED) )
- continue;
-
- tsec = (sec->lines[i])->frontsector;
- newsecnum = tsec-sectors;
- if (secnum != newsecnum)
- continue;
- tsec = (sec->lines[i])->backsector;
- newsecnum = tsec - sectors;
- if (tsec->floorpic != texture)
- continue;
+ //
+ // new floor thinker
+ //
+ rtn = 1;
+ height = sec->floorheight + stepDelta;
+ floor = Z_Malloc(sizeof(*floor), PU_LEVSPEC, 0);
+ P_AddThinker(&floor->thinker);
+ sec->specialdata = floor;
+ floor->thinker.function = T_MoveFloor;
+ floor->type = raiseBuildStep;
+ floor->direction = 1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED;
+ floor->floordestheight = height;
- height += stepDelta;
- if (tsec->specialdata)
- continue;
+ texture = sec->floorpic;
- sec = tsec;
- secnum = newsecnum;
- floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0);
- P_AddThinker (&floor->thinker);
- sec->specialdata = floor;
- floor->thinker.function = T_MoveFloor;
- floor->type = raiseBuildStep;
- floor->direction = 1;
- floor->sector = sec;
- floor->speed = FLOORSPEED;
- floor->floordestheight = height;
- ok = 1;
- break;
- }
- } while(ok);
- }
- return(rtn);
+ //
+ // Find next sector to raise
+ // 1. Find 2-sided line with same sector side[0]
+ // 2. Other side is the next sector to raise
+ //
+ do
+ {
+ ok = 0;
+ for (i = 0; i < sec->linecount; i++)
+ {
+ if (!((sec->lines[i])->flags & ML_TWOSIDED))
+ continue;
+
+ tsec = (sec->lines[i])->frontsector;
+ newsecnum = tsec - sectors;
+ if (secnum != newsecnum)
+ continue;
+ tsec = (sec->lines[i])->backsector;
+ newsecnum = tsec - sectors;
+ if (tsec->floorpic != texture)
+ continue;
+
+ height += stepDelta;
+ if (tsec->specialdata)
+ continue;
+
+ sec = tsec;
+ secnum = newsecnum;
+ floor = Z_Malloc(sizeof(*floor), PU_LEVSPEC, 0);
+ P_AddThinker(&floor->thinker);
+ sec->specialdata = floor;
+ floor->thinker.function = T_MoveFloor;
+ floor->type = raiseBuildStep;
+ floor->direction = 1;
+ floor->sector = sec;
+ floor->speed = FLOORSPEED;
+ floor->floordestheight = height;
+ ok = 1;
+ break;
+ }
+ }
+ while (ok);
+ }
+ return (rtn);
}
--- a/src/heretic/p_inter.c
+++ b/src/heretic/p_inter.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_inter.c
@@ -7,50 +29,46 @@
#define BONUSADD 6
-int WeaponValue[] =
-{
- 1, // staff
- 3, // goldwand
- 4, // crossbow
- 5, // blaster
- 6, // skullrod
- 7, // phoenixrod
- 8, // mace
- 2, // gauntlets
- 0 // beak
+int WeaponValue[] = {
+ 1, // staff
+ 3, // goldwand
+ 4, // crossbow
+ 5, // blaster
+ 6, // skullrod
+ 7, // phoenixrod
+ 8, // mace
+ 2, // gauntlets
+ 0 // beak
};
-int maxammo[NUMAMMO] =
-{
- 100, // gold wand
- 50, // crossbow
- 200, // blaster
- 200, // skull rod
- 20, // phoenix rod
- 150 // mace
+int maxammo[NUMAMMO] = {
+ 100, // gold wand
+ 50, // crossbow
+ 200, // blaster
+ 200, // skull rod
+ 20, // phoenix rod
+ 150 // mace
};
-static int GetWeaponAmmo[NUMWEAPONS] =
-{
- 0, // staff
- 25, // gold wand
- 10, // crossbow
- 30, // blaster
- 50, // skull rod
- 2, // phoenix rod
- 50, // mace
- 0, // gauntlets
- 0 // beak
+static int GetWeaponAmmo[NUMWEAPONS] = {
+ 0, // staff
+ 25, // gold wand
+ 10, // crossbow
+ 30, // blaster
+ 50, // skull rod
+ 2, // phoenix rod
+ 50, // mace
+ 0, // gauntlets
+ 0 // beak
};
-static weapontype_t GetAmmoChange[] =
-{
- wp_goldwand,
- wp_crossbow,
- wp_blaster,
- wp_skullrod,
- wp_phoenixrod,
- wp_mace
+static weapontype_t GetAmmoChange[] = {
+ wp_goldwand,
+ wp_crossbow,
+ wp_blaster,
+ wp_skullrod,
+ wp_phoenixrod,
+ wp_mace
};
/*
@@ -106,21 +124,21 @@
boolean ultimatemsg;
-void P_SetMessage(player_t *player, char *message, boolean ultmsg)
+void P_SetMessage(player_t * player, char *message, boolean ultmsg)
{
- extern boolean messageson;
-
- if((ultimatemsg || !messageson) && !ultmsg)
- {
- return;
- }
- player->message = message;
- player->messageTics = MESSAGETICS;
- BorderTopRefresh = true;
- if(ultmsg)
- {
- ultimatemsg = true;
- }
+ extern boolean messageson;
+
+ if ((ultimatemsg || !messageson) && !ultmsg)
+ {
+ return;
+ }
+ player->message = message;
+ player->messageTics = MESSAGETICS;
+ BorderTopRefresh = true;
+ if (ultmsg)
+ {
+ ultimatemsg = true;
+ }
}
//--------------------------------------------------------------------------
@@ -132,48 +150,48 @@
//
//--------------------------------------------------------------------------
-boolean P_GiveAmmo(player_t *player, ammotype_t ammo, int count)
+boolean P_GiveAmmo(player_t * player, ammotype_t ammo, int count)
{
- int prevAmmo;
- //weapontype_t changeWeapon;
+ int prevAmmo;
+ //weapontype_t changeWeapon;
- if(ammo == am_noammo)
- {
- return(false);
- }
- if(ammo < 0 || ammo > NUMAMMO)
- {
- I_Error("P_GiveAmmo: bad type %i", ammo);
- }
- if(player->ammo[ammo] == player->maxammo[ammo])
- {
- return(false);
- }
- if(gameskill == sk_baby || gameskill == sk_nightmare)
- { // extra ammo in baby mode and nightmare mode
- count += count>>1;
- }
- prevAmmo = player->ammo[ammo];
+ if (ammo == am_noammo)
+ {
+ return (false);
+ }
+ if (ammo < 0 || ammo > NUMAMMO)
+ {
+ I_Error("P_GiveAmmo: bad type %i", ammo);
+ }
+ if (player->ammo[ammo] == player->maxammo[ammo])
+ {
+ return (false);
+ }
+ if (gameskill == sk_baby || gameskill == sk_nightmare)
+ { // extra ammo in baby mode and nightmare mode
+ count += count >> 1;
+ }
+ prevAmmo = player->ammo[ammo];
- player->ammo[ammo] += count;
- if(player->ammo[ammo] > player->maxammo[ammo])
- {
- player->ammo[ammo] = player->maxammo[ammo];
- }
- if(prevAmmo)
- {
- // Don't attempt to change weapons if the player already had
- // ammo of the type just given
- return(true);
- }
- if(player->readyweapon == wp_staff
- || player->readyweapon == wp_gauntlets)
- {
- if(player->weaponowned[GetAmmoChange[ammo]])
- {
- player->pendingweapon = GetAmmoChange[ammo];
- }
- }
+ player->ammo[ammo] += count;
+ if (player->ammo[ammo] > player->maxammo[ammo])
+ {
+ player->ammo[ammo] = player->maxammo[ammo];
+ }
+ if (prevAmmo)
+ {
+ // Don't attempt to change weapons if the player already had
+ // ammo of the type just given
+ return (true);
+ }
+ if (player->readyweapon == wp_staff
+ || player->readyweapon == wp_gauntlets)
+ {
+ if (player->weaponowned[GetAmmoChange[ammo]])
+ {
+ player->pendingweapon = GetAmmoChange[ammo];
+ }
+ }
/*
if(player->powers[pw_weaponlevel2])
{
@@ -191,7 +209,7 @@
}
}
*/
- return(true);
+ return (true);
}
//--------------------------------------------------------------------------
@@ -202,44 +220,43 @@
//
//--------------------------------------------------------------------------
-boolean P_GiveWeapon(player_t *player, weapontype_t weapon)
+boolean P_GiveWeapon(player_t * player, weapontype_t weapon)
{
- boolean gaveAmmo;
- boolean gaveWeapon;
+ boolean gaveAmmo;
+ boolean gaveWeapon;
- if(netgame && !deathmatch)
- { // Cooperative net-game
- if(player->weaponowned[weapon])
- {
- return(false);
- }
- player->bonuscount += BONUSADD;
- player->weaponowned[weapon] = true;
- P_GiveAmmo(player, wpnlev1info[weapon].ammo,
- GetWeaponAmmo[weapon]);
- player->pendingweapon = weapon;
- if(player == &players[consoleplayer])
- {
- S_StartSound(NULL, sfx_wpnup);
- }
- return(false);
- }
- gaveAmmo = P_GiveAmmo(player, wpnlev1info[weapon].ammo,
- GetWeaponAmmo[weapon]);
- if(player->weaponowned[weapon])
- {
- gaveWeapon = false;
- }
- else
- {
- gaveWeapon = true;
- player->weaponowned[weapon] = true;
- if(WeaponValue[weapon] > WeaponValue[player->readyweapon])
- { // Only switch to more powerful weapons
- player->pendingweapon = weapon;
- }
- }
- return(gaveWeapon || gaveAmmo);
+ if (netgame && !deathmatch)
+ { // Cooperative net-game
+ if (player->weaponowned[weapon])
+ {
+ return (false);
+ }
+ player->bonuscount += BONUSADD;
+ player->weaponowned[weapon] = true;
+ P_GiveAmmo(player, wpnlev1info[weapon].ammo, GetWeaponAmmo[weapon]);
+ player->pendingweapon = weapon;
+ if (player == &players[consoleplayer])
+ {
+ S_StartSound(NULL, sfx_wpnup);
+ }
+ return (false);
+ }
+ gaveAmmo = P_GiveAmmo(player, wpnlev1info[weapon].ammo,
+ GetWeaponAmmo[weapon]);
+ if (player->weaponowned[weapon])
+ {
+ gaveWeapon = false;
+ }
+ else
+ {
+ gaveWeapon = true;
+ player->weaponowned[weapon] = true;
+ if (WeaponValue[weapon] > WeaponValue[player->readyweapon])
+ { // Only switch to more powerful weapons
+ player->pendingweapon = weapon;
+ }
+ }
+ return (gaveWeapon || gaveAmmo);
}
//---------------------------------------------------------------------------
@@ -250,26 +267,26 @@
//
//---------------------------------------------------------------------------
-boolean P_GiveBody(player_t *player, int num)
+boolean P_GiveBody(player_t * player, int num)
{
- int max;
+ int max;
- max = MAXHEALTH;
- if(player->chickenTics)
- {
- max = MAXCHICKENHEALTH;
- }
- if(player->health >= max)
- {
- return(false);
- }
- player->health += num;
- if(player->health > max)
- {
- player->health = max;
- }
- player->mo->health = player->health;
- return(true);
+ max = MAXHEALTH;
+ if (player->chickenTics)
+ {
+ max = MAXCHICKENHEALTH;
+ }
+ if (player->health >= max)
+ {
+ return (false);
+ }
+ player->health += num;
+ if (player->health > max)
+ {
+ player->health = max;
+ }
+ player->mo->health = player->health;
+ return (true);
}
//---------------------------------------------------------------------------
@@ -280,18 +297,18 @@
//
//---------------------------------------------------------------------------
-boolean P_GiveArmor(player_t *player, int armortype)
+boolean P_GiveArmor(player_t * player, int armortype)
{
- int hits;
+ int hits;
- hits = armortype*100;
- if(player->armorpoints >= hits)
- {
- return(false);
- }
- player->armortype = armortype;
- player->armorpoints = hits;
- return(true);
+ hits = armortype * 100;
+ if (player->armorpoints >= hits)
+ {
+ return (false);
+ }
+ player->armortype = armortype;
+ player->armorpoints = hits;
+ return (true);
}
//---------------------------------------------------------------------------
@@ -300,23 +317,23 @@
//
//---------------------------------------------------------------------------
-void P_GiveKey(player_t *player, keytype_t key)
+void P_GiveKey(player_t * player, keytype_t key)
{
- extern int playerkeys;
- extern vertex_t KeyPoints[];
-
- if(player->keys[key])
- {
- return;
- }
- if(player == &players[consoleplayer])
- {
- playerkeys |= 1<<key;
- KeyPoints[key].x = 0;
- KeyPoints[key].y = 0;
- }
- player->bonuscount = BONUSADD;
- player->keys[key] = true;
+ extern int playerkeys;
+ extern vertex_t KeyPoints[];
+
+ if (player->keys[key])
+ {
+ return;
+ }
+ if (player == &players[consoleplayer])
+ {
+ playerkeys |= 1 << key;
+ KeyPoints[key].x = 0;
+ KeyPoints[key].y = 0;
+ }
+ player->bonuscount = BONUSADD;
+ player->keys[key] = true;
}
//---------------------------------------------------------------------------
@@ -327,60 +344,60 @@
//
//---------------------------------------------------------------------------
-boolean P_GivePower(player_t *player, powertype_t power)
+boolean P_GivePower(player_t * player, powertype_t power)
{
- if(power == pw_invulnerability)
- {
- if(player->powers[power] > BLINKTHRESHOLD)
- { // Already have it
- return(false);
- }
- player->powers[power] = INVULNTICS;
- return(true);
- }
- if(power == pw_weaponlevel2)
- {
- if(player->powers[power] > BLINKTHRESHOLD)
- { // Already have it
- return(false);
- }
- player->powers[power] = WPNLEV2TICS;
- return(true);
- }
- if(power == pw_invisibility)
- {
- if(player->powers[power] > BLINKTHRESHOLD)
- { // Already have it
- return(false);
- }
- player->powers[power] = INVISTICS;
- player->mo->flags |= MF_SHADOW;
- return(true);
- }
- if(power == pw_flight)
- {
- if(player->powers[power] > BLINKTHRESHOLD)
- { // Already have it
- return(false);
- }
- player->powers[power] = FLIGHTTICS;
- player->mo->flags2 |= MF2_FLY;
- player->mo->flags |= MF_NOGRAVITY;
- if(player->mo->z <= player->mo->floorz)
- {
- player->flyheight = 10; // thrust the player in the air a bit
- }
- return(true);
- }
- if(power == pw_infrared)
- {
- if(player->powers[power] > BLINKTHRESHOLD)
- { // Already have it
- return(false);
- }
- player->powers[power] = INFRATICS;
- return(true);
- }
+ if (power == pw_invulnerability)
+ {
+ if (player->powers[power] > BLINKTHRESHOLD)
+ { // Already have it
+ return (false);
+ }
+ player->powers[power] = INVULNTICS;
+ return (true);
+ }
+ if (power == pw_weaponlevel2)
+ {
+ if (player->powers[power] > BLINKTHRESHOLD)
+ { // Already have it
+ return (false);
+ }
+ player->powers[power] = WPNLEV2TICS;
+ return (true);
+ }
+ if (power == pw_invisibility)
+ {
+ if (player->powers[power] > BLINKTHRESHOLD)
+ { // Already have it
+ return (false);
+ }
+ player->powers[power] = INVISTICS;
+ player->mo->flags |= MF_SHADOW;
+ return (true);
+ }
+ if (power == pw_flight)
+ {
+ if (player->powers[power] > BLINKTHRESHOLD)
+ { // Already have it
+ return (false);
+ }
+ player->powers[power] = FLIGHTTICS;
+ player->mo->flags2 |= MF2_FLY;
+ player->mo->flags |= MF_NOGRAVITY;
+ if (player->mo->z <= player->mo->floorz)
+ {
+ player->flyheight = 10; // thrust the player in the air a bit
+ }
+ return (true);
+ }
+ if (power == pw_infrared)
+ {
+ if (player->powers[power] > BLINKTHRESHOLD)
+ { // Already have it
+ return (false);
+ }
+ player->powers[power] = INFRATICS;
+ return (true);
+ }
/*
if(power == pw_ironfeet)
{
@@ -394,12 +411,12 @@
return(true);
}
*/
- if(player->powers[power])
- {
- return(false); // already got it
- }
- player->powers[power] = 1;
- return(true);
+ if (player->powers[power])
+ {
+ return (false); // already got it
+ }
+ player->powers[power] = 1;
+ return (true);
}
//---------------------------------------------------------------------------
@@ -410,39 +427,39 @@
//
//---------------------------------------------------------------------------
-boolean P_GiveArtifact(player_t *player, artitype_t arti, mobj_t *mo)
+boolean P_GiveArtifact(player_t * player, artitype_t arti, mobj_t * mo)
{
- int i;
+ int i;
- i = 0;
- while(player->inventory[i].type != arti && i < player->inventorySlotNum)
- {
- i++;
- }
- if(i == player->inventorySlotNum)
- {
- player->inventory[i].count = 1;
- player->inventory[i].type = arti;
- player->inventorySlotNum++;
- }
- else
- {
- if(player->inventory[i].count >= 16)
- { // Player already has 16 of this item
- return(false);
- }
- player->inventory[i].count++;
- }
- if(player->artifactCount == 0)
- {
- player->readyArtifact = arti;
- }
- player->artifactCount++;
- if(mo && (mo->flags&MF_COUNTITEM))
- {
- player->itemcount++;
- }
- return(true);
+ i = 0;
+ while (player->inventory[i].type != arti && i < player->inventorySlotNum)
+ {
+ i++;
+ }
+ if (i == player->inventorySlotNum)
+ {
+ player->inventory[i].count = 1;
+ player->inventory[i].type = arti;
+ player->inventorySlotNum++;
+ }
+ else
+ {
+ if (player->inventory[i].count >= 16)
+ { // Player already has 16 of this item
+ return (false);
+ }
+ player->inventory[i].count++;
+ }
+ if (player->artifactCount == 0)
+ {
+ player->readyArtifact = arti;
+ }
+ player->artifactCount++;
+ if (mo && (mo->flags & MF_COUNTITEM))
+ {
+ player->itemcount++;
+ }
+ return (true);
}
//---------------------------------------------------------------------------
@@ -454,19 +471,19 @@
//
//---------------------------------------------------------------------------
-void P_SetDormantArtifact(mobj_t *arti)
+void P_SetDormantArtifact(mobj_t * arti)
{
- arti->flags &= ~MF_SPECIAL;
- if(deathmatch && (arti->type != MT_ARTIINVULNERABILITY)
- && (arti->type != MT_ARTIINVISIBILITY))
- {
- P_SetMobjState(arti, S_DORMANTARTI1);
- }
- else
- { // Don't respawn
- P_SetMobjState(arti, S_DEADARTI1);
- }
- S_StartSound(arti, sfx_artiup);
+ arti->flags &= ~MF_SPECIAL;
+ if (deathmatch && (arti->type != MT_ARTIINVULNERABILITY)
+ && (arti->type != MT_ARTIINVISIBILITY))
+ {
+ P_SetMobjState(arti, S_DORMANTARTI1);
+ }
+ else
+ { // Don't respawn
+ P_SetMobjState(arti, S_DEADARTI1);
+ }
+ S_StartSound(arti, sfx_artiup);
}
//---------------------------------------------------------------------------
@@ -475,11 +492,11 @@
//
//---------------------------------------------------------------------------
-void A_RestoreArtifact(mobj_t *arti)
+void A_RestoreArtifact(mobj_t * arti)
{
- arti->flags |= MF_SPECIAL;
- P_SetMobjState(arti, arti->info->spawnstate);
- S_StartSound(arti, sfx_respawn);
+ arti->flags |= MF_SPECIAL;
+ P_SetMobjState(arti, arti->info->spawnstate);
+ S_StartSound(arti, sfx_respawn);
}
//----------------------------------------------------------------------------
@@ -488,11 +505,11 @@
//
//----------------------------------------------------------------------------
-void P_HideSpecialThing(mobj_t *thing)
+void P_HideSpecialThing(mobj_t * thing)
{
- thing->flags &= ~MF_SPECIAL;
- thing->flags2 |= MF2_DONTDRAW;
- P_SetMobjState(thing, S_HIDESPECIAL1);
+ thing->flags &= ~MF_SPECIAL;
+ thing->flags2 |= MF2_DONTDRAW;
+ P_SetMobjState(thing, S_HIDESPECIAL1);
}
//---------------------------------------------------------------------------
@@ -503,14 +520,14 @@
//
//---------------------------------------------------------------------------
-void A_RestoreSpecialThing1(mobj_t *thing)
+void A_RestoreSpecialThing1(mobj_t * thing)
{
- if(thing->type == MT_WMACE)
- { // Do random mace placement
- P_RepositionMace(thing);
- }
- thing->flags2 &= ~MF2_DONTDRAW;
- S_StartSound(thing, sfx_respawn);
+ if (thing->type == MT_WMACE)
+ { // Do random mace placement
+ P_RepositionMace(thing);
+ }
+ thing->flags2 &= ~MF2_DONTDRAW;
+ S_StartSound(thing, sfx_respawn);
}
//---------------------------------------------------------------------------
@@ -519,10 +536,10 @@
//
//---------------------------------------------------------------------------
-void A_RestoreSpecialThing2(mobj_t *thing)
+void A_RestoreSpecialThing2(mobj_t * thing)
{
- thing->flags |= MF_SPECIAL;
- P_SetMobjState(thing, thing->info->spawnstate);
+ thing->flags |= MF_SPECIAL;
+ P_SetMobjState(thing, thing->info->spawnstate);
}
//---------------------------------------------------------------------------
@@ -531,340 +548,340 @@
//
//---------------------------------------------------------------------------
-void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher)
+void P_TouchSpecialThing(mobj_t * special, mobj_t * toucher)
{
- int i;
- player_t *player;
- fixed_t delta;
- int sound;
- boolean respawn;
+ int i;
+ player_t *player;
+ fixed_t delta;
+ int sound;
+ boolean respawn;
- delta = special->z-toucher->z;
- if(delta > toucher->height || delta < -32*FRACUNIT)
- { // Out of reach
- return;
- }
- if(toucher->health <= 0)
- { // Toucher is dead
- return;
- }
- sound = sfx_itemup;
- player = toucher->player;
- respawn = true;
- switch(special->sprite)
- {
- // Items
- case SPR_PTN1: // Item_HealingPotion
- if(!P_GiveBody(player, 10))
- {
- return;
- }
- P_SetMessage(player, TXT_ITEMHEALTH, false);
- break;
- case SPR_SHLD: // Item_Shield1
- if(!P_GiveArmor(player, 1))
- {
- return;
- }
- P_SetMessage(player, TXT_ITEMSHIELD1, false);
- break;
- case SPR_SHD2: // Item_Shield2
- if(!P_GiveArmor(player, 2))
- {
- return;
- }
- P_SetMessage(player, TXT_ITEMSHIELD2, false);
- break;
- case SPR_BAGH: // Item_BagOfHolding
- if(!player->backpack)
- {
- for(i = 0; i < NUMAMMO; i++)
- {
- player->maxammo[i] *= 2;
- }
- player->backpack = true;
- }
- P_GiveAmmo(player, am_goldwand, AMMO_GWND_WIMPY);
- P_GiveAmmo(player, am_blaster, AMMO_BLSR_WIMPY);
- P_GiveAmmo(player, am_crossbow, AMMO_CBOW_WIMPY);
- P_GiveAmmo(player, am_skullrod, AMMO_SKRD_WIMPY);
- P_GiveAmmo(player, am_phoenixrod, AMMO_PHRD_WIMPY);
- P_SetMessage(player, TXT_ITEMBAGOFHOLDING, false);
- break;
- case SPR_SPMP: // Item_SuperMap
- if(!P_GivePower(player, pw_allmap))
- {
- return;
- }
- P_SetMessage(player, TXT_ITEMSUPERMAP, false);
- break;
+ delta = special->z - toucher->z;
+ if (delta > toucher->height || delta < -32 * FRACUNIT)
+ { // Out of reach
+ return;
+ }
+ if (toucher->health <= 0)
+ { // Toucher is dead
+ return;
+ }
+ sound = sfx_itemup;
+ player = toucher->player;
+ respawn = true;
+ switch (special->sprite)
+ {
+ // Items
+ case SPR_PTN1: // Item_HealingPotion
+ if (!P_GiveBody(player, 10))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_ITEMHEALTH, false);
+ break;
+ case SPR_SHLD: // Item_Shield1
+ if (!P_GiveArmor(player, 1))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_ITEMSHIELD1, false);
+ break;
+ case SPR_SHD2: // Item_Shield2
+ if (!P_GiveArmor(player, 2))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_ITEMSHIELD2, false);
+ break;
+ case SPR_BAGH: // Item_BagOfHolding
+ if (!player->backpack)
+ {
+ for (i = 0; i < NUMAMMO; i++)
+ {
+ player->maxammo[i] *= 2;
+ }
+ player->backpack = true;
+ }
+ P_GiveAmmo(player, am_goldwand, AMMO_GWND_WIMPY);
+ P_GiveAmmo(player, am_blaster, AMMO_BLSR_WIMPY);
+ P_GiveAmmo(player, am_crossbow, AMMO_CBOW_WIMPY);
+ P_GiveAmmo(player, am_skullrod, AMMO_SKRD_WIMPY);
+ P_GiveAmmo(player, am_phoenixrod, AMMO_PHRD_WIMPY);
+ P_SetMessage(player, TXT_ITEMBAGOFHOLDING, false);
+ break;
+ case SPR_SPMP: // Item_SuperMap
+ if (!P_GivePower(player, pw_allmap))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_ITEMSUPERMAP, false);
+ break;
- // Keys
- case SPR_BKYY: // Key_Blue
- if(!player->keys[key_blue])
- {
- P_SetMessage(player, TXT_GOTBLUEKEY, false);
- }
- P_GiveKey(player, key_blue);
- sound = sfx_keyup;
- if(!netgame)
- {
- break;
- }
- return;
- case SPR_CKYY: // Key_Yellow
- if(!player->keys[key_yellow])
- {
- P_SetMessage(player, TXT_GOTYELLOWKEY, false);
- }
- sound = sfx_keyup;
- P_GiveKey(player, key_yellow);
- if(!netgame)
- {
- break;
- }
- return;
- case SPR_AKYY: // Key_Green
- if(!player->keys[key_green])
- {
- P_SetMessage(player, TXT_GOTGREENKEY, false);
- }
- sound = sfx_keyup;
- P_GiveKey(player, key_green);
- if(!netgame)
- {
- break;
- }
- return;
+ // Keys
+ case SPR_BKYY: // Key_Blue
+ if (!player->keys[key_blue])
+ {
+ P_SetMessage(player, TXT_GOTBLUEKEY, false);
+ }
+ P_GiveKey(player, key_blue);
+ sound = sfx_keyup;
+ if (!netgame)
+ {
+ break;
+ }
+ return;
+ case SPR_CKYY: // Key_Yellow
+ if (!player->keys[key_yellow])
+ {
+ P_SetMessage(player, TXT_GOTYELLOWKEY, false);
+ }
+ sound = sfx_keyup;
+ P_GiveKey(player, key_yellow);
+ if (!netgame)
+ {
+ break;
+ }
+ return;
+ case SPR_AKYY: // Key_Green
+ if (!player->keys[key_green])
+ {
+ P_SetMessage(player, TXT_GOTGREENKEY, false);
+ }
+ sound = sfx_keyup;
+ P_GiveKey(player, key_green);
+ if (!netgame)
+ {
+ break;
+ }
+ return;
- // Artifacts
- case SPR_PTN2: // Arti_HealingPotion
- if(P_GiveArtifact(player, arti_health, special))
- {
- P_SetMessage(player, TXT_ARTIHEALTH, false);
- P_SetDormantArtifact(special);
- }
- return;
- case SPR_SOAR: // Arti_Fly
- if(P_GiveArtifact(player, arti_fly, special))
- {
- P_SetMessage(player, TXT_ARTIFLY, false);
- P_SetDormantArtifact(special);
- }
- return;
- case SPR_INVU: // Arti_Invulnerability
- if(P_GiveArtifact(player, arti_invulnerability, special))
- {
- P_SetMessage(player, TXT_ARTIINVULNERABILITY, false);
- P_SetDormantArtifact(special);
- }
- return;
- case SPR_PWBK: // Arti_TomeOfPower
- if(P_GiveArtifact(player, arti_tomeofpower, special))
- {
- P_SetMessage(player, TXT_ARTITOMEOFPOWER, false);
- P_SetDormantArtifact(special);
- }
- return;
- case SPR_INVS: // Arti_Invisibility
- if(P_GiveArtifact(player, arti_invisibility, special))
- {
- P_SetMessage(player, TXT_ARTIINVISIBILITY, false);
- P_SetDormantArtifact(special);
- }
- return;
- case SPR_EGGC: // Arti_Egg
- if(P_GiveArtifact(player, arti_egg, special))
- {
- P_SetMessage(player, TXT_ARTIEGG, false);
- P_SetDormantArtifact(special);
- }
- return;
- case SPR_SPHL: // Arti_SuperHealth
- if(P_GiveArtifact(player, arti_superhealth, special))
- {
- P_SetMessage(player, TXT_ARTISUPERHEALTH, false);
- P_SetDormantArtifact(special);
- }
- return;
- case SPR_TRCH: // Arti_Torch
- if(P_GiveArtifact(player, arti_torch, special))
- {
- P_SetMessage(player, TXT_ARTITORCH, false);
- P_SetDormantArtifact(special);
- }
- return;
- case SPR_FBMB: // Arti_FireBomb
- if(P_GiveArtifact(player, arti_firebomb, special))
- {
- P_SetMessage(player, TXT_ARTIFIREBOMB, false);
- P_SetDormantArtifact(special);
- }
- return;
- case SPR_ATLP: // Arti_Teleport
- if(P_GiveArtifact(player, arti_teleport, special))
- {
- P_SetMessage(player, TXT_ARTITELEPORT, false);
- P_SetDormantArtifact(special);
- }
- return;
+ // Artifacts
+ case SPR_PTN2: // Arti_HealingPotion
+ if (P_GiveArtifact(player, arti_health, special))
+ {
+ P_SetMessage(player, TXT_ARTIHEALTH, false);
+ P_SetDormantArtifact(special);
+ }
+ return;
+ case SPR_SOAR: // Arti_Fly
+ if (P_GiveArtifact(player, arti_fly, special))
+ {
+ P_SetMessage(player, TXT_ARTIFLY, false);
+ P_SetDormantArtifact(special);
+ }
+ return;
+ case SPR_INVU: // Arti_Invulnerability
+ if (P_GiveArtifact(player, arti_invulnerability, special))
+ {
+ P_SetMessage(player, TXT_ARTIINVULNERABILITY, false);
+ P_SetDormantArtifact(special);
+ }
+ return;
+ case SPR_PWBK: // Arti_TomeOfPower
+ if (P_GiveArtifact(player, arti_tomeofpower, special))
+ {
+ P_SetMessage(player, TXT_ARTITOMEOFPOWER, false);
+ P_SetDormantArtifact(special);
+ }
+ return;
+ case SPR_INVS: // Arti_Invisibility
+ if (P_GiveArtifact(player, arti_invisibility, special))
+ {
+ P_SetMessage(player, TXT_ARTIINVISIBILITY, false);
+ P_SetDormantArtifact(special);
+ }
+ return;
+ case SPR_EGGC: // Arti_Egg
+ if (P_GiveArtifact(player, arti_egg, special))
+ {
+ P_SetMessage(player, TXT_ARTIEGG, false);
+ P_SetDormantArtifact(special);
+ }
+ return;
+ case SPR_SPHL: // Arti_SuperHealth
+ if (P_GiveArtifact(player, arti_superhealth, special))
+ {
+ P_SetMessage(player, TXT_ARTISUPERHEALTH, false);
+ P_SetDormantArtifact(special);
+ }
+ return;
+ case SPR_TRCH: // Arti_Torch
+ if (P_GiveArtifact(player, arti_torch, special))
+ {
+ P_SetMessage(player, TXT_ARTITORCH, false);
+ P_SetDormantArtifact(special);
+ }
+ return;
+ case SPR_FBMB: // Arti_FireBomb
+ if (P_GiveArtifact(player, arti_firebomb, special))
+ {
+ P_SetMessage(player, TXT_ARTIFIREBOMB, false);
+ P_SetDormantArtifact(special);
+ }
+ return;
+ case SPR_ATLP: // Arti_Teleport
+ if (P_GiveArtifact(player, arti_teleport, special))
+ {
+ P_SetMessage(player, TXT_ARTITELEPORT, false);
+ P_SetDormantArtifact(special);
+ }
+ return;
- // Ammo
- case SPR_AMG1: // Ammo_GoldWandWimpy
- if(!P_GiveAmmo(player, am_goldwand, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOGOLDWAND1, false);
- break;
- case SPR_AMG2: // Ammo_GoldWandHefty
- if(!P_GiveAmmo(player, am_goldwand, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOGOLDWAND2, false);
- break;
- case SPR_AMM1: // Ammo_MaceWimpy
- if(!P_GiveAmmo(player, am_mace, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOMACE1, false);
- break;
- case SPR_AMM2: // Ammo_MaceHefty
- if(!P_GiveAmmo(player, am_mace, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOMACE2, false);
- break;
- case SPR_AMC1: // Ammo_CrossbowWimpy
- if(!P_GiveAmmo(player, am_crossbow, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOCROSSBOW1, false);
- break;
- case SPR_AMC2: // Ammo_CrossbowHefty
- if(!P_GiveAmmo(player, am_crossbow, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOCROSSBOW2, false);
- break;
- case SPR_AMB1: // Ammo_BlasterWimpy
- if(!P_GiveAmmo(player, am_blaster, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOBLASTER1, false);
- break;
- case SPR_AMB2: // Ammo_BlasterHefty
- if(!P_GiveAmmo(player, am_blaster, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOBLASTER2, false);
- break;
- case SPR_AMS1: // Ammo_SkullRodWimpy
- if(!P_GiveAmmo(player, am_skullrod, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOSKULLROD1, false);
- break;
- case SPR_AMS2: // Ammo_SkullRodHefty
- if(!P_GiveAmmo(player, am_skullrod, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOSKULLROD2, false);
- break;
- case SPR_AMP1: // Ammo_PhoenixRodWimpy
- if(!P_GiveAmmo(player, am_phoenixrod, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOPHOENIXROD1, false);
- break;
- case SPR_AMP2: // Ammo_PhoenixRodHefty
- if(!P_GiveAmmo(player, am_phoenixrod, special->health))
- {
- return;
- }
- P_SetMessage(player, TXT_AMMOPHOENIXROD2, false);
- break;
+ // Ammo
+ case SPR_AMG1: // Ammo_GoldWandWimpy
+ if (!P_GiveAmmo(player, am_goldwand, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOGOLDWAND1, false);
+ break;
+ case SPR_AMG2: // Ammo_GoldWandHefty
+ if (!P_GiveAmmo(player, am_goldwand, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOGOLDWAND2, false);
+ break;
+ case SPR_AMM1: // Ammo_MaceWimpy
+ if (!P_GiveAmmo(player, am_mace, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOMACE1, false);
+ break;
+ case SPR_AMM2: // Ammo_MaceHefty
+ if (!P_GiveAmmo(player, am_mace, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOMACE2, false);
+ break;
+ case SPR_AMC1: // Ammo_CrossbowWimpy
+ if (!P_GiveAmmo(player, am_crossbow, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOCROSSBOW1, false);
+ break;
+ case SPR_AMC2: // Ammo_CrossbowHefty
+ if (!P_GiveAmmo(player, am_crossbow, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOCROSSBOW2, false);
+ break;
+ case SPR_AMB1: // Ammo_BlasterWimpy
+ if (!P_GiveAmmo(player, am_blaster, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOBLASTER1, false);
+ break;
+ case SPR_AMB2: // Ammo_BlasterHefty
+ if (!P_GiveAmmo(player, am_blaster, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOBLASTER2, false);
+ break;
+ case SPR_AMS1: // Ammo_SkullRodWimpy
+ if (!P_GiveAmmo(player, am_skullrod, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOSKULLROD1, false);
+ break;
+ case SPR_AMS2: // Ammo_SkullRodHefty
+ if (!P_GiveAmmo(player, am_skullrod, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOSKULLROD2, false);
+ break;
+ case SPR_AMP1: // Ammo_PhoenixRodWimpy
+ if (!P_GiveAmmo(player, am_phoenixrod, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOPHOENIXROD1, false);
+ break;
+ case SPR_AMP2: // Ammo_PhoenixRodHefty
+ if (!P_GiveAmmo(player, am_phoenixrod, special->health))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_AMMOPHOENIXROD2, false);
+ break;
- // Weapons
- case SPR_WMCE: // Weapon_Mace
- if(!P_GiveWeapon(player, wp_mace))
- {
- return;
- }
- P_SetMessage(player, TXT_WPNMACE, false);
- sound = sfx_wpnup;
- break;
- case SPR_WBOW: // Weapon_Crossbow
- if(!P_GiveWeapon(player, wp_crossbow))
- {
- return;
- }
- P_SetMessage(player, TXT_WPNCROSSBOW, false);
- sound = sfx_wpnup;
- break;
- case SPR_WBLS: // Weapon_Blaster
- if(!P_GiveWeapon(player, wp_blaster))
- {
- return;
- }
- P_SetMessage(player, TXT_WPNBLASTER, false);
- sound = sfx_wpnup;
- break;
- case SPR_WSKL: // Weapon_SkullRod
- if(!P_GiveWeapon(player, wp_skullrod))
- {
- return;
- }
- P_SetMessage(player, TXT_WPNSKULLROD, false);
- sound = sfx_wpnup;
- break;
- case SPR_WPHX: // Weapon_PhoenixRod
- if(!P_GiveWeapon(player, wp_phoenixrod))
- {
- return;
- }
- P_SetMessage(player, TXT_WPNPHOENIXROD, false);
- sound = sfx_wpnup;
- break;
- case SPR_WGNT: // Weapon_Gauntlets
- if(!P_GiveWeapon(player, wp_gauntlets))
- {
- return;
- }
- P_SetMessage(player, TXT_WPNGAUNTLETS, false);
- sound = sfx_wpnup;
- break;
- default:
- I_Error("P_SpecialThing: Unknown gettable thing");
- }
- if(special->flags&MF_COUNTITEM)
- {
- player->itemcount++;
- }
- if(deathmatch && respawn && !(special->flags&MF_DROPPED))
- {
- P_HideSpecialThing(special);
- }
- else
- {
- P_RemoveMobj(special);
- }
- player->bonuscount += BONUSADD;
- if(player == &players[consoleplayer])
- {
- S_StartSound(NULL, sound);
- SB_PaletteFlash();
- }
+ // Weapons
+ case SPR_WMCE: // Weapon_Mace
+ if (!P_GiveWeapon(player, wp_mace))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_WPNMACE, false);
+ sound = sfx_wpnup;
+ break;
+ case SPR_WBOW: // Weapon_Crossbow
+ if (!P_GiveWeapon(player, wp_crossbow))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_WPNCROSSBOW, false);
+ sound = sfx_wpnup;
+ break;
+ case SPR_WBLS: // Weapon_Blaster
+ if (!P_GiveWeapon(player, wp_blaster))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_WPNBLASTER, false);
+ sound = sfx_wpnup;
+ break;
+ case SPR_WSKL: // Weapon_SkullRod
+ if (!P_GiveWeapon(player, wp_skullrod))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_WPNSKULLROD, false);
+ sound = sfx_wpnup;
+ break;
+ case SPR_WPHX: // Weapon_PhoenixRod
+ if (!P_GiveWeapon(player, wp_phoenixrod))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_WPNPHOENIXROD, false);
+ sound = sfx_wpnup;
+ break;
+ case SPR_WGNT: // Weapon_Gauntlets
+ if (!P_GiveWeapon(player, wp_gauntlets))
+ {
+ return;
+ }
+ P_SetMessage(player, TXT_WPNGAUNTLETS, false);
+ sound = sfx_wpnup;
+ break;
+ default:
+ I_Error("P_SpecialThing: Unknown gettable thing");
+ }
+ if (special->flags & MF_COUNTITEM)
+ {
+ player->itemcount++;
+ }
+ if (deathmatch && respawn && !(special->flags & MF_DROPPED))
+ {
+ P_HideSpecialThing(special);
+ }
+ else
+ {
+ P_RemoveMobj(special);
+ }
+ player->bonuscount += BONUSADD;
+ if (player == &players[consoleplayer])
+ {
+ S_StartSound(NULL, sound);
+ SB_PaletteFlash();
+ }
}
//---------------------------------------------------------------------------
@@ -873,73 +890,73 @@
//
//---------------------------------------------------------------------------
-void P_KillMobj(mobj_t *source, mobj_t *target)
+void P_KillMobj(mobj_t * source, mobj_t * target)
{
- target->flags &= ~(MF_SHOOTABLE|MF_FLOAT|MF_SKULLFLY|MF_NOGRAVITY);
- target->flags |= MF_CORPSE|MF_DROPOFF;
- target->flags2 &= ~MF2_PASSMOBJ;
- target->height >>= 2;
- if(source && source->player)
- {
- if(target->flags&MF_COUNTKILL)
- { // Count for intermission
- source->player->killcount++;
- }
- if(target->player)
- { // Frag stuff
- if(target == source)
- { // Self-frag
- target->player->frags[target->player-players]--;
- }
- else
- {
- source->player->frags[target->player-players]++;
- if(source->player == &players[consoleplayer])
- {
- S_StartSound(NULL, sfx_gfrag);
- }
- if(source->player->chickenTics)
- { // Make a super chicken
- P_GivePower(source->player, pw_weaponlevel2);
- }
- }
- }
- }
- else if(!netgame && (target->flags&MF_COUNTKILL))
- { // Count all monster deaths
- players[0].killcount++;
- }
- if(target->player)
- {
- if(!source)
- { // Self-frag
- target->player->frags[target->player-players]--;
- }
- target->flags &= ~MF_SOLID;
- target->flags2 &= ~MF2_FLY;
- target->player->powers[pw_flight] = 0;
- target->player->powers[pw_weaponlevel2] = 0;
- target->player->playerstate = PST_DEAD;
- P_DropWeapon(target->player);
- if(target->flags2&MF2_FIREDAMAGE)
- { // Player flame death
- P_SetMobjState(target, S_PLAY_FDTH1);
- //S_StartSound(target, sfx_hedat1); // Burn sound
- return;
- }
- }
- if(target->health < -(target->info->spawnhealth>>1)
- && target->info->xdeathstate)
- { // Extreme death
- P_SetMobjState(target, target->info->xdeathstate);
- }
- else
- { // Normal death
- P_SetMobjState(target, target->info->deathstate);
- }
- target->tics -= P_Random()&3;
-// I_StartSound(&actor->r, actor->info->deathsound);
-}
+ target->flags &= ~(MF_SHOOTABLE | MF_FLOAT | MF_SKULLFLY | MF_NOGRAVITY);
+ target->flags |= MF_CORPSE | MF_DROPOFF;
+ target->flags2 &= ~MF2_PASSMOBJ;
+ target->height >>= 2;
+ if (source && source->player)
+ {
+ if (target->flags & MF_COUNTKILL)
+ { // Count for intermission
+ source->player->killcount++;
+ }
+ if (target->player)
+ { // Frag stuff
+ if (target == source)
+ { // Self-frag
+ target->player->frags[target->player - players]--;
+ }
+ else
+ {
+ source->player->frags[target->player - players]++;
+ if (source->player == &players[consoleplayer])
+ {
+ S_StartSound(NULL, sfx_gfrag);
+ }
+ if (source->player->chickenTics)
+ { // Make a super chicken
+ P_GivePower(source->player, pw_weaponlevel2);
+ }
+ }
+ }
+ }
+ else if (!netgame && (target->flags & MF_COUNTKILL))
+ { // Count all monster deaths
+ players[0].killcount++;
+ }
+ if (target->player)
+ {
+ if (!source)
+ { // Self-frag
+ target->player->frags[target->player - players]--;
+ }
+ target->flags &= ~MF_SOLID;
+ target->flags2 &= ~MF2_FLY;
+ target->player->powers[pw_flight] = 0;
+ target->player->powers[pw_weaponlevel2] = 0;
+ target->player->playerstate = PST_DEAD;
+ P_DropWeapon(target->player);
+ if (target->flags2 & MF2_FIREDAMAGE)
+ { // Player flame death
+ P_SetMobjState(target, S_PLAY_FDTH1);
+ //S_StartSound(target, sfx_hedat1); // Burn sound
+ return;
+ }
+ }
+ if (target->health < -(target->info->spawnhealth >> 1)
+ && target->info->xdeathstate)
+ { // Extreme death
+ P_SetMobjState(target, target->info->xdeathstate);
+ }
+ else
+ { // Normal death
+ P_SetMobjState(target, target->info->deathstate);
+ }
+ target->tics -= P_Random() & 3;
+// I_StartSound(&actor->r, actor->info->deathsound);
+}
//---------------------------------------------------------------------------
//
@@ -947,21 +964,21 @@
//
//---------------------------------------------------------------------------
-void P_MinotaurSlam(mobj_t *source, mobj_t *target)
+void P_MinotaurSlam(mobj_t * source, mobj_t * target)
{
- angle_t angle;
- fixed_t thrust;
+ angle_t angle;
+ fixed_t thrust;
- angle = R_PointToAngle2(source->x, source->y, target->x, target->y);
- angle >>= ANGLETOFINESHIFT;
- thrust = 16*FRACUNIT+(P_Random()<<10);
- target->momx += FixedMul(thrust, finecosine[angle]);
- target->momy += FixedMul(thrust, finesine[angle]);
- P_DamageMobj(target, NULL, NULL, HITDICE(6));
- if(target->player)
- {
- target->reactiontime = 14+(P_Random()&7);
- }
+ angle = R_PointToAngle2(source->x, source->y, target->x, target->y);
+ angle >>= ANGLETOFINESHIFT;
+ thrust = 16 * FRACUNIT + (P_Random() << 10);
+ target->momx += FixedMul(thrust, finecosine[angle]);
+ target->momy += FixedMul(thrust, finesine[angle]);
+ P_DamageMobj(target, NULL, NULL, HITDICE(6));
+ if (target->player)
+ {
+ target->reactiontime = 14 + (P_Random() & 7);
+ }
}
//---------------------------------------------------------------------------
@@ -970,30 +987,30 @@
//
//---------------------------------------------------------------------------
-void P_TouchWhirlwind(mobj_t *target)
+void P_TouchWhirlwind(mobj_t * target)
{
- int randVal;
+ int randVal;
- target->angle += (P_Random()-P_Random())<<20;
- target->momx += (P_Random()-P_Random())<<10;
- target->momy += (P_Random()-P_Random())<<10;
- if(leveltime&16 && !(target->flags2&MF2_BOSS))
- {
- randVal = P_Random();
- if(randVal > 160)
- {
- randVal = 160;
- }
- target->momz += randVal<<10;
- if(target->momz > 12*FRACUNIT)
- {
- target->momz = 12*FRACUNIT;
- }
- }
- if(!(leveltime&7))
- {
- P_DamageMobj(target, NULL, NULL, 3);
- }
+ target->angle += (P_Random() - P_Random()) << 20;
+ target->momx += (P_Random() - P_Random()) << 10;
+ target->momy += (P_Random() - P_Random()) << 10;
+ if (leveltime & 16 && !(target->flags2 & MF2_BOSS))
+ {
+ randVal = P_Random();
+ if (randVal > 160)
+ {
+ randVal = 160;
+ }
+ target->momz += randVal << 10;
+ if (target->momz > 12 * FRACUNIT)
+ {
+ target->momz = 12 * FRACUNIT;
+ }
+ }
+ if (!(leveltime & 7))
+ {
+ P_DamageMobj(target, NULL, NULL, 3);
+ }
}
//---------------------------------------------------------------------------
@@ -1004,55 +1021,55 @@
//
//---------------------------------------------------------------------------
-boolean P_ChickenMorphPlayer(player_t *player)
+boolean P_ChickenMorphPlayer(player_t * player)
{
- mobj_t *pmo;
- mobj_t *fog;
- mobj_t *chicken;
- fixed_t x;
- fixed_t y;
- fixed_t z;
- angle_t angle;
- int oldFlags2;
+ mobj_t *pmo;
+ mobj_t *fog;
+ mobj_t *chicken;
+ fixed_t x;
+ fixed_t y;
+ fixed_t z;
+ angle_t angle;
+ int oldFlags2;
- if(player->chickenTics)
- {
- if((player->chickenTics < CHICKENTICS-TICSPERSEC)
- && !player->powers[pw_weaponlevel2])
- { // Make a super chicken
- P_GivePower(player, pw_weaponlevel2);
- }
- return(false);
- }
- if(player->powers[pw_invulnerability])
- { // Immune when invulnerable
- return(false);
- }
- pmo = player->mo;
- x = pmo->x;
- y = pmo->y;
- z = pmo->z;
- angle = pmo->angle;
- oldFlags2 = pmo->flags2;
- P_SetMobjState(pmo, S_FREETARGMOBJ);
- fog = P_SpawnMobj(x, y, z+TELEFOGHEIGHT, MT_TFOG);
- S_StartSound(fog, sfx_telept);
- chicken = P_SpawnMobj(x, y, z, MT_CHICPLAYER);
- chicken->special1 = player->readyweapon;
- chicken->angle = angle;
- chicken->player = player;
- player->health = chicken->health = MAXCHICKENHEALTH;
- player->mo = chicken;
- player->armorpoints = player->armortype = 0;
- player->powers[pw_invisibility] = 0;
- player->powers[pw_weaponlevel2] = 0;
- if(oldFlags2&MF2_FLY)
- {
- chicken->flags2 |= MF2_FLY;
- }
- player->chickenTics = CHICKENTICS;
- P_ActivateBeak(player);
- return(true);
+ if (player->chickenTics)
+ {
+ if ((player->chickenTics < CHICKENTICS - TICSPERSEC)
+ && !player->powers[pw_weaponlevel2])
+ { // Make a super chicken
+ P_GivePower(player, pw_weaponlevel2);
+ }
+ return (false);
+ }
+ if (player->powers[pw_invulnerability])
+ { // Immune when invulnerable
+ return (false);
+ }
+ pmo = player->mo;
+ x = pmo->x;
+ y = pmo->y;
+ z = pmo->z;
+ angle = pmo->angle;
+ oldFlags2 = pmo->flags2;
+ P_SetMobjState(pmo, S_FREETARGMOBJ);
+ fog = P_SpawnMobj(x, y, z + TELEFOGHEIGHT, MT_TFOG);
+ S_StartSound(fog, sfx_telept);
+ chicken = P_SpawnMobj(x, y, z, MT_CHICPLAYER);
+ chicken->special1 = player->readyweapon;
+ chicken->angle = angle;
+ chicken->player = player;
+ player->health = chicken->health = MAXCHICKENHEALTH;
+ player->mo = chicken;
+ player->armorpoints = player->armortype = 0;
+ player->powers[pw_invisibility] = 0;
+ player->powers[pw_weaponlevel2] = 0;
+ if (oldFlags2 & MF2_FLY)
+ {
+ chicken->flags2 |= MF2_FLY;
+ }
+ player->chickenTics = CHICKENTICS;
+ P_ActivateBeak(player);
+ return (true);
}
//---------------------------------------------------------------------------
@@ -1061,51 +1078,51 @@
//
//---------------------------------------------------------------------------
-boolean P_ChickenMorph(mobj_t *actor)
+boolean P_ChickenMorph(mobj_t * actor)
{
- mobj_t *fog;
- mobj_t *chicken;
- mobj_t *target;
- mobjtype_t moType;
- fixed_t x;
- fixed_t y;
- fixed_t z;
- angle_t angle;
- int ghost;
+ mobj_t *fog;
+ mobj_t *chicken;
+ mobj_t *target;
+ mobjtype_t moType;
+ fixed_t x;
+ fixed_t y;
+ fixed_t z;
+ angle_t angle;
+ int ghost;
- if(actor->player)
- {
- return(false);
- }
- moType = actor->type;
- switch(moType)
- {
- case MT_POD:
- case MT_CHICKEN:
- case MT_HEAD:
- case MT_MINOTAUR:
- case MT_SORCERER1:
- case MT_SORCERER2:
- return(false);
- default:
- break;
- }
- x = actor->x;
- y = actor->y;
- z = actor->z;
- angle = actor->angle;
- ghost = actor->flags&MF_SHADOW;
- target = actor->target;
- P_SetMobjState(actor, S_FREETARGMOBJ);
- fog = P_SpawnMobj(x, y, z+TELEFOGHEIGHT, MT_TFOG);
- S_StartSound(fog, sfx_telept);
- chicken = P_SpawnMobj(x, y, z, MT_CHICKEN);
- chicken->special2 = moType;
- chicken->special1 = CHICKENTICS+P_Random();
- chicken->flags |= ghost;
- chicken->target = target;
- chicken->angle = angle;
- return(true);
+ if (actor->player)
+ {
+ return (false);
+ }
+ moType = actor->type;
+ switch (moType)
+ {
+ case MT_POD:
+ case MT_CHICKEN:
+ case MT_HEAD:
+ case MT_MINOTAUR:
+ case MT_SORCERER1:
+ case MT_SORCERER2:
+ return (false);
+ default:
+ break;
+ }
+ x = actor->x;
+ y = actor->y;
+ z = actor->z;
+ angle = actor->angle;
+ ghost = actor->flags & MF_SHADOW;
+ target = actor->target;
+ P_SetMobjState(actor, S_FREETARGMOBJ);
+ fog = P_SpawnMobj(x, y, z + TELEFOGHEIGHT, MT_TFOG);
+ S_StartSound(fog, sfx_telept);
+ chicken = P_SpawnMobj(x, y, z, MT_CHICKEN);
+ chicken->special2 = moType;
+ chicken->special1 = CHICKENTICS + P_Random();
+ chicken->flags |= ghost;
+ chicken->target = target;
+ chicken->angle = angle;
+ return (true);
}
//---------------------------------------------------------------------------
@@ -1114,20 +1131,20 @@
//
//---------------------------------------------------------------------------
-boolean P_AutoUseChaosDevice(player_t *player)
+boolean P_AutoUseChaosDevice(player_t * player)
{
- int i;
+ int i;
- for(i = 0; i < player->inventorySlotNum; i++)
- {
- if(player->inventory[i].type == arti_teleport)
- {
- P_PlayerUseArtifact(player, arti_teleport);
- player->health = player->mo->health = (player->health+1)/2;
- return(true);
- }
- }
- return(false);
+ for (i = 0; i < player->inventorySlotNum; i++)
+ {
+ if (player->inventory[i].type == arti_teleport)
+ {
+ P_PlayerUseArtifact(player, arti_teleport);
+ player->health = player->mo->health = (player->health + 1) / 2;
+ return (true);
+ }
+ }
+ return (false);
}
//---------------------------------------------------------------------------
@@ -1136,65 +1153,65 @@
//
//---------------------------------------------------------------------------
-void P_AutoUseHealth(player_t *player, int saveHealth)
+void P_AutoUseHealth(player_t * player, int saveHealth)
{
- int i;
- int count;
- int normalCount;
- int normalSlot;
- int superCount;
- int superSlot;
+ int i;
+ int count;
+ int normalCount;
+ int normalSlot;
+ int superCount;
+ int superSlot;
- normalCount = superCount = 0;
- for(i = 0; i < player->inventorySlotNum; i++)
- {
- if(player->inventory[i].type == arti_health)
- {
- normalSlot = i;
- normalCount = player->inventory[i].count;
- }
- else if(player->inventory[i].type == arti_superhealth)
- {
- superSlot = i;
- superCount = player->inventory[i].count;
- }
- }
- if((gameskill == sk_baby) && (normalCount*25 >= saveHealth))
- { // Use quartz flasks
- count = (saveHealth+24)/25;
- for(i = 0; i < count; i++)
- {
- player->health += 25;
- P_PlayerRemoveArtifact(player, normalSlot);
- }
- }
- else if(superCount*100 >= saveHealth)
- { // Use mystic urns
- count = (saveHealth+99)/100;
- for(i = 0; i < count; i++)
- {
- player->health += 100;
- P_PlayerRemoveArtifact(player, superSlot);
- }
- }
- else if((gameskill == sk_baby)
- && (superCount*100+normalCount*25 >= saveHealth))
- { // Use mystic urns and quartz flasks
- count = (saveHealth+24)/25;
- saveHealth -= count*25;
- for(i = 0; i < count; i++)
- {
- player->health += 25;
- P_PlayerRemoveArtifact(player, normalSlot);
- }
- count = (saveHealth+99)/100;
- for(i = 0; i < count; i++)
- {
- player->health += 100;
- P_PlayerRemoveArtifact(player, normalSlot);
- }
- }
- player->mo->health = player->health;
+ normalCount = superCount = 0;
+ for (i = 0; i < player->inventorySlotNum; i++)
+ {
+ if (player->inventory[i].type == arti_health)
+ {
+ normalSlot = i;
+ normalCount = player->inventory[i].count;
+ }
+ else if (player->inventory[i].type == arti_superhealth)
+ {
+ superSlot = i;
+ superCount = player->inventory[i].count;
+ }
+ }
+ if ((gameskill == sk_baby) && (normalCount * 25 >= saveHealth))
+ { // Use quartz flasks
+ count = (saveHealth + 24) / 25;
+ for (i = 0; i < count; i++)
+ {
+ player->health += 25;
+ P_PlayerRemoveArtifact(player, normalSlot);
+ }
+ }
+ else if (superCount * 100 >= saveHealth)
+ { // Use mystic urns
+ count = (saveHealth + 99) / 100;
+ for (i = 0; i < count; i++)
+ {
+ player->health += 100;
+ P_PlayerRemoveArtifact(player, superSlot);
+ }
+ }
+ else if ((gameskill == sk_baby)
+ && (superCount * 100 + normalCount * 25 >= saveHealth))
+ { // Use mystic urns and quartz flasks
+ count = (saveHealth + 24) / 25;
+ saveHealth -= count * 25;
+ for (i = 0; i < count; i++)
+ {
+ player->health += 25;
+ P_PlayerRemoveArtifact(player, normalSlot);
+ }
+ count = (saveHealth + 99) / 100;
+ for (i = 0; i < count; i++)
+ {
+ player->health += 100;
+ P_PlayerRemoveArtifact(player, normalSlot);
+ }
+ }
+ player->mo->health = player->health;
}
/*
@@ -1213,261 +1230,255 @@
*/
void P_DamageMobj
-(
- mobj_t *target,
- mobj_t *inflictor,
- mobj_t *source,
- int damage
-)
+ (mobj_t * target, mobj_t * inflictor, mobj_t * source, int damage)
{
- unsigned ang;
- int saved;
- player_t *player;
- fixed_t thrust;
- int temp;
+ unsigned ang;
+ int saved;
+ player_t *player;
+ fixed_t thrust;
+ int temp;
- if(!(target->flags&MF_SHOOTABLE))
- {
- // Shouldn't happen
- return;
- }
- if(target->health <= 0)
- {
- return;
- }
- if(target->flags&MF_SKULLFLY)
- {
- if(target->type == MT_MINOTAUR)
- { // Minotaur is invulnerable during charge attack
- return;
- }
- target->momx = target->momy = target->momz = 0;
- }
- player = target->player;
- if(player && gameskill == sk_baby)
- {
- // Take half damage in trainer mode
- damage >>= 1;
- }
- // Special damage types
- if(inflictor)
- {
- switch(inflictor->type)
- {
- case MT_EGGFX:
- if(player)
- {
- P_ChickenMorphPlayer(player);
- }
- else
- {
- P_ChickenMorph(target);
- }
- return; // Always return
- case MT_WHIRLWIND:
- P_TouchWhirlwind(target);
- return;
- case MT_MINOTAUR:
- if(inflictor->flags&MF_SKULLFLY)
- { // Slam only when in charge mode
- P_MinotaurSlam(inflictor, target);
- return;
- }
- break;
- case MT_MACEFX4: // Death ball
- if((target->flags2&MF2_BOSS) || target->type == MT_HEAD)
- { // Don't allow cheap boss kills
- break;
- }
- else if(target->player)
- { // Player specific checks
- if(target->player->powers[pw_invulnerability])
- { // Can't hurt invulnerable players
- break;
- }
- if(P_AutoUseChaosDevice(target->player))
- { // Player was saved using chaos device
- return;
- }
- }
- damage = 10000; // Something's gonna die
- break;
- case MT_PHOENIXFX2: // Flame thrower
- if(target->player && P_Random() < 128)
- { // Freeze player for a bit
- target->reactiontime += 4;
- }
- break;
- case MT_RAINPLR1: // Rain missiles
- case MT_RAINPLR2:
- case MT_RAINPLR3:
- case MT_RAINPLR4:
- if(target->flags2&MF2_BOSS)
- { // Decrease damage for bosses
- damage = (P_Random()&7)+1;
- }
- break;
- case MT_HORNRODFX2:
- case MT_PHOENIXFX1:
- if(target->type == MT_SORCERER2 && P_Random() < 96)
- { // D'Sparil teleports away
- P_DSparilTeleport(target);
- return;
- }
- break;
- case MT_BLASTERFX1:
- case MT_RIPPER:
- if(target->type == MT_HEAD)
- { // Less damage to Ironlich bosses
- damage = P_Random()&1;
- if(!damage)
- {
- return;
- }
- }
- break;
- default:
- break;
- }
- }
- // Push the target unless source is using the gauntlets
- if(inflictor && (!source || !source->player
- || source->player->readyweapon != wp_gauntlets)
- && !(inflictor->flags2&MF2_NODMGTHRUST))
- {
- ang = R_PointToAngle2(inflictor->x, inflictor->y,
- target->x, target->y);
- //thrust = damage*(FRACUNIT>>3)*100/target->info->mass;
- thrust = damage*(FRACUNIT>>3)*150/target->info->mass;
- // make fall forwards sometimes
- if((damage < 40) && (damage > target->health)
- && (target->z-inflictor->z > 64*FRACUNIT) && (P_Random()&1))
- {
- ang += ANG180;
- thrust *= 4;
- }
- ang >>= ANGLETOFINESHIFT;
- if(source && source->player && (source == inflictor)
- && source->player->powers[pw_weaponlevel2]
- && source->player->readyweapon == wp_staff)
- {
- // Staff power level 2
- target->momx += FixedMul(10*FRACUNIT, finecosine[ang]);
- target->momy += FixedMul(10*FRACUNIT, finesine[ang]);
- if(!(target->flags&MF_NOGRAVITY))
- {
- target->momz += 5*FRACUNIT;
- }
- }
- else
- {
- target->momx += FixedMul(thrust, finecosine[ang]);
- target->momy += FixedMul(thrust, finesine[ang]);
- }
- }
+ if (!(target->flags & MF_SHOOTABLE))
+ {
+ // Shouldn't happen
+ return;
+ }
+ if (target->health <= 0)
+ {
+ return;
+ }
+ if (target->flags & MF_SKULLFLY)
+ {
+ if (target->type == MT_MINOTAUR)
+ { // Minotaur is invulnerable during charge attack
+ return;
+ }
+ target->momx = target->momy = target->momz = 0;
+ }
+ player = target->player;
+ if (player && gameskill == sk_baby)
+ {
+ // Take half damage in trainer mode
+ damage >>= 1;
+ }
+ // Special damage types
+ if (inflictor)
+ {
+ switch (inflictor->type)
+ {
+ case MT_EGGFX:
+ if (player)
+ {
+ P_ChickenMorphPlayer(player);
+ }
+ else
+ {
+ P_ChickenMorph(target);
+ }
+ return; // Always return
+ case MT_WHIRLWIND:
+ P_TouchWhirlwind(target);
+ return;
+ case MT_MINOTAUR:
+ if (inflictor->flags & MF_SKULLFLY)
+ { // Slam only when in charge mode
+ P_MinotaurSlam(inflictor, target);
+ return;
+ }
+ break;
+ case MT_MACEFX4: // Death ball
+ if ((target->flags2 & MF2_BOSS) || target->type == MT_HEAD)
+ { // Don't allow cheap boss kills
+ break;
+ }
+ else if (target->player)
+ { // Player specific checks
+ if (target->player->powers[pw_invulnerability])
+ { // Can't hurt invulnerable players
+ break;
+ }
+ if (P_AutoUseChaosDevice(target->player))
+ { // Player was saved using chaos device
+ return;
+ }
+ }
+ damage = 10000; // Something's gonna die
+ break;
+ case MT_PHOENIXFX2: // Flame thrower
+ if (target->player && P_Random() < 128)
+ { // Freeze player for a bit
+ target->reactiontime += 4;
+ }
+ break;
+ case MT_RAINPLR1: // Rain missiles
+ case MT_RAINPLR2:
+ case MT_RAINPLR3:
+ case MT_RAINPLR4:
+ if (target->flags2 & MF2_BOSS)
+ { // Decrease damage for bosses
+ damage = (P_Random() & 7) + 1;
+ }
+ break;
+ case MT_HORNRODFX2:
+ case MT_PHOENIXFX1:
+ if (target->type == MT_SORCERER2 && P_Random() < 96)
+ { // D'Sparil teleports away
+ P_DSparilTeleport(target);
+ return;
+ }
+ break;
+ case MT_BLASTERFX1:
+ case MT_RIPPER:
+ if (target->type == MT_HEAD)
+ { // Less damage to Ironlich bosses
+ damage = P_Random() & 1;
+ if (!damage)
+ {
+ return;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ // Push the target unless source is using the gauntlets
+ if (inflictor && (!source || !source->player
+ || source->player->readyweapon != wp_gauntlets)
+ && !(inflictor->flags2 & MF2_NODMGTHRUST))
+ {
+ ang = R_PointToAngle2(inflictor->x, inflictor->y,
+ target->x, target->y);
+ //thrust = damage*(FRACUNIT>>3)*100/target->info->mass;
+ thrust = damage * (FRACUNIT >> 3) * 150 / target->info->mass;
+ // make fall forwards sometimes
+ if ((damage < 40) && (damage > target->health)
+ && (target->z - inflictor->z > 64 * FRACUNIT) && (P_Random() & 1))
+ {
+ ang += ANG180;
+ thrust *= 4;
+ }
+ ang >>= ANGLETOFINESHIFT;
+ if (source && source->player && (source == inflictor)
+ && source->player->powers[pw_weaponlevel2]
+ && source->player->readyweapon == wp_staff)
+ {
+ // Staff power level 2
+ target->momx += FixedMul(10 * FRACUNIT, finecosine[ang]);
+ target->momy += FixedMul(10 * FRACUNIT, finesine[ang]);
+ if (!(target->flags & MF_NOGRAVITY))
+ {
+ target->momz += 5 * FRACUNIT;
+ }
+ }
+ else
+ {
+ target->momx += FixedMul(thrust, finecosine[ang]);
+ target->momy += FixedMul(thrust, finesine[ang]);
+ }
+ }
- //
- // player specific
- //
- if(player)
- {
- // end of game hell hack
- //if(target->subsector->sector->special == 11
- // && damage >= target->health)
- //{
- // damage = target->health - 1;
- //}
+ //
+ // player specific
+ //
+ if (player)
+ {
+ // end of game hell hack
+ //if(target->subsector->sector->special == 11
+ // && damage >= target->health)
+ //{
+ // damage = target->health - 1;
+ //}
- if(damage < 1000 && ((player->cheats&CF_GODMODE)
- || player->powers[pw_invulnerability]))
- {
- return;
- }
- if(player->armortype)
- {
- if(player->armortype == 1)
- {
- saved = damage>>1;
- }
- else
- {
- saved = (damage>>1)+(damage>>2);
- }
- if(player->armorpoints <= saved)
- {
- // armor is used up
- saved = player->armorpoints;
- player->armortype = 0;
- }
- player->armorpoints -= saved;
- damage -= saved;
- }
- if(damage >= player->health
- && ((gameskill == sk_baby) || deathmatch)
- && !player->chickenTics)
- { // Try to use some inventory health
- P_AutoUseHealth(player, damage-player->health+1);
- }
- player->health -= damage; // mirror mobj health here for Dave
- if(player->health < 0)
- {
- player->health = 0;
- }
- player->attacker = source;
- player->damagecount += damage; // add damage after armor / invuln
- if(player->damagecount > 100)
- {
- player->damagecount = 100; // teleport stomp does 10k points...
- }
- temp = damage < 100 ? damage : 100;
- if(player == &players[consoleplayer])
- {
- I_Tactile(40, 10, 40+temp*2);
- SB_PaletteFlash();
- }
- }
+ if (damage < 1000 && ((player->cheats & CF_GODMODE)
+ || player->powers[pw_invulnerability]))
+ {
+ return;
+ }
+ if (player->armortype)
+ {
+ if (player->armortype == 1)
+ {
+ saved = damage >> 1;
+ }
+ else
+ {
+ saved = (damage >> 1) + (damage >> 2);
+ }
+ if (player->armorpoints <= saved)
+ {
+ // armor is used up
+ saved = player->armorpoints;
+ player->armortype = 0;
+ }
+ player->armorpoints -= saved;
+ damage -= saved;
+ }
+ if (damage >= player->health
+ && ((gameskill == sk_baby) || deathmatch) && !player->chickenTics)
+ { // Try to use some inventory health
+ P_AutoUseHealth(player, damage - player->health + 1);
+ }
+ player->health -= damage; // mirror mobj health here for Dave
+ if (player->health < 0)
+ {
+ player->health = 0;
+ }
+ player->attacker = source;
+ player->damagecount += damage; // add damage after armor / invuln
+ if (player->damagecount > 100)
+ {
+ player->damagecount = 100; // teleport stomp does 10k points...
+ }
+ temp = damage < 100 ? damage : 100;
+ if (player == &players[consoleplayer])
+ {
+ I_Tactile(40, 10, 40 + temp * 2);
+ SB_PaletteFlash();
+ }
+ }
- //
- // do the damage
- //
- target->health -= damage;
- if(target->health <= 0)
- { // Death
- target->special1 = damage;
- if(target->type == MT_POD && source && source->type != MT_POD)
- { // Make sure players get frags for chain-reaction kills
- target->target = source;
- }
- if(player && inflictor && !player->chickenTics)
- { // Check for flame death
- if((inflictor->flags2&MF2_FIREDAMAGE)
- || ((inflictor->type == MT_PHOENIXFX1)
- && (target->health > -50) && (damage > 25)))
- {
- target->flags2 |= MF2_FIREDAMAGE;
- }
- }
- P_KillMobj(source, target);
- return;
- }
- if((P_Random() < target->info->painchance)
- && !(target->flags&MF_SKULLFLY))
- {
- target->flags |= MF_JUSTHIT; // fight back!
- P_SetMobjState(target, target->info->painstate);
- }
- target->reactiontime = 0; // we're awake now...
- if(!target->threshold && source && !(source->flags2&MF2_BOSS)
- && !(target->type == MT_SORCERER2 && source->type == MT_WIZARD))
- {
- // Target actor is not intent on another actor,
- // so make him chase after source
- target->target = source;
- target->threshold = BASETHRESHOLD;
- if(target->state == &states[target->info->spawnstate]
- && target->info->seestate != S_NULL)
- {
- P_SetMobjState(target, target->info->seestate);
- }
- }
+ //
+ // do the damage
+ //
+ target->health -= damage;
+ if (target->health <= 0)
+ { // Death
+ target->special1 = damage;
+ if (target->type == MT_POD && source && source->type != MT_POD)
+ { // Make sure players get frags for chain-reaction kills
+ target->target = source;
+ }
+ if (player && inflictor && !player->chickenTics)
+ { // Check for flame death
+ if ((inflictor->flags2 & MF2_FIREDAMAGE)
+ || ((inflictor->type == MT_PHOENIXFX1)
+ && (target->health > -50) && (damage > 25)))
+ {
+ target->flags2 |= MF2_FIREDAMAGE;
+ }
+ }
+ P_KillMobj(source, target);
+ return;
+ }
+ if ((P_Random() < target->info->painchance)
+ && !(target->flags & MF_SKULLFLY))
+ {
+ target->flags |= MF_JUSTHIT; // fight back!
+ P_SetMobjState(target, target->info->painstate);
+ }
+ target->reactiontime = 0; // we're awake now...
+ if (!target->threshold && source && !(source->flags2 & MF2_BOSS)
+ && !(target->type == MT_SORCERER2 && source->type == MT_WIZARD))
+ {
+ // Target actor is not intent on another actor,
+ // so make him chase after source
+ target->target = source;
+ target->threshold = BASETHRESHOLD;
+ if (target->state == &states[target->info->spawnstate]
+ && target->info->seestate != S_NULL)
+ {
+ P_SetMobjState(target, target->info->seestate);
+ }
+ }
}
--- a/src/heretic/p_lights.c
+++ b/src/heretic/p_lights.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
#include "DoomDef.h"
#include "P_local.h"
@@ -4,7 +26,7 @@
//==================================================================
//==================================================================
//
-// BROKEN LIGHT FLASHING
+// BROKEN LIGHT FLASHING
//
//==================================================================
//==================================================================
@@ -11,248 +33,247 @@
//==================================================================
//
-// T_LightFlash
+// T_LightFlash
//
-// After the map has been loaded, scan each sector for specials
-// that spawn thinkers
+// After the map has been loaded, scan each sector for specials
+// that spawn thinkers
//
//==================================================================
-void T_LightFlash (lightflash_t *flash)
+void T_LightFlash(lightflash_t * flash)
{
- if (--flash->count)
- return;
-
- if (flash->sector->lightlevel == flash->maxlight)
- {
- flash-> sector->lightlevel = flash->minlight;
- flash->count = (P_Random()&flash->mintime)+1;
- }
- else
- {
- flash-> sector->lightlevel = flash->maxlight;
- flash->count = (P_Random()&flash->maxtime)+1;
- }
+ if (--flash->count)
+ return;
+ if (flash->sector->lightlevel == flash->maxlight)
+ {
+ flash->sector->lightlevel = flash->minlight;
+ flash->count = (P_Random() & flash->mintime) + 1;
+ }
+ else
+ {
+ flash->sector->lightlevel = flash->maxlight;
+ flash->count = (P_Random() & flash->maxtime) + 1;
+ }
+
}
//==================================================================
//
-// P_SpawnLightFlash
+// P_SpawnLightFlash
//
-// After the map has been loaded, scan each sector for specials that spawn thinkers
+// After the map has been loaded, scan each sector for specials that spawn thinkers
//
//==================================================================
-void P_SpawnLightFlash (sector_t *sector)
+void P_SpawnLightFlash(sector_t * sector)
{
- lightflash_t *flash;
-
- sector->special = 0; // nothing special about it during gameplay
-
- flash = Z_Malloc ( sizeof(*flash), PU_LEVSPEC, 0);
- P_AddThinker (&flash->thinker);
- flash->thinker.function = T_LightFlash;
- flash->sector = sector;
- flash->maxlight = sector->lightlevel;
+ lightflash_t *flash;
- flash->minlight = P_FindMinSurroundingLight(sector,sector->lightlevel);
- flash->maxtime = 64;
- flash->mintime = 7;
- flash->count = (P_Random()&flash->maxtime)+1;
+ sector->special = 0; // nothing special about it during gameplay
+
+ flash = Z_Malloc(sizeof(*flash), PU_LEVSPEC, 0);
+ P_AddThinker(&flash->thinker);
+ flash->thinker.function = T_LightFlash;
+ flash->sector = sector;
+ flash->maxlight = sector->lightlevel;
+
+ flash->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel);
+ flash->maxtime = 64;
+ flash->mintime = 7;
+ flash->count = (P_Random() & flash->maxtime) + 1;
}
//==================================================================
//
-// STROBE LIGHT FLASHING
+// STROBE LIGHT FLASHING
//
//==================================================================
//==================================================================
//
-// T_StrobeFlash
+// T_StrobeFlash
//
-// After the map has been loaded, scan each sector for specials that spawn thinkers
+// After the map has been loaded, scan each sector for specials that spawn thinkers
//
//==================================================================
-void T_StrobeFlash (strobe_t *flash)
+void T_StrobeFlash(strobe_t * flash)
{
- if (--flash->count)
- return;
-
- if (flash->sector->lightlevel == flash->minlight)
- {
- flash-> sector->lightlevel = flash->maxlight;
- flash->count = flash->brighttime;
- }
- else
- {
- flash-> sector->lightlevel = flash->minlight;
- flash->count =flash->darktime;
- }
+ if (--flash->count)
+ return;
+ if (flash->sector->lightlevel == flash->minlight)
+ {
+ flash->sector->lightlevel = flash->maxlight;
+ flash->count = flash->brighttime;
+ }
+ else
+ {
+ flash->sector->lightlevel = flash->minlight;
+ flash->count = flash->darktime;
+ }
+
}
//==================================================================
//
-// P_SpawnLightFlash
+// P_SpawnLightFlash
//
-// After the map has been loaded, scan each sector for specials that spawn thinkers
+// After the map has been loaded, scan each sector for specials that spawn thinkers
//
//==================================================================
-void P_SpawnStrobeFlash (sector_t *sector,int fastOrSlow, int inSync)
+void P_SpawnStrobeFlash(sector_t * sector, int fastOrSlow, int inSync)
{
- strobe_t *flash;
-
- flash = Z_Malloc ( sizeof(*flash), PU_LEVSPEC, 0);
- P_AddThinker (&flash->thinker);
- flash->sector = sector;
- flash->darktime = fastOrSlow;
- flash->brighttime = STROBEBRIGHT;
- flash->thinker.function = T_StrobeFlash;
- flash->maxlight = sector->lightlevel;
- flash->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel);
-
- if (flash->minlight == flash->maxlight)
- flash->minlight = 0;
- sector->special = 0; // nothing special about it during gameplay
+ strobe_t *flash;
- if (!inSync)
- flash->count = (P_Random()&7)+1;
- else
- flash->count = 1;
+ flash = Z_Malloc(sizeof(*flash), PU_LEVSPEC, 0);
+ P_AddThinker(&flash->thinker);
+ flash->sector = sector;
+ flash->darktime = fastOrSlow;
+ flash->brighttime = STROBEBRIGHT;
+ flash->thinker.function = T_StrobeFlash;
+ flash->maxlight = sector->lightlevel;
+ flash->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel);
+
+ if (flash->minlight == flash->maxlight)
+ flash->minlight = 0;
+ sector->special = 0; // nothing special about it during gameplay
+
+ if (!inSync)
+ flash->count = (P_Random() & 7) + 1;
+ else
+ flash->count = 1;
}
//==================================================================
//
-// Start strobing lights (usually from a trigger)
+// Start strobing lights (usually from a trigger)
//
//==================================================================
-void EV_StartLightStrobing(line_t *line)
+void EV_StartLightStrobing(line_t * line)
{
- int secnum;
- sector_t *sec;
-
- secnum = -1;
- while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
- {
- sec = §ors[secnum];
- if (sec->specialdata)
- continue;
-
- P_SpawnStrobeFlash (sec,SLOWDARK, 0);
- }
+ int secnum;
+ sector_t *sec;
+
+ secnum = -1;
+ while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0)
+ {
+ sec = §ors[secnum];
+ if (sec->specialdata)
+ continue;
+
+ P_SpawnStrobeFlash(sec, SLOWDARK, 0);
+ }
}
//==================================================================
//
-// TURN LINE'S TAG LIGHTS OFF
+// TURN LINE'S TAG LIGHTS OFF
//
//==================================================================
-void EV_TurnTagLightsOff(line_t *line)
+void EV_TurnTagLightsOff(line_t * line)
{
- int i;
- int j;
- int min;
- sector_t *sector;
- sector_t *tsec;
- line_t *templine;
-
- sector = sectors;
- for (j = 0;j < numsectors; j++, sector++)
- if (sector->tag == line->tag)
- {
- min = sector->lightlevel;
- for (i = 0;i < sector->linecount; i++)
- {
- templine = sector->lines[i];
- tsec = getNextSector(templine,sector);
- if (!tsec)
- continue;
- if (tsec->lightlevel < min)
- min = tsec->lightlevel;
- }
- sector->lightlevel = min;
- }
+ int i;
+ int j;
+ int min;
+ sector_t *sector;
+ sector_t *tsec;
+ line_t *templine;
+
+ sector = sectors;
+ for (j = 0; j < numsectors; j++, sector++)
+ if (sector->tag == line->tag)
+ {
+ min = sector->lightlevel;
+ for (i = 0; i < sector->linecount; i++)
+ {
+ templine = sector->lines[i];
+ tsec = getNextSector(templine, sector);
+ if (!tsec)
+ continue;
+ if (tsec->lightlevel < min)
+ min = tsec->lightlevel;
+ }
+ sector->lightlevel = min;
+ }
}
//==================================================================
//
-// TURN LINE'S TAG LIGHTS ON
+// TURN LINE'S TAG LIGHTS ON
//
//==================================================================
-void EV_LightTurnOn(line_t *line, int bright)
+void EV_LightTurnOn(line_t * line, int bright)
{
- int i;
- int j;
- sector_t *sector;
- sector_t *temp;
- line_t *templine;
-
- sector = sectors;
-
- for (i=0;i<numsectors;i++, sector++)
- if (sector->tag == line->tag)
- {
- //
- // bright = 0 means to search for highest
- // light level surrounding sector
- //
- if (!bright)
- {
- for (j = 0;j < sector->linecount; j++)
- {
- templine = sector->lines[j];
- temp = getNextSector(templine,sector);
- if (!temp)
- continue;
- if (temp->lightlevel > bright)
- bright = temp->lightlevel;
- }
- }
- sector-> lightlevel = bright;
- }
-}
+ int i;
+ int j;
+ sector_t *sector;
+ sector_t *temp;
+ line_t *templine;
+
+ sector = sectors;
+
+ for (i = 0; i < numsectors; i++, sector++)
+ if (sector->tag == line->tag)
+ {
+ //
+ // bright = 0 means to search for highest
+ // light level surrounding sector
+ //
+ if (!bright)
+ {
+ for (j = 0; j < sector->linecount; j++)
+ {
+ templine = sector->lines[j];
+ temp = getNextSector(templine, sector);
+ if (!temp)
+ continue;
+ if (temp->lightlevel > bright)
+ bright = temp->lightlevel;
+ }
+ }
+ sector->lightlevel = bright;
+ }
+}
//==================================================================
//
-// Spawn glowing light
+// Spawn glowing light
//
//==================================================================
-void T_Glow(glow_t *g)
+void T_Glow(glow_t * g)
{
- switch(g->direction)
- {
- case -1: // DOWN
- g->sector->lightlevel -= GLOWSPEED;
- if (g->sector->lightlevel <= g->minlight)
- {
- g->sector->lightlevel += GLOWSPEED;
- g->direction = 1;
- }
- break;
- case 1: // UP
- g->sector->lightlevel += GLOWSPEED;
- if (g->sector->lightlevel >= g->maxlight)
- {
- g->sector->lightlevel -= GLOWSPEED;
- g->direction = -1;
- }
- break;
- }
+ switch (g->direction)
+ {
+ case -1: // DOWN
+ g->sector->lightlevel -= GLOWSPEED;
+ if (g->sector->lightlevel <= g->minlight)
+ {
+ g->sector->lightlevel += GLOWSPEED;
+ g->direction = 1;
+ }
+ break;
+ case 1: // UP
+ g->sector->lightlevel += GLOWSPEED;
+ if (g->sector->lightlevel >= g->maxlight)
+ {
+ g->sector->lightlevel -= GLOWSPEED;
+ g->direction = -1;
+ }
+ break;
+ }
}
-void P_SpawnGlowingLight(sector_t *sector)
+void P_SpawnGlowingLight(sector_t * sector)
{
- glow_t *g;
-
- g = Z_Malloc( sizeof(*g), PU_LEVSPEC, 0);
- P_AddThinker(&g->thinker);
- g->sector = sector;
- g->minlight = P_FindMinSurroundingLight(sector,sector->lightlevel);
- g->maxlight = sector->lightlevel;
- g->thinker.function = T_Glow;
- g->direction = -1;
+ glow_t *g;
- sector->special = 0;
-}
+ g = Z_Malloc(sizeof(*g), PU_LEVSPEC, 0);
+ P_AddThinker(&g->thinker);
+ g->sector = sector;
+ g->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel);
+ g->maxlight = sector->lightlevel;
+ g->thinker.function = T_Glow;
+ g->direction = -1;
+ sector->special = 0;
+}
--- a/src/heretic/p_local.h
+++ b/src/heretic/p_local.h
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_local.h
@@ -46,28 +68,28 @@
typedef enum
{
- DI_EAST,
- DI_NORTHEAST,
- DI_NORTH,
- DI_NORTHWEST,
- DI_WEST,
- DI_SOUTHWEST,
- DI_SOUTH,
- DI_SOUTHEAST,
- DI_NODIR,
- NUMDIRS
+ DI_EAST,
+ DI_NORTHEAST,
+ DI_NORTH,
+ DI_NORTHWEST,
+ DI_WEST,
+ DI_SOUTHWEST,
+ DI_SOUTH,
+ DI_SOUTHEAST,
+ DI_NODIR,
+ NUMDIRS
} dirtype_t;
-#define BASETHRESHOLD 100 // follow a player exlusively for 3 seconds
+#define BASETHRESHOLD 100 // follow a player exlusively for 3 seconds
// ***** P_TICK *****
-extern thinker_t thinkercap; // both the head and tail of the thinker list
-extern int TimerGame; // tic countdown for deathmatch
+extern thinker_t thinkercap; // both the head and tail of the thinker list
+extern int TimerGame; // tic countdown for deathmatch
void P_InitThinkers(void);
-void P_AddThinker(thinker_t *thinker);
-void P_RemoveThinker(thinker_t *thinker);
+void P_AddThinker(thinker_t * thinker);
+void P_RemoveThinker(thinker_t * thinker);
// ***** P_PSPR *****
@@ -86,24 +108,24 @@
void P_OpenWeapons(void);
void P_CloseWeapons(void);
-void P_AddMaceSpot(mapthing_t *mthing);
-void P_RepositionMace(mobj_t *mo);
-void P_SetPsprite(player_t *player, int position, statenum_t stnum);
-void P_SetupPsprites(player_t *curplayer);
-void P_MovePsprites(player_t *curplayer);
-void P_DropWeapon(player_t *player);
-void P_ActivateBeak(player_t *player);
-void P_PostChickenWeapon(player_t *player, weapontype_t weapon);
-void P_UpdateBeak(player_t *player, pspdef_t *psp);
+void P_AddMaceSpot(mapthing_t * mthing);
+void P_RepositionMace(mobj_t * mo);
+void P_SetPsprite(player_t * player, int position, statenum_t stnum);
+void P_SetupPsprites(player_t * curplayer);
+void P_MovePsprites(player_t * curplayer);
+void P_DropWeapon(player_t * player);
+void P_ActivateBeak(player_t * player);
+void P_PostChickenWeapon(player_t * player, weapontype_t weapon);
+void P_UpdateBeak(player_t * player, pspdef_t * psp);
// ***** P_USER *****
-void P_PlayerThink(player_t *player);
-void P_Thrust(player_t *player, angle_t angle, fixed_t move);
-void P_PlayerRemoveArtifact(player_t *player, int slot);
-void P_PlayerUseArtifact(player_t *player, artitype_t arti);
-boolean P_UseArtifact(player_t *player, artitype_t arti);
-int P_GetPlayerNum(player_t *player);
+void P_PlayerThink(player_t * player);
+void P_Thrust(player_t * player, angle_t angle, fixed_t move);
+void P_PlayerRemoveArtifact(player_t * player, int slot);
+void P_PlayerUseArtifact(player_t * player, artitype_t arti);
+boolean P_UseArtifact(player_t * player, artitype_t arti);
+int P_GetPlayerNum(player_t * player);
// ***** P_MOBJ *****
@@ -120,115 +142,117 @@
extern mobj_t *MissileMobj;
mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type);
-void P_RemoveMobj(mobj_t *th);
-boolean P_SetMobjState(mobj_t *mobj, statenum_t state);
-boolean P_SetMobjStateNF(mobj_t *mobj, statenum_t state);
-void P_ThrustMobj(mobj_t *mo, angle_t angle, fixed_t move);
-int P_FaceMobj(mobj_t *source, mobj_t *target, angle_t *delta);
-boolean P_SeekerMissile(mobj_t *actor, angle_t thresh, angle_t turnMax);
-void P_MobjThinker(mobj_t *mobj);
-void P_BlasterMobjThinker(mobj_t *mobj);
+void P_RemoveMobj(mobj_t * th);
+boolean P_SetMobjState(mobj_t * mobj, statenum_t state);
+boolean P_SetMobjStateNF(mobj_t * mobj, statenum_t state);
+void P_ThrustMobj(mobj_t * mo, angle_t angle, fixed_t move);
+int P_FaceMobj(mobj_t * source, mobj_t * target, angle_t * delta);
+boolean P_SeekerMissile(mobj_t * actor, angle_t thresh, angle_t turnMax);
+void P_MobjThinker(mobj_t * mobj);
+void P_BlasterMobjThinker(mobj_t * mobj);
void P_SpawnPuff(fixed_t x, fixed_t y, fixed_t z);
void P_SpawnBlood(fixed_t x, fixed_t y, fixed_t z, int damage);
-void P_BloodSplatter(fixed_t x, fixed_t y, fixed_t z, mobj_t *originator);
-void P_RipperBlood(mobj_t *mo);
-int P_GetThingFloorType(mobj_t *thing);
-int P_HitFloor(mobj_t *thing);
-boolean P_CheckMissileSpawn(mobj_t *missile);
-mobj_t *P_SpawnMissile(mobj_t *source, mobj_t *dest, mobjtype_t type);
-mobj_t *P_SpawnMissileAngle(mobj_t *source, mobjtype_t type,
- angle_t angle, fixed_t momz);
-mobj_t *P_SpawnPlayerMissile(mobj_t *source, mobjtype_t type);
-mobj_t *P_SPMAngle(mobj_t *source, mobjtype_t type, angle_t angle);
+void P_BloodSplatter(fixed_t x, fixed_t y, fixed_t z, mobj_t * originator);
+void P_RipperBlood(mobj_t * mo);
+int P_GetThingFloorType(mobj_t * thing);
+int P_HitFloor(mobj_t * thing);
+boolean P_CheckMissileSpawn(mobj_t * missile);
+mobj_t *P_SpawnMissile(mobj_t * source, mobj_t * dest, mobjtype_t type);
+mobj_t *P_SpawnMissileAngle(mobj_t * source, mobjtype_t type,
+ angle_t angle, fixed_t momz);
+mobj_t *P_SpawnPlayerMissile(mobj_t * source, mobjtype_t type);
+mobj_t *P_SPMAngle(mobj_t * source, mobjtype_t type, angle_t angle);
// ***** P_ENEMY *****
-void P_NoiseAlert (mobj_t *target, mobj_t *emmiter);
+void P_NoiseAlert(mobj_t * target, mobj_t * emmiter);
void P_InitMonsters(void);
void P_AddBossSpot(fixed_t x, fixed_t y, angle_t angle);
void P_Massacre(void);
-void P_DSparilTeleport(mobj_t *actor);
+void P_DSparilTeleport(mobj_t * actor);
// ***** P_MAPUTL *****
typedef struct
{
- fixed_t x, y, dx, dy;
+ fixed_t x, y, dx, dy;
} divline_t;
typedef struct
{
- fixed_t frac; // along trace line
- boolean isaline;
- union {
- mobj_t *thing;
- line_t *line;
- } d;
+ fixed_t frac; // along trace line
+ boolean isaline;
+ union
+ {
+ mobj_t *thing;
+ line_t *line;
+ } d;
} intercept_t;
#define MAXINTERCEPTS 128
-extern intercept_t intercepts[MAXINTERCEPTS], *intercept_p;
-typedef boolean (*traverser_t) (intercept_t *in);
+extern intercept_t intercepts[MAXINTERCEPTS], *intercept_p;
+typedef boolean(*traverser_t) (intercept_t * in);
-fixed_t P_AproxDistance (fixed_t dx, fixed_t dy);
-int P_PointOnLineSide (fixed_t x, fixed_t y, line_t *line);
-int P_PointOnDivlineSide (fixed_t x, fixed_t y, divline_t *line);
-void P_MakeDivline (line_t *li, divline_t *dl);
-fixed_t P_InterceptVector (divline_t *v2, divline_t *v1);
-int P_BoxOnLineSide (fixed_t *tmbox, line_t *ld);
+fixed_t P_AproxDistance(fixed_t dx, fixed_t dy);
+int P_PointOnLineSide(fixed_t x, fixed_t y, line_t * line);
+int P_PointOnDivlineSide(fixed_t x, fixed_t y, divline_t * line);
+void P_MakeDivline(line_t * li, divline_t * dl);
+fixed_t P_InterceptVector(divline_t * v2, divline_t * v1);
+int P_BoxOnLineSide(fixed_t * tmbox, line_t * ld);
-extern fixed_t opentop, openbottom, openrange;
-extern fixed_t lowfloor;
-void P_LineOpening (line_t *linedef);
+extern fixed_t opentop, openbottom, openrange;
+extern fixed_t lowfloor;
+void P_LineOpening(line_t * linedef);
-boolean P_BlockLinesIterator (int x, int y, boolean(*func)(line_t*) );
-boolean P_BlockThingsIterator (int x, int y, boolean(*func)(mobj_t*) );
+boolean P_BlockLinesIterator(int x, int y, boolean(*func) (line_t *));
+boolean P_BlockThingsIterator(int x, int y, boolean(*func) (mobj_t *));
#define PT_ADDLINES 1
#define PT_ADDTHINGS 2
#define PT_EARLYOUT 4
-extern divline_t trace;
-boolean P_PathTraverse (fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2,
- int flags, boolean (*trav) (intercept_t *));
+extern divline_t trace;
+boolean P_PathTraverse(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2,
+ int flags, boolean(*trav) (intercept_t *));
-void P_UnsetThingPosition (mobj_t *thing);
-void P_SetThingPosition (mobj_t *thing);
+void P_UnsetThingPosition(mobj_t * thing);
+void P_SetThingPosition(mobj_t * thing);
// ***** P_MAP *****
-extern boolean floatok; // if true, move would be ok if
-extern fixed_t tmfloorz, tmceilingz; // within tmfloorz - tmceilingz
+extern boolean floatok; // if true, move would be ok if
+extern fixed_t tmfloorz, tmceilingz; // within tmfloorz - tmceilingz
extern line_t *ceilingline;
-boolean P_TestMobjLocation(mobj_t *mobj);
-boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y);
-mobj_t *P_CheckOnmobj(mobj_t *thing);
-void P_FakeZMovement(mobj_t *mo);
-boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y);
-boolean P_TeleportMove(mobj_t *thing, fixed_t x, fixed_t y);
-void P_SlideMove(mobj_t *mo);
-boolean P_CheckSight(mobj_t *t1, mobj_t *t2);
-void P_UseLines(player_t *player);
+boolean P_TestMobjLocation(mobj_t * mobj);
+boolean P_CheckPosition(mobj_t * thing, fixed_t x, fixed_t y);
+mobj_t *P_CheckOnmobj(mobj_t * thing);
+void P_FakeZMovement(mobj_t * mo);
+boolean P_TryMove(mobj_t * thing, fixed_t x, fixed_t y);
+boolean P_TeleportMove(mobj_t * thing, fixed_t x, fixed_t y);
+void P_SlideMove(mobj_t * mo);
+boolean P_CheckSight(mobj_t * t1, mobj_t * t2);
+void P_UseLines(player_t * player);
-boolean P_ChangeSector (sector_t *sector, boolean crunch);
+boolean P_ChangeSector(sector_t * sector, boolean crunch);
-extern mobj_t *linetarget; // who got hit (or NULL)
-fixed_t P_AimLineAttack (mobj_t *t1, angle_t angle, fixed_t distance);
+extern mobj_t *linetarget; // who got hit (or NULL)
+fixed_t P_AimLineAttack(mobj_t * t1, angle_t angle, fixed_t distance);
-void P_LineAttack (mobj_t *t1, angle_t angle, fixed_t distance, fixed_t slope, int damage);
+void P_LineAttack(mobj_t * t1, angle_t angle, fixed_t distance, fixed_t slope,
+ int damage);
-void P_RadiusAttack (mobj_t *spot, mobj_t *source, int damage);
+void P_RadiusAttack(mobj_t * spot, mobj_t * source, int damage);
// ***** P_SETUP *****
-extern byte *rejectmatrix; // for fast sight rejection
-extern short *blockmaplump; // offsets in blockmap are from here
+extern byte *rejectmatrix; // for fast sight rejection
+extern short *blockmaplump; // offsets in blockmap are from here
extern short *blockmap;
-extern int bmapwidth, bmapheight; // in mapblocks
-extern fixed_t bmaporgx, bmaporgy; // origin of block map
-extern mobj_t **blocklinks; // for thing chains
+extern int bmapwidth, bmapheight; // in mapblocks
+extern fixed_t bmaporgx, bmaporgy; // origin of block map
+extern mobj_t **blocklinks; // for thing chains
// ***** P_INTER *****
@@ -235,19 +259,19 @@
extern int maxammo[NUMAMMO];
extern int clipammo[NUMAMMO];
-void P_SetMessage(player_t *player, char *message, boolean ultmsg);
-void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher);
-void P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source,
- int damage);
-boolean P_GiveAmmo(player_t *player, ammotype_t ammo, int count);
-boolean P_GiveArtifact(player_t *player, artitype_t arti, mobj_t *mo);
-boolean P_GiveBody(player_t *player, int num);
-boolean P_GivePower(player_t *player, powertype_t power);
-boolean P_ChickenMorphPlayer(player_t *player);
+void P_SetMessage(player_t * player, char *message, boolean ultmsg);
+void P_TouchSpecialThing(mobj_t * special, mobj_t * toucher);
+void P_DamageMobj(mobj_t * target, mobj_t * inflictor, mobj_t * source,
+ int damage);
+boolean P_GiveAmmo(player_t * player, ammotype_t ammo, int count);
+boolean P_GiveArtifact(player_t * player, artitype_t arti, mobj_t * mo);
+boolean P_GiveBody(player_t * player, int num);
+boolean P_GivePower(player_t * player, powertype_t power);
+boolean P_ChickenMorphPlayer(player_t * player);
// ***** AM_MAP *****
-boolean AM_Responder(event_t *ev);
+boolean AM_Responder(event_t * ev);
void AM_Ticker(void);
void AM_Drawer(void);
--- a/src/heretic/p_map.c
+++ b/src/heretic/p_map.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_map.c
#include "DoomDef.h"
@@ -38,27 +60,27 @@
===============================================================================
*/
-fixed_t tmbbox[4];
-mobj_t *tmthing;
-int tmflags;
-fixed_t tmx, tmy;
+fixed_t tmbbox[4];
+mobj_t *tmthing;
+int tmflags;
+fixed_t tmx, tmy;
-boolean floatok; // if true, move would be ok if
- // within tmfloorz - tmceilingz
+boolean floatok; // if true, move would be ok if
+ // within tmfloorz - tmceilingz
-fixed_t tmfloorz, tmceilingz, tmdropoffz;
+fixed_t tmfloorz, tmceilingz, tmdropoffz;
// keep track of the line that lowers the ceiling, so missiles don't explode
// against sky hack walls
-line_t *ceilingline;
+line_t *ceilingline;
// keep track of special lines as they are hit, but don't process them
// until the move is proven valid
#define MAXSPECIALCROSS 8
-line_t *spechit[MAXSPECIALCROSS];
-int numspechit;
+line_t *spechit[MAXSPECIALCROSS];
+int numspechit;
-mobj_t *onmobj; //generic global onmobj...used for landing on pods/players
+mobj_t *onmobj; //generic global onmobj...used for landing on pods/players
/*
===============================================================================
@@ -76,28 +98,28 @@
==================
*/
-boolean PIT_StompThing (mobj_t *thing)
+boolean PIT_StompThing(mobj_t * thing)
{
- fixed_t blockdist;
-
- if (!(thing->flags & MF_SHOOTABLE) )
- return true;
-
- blockdist = thing->radius + tmthing->radius;
- if ( abs(thing->x - tmx) >= blockdist || abs(thing->y - tmy) >= blockdist )
- return true; // didn't hit it
-
- if (thing == tmthing)
- return true; // don't clip against self
+ fixed_t blockdist;
- if(!(tmthing->flags2&MF2_TELESTOMP))
- { // Not allowed to stomp things
- return(false);
- }
-
- P_DamageMobj (thing, tmthing, tmthing, 10000);
-
- return true;
+ if (!(thing->flags & MF_SHOOTABLE))
+ return true;
+
+ blockdist = thing->radius + tmthing->radius;
+ if (abs(thing->x - tmx) >= blockdist || abs(thing->y - tmy) >= blockdist)
+ return true; // didn't hit it
+
+ if (thing == tmthing)
+ return true; // don't clip against self
+
+ if (!(tmthing->flags2 & MF2_TELESTOMP))
+ { // Not allowed to stomp things
+ return (false);
+ }
+
+ P_DamageMobj(thing, tmthing, tmthing, 10000);
+
+ return true;
}
@@ -109,65 +131,65 @@
===================
*/
-boolean P_TeleportMove (mobj_t *thing, fixed_t x, fixed_t y)
+boolean P_TeleportMove(mobj_t * thing, fixed_t x, fixed_t y)
{
- int xl,xh,yl,yh,bx,by;
- subsector_t *newsubsec;
+ int xl, xh, yl, yh, bx, by;
+ subsector_t *newsubsec;
//
// kill anything occupying the position
//
- tmthing = thing;
- tmflags = thing->flags;
-
- tmx = x;
- tmy = y;
-
- tmbbox[BOXTOP] = y + tmthing->radius;
- tmbbox[BOXBOTTOM] = y - tmthing->radius;
- tmbbox[BOXRIGHT] = x + tmthing->radius;
- tmbbox[BOXLEFT] = x - tmthing->radius;
+ tmthing = thing;
+ tmflags = thing->flags;
- newsubsec = R_PointInSubsector (x,y);
- ceilingline = NULL;
-
+ tmx = x;
+ tmy = y;
+
+ tmbbox[BOXTOP] = y + tmthing->radius;
+ tmbbox[BOXBOTTOM] = y - tmthing->radius;
+ tmbbox[BOXRIGHT] = x + tmthing->radius;
+ tmbbox[BOXLEFT] = x - tmthing->radius;
+
+ newsubsec = R_PointInSubsector(x, y);
+ ceilingline = NULL;
+
//
// the base floor / ceiling is from the subsector that contains the
// point. Any contacted lines the step closer together will adjust them
//
- tmfloorz = tmdropoffz = newsubsec->sector->floorheight;
- tmceilingz = newsubsec->sector->ceilingheight;
-
- validcount++;
- numspechit = 0;
+ tmfloorz = tmdropoffz = newsubsec->sector->floorheight;
+ tmceilingz = newsubsec->sector->ceilingheight;
+ validcount++;
+ numspechit = 0;
+
//
// stomp on any things contacted
//
- xl = (tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS)>>MAPBLOCKSHIFT;
- xh = (tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS)>>MAPBLOCKSHIFT;
- yl = (tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT;
- yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT;
+ xl = (tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS) >> MAPBLOCKSHIFT;
+ xh = (tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS) >> MAPBLOCKSHIFT;
+ yl = (tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS) >> MAPBLOCKSHIFT;
+ yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS) >> MAPBLOCKSHIFT;
- for (bx=xl ; bx<=xh ; bx++)
- for (by=yl ; by<=yh ; by++)
- if (!P_BlockThingsIterator(bx,by,PIT_StompThing))
- return false;
-
+ for (bx = xl; bx <= xh; bx++)
+ for (by = yl; by <= yh; by++)
+ if (!P_BlockThingsIterator(bx, by, PIT_StompThing))
+ return false;
+
//
// the move is ok, so link the thing into its new position
-//
- P_UnsetThingPosition (thing);
+//
+ P_UnsetThingPosition(thing);
- thing->floorz = tmfloorz;
- thing->ceilingz = tmceilingz;
- thing->x = x;
- thing->y = y;
+ thing->floorz = tmfloorz;
+ thing->ceilingz = tmceilingz;
+ thing->x = x;
+ thing->y = y;
- P_SetThingPosition (thing);
-
- return true;
+ P_SetThingPosition(thing);
+
+ return true;
}
/*
@@ -187,19 +209,19 @@
==================
*/
-boolean PIT_CheckLine(line_t *ld)
+boolean PIT_CheckLine(line_t * ld)
{
- if (tmbbox[BOXRIGHT] <= ld->bbox[BOXLEFT]
- || tmbbox[BOXLEFT] >= ld->bbox[BOXRIGHT]
- || tmbbox[BOXTOP] <= ld->bbox[BOXBOTTOM]
- || tmbbox[BOXBOTTOM] >= ld->bbox[BOXTOP])
- {
- return(true);
- }
- if(P_BoxOnLineSide(tmbbox, ld) != -1)
- {
- return(true);
- }
+ if (tmbbox[BOXRIGHT] <= ld->bbox[BOXLEFT]
+ || tmbbox[BOXLEFT] >= ld->bbox[BOXRIGHT]
+ || tmbbox[BOXTOP] <= ld->bbox[BOXBOTTOM]
+ || tmbbox[BOXBOTTOM] >= ld->bbox[BOXTOP])
+ {
+ return (true);
+ }
+ if (P_BoxOnLineSide(tmbbox, ld) != -1)
+ {
+ return (true);
+ }
// a line has been hit
/*
@@ -211,51 +233,51 @@
= that are only 8 pixels apart could be crossed in either order.
*/
- if(!ld->backsector)
- { // One sided line
- if(tmthing->flags&MF_MISSILE)
- { // Missiles can trigger impact specials
- if(ld->special)
- {
- spechit[numspechit] = ld;
- numspechit++;
- }
- }
- return false;
- }
- if(!(tmthing->flags&MF_MISSILE))
- {
- if(ld->flags&ML_BLOCKING)
- { // Explicitly blocking everything
- return(false);
- }
- if(!tmthing->player && ld->flags&ML_BLOCKMONSTERS
- && tmthing->type != MT_POD)
- { // Block monsters only
- return(false);
- }
- }
- P_LineOpening(ld); // set openrange, opentop, openbottom
- // adjust floor / ceiling heights
- if(opentop < tmceilingz)
- {
- tmceilingz = opentop;
- ceilingline = ld;
- }
- if(openbottom > tmfloorz)
- {
- tmfloorz = openbottom;
- }
- if(lowfloor < tmdropoffz)
- {
- tmdropoffz = lowfloor;
- }
- if(ld->special)
- { // Contacted a special line, add it to the list
- spechit[numspechit] = ld;
- numspechit++;
- }
- return(true);
+ if (!ld->backsector)
+ { // One sided line
+ if (tmthing->flags & MF_MISSILE)
+ { // Missiles can trigger impact specials
+ if (ld->special)
+ {
+ spechit[numspechit] = ld;
+ numspechit++;
+ }
+ }
+ return false;
+ }
+ if (!(tmthing->flags & MF_MISSILE))
+ {
+ if (ld->flags & ML_BLOCKING)
+ { // Explicitly blocking everything
+ return (false);
+ }
+ if (!tmthing->player && ld->flags & ML_BLOCKMONSTERS
+ && tmthing->type != MT_POD)
+ { // Block monsters only
+ return (false);
+ }
+ }
+ P_LineOpening(ld); // set openrange, opentop, openbottom
+ // adjust floor / ceiling heights
+ if (opentop < tmceilingz)
+ {
+ tmceilingz = opentop;
+ ceilingline = ld;
+ }
+ if (openbottom > tmfloorz)
+ {
+ tmfloorz = openbottom;
+ }
+ if (lowfloor < tmdropoffz)
+ {
+ tmdropoffz = lowfloor;
+ }
+ if (ld->special)
+ { // Contacted a special line, add it to the list
+ spechit[numspechit] = ld;
+ numspechit++;
+ }
+ return (true);
}
//---------------------------------------------------------------------------
@@ -264,131 +286,131 @@
//
//---------------------------------------------------------------------------
-boolean PIT_CheckThing(mobj_t *thing)
+boolean PIT_CheckThing(mobj_t * thing)
{
- fixed_t blockdist;
- boolean solid;
- int damage;
+ fixed_t blockdist;
+ boolean solid;
+ int damage;
- if(!(thing->flags&(MF_SOLID|MF_SPECIAL|MF_SHOOTABLE)))
- { // Can't hit thing
- return(true);
- }
- blockdist = thing->radius+tmthing->radius;
- if(abs(thing->x-tmx) >= blockdist || abs(thing->y-tmy) >= blockdist)
- { // Didn't hit thing
- return(true);
- }
- if(thing == tmthing)
- { // Don't clip against self
- return(true);
- }
- if(tmthing->flags2&MF2_PASSMOBJ)
- { // check if a mobj passed over/under another object
- if((tmthing->type == MT_IMP || tmthing->type == MT_WIZARD)
- && (thing->type == MT_IMP || thing->type == MT_WIZARD))
- { // don't let imps/wizards fly over other imps/wizards
- return false;
- }
- if(tmthing->z > thing->z+thing->height
- && !(thing->flags&MF_SPECIAL))
- {
- return(true);
- }
- else if(tmthing->z+tmthing->height < thing->z
- && !(thing->flags&MF_SPECIAL))
- { // under thing
- return(true);
- }
- }
- // Check for skulls slamming into things
- if(tmthing->flags&MF_SKULLFLY)
- {
- damage = ((P_Random()%8)+1)*tmthing->damage;
- P_DamageMobj(thing, tmthing, tmthing, damage);
- tmthing->flags &= ~MF_SKULLFLY;
- tmthing->momx = tmthing->momy = tmthing->momz = 0;
- P_SetMobjState(tmthing, tmthing->info->seestate);
- return(false);
- }
- // Check for missile
- if(tmthing->flags&MF_MISSILE)
- {
- // Check for passing through a ghost
- if((thing->flags&MF_SHADOW) && (tmthing->flags2&MF2_THRUGHOST))
- {
- return(true);
- }
- // Check if it went over / under
- if(tmthing->z > thing->z+thing->height)
- { // Over thing
- return(true);
- }
- if(tmthing->z+tmthing->height < thing->z)
- { // Under thing
- return(true);
- }
- if(tmthing->target && tmthing->target->type == thing->type)
- { // Don't hit same species as originator
- if(thing == tmthing->target)
- { // Don't missile self
- return(true);
- }
- if(thing->type != MT_PLAYER)
- { // Hit same species as originator, explode, no damage
- return(false);
- }
- }
- if(!(thing->flags&MF_SHOOTABLE))
- { // Didn't do any damage
- return!(thing->flags&MF_SOLID);
- }
- if(tmthing->flags2&MF2_RIP)
- {
- if(!(thing->flags&MF_NOBLOOD))
- { // Ok to spawn some blood
- P_RipperBlood(tmthing);
- }
- S_StartSound(tmthing, sfx_ripslop);
- damage = ((P_Random()&3)+2)*tmthing->damage;
- P_DamageMobj(thing, tmthing, tmthing->target, damage);
- if(thing->flags2&MF2_PUSHABLE
- && !(tmthing->flags2&MF2_CANNOTPUSH))
- { // Push thing
- thing->momx += tmthing->momx>>2;
- thing->momy += tmthing->momy>>2;
- }
- numspechit = 0;
- return(true);
- }
- // Do damage
- damage = ((P_Random()%8)+1)*tmthing->damage;
- if(damage)
- {
- if(!(thing->flags&MF_NOBLOOD) && P_Random() < 192)
- {
- P_BloodSplatter(tmthing->x, tmthing->y, tmthing->z, thing);
- }
- P_DamageMobj(thing, tmthing, tmthing->target, damage);
- }
- return(false);
- }
- if(thing->flags2&MF2_PUSHABLE && !(tmthing->flags2&MF2_CANNOTPUSH))
- { // Push thing
- thing->momx += tmthing->momx>>2;
- thing->momy += tmthing->momy>>2;
- }
- // Check for special thing
- if(thing->flags&MF_SPECIAL)
- {
- solid = thing->flags&MF_SOLID;
- if(tmflags&MF_PICKUP)
- { // Can be picked up by tmthing
- P_TouchSpecialThing(thing, tmthing); // Can remove thing
- }
- return(!solid);
- }
- return(!(thing->flags&MF_SOLID));
+ if (!(thing->flags & (MF_SOLID | MF_SPECIAL | MF_SHOOTABLE)))
+ { // Can't hit thing
+ return (true);
+ }
+ blockdist = thing->radius + tmthing->radius;
+ if (abs(thing->x - tmx) >= blockdist || abs(thing->y - tmy) >= blockdist)
+ { // Didn't hit thing
+ return (true);
+ }
+ if (thing == tmthing)
+ { // Don't clip against self
+ return (true);
+ }
+ if (tmthing->flags2 & MF2_PASSMOBJ)
+ { // check if a mobj passed over/under another object
+ if ((tmthing->type == MT_IMP || tmthing->type == MT_WIZARD)
+ && (thing->type == MT_IMP || thing->type == MT_WIZARD))
+ { // don't let imps/wizards fly over other imps/wizards
+ return false;
+ }
+ if (tmthing->z > thing->z + thing->height
+ && !(thing->flags & MF_SPECIAL))
+ {
+ return (true);
+ }
+ else if (tmthing->z + tmthing->height < thing->z
+ && !(thing->flags & MF_SPECIAL))
+ { // under thing
+ return (true);
+ }
+ }
+ // Check for skulls slamming into things
+ if (tmthing->flags & MF_SKULLFLY)
+ {
+ damage = ((P_Random() % 8) + 1) * tmthing->damage;
+ P_DamageMobj(thing, tmthing, tmthing, damage);
+ tmthing->flags &= ~MF_SKULLFLY;
+ tmthing->momx = tmthing->momy = tmthing->momz = 0;
+ P_SetMobjState(tmthing, tmthing->info->seestate);
+ return (false);
+ }
+ // Check for missile
+ if (tmthing->flags & MF_MISSILE)
+ {
+ // Check for passing through a ghost
+ if ((thing->flags & MF_SHADOW) && (tmthing->flags2 & MF2_THRUGHOST))
+ {
+ return (true);
+ }
+ // Check if it went over / under
+ if (tmthing->z > thing->z + thing->height)
+ { // Over thing
+ return (true);
+ }
+ if (tmthing->z + tmthing->height < thing->z)
+ { // Under thing
+ return (true);
+ }
+ if (tmthing->target && tmthing->target->type == thing->type)
+ { // Don't hit same species as originator
+ if (thing == tmthing->target)
+ { // Don't missile self
+ return (true);
+ }
+ if (thing->type != MT_PLAYER)
+ { // Hit same species as originator, explode, no damage
+ return (false);
+ }
+ }
+ if (!(thing->flags & MF_SHOOTABLE))
+ { // Didn't do any damage
+ return !(thing->flags & MF_SOLID);
+ }
+ if (tmthing->flags2 & MF2_RIP)
+ {
+ if (!(thing->flags & MF_NOBLOOD))
+ { // Ok to spawn some blood
+ P_RipperBlood(tmthing);
+ }
+ S_StartSound(tmthing, sfx_ripslop);
+ damage = ((P_Random() & 3) + 2) * tmthing->damage;
+ P_DamageMobj(thing, tmthing, tmthing->target, damage);
+ if (thing->flags2 & MF2_PUSHABLE
+ && !(tmthing->flags2 & MF2_CANNOTPUSH))
+ { // Push thing
+ thing->momx += tmthing->momx >> 2;
+ thing->momy += tmthing->momy >> 2;
+ }
+ numspechit = 0;
+ return (true);
+ }
+ // Do damage
+ damage = ((P_Random() % 8) + 1) * tmthing->damage;
+ if (damage)
+ {
+ if (!(thing->flags & MF_NOBLOOD) && P_Random() < 192)
+ {
+ P_BloodSplatter(tmthing->x, tmthing->y, tmthing->z, thing);
+ }
+ P_DamageMobj(thing, tmthing, tmthing->target, damage);
+ }
+ return (false);
+ }
+ if (thing->flags2 & MF2_PUSHABLE && !(tmthing->flags2 & MF2_CANNOTPUSH))
+ { // Push thing
+ thing->momx += tmthing->momx >> 2;
+ thing->momy += tmthing->momy >> 2;
+ }
+ // Check for special thing
+ if (thing->flags & MF_SPECIAL)
+ {
+ solid = thing->flags & MF_SOLID;
+ if (tmflags & MF_PICKUP)
+ { // Can be picked up by tmthing
+ P_TouchSpecialThing(thing, tmthing); // Can remove thing
+ }
+ return (!solid);
+ }
+ return (!(thing->flags & MF_SOLID));
}
//---------------------------------------------------------------------------
@@ -397,36 +419,36 @@
//
//---------------------------------------------------------------------------
-boolean PIT_CheckOnmobjZ(mobj_t *thing)
+boolean PIT_CheckOnmobjZ(mobj_t * thing)
{
- fixed_t blockdist;
+ fixed_t blockdist;
- if(!(thing->flags&(MF_SOLID|MF_SPECIAL|MF_SHOOTABLE)))
- { // Can't hit thing
- return(true);
- }
- blockdist = thing->radius+tmthing->radius;
- if(abs(thing->x-tmx) >= blockdist || abs(thing->y-tmy) >= blockdist)
- { // Didn't hit thing
- return(true);
- }
- if(thing == tmthing)
- { // Don't clip against self
- return(true);
- }
- if(tmthing->z > thing->z+thing->height)
- {
- return(true);
- }
- else if(tmthing->z+tmthing->height < thing->z)
- { // under thing
- return(true);
- }
- if(thing->flags&MF_SOLID)
- {
- onmobj = thing;
- }
- return(!(thing->flags&MF_SOLID));
+ if (!(thing->flags & (MF_SOLID | MF_SPECIAL | MF_SHOOTABLE)))
+ { // Can't hit thing
+ return (true);
+ }
+ blockdist = thing->radius + tmthing->radius;
+ if (abs(thing->x - tmx) >= blockdist || abs(thing->y - tmy) >= blockdist)
+ { // Didn't hit thing
+ return (true);
+ }
+ if (thing == tmthing)
+ { // Don't clip against self
+ return (true);
+ }
+ if (tmthing->z > thing->z + thing->height)
+ {
+ return (true);
+ }
+ else if (tmthing->z + tmthing->height < thing->z)
+ { // under thing
+ return (true);
+ }
+ if (thing->flags & MF_SOLID)
+ {
+ onmobj = thing;
+ }
+ return (!(thing->flags & MF_SOLID));
}
/*
@@ -446,24 +468,24 @@
//
//----------------------------------------------------------------------------
-boolean P_TestMobjLocation(mobj_t *mobj)
+boolean P_TestMobjLocation(mobj_t * mobj)
{
- int flags;
+ int flags;
- flags = mobj->flags;
- mobj->flags &= ~MF_PICKUP;
- if(P_CheckPosition(mobj, mobj->x, mobj->y))
- { // XY is ok, now check Z
- mobj->flags = flags;
- if((mobj->z < mobj->floorz)
- || (mobj->z+mobj->height > mobj->ceilingz))
- { // Bad Z
- return(false);
- }
- return(true);
- }
- mobj->flags = flags;
- return(false);
+ flags = mobj->flags;
+ mobj->flags &= ~MF_PICKUP;
+ if (P_CheckPosition(mobj, mobj->x, mobj->y))
+ { // XY is ok, now check Z
+ mobj->flags = flags;
+ if ((mobj->z < mobj->floorz)
+ || (mobj->z + mobj->height > mobj->ceilingz))
+ { // Bad Z
+ return (false);
+ }
+ return (true);
+ }
+ mobj->flags = flags;
+ return (false);
}
/*
@@ -492,38 +514,38 @@
==================
*/
-boolean P_CheckPosition (mobj_t *thing, fixed_t x, fixed_t y)
+boolean P_CheckPosition(mobj_t * thing, fixed_t x, fixed_t y)
{
- int xl,xh,yl,yh,bx,by;
- subsector_t *newsubsec;
+ int xl, xh, yl, yh, bx, by;
+ subsector_t *newsubsec;
- tmthing = thing;
- tmflags = thing->flags;
-
- tmx = x;
- tmy = y;
-
- tmbbox[BOXTOP] = y + tmthing->radius;
- tmbbox[BOXBOTTOM] = y - tmthing->radius;
- tmbbox[BOXRIGHT] = x + tmthing->radius;
- tmbbox[BOXLEFT] = x - tmthing->radius;
+ tmthing = thing;
+ tmflags = thing->flags;
- newsubsec = R_PointInSubsector (x,y);
- ceilingline = NULL;
-
+ tmx = x;
+ tmy = y;
+
+ tmbbox[BOXTOP] = y + tmthing->radius;
+ tmbbox[BOXBOTTOM] = y - tmthing->radius;
+ tmbbox[BOXRIGHT] = x + tmthing->radius;
+ tmbbox[BOXLEFT] = x - tmthing->radius;
+
+ newsubsec = R_PointInSubsector(x, y);
+ ceilingline = NULL;
+
//
// the base floor / ceiling is from the subsector that contains the
// point. Any contacted lines the step closer together will adjust them
//
- tmfloorz = tmdropoffz = newsubsec->sector->floorheight;
- tmceilingz = newsubsec->sector->ceilingheight;
-
- validcount++;
- numspechit = 0;
+ tmfloorz = tmdropoffz = newsubsec->sector->floorheight;
+ tmceilingz = newsubsec->sector->ceilingheight;
- if ( tmflags & MF_NOCLIP )
- return true;
+ validcount++;
+ numspechit = 0;
+ if (tmflags & MF_NOCLIP)
+ return true;
+
//
// check things first, possibly picking things up
// the bounding box is extended by MAXRADIUS because mobj_ts are grouped
@@ -530,29 +552,29 @@
// into mapblocks based on their origin point, and can overlap into adjacent
// blocks by up to MAXRADIUS units
//
- xl = (tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS)>>MAPBLOCKSHIFT;
- xh = (tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS)>>MAPBLOCKSHIFT;
- yl = (tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT;
- yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT;
+ xl = (tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS) >> MAPBLOCKSHIFT;
+ xh = (tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS) >> MAPBLOCKSHIFT;
+ yl = (tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS) >> MAPBLOCKSHIFT;
+ yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS) >> MAPBLOCKSHIFT;
- for (bx=xl ; bx<=xh ; bx++)
- for (by=yl ; by<=yh ; by++)
- if (!P_BlockThingsIterator(bx,by,PIT_CheckThing))
- return false;
+ for (bx = xl; bx <= xh; bx++)
+ for (by = yl; by <= yh; by++)
+ if (!P_BlockThingsIterator(bx, by, PIT_CheckThing))
+ return false;
//
// check lines
//
- xl = (tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
- xh = (tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
- yl = (tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
- yh = (tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
+ xl = (tmbbox[BOXLEFT] - bmaporgx) >> MAPBLOCKSHIFT;
+ xh = (tmbbox[BOXRIGHT] - bmaporgx) >> MAPBLOCKSHIFT;
+ yl = (tmbbox[BOXBOTTOM] - bmaporgy) >> MAPBLOCKSHIFT;
+ yh = (tmbbox[BOXTOP] - bmaporgy) >> MAPBLOCKSHIFT;
- for (bx=xl ; bx<=xh ; bx++)
- for (by=yl ; by<=yh ; by++)
- if (!P_BlockLinesIterator (bx,by,PIT_CheckLine))
- return false;
+ for (bx = xl; bx <= xh; bx++)
+ for (by = yl; by <= yh; by++)
+ if (!P_BlockLinesIterator(bx, by, PIT_CheckLine))
+ return false;
- return true;
+ return true;
}
//=============================================================================
@@ -559,48 +581,48 @@
//
// P_CheckOnmobj(mobj_t *thing)
//
-// Checks if the new Z position is legal
+// Checks if the new Z position is legal
//=============================================================================
-mobj_t *P_CheckOnmobj(mobj_t *thing)
+mobj_t *P_CheckOnmobj(mobj_t * thing)
{
- int xl,xh,yl,yh,bx,by;
- subsector_t *newsubsec;
- fixed_t x;
- fixed_t y;
- mobj_t oldmo;
-
- x = thing->x;
- y = thing->y;
- tmthing = thing;
- tmflags = thing->flags;
- oldmo = *thing; // save the old mobj before the fake zmovement
- P_FakeZMovement(tmthing);
-
- tmx = x;
- tmy = y;
-
- tmbbox[BOXTOP] = y + tmthing->radius;
- tmbbox[BOXBOTTOM] = y - tmthing->radius;
- tmbbox[BOXRIGHT] = x + tmthing->radius;
- tmbbox[BOXLEFT] = x - tmthing->radius;
+ int xl, xh, yl, yh, bx, by;
+ subsector_t *newsubsec;
+ fixed_t x;
+ fixed_t y;
+ mobj_t oldmo;
- newsubsec = R_PointInSubsector (x,y);
- ceilingline = NULL;
-
+ x = thing->x;
+ y = thing->y;
+ tmthing = thing;
+ tmflags = thing->flags;
+ oldmo = *thing; // save the old mobj before the fake zmovement
+ P_FakeZMovement(tmthing);
+
+ tmx = x;
+ tmy = y;
+
+ tmbbox[BOXTOP] = y + tmthing->radius;
+ tmbbox[BOXBOTTOM] = y - tmthing->radius;
+ tmbbox[BOXRIGHT] = x + tmthing->radius;
+ tmbbox[BOXLEFT] = x - tmthing->radius;
+
+ newsubsec = R_PointInSubsector(x, y);
+ ceilingline = NULL;
+
//
// the base floor / ceiling is from the subsector that contains the
// point. Any contacted lines the step closer together will adjust them
//
- tmfloorz = tmdropoffz = newsubsec->sector->floorheight;
- tmceilingz = newsubsec->sector->ceilingheight;
-
- validcount++;
- numspechit = 0;
+ tmfloorz = tmdropoffz = newsubsec->sector->floorheight;
+ tmceilingz = newsubsec->sector->ceilingheight;
- if ( tmflags & MF_NOCLIP )
- return NULL;
+ validcount++;
+ numspechit = 0;
+ if (tmflags & MF_NOCLIP)
+ return NULL;
+
//
// check things first, possibly picking things up
// the bounding box is extended by MAXRADIUS because mobj_ts are grouped
@@ -607,20 +629,20 @@
// into mapblocks based on their origin point, and can overlap into adjacent
// blocks by up to MAXRADIUS units
//
- xl = (tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS)>>MAPBLOCKSHIFT;
- xh = (tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS)>>MAPBLOCKSHIFT;
- yl = (tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT;
- yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT;
+ xl = (tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS) >> MAPBLOCKSHIFT;
+ xh = (tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS) >> MAPBLOCKSHIFT;
+ yl = (tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS) >> MAPBLOCKSHIFT;
+ yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS) >> MAPBLOCKSHIFT;
- for (bx=xl ; bx<=xh ; bx++)
- for (by=yl ; by<=yh ; by++)
- if (!P_BlockThingsIterator(bx,by,PIT_CheckOnmobjZ))
- {
- *tmthing = oldmo;
- return onmobj;
- }
- *tmthing = oldmo;
- return NULL;
+ for (bx = xl; bx <= xh; bx++)
+ for (by = yl; by <= yh; by++)
+ if (!P_BlockThingsIterator(bx, by, PIT_CheckOnmobjZ))
+ {
+ *tmthing = oldmo;
+ return onmobj;
+ }
+ *tmthing = oldmo;
+ return NULL;
}
//=============================================================================
@@ -627,79 +649,80 @@
//
// P_FakeZMovement
//
-// Fake the zmovement so that we can check if a move is legal
+// Fake the zmovement so that we can check if a move is legal
//=============================================================================
-void P_FakeZMovement(mobj_t *mo)
+void P_FakeZMovement(mobj_t * mo)
{
- int dist;
- int delta;
+ int dist;
+ int delta;
//
// adjust height
//
- mo->z += mo->momz;
- if(mo->flags&MF_FLOAT && mo->target)
- { // float down towards target if too close
- if(!(mo->flags&MF_SKULLFLY) && !(mo->flags&MF_INFLOAT))
- {
- dist = P_AproxDistance(mo->x-mo->target->x, mo->y-mo->target->y);
- delta =( mo->target->z+(mo->height>>1))-mo->z;
- if (delta < 0 && dist < -(delta*3))
- mo->z -= FLOATSPEED;
- else if (delta > 0 && dist < (delta*3))
- mo->z += FLOATSPEED;
- }
- }
- if(mo->player && mo->flags2&MF2_FLY && !(mo->z <= mo->floorz)
- && leveltime&2)
- {
- mo->z += finesine[(FINEANGLES/20*leveltime>>2)&FINEMASK];
- }
+ mo->z += mo->momz;
+ if (mo->flags & MF_FLOAT && mo->target)
+ { // float down towards target if too close
+ if (!(mo->flags & MF_SKULLFLY) && !(mo->flags & MF_INFLOAT))
+ {
+ dist =
+ P_AproxDistance(mo->x - mo->target->x, mo->y - mo->target->y);
+ delta = (mo->target->z + (mo->height >> 1)) - mo->z;
+ if (delta < 0 && dist < -(delta * 3))
+ mo->z -= FLOATSPEED;
+ else if (delta > 0 && dist < (delta * 3))
+ mo->z += FLOATSPEED;
+ }
+ }
+ if (mo->player && mo->flags2 & MF2_FLY && !(mo->z <= mo->floorz)
+ && leveltime & 2)
+ {
+ mo->z += finesine[(FINEANGLES / 20 * leveltime >> 2) & FINEMASK];
+ }
//
// clip movement
//
- if(mo->z <= mo->floorz)
- { // Hit the floor
- mo->z = mo->floorz;
- if(mo->momz < 0)
- {
- mo->momz = 0;
- }
- if(mo->flags&MF_SKULLFLY)
- { // The skull slammed into something
- mo->momz = -mo->momz;
- }
- if(mo->info->crashstate && (mo->flags&MF_CORPSE))
- {
- return;
- }
- }
- else if(mo->flags2&MF2_LOGRAV)
- {
- if(mo->momz == 0)
- mo->momz = -(GRAVITY>>3)*2;
- else
- mo->momz -= GRAVITY>>3;
- }
- else if (! (mo->flags & MF_NOGRAVITY) )
- {
- if (mo->momz == 0)
- mo->momz = -GRAVITY*2;
- else
- mo->momz -= GRAVITY;
- }
-
- if (mo->z + mo->height > mo->ceilingz)
- { // hit the ceiling
- if (mo->momz > 0)
- mo->momz = 0;
- mo->z = mo->ceilingz - mo->height;
- if (mo->flags & MF_SKULLFLY)
- { // the skull slammed into something
- mo->momz = -mo->momz;
- }
- }
+ if (mo->z <= mo->floorz)
+ { // Hit the floor
+ mo->z = mo->floorz;
+ if (mo->momz < 0)
+ {
+ mo->momz = 0;
+ }
+ if (mo->flags & MF_SKULLFLY)
+ { // The skull slammed into something
+ mo->momz = -mo->momz;
+ }
+ if (mo->info->crashstate && (mo->flags & MF_CORPSE))
+ {
+ return;
+ }
+ }
+ else if (mo->flags2 & MF2_LOGRAV)
+ {
+ if (mo->momz == 0)
+ mo->momz = -(GRAVITY >> 3) * 2;
+ else
+ mo->momz -= GRAVITY >> 3;
+ }
+ else if (!(mo->flags & MF_NOGRAVITY))
+ {
+ if (mo->momz == 0)
+ mo->momz = -GRAVITY * 2;
+ else
+ mo->momz -= GRAVITY;
+ }
+
+ if (mo->z + mo->height > mo->ceilingz)
+ { // hit the ceiling
+ if (mo->momz > 0)
+ mo->momz = 0;
+ mo->z = mo->ceilingz - mo->height;
+ if (mo->flags & MF_SKULLFLY)
+ { // the skull slammed into something
+ mo->momz = -mo->momz;
+ }
+ }
}
//==========================================================================
@@ -708,22 +731,22 @@
//
//==========================================================================
-void CheckMissileImpact(mobj_t *mobj)
+void CheckMissileImpact(mobj_t * mobj)
{
- int i;
+ int i;
- if(!numspechit || !(mobj->flags&MF_MISSILE) || !mobj->target)
- {
- return;
- }
- if(!mobj->target->player)
- {
- return;
- }
- for(i = numspechit-1; i >= 0; i--)
- {
- P_ShootSpecialLine(mobj->target, spechit[i]);
- }
+ if (!numspechit || !(mobj->flags & MF_MISSILE) || !mobj->target)
+ {
+ return;
+ }
+ if (!mobj->target->player)
+ {
+ return;
+ }
+ for (i = numspechit - 1; i >= 0; i--)
+ {
+ P_ShootSpecialLine(mobj->target, spechit[i]);
+ }
}
/*
@@ -737,106 +760,108 @@
===================
*/
-boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y)
+boolean P_TryMove(mobj_t * thing, fixed_t x, fixed_t y)
{
- fixed_t oldx, oldy;
- int side, oldside;
- line_t *ld;
+ fixed_t oldx, oldy;
+ int side, oldside;
+ line_t *ld;
- floatok = false;
- if(!P_CheckPosition(thing, x, y))
- { // Solid wall or thing
- CheckMissileImpact(thing);
- return false;
- }
- if(!(thing->flags&MF_NOCLIP))
- {
- if(tmceilingz-tmfloorz < thing->height)
- { // Doesn't fit
- CheckMissileImpact(thing);
- return false;
- }
- floatok = true;
- if(!(thing->flags&MF_TELEPORT)
- && tmceilingz-thing->z < thing->height
- && !(thing->flags2&MF2_FLY))
- { // mobj must lower itself to fit
- CheckMissileImpact(thing);
- return false;
- }
- if(thing->flags2&MF2_FLY)
- {
- if(thing->z+thing->height > tmceilingz)
- {
- thing->momz = -8*FRACUNIT;
- return false;
- }
- else if(thing->z < tmfloorz && tmfloorz-tmdropoffz > 24*FRACUNIT)
- {
- thing->momz = 8*FRACUNIT;
- return false;
- }
- }
- if(!(thing->flags&MF_TELEPORT)
- // The Minotaur floor fire (MT_MNTRFX2) can step up any amount
- && thing->type != MT_MNTRFX2
- && tmfloorz-thing->z > 24*FRACUNIT)
- { // Too big a step up
- CheckMissileImpact(thing);
- return false;
- }
- if((thing->flags&MF_MISSILE) && tmfloorz > thing->z)
- {
- CheckMissileImpact(thing);
- }
- if(!(thing->flags&(MF_DROPOFF|MF_FLOAT))
- && tmfloorz-tmdropoffz > 24*FRACUNIT)
- { // Can't move over a dropoff
- return false;
- }
- }
+ floatok = false;
+ if (!P_CheckPosition(thing, x, y))
+ { // Solid wall or thing
+ CheckMissileImpact(thing);
+ return false;
+ }
+ if (!(thing->flags & MF_NOCLIP))
+ {
+ if (tmceilingz - tmfloorz < thing->height)
+ { // Doesn't fit
+ CheckMissileImpact(thing);
+ return false;
+ }
+ floatok = true;
+ if (!(thing->flags & MF_TELEPORT)
+ && tmceilingz - thing->z < thing->height
+ && !(thing->flags2 & MF2_FLY))
+ { // mobj must lower itself to fit
+ CheckMissileImpact(thing);
+ return false;
+ }
+ if (thing->flags2 & MF2_FLY)
+ {
+ if (thing->z + thing->height > tmceilingz)
+ {
+ thing->momz = -8 * FRACUNIT;
+ return false;
+ }
+ else if (thing->z < tmfloorz
+ && tmfloorz - tmdropoffz > 24 * FRACUNIT)
+ {
+ thing->momz = 8 * FRACUNIT;
+ return false;
+ }
+ }
+ if (!(thing->flags & MF_TELEPORT)
+ // The Minotaur floor fire (MT_MNTRFX2) can step up any amount
+ && thing->type != MT_MNTRFX2
+ && tmfloorz - thing->z > 24 * FRACUNIT)
+ { // Too big a step up
+ CheckMissileImpact(thing);
+ return false;
+ }
+ if ((thing->flags & MF_MISSILE) && tmfloorz > thing->z)
+ {
+ CheckMissileImpact(thing);
+ }
+ if (!(thing->flags & (MF_DROPOFF | MF_FLOAT))
+ && tmfloorz - tmdropoffz > 24 * FRACUNIT)
+ { // Can't move over a dropoff
+ return false;
+ }
+ }
//
// the move is ok, so link the thing into its new position
//
- P_UnsetThingPosition (thing);
+ P_UnsetThingPosition(thing);
- oldx = thing->x;
- oldy = thing->y;
- thing->floorz = tmfloorz;
- thing->ceilingz = tmceilingz;
- thing->x = x;
- thing->y = y;
+ oldx = thing->x;
+ oldy = thing->y;
+ thing->floorz = tmfloorz;
+ thing->ceilingz = tmceilingz;
+ thing->x = x;
+ thing->y = y;
- P_SetThingPosition (thing);
-
- if(thing->flags2&MF2_FOOTCLIP && P_GetThingFloorType(thing) != FLOOR_SOLID)
- {
- thing->flags2 |= MF2_FEETARECLIPPED;
- }
- else if(thing->flags2&MF2_FEETARECLIPPED)
- {
- thing->flags2 &= ~MF2_FEETARECLIPPED;
- }
-
+ P_SetThingPosition(thing);
+
+ if (thing->flags2 & MF2_FOOTCLIP
+ && P_GetThingFloorType(thing) != FLOOR_SOLID)
+ {
+ thing->flags2 |= MF2_FEETARECLIPPED;
+ }
+ else if (thing->flags2 & MF2_FEETARECLIPPED)
+ {
+ thing->flags2 &= ~MF2_FEETARECLIPPED;
+ }
+
//
// if any special lines were hit, do the effect
//
- if (! (thing->flags&(MF_TELEPORT|MF_NOCLIP)) )
- while (numspechit--)
- {
- // see if the line was crossed
- ld = spechit[numspechit];
- side = P_PointOnLineSide (thing->x, thing->y, ld);
- oldside = P_PointOnLineSide (oldx, oldy, ld);
- if (side != oldside)
- {
- if (ld->special)
- P_CrossSpecialLine (ld-lines, oldside, thing);
- }
- }
+ if (!(thing->flags & (MF_TELEPORT | MF_NOCLIP)))
+ while (numspechit--)
+ {
+ // see if the line was crossed
+ ld = spechit[numspechit];
+ side = P_PointOnLineSide(thing->x, thing->y, ld);
+ oldside = P_PointOnLineSide(oldx, oldy, ld);
+ if (side != oldside)
+ {
+ if (ld->special)
+ P_CrossSpecialLine(ld - lines, oldside, thing);
+ }
+ }
- return true;
+ return true;
}
/*
@@ -854,49 +879,49 @@
==================
*/
-boolean P_ThingHeightClip (mobj_t *thing)
+boolean P_ThingHeightClip(mobj_t * thing)
{
- boolean onfloor;
-
- onfloor = (thing->z == thing->floorz);
-
- P_CheckPosition (thing, thing->x, thing->y);
- // what about stranding a monster partially off an edge?
-
- thing->floorz = tmfloorz;
- thing->ceilingz = tmceilingz;
-
- if (onfloor)
- // walking monsters rise and fall with the floor
- thing->z = thing->floorz;
- else
- { // don't adjust a floating monster unless forced to
- if (thing->z+thing->height > thing->ceilingz)
- thing->z = thing->ceilingz - thing->height;
- }
-
- if (thing->ceilingz - thing->floorz < thing->height)
- return false;
-
- return true;
+ boolean onfloor;
+
+ onfloor = (thing->z == thing->floorz);
+
+ P_CheckPosition(thing, thing->x, thing->y);
+ // what about stranding a monster partially off an edge?
+
+ thing->floorz = tmfloorz;
+ thing->ceilingz = tmceilingz;
+
+ if (onfloor)
+ // walking monsters rise and fall with the floor
+ thing->z = thing->floorz;
+ else
+ { // don't adjust a floating monster unless forced to
+ if (thing->z + thing->height > thing->ceilingz)
+ thing->z = thing->ceilingz - thing->height;
+ }
+
+ if (thing->ceilingz - thing->floorz < thing->height)
+ return false;
+
+ return true;
}
-/*
-==============================================================================
+/*
+==============================================================================
SLIDE MOVE
Allows the player to slide along any angled walls
-==============================================================================
-*/
+==============================================================================
+*/
-fixed_t bestslidefrac, secondslidefrac;
-line_t *bestslideline, *secondslideline;
-mobj_t *slidemo;
+fixed_t bestslidefrac, secondslidefrac;
+line_t *bestslideline, *secondslideline;
+mobj_t *slidemo;
-fixed_t tmxmove, tmymove;
+fixed_t tmxmove, tmymove;
/*
==================
@@ -907,42 +932,42 @@
==================
*/
-void P_HitSlideLine (line_t *ld)
+void P_HitSlideLine(line_t * ld)
{
- int side;
- angle_t lineangle, moveangle, deltaangle;
- fixed_t movelen, newlen;
-
-
- if (ld->slopetype == ST_HORIZONTAL)
- {
- tmymove = 0;
- return;
- }
- if (ld->slopetype == ST_VERTICAL)
- {
- tmxmove = 0;
- return;
- }
-
- side = P_PointOnLineSide (slidemo->x, slidemo->y, ld);
-
- lineangle = R_PointToAngle2 (0,0, ld->dx, ld->dy);
- if (side == 1)
- lineangle += ANG180;
- moveangle = R_PointToAngle2 (0,0, tmxmove, tmymove);
- deltaangle = moveangle-lineangle;
- if (deltaangle > ANG180)
- deltaangle += ANG180;
-// I_Error ("SlideLine: ang>ANG180");
+ int side;
+ angle_t lineangle, moveangle, deltaangle;
+ fixed_t movelen, newlen;
- lineangle >>= ANGLETOFINESHIFT;
- deltaangle >>= ANGLETOFINESHIFT;
-
- movelen = P_AproxDistance (tmxmove, tmymove);
- newlen = FixedMul (movelen, finecosine[deltaangle]);
- tmxmove = FixedMul (newlen, finecosine[lineangle]);
- tmymove = FixedMul (newlen, finesine[lineangle]);
+
+ if (ld->slopetype == ST_HORIZONTAL)
+ {
+ tmymove = 0;
+ return;
+ }
+ if (ld->slopetype == ST_VERTICAL)
+ {
+ tmxmove = 0;
+ return;
+ }
+
+ side = P_PointOnLineSide(slidemo->x, slidemo->y, ld);
+
+ lineangle = R_PointToAngle2(0, 0, ld->dx, ld->dy);
+ if (side == 1)
+ lineangle += ANG180;
+ moveangle = R_PointToAngle2(0, 0, tmxmove, tmymove);
+ deltaangle = moveangle - lineangle;
+ if (deltaangle > ANG180)
+ deltaangle += ANG180;
+// I_Error ("SlideLine: ang>ANG180");
+
+ lineangle >>= ANGLETOFINESHIFT;
+ deltaangle >>= ANGLETOFINESHIFT;
+
+ movelen = P_AproxDistance(tmxmove, tmymove);
+ newlen = FixedMul(movelen, finecosine[deltaangle]);
+ tmxmove = FixedMul(newlen, finecosine[lineangle]);
+ tmymove = FixedMul(newlen, finesine[lineangle]);
}
/*
@@ -953,44 +978,44 @@
==============
*/
-boolean PTR_SlideTraverse (intercept_t *in)
+boolean PTR_SlideTraverse(intercept_t * in)
{
- line_t *li;
-
- if (!in->isaline)
- I_Error ("PTR_SlideTraverse: not a line?");
-
- li = in->d.line;
- if ( ! (li->flags & ML_TWOSIDED) )
- {
- if (P_PointOnLineSide (slidemo->x, slidemo->y, li))
- return true; // don't hit the back side
- goto isblocking;
- }
+ line_t *li;
- P_LineOpening (li); // set openrange, opentop, openbottom
- if (openrange < slidemo->height)
- goto isblocking; // doesn't fit
-
- if (opentop - slidemo->z < slidemo->height)
- goto isblocking; // mobj is too high
+ if (!in->isaline)
+ I_Error("PTR_SlideTraverse: not a line?");
- if (openbottom - slidemo->z > 24*FRACUNIT )
- goto isblocking; // too big a step up
+ li = in->d.line;
+ if (!(li->flags & ML_TWOSIDED))
+ {
+ if (P_PointOnLineSide(slidemo->x, slidemo->y, li))
+ return true; // don't hit the back side
+ goto isblocking;
+ }
- return true; // this line doesn't block movement
-
+ P_LineOpening(li); // set openrange, opentop, openbottom
+ if (openrange < slidemo->height)
+ goto isblocking; // doesn't fit
+
+ if (opentop - slidemo->z < slidemo->height)
+ goto isblocking; // mobj is too high
+
+ if (openbottom - slidemo->z > 24 * FRACUNIT)
+ goto isblocking; // too big a step up
+
+ return true; // this line doesn't block movement
+
// the line does block movement, see if it is closer than best so far
-isblocking:
- if (in->frac < bestslidefrac)
- {
- secondslidefrac = bestslidefrac;
- secondslideline = bestslideline;
- bestslidefrac = in->frac;
- bestslideline = li;
- }
-
- return false; // stop
+ isblocking:
+ if (in->frac < bestslidefrac)
+ {
+ secondslidefrac = bestslidefrac;
+ secondslideline = bestslideline;
+ bestslidefrac = in->frac;
+ bestslideline = li;
+ }
+
+ return false; // stop
}
@@ -1007,117 +1032,117 @@
==================
*/
-void P_SlideMove (mobj_t *mo)
+void P_SlideMove(mobj_t * mo)
{
- fixed_t leadx, leady;
- fixed_t trailx, traily;
- fixed_t newx, newy;
- int hitcount;
-
- slidemo = mo;
- hitcount = 0;
-retry:
- if (++hitcount == 3)
- goto stairstep; // don't loop forever
-
+ fixed_t leadx, leady;
+ fixed_t trailx, traily;
+ fixed_t newx, newy;
+ int hitcount;
+
+ slidemo = mo;
+ hitcount = 0;
+ retry:
+ if (++hitcount == 3)
+ goto stairstep; // don't loop forever
+
//
// trace along the three leading corners
//
- if (mo->momx > 0)
- {
- leadx = mo->x + mo->radius;
- trailx = mo->x - mo->radius;
- }
- else
- {
- leadx = mo->x - mo->radius;
- trailx = mo->x + mo->radius;
- }
-
- if (mo->momy > 0)
- {
- leady = mo->y + mo->radius;
- traily = mo->y - mo->radius;
- }
- else
- {
- leady = mo->y - mo->radius;
- traily = mo->y + mo->radius;
- }
-
- bestslidefrac = FRACUNIT+1;
-
- P_PathTraverse ( leadx, leady, leadx+mo->momx, leady+mo->momy,
- PT_ADDLINES, PTR_SlideTraverse );
- P_PathTraverse ( trailx, leady, trailx+mo->momx, leady+mo->momy,
- PT_ADDLINES, PTR_SlideTraverse );
- P_PathTraverse ( leadx, traily, leadx+mo->momx, traily+mo->momy,
- PT_ADDLINES, PTR_SlideTraverse );
+ if (mo->momx > 0)
+ {
+ leadx = mo->x + mo->radius;
+ trailx = mo->x - mo->radius;
+ }
+ else
+ {
+ leadx = mo->x - mo->radius;
+ trailx = mo->x + mo->radius;
+ }
+ if (mo->momy > 0)
+ {
+ leady = mo->y + mo->radius;
+ traily = mo->y - mo->radius;
+ }
+ else
+ {
+ leady = mo->y - mo->radius;
+ traily = mo->y + mo->radius;
+ }
+
+ bestslidefrac = FRACUNIT + 1;
+
+ P_PathTraverse(leadx, leady, leadx + mo->momx, leady + mo->momy,
+ PT_ADDLINES, PTR_SlideTraverse);
+ P_PathTraverse(trailx, leady, trailx + mo->momx, leady + mo->momy,
+ PT_ADDLINES, PTR_SlideTraverse);
+ P_PathTraverse(leadx, traily, leadx + mo->momx, traily + mo->momy,
+ PT_ADDLINES, PTR_SlideTraverse);
+
//
// move up to the wall
//
- if (bestslidefrac == FRACUNIT+1)
- { // the move most have hit the middle, so stairstep
-stairstep:
- if (!P_TryMove (mo, mo->x, mo->y + mo->momy))
- P_TryMove (mo, mo->x + mo->momx, mo->y);
- return;
- }
-
- bestslidefrac -= 0x800; // fudge a bit to make sure it doesn't hit
- if (bestslidefrac > 0)
- {
- newx = FixedMul (mo->momx, bestslidefrac);
- newy = FixedMul (mo->momy, bestslidefrac);
- if (!P_TryMove (mo, mo->x+newx, mo->y+newy))
- goto stairstep;
- }
-
+ if (bestslidefrac == FRACUNIT + 1)
+ { // the move most have hit the middle, so stairstep
+ stairstep:
+ if (!P_TryMove(mo, mo->x, mo->y + mo->momy))
+ P_TryMove(mo, mo->x + mo->momx, mo->y);
+ return;
+ }
+
+ bestslidefrac -= 0x800; // fudge a bit to make sure it doesn't hit
+ if (bestslidefrac > 0)
+ {
+ newx = FixedMul(mo->momx, bestslidefrac);
+ newy = FixedMul(mo->momy, bestslidefrac);
+ if (!P_TryMove(mo, mo->x + newx, mo->y + newy))
+ goto stairstep;
+ }
+
//
// now continue along the wall
//
- bestslidefrac = FRACUNIT-(bestslidefrac+0x800); // remainder
- if (bestslidefrac > FRACUNIT)
- bestslidefrac = FRACUNIT;
- if (bestslidefrac <= 0)
- return;
-
- tmxmove = FixedMul (mo->momx, bestslidefrac);
- tmymove = FixedMul (mo->momy, bestslidefrac);
+ bestslidefrac = FRACUNIT - (bestslidefrac + 0x800); // remainder
+ if (bestslidefrac > FRACUNIT)
+ bestslidefrac = FRACUNIT;
+ if (bestslidefrac <= 0)
+ return;
- P_HitSlideLine (bestslideline); // clip the moves
+ tmxmove = FixedMul(mo->momx, bestslidefrac);
+ tmymove = FixedMul(mo->momy, bestslidefrac);
- mo->momx = tmxmove;
- mo->momy = tmymove;
-
- if (!P_TryMove (mo, mo->x+tmxmove, mo->y+tmymove))
- {
- goto retry;
- }
+ P_HitSlideLine(bestslideline); // clip the moves
+
+ mo->momx = tmxmove;
+ mo->momy = tmymove;
+
+ if (!P_TryMove(mo, mo->x + tmxmove, mo->y + tmymove))
+ {
+ goto retry;
+ }
}
-/*
-==============================================================================
+/*
+==============================================================================
P_LineAttack
-==============================================================================
-*/
+==============================================================================
+*/
-mobj_t *linetarget; // who got hit (or NULL)
-mobj_t *shootthing;
-fixed_t shootz; // height if not aiming up or down
- // ???: use slope for monsters?
-int la_damage;
-fixed_t attackrange;
+mobj_t *linetarget; // who got hit (or NULL)
+mobj_t *shootthing;
+fixed_t shootz; // height if not aiming up or down
+ // ???: use slope for monsters?
+int la_damage;
+fixed_t attackrange;
-fixed_t aimslope;
+fixed_t aimslope;
-extern fixed_t topslope, bottomslope; // slopes to top and bottom of target
+extern fixed_t topslope, bottomslope; // slopes to top and bottom of target
/*
===============================================================================
@@ -1128,209 +1153,209 @@
===============================================================================
*/
-boolean PTR_AimTraverse (intercept_t *in)
+boolean PTR_AimTraverse(intercept_t * in)
{
- line_t *li;
- mobj_t *th;
- fixed_t slope, thingtopslope, thingbottomslope;
- fixed_t dist;
-
- if (in->isaline)
- {
- li = in->d.line;
- if ( !(li->flags & ML_TWOSIDED) )
- return false; // stop
+ line_t *li;
+ mobj_t *th;
+ fixed_t slope, thingtopslope, thingbottomslope;
+ fixed_t dist;
+
+ if (in->isaline)
+ {
+ li = in->d.line;
+ if (!(li->flags & ML_TWOSIDED))
+ return false; // stop
//
// crosses a two sided line
// a two sided line will restrict the possible target ranges
- P_LineOpening (li);
-
- if (openbottom >= opentop)
- return false; // stop
-
- dist = FixedMul (attackrange, in->frac);
+ P_LineOpening(li);
- if (li->frontsector->floorheight != li->backsector->floorheight)
- {
- slope = FixedDiv (openbottom - shootz , dist);
- if (slope > bottomslope)
- bottomslope = slope;
- }
-
- if (li->frontsector->ceilingheight != li->backsector->ceilingheight)
- {
- slope = FixedDiv (opentop - shootz , dist);
- if (slope < topslope)
- topslope = slope;
- }
-
- if (topslope <= bottomslope)
- return false; // stop
-
- return true; // shot continues
- }
-
+ if (openbottom >= opentop)
+ return false; // stop
+
+ dist = FixedMul(attackrange, in->frac);
+
+ if (li->frontsector->floorheight != li->backsector->floorheight)
+ {
+ slope = FixedDiv(openbottom - shootz, dist);
+ if (slope > bottomslope)
+ bottomslope = slope;
+ }
+
+ if (li->frontsector->ceilingheight != li->backsector->ceilingheight)
+ {
+ slope = FixedDiv(opentop - shootz, dist);
+ if (slope < topslope)
+ topslope = slope;
+ }
+
+ if (topslope <= bottomslope)
+ return false; // stop
+
+ return true; // shot continues
+ }
+
//
// shoot a thing
//
- th = in->d.thing;
- if (th == shootthing)
- return true; // can't shoot self
- if (!(th->flags&MF_SHOOTABLE))
- return true; // corpse or something
- if(th->type == MT_POD)
- { // Can't auto-aim at pods
- return(true);
- }
+ th = in->d.thing;
+ if (th == shootthing)
+ return true; // can't shoot self
+ if (!(th->flags & MF_SHOOTABLE))
+ return true; // corpse or something
+ if (th->type == MT_POD)
+ { // Can't auto-aim at pods
+ return (true);
+ }
// check angles to see if the thing can be aimed at
- dist = FixedMul (attackrange, in->frac);
- thingtopslope = FixedDiv (th->z+th->height - shootz , dist);
- if (thingtopslope < bottomslope)
- return true; // shot over the thing
- thingbottomslope = FixedDiv (th->z - shootz, dist);
- if (thingbottomslope > topslope)
- return true; // shot under the thing
+ dist = FixedMul(attackrange, in->frac);
+ thingtopslope = FixedDiv(th->z + th->height - shootz, dist);
+ if (thingtopslope < bottomslope)
+ return true; // shot over the thing
+ thingbottomslope = FixedDiv(th->z - shootz, dist);
+ if (thingbottomslope > topslope)
+ return true; // shot under the thing
//
// this thing can be hit!
//
- if (thingtopslope > topslope)
- thingtopslope = topslope;
- if (thingbottomslope < bottomslope)
- thingbottomslope = bottomslope;
+ if (thingtopslope > topslope)
+ thingtopslope = topslope;
+ if (thingbottomslope < bottomslope)
+ thingbottomslope = bottomslope;
- aimslope = (thingtopslope+thingbottomslope)/2;
- linetarget = th;
+ aimslope = (thingtopslope + thingbottomslope) / 2;
+ linetarget = th;
- return false; // don't go any farther
+ return false; // don't go any farther
}
/*
-==============================================================================
+==============================================================================
=
= PTR_ShootTraverse
=
-==============================================================================
+==============================================================================
*/
-boolean PTR_ShootTraverse (intercept_t *in)
+boolean PTR_ShootTraverse(intercept_t * in)
{
- fixed_t x,y,z;
- fixed_t frac;
- line_t *li;
- mobj_t *th;
- fixed_t slope;
- fixed_t dist;
- fixed_t thingtopslope, thingbottomslope;
- mobj_t *mo;
+ fixed_t x, y, z;
+ fixed_t frac;
+ line_t *li;
+ mobj_t *th;
+ fixed_t slope;
+ fixed_t dist;
+ fixed_t thingtopslope, thingbottomslope;
+ mobj_t *mo;
- if (in->isaline)
- {
- li = in->d.line;
- if (li->special)
- P_ShootSpecialLine (shootthing, li);
- if ( !(li->flags & ML_TWOSIDED) )
- goto hitline;
+ if (in->isaline)
+ {
+ li = in->d.line;
+ if (li->special)
+ P_ShootSpecialLine(shootthing, li);
+ if (!(li->flags & ML_TWOSIDED))
+ goto hitline;
//
// crosses a two sided line
//
- P_LineOpening (li);
-
- dist = FixedMul (attackrange, in->frac);
+ P_LineOpening(li);
- if (li->frontsector->floorheight != li->backsector->floorheight)
- {
- slope = FixedDiv (openbottom - shootz , dist);
- if (slope > aimslope)
- goto hitline;
- }
-
- if (li->frontsector->ceilingheight != li->backsector->ceilingheight)
- {
- slope = FixedDiv (opentop - shootz , dist);
- if (slope < aimslope)
- goto hitline;
- }
-
- return true; // shot continues
+ dist = FixedMul(attackrange, in->frac);
+
+ if (li->frontsector->floorheight != li->backsector->floorheight)
+ {
+ slope = FixedDiv(openbottom - shootz, dist);
+ if (slope > aimslope)
+ goto hitline;
+ }
+
+ if (li->frontsector->ceilingheight != li->backsector->ceilingheight)
+ {
+ slope = FixedDiv(opentop - shootz, dist);
+ if (slope < aimslope)
+ goto hitline;
+ }
+
+ return true; // shot continues
//
// hit line
//
-hitline:
- // position a bit closer
- frac = in->frac - FixedDiv (4*FRACUNIT,attackrange);
- x = trace.x + FixedMul (trace.dx, frac);
- y = trace.y + FixedMul (trace.dy, frac);
- z = shootz + FixedMul (aimslope, FixedMul(frac, attackrange));
+ hitline:
+ // position a bit closer
+ frac = in->frac - FixedDiv(4 * FRACUNIT, attackrange);
+ x = trace.x + FixedMul(trace.dx, frac);
+ y = trace.y + FixedMul(trace.dy, frac);
+ z = shootz + FixedMul(aimslope, FixedMul(frac, attackrange));
- if (li->frontsector->ceilingpic == skyflatnum)
- {
- if (z > li->frontsector->ceilingheight)
- return false; // don't shoot the sky!
- if (li->backsector && li->backsector->ceilingpic == skyflatnum)
- return false; // it's a sky hack wall
- }
-
- P_SpawnPuff (x,y,z);
- return false; // don't go any farther
- }
-
+ if (li->frontsector->ceilingpic == skyflatnum)
+ {
+ if (z > li->frontsector->ceilingheight)
+ return false; // don't shoot the sky!
+ if (li->backsector && li->backsector->ceilingpic == skyflatnum)
+ return false; // it's a sky hack wall
+ }
+
+ P_SpawnPuff(x, y, z);
+ return false; // don't go any farther
+ }
+
//
// shoot a thing
//
- th = in->d.thing;
- if (th == shootthing)
- return true; // can't shoot self
- if (!(th->flags&MF_SHOOTABLE))
- return true; // corpse or something
+ th = in->d.thing;
+ if (th == shootthing)
+ return true; // can't shoot self
+ if (!(th->flags & MF_SHOOTABLE))
+ return true; // corpse or something
//
// check for physical attacks on a ghost
//
- if(th->flags&MF_SHADOW && shootthing->player->readyweapon == wp_staff)
- {
- return(true);
- }
+ if (th->flags & MF_SHADOW && shootthing->player->readyweapon == wp_staff)
+ {
+ return (true);
+ }
// check angles to see if the thing can be aimed at
- dist = FixedMul (attackrange, in->frac);
- thingtopslope = FixedDiv (th->z+th->height - shootz , dist);
- if (thingtopslope < aimslope)
- return true; // shot over the thing
- thingbottomslope = FixedDiv (th->z - shootz, dist);
- if (thingbottomslope > aimslope)
- return true; // shot under the thing
+ dist = FixedMul(attackrange, in->frac);
+ thingtopslope = FixedDiv(th->z + th->height - shootz, dist);
+ if (thingtopslope < aimslope)
+ return true; // shot over the thing
+ thingbottomslope = FixedDiv(th->z - shootz, dist);
+ if (thingbottomslope > aimslope)
+ return true; // shot under the thing
//
// hit thing
//
- // position a bit closer
- frac = in->frac - FixedDiv (10*FRACUNIT,attackrange);
- x = trace.x + FixedMul(trace.dx, frac);
- y = trace.y + FixedMul(trace.dy, frac);
- z = shootz + FixedMul(aimslope, FixedMul(frac, attackrange));
- if(PuffType == MT_BLASTERPUFF1)
- { // Make blaster big puff
- mo = P_SpawnMobj(x, y, z, MT_BLASTERPUFF2);
- S_StartSound(mo, sfx_blshit);
- }
- else
- {
- P_SpawnPuff(x, y, z);
- }
- if(la_damage)
- {
- if(!(in->d.thing->flags&MF_NOBLOOD) && P_Random() < 192)
- {
- P_BloodSplatter(x, y, z, in->d.thing);
- }
- P_DamageMobj(th, shootthing, shootthing, la_damage);
- }
- return(false); // don't go any farther
+ // position a bit closer
+ frac = in->frac - FixedDiv(10 * FRACUNIT, attackrange);
+ x = trace.x + FixedMul(trace.dx, frac);
+ y = trace.y + FixedMul(trace.dy, frac);
+ z = shootz + FixedMul(aimslope, FixedMul(frac, attackrange));
+ if (PuffType == MT_BLASTERPUFF1)
+ { // Make blaster big puff
+ mo = P_SpawnMobj(x, y, z, MT_BLASTERPUFF2);
+ S_StartSound(mo, sfx_blshit);
+ }
+ else
+ {
+ P_SpawnPuff(x, y, z);
+ }
+ if (la_damage)
+ {
+ if (!(in->d.thing->flags & MF_NOBLOOD) && P_Random() < 192)
+ {
+ P_BloodSplatter(x, y, z, in->d.thing);
+ }
+ P_DamageMobj(th, shootthing, shootthing, la_damage);
+ }
+ return (false); // don't go any farther
}
/*
@@ -1341,30 +1366,30 @@
=================
*/
-fixed_t P_AimLineAttack (mobj_t *t1, angle_t angle, fixed_t distance)
+fixed_t P_AimLineAttack(mobj_t * t1, angle_t angle, fixed_t distance)
{
- fixed_t x2, y2;
-
- angle >>= ANGLETOFINESHIFT;
- shootthing = t1;
- x2 = t1->x + (distance>>FRACBITS)*finecosine[angle];
- y2 = t1->y + (distance>>FRACBITS)*finesine[angle];
- shootz = t1->z + (t1->height>>1) + 8*FRACUNIT;
- topslope = 100*FRACUNIT/160; // can't shoot outside view angles
- bottomslope = -100*FRACUNIT/160;
- attackrange = distance;
- linetarget = NULL;
-
- P_PathTraverse ( t1->x, t1->y, x2, y2
- , PT_ADDLINES|PT_ADDTHINGS, PTR_AimTraverse );
-
- if (linetarget)
- return aimslope;
- return 0;
+ fixed_t x2, y2;
+
+ angle >>= ANGLETOFINESHIFT;
+ shootthing = t1;
+ x2 = t1->x + (distance >> FRACBITS) * finecosine[angle];
+ y2 = t1->y + (distance >> FRACBITS) * finesine[angle];
+ shootz = t1->z + (t1->height >> 1) + 8 * FRACUNIT;
+ topslope = 100 * FRACUNIT / 160; // can't shoot outside view angles
+ bottomslope = -100 * FRACUNIT / 160;
+ attackrange = distance;
+ linetarget = NULL;
+
+ P_PathTraverse(t1->x, t1->y, x2, y2, PT_ADDLINES | PT_ADDTHINGS,
+ PTR_AimTraverse);
+
+ if (linetarget)
+ return aimslope;
+ return 0;
}
-
+
/*
=================
=
@@ -1375,100 +1400,101 @@
=================
*/
-void P_LineAttack (mobj_t *t1, angle_t angle, fixed_t distance, fixed_t slope, int damage)
+void P_LineAttack(mobj_t * t1, angle_t angle, fixed_t distance, fixed_t slope,
+ int damage)
{
- fixed_t x2, y2;
-
- angle >>= ANGLETOFINESHIFT;
- shootthing = t1;
- la_damage = damage;
- x2 = t1->x + (distance>>FRACBITS)*finecosine[angle];
- y2 = t1->y + (distance>>FRACBITS)*finesine[angle];
- shootz = t1->z + (t1->height>>1) + 8*FRACUNIT;
- if(t1->flags2&MF2_FEETARECLIPPED)
- {
- shootz -= FOOTCLIPSIZE;
- }
- attackrange = distance;
- aimslope = slope;
-
- P_PathTraverse ( t1->x, t1->y, x2, y2
- , PT_ADDLINES|PT_ADDTHINGS, PTR_ShootTraverse );
+ fixed_t x2, y2;
+
+ angle >>= ANGLETOFINESHIFT;
+ shootthing = t1;
+ la_damage = damage;
+ x2 = t1->x + (distance >> FRACBITS) * finecosine[angle];
+ y2 = t1->y + (distance >> FRACBITS) * finesine[angle];
+ shootz = t1->z + (t1->height >> 1) + 8 * FRACUNIT;
+ if (t1->flags2 & MF2_FEETARECLIPPED)
+ {
+ shootz -= FOOTCLIPSIZE;
+ }
+ attackrange = distance;
+ aimslope = slope;
+
+ P_PathTraverse(t1->x, t1->y, x2, y2, PT_ADDLINES | PT_ADDTHINGS,
+ PTR_ShootTraverse);
}
-
-/*
-==============================================================================
+/*
+==============================================================================
+
USE LINES
-==============================================================================
-*/
-
-mobj_t *usething;
+==============================================================================
+*/
-boolean PTR_UseTraverse (intercept_t *in)
+mobj_t *usething;
+
+boolean PTR_UseTraverse(intercept_t * in)
{
- if (!in->d.line->special)
- {
- P_LineOpening (in->d.line);
- if (openrange <= 0)
- {
- //S_StartSound (usething, sfx_noway);
- return false; // can't use through a wall
- }
- return true ; // not a special line, but keep checking
- }
-
- if (P_PointOnLineSide (usething->x, usething->y, in->d.line) == 1)
- return false; // don't use back sides
-
- P_UseSpecialLine (usething, in->d.line);
+ if (!in->d.line->special)
+ {
+ P_LineOpening(in->d.line);
+ if (openrange <= 0)
+ {
+ //S_StartSound (usething, sfx_noway);
+ return false; // can't use through a wall
+ }
+ return true; // not a special line, but keep checking
+ }
- return false; // can't use for than one special line in a row
+ if (P_PointOnLineSide(usething->x, usething->y, in->d.line) == 1)
+ return false; // don't use back sides
+
+ P_UseSpecialLine(usething, in->d.line);
+
+ return false; // can't use for than one special line in a row
}
-/*
+/*
================
-=
+=
= P_UseLines
=
-= Looks for special lines in front of the player to activate
-================
-*/
-
-void P_UseLines (player_t *player)
+= Looks for special lines in front of the player to activate
+================
+*/
+
+void P_UseLines(player_t * player)
{
- int angle;
- fixed_t x1, y1, x2, y2;
-
- usething = player->mo;
-
- angle = player->mo->angle >> ANGLETOFINESHIFT;
- x1 = player->mo->x;
- y1 = player->mo->y;
- x2 = x1 + (USERANGE>>FRACBITS)*finecosine[angle];
- y2 = y1 + (USERANGE>>FRACBITS)*finesine[angle];
-
- P_PathTraverse ( x1, y1, x2, y2, PT_ADDLINES, PTR_UseTraverse );
+ int angle;
+ fixed_t x1, y1, x2, y2;
+
+ usething = player->mo;
+
+ angle = player->mo->angle >> ANGLETOFINESHIFT;
+ x1 = player->mo->x;
+ y1 = player->mo->y;
+ x2 = x1 + (USERANGE >> FRACBITS) * finecosine[angle];
+ y2 = y1 + (USERANGE >> FRACBITS) * finesine[angle];
+
+ P_PathTraverse(x1, y1, x2, y2, PT_ADDLINES, PTR_UseTraverse);
}
-/*
-==============================================================================
+/*
+==============================================================================
RADIUS ATTACK
-==============================================================================
-*/
-
-mobj_t *bombsource;
-mobj_t *bombspot;
-int bombdamage;
+==============================================================================
+*/
+mobj_t *bombsource;
+mobj_t *bombspot;
+int bombdamage;
+
/*
=================
=
@@ -1478,36 +1504,36 @@
=================
*/
-boolean PIT_RadiusAttack (mobj_t *thing)
+boolean PIT_RadiusAttack(mobj_t * thing)
{
- fixed_t dx, dy, dist;
+ fixed_t dx, dy, dist;
- if(!(thing->flags&MF_SHOOTABLE))
- {
- return true;
- }
- if(thing->type == MT_MINOTAUR || thing->type == MT_SORCERER1
- || thing->type == MT_SORCERER2)
- { // Episode 2 and 3 bosses take no damage from PIT_RadiusAttack
- return(true);
- }
- dx = abs(thing->x - bombspot->x);
- dy = abs(thing->y - bombspot->y);
- dist = dx > dy ? dx : dy;
- dist = (dist - thing->radius) >> FRACBITS;
- if(dist < 0)
- {
- dist = 0;
- }
- if(dist >= bombdamage)
- { // Out of range
- return true;
- }
- if(P_CheckSight(thing, bombspot))
- { // OK to damage, target is in direct path
- P_DamageMobj(thing, bombspot, bombsource, bombdamage - dist);
- }
- return(true);
+ if (!(thing->flags & MF_SHOOTABLE))
+ {
+ return true;
+ }
+ if (thing->type == MT_MINOTAUR || thing->type == MT_SORCERER1
+ || thing->type == MT_SORCERER2)
+ { // Episode 2 and 3 bosses take no damage from PIT_RadiusAttack
+ return (true);
+ }
+ dx = abs(thing->x - bombspot->x);
+ dy = abs(thing->y - bombspot->y);
+ dist = dx > dy ? dx : dy;
+ dist = (dist - thing->radius) >> FRACBITS;
+ if (dist < 0)
+ {
+ dist = 0;
+ }
+ if (dist >= bombdamage)
+ { // Out of range
+ return true;
+ }
+ if (P_CheckSight(thing, bombspot))
+ { // OK to damage, target is in direct path
+ P_DamageMobj(thing, bombspot, bombsource, bombdamage - dist);
+ }
+ return (true);
}
/*
@@ -1519,34 +1545,34 @@
=================
*/
-void P_RadiusAttack (mobj_t *spot, mobj_t *source, int damage)
+void P_RadiusAttack(mobj_t * spot, mobj_t * source, int damage)
{
- int x,y, xl, xh, yl, yh;
- fixed_t dist;
-
- dist = (damage+MAXRADIUS)<<FRACBITS;
- yh = (spot->y + dist - bmaporgy)>>MAPBLOCKSHIFT;
- yl = (spot->y - dist - bmaporgy)>>MAPBLOCKSHIFT;
- xh = (spot->x + dist - bmaporgx)>>MAPBLOCKSHIFT;
- xl = (spot->x - dist - bmaporgx)>>MAPBLOCKSHIFT;
- bombspot = spot;
- if(spot->type == MT_POD && spot->target)
- {
- bombsource = spot->target;
- }
- else
- {
- bombsource = source;
- }
- bombdamage = damage;
- for (y=yl ; y<=yh ; y++)
- for (x=xl ; x<=xh ; x++)
- P_BlockThingsIterator (x, y, PIT_RadiusAttack );
+ int x, y, xl, xh, yl, yh;
+ fixed_t dist;
+
+ dist = (damage + MAXRADIUS) << FRACBITS;
+ yh = (spot->y + dist - bmaporgy) >> MAPBLOCKSHIFT;
+ yl = (spot->y - dist - bmaporgy) >> MAPBLOCKSHIFT;
+ xh = (spot->x + dist - bmaporgx) >> MAPBLOCKSHIFT;
+ xl = (spot->x - dist - bmaporgx) >> MAPBLOCKSHIFT;
+ bombspot = spot;
+ if (spot->type == MT_POD && spot->target)
+ {
+ bombsource = spot->target;
+ }
+ else
+ {
+ bombsource = source;
+ }
+ bombdamage = damage;
+ for (y = yl; y <= yh; y++)
+ for (x = xl; x <= xh; x++)
+ P_BlockThingsIterator(x, y, PIT_RadiusAttack);
}
-/*
-==============================================================================
+/*
+==============================================================================
SECTOR HEIGHT CHANGING
@@ -1558,12 +1584,12 @@
= If crunch is true, they will take damage as they are being crushed
= If Crunch is false, you should set the sector height back the way it
= was and call P_ChangeSector again to undo the changes
-==============================================================================
-*/
-
-boolean crushchange;
-boolean nofit;
+==============================================================================
+*/
+boolean crushchange;
+boolean nofit;
+
/*
===============
=
@@ -1572,43 +1598,44 @@
===============
*/
-boolean PIT_ChangeSector (mobj_t *thing)
+boolean PIT_ChangeSector(mobj_t * thing)
{
- mobj_t *mo;
-
- if (P_ThingHeightClip (thing))
- return true; // keep checking
+ mobj_t *mo;
- // crunch bodies to giblets
- if (thing->health <= 0)
- {
- //P_SetMobjState (thing, S_GIBS);
- thing->height = 0;
- thing->radius = 0;
- return true; // keep checking
- }
+ if (P_ThingHeightClip(thing))
+ return true; // keep checking
- // crunch dropped items
- if (thing->flags & MF_DROPPED)
- {
- P_RemoveMobj (thing);
- return true; // keep checking
- }
+ // crunch bodies to giblets
+ if (thing->health <= 0)
+ {
+ //P_SetMobjState (thing, S_GIBS);
+ thing->height = 0;
+ thing->radius = 0;
+ return true; // keep checking
+ }
- if (! (thing->flags & MF_SHOOTABLE) )
- return true; // assume it is bloody gibs or something
-
- nofit = true;
- if (crushchange && !(leveltime&3) )
- {
- P_DamageMobj(thing,NULL,NULL,10);
- // spray blood in a random direction
- mo = P_SpawnMobj (thing->x, thing->y, thing->z + thing->height/2, MT_BLOOD);
- mo->momx = (P_Random() - P_Random ())<<12;
- mo->momy = (P_Random() - P_Random ())<<12;
- }
-
- return true; // keep checking (crush other things)
+ // crunch dropped items
+ if (thing->flags & MF_DROPPED)
+ {
+ P_RemoveMobj(thing);
+ return true; // keep checking
+ }
+
+ if (!(thing->flags & MF_SHOOTABLE))
+ return true; // assume it is bloody gibs or something
+
+ nofit = true;
+ if (crushchange && !(leveltime & 3))
+ {
+ P_DamageMobj(thing, NULL, NULL, 10);
+ // spray blood in a random direction
+ mo = P_SpawnMobj(thing->x, thing->y, thing->z + thing->height / 2,
+ MT_BLOOD);
+ mo->momx = (P_Random() - P_Random()) << 12;
+ mo->momy = (P_Random() - P_Random()) << 12;
+ }
+
+ return true; // keep checking (crush other things)
}
/*
@@ -1619,20 +1646,20 @@
===============
*/
-boolean P_ChangeSector (sector_t *sector, boolean crunch)
+boolean P_ChangeSector(sector_t * sector, boolean crunch)
{
- int x,y;
-
- nofit = false;
- crushchange = crunch;
-
+ int x, y;
+
+ nofit = false;
+ crushchange = crunch;
+
// recheck heights for all things near the moving sector
- for (x=sector->blockbox[BOXLEFT] ; x<= sector->blockbox[BOXRIGHT] ; x++)
- for (y=sector->blockbox[BOXBOTTOM];y<= sector->blockbox[BOXTOP] ; y++)
- P_BlockThingsIterator (x, y, PIT_ChangeSector);
-
-
- return nofit;
-}
+ for (x = sector->blockbox[BOXLEFT]; x <= sector->blockbox[BOXRIGHT]; x++)
+ for (y = sector->blockbox[BOXBOTTOM]; y <= sector->blockbox[BOXTOP];
+ y++)
+ P_BlockThingsIterator(x, y, PIT_ChangeSector);
+
+ return nofit;
+}
--- a/src/heretic/p_maputl.c
+++ b/src/heretic/p_maputl.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_maputl.c
@@ -15,13 +37,13 @@
===================
*/
-fixed_t P_AproxDistance (fixed_t dx, fixed_t dy)
+fixed_t P_AproxDistance(fixed_t dx, fixed_t dy)
{
- dx = abs(dx);
- dy = abs(dy);
- if (dx < dy)
- return dx+dy-(dx>>1);
- return dx+dy-(dy>>1);
+ dx = abs(dx);
+ dy = abs(dy);
+ if (dx < dy)
+ return dx + dy - (dx >> 1);
+ return dx + dy - (dy >> 1);
}
@@ -34,33 +56,33 @@
==================
*/
-int P_PointOnLineSide (fixed_t x, fixed_t y, line_t *line)
+int P_PointOnLineSide(fixed_t x, fixed_t y, line_t * line)
{
- fixed_t dx,dy;
- fixed_t left, right;
-
- if (!line->dx)
- {
- if (x <= line->v1->x)
- return line->dy > 0;
- return line->dy < 0;
- }
- if (!line->dy)
- {
- if (y <= line->v1->y)
- return line->dx < 0;
- return line->dx > 0;
- }
-
- dx = (x - line->v1->x);
- dy = (y - line->v1->y);
-
- left = FixedMul ( line->dy>>FRACBITS , dx );
- right = FixedMul ( dy , line->dx>>FRACBITS );
-
- if (right < left)
- return 0; // front side
- return 1; // back side
+ fixed_t dx, dy;
+ fixed_t left, right;
+
+ if (!line->dx)
+ {
+ if (x <= line->v1->x)
+ return line->dy > 0;
+ return line->dy < 0;
+ }
+ if (!line->dy)
+ {
+ if (y <= line->v1->y)
+ return line->dx < 0;
+ return line->dx > 0;
+ }
+
+ dx = (x - line->v1->x);
+ dy = (y - line->v1->y);
+
+ left = FixedMul(line->dy >> FRACBITS, dx);
+ right = FixedMul(dy, line->dx >> FRACBITS);
+
+ if (right < left)
+ return 0; // front side
+ return 1; // back side
}
@@ -74,43 +96,43 @@
=================
*/
-int P_BoxOnLineSide (fixed_t *tmbox, line_t *ld)
+int P_BoxOnLineSide(fixed_t * tmbox, line_t * ld)
{
- int p1, p2;
-
- switch (ld->slopetype)
- {
- case ST_HORIZONTAL:
- p1 = tmbox[BOXTOP] > ld->v1->y;
- p2 = tmbox[BOXBOTTOM] > ld->v1->y;
- if (ld->dx < 0)
- {
- p1 ^= 1;
- p2 ^= 1;
- }
- break;
- case ST_VERTICAL:
- p1 = tmbox[BOXRIGHT] < ld->v1->x;
- p2 = tmbox[BOXLEFT] < ld->v1->x;
- if (ld->dy < 0)
- {
- p1 ^= 1;
- p2 ^= 1;
- }
- break;
- case ST_POSITIVE:
- p1 = P_PointOnLineSide (tmbox[BOXLEFT], tmbox[BOXTOP], ld);
- p2 = P_PointOnLineSide (tmbox[BOXRIGHT], tmbox[BOXBOTTOM], ld);
- break;
- case ST_NEGATIVE:
- p1 = P_PointOnLineSide (tmbox[BOXRIGHT], tmbox[BOXTOP], ld);
- p2 = P_PointOnLineSide (tmbox[BOXLEFT], tmbox[BOXBOTTOM], ld);
- break;
- }
+ int p1, p2;
- if (p1 == p2)
- return p1;
- return -1;
+ switch (ld->slopetype)
+ {
+ case ST_HORIZONTAL:
+ p1 = tmbox[BOXTOP] > ld->v1->y;
+ p2 = tmbox[BOXBOTTOM] > ld->v1->y;
+ if (ld->dx < 0)
+ {
+ p1 ^= 1;
+ p2 ^= 1;
+ }
+ break;
+ case ST_VERTICAL:
+ p1 = tmbox[BOXRIGHT] < ld->v1->x;
+ p2 = tmbox[BOXLEFT] < ld->v1->x;
+ if (ld->dy < 0)
+ {
+ p1 ^= 1;
+ p2 ^= 1;
+ }
+ break;
+ case ST_POSITIVE:
+ p1 = P_PointOnLineSide(tmbox[BOXLEFT], tmbox[BOXTOP], ld);
+ p2 = P_PointOnLineSide(tmbox[BOXRIGHT], tmbox[BOXBOTTOM], ld);
+ break;
+ case ST_NEGATIVE:
+ p1 = P_PointOnLineSide(tmbox[BOXRIGHT], tmbox[BOXTOP], ld);
+ p2 = P_PointOnLineSide(tmbox[BOXLEFT], tmbox[BOXBOTTOM], ld);
+ break;
+ }
+
+ if (p1 == p2)
+ return p1;
+ return -1;
}
/*
@@ -122,41 +144,41 @@
==================
*/
-int P_PointOnDivlineSide (fixed_t x, fixed_t y, divline_t *line)
+int P_PointOnDivlineSide(fixed_t x, fixed_t y, divline_t * line)
{
- fixed_t dx,dy;
- fixed_t left, right;
-
- if (!line->dx)
- {
- if (x <= line->x)
- return line->dy > 0;
- return line->dy < 0;
- }
- if (!line->dy)
- {
- if (y <= line->y)
- return line->dx < 0;
- return line->dx > 0;
- }
-
- dx = (x - line->x);
- dy = (y - line->y);
-
+ fixed_t dx, dy;
+ fixed_t left, right;
+
+ if (!line->dx)
+ {
+ if (x <= line->x)
+ return line->dy > 0;
+ return line->dy < 0;
+ }
+ if (!line->dy)
+ {
+ if (y <= line->y)
+ return line->dx < 0;
+ return line->dx > 0;
+ }
+
+ dx = (x - line->x);
+ dy = (y - line->y);
+
// try to quickly decide by looking at sign bits
- if ( (line->dy ^ line->dx ^ dx ^ dy)&0x80000000 )
- {
- if ( (line->dy ^ dx) & 0x80000000 )
- return 1; // (left is negative)
- return 0;
- }
-
- left = FixedMul ( line->dy>>8, dx>>8 );
- right = FixedMul ( dy>>8 , line->dx>>8 );
-
- if (right < left)
- return 0; // front side
- return 1; // back side
+ if ((line->dy ^ line->dx ^ dx ^ dy) & 0x80000000)
+ {
+ if ((line->dy ^ dx) & 0x80000000)
+ return 1; // (left is negative)
+ return 0;
+ }
+
+ left = FixedMul(line->dy >> 8, dx >> 8);
+ right = FixedMul(dy >> 8, line->dx >> 8);
+
+ if (right < left)
+ return 0; // front side
+ return 1; // back side
}
@@ -169,12 +191,12 @@
==============
*/
-void P_MakeDivline (line_t *li, divline_t *dl)
+void P_MakeDivline(line_t * li, divline_t * dl)
{
- dl->x = li->v1->x;
- dl->y = li->v1->y;
- dl->dx = li->dx;
- dl->dy = li->dy;
+ dl->x = li->v1->x;
+ dl->y = li->v1->y;
+ dl->dx = li->dx;
+ dl->dy = li->dy;
}
@@ -189,39 +211,39 @@
===============
*/
-fixed_t P_InterceptVector (divline_t *v2, divline_t *v1)
+fixed_t P_InterceptVector(divline_t * v2, divline_t * v1)
{
#if 1
- fixed_t frac, num, den;
-
- den = FixedMul (v1->dy>>8,v2->dx) - FixedMul(v1->dx>>8,v2->dy);
- if (den == 0)
- return 0;
-// I_Error ("P_InterceptVector: parallel");
- num = FixedMul ( (v1->x - v2->x)>>8 ,v1->dy) +
- FixedMul ( (v2->y - v1->y)>>8 , v1->dx);
- frac = FixedDiv (num , den);
+ fixed_t frac, num, den;
- return frac;
+ den = FixedMul(v1->dy >> 8, v2->dx) - FixedMul(v1->dx >> 8, v2->dy);
+ if (den == 0)
+ return 0;
+// I_Error ("P_InterceptVector: parallel");
+ num = FixedMul((v1->x - v2->x) >> 8, v1->dy) +
+ FixedMul((v2->y - v1->y) >> 8, v1->dx);
+ frac = FixedDiv(num, den);
+
+ return frac;
#else
-float frac, num, den, v1x,v1y,v1dx,v1dy,v2x,v2y,v2dx,v2dy;
+ float frac, num, den, v1x, v1y, v1dx, v1dy, v2x, v2y, v2dx, v2dy;
- v1x = (float)v1->x/FRACUNIT;
- v1y = (float)v1->y/FRACUNIT;
- v1dx = (float)v1->dx/FRACUNIT;
- v1dy = (float)v1->dy/FRACUNIT;
- v2x = (float)v2->x/FRACUNIT;
- v2y = (float)v2->y/FRACUNIT;
- v2dx = (float)v2->dx/FRACUNIT;
- v2dy = (float)v2->dy/FRACUNIT;
-
- den = v1dy*v2dx - v1dx*v2dy;
- if (den == 0)
- return 0; // parallel
- num = (v1x - v2x)*v1dy + (v2y - v1y)*v1dx;
- frac = num / den;
+ v1x = (float) v1->x / FRACUNIT;
+ v1y = (float) v1->y / FRACUNIT;
+ v1dx = (float) v1->dx / FRACUNIT;
+ v1dy = (float) v1->dy / FRACUNIT;
+ v2x = (float) v2->x / FRACUNIT;
+ v2y = (float) v2->y / FRACUNIT;
+ v2dx = (float) v2->dx / FRACUNIT;
+ v2dy = (float) v2->dy / FRACUNIT;
- return frac*FRACUNIT;
+ den = v1dy * v2dx - v1dx * v2dy;
+ if (den == 0)
+ return 0; // parallel
+ num = (v1x - v2x) * v1dy + (v2y - v1y) * v1dx;
+ frac = num / den;
+
+ return frac * FRACUNIT;
#endif
}
@@ -236,37 +258,37 @@
*/
fixed_t opentop, openbottom, openrange;
-fixed_t lowfloor;
+fixed_t lowfloor;
-void P_LineOpening (line_t *linedef)
+void P_LineOpening(line_t * linedef)
{
- sector_t *front, *back;
-
- if (linedef->sidenum[1] == -1)
- { // single sided line
- openrange = 0;
- return;
- }
-
- front = linedef->frontsector;
- back = linedef->backsector;
-
- if (front->ceilingheight < back->ceilingheight)
- opentop = front->ceilingheight;
- else
- opentop = back->ceilingheight;
- if (front->floorheight > back->floorheight)
- {
- openbottom = front->floorheight;
- lowfloor = back->floorheight;
- }
- else
- {
- openbottom = back->floorheight;
- lowfloor = front->floorheight;
- }
-
- openrange = opentop - openbottom;
+ sector_t *front, *back;
+
+ if (linedef->sidenum[1] == -1)
+ { // single sided line
+ openrange = 0;
+ return;
+ }
+
+ front = linedef->frontsector;
+ back = linedef->backsector;
+
+ if (front->ceilingheight < back->ceilingheight)
+ opentop = front->ceilingheight;
+ else
+ opentop = back->ceilingheight;
+ if (front->floorheight > back->floorheight)
+ {
+ openbottom = front->floorheight;
+ lowfloor = back->floorheight;
+ }
+ else
+ {
+ openbottom = back->floorheight;
+ lowfloor = front->floorheight;
+ }
+
+ openrange = opentop - openbottom;
}
/*
@@ -287,37 +309,37 @@
===================
*/
-void P_UnsetThingPosition (mobj_t *thing)
+void P_UnsetThingPosition(mobj_t * thing)
{
- int blockx, blocky;
+ int blockx, blocky;
- if ( ! (thing->flags & MF_NOSECTOR) )
- { // inert things don't need to be in blockmap
+ if (!(thing->flags & MF_NOSECTOR))
+ { // inert things don't need to be in blockmap
// unlink from subsector
- if (thing->snext)
- thing->snext->sprev = thing->sprev;
- if (thing->sprev)
- thing->sprev->snext = thing->snext;
- else
- thing->subsector->sector->thinglist = thing->snext;
- }
-
- if ( ! (thing->flags & MF_NOBLOCKMAP) )
- { // inert things don't need to be in blockmap
+ if (thing->snext)
+ thing->snext->sprev = thing->sprev;
+ if (thing->sprev)
+ thing->sprev->snext = thing->snext;
+ else
+ thing->subsector->sector->thinglist = thing->snext;
+ }
+
+ if (!(thing->flags & MF_NOBLOCKMAP))
+ { // inert things don't need to be in blockmap
// unlink from block map
- if (thing->bnext)
- thing->bnext->bprev = thing->bprev;
- if (thing->bprev)
- thing->bprev->bnext = thing->bnext;
- else
- {
- blockx = (thing->x - bmaporgx)>>MAPBLOCKSHIFT;
- blocky = (thing->y - bmaporgy)>>MAPBLOCKSHIFT;
- if (blockx>=0 && blockx < bmapwidth
- && blocky>=0 && blocky <bmapheight)
- blocklinks[blocky*bmapwidth+blockx] = thing->bnext;
- }
- }
+ if (thing->bnext)
+ thing->bnext->bprev = thing->bprev;
+ if (thing->bprev)
+ thing->bprev->bnext = thing->bnext;
+ else
+ {
+ blockx = (thing->x - bmaporgx) >> MAPBLOCKSHIFT;
+ blocky = (thing->y - bmaporgy) >> MAPBLOCKSHIFT;
+ if (blockx >= 0 && blockx < bmapwidth
+ && blocky >= 0 && blocky < bmapheight)
+ blocklinks[blocky * bmapwidth + blockx] = thing->bnext;
+ }
+ }
}
@@ -332,50 +354,51 @@
===================
*/
-void P_SetThingPosition (mobj_t *thing)
+void P_SetThingPosition(mobj_t * thing)
{
- subsector_t *ss;
- sector_t *sec;
- int blockx, blocky;
- mobj_t **link;
-
+ subsector_t *ss;
+ sector_t *sec;
+ int blockx, blocky;
+ mobj_t **link;
+
//
// link into subsector
//
- ss = R_PointInSubsector (thing->x,thing->y);
- thing->subsector = ss;
- if ( ! (thing->flags & MF_NOSECTOR) )
- { // invisible things don't go into the sector links
- sec = ss->sector;
-
- thing->sprev = NULL;
- thing->snext = sec->thinglist;
- if (sec->thinglist)
- sec->thinglist->sprev = thing;
- sec->thinglist = thing;
- }
-
+ ss = R_PointInSubsector(thing->x, thing->y);
+ thing->subsector = ss;
+ if (!(thing->flags & MF_NOSECTOR))
+ { // invisible things don't go into the sector links
+ sec = ss->sector;
+
+ thing->sprev = NULL;
+ thing->snext = sec->thinglist;
+ if (sec->thinglist)
+ sec->thinglist->sprev = thing;
+ sec->thinglist = thing;
+ }
+
//
// link into blockmap
//
- if ( ! (thing->flags & MF_NOBLOCKMAP) )
- { // inert things don't need to be in blockmap
- blockx = (thing->x - bmaporgx)>>MAPBLOCKSHIFT;
- blocky = (thing->y - bmaporgy)>>MAPBLOCKSHIFT;
- if (blockx>=0 && blockx < bmapwidth && blocky>=0 && blocky <bmapheight)
- {
- link = &blocklinks[blocky*bmapwidth+blockx];
- thing->bprev = NULL;
- thing->bnext = *link;
- if (*link)
- (*link)->bprev = thing;
- *link = thing;
- }
- else
- { // thing is off the map
- thing->bnext = thing->bprev = NULL;
- }
- }
+ if (!(thing->flags & MF_NOBLOCKMAP))
+ { // inert things don't need to be in blockmap
+ blockx = (thing->x - bmaporgx) >> MAPBLOCKSHIFT;
+ blocky = (thing->y - bmaporgy) >> MAPBLOCKSHIFT;
+ if (blockx >= 0 && blockx < bmapwidth && blocky >= 0
+ && blocky < bmapheight)
+ {
+ link = &blocklinks[blocky * bmapwidth + blockx];
+ thing->bprev = NULL;
+ thing->bnext = *link;
+ if (*link)
+ (*link)->bprev = thing;
+ *link = thing;
+ }
+ else
+ { // thing is off the map
+ thing->bnext = thing->bprev = NULL;
+ }
+ }
}
@@ -402,30 +425,30 @@
===================
*/
-boolean P_BlockLinesIterator (int x, int y, boolean(*func)(line_t*) )
+boolean P_BlockLinesIterator(int x, int y, boolean(*func) (line_t *))
{
- int offset;
- short *list;
- line_t *ld;
-
- if (x<0 || y<0 || x>=bmapwidth || y>=bmapheight)
- return true;
- offset = y*bmapwidth+x;
-
- offset = *(blockmap+offset);
+ int offset;
+ short *list;
+ line_t *ld;
- for ( list = blockmaplump+offset ; *list != -1 ; list++)
- {
- ld = &lines[*list];
- if (ld->validcount == validcount)
- continue; // line has already been checked
- ld->validcount = validcount;
-
- if ( !func(ld) )
- return false;
- }
-
- return true; // everything was checked
+ if (x < 0 || y < 0 || x >= bmapwidth || y >= bmapheight)
+ return true;
+ offset = y * bmapwidth + x;
+
+ offset = *(blockmap + offset);
+
+ for (list = blockmaplump + offset; *list != -1; list++)
+ {
+ ld = &lines[*list];
+ if (ld->validcount == validcount)
+ continue; // line has already been checked
+ ld->validcount = validcount;
+
+ if (!func(ld))
+ return false;
+ }
+
+ return true; // everything was checked
}
@@ -437,18 +460,18 @@
==================
*/
-boolean P_BlockThingsIterator (int x, int y, boolean(*func)(mobj_t*) )
+boolean P_BlockThingsIterator(int x, int y, boolean(*func) (mobj_t *))
{
- mobj_t *mobj;
-
- if (x<0 || y<0 || x>=bmapwidth || y>=bmapheight)
- return true;
+ mobj_t *mobj;
- for (mobj = blocklinks[y*bmapwidth+x] ; mobj ; mobj = mobj->bnext)
- if (!func( mobj ) )
- return false;
+ if (x < 0 || y < 0 || x >= bmapwidth || y >= bmapheight)
+ return true;
- return true;
+ for (mobj = blocklinks[y * bmapwidth + x]; mobj; mobj = mobj->bnext)
+ if (!func(mobj))
+ return false;
+
+ return true;
}
/*
@@ -459,11 +482,11 @@
===============================================================================
*/
-intercept_t intercepts[MAXINTERCEPTS], *intercept_p;
+intercept_t intercepts[MAXINTERCEPTS], *intercept_p;
-divline_t trace;
-boolean earlyout;
-int ptflags;
+divline_t trace;
+boolean earlyout;
+int ptflags;
/*
==================
@@ -477,45 +500,45 @@
==================
*/
-boolean PIT_AddLineIntercepts (line_t *ld)
+boolean PIT_AddLineIntercepts(line_t * ld)
{
- int s1, s2;
- fixed_t frac;
- divline_t dl;
-
+ int s1, s2;
+ fixed_t frac;
+ divline_t dl;
+
// avoid precision problems with two routines
- if ( trace.dx > FRACUNIT*16 || trace.dy > FRACUNIT*16
- || trace.dx < -FRACUNIT*16 || trace.dy < -FRACUNIT*16)
- {
- s1 = P_PointOnDivlineSide (ld->v1->x, ld->v1->y, &trace);
- s2 = P_PointOnDivlineSide (ld->v2->x, ld->v2->y, &trace);
- }
- else
- {
- s1 = P_PointOnLineSide (trace.x, trace.y, ld);
- s2 = P_PointOnLineSide (trace.x+trace.dx, trace.y+trace.dy, ld);
- }
- if (s1 == s2)
- return true; // line isn't crossed
+ if (trace.dx > FRACUNIT * 16 || trace.dy > FRACUNIT * 16
+ || trace.dx < -FRACUNIT * 16 || trace.dy < -FRACUNIT * 16)
+ {
+ s1 = P_PointOnDivlineSide(ld->v1->x, ld->v1->y, &trace);
+ s2 = P_PointOnDivlineSide(ld->v2->x, ld->v2->y, &trace);
+ }
+ else
+ {
+ s1 = P_PointOnLineSide(trace.x, trace.y, ld);
+ s2 = P_PointOnLineSide(trace.x + trace.dx, trace.y + trace.dy, ld);
+ }
+ if (s1 == s2)
+ return true; // line isn't crossed
//
// hit the line
//
- P_MakeDivline (ld, &dl);
- frac = P_InterceptVector (&trace, &dl);
- if (frac < 0)
- return true; // behind source
-
+ P_MakeDivline(ld, &dl);
+ frac = P_InterceptVector(&trace, &dl);
+ if (frac < 0)
+ return true; // behind source
+
// try to early out the check
- if (earlyout && frac < FRACUNIT && !ld->backsector)
- return false; // stop checking
-
- intercept_p->frac = frac;
- intercept_p->isaline = true;
- intercept_p->d.line = ld;
- intercept_p++;
+ if (earlyout && frac < FRACUNIT && !ld->backsector)
+ return false; // stop checking
- return true; // continue
+ intercept_p->frac = frac;
+ intercept_p->isaline = true;
+ intercept_p->d.line = ld;
+ intercept_p++;
+
+ return true; // continue
}
@@ -528,52 +551,52 @@
==================
*/
-boolean PIT_AddThingIntercepts (mobj_t *thing)
+boolean PIT_AddThingIntercepts(mobj_t * thing)
{
- fixed_t x1,y1, x2,y2;
- int s1, s2;
- boolean tracepositive;
- divline_t dl;
- fixed_t frac;
-
- tracepositive = (trace.dx ^ trace.dy)>0;
-
- // check a corner to corner crossection for hit
-
- if (tracepositive)
- {
- x1 = thing->x - thing->radius;
- y1 = thing->y + thing->radius;
-
- x2 = thing->x + thing->radius;
- y2 = thing->y - thing->radius;
- }
- else
- {
- x1 = thing->x - thing->radius;
- y1 = thing->y - thing->radius;
-
- x2 = thing->x + thing->radius;
- y2 = thing->y + thing->radius;
- }
- s1 = P_PointOnDivlineSide (x1, y1, &trace);
- s2 = P_PointOnDivlineSide (x2, y2, &trace);
- if (s1 == s2)
- return true; // line isn't crossed
-
- dl.x = x1;
- dl.y = y1;
- dl.dx = x2-x1;
- dl.dy = y2-y1;
- frac = P_InterceptVector (&trace, &dl);
- if (frac < 0)
- return true; // behind source
- intercept_p->frac = frac;
- intercept_p->isaline = false;
- intercept_p->d.thing = thing;
- intercept_p++;
+ fixed_t x1, y1, x2, y2;
+ int s1, s2;
+ boolean tracepositive;
+ divline_t dl;
+ fixed_t frac;
- return true; // keep going
+ tracepositive = (trace.dx ^ trace.dy) > 0;
+
+ // check a corner to corner crossection for hit
+
+ if (tracepositive)
+ {
+ x1 = thing->x - thing->radius;
+ y1 = thing->y + thing->radius;
+
+ x2 = thing->x + thing->radius;
+ y2 = thing->y - thing->radius;
+ }
+ else
+ {
+ x1 = thing->x - thing->radius;
+ y1 = thing->y - thing->radius;
+
+ x2 = thing->x + thing->radius;
+ y2 = thing->y + thing->radius;
+ }
+ s1 = P_PointOnDivlineSide(x1, y1, &trace);
+ s2 = P_PointOnDivlineSide(x2, y2, &trace);
+ if (s1 == s2)
+ return true; // line isn't crossed
+
+ dl.x = x1;
+ dl.y = y1;
+ dl.dx = x2 - x1;
+ dl.dy = y2 - y1;
+ frac = P_InterceptVector(&trace, &dl);
+ if (frac < 0)
+ return true; // behind source
+ intercept_p->frac = frac;
+ intercept_p->isaline = false;
+ intercept_p->d.thing = thing;
+ intercept_p++;
+
+ return true; // keep going
}
@@ -586,49 +609,49 @@
====================
*/
-boolean P_TraverseIntercepts ( traverser_t func, fixed_t maxfrac )
+boolean P_TraverseIntercepts(traverser_t func, fixed_t maxfrac)
{
- int count;
- fixed_t dist;
- intercept_t *scan, *in;
-
- count = intercept_p - intercepts;
- in = 0; // shut up compiler warning
-
- while (count--)
- {
- dist = MAXINT;
- for (scan = intercepts ; scan<intercept_p ; scan++)
- if (scan->frac < dist)
- {
- dist = scan->frac;
- in = scan;
- }
-
- if (dist > maxfrac)
- return true; // checked everything in range
+ int count;
+ fixed_t dist;
+ intercept_t *scan, *in;
+
+ count = intercept_p - intercepts;
+ in = 0; // shut up compiler warning
+
+ while (count--)
+ {
+ dist = MAXINT;
+ for (scan = intercepts; scan < intercept_p; scan++)
+ if (scan->frac < dist)
+ {
+ dist = scan->frac;
+ in = scan;
+ }
+
+ if (dist > maxfrac)
+ return true; // checked everything in range
#if 0
- { // don't check these yet, ther may be others inserted
- in = scan = intercepts;
- for ( scan = intercepts ; scan<intercept_p ; scan++)
- if (scan->frac > maxfrac)
- *in++ = *scan;
- intercept_p = in;
- return false;
- }
+ { // don't check these yet, ther may be others inserted
+ in = scan = intercepts;
+ for (scan = intercepts; scan < intercept_p; scan++)
+ if (scan->frac > maxfrac)
+ *in++ = *scan;
+ intercept_p = in;
+ return false;
+ }
#endif
- if ( !func (in) )
- return false; // don't bother going farther
- in->frac = MAXINT;
- }
-
- return true; // everything was traversed
+ if (!func(in))
+ return false; // don't bother going farther
+ in->frac = MAXINT;
+ }
+
+ return true; // everything was traversed
}
-/*
+/*
==================
=
= P_PathTraverse
@@ -636,125 +659,122 @@
= Traces a line from x1,y1 to x2,y2, calling the traverser function for each
= Returns true if the traverser function returns true for all lines
==================
-*/
+*/
-boolean P_PathTraverse (fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2,
- int flags, boolean (*trav) (intercept_t *))
+boolean P_PathTraverse(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2,
+ int flags, boolean(*trav) (intercept_t *))
{
- fixed_t xt1,yt1,xt2,yt2;
- fixed_t xstep,ystep;
- fixed_t partial;
- fixed_t xintercept, yintercept;
- int mapx, mapy, mapxstep, mapystep;
- int count;
-
- earlyout = flags & PT_EARLYOUT;
-
- validcount++;
- intercept_p = intercepts;
-
- if ( ((x1-bmaporgx)&(MAPBLOCKSIZE-1)) == 0)
- x1 += FRACUNIT; // don't side exactly on a line
- if ( ((y1-bmaporgy)&(MAPBLOCKSIZE-1)) == 0)
- y1 += FRACUNIT; // don't side exactly on a line
- trace.x = x1;
- trace.y = y1;
- trace.dx = x2 - x1;
- trace.dy = y2 - y1;
+ fixed_t xt1, yt1, xt2, yt2;
+ fixed_t xstep, ystep;
+ fixed_t partial;
+ fixed_t xintercept, yintercept;
+ int mapx, mapy, mapxstep, mapystep;
+ int count;
- x1 -= bmaporgx;
- y1 -= bmaporgy;
- xt1 = x1>>MAPBLOCKSHIFT;
- yt1 = y1>>MAPBLOCKSHIFT;
+ earlyout = flags & PT_EARLYOUT;
- x2 -= bmaporgx;
- y2 -= bmaporgy;
- xt2 = x2>>MAPBLOCKSHIFT;
- yt2 = y2>>MAPBLOCKSHIFT;
+ validcount++;
+ intercept_p = intercepts;
- if (xt2 > xt1)
- {
- mapxstep = 1;
- partial = FRACUNIT - ((x1>>MAPBTOFRAC)&(FRACUNIT-1));
- ystep = FixedDiv (y2-y1,abs(x2-x1));
- }
- else if (xt2 < xt1)
- {
- mapxstep = -1;
- partial = (x1>>MAPBTOFRAC)&(FRACUNIT-1);
- ystep = FixedDiv (y2-y1,abs(x2-x1));
- }
- else
- {
- mapxstep = 0;
- partial = FRACUNIT;
- ystep = 256*FRACUNIT;
- }
- yintercept = (y1>>MAPBTOFRAC) + FixedMul (partial, ystep);
+ if (((x1 - bmaporgx) & (MAPBLOCKSIZE - 1)) == 0)
+ x1 += FRACUNIT; // don't side exactly on a line
+ if (((y1 - bmaporgy) & (MAPBLOCKSIZE - 1)) == 0)
+ y1 += FRACUNIT; // don't side exactly on a line
+ trace.x = x1;
+ trace.y = y1;
+ trace.dx = x2 - x1;
+ trace.dy = y2 - y1;
-
- if (yt2 > yt1)
- {
- mapystep = 1;
- partial = FRACUNIT - ((y1>>MAPBTOFRAC)&(FRACUNIT-1));
- xstep = FixedDiv (x2-x1,abs(y2-y1));
- }
- else if (yt2 < yt1)
- {
- mapystep = -1;
- partial = (y1>>MAPBTOFRAC)&(FRACUNIT-1);
- xstep = FixedDiv (x2-x1,abs(y2-y1));
- }
- else
- {
- mapystep = 0;
- partial = FRACUNIT;
- xstep = 256*FRACUNIT;
- }
- xintercept = (x1>>MAPBTOFRAC) + FixedMul (partial, xstep);
+ x1 -= bmaporgx;
+ y1 -= bmaporgy;
+ xt1 = x1 >> MAPBLOCKSHIFT;
+ yt1 = y1 >> MAPBLOCKSHIFT;
-
+ x2 -= bmaporgx;
+ y2 -= bmaporgy;
+ xt2 = x2 >> MAPBLOCKSHIFT;
+ yt2 = y2 >> MAPBLOCKSHIFT;
+
+ if (xt2 > xt1)
+ {
+ mapxstep = 1;
+ partial = FRACUNIT - ((x1 >> MAPBTOFRAC) & (FRACUNIT - 1));
+ ystep = FixedDiv(y2 - y1, abs(x2 - x1));
+ }
+ else if (xt2 < xt1)
+ {
+ mapxstep = -1;
+ partial = (x1 >> MAPBTOFRAC) & (FRACUNIT - 1);
+ ystep = FixedDiv(y2 - y1, abs(x2 - x1));
+ }
+ else
+ {
+ mapxstep = 0;
+ partial = FRACUNIT;
+ ystep = 256 * FRACUNIT;
+ }
+ yintercept = (y1 >> MAPBTOFRAC) + FixedMul(partial, ystep);
+
+
+ if (yt2 > yt1)
+ {
+ mapystep = 1;
+ partial = FRACUNIT - ((y1 >> MAPBTOFRAC) & (FRACUNIT - 1));
+ xstep = FixedDiv(x2 - x1, abs(y2 - y1));
+ }
+ else if (yt2 < yt1)
+ {
+ mapystep = -1;
+ partial = (y1 >> MAPBTOFRAC) & (FRACUNIT - 1);
+ xstep = FixedDiv(x2 - x1, abs(y2 - y1));
+ }
+ else
+ {
+ mapystep = 0;
+ partial = FRACUNIT;
+ xstep = 256 * FRACUNIT;
+ }
+ xintercept = (x1 >> MAPBTOFRAC) + FixedMul(partial, xstep);
+
+
//
// step through map blocks
// Count is present to prevent a round off error from skipping the break
- mapx = xt1;
- mapy = yt1;
-
- for (count = 0 ; count < 64 ; count++)
- {
- if (flags & PT_ADDLINES)
- {
- if (!P_BlockLinesIterator (mapx, mapy,PIT_AddLineIntercepts))
- return false; // early out
- }
- if (flags & PT_ADDTHINGS)
- {
- if (!P_BlockThingsIterator (mapx, mapy,PIT_AddThingIntercepts))
- return false; // early out
- }
-
- if (mapx == xt2 && mapy == yt2)
- break;
-
- if ( (yintercept >> FRACBITS) == mapy)
- {
- yintercept += ystep;
- mapx += mapxstep;
- }
- else if ( (xintercept >> FRACBITS) == mapx)
- {
- xintercept += xstep;
- mapy += mapystep;
- }
-
- }
+ mapx = xt1;
+ mapy = yt1;
+ for (count = 0; count < 64; count++)
+ {
+ if (flags & PT_ADDLINES)
+ {
+ if (!P_BlockLinesIterator(mapx, mapy, PIT_AddLineIntercepts))
+ return false; // early out
+ }
+ if (flags & PT_ADDTHINGS)
+ {
+ if (!P_BlockThingsIterator(mapx, mapy, PIT_AddThingIntercepts))
+ return false; // early out
+ }
+ if (mapx == xt2 && mapy == yt2)
+ break;
+
+ if ((yintercept >> FRACBITS) == mapy)
+ {
+ yintercept += ystep;
+ mapx += mapxstep;
+ }
+ else if ((xintercept >> FRACBITS) == mapx)
+ {
+ xintercept += xstep;
+ mapy += mapystep;
+ }
+
+ }
+
+
//
// go through the sorted list
//
- return P_TraverseIntercepts ( trav, FRACUNIT );
+ return P_TraverseIntercepts(trav, FRACUNIT);
}
-
-
-
--- a/src/heretic/p_mobj.c
+++ b/src/heretic/p_mobj.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_mobj.c
@@ -6,30 +28,29 @@
#include "sounds.h"
#include "soundst.h"
-void G_PlayerReborn (int player);
-void P_SpawnMapThing (mapthing_t *mthing);
+void G_PlayerReborn(int player);
+void P_SpawnMapThing(mapthing_t * mthing);
mobjtype_t PuffType;
mobj_t *MissileMobj;
-static fixed_t FloatBobOffsets[64] =
-{
- 0, 51389, 102283, 152192,
- 200636, 247147, 291278, 332604,
- 370727, 405280, 435929, 462380,
- 484378, 501712, 514213, 521763,
- 524287, 521763, 514213, 501712,
- 484378, 462380, 435929, 405280,
- 370727, 332604, 291278, 247147,
- 200636, 152192, 102283, 51389,
- -1, -51390, -102284, -152193,
- -200637, -247148, -291279, -332605,
- -370728, -405281, -435930, -462381,
- -484380, -501713, -514215, -521764,
- -524288, -521764, -514214, -501713,
- -484379, -462381, -435930, -405280,
- -370728, -332605, -291279, -247148,
- -200637, -152193, -102284, -51389
+static fixed_t FloatBobOffsets[64] = {
+ 0, 51389, 102283, 152192,
+ 200636, 247147, 291278, 332604,
+ 370727, 405280, 435929, 462380,
+ 484378, 501712, 514213, 521763,
+ 524287, 521763, 514213, 501712,
+ 484378, 462380, 435929, 405280,
+ 370727, 332604, 291278, 247147,
+ 200636, 152192, 102283, 51389,
+ -1, -51390, -102284, -152193,
+ -200637, -247148, -291279, -332605,
+ -370728, -405281, -435930, -462381,
+ -484380, -501713, -514215, -521764,
+ -524288, -521764, -514214, -501713,
+ -484379, -462381, -435930, -405280,
+ -370728, -332605, -291279, -247148,
+ -200637, -152193, -102284, -51389
};
//----------------------------------------------------------------------------
@@ -40,26 +61,26 @@
//
//----------------------------------------------------------------------------
-boolean P_SetMobjState(mobj_t *mobj, statenum_t state)
+boolean P_SetMobjState(mobj_t * mobj, statenum_t state)
{
- state_t *st;
+ state_t *st;
- if(state == S_NULL)
- { // Remove mobj
- mobj->state = S_NULL;
- P_RemoveMobj(mobj);
- return(false);
- }
- st = &states[state];
- mobj->state = st;
- mobj->tics = st->tics;
- mobj->sprite = st->sprite;
- mobj->frame = st->frame;
- if(st->action)
- { // Call action function
- st->action(mobj);
- }
- return(true);
+ if (state == S_NULL)
+ { // Remove mobj
+ mobj->state = S_NULL;
+ P_RemoveMobj(mobj);
+ return (false);
+ }
+ st = &states[state];
+ mobj->state = st;
+ mobj->tics = st->tics;
+ mobj->sprite = st->sprite;
+ mobj->frame = st->frame;
+ if (st->action)
+ { // Call action function
+ st->action(mobj);
+ }
+ return (true);
}
//----------------------------------------------------------------------------
@@ -70,22 +91,22 @@
//
//----------------------------------------------------------------------------
-boolean P_SetMobjStateNF(mobj_t *mobj, statenum_t state)
+boolean P_SetMobjStateNF(mobj_t * mobj, statenum_t state)
{
- state_t *st;
+ state_t *st;
- if(state == S_NULL)
- { // Remove mobj
- mobj->state = S_NULL;
- P_RemoveMobj(mobj);
- return(false);
- }
- st = &states[state];
- mobj->state = st;
- mobj->tics = st->tics;
- mobj->sprite = st->sprite;
- mobj->frame = st->frame;
- return(true);
+ if (state == S_NULL)
+ { // Remove mobj
+ mobj->state = S_NULL;
+ P_RemoveMobj(mobj);
+ return (false);
+ }
+ st = &states[state];
+ mobj->state = st;
+ mobj->tics = st->tics;
+ mobj->sprite = st->sprite;
+ mobj->frame = st->frame;
+ return (true);
}
//----------------------------------------------------------------------------
@@ -94,23 +115,23 @@
//
//----------------------------------------------------------------------------
-void P_ExplodeMissile(mobj_t *mo)
+void P_ExplodeMissile(mobj_t * mo)
{
- if(mo->type == MT_WHIRLWIND)
- {
- if(++mo->special2 < 60)
- {
- return;
- }
- }
- mo->momx = mo->momy = mo->momz = 0;
- P_SetMobjState(mo, mobjinfo[mo->type].deathstate);
- //mo->tics -= P_Random()&3;
- mo->flags &= ~MF_MISSILE;
- if(mo->info->deathsound)
- {
- S_StartSound(mo, mo->info->deathsound);
- }
+ if (mo->type == MT_WHIRLWIND)
+ {
+ if (++mo->special2 < 60)
+ {
+ return;
+ }
+ }
+ mo->momx = mo->momy = mo->momz = 0;
+ P_SetMobjState(mo, mobjinfo[mo->type].deathstate);
+ //mo->tics -= P_Random()&3;
+ mo->flags &= ~MF_MISSILE;
+ if (mo->info->deathsound)
+ {
+ S_StartSound(mo, mo->info->deathsound);
+ }
}
//----------------------------------------------------------------------------
@@ -119,10 +140,10 @@
//
//----------------------------------------------------------------------------
-void P_FloorBounceMissile(mobj_t *mo)
+void P_FloorBounceMissile(mobj_t * mo)
{
- mo->momz = -mo->momz;
- P_SetMobjState(mo, mobjinfo[mo->type].deathstate);
+ mo->momz = -mo->momz;
+ P_SetMobjState(mo, mobjinfo[mo->type].deathstate);
}
//----------------------------------------------------------------------------
@@ -131,11 +152,11 @@
//
//----------------------------------------------------------------------------
-void P_ThrustMobj(mobj_t *mo, angle_t angle, fixed_t move)
+void P_ThrustMobj(mobj_t * mo, angle_t angle, fixed_t move)
{
- angle >>= ANGLETOFINESHIFT;
- mo->momx += FixedMul(move, finecosine[angle]);
- mo->momy += FixedMul(move, finesine[angle]);
+ angle >>= ANGLETOFINESHIFT;
+ mo->momx += FixedMul(move, finecosine[angle]);
+ mo->momy += FixedMul(move, finesine[angle]);
}
//----------------------------------------------------------------------------
@@ -148,42 +169,42 @@
//
//----------------------------------------------------------------------------
-int P_FaceMobj(mobj_t *source, mobj_t *target, angle_t *delta)
+int P_FaceMobj(mobj_t * source, mobj_t * target, angle_t * delta)
{
- angle_t diff;
- angle_t angle1;
- angle_t angle2;
+ angle_t diff;
+ angle_t angle1;
+ angle_t angle2;
- angle1 = source->angle;
- angle2 = R_PointToAngle2(source->x, source->y, target->x, target->y);
- if(angle2 > angle1)
- {
- diff = angle2-angle1;
- if(diff > ANGLE_180)
- {
- *delta = ANGLE_MAX-diff;
- return(0);
- }
- else
- {
- *delta = diff;
- return(1);
- }
- }
- else
- {
- diff = angle1-angle2;
- if(diff > ANGLE_180)
- {
- *delta = ANGLE_MAX-diff;
- return(1);
- }
- else
- {
- *delta = diff;
- return(0);
- }
- }
+ angle1 = source->angle;
+ angle2 = R_PointToAngle2(source->x, source->y, target->x, target->y);
+ if (angle2 > angle1)
+ {
+ diff = angle2 - angle1;
+ if (diff > ANGLE_180)
+ {
+ *delta = ANGLE_MAX - diff;
+ return (0);
+ }
+ else
+ {
+ *delta = diff;
+ return (1);
+ }
+ }
+ else
+ {
+ diff = angle1 - angle2;
+ if (diff > ANGLE_180)
+ {
+ *delta = ANGLE_MAX - diff;
+ return (1);
+ }
+ else
+ {
+ *delta = diff;
+ return (0);
+ }
+ }
}
//----------------------------------------------------------------------------
@@ -195,56 +216,56 @@
//
//----------------------------------------------------------------------------
-boolean P_SeekerMissile(mobj_t *actor, angle_t thresh, angle_t turnMax)
+boolean P_SeekerMissile(mobj_t * actor, angle_t thresh, angle_t turnMax)
{
- int dir;
- int dist;
- angle_t delta;
- angle_t angle;
- mobj_t *target;
+ int dir;
+ int dist;
+ angle_t delta;
+ angle_t angle;
+ mobj_t *target;
- target = (mobj_t *)actor->special1;
- if(target == NULL)
- {
- return(false);
- }
- if(!(target->flags&MF_SHOOTABLE))
- { // Target died
- actor->special1 = 0;
- return(false);
- }
- dir = P_FaceMobj(actor, target, &delta);
- if(delta > thresh)
- {
- delta >>= 1;
- if(delta > turnMax)
- {
- delta = turnMax;
- }
- }
- if(dir)
- { // Turn clockwise
- actor->angle += delta;
- }
- else
- { // Turn counter clockwise
- actor->angle -= delta;
- }
- angle = actor->angle>>ANGLETOFINESHIFT;
- actor->momx = FixedMul(actor->info->speed, finecosine[angle]);
- actor->momy = FixedMul(actor->info->speed, finesine[angle]);
- if(actor->z+actor->height < target->z ||
- target->z+target->height < actor->z)
- { // Need to seek vertically
- dist = P_AproxDistance(target->x-actor->x, target->y-actor->y);
- dist = dist/actor->info->speed;
- if(dist < 1)
- {
- dist = 1;
- }
- actor->momz = (target->z-actor->z)/dist;
- }
- return(true);
+ target = (mobj_t *) actor->special1;
+ if (target == NULL)
+ {
+ return (false);
+ }
+ if (!(target->flags & MF_SHOOTABLE))
+ { // Target died
+ actor->special1 = 0;
+ return (false);
+ }
+ dir = P_FaceMobj(actor, target, &delta);
+ if (delta > thresh)
+ {
+ delta >>= 1;
+ if (delta > turnMax)
+ {
+ delta = turnMax;
+ }
+ }
+ if (dir)
+ { // Turn clockwise
+ actor->angle += delta;
+ }
+ else
+ { // Turn counter clockwise
+ actor->angle -= delta;
+ }
+ angle = actor->angle >> ANGLETOFINESHIFT;
+ actor->momx = FixedMul(actor->info->speed, finecosine[angle]);
+ actor->momy = FixedMul(actor->info->speed, finesine[angle]);
+ if (actor->z + actor->height < target->z ||
+ target->z + target->height < actor->z)
+ { // Need to seek vertically
+ dist = P_AproxDistance(target->x - actor->x, target->y - actor->y);
+ dist = dist / actor->info->speed;
+ if (dist < 1)
+ {
+ dist = 1;
+ }
+ actor->momz = (target->z - actor->z) / dist;
+ }
+ return (true);
}
//----------------------------------------------------------------------------
@@ -258,187 +279,197 @@
#define FRICTION_LOW 0xf900
#define FRICTION_FLY 0xeb00
-void P_XYMovement(mobj_t *mo)
+void P_XYMovement(mobj_t * mo)
{
- fixed_t ptryx, ptryy;
- player_t *player;
- fixed_t xmove, ymove;
- int special;
- static int windTab[3] = {2048*5, 2048*10, 2048*25};
+ fixed_t ptryx, ptryy;
+ player_t *player;
+ fixed_t xmove, ymove;
+ int special;
+ static int windTab[3] = { 2048 * 5, 2048 * 10, 2048 * 25 };
- if(!mo->momx && !mo->momy)
- {
- if(mo->flags&MF_SKULLFLY)
- { // A flying mobj slammed into something
- mo->flags &= ~MF_SKULLFLY;
- mo->momx = mo->momy = mo->momz = 0;
- P_SetMobjState(mo, mo->info->seestate);
- }
- return;
- }
- special = mo->subsector->sector->special;
- if(mo->flags2&MF2_WINDTHRUST)
- {
- switch(special)
- {
- case 40: case 41: case 42: // Wind_East
- P_ThrustMobj(mo, 0, windTab[special-40]);
- break;
- case 43: case 44: case 45: // Wind_North
- P_ThrustMobj(mo, ANG90, windTab[special-43]);
- break;
- case 46: case 47: case 48: // Wind_South
- P_ThrustMobj(mo, ANG270, windTab[special-46]);
- break;
- case 49: case 50: case 51: // Wind_West
- P_ThrustMobj(mo, ANG180, windTab[special-49]);
- break;
- }
- }
- player = mo->player;
- if(mo->momx > MAXMOVE)
- {
- mo->momx = MAXMOVE;
- }
- else if(mo->momx < -MAXMOVE)
- {
- mo->momx = -MAXMOVE;
- }
- if(mo->momy > MAXMOVE)
- {
- mo->momy = MAXMOVE;
- }
- else if(mo->momy < -MAXMOVE)
- {
- mo->momy = -MAXMOVE;
- }
- xmove = mo->momx;
- ymove = mo->momy;
- do
- {
- if(xmove > MAXMOVE/2 || ymove > MAXMOVE/2)
- {
- ptryx = mo->x+xmove/2;
- ptryy = mo->y+ymove/2;
- xmove >>= 1;
- ymove >>= 1;
- }
- else
- {
- ptryx = mo->x + xmove;
- ptryy = mo->y + ymove;
- xmove = ymove = 0;
- }
- if(!P_TryMove(mo, ptryx, ptryy))
- { // Blocked move
- if(mo->flags2&MF2_SLIDE)
- { // Try to slide along it
- P_SlideMove(mo);
- }
- else if(mo->flags&MF_MISSILE)
- { // Explode a missile
- if(ceilingline && ceilingline->backsector
- && ceilingline->backsector->ceilingpic == skyflatnum)
- { // Hack to prevent missiles exploding against the sky
- if(mo->type == MT_BLOODYSKULL)
- {
- mo->momx = mo->momy = 0;
- mo->momz = -FRACUNIT;
- }
- else
- {
- P_RemoveMobj(mo);
- }
- return;
- }
- P_ExplodeMissile(mo);
- }
- //else if(mo->info->crashstate)
- //{
- // mo->momx = mo->momy = 0;
- // P_SetMobjState(mo, mo->info->crashstate);
- // return;
- //}
- else
- {
- mo->momx = mo->momy = 0;
- }
- }
- } while(xmove || ymove);
+ if (!mo->momx && !mo->momy)
+ {
+ if (mo->flags & MF_SKULLFLY)
+ { // A flying mobj slammed into something
+ mo->flags &= ~MF_SKULLFLY;
+ mo->momx = mo->momy = mo->momz = 0;
+ P_SetMobjState(mo, mo->info->seestate);
+ }
+ return;
+ }
+ special = mo->subsector->sector->special;
+ if (mo->flags2 & MF2_WINDTHRUST)
+ {
+ switch (special)
+ {
+ case 40:
+ case 41:
+ case 42: // Wind_East
+ P_ThrustMobj(mo, 0, windTab[special - 40]);
+ break;
+ case 43:
+ case 44:
+ case 45: // Wind_North
+ P_ThrustMobj(mo, ANG90, windTab[special - 43]);
+ break;
+ case 46:
+ case 47:
+ case 48: // Wind_South
+ P_ThrustMobj(mo, ANG270, windTab[special - 46]);
+ break;
+ case 49:
+ case 50:
+ case 51: // Wind_West
+ P_ThrustMobj(mo, ANG180, windTab[special - 49]);
+ break;
+ }
+ }
+ player = mo->player;
+ if (mo->momx > MAXMOVE)
+ {
+ mo->momx = MAXMOVE;
+ }
+ else if (mo->momx < -MAXMOVE)
+ {
+ mo->momx = -MAXMOVE;
+ }
+ if (mo->momy > MAXMOVE)
+ {
+ mo->momy = MAXMOVE;
+ }
+ else if (mo->momy < -MAXMOVE)
+ {
+ mo->momy = -MAXMOVE;
+ }
+ xmove = mo->momx;
+ ymove = mo->momy;
+ do
+ {
+ if (xmove > MAXMOVE / 2 || ymove > MAXMOVE / 2)
+ {
+ ptryx = mo->x + xmove / 2;
+ ptryy = mo->y + ymove / 2;
+ xmove >>= 1;
+ ymove >>= 1;
+ }
+ else
+ {
+ ptryx = mo->x + xmove;
+ ptryy = mo->y + ymove;
+ xmove = ymove = 0;
+ }
+ if (!P_TryMove(mo, ptryx, ptryy))
+ { // Blocked move
+ if (mo->flags2 & MF2_SLIDE)
+ { // Try to slide along it
+ P_SlideMove(mo);
+ }
+ else if (mo->flags & MF_MISSILE)
+ { // Explode a missile
+ if (ceilingline && ceilingline->backsector
+ && ceilingline->backsector->ceilingpic == skyflatnum)
+ { // Hack to prevent missiles exploding against the sky
+ if (mo->type == MT_BLOODYSKULL)
+ {
+ mo->momx = mo->momy = 0;
+ mo->momz = -FRACUNIT;
+ }
+ else
+ {
+ P_RemoveMobj(mo);
+ }
+ return;
+ }
+ P_ExplodeMissile(mo);
+ }
+ //else if(mo->info->crashstate)
+ //{
+ // mo->momx = mo->momy = 0;
+ // P_SetMobjState(mo, mo->info->crashstate);
+ // return;
+ //}
+ else
+ {
+ mo->momx = mo->momy = 0;
+ }
+ }
+ }
+ while (xmove || ymove);
- // Friction
+ // Friction
- if(player && player->cheats&CF_NOMOMENTUM)
- { // Debug option for no sliding at all
- mo->momx = mo->momy = 0;
- return;
- }
- if(mo->flags&(MF_MISSILE|MF_SKULLFLY))
- { // No friction for missiles
- return;
- }
- if(mo->z > mo->floorz && !(mo->flags2&MF2_FLY) && !(mo->flags2&MF2_ONMOBJ))
- { // No friction when falling
- return;
- }
- if(mo->flags&MF_CORPSE)
- { // Don't stop sliding if halfway off a step with some momentum
- if(mo->momx > FRACUNIT/4 || mo->momx < -FRACUNIT/4
- || mo->momy > FRACUNIT/4 || mo->momy < -FRACUNIT/4)
- {
- if(mo->floorz != mo->subsector->sector->floorheight)
- {
- return;
- }
- }
- }
- if(mo->momx > -STOPSPEED && mo->momx < STOPSPEED
- && mo->momy > -STOPSPEED && mo->momy < STOPSPEED
- && (!player || (player->cmd.forwardmove == 0
- && player->cmd.sidemove == 0)))
- { // If in a walking frame, stop moving
- if(player)
- {
- if(player->chickenTics)
- {
- if((unsigned)((player->mo->state-states)
- -S_CHICPLAY_RUN1) < 4)
- {
- P_SetMobjState(player->mo, S_CHICPLAY);
- }
- }
- else
- {
- if((unsigned)((player->mo->state-states)
- -S_PLAY_RUN1) < 4)
- {
- P_SetMobjState(player->mo, S_PLAY);
- }
- }
- }
- mo->momx = 0;
- mo->momy = 0;
- }
- else
- {
- if(mo->flags2&MF2_FLY && !(mo->z <= mo->floorz)
- &&!(mo->flags2&MF2_ONMOBJ))
- {
- mo->momx = FixedMul(mo->momx, FRICTION_FLY);
- mo->momy = FixedMul(mo->momy, FRICTION_FLY);
- }
- else if(special == 15) // Friction_Low
- {
- mo->momx = FixedMul(mo->momx, FRICTION_LOW);
- mo->momy = FixedMul(mo->momy, FRICTION_LOW);
- }
- else
- {
- mo->momx = FixedMul(mo->momx, FRICTION_NORMAL);
- mo->momy = FixedMul(mo->momy, FRICTION_NORMAL);
- }
- }
-}
+ if (player && player->cheats & CF_NOMOMENTUM)
+ { // Debug option for no sliding at all
+ mo->momx = mo->momy = 0;
+ return;
+ }
+ if (mo->flags & (MF_MISSILE | MF_SKULLFLY))
+ { // No friction for missiles
+ return;
+ }
+ if (mo->z > mo->floorz && !(mo->flags2 & MF2_FLY)
+ && !(mo->flags2 & MF2_ONMOBJ))
+ { // No friction when falling
+ return;
+ }
+ if (mo->flags & MF_CORPSE)
+ { // Don't stop sliding if halfway off a step with some momentum
+ if (mo->momx > FRACUNIT / 4 || mo->momx < -FRACUNIT / 4
+ || mo->momy > FRACUNIT / 4 || mo->momy < -FRACUNIT / 4)
+ {
+ if (mo->floorz != mo->subsector->sector->floorheight)
+ {
+ return;
+ }
+ }
+ }
+ if (mo->momx > -STOPSPEED && mo->momx < STOPSPEED
+ && mo->momy > -STOPSPEED && mo->momy < STOPSPEED
+ && (!player || (player->cmd.forwardmove == 0
+ && player->cmd.sidemove == 0)))
+ { // If in a walking frame, stop moving
+ if (player)
+ {
+ if (player->chickenTics)
+ {
+ if ((unsigned) ((player->mo->state - states)
+ - S_CHICPLAY_RUN1) < 4)
+ {
+ P_SetMobjState(player->mo, S_CHICPLAY);
+ }
+ }
+ else
+ {
+ if ((unsigned) ((player->mo->state - states)
+ - S_PLAY_RUN1) < 4)
+ {
+ P_SetMobjState(player->mo, S_PLAY);
+ }
+ }
+ }
+ mo->momx = 0;
+ mo->momy = 0;
+ }
+ else
+ {
+ if (mo->flags2 & MF2_FLY && !(mo->z <= mo->floorz)
+ && !(mo->flags2 & MF2_ONMOBJ))
+ {
+ mo->momx = FixedMul(mo->momx, FRICTION_FLY);
+ mo->momy = FixedMul(mo->momy, FRICTION_FLY);
+ }
+ else if (special == 15) // Friction_Low
+ {
+ mo->momx = FixedMul(mo->momx, FRICTION_LOW);
+ mo->momy = FixedMul(mo->momy, FRICTION_LOW);
+ }
+ else
+ {
+ mo->momx = FixedMul(mo->momx, FRICTION_NORMAL);
+ mo->momy = FixedMul(mo->momy, FRICTION_NORMAL);
+ }
+ }
+}
/*
@@ -449,140 +480,141 @@
===============
*/
-void P_ZMovement(mobj_t *mo)
+void P_ZMovement(mobj_t * mo)
{
- int dist;
- int delta;
+ int dist;
+ int delta;
//
// check for smooth step up
//
- if (mo->player && mo->z < mo->floorz)
- {
- mo->player->viewheight -= mo->floorz-mo->z;
- mo->player->deltaviewheight = (VIEWHEIGHT - mo->player->viewheight)>>3;
- }
+ if (mo->player && mo->z < mo->floorz)
+ {
+ mo->player->viewheight -= mo->floorz - mo->z;
+ mo->player->deltaviewheight =
+ (VIEWHEIGHT - mo->player->viewheight) >> 3;
+ }
//
// adjust height
//
- mo->z += mo->momz;
- if(mo->flags&MF_FLOAT && mo->target)
- { // float down towards target if too close
- if(!(mo->flags&MF_SKULLFLY) && !(mo->flags&MF_INFLOAT))
- {
- dist = P_AproxDistance(mo->x-mo->target->x, mo->y-mo->target->y);
- delta =( mo->target->z+(mo->height>>1))-mo->z;
- if (delta < 0 && dist < -(delta*3))
- mo->z -= FLOATSPEED;
- else if (delta > 0 && dist < (delta*3))
- mo->z += FLOATSPEED;
- }
- }
- if(mo->player && mo->flags2&MF2_FLY && !(mo->z <= mo->floorz)
- && leveltime&2)
- {
- mo->z += finesine[(FINEANGLES/20*leveltime>>2)&FINEMASK];
- }
+ mo->z += mo->momz;
+ if (mo->flags & MF_FLOAT && mo->target)
+ { // float down towards target if too close
+ if (!(mo->flags & MF_SKULLFLY) && !(mo->flags & MF_INFLOAT))
+ {
+ dist =
+ P_AproxDistance(mo->x - mo->target->x, mo->y - mo->target->y);
+ delta = (mo->target->z + (mo->height >> 1)) - mo->z;
+ if (delta < 0 && dist < -(delta * 3))
+ mo->z -= FLOATSPEED;
+ else if (delta > 0 && dist < (delta * 3))
+ mo->z += FLOATSPEED;
+ }
+ }
+ if (mo->player && mo->flags2 & MF2_FLY && !(mo->z <= mo->floorz)
+ && leveltime & 2)
+ {
+ mo->z += finesine[(FINEANGLES / 20 * leveltime >> 2) & FINEMASK];
+ }
//
// clip movement
//
- if(mo->z <= mo->floorz)
- { // Hit the floor
- if(mo->flags&MF_MISSILE)
- {
- mo->z = mo->floorz;
- if(mo->flags2&MF2_FLOORBOUNCE)
- {
- P_FloorBounceMissile(mo);
- return;
- }
- else if(mo->type == MT_MNTRFX2)
- { // Minotaur floor fire can go up steps
- return;
- }
- else
- {
- P_ExplodeMissile(mo);
- return;
- }
- }
- if(mo->z-mo->momz > mo->floorz)
- { // Spawn splashes, etc.
- P_HitFloor(mo);
- }
- mo->z = mo->floorz;
- if(mo->momz < 0)
- {
- if(mo->player && mo->momz < -GRAVITY*8
- && !(mo->flags2&MF2_FLY)) // squat down
- {
- mo->player->deltaviewheight = mo->momz>>3;
- S_StartSound(mo, sfx_plroof);
+ if (mo->z <= mo->floorz)
+ { // Hit the floor
+ if (mo->flags & MF_MISSILE)
+ {
+ mo->z = mo->floorz;
+ if (mo->flags2 & MF2_FLOORBOUNCE)
+ {
+ P_FloorBounceMissile(mo);
+ return;
+ }
+ else if (mo->type == MT_MNTRFX2)
+ { // Minotaur floor fire can go up steps
+ return;
+ }
+ else
+ {
+ P_ExplodeMissile(mo);
+ return;
+ }
+ }
+ if (mo->z - mo->momz > mo->floorz)
+ { // Spawn splashes, etc.
+ P_HitFloor(mo);
+ }
+ mo->z = mo->floorz;
+ if (mo->momz < 0)
+ {
+ if (mo->player && mo->momz < -GRAVITY * 8 && !(mo->flags2 & MF2_FLY)) // squat down
+ {
+ mo->player->deltaviewheight = mo->momz >> 3;
+ S_StartSound(mo, sfx_plroof);
#ifdef __WATCOMC__
- if(!useexterndriver)
- {
- mo->player->centering = true;
- }
+ if (!useexterndriver)
+ {
+ mo->player->centering = true;
+ }
#else
- mo->player->centering = true;
+ mo->player->centering = true;
#endif
- }
- mo->momz = 0;
- }
- if(mo->flags&MF_SKULLFLY)
- { // The skull slammed into something
- mo->momz = -mo->momz;
- }
- if(mo->info->crashstate && (mo->flags&MF_CORPSE))
- {
- P_SetMobjState(mo, mo->info->crashstate);
- return;
- }
- }
- else if(mo->flags2&MF2_LOGRAV)
- {
- if(mo->momz == 0)
- mo->momz = -(GRAVITY>>3)*2;
- else
- mo->momz -= GRAVITY>>3;
- }
- else if (! (mo->flags & MF_NOGRAVITY) )
- {
- if (mo->momz == 0)
- mo->momz = -GRAVITY*2;
- else
- mo->momz -= GRAVITY;
- }
+ }
+ mo->momz = 0;
+ }
+ if (mo->flags & MF_SKULLFLY)
+ { // The skull slammed into something
+ mo->momz = -mo->momz;
+ }
+ if (mo->info->crashstate && (mo->flags & MF_CORPSE))
+ {
+ P_SetMobjState(mo, mo->info->crashstate);
+ return;
+ }
+ }
+ else if (mo->flags2 & MF2_LOGRAV)
+ {
+ if (mo->momz == 0)
+ mo->momz = -(GRAVITY >> 3) * 2;
+ else
+ mo->momz -= GRAVITY >> 3;
+ }
+ else if (!(mo->flags & MF_NOGRAVITY))
+ {
+ if (mo->momz == 0)
+ mo->momz = -GRAVITY * 2;
+ else
+ mo->momz -= GRAVITY;
+ }
- if (mo->z + mo->height > mo->ceilingz)
- { // hit the ceiling
- if (mo->momz > 0)
- mo->momz = 0;
- mo->z = mo->ceilingz - mo->height;
- if (mo->flags & MF_SKULLFLY)
- { // the skull slammed into something
- mo->momz = -mo->momz;
- }
- if (mo->flags & MF_MISSILE)
- {
- if(mo->subsector->sector->ceilingpic == skyflatnum)
- {
- if(mo->type == MT_BLOODYSKULL)
- {
- mo->momx = mo->momy = 0;
- mo->momz = -FRACUNIT;
- }
- else
- {
- P_RemoveMobj(mo);
- }
- return;
- }
- P_ExplodeMissile(mo);
- return;
- }
- }
-}
+ if (mo->z + mo->height > mo->ceilingz)
+ { // hit the ceiling
+ if (mo->momz > 0)
+ mo->momz = 0;
+ mo->z = mo->ceilingz - mo->height;
+ if (mo->flags & MF_SKULLFLY)
+ { // the skull slammed into something
+ mo->momz = -mo->momz;
+ }
+ if (mo->flags & MF_MISSILE)
+ {
+ if (mo->subsector->sector->ceilingpic == skyflatnum)
+ {
+ if (mo->type == MT_BLOODYSKULL)
+ {
+ mo->momx = mo->momy = 0;
+ mo->momz = -FRACUNIT;
+ }
+ else
+ {
+ P_RemoveMobj(mo);
+ }
+ return;
+ }
+ P_ExplodeMissile(mo);
+ return;
+ }
+ }
+}
/*
@@ -593,49 +625,50 @@
================
*/
-void P_NightmareRespawn (mobj_t *mobj)
+void P_NightmareRespawn(mobj_t * mobj)
{
- fixed_t x,y,z;
- subsector_t *ss;
- mobj_t *mo;
- mapthing_t *mthing;
-
- x = mobj->spawnpoint.x << FRACBITS;
- y = mobj->spawnpoint.y << FRACBITS;
-
- if (!P_CheckPosition (mobj, x, y) )
- return; // somthing is occupying it's position
+ fixed_t x, y, z;
+ subsector_t *ss;
+ mobj_t *mo;
+ mapthing_t *mthing;
+ x = mobj->spawnpoint.x << FRACBITS;
+ y = mobj->spawnpoint.y << FRACBITS;
+ if (!P_CheckPosition(mobj, x, y))
+ return; // somthing is occupying it's position
+
+
// spawn a teleport fog at old spot
- mo = P_SpawnMobj (mobj->x, mobj->y,
- mobj->subsector->sector->floorheight+TELEFOGHEIGHT, MT_TFOG);
- S_StartSound (mo, sfx_telept);
+ mo = P_SpawnMobj(mobj->x, mobj->y,
+ mobj->subsector->sector->floorheight + TELEFOGHEIGHT,
+ MT_TFOG);
+ S_StartSound(mo, sfx_telept);
// spawn a teleport fog at the new spot
- ss = R_PointInSubsector (x,y);
- mo = P_SpawnMobj (x, y, ss->sector->floorheight+TELEFOGHEIGHT, MT_TFOG);
- S_StartSound (mo, sfx_telept);
+ ss = R_PointInSubsector(x, y);
+ mo = P_SpawnMobj(x, y, ss->sector->floorheight + TELEFOGHEIGHT, MT_TFOG);
+ S_StartSound(mo, sfx_telept);
// spawn the new monster
- mthing = &mobj->spawnpoint;
-
+ mthing = &mobj->spawnpoint;
+
// spawn it
- if (mobj->info->flags & MF_SPAWNCEILING)
- z = ONCEILINGZ;
- else
- z = ONFLOORZ;
- mo = P_SpawnMobj (x,y,z, mobj->type);
- mo->spawnpoint = mobj->spawnpoint;
- mo->angle = ANG45 * (mthing->angle/45);
- if (mthing->options & MTF_AMBUSH)
- mo->flags |= MF_AMBUSH;
+ if (mobj->info->flags & MF_SPAWNCEILING)
+ z = ONCEILINGZ;
+ else
+ z = ONFLOORZ;
+ mo = P_SpawnMobj(x, y, z, mobj->type);
+ mo->spawnpoint = mobj->spawnpoint;
+ mo->angle = ANG45 * (mthing->angle / 45);
+ if (mthing->options & MTF_AMBUSH)
+ mo->flags |= MF_AMBUSH;
- mo->reactiontime = 18;
-
+ mo->reactiontime = 18;
+
// remove the old monster
- P_RemoveMobj (mobj);
+ P_RemoveMobj(mobj);
}
//----------------------------------------------------------------------------
@@ -646,71 +679,70 @@
//
//----------------------------------------------------------------------------
-void P_BlasterMobjThinker(mobj_t *mobj)
+void P_BlasterMobjThinker(mobj_t * mobj)
{
- int i;
- fixed_t xfrac;
- fixed_t yfrac;
- fixed_t zfrac;
- fixed_t z;
- boolean changexy;
+ int i;
+ fixed_t xfrac;
+ fixed_t yfrac;
+ fixed_t zfrac;
+ fixed_t z;
+ boolean changexy;
- // Handle movement
- if(mobj->momx || mobj->momy ||
- (mobj->z != mobj->floorz) || mobj->momz)
- {
- xfrac = mobj->momx>>3;
- yfrac = mobj->momy>>3;
- zfrac = mobj->momz>>3;
- changexy = xfrac || yfrac;
- for(i = 0; i < 8; i++)
- {
- if(changexy)
- {
- if(!P_TryMove(mobj, mobj->x+xfrac, mobj->y+yfrac))
- { // Blocked move
- P_ExplodeMissile(mobj);
- return;
- }
- }
- mobj->z += zfrac;
- if(mobj->z <= mobj->floorz)
- { // Hit the floor
- mobj->z = mobj->floorz;
- P_HitFloor(mobj);
- P_ExplodeMissile(mobj);
- return;
- }
- if(mobj->z+mobj->height > mobj->ceilingz)
- { // Hit the ceiling
- mobj->z = mobj->ceilingz-mobj->height;
- P_ExplodeMissile(mobj);
- return;
- }
- if(changexy && (P_Random() < 64))
- {
- z = mobj->z-8*FRACUNIT;
- if(z < mobj->floorz)
- {
- z = mobj->floorz;
- }
- P_SpawnMobj(mobj->x, mobj->y, z, MT_BLASTERSMOKE);
- }
- }
- }
- // Advance the state
- if(mobj->tics != -1)
- {
- mobj->tics--;
- while(!mobj->tics)
- {
- if(!P_SetMobjState(mobj, mobj->state->nextstate))
- { // mobj was removed
- return;
- }
- }
- }
-}
+ // Handle movement
+ if (mobj->momx || mobj->momy || (mobj->z != mobj->floorz) || mobj->momz)
+ {
+ xfrac = mobj->momx >> 3;
+ yfrac = mobj->momy >> 3;
+ zfrac = mobj->momz >> 3;
+ changexy = xfrac || yfrac;
+ for (i = 0; i < 8; i++)
+ {
+ if (changexy)
+ {
+ if (!P_TryMove(mobj, mobj->x + xfrac, mobj->y + yfrac))
+ { // Blocked move
+ P_ExplodeMissile(mobj);
+ return;
+ }
+ }
+ mobj->z += zfrac;
+ if (mobj->z <= mobj->floorz)
+ { // Hit the floor
+ mobj->z = mobj->floorz;
+ P_HitFloor(mobj);
+ P_ExplodeMissile(mobj);
+ return;
+ }
+ if (mobj->z + mobj->height > mobj->ceilingz)
+ { // Hit the ceiling
+ mobj->z = mobj->ceilingz - mobj->height;
+ P_ExplodeMissile(mobj);
+ return;
+ }
+ if (changexy && (P_Random() < 64))
+ {
+ z = mobj->z - 8 * FRACUNIT;
+ if (z < mobj->floorz)
+ {
+ z = mobj->floorz;
+ }
+ P_SpawnMobj(mobj->x, mobj->y, z, MT_BLASTERSMOKE);
+ }
+ }
+ }
+ // Advance the state
+ if (mobj->tics != -1)
+ {
+ mobj->tics--;
+ while (!mobj->tics)
+ {
+ if (!P_SetMobjState(mobj, mobj->state->nextstate))
+ { // mobj was removed
+ return;
+ }
+ }
+ }
+}
//----------------------------------------------------------------------------
//
@@ -718,106 +750,107 @@
//
//----------------------------------------------------------------------------
-void P_MobjThinker(mobj_t *mobj)
+void P_MobjThinker(mobj_t * mobj)
{
- mobj_t *onmo;
-
- // Handle X and Y momentums
- if(mobj->momx || mobj->momy || (mobj->flags&MF_SKULLFLY))
- {
- P_XYMovement(mobj);
- if(mobj->thinker.function == (think_t)-1)
- { // mobj was removed
- return;
- }
- }
- if(mobj->flags2&MF2_FLOATBOB)
- { // Floating item bobbing motion
- mobj->z = mobj->floorz+FloatBobOffsets[(mobj->health++)&63];
- }
- else if((mobj->z != mobj->floorz) || mobj->momz)
- { // Handle Z momentum and gravity
- if(mobj->flags2&MF2_PASSMOBJ)
- {
- if(!(onmo = P_CheckOnmobj(mobj)))
- {
- P_ZMovement(mobj);
- }
- else
- {
- if(mobj->player && mobj->momz < 0)
- {
- mobj->flags2 |= MF2_ONMOBJ;
- mobj->momz = 0;
- }
- if(mobj->player && (onmo->player || onmo->type == MT_POD))
- {
- mobj->momx = onmo->momx;
- mobj->momy = onmo->momy;
- if(onmo->z < onmo->floorz)
- {
- mobj->z += onmo->floorz-onmo->z;
- if(onmo->player)
- {
- onmo->player->viewheight -= onmo->floorz-onmo->z;
- onmo->player->deltaviewheight = (VIEWHEIGHT-
- onmo->player->viewheight)>>3;
- }
- onmo->z = onmo->floorz;
- }
- }
- }
- }
- else
- {
- P_ZMovement(mobj);
- }
- if(mobj->thinker.function == (think_t)-1)
- { // mobj was removed
- return;
- }
- }
+ mobj_t *onmo;
+ // Handle X and Y momentums
+ if (mobj->momx || mobj->momy || (mobj->flags & MF_SKULLFLY))
+ {
+ P_XYMovement(mobj);
+ if (mobj->thinker.function == (think_t) - 1)
+ { // mobj was removed
+ return;
+ }
+ }
+ if (mobj->flags2 & MF2_FLOATBOB)
+ { // Floating item bobbing motion
+ mobj->z = mobj->floorz + FloatBobOffsets[(mobj->health++) & 63];
+ }
+ else if ((mobj->z != mobj->floorz) || mobj->momz)
+ { // Handle Z momentum and gravity
+ if (mobj->flags2 & MF2_PASSMOBJ)
+ {
+ if (!(onmo = P_CheckOnmobj(mobj)))
+ {
+ P_ZMovement(mobj);
+ }
+ else
+ {
+ if (mobj->player && mobj->momz < 0)
+ {
+ mobj->flags2 |= MF2_ONMOBJ;
+ mobj->momz = 0;
+ }
+ if (mobj->player && (onmo->player || onmo->type == MT_POD))
+ {
+ mobj->momx = onmo->momx;
+ mobj->momy = onmo->momy;
+ if (onmo->z < onmo->floorz)
+ {
+ mobj->z += onmo->floorz - onmo->z;
+ if (onmo->player)
+ {
+ onmo->player->viewheight -=
+ onmo->floorz - onmo->z;
+ onmo->player->deltaviewheight =
+ (VIEWHEIGHT - onmo->player->viewheight) >> 3;
+ }
+ onmo->z = onmo->floorz;
+ }
+ }
+ }
+ }
+ else
+ {
+ P_ZMovement(mobj);
+ }
+ if (mobj->thinker.function == (think_t) - 1)
+ { // mobj was removed
+ return;
+ }
+ }
+
//
// cycle through states, calling action functions at transitions
//
- if(mobj->tics != -1)
- {
- mobj->tics--;
- // you can cycle through multiple states in a tic
- while(!mobj->tics)
- {
- if(!P_SetMobjState(mobj, mobj->state->nextstate))
- { // mobj was removed
- return;
- }
- }
- }
- else
- { // Check for monster respawn
- if(!(mobj->flags&MF_COUNTKILL))
- {
- return;
- }
- if(!respawnmonsters)
- {
- return;
- }
- mobj->movecount++;
- if(mobj->movecount < 12*35)
- {
- return;
- }
- if(leveltime&31)
- {
- return;
- }
- if(P_Random() > 4)
- {
- return;
- }
- P_NightmareRespawn(mobj);
- }
+ if (mobj->tics != -1)
+ {
+ mobj->tics--;
+ // you can cycle through multiple states in a tic
+ while (!mobj->tics)
+ {
+ if (!P_SetMobjState(mobj, mobj->state->nextstate))
+ { // mobj was removed
+ return;
+ }
+ }
+ }
+ else
+ { // Check for monster respawn
+ if (!(mobj->flags & MF_COUNTKILL))
+ {
+ return;
+ }
+ if (!respawnmonsters)
+ {
+ return;
+ }
+ mobj->movecount++;
+ if (mobj->movecount < 12 * 35)
+ {
+ return;
+ }
+ if (leveltime & 31)
+ {
+ return;
+ }
+ if (P_Random() > 4)
+ {
+ return;
+ }
+ P_NightmareRespawn(mobj);
+ }
}
/*
@@ -830,81 +863,83 @@
mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
{
- mobj_t *mobj;
- state_t *st;
- mobjinfo_t *info;
- fixed_t space;
+ mobj_t *mobj;
+ state_t *st;
+ mobjinfo_t *info;
+ fixed_t space;
- mobj = Z_Malloc(sizeof(*mobj), PU_LEVEL, NULL);
- memset(mobj, 0, sizeof(*mobj));
- info = &mobjinfo[type];
- mobj->type = type;
- mobj->info = info;
- mobj->x = x;
- mobj->y = y;
- mobj->radius = info->radius;
- mobj->height = info->height;
- mobj->flags = info->flags;
- mobj->flags2 = info->flags2;
- mobj->damage = info->damage;
- mobj->health = info->spawnhealth;
- if(gameskill != sk_nightmare)
- {
- mobj->reactiontime = info->reactiontime;
- }
- mobj->lastlook = P_Random()%MAXPLAYERS;
+ mobj = Z_Malloc(sizeof(*mobj), PU_LEVEL, NULL);
+ memset(mobj, 0, sizeof(*mobj));
+ info = &mobjinfo[type];
+ mobj->type = type;
+ mobj->info = info;
+ mobj->x = x;
+ mobj->y = y;
+ mobj->radius = info->radius;
+ mobj->height = info->height;
+ mobj->flags = info->flags;
+ mobj->flags2 = info->flags2;
+ mobj->damage = info->damage;
+ mobj->health = info->spawnhealth;
+ if (gameskill != sk_nightmare)
+ {
+ mobj->reactiontime = info->reactiontime;
+ }
+ mobj->lastlook = P_Random() % MAXPLAYERS;
- // Set the state, but do not use P_SetMobjState, because action
- // routines can't be called yet. If the spawnstate has an action
- // routine, it will not be called.
- st = &states[info->spawnstate];
- mobj->state = st;
- mobj->tics = st->tics;
- mobj->sprite = st->sprite;
- mobj->frame = st->frame;
+ // Set the state, but do not use P_SetMobjState, because action
+ // routines can't be called yet. If the spawnstate has an action
+ // routine, it will not be called.
+ st = &states[info->spawnstate];
+ mobj->state = st;
+ mobj->tics = st->tics;
+ mobj->sprite = st->sprite;
+ mobj->frame = st->frame;
- // Set subsector and/or block links.
- P_SetThingPosition(mobj);
- mobj->floorz = mobj->subsector->sector->floorheight;
- mobj->ceilingz = mobj->subsector->sector->ceilingheight;
- if(z == ONFLOORZ)
- {
- mobj->z = mobj->floorz;
- }
- else if(z == ONCEILINGZ)
- {
- mobj->z = mobj->ceilingz-mobj->info->height;
- }
- else if(z == FLOATRANDZ)
- {
- space = ((mobj->ceilingz)-(mobj->info->height))-mobj->floorz;
- if(space > 48*FRACUNIT)
- {
- space -= 40*FRACUNIT;
- mobj->z = ((space*P_Random())>>8)+mobj->floorz+40*FRACUNIT;
- }
- else
- {
- mobj->z = mobj->floorz;
- }
- }
- else
- {
- mobj->z = z;
- }
- if(mobj->flags2&MF2_FOOTCLIP && P_GetThingFloorType(mobj) != FLOOR_SOLID
- && mobj->floorz == mobj->subsector->sector->floorheight)
- {
- mobj->flags2 |= MF2_FEETARECLIPPED;
- }
- else
- {
- mobj->flags2 &= ~MF2_FEETARECLIPPED;
- }
+ // Set subsector and/or block links.
+ P_SetThingPosition(mobj);
+ mobj->floorz = mobj->subsector->sector->floorheight;
+ mobj->ceilingz = mobj->subsector->sector->ceilingheight;
+ if (z == ONFLOORZ)
+ {
+ mobj->z = mobj->floorz;
+ }
+ else if (z == ONCEILINGZ)
+ {
+ mobj->z = mobj->ceilingz - mobj->info->height;
+ }
+ else if (z == FLOATRANDZ)
+ {
+ space = ((mobj->ceilingz) - (mobj->info->height)) - mobj->floorz;
+ if (space > 48 * FRACUNIT)
+ {
+ space -= 40 * FRACUNIT;
+ mobj->z =
+ ((space * P_Random()) >> 8) + mobj->floorz + 40 * FRACUNIT;
+ }
+ else
+ {
+ mobj->z = mobj->floorz;
+ }
+ }
+ else
+ {
+ mobj->z = z;
+ }
+ if (mobj->flags2 & MF2_FOOTCLIP
+ && P_GetThingFloorType(mobj) != FLOOR_SOLID
+ && mobj->floorz == mobj->subsector->sector->floorheight)
+ {
+ mobj->flags2 |= MF2_FEETARECLIPPED;
+ }
+ else
+ {
+ mobj->flags2 &= ~MF2_FEETARECLIPPED;
+ }
- mobj->thinker.function = P_MobjThinker;
- P_AddThinker(&mobj->thinker);
- return(mobj);
+ mobj->thinker.function = P_MobjThinker;
+ P_AddThinker(&mobj->thinker);
+ return (mobj);
}
/*
@@ -915,14 +950,14 @@
===============
*/
-void P_RemoveMobj(mobj_t *mobj)
+void P_RemoveMobj(mobj_t * mobj)
{
// unlink from sector and block lists
- P_UnsetThingPosition (mobj);
+ P_UnsetThingPosition(mobj);
// stop any playing sound
- S_StopSound(mobj);
+ S_StopSound(mobj);
// free block
- P_RemoveThinker((thinker_t *)mobj);
+ P_RemoveThinker((thinker_t *) mobj);
}
//=============================================================================
@@ -938,63 +973,63 @@
============
*/
-void P_SpawnPlayer(mapthing_t *mthing)
+void P_SpawnPlayer(mapthing_t * mthing)
{
- player_t *p;
- fixed_t x,y,z;
- mobj_t *mobj;
- int i;
- extern int playerkeys;
+ player_t *p;
+ fixed_t x, y, z;
+ mobj_t *mobj;
+ int i;
+ extern int playerkeys;
- if (!playeringame[mthing->type-1])
- return; // not playing
-
- p = &players[mthing->type-1];
+ if (!playeringame[mthing->type - 1])
+ return; // not playing
- if (p->playerstate == PST_REBORN)
- G_PlayerReborn (mthing->type-1);
+ p = &players[mthing->type - 1];
- x = mthing->x << FRACBITS;
- y = mthing->y << FRACBITS;
+ if (p->playerstate == PST_REBORN)
+ G_PlayerReborn(mthing->type - 1);
- z = ONFLOORZ;
- mobj = P_SpawnMobj (x,y,z, MT_PLAYER);
- if (mthing->type > 1) // set color translations for player sprites
- mobj->flags |= (mthing->type-1)<<MF_TRANSSHIFT;
-
- mobj->angle = ANG45 * (mthing->angle/45);
- mobj->player = p;
- mobj->health = p->health;
- p->mo = mobj;
- p->playerstate = PST_LIVE;
- p->refire = 0;
- p->message = NULL;
- p->damagecount = 0;
- p->bonuscount = 0;
- p->chickenTics = 0;
- p->rain1 = NULL;
- p->rain2 = NULL;
- p->extralight = 0;
- p->fixedcolormap = 0;
- p->viewheight = VIEWHEIGHT;
- P_SetupPsprites(p); // setup gun psprite
- if(deathmatch)
- { // Give all keys in death match mode
- for(i = 0; i < NUMKEYS; i++)
- {
- p->keys[i] = true;
- if(p == &players[consoleplayer])
- {
- playerkeys = 7;
- UpdateState |= I_STATBAR;
- }
- }
- }
- else if(p == &players[consoleplayer])
- {
- playerkeys = 0;
- UpdateState |= I_STATBAR;
- }
+ x = mthing->x << FRACBITS;
+ y = mthing->y << FRACBITS;
+
+ z = ONFLOORZ;
+ mobj = P_SpawnMobj(x, y, z, MT_PLAYER);
+ if (mthing->type > 1) // set color translations for player sprites
+ mobj->flags |= (mthing->type - 1) << MF_TRANSSHIFT;
+
+ mobj->angle = ANG45 * (mthing->angle / 45);
+ mobj->player = p;
+ mobj->health = p->health;
+ p->mo = mobj;
+ p->playerstate = PST_LIVE;
+ p->refire = 0;
+ p->message = NULL;
+ p->damagecount = 0;
+ p->bonuscount = 0;
+ p->chickenTics = 0;
+ p->rain1 = NULL;
+ p->rain2 = NULL;
+ p->extralight = 0;
+ p->fixedcolormap = 0;
+ p->viewheight = VIEWHEIGHT;
+ P_SetupPsprites(p); // setup gun psprite
+ if (deathmatch)
+ { // Give all keys in death match mode
+ for (i = 0; i < NUMKEYS; i++)
+ {
+ p->keys[i] = true;
+ if (p == &players[consoleplayer])
+ {
+ playerkeys = 7;
+ UpdateState |= I_STATBAR;
+ }
+ }
+ }
+ else if (p == &players[consoleplayer])
+ {
+ playerkeys = 0;
+ UpdateState |= I_STATBAR;
+ }
}
//----------------------------------------------------------------------------
@@ -1005,147 +1040,147 @@
//
//----------------------------------------------------------------------------
-void P_SpawnMapThing(mapthing_t *mthing)
+void P_SpawnMapThing(mapthing_t * mthing)
{
- int i;
- int bit;
- mobj_t *mobj;
- fixed_t x, y, z;
+ int i;
+ int bit;
+ mobj_t *mobj;
+ fixed_t x, y, z;
// count deathmatch start positions
- if(mthing->type == 11)
- {
- if(deathmatch_p < &deathmatchstarts[10])
- {
- memcpy(deathmatch_p, mthing, sizeof(*mthing));
- deathmatch_p++;
- }
- return;
- }
-
+ if (mthing->type == 11)
+ {
+ if (deathmatch_p < &deathmatchstarts[10])
+ {
+ memcpy(deathmatch_p, mthing, sizeof(*mthing));
+ deathmatch_p++;
+ }
+ return;
+ }
+
// check for players specially
- if(mthing->type <= 4)
- {
- // save spots for respawning in network games
- playerstarts[mthing->type-1] = *mthing;
- if(!deathmatch)
- {
- P_SpawnPlayer(mthing);
- }
- return;
- }
+ if (mthing->type <= 4)
+ {
+ // save spots for respawning in network games
+ playerstarts[mthing->type - 1] = *mthing;
+ if (!deathmatch)
+ {
+ P_SpawnPlayer(mthing);
+ }
+ return;
+ }
- // Ambient sound sequences
- if(mthing->type >= 1200 && mthing->type < 1300)
- {
- P_AddAmbientSfx(mthing->type-1200);
- return;
- }
+ // Ambient sound sequences
+ if (mthing->type >= 1200 && mthing->type < 1300)
+ {
+ P_AddAmbientSfx(mthing->type - 1200);
+ return;
+ }
- // Check for boss spots
- if(mthing->type == 56) // Monster_BossSpot
- {
- P_AddBossSpot(mthing->x<<FRACBITS, mthing->y<<FRACBITS,
- ANG45*(mthing->angle/45));
- return;
- }
+ // Check for boss spots
+ if (mthing->type == 56) // Monster_BossSpot
+ {
+ P_AddBossSpot(mthing->x << FRACBITS, mthing->y << FRACBITS,
+ ANG45 * (mthing->angle / 45));
+ return;
+ }
// check for apropriate skill level
- if (!netgame && (mthing->options & 16) )
- return;
-
- if (gameskill == sk_baby)
- bit = 1;
- else if (gameskill == sk_nightmare)
- bit = 4;
- else
- bit = 1<<(gameskill-1);
- if (!(mthing->options & bit) )
- return;
-
+ if (!netgame && (mthing->options & 16))
+ return;
+
+ if (gameskill == sk_baby)
+ bit = 1;
+ else if (gameskill == sk_nightmare)
+ bit = 4;
+ else
+ bit = 1 << (gameskill - 1);
+ if (!(mthing->options & bit))
+ return;
+
// find which type to spawn
- for (i=0 ; i< NUMMOBJTYPES ; i++)
- if (mthing->type == mobjinfo[i].doomednum)
- break;
-
- if (i==NUMMOBJTYPES)
- I_Error ("P_SpawnMapThing: Unknown type %i at (%i, %i)",mthing->type
- , mthing->x, mthing->y);
-
+ for (i = 0; i < NUMMOBJTYPES; i++)
+ if (mthing->type == mobjinfo[i].doomednum)
+ break;
+
+ if (i == NUMMOBJTYPES)
+ I_Error("P_SpawnMapThing: Unknown type %i at (%i, %i)", mthing->type,
+ mthing->x, mthing->y);
+
// don't spawn keys and players in deathmatch
- if (deathmatch && mobjinfo[i].flags & MF_NOTDMATCH)
- return;
-
+ if (deathmatch && mobjinfo[i].flags & MF_NOTDMATCH)
+ return;
+
// don't spawn any monsters if -nomonsters
- if (nomonsters && (mobjinfo[i].flags & MF_COUNTKILL) )
- return;
+ if (nomonsters && (mobjinfo[i].flags & MF_COUNTKILL))
+ return;
// spawn it
- switch(i)
- { // Special stuff
- case MT_WSKULLROD:
- case MT_WPHOENIXROD:
- case MT_AMSKRDWIMPY:
- case MT_AMSKRDHEFTY:
- case MT_AMPHRDWIMPY:
- case MT_AMPHRDHEFTY:
- case MT_AMMACEWIMPY:
- case MT_AMMACEHEFTY:
- case MT_ARTISUPERHEAL:
- case MT_ARTITELEPORT:
- case MT_ITEMSHIELD2:
- if(shareware)
- { // Don't place on map in shareware version
- return;
- }
- break;
- case MT_WMACE:
- if(!shareware)
- { // Put in the mace spot list
- P_AddMaceSpot(mthing);
- return;
- }
- return;
- default:
- break;
- }
- x = mthing->x<<FRACBITS;
- y = mthing->y<<FRACBITS;
- if(mobjinfo[i].flags&MF_SPAWNCEILING)
- {
- z = ONCEILINGZ;
- }
- else if(mobjinfo[i].flags2&MF2_SPAWNFLOAT)
- {
- z = FLOATRANDZ;
- }
- else
- {
- z = ONFLOORZ;
- }
- mobj = P_SpawnMobj(x, y, z, i);
- if(mobj->flags2&MF2_FLOATBOB)
- { // Seed random starting index for bobbing motion
- mobj->health = P_Random();
- }
- if(mobj->tics > 0)
- {
- mobj->tics = 1+(P_Random()%mobj->tics);
- }
- if(mobj->flags&MF_COUNTKILL)
- {
- totalkills++;
- mobj->spawnpoint = *mthing;
- }
- if(mobj->flags&MF_COUNTITEM)
- {
- totalitems++;
- }
- mobj->angle = ANG45*(mthing->angle/45);
- if(mthing->options&MTF_AMBUSH)
- {
- mobj->flags |= MF_AMBUSH;
- }
+ switch (i)
+ { // Special stuff
+ case MT_WSKULLROD:
+ case MT_WPHOENIXROD:
+ case MT_AMSKRDWIMPY:
+ case MT_AMSKRDHEFTY:
+ case MT_AMPHRDWIMPY:
+ case MT_AMPHRDHEFTY:
+ case MT_AMMACEWIMPY:
+ case MT_AMMACEHEFTY:
+ case MT_ARTISUPERHEAL:
+ case MT_ARTITELEPORT:
+ case MT_ITEMSHIELD2:
+ if (shareware)
+ { // Don't place on map in shareware version
+ return;
+ }
+ break;
+ case MT_WMACE:
+ if (!shareware)
+ { // Put in the mace spot list
+ P_AddMaceSpot(mthing);
+ return;
+ }
+ return;
+ default:
+ break;
+ }
+ x = mthing->x << FRACBITS;
+ y = mthing->y << FRACBITS;
+ if (mobjinfo[i].flags & MF_SPAWNCEILING)
+ {
+ z = ONCEILINGZ;
+ }
+ else if (mobjinfo[i].flags2 & MF2_SPAWNFLOAT)
+ {
+ z = FLOATRANDZ;
+ }
+ else
+ {
+ z = ONFLOORZ;
+ }
+ mobj = P_SpawnMobj(x, y, z, i);
+ if (mobj->flags2 & MF2_FLOATBOB)
+ { // Seed random starting index for bobbing motion
+ mobj->health = P_Random();
+ }
+ if (mobj->tics > 0)
+ {
+ mobj->tics = 1 + (P_Random() % mobj->tics);
+ }
+ if (mobj->flags & MF_COUNTKILL)
+ {
+ totalkills++;
+ mobj->spawnpoint = *mthing;
+ }
+ if (mobj->flags & MF_COUNTITEM)
+ {
+ totalitems++;
+ }
+ mobj->angle = ANG45 * (mthing->angle / 45);
+ if (mthing->options & MTF_AMBUSH)
+ {
+ mobj->flags |= MF_AMBUSH;
+ }
}
/*
@@ -1166,26 +1201,26 @@
void P_SpawnPuff(fixed_t x, fixed_t y, fixed_t z)
{
- mobj_t *puff;
+ mobj_t *puff;
- z += ((P_Random()-P_Random())<<10);
- puff = P_SpawnMobj(x, y, z, PuffType);
- if(puff->info->attacksound)
- {
- S_StartSound(puff, puff->info->attacksound);
- }
- switch(PuffType)
- {
- case MT_BEAKPUFF:
- case MT_STAFFPUFF:
- puff->momz = FRACUNIT;
- break;
- case MT_GAUNTLETPUFF1:
- case MT_GAUNTLETPUFF2:
- puff->momz = .8*FRACUNIT;
- default:
- break;
- }
+ z += ((P_Random() - P_Random()) << 10);
+ puff = P_SpawnMobj(x, y, z, PuffType);
+ if (puff->info->attacksound)
+ {
+ S_StartSound(puff, puff->info->attacksound);
+ }
+ switch (PuffType)
+ {
+ case MT_BEAKPUFF:
+ case MT_STAFFPUFF:
+ puff->momz = FRACUNIT;
+ break;
+ case MT_GAUNTLETPUFF1:
+ case MT_GAUNTLETPUFF2:
+ puff->momz = .8 * FRACUNIT;
+ default:
+ break;
+ }
}
/*
@@ -1219,15 +1254,15 @@
//
//---------------------------------------------------------------------------
-void P_BloodSplatter(fixed_t x, fixed_t y, fixed_t z, mobj_t *originator)
+void P_BloodSplatter(fixed_t x, fixed_t y, fixed_t z, mobj_t * originator)
{
- mobj_t *mo;
+ mobj_t *mo;
- mo = P_SpawnMobj(x, y, z, MT_BLOODSPLATTER);
- mo->target = originator;
- mo->momx = (P_Random()-P_Random())<<9;
- mo->momy = (P_Random()-P_Random())<<9;
- mo->momz = FRACUNIT*2;
+ mo = P_SpawnMobj(x, y, z, MT_BLOODSPLATTER);
+ mo->target = originator;
+ mo->momx = (P_Random() - P_Random()) << 9;
+ mo->momy = (P_Random() - P_Random()) << 9;
+ mo->momz = FRACUNIT * 2;
}
//---------------------------------------------------------------------------
@@ -1236,19 +1271,19 @@
//
//---------------------------------------------------------------------------
-void P_RipperBlood(mobj_t *mo)
+void P_RipperBlood(mobj_t * mo)
{
- mobj_t *th;
- fixed_t x, y, z;
+ mobj_t *th;
+ fixed_t x, y, z;
- x = mo->x+((P_Random()-P_Random())<<12);
- y = mo->y+((P_Random()-P_Random())<<12);
- z = mo->z+((P_Random()-P_Random())<<12);
- th = P_SpawnMobj(x, y, z, MT_BLOOD);
- th->flags |= MF_NOGRAVITY;
- th->momx = mo->momx>>1;
- th->momy = mo->momy>>1;
- th->tics += P_Random()&3;
+ x = mo->x + ((P_Random() - P_Random()) << 12);
+ y = mo->y + ((P_Random() - P_Random()) << 12);
+ z = mo->z + ((P_Random() - P_Random()) << 12);
+ th = P_SpawnMobj(x, y, z, MT_BLOOD);
+ th->flags |= MF_NOGRAVITY;
+ th->momx = mo->momx >> 1;
+ th->momy = mo->momy >> 1;
+ th->tics += P_Random() & 3;
}
//---------------------------------------------------------------------------
@@ -1257,9 +1292,9 @@
//
//---------------------------------------------------------------------------
-int P_GetThingFloorType(mobj_t *thing)
+int P_GetThingFloorType(mobj_t * thing)
{
- return(TerrainTypes[thing->subsector->sector->floorpic]);
+ return (TerrainTypes[thing->subsector->sector->floorpic]);
/*
if(thing->subsector->sector->floorpic
== W_GetNumForName("FLTWAWA1")-firstflat)
@@ -1279,41 +1314,41 @@
//
//---------------------------------------------------------------------------
-int P_HitFloor(mobj_t *thing)
+int P_HitFloor(mobj_t * thing)
{
- mobj_t *mo;
+ mobj_t *mo;
- if(thing->floorz != thing->subsector->sector->floorheight)
- { // don't splash if landing on the edge above water/lava/etc....
- return(FLOOR_SOLID);
- }
- switch(P_GetThingFloorType(thing))
- {
- case FLOOR_WATER:
- P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_SPLASHBASE);
- mo = P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_SPLASH);
- mo->target = thing;
- mo->momx = (P_Random()-P_Random())<<8;
- mo->momy = (P_Random()-P_Random())<<8;
- mo->momz = 2*FRACUNIT+(P_Random()<<8);
- S_StartSound(mo, sfx_gloop);
- return(FLOOR_WATER);
- case FLOOR_LAVA:
- P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_LAVASPLASH);
- mo = P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_LAVASMOKE);
- mo->momz = FRACUNIT+(P_Random()<<7);
- S_StartSound(mo, sfx_burn);
- return(FLOOR_LAVA);
- case FLOOR_SLUDGE:
- P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_SLUDGESPLASH);
- mo = P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_SLUDGECHUNK);
- mo->target = thing;
- mo->momx = (P_Random()-P_Random())<<8;
- mo->momy = (P_Random()-P_Random())<<8;
- mo->momz = FRACUNIT+(P_Random()<<8);
- return(FLOOR_SLUDGE);
- }
- return(FLOOR_SOLID);
+ if (thing->floorz != thing->subsector->sector->floorheight)
+ { // don't splash if landing on the edge above water/lava/etc....
+ return (FLOOR_SOLID);
+ }
+ switch (P_GetThingFloorType(thing))
+ {
+ case FLOOR_WATER:
+ P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_SPLASHBASE);
+ mo = P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_SPLASH);
+ mo->target = thing;
+ mo->momx = (P_Random() - P_Random()) << 8;
+ mo->momy = (P_Random() - P_Random()) << 8;
+ mo->momz = 2 * FRACUNIT + (P_Random() << 8);
+ S_StartSound(mo, sfx_gloop);
+ return (FLOOR_WATER);
+ case FLOOR_LAVA:
+ P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_LAVASPLASH);
+ mo = P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_LAVASMOKE);
+ mo->momz = FRACUNIT + (P_Random() << 7);
+ S_StartSound(mo, sfx_burn);
+ return (FLOOR_LAVA);
+ case FLOOR_SLUDGE:
+ P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_SLUDGESPLASH);
+ mo = P_SpawnMobj(thing->x, thing->y, ONFLOORZ, MT_SLUDGECHUNK);
+ mo->target = thing;
+ mo->momx = (P_Random() - P_Random()) << 8;
+ mo->momy = (P_Random() - P_Random()) << 8;
+ mo->momz = FRACUNIT + (P_Random() << 8);
+ return (FLOOR_SLUDGE);
+ }
+ return (FLOOR_SOLID);
}
//---------------------------------------------------------------------------
@@ -1325,21 +1360,21 @@
//
//---------------------------------------------------------------------------
-boolean P_CheckMissileSpawn(mobj_t *missile)
+boolean P_CheckMissileSpawn(mobj_t * missile)
{
- //missile->tics -= P_Random()&3;
+ //missile->tics -= P_Random()&3;
- // move a little forward so an angle can be computed if it
- // immediately explodes
- missile->x += (missile->momx>>1);
- missile->y += (missile->momy>>1);
- missile->z += (missile->momz>>1);
- if(!P_TryMove(missile, missile->x, missile->y))
- {
- P_ExplodeMissile(missile);
- return(false);
- }
- return(true);
+ // move a little forward so an angle can be computed if it
+ // immediately explodes
+ missile->x += (missile->momx >> 1);
+ missile->y += (missile->momy >> 1);
+ missile->z += (missile->momz >> 1);
+ if (!P_TryMove(missile, missile->x, missile->y))
+ {
+ P_ExplodeMissile(missile);
+ return (false);
+ }
+ return (true);
}
//---------------------------------------------------------------------------
@@ -1351,59 +1386,59 @@
//
//---------------------------------------------------------------------------
-mobj_t *P_SpawnMissile(mobj_t *source, mobj_t *dest, mobjtype_t type)
+mobj_t *P_SpawnMissile(mobj_t * source, mobj_t * dest, mobjtype_t type)
{
- fixed_t z;
- mobj_t *th;
- angle_t an;
- int dist;
+ fixed_t z;
+ mobj_t *th;
+ angle_t an;
+ int dist;
- switch(type)
- {
- case MT_MNTRFX1: // Minotaur swing attack missile
- z = source->z+40*FRACUNIT;
- break;
- case MT_MNTRFX2: // Minotaur floor fire missile
- z = ONFLOORZ;
- break;
- case MT_SRCRFX1: // Sorcerer Demon fireball
- z = source->z+48*FRACUNIT;
- break;
- case MT_KNIGHTAXE: // Knight normal axe
- case MT_REDAXE: // Knight red power axe
- z = source->z+36*FRACUNIT;
- break;
- default:
- z = source->z+32*FRACUNIT;
- break;
- }
- if(source->flags2&MF2_FEETARECLIPPED)
- {
- z -= FOOTCLIPSIZE;
- }
- th = P_SpawnMobj(source->x, source->y, z, type);
- if(th->info->seesound)
- {
- S_StartSound(th, th->info->seesound);
- }
- th->target = source; // Originator
- an = R_PointToAngle2(source->x, source->y, dest->x, dest->y);
- if(dest->flags&MF_SHADOW)
- { // Invisible target
- an += (P_Random()-P_Random())<<21;
- }
- th->angle = an;
- an >>= ANGLETOFINESHIFT;
- th->momx = FixedMul(th->info->speed, finecosine[an]);
- th->momy = FixedMul(th->info->speed, finesine[an]);
- dist = P_AproxDistance(dest->x - source->x, dest->y - source->y);
- dist = dist/th->info->speed;
- if(dist < 1)
- {
- dist = 1;
- }
- th->momz = (dest->z-source->z)/dist;
- return(P_CheckMissileSpawn(th) ? th : NULL);
+ switch (type)
+ {
+ case MT_MNTRFX1: // Minotaur swing attack missile
+ z = source->z + 40 * FRACUNIT;
+ break;
+ case MT_MNTRFX2: // Minotaur floor fire missile
+ z = ONFLOORZ;
+ break;
+ case MT_SRCRFX1: // Sorcerer Demon fireball
+ z = source->z + 48 * FRACUNIT;
+ break;
+ case MT_KNIGHTAXE: // Knight normal axe
+ case MT_REDAXE: // Knight red power axe
+ z = source->z + 36 * FRACUNIT;
+ break;
+ default:
+ z = source->z + 32 * FRACUNIT;
+ break;
+ }
+ if (source->flags2 & MF2_FEETARECLIPPED)
+ {
+ z -= FOOTCLIPSIZE;
+ }
+ th = P_SpawnMobj(source->x, source->y, z, type);
+ if (th->info->seesound)
+ {
+ S_StartSound(th, th->info->seesound);
+ }
+ th->target = source; // Originator
+ an = R_PointToAngle2(source->x, source->y, dest->x, dest->y);
+ if (dest->flags & MF_SHADOW)
+ { // Invisible target
+ an += (P_Random() - P_Random()) << 21;
+ }
+ th->angle = an;
+ an >>= ANGLETOFINESHIFT;
+ th->momx = FixedMul(th->info->speed, finecosine[an]);
+ th->momy = FixedMul(th->info->speed, finesine[an]);
+ dist = P_AproxDistance(dest->x - source->x, dest->y - source->y);
+ dist = dist / th->info->speed;
+ if (dist < 1)
+ {
+ dist = 1;
+ }
+ th->momz = (dest->z - source->z) / dist;
+ return (P_CheckMissileSpawn(th) ? th : NULL);
}
//---------------------------------------------------------------------------
@@ -1415,43 +1450,43 @@
//
//---------------------------------------------------------------------------
-mobj_t *P_SpawnMissileAngle(mobj_t *source, mobjtype_t type,
- angle_t angle, fixed_t momz)
+mobj_t *P_SpawnMissileAngle(mobj_t * source, mobjtype_t type,
+ angle_t angle, fixed_t momz)
{
- fixed_t z;
- mobj_t *mo;
+ fixed_t z;
+ mobj_t *mo;
- switch(type)
- {
- case MT_MNTRFX1: // Minotaur swing attack missile
- z = source->z+40*FRACUNIT;
- break;
- case MT_MNTRFX2: // Minotaur floor fire missile
- z = ONFLOORZ;
- break;
- case MT_SRCRFX1: // Sorcerer Demon fireball
- z = source->z+48*FRACUNIT;
- break;
- default:
- z = source->z+32*FRACUNIT;
- break;
- }
- if(source->flags2&MF2_FEETARECLIPPED)
- {
- z -= FOOTCLIPSIZE;
- }
- mo = P_SpawnMobj(source->x, source->y, z, type);
- if(mo->info->seesound)
- {
- S_StartSound(mo, mo->info->seesound);
- }
- mo->target = source; // Originator
- mo->angle = angle;
- angle >>= ANGLETOFINESHIFT;
- mo->momx = FixedMul(mo->info->speed, finecosine[angle]);
- mo->momy = FixedMul(mo->info->speed, finesine[angle]);
- mo->momz = momz;
- return(P_CheckMissileSpawn(mo) ? mo : NULL);
+ switch (type)
+ {
+ case MT_MNTRFX1: // Minotaur swing attack missile
+ z = source->z + 40 * FRACUNIT;
+ break;
+ case MT_MNTRFX2: // Minotaur floor fire missile
+ z = ONFLOORZ;
+ break;
+ case MT_SRCRFX1: // Sorcerer Demon fireball
+ z = source->z + 48 * FRACUNIT;
+ break;
+ default:
+ z = source->z + 32 * FRACUNIT;
+ break;
+ }
+ if (source->flags2 & MF2_FEETARECLIPPED)
+ {
+ z -= FOOTCLIPSIZE;
+ }
+ mo = P_SpawnMobj(source->x, source->y, z, type);
+ if (mo->info->seesound)
+ {
+ S_StartSound(mo, mo->info->seesound);
+ }
+ mo->target = source; // Originator
+ mo->angle = angle;
+ angle >>= ANGLETOFINESHIFT;
+ mo->momx = FixedMul(mo->info->speed, finecosine[angle]);
+ mo->momy = FixedMul(mo->info->speed, finesine[angle]);
+ mo->momz = momz;
+ return (P_CheckMissileSpawn(mo) ? mo : NULL);
}
/*
@@ -1463,66 +1498,67 @@
================
*/
-mobj_t *P_SpawnPlayerMissile(mobj_t *source, mobjtype_t type)
+mobj_t *P_SpawnPlayerMissile(mobj_t * source, mobjtype_t type)
{
- angle_t an;
- fixed_t x, y, z, slope;
+ angle_t an;
+ fixed_t x, y, z, slope;
- // Try to find a target
- an = source->angle;
- slope = P_AimLineAttack(source, an, 16*64*FRACUNIT);
- if(!linetarget)
- {
- an += 1<<26;
- slope = P_AimLineAttack(source, an, 16*64*FRACUNIT);
- if(!linetarget)
- {
- an -= 2<<26;
- slope = P_AimLineAttack(source, an, 16*64*FRACUNIT);
- }
- if(!linetarget)
- {
- an = source->angle;
- slope = ((source->player->lookdir)<<FRACBITS)/173;
- }
- }
- x = source->x;
- y = source->y;
- z = source->z + 4*8*FRACUNIT+((source->player->lookdir)<<FRACBITS)/173;
- if(source->flags2&MF2_FEETARECLIPPED)
- {
- z -= FOOTCLIPSIZE;
- }
- MissileMobj = P_SpawnMobj(x, y, z, type);
- if(MissileMobj->info->seesound)
- {
- S_StartSound(MissileMobj, MissileMobj->info->seesound);
- }
- MissileMobj->target = source;
- MissileMobj->angle = an;
- MissileMobj->momx = FixedMul(MissileMobj->info->speed,
- finecosine[an>>ANGLETOFINESHIFT]);
- MissileMobj->momy = FixedMul(MissileMobj->info->speed,
- finesine[an>>ANGLETOFINESHIFT]);
- MissileMobj->momz = FixedMul(MissileMobj->info->speed, slope);
- if(MissileMobj->type == MT_BLASTERFX1)
- { // Ultra-fast ripper spawning missile
- MissileMobj->x += (MissileMobj->momx>>3);
- MissileMobj->y += (MissileMobj->momy>>3);
- MissileMobj->z += (MissileMobj->momz>>3);
- }
- else
- { // Normal missile
- MissileMobj->x += (MissileMobj->momx>>1);
- MissileMobj->y += (MissileMobj->momy>>1);
- MissileMobj->z += (MissileMobj->momz>>1);
- }
- if(!P_TryMove(MissileMobj, MissileMobj->x, MissileMobj->y))
- { // Exploded immediately
- P_ExplodeMissile(MissileMobj);
- return(NULL);
- }
- return(MissileMobj);
+ // Try to find a target
+ an = source->angle;
+ slope = P_AimLineAttack(source, an, 16 * 64 * FRACUNIT);
+ if (!linetarget)
+ {
+ an += 1 << 26;
+ slope = P_AimLineAttack(source, an, 16 * 64 * FRACUNIT);
+ if (!linetarget)
+ {
+ an -= 2 << 26;
+ slope = P_AimLineAttack(source, an, 16 * 64 * FRACUNIT);
+ }
+ if (!linetarget)
+ {
+ an = source->angle;
+ slope = ((source->player->lookdir) << FRACBITS) / 173;
+ }
+ }
+ x = source->x;
+ y = source->y;
+ z = source->z + 4 * 8 * FRACUNIT +
+ ((source->player->lookdir) << FRACBITS) / 173;
+ if (source->flags2 & MF2_FEETARECLIPPED)
+ {
+ z -= FOOTCLIPSIZE;
+ }
+ MissileMobj = P_SpawnMobj(x, y, z, type);
+ if (MissileMobj->info->seesound)
+ {
+ S_StartSound(MissileMobj, MissileMobj->info->seesound);
+ }
+ MissileMobj->target = source;
+ MissileMobj->angle = an;
+ MissileMobj->momx = FixedMul(MissileMobj->info->speed,
+ finecosine[an >> ANGLETOFINESHIFT]);
+ MissileMobj->momy = FixedMul(MissileMobj->info->speed,
+ finesine[an >> ANGLETOFINESHIFT]);
+ MissileMobj->momz = FixedMul(MissileMobj->info->speed, slope);
+ if (MissileMobj->type == MT_BLASTERFX1)
+ { // Ultra-fast ripper spawning missile
+ MissileMobj->x += (MissileMobj->momx >> 3);
+ MissileMobj->y += (MissileMobj->momy >> 3);
+ MissileMobj->z += (MissileMobj->momz >> 3);
+ }
+ else
+ { // Normal missile
+ MissileMobj->x += (MissileMobj->momx >> 1);
+ MissileMobj->y += (MissileMobj->momy >> 1);
+ MissileMobj->z += (MissileMobj->momz >> 1);
+ }
+ if (!P_TryMove(MissileMobj, MissileMobj->x, MissileMobj->y))
+ { // Exploded immediately
+ P_ExplodeMissile(MissileMobj);
+ return (NULL);
+ }
+ return (MissileMobj);
}
//---------------------------------------------------------------------------
@@ -1531,50 +1567,51 @@
//
//---------------------------------------------------------------------------
-mobj_t *P_SPMAngle(mobj_t *source, mobjtype_t type, angle_t angle)
+mobj_t *P_SPMAngle(mobj_t * source, mobjtype_t type, angle_t angle)
{
- mobj_t *th;
- angle_t an;
- fixed_t x, y, z, slope;
+ mobj_t *th;
+ angle_t an;
+ fixed_t x, y, z, slope;
//
// see which target is to be aimed at
//
- an = angle;
- slope = P_AimLineAttack (source, an, 16*64*FRACUNIT);
- if (!linetarget)
- {
- an += 1<<26;
- slope = P_AimLineAttack (source, an, 16*64*FRACUNIT);
- if (!linetarget)
- {
- an -= 2<<26;
- slope = P_AimLineAttack (source, an, 16*64*FRACUNIT);
- }
- if (!linetarget)
- {
- an = angle;
- slope = ((source->player->lookdir)<<FRACBITS)/173;
- }
- }
- x = source->x;
- y = source->y;
- z = source->z + 4*8*FRACUNIT+((source->player->lookdir)<<FRACBITS)/173;
- if(source->flags2&MF2_FEETARECLIPPED)
- {
- z -= FOOTCLIPSIZE;
- }
- th = P_SpawnMobj(x, y, z, type);
- if(th->info->seesound)
- {
- S_StartSound(th, th->info->seesound);
- }
- th->target = source;
- th->angle = an;
- th->momx = FixedMul(th->info->speed, finecosine[an>>ANGLETOFINESHIFT]);
- th->momy = FixedMul(th->info->speed, finesine[an>>ANGLETOFINESHIFT]);
- th->momz = FixedMul(th->info->speed, slope);
- return(P_CheckMissileSpawn(th) ? th : NULL);
+ an = angle;
+ slope = P_AimLineAttack(source, an, 16 * 64 * FRACUNIT);
+ if (!linetarget)
+ {
+ an += 1 << 26;
+ slope = P_AimLineAttack(source, an, 16 * 64 * FRACUNIT);
+ if (!linetarget)
+ {
+ an -= 2 << 26;
+ slope = P_AimLineAttack(source, an, 16 * 64 * FRACUNIT);
+ }
+ if (!linetarget)
+ {
+ an = angle;
+ slope = ((source->player->lookdir) << FRACBITS) / 173;
+ }
+ }
+ x = source->x;
+ y = source->y;
+ z = source->z + 4 * 8 * FRACUNIT +
+ ((source->player->lookdir) << FRACBITS) / 173;
+ if (source->flags2 & MF2_FEETARECLIPPED)
+ {
+ z -= FOOTCLIPSIZE;
+ }
+ th = P_SpawnMobj(x, y, z, type);
+ if (th->info->seesound)
+ {
+ S_StartSound(th, th->info->seesound);
+ }
+ th->target = source;
+ th->angle = an;
+ th->momx = FixedMul(th->info->speed, finecosine[an >> ANGLETOFINESHIFT]);
+ th->momy = FixedMul(th->info->speed, finesine[an >> ANGLETOFINESHIFT]);
+ th->momz = FixedMul(th->info->speed, slope);
+ return (P_CheckMissileSpawn(th) ? th : NULL);
}
//---------------------------------------------------------------------------
@@ -1583,17 +1620,17 @@
//
//---------------------------------------------------------------------------
-void A_ContMobjSound(mobj_t *actor)
+void A_ContMobjSound(mobj_t * actor)
{
- switch(actor->type)
- {
- case MT_KNIGHTAXE:
- S_StartSound(actor, sfx_kgtatk);
- break;
- case MT_MUMMYFX1:
- S_StartSound(actor, sfx_mumhed);
- break;
- default:
- break;
- }
+ switch (actor->type)
+ {
+ case MT_KNIGHTAXE:
+ S_StartSound(actor, sfx_kgtatk);
+ break;
+ case MT_MUMMYFX1:
+ S_StartSound(actor, sfx_mumhed);
+ break;
+ default:
+ break;
+ }
}
--- a/src/heretic/p_plats.c
+++ b/src/heretic/p_plats.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_plats.c
@@ -5,236 +27,236 @@
#include "P_local.h"
#include "soundst.h"
-plat_t *activeplats[MAXPLATS];
+plat_t *activeplats[MAXPLATS];
//==================================================================
//
-// Move a plat up and down
+// Move a plat up and down
//
//==================================================================
-void T_PlatRaise(plat_t *plat)
+void T_PlatRaise(plat_t * plat)
{
- result_e res;
+ result_e res;
- switch(plat->status)
- {
- case up:
- res = T_MovePlane(plat->sector,plat->speed,
- plat->high,plat->crush,0,1);
- if(!(leveltime&31))
- {
- S_StartSound((mobj_t *)&plat->sector->soundorg,
- sfx_stnmov);
- }
- if(plat->type == raiseAndChange
- || plat->type == raiseToNearestAndChange)
- {
- if(!(leveltime&7))
- {
- S_StartSound((mobj_t *)&plat->sector->soundorg,
- sfx_stnmov);
- }
- }
- if (res == crushed && (!plat->crush))
- {
- plat->count = plat->wait;
- plat->status = down;
- S_StartSound((mobj_t *)&plat->sector->soundorg, sfx_pstart);
- }
- else
- if (res == pastdest)
- {
- plat->count = plat->wait;
- plat->status = waiting;
- S_StartSound((mobj_t *)&plat->sector->soundorg, sfx_pstop);
- switch(plat->type)
- {
- case downWaitUpStay:
- P_RemoveActivePlat(plat);
- break;
- case raiseAndChange:
- P_RemoveActivePlat(plat);
- break;
- default:
- break;
- }
- }
- break;
- case down:
- res = T_MovePlane(plat->sector,plat->speed,plat->low,false,0,-1);
- if (res == pastdest)
- {
- plat->count = plat->wait;
- plat->status = waiting;
- S_StartSound((mobj_t *)&plat->sector->soundorg, sfx_pstop);
- }
- else
- {
- if(!(leveltime&31))
- {
- S_StartSound((mobj_t *)&plat->sector->soundorg,
- sfx_stnmov);
- }
- }
- break;
- case waiting:
- if (!--plat->count)
- {
- if (plat->sector->floorheight == plat->low)
- plat->status = up;
- else
- plat->status = down;
- S_StartSound((mobj_t *)&plat->sector->soundorg, sfx_pstart);
- }
- case in_stasis:
- break;
- }
-}
+ switch (plat->status)
+ {
+ case up:
+ res = T_MovePlane(plat->sector, plat->speed,
+ plat->high, plat->crush, 0, 1);
+ if (!(leveltime & 31))
+ {
+ S_StartSound((mobj_t *) & plat->sector->soundorg, sfx_stnmov);
+ }
+ if (plat->type == raiseAndChange
+ || plat->type == raiseToNearestAndChange)
+ {
+ if (!(leveltime & 7))
+ {
+ S_StartSound((mobj_t *) & plat->sector->soundorg,
+ sfx_stnmov);
+ }
+ }
+ if (res == crushed && (!plat->crush))
+ {
+ plat->count = plat->wait;
+ plat->status = down;
+ S_StartSound((mobj_t *) & plat->sector->soundorg, sfx_pstart);
+ }
+ else if (res == pastdest)
+ {
+ plat->count = plat->wait;
+ plat->status = waiting;
+ S_StartSound((mobj_t *) & plat->sector->soundorg, sfx_pstop);
+ switch (plat->type)
+ {
+ case downWaitUpStay:
+ P_RemoveActivePlat(plat);
+ break;
+ case raiseAndChange:
+ P_RemoveActivePlat(plat);
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case down:
+ res =
+ T_MovePlane(plat->sector, plat->speed, plat->low, false, 0,
+ -1);
+ if (res == pastdest)
+ {
+ plat->count = plat->wait;
+ plat->status = waiting;
+ S_StartSound((mobj_t *) & plat->sector->soundorg, sfx_pstop);
+ }
+ else
+ {
+ if (!(leveltime & 31))
+ {
+ S_StartSound((mobj_t *) & plat->sector->soundorg,
+ sfx_stnmov);
+ }
+ }
+ break;
+ case waiting:
+ if (!--plat->count)
+ {
+ if (plat->sector->floorheight == plat->low)
+ plat->status = up;
+ else
+ plat->status = down;
+ S_StartSound((mobj_t *) & plat->sector->soundorg, sfx_pstart);
+ }
+ case in_stasis:
+ break;
+ }
+}
//==================================================================
//
-// Do Platforms
-// "amount" is only used for SOME platforms.
+// Do Platforms
+// "amount" is only used for SOME platforms.
//
//==================================================================
-int EV_DoPlat(line_t *line,plattype_e type,int amount)
+int EV_DoPlat(line_t * line, plattype_e type, int amount)
{
- plat_t *plat;
- int secnum;
- int rtn;
- sector_t *sec;
-
- secnum = -1;
- rtn = 0;
-
- //
- // Activate all <type> plats that are in_stasis
- //
- switch(type)
- {
- case perpetualRaise:
- P_ActivateInStasis(line->tag);
- break;
- default:
- break;
- }
-
- while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
- {
- sec = §ors[secnum];
- if (sec->specialdata)
- continue;
-
- //
- // Find lowest & highest floors around sector
- //
- rtn = 1;
- plat = Z_Malloc( sizeof(*plat), PU_LEVSPEC, 0);
- P_AddThinker(&plat->thinker);
-
- plat->type = type;
- plat->sector = sec;
- plat->sector->specialdata = plat;
- plat->thinker.function = T_PlatRaise;
- plat->crush = false;
- plat->tag = line->tag;
- switch(type)
- {
- case raiseToNearestAndChange:
- plat->speed = PLATSPEED/2;
- sec->floorpic = sides[line->sidenum[0]].sector->floorpic;
- plat->high = P_FindNextHighestFloor(sec,sec->floorheight);
- plat->wait = 0;
- plat->status = up;
- sec->special = 0; // NO MORE DAMAGE, IF APPLICABLE
- S_StartSound((mobj_t *)&sec->soundorg, sfx_stnmov);
- break;
- case raiseAndChange:
- plat->speed = PLATSPEED/2;
- sec->floorpic = sides[line->sidenum[0]].sector->floorpic;
- plat->high = sec->floorheight + amount*FRACUNIT;
- plat->wait = 0;
- plat->status = up;
- S_StartSound((mobj_t *)&sec->soundorg, sfx_stnmov);
- break;
- case downWaitUpStay:
- plat->speed = PLATSPEED * 4;
- plat->low = P_FindLowestFloorSurrounding(sec);
- if (plat->low > sec->floorheight)
- plat->low = sec->floorheight;
- plat->high = sec->floorheight;
- plat->wait = 35*PLATWAIT;
- plat->status = down;
- S_StartSound((mobj_t *)&sec->soundorg, sfx_pstart);
- break;
- case perpetualRaise:
- plat->speed = PLATSPEED;
- plat->low = P_FindLowestFloorSurrounding(sec);
- if (plat->low > sec->floorheight)
- plat->low = sec->floorheight;
- plat->high = P_FindHighestFloorSurrounding(sec);
- if (plat->high < sec->floorheight)
- plat->high = sec->floorheight;
- plat->wait = 35*PLATWAIT;
- plat->status = P_Random()&1;
- S_StartSound((mobj_t *)&sec->soundorg, sfx_pstart);
- break;
- }
- P_AddActivePlat(plat);
- }
- return rtn;
+ plat_t *plat;
+ int secnum;
+ int rtn;
+ sector_t *sec;
+
+ secnum = -1;
+ rtn = 0;
+
+ //
+ // Activate all <type> plats that are in_stasis
+ //
+ switch (type)
+ {
+ case perpetualRaise:
+ P_ActivateInStasis(line->tag);
+ break;
+ default:
+ break;
+ }
+
+ while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0)
+ {
+ sec = §ors[secnum];
+ if (sec->specialdata)
+ continue;
+
+ //
+ // Find lowest & highest floors around sector
+ //
+ rtn = 1;
+ plat = Z_Malloc(sizeof(*plat), PU_LEVSPEC, 0);
+ P_AddThinker(&plat->thinker);
+
+ plat->type = type;
+ plat->sector = sec;
+ plat->sector->specialdata = plat;
+ plat->thinker.function = T_PlatRaise;
+ plat->crush = false;
+ plat->tag = line->tag;
+ switch (type)
+ {
+ case raiseToNearestAndChange:
+ plat->speed = PLATSPEED / 2;
+ sec->floorpic = sides[line->sidenum[0]].sector->floorpic;
+ plat->high = P_FindNextHighestFloor(sec, sec->floorheight);
+ plat->wait = 0;
+ plat->status = up;
+ sec->special = 0; // NO MORE DAMAGE, IF APPLICABLE
+ S_StartSound((mobj_t *) & sec->soundorg, sfx_stnmov);
+ break;
+ case raiseAndChange:
+ plat->speed = PLATSPEED / 2;
+ sec->floorpic = sides[line->sidenum[0]].sector->floorpic;
+ plat->high = sec->floorheight + amount * FRACUNIT;
+ plat->wait = 0;
+ plat->status = up;
+ S_StartSound((mobj_t *) & sec->soundorg, sfx_stnmov);
+ break;
+ case downWaitUpStay:
+ plat->speed = PLATSPEED * 4;
+ plat->low = P_FindLowestFloorSurrounding(sec);
+ if (plat->low > sec->floorheight)
+ plat->low = sec->floorheight;
+ plat->high = sec->floorheight;
+ plat->wait = 35 * PLATWAIT;
+ plat->status = down;
+ S_StartSound((mobj_t *) & sec->soundorg, sfx_pstart);
+ break;
+ case perpetualRaise:
+ plat->speed = PLATSPEED;
+ plat->low = P_FindLowestFloorSurrounding(sec);
+ if (plat->low > sec->floorheight)
+ plat->low = sec->floorheight;
+ plat->high = P_FindHighestFloorSurrounding(sec);
+ if (plat->high < sec->floorheight)
+ plat->high = sec->floorheight;
+ plat->wait = 35 * PLATWAIT;
+ plat->status = P_Random() & 1;
+ S_StartSound((mobj_t *) & sec->soundorg, sfx_pstart);
+ break;
+ }
+ P_AddActivePlat(plat);
+ }
+ return rtn;
}
void P_ActivateInStasis(int tag)
{
- int i;
-
- for (i = 0;i < MAXPLATS;i++)
- if (activeplats[i] &&
- (activeplats[i])->tag == tag &&
- (activeplats[i])->status == in_stasis)
- {
- (activeplats[i])->status = (activeplats[i])->oldstatus;
- (activeplats[i])->thinker.function = T_PlatRaise;
- }
+ int i;
+
+ for (i = 0; i < MAXPLATS; i++)
+ if (activeplats[i] &&
+ (activeplats[i])->tag == tag &&
+ (activeplats[i])->status == in_stasis)
+ {
+ (activeplats[i])->status = (activeplats[i])->oldstatus;
+ (activeplats[i])->thinker.function = T_PlatRaise;
+ }
}
-void EV_StopPlat(line_t *line)
+void EV_StopPlat(line_t * line)
{
- int j;
-
- for (j = 0;j < MAXPLATS;j++)
- if (activeplats[j] && ((activeplats[j])->status != in_stasis) &&
- ((activeplats[j])->tag == line->tag))
- {
- (activeplats[j])->oldstatus = (activeplats[j])->status;
- (activeplats[j])->status = in_stasis;
- (activeplats[j])->thinker.function = NULL;
- }
+ int j;
+
+ for (j = 0; j < MAXPLATS; j++)
+ if (activeplats[j] && ((activeplats[j])->status != in_stasis) &&
+ ((activeplats[j])->tag == line->tag))
+ {
+ (activeplats[j])->oldstatus = (activeplats[j])->status;
+ (activeplats[j])->status = in_stasis;
+ (activeplats[j])->thinker.function = NULL;
+ }
}
-void P_AddActivePlat(plat_t *plat)
+void P_AddActivePlat(plat_t * plat)
{
- int i;
- for (i = 0;i < MAXPLATS;i++)
- if (activeplats[i] == NULL)
- {
- activeplats[i] = plat;
- return;
- }
- I_Error ("P_AddActivePlat: no more plats!");
+ int i;
+ for (i = 0; i < MAXPLATS; i++)
+ if (activeplats[i] == NULL)
+ {
+ activeplats[i] = plat;
+ return;
+ }
+ I_Error("P_AddActivePlat: no more plats!");
}
-void P_RemoveActivePlat(plat_t *plat)
+void P_RemoveActivePlat(plat_t * plat)
{
- int i;
- for (i = 0;i < MAXPLATS;i++)
- if (plat == activeplats[i])
- {
- (activeplats[i])->sector->specialdata = NULL;
- P_RemoveThinker(&(activeplats[i])->thinker);
- activeplats[i] = NULL;
- return;
- }
- I_Error ("P_RemoveActivePlat: can't find plat!");
+ int i;
+ for (i = 0; i < MAXPLATS; i++)
+ if (plat == activeplats[i])
+ {
+ (activeplats[i])->sector->specialdata = NULL;
+ P_RemoveThinker(&(activeplats[i])->thinker);
+ activeplats[i] = NULL;
+ return;
+ }
+ I_Error("P_RemoveActivePlat: can't find plat!");
}
--- a/src/heretic/p_pspr.c
+++ b/src/heretic/p_pspr.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_pspr.c
@@ -18,204 +40,202 @@
static int MaceSpotCount;
static struct
{
- fixed_t x;
- fixed_t y;
+ fixed_t x;
+ fixed_t y;
} MaceSpots[MAX_MACE_SPOTS];
fixed_t bulletslope;
static int WeaponAmmoUsePL1[NUMWEAPONS] = {
- 0, // staff
- USE_GWND_AMMO_1, // gold wand
- USE_CBOW_AMMO_1, // crossbow
- USE_BLSR_AMMO_1, // blaster
- USE_SKRD_AMMO_1, // skull rod
- USE_PHRD_AMMO_1, // phoenix rod
- USE_MACE_AMMO_1, // mace
- 0, // gauntlets
- 0 // beak
+ 0, // staff
+ USE_GWND_AMMO_1, // gold wand
+ USE_CBOW_AMMO_1, // crossbow
+ USE_BLSR_AMMO_1, // blaster
+ USE_SKRD_AMMO_1, // skull rod
+ USE_PHRD_AMMO_1, // phoenix rod
+ USE_MACE_AMMO_1, // mace
+ 0, // gauntlets
+ 0 // beak
};
static int WeaponAmmoUsePL2[NUMWEAPONS] = {
- 0, // staff
- USE_GWND_AMMO_2, // gold wand
- USE_CBOW_AMMO_2, // crossbow
- USE_BLSR_AMMO_2, // blaster
- USE_SKRD_AMMO_2, // skull rod
- USE_PHRD_AMMO_2, // phoenix rod
- USE_MACE_AMMO_2, // mace
- 0, // gauntlets
- 0 // beak
+ 0, // staff
+ USE_GWND_AMMO_2, // gold wand
+ USE_CBOW_AMMO_2, // crossbow
+ USE_BLSR_AMMO_2, // blaster
+ USE_SKRD_AMMO_2, // skull rod
+ USE_PHRD_AMMO_2, // phoenix rod
+ USE_MACE_AMMO_2, // mace
+ 0, // gauntlets
+ 0 // beak
};
-weaponinfo_t wpnlev1info[NUMWEAPONS] =
-{
- { // Staff
- am_noammo, // ammo
- S_STAFFUP, // upstate
- S_STAFFDOWN, // downstate
- S_STAFFREADY, // readystate
- S_STAFFATK1_1, // atkstate
- S_STAFFATK1_1, // holdatkstate
- S_NULL // flashstate
- },
- { // Gold wand
- am_goldwand, // ammo
- S_GOLDWANDUP, // upstate
- S_GOLDWANDDOWN, // downstate
- S_GOLDWANDREADY, // readystate
- S_GOLDWANDATK1_1, // atkstate
- S_GOLDWANDATK1_1, // holdatkstate
- S_NULL // flashstate
- },
- { // Crossbow
- am_crossbow, // ammo
- S_CRBOWUP, // upstate
- S_CRBOWDOWN, // downstate
- S_CRBOW1, // readystate
- S_CRBOWATK1_1, // atkstate
- S_CRBOWATK1_1, // holdatkstate
- S_NULL // flashstate
- },
- { // Blaster
- am_blaster, // ammo
- S_BLASTERUP, // upstate
- S_BLASTERDOWN, // downstate
- S_BLASTERREADY, // readystate
- S_BLASTERATK1_1, // atkstate
- S_BLASTERATK1_3, // holdatkstate
- S_NULL // flashstate
- },
- { // Skull rod
- am_skullrod, // ammo
- S_HORNRODUP, // upstate
- S_HORNRODDOWN, // downstate
- S_HORNRODREADY, // readystae
- S_HORNRODATK1_1, // atkstate
- S_HORNRODATK1_1, // holdatkstate
- S_NULL // flashstate
- },
- { // Phoenix rod
- am_phoenixrod, // ammo
- S_PHOENIXUP, // upstate
- S_PHOENIXDOWN, // downstate
- S_PHOENIXREADY, // readystate
- S_PHOENIXATK1_1, // atkstate
- S_PHOENIXATK1_1, // holdatkstate
- S_NULL // flashstate
- },
- { // Mace
- am_mace, // ammo
- S_MACEUP, // upstate
- S_MACEDOWN, // downstate
- S_MACEREADY, // readystate
- S_MACEATK1_1, // atkstate
- S_MACEATK1_2, // holdatkstate
- S_NULL // flashstate
- },
- { // Gauntlets
- am_noammo, // ammo
- S_GAUNTLETUP, // upstate
- S_GAUNTLETDOWN, // downstate
- S_GAUNTLETREADY, // readystate
- S_GAUNTLETATK1_1, // atkstate
- S_GAUNTLETATK1_3, // holdatkstate
- S_NULL // flashstate
- },
- { // Beak
- am_noammo, // ammo
- S_BEAKUP, // upstate
- S_BEAKDOWN, // downstate
- S_BEAKREADY, // readystate
- S_BEAKATK1_1, // atkstate
- S_BEAKATK1_1, // holdatkstate
- S_NULL // flashstate
- }
+weaponinfo_t wpnlev1info[NUMWEAPONS] = {
+ { // Staff
+ am_noammo, // ammo
+ S_STAFFUP, // upstate
+ S_STAFFDOWN, // downstate
+ S_STAFFREADY, // readystate
+ S_STAFFATK1_1, // atkstate
+ S_STAFFATK1_1, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Gold wand
+ am_goldwand, // ammo
+ S_GOLDWANDUP, // upstate
+ S_GOLDWANDDOWN, // downstate
+ S_GOLDWANDREADY, // readystate
+ S_GOLDWANDATK1_1, // atkstate
+ S_GOLDWANDATK1_1, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Crossbow
+ am_crossbow, // ammo
+ S_CRBOWUP, // upstate
+ S_CRBOWDOWN, // downstate
+ S_CRBOW1, // readystate
+ S_CRBOWATK1_1, // atkstate
+ S_CRBOWATK1_1, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Blaster
+ am_blaster, // ammo
+ S_BLASTERUP, // upstate
+ S_BLASTERDOWN, // downstate
+ S_BLASTERREADY, // readystate
+ S_BLASTERATK1_1, // atkstate
+ S_BLASTERATK1_3, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Skull rod
+ am_skullrod, // ammo
+ S_HORNRODUP, // upstate
+ S_HORNRODDOWN, // downstate
+ S_HORNRODREADY, // readystae
+ S_HORNRODATK1_1, // atkstate
+ S_HORNRODATK1_1, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Phoenix rod
+ am_phoenixrod, // ammo
+ S_PHOENIXUP, // upstate
+ S_PHOENIXDOWN, // downstate
+ S_PHOENIXREADY, // readystate
+ S_PHOENIXATK1_1, // atkstate
+ S_PHOENIXATK1_1, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Mace
+ am_mace, // ammo
+ S_MACEUP, // upstate
+ S_MACEDOWN, // downstate
+ S_MACEREADY, // readystate
+ S_MACEATK1_1, // atkstate
+ S_MACEATK1_2, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Gauntlets
+ am_noammo, // ammo
+ S_GAUNTLETUP, // upstate
+ S_GAUNTLETDOWN, // downstate
+ S_GAUNTLETREADY, // readystate
+ S_GAUNTLETATK1_1, // atkstate
+ S_GAUNTLETATK1_3, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Beak
+ am_noammo, // ammo
+ S_BEAKUP, // upstate
+ S_BEAKDOWN, // downstate
+ S_BEAKREADY, // readystate
+ S_BEAKATK1_1, // atkstate
+ S_BEAKATK1_1, // holdatkstate
+ S_NULL // flashstate
+ }
};
-weaponinfo_t wpnlev2info[NUMWEAPONS] =
-{
- { // Staff
- am_noammo, // ammo
- S_STAFFUP2, // upstate
- S_STAFFDOWN2, // downstate
- S_STAFFREADY2_1, // readystate
- S_STAFFATK2_1, // atkstate
- S_STAFFATK2_1, // holdatkstate
- S_NULL // flashstate
- },
- { // Gold wand
- am_goldwand, // ammo
- S_GOLDWANDUP, // upstate
- S_GOLDWANDDOWN, // downstate
- S_GOLDWANDREADY, // readystate
- S_GOLDWANDATK2_1, // atkstate
- S_GOLDWANDATK2_1, // holdatkstate
- S_NULL // flashstate
- },
- { // Crossbow
- am_crossbow, // ammo
- S_CRBOWUP, // upstate
- S_CRBOWDOWN, // downstate
- S_CRBOW1, // readystate
- S_CRBOWATK2_1, // atkstate
- S_CRBOWATK2_1, // holdatkstate
- S_NULL // flashstate
- },
- { // Blaster
- am_blaster, // ammo
- S_BLASTERUP, // upstate
- S_BLASTERDOWN, // downstate
- S_BLASTERREADY, // readystate
- S_BLASTERATK2_1, // atkstate
- S_BLASTERATK2_3, // holdatkstate
- S_NULL // flashstate
- },
- { // Skull rod
- am_skullrod, // ammo
- S_HORNRODUP, // upstate
- S_HORNRODDOWN, // downstate
- S_HORNRODREADY, // readystae
- S_HORNRODATK2_1, // atkstate
- S_HORNRODATK2_1, // holdatkstate
- S_NULL // flashstate
- },
- { // Phoenix rod
- am_phoenixrod, // ammo
- S_PHOENIXUP, // upstate
- S_PHOENIXDOWN, // downstate
- S_PHOENIXREADY, // readystate
- S_PHOENIXATK2_1, // atkstate
- S_PHOENIXATK2_2, // holdatkstate
- S_NULL // flashstate
- },
- { // Mace
- am_mace, // ammo
- S_MACEUP, // upstate
- S_MACEDOWN, // downstate
- S_MACEREADY, // readystate
- S_MACEATK2_1, // atkstate
- S_MACEATK2_1, // holdatkstate
- S_NULL // flashstate
- },
- { // Gauntlets
- am_noammo, // ammo
- S_GAUNTLETUP2, // upstate
- S_GAUNTLETDOWN2, // downstate
- S_GAUNTLETREADY2_1, // readystate
- S_GAUNTLETATK2_1, // atkstate
- S_GAUNTLETATK2_3, // holdatkstate
- S_NULL // flashstate
- },
- { // Beak
- am_noammo, // ammo
- S_BEAKUP, // upstate
- S_BEAKDOWN, // downstate
- S_BEAKREADY, // readystate
- S_BEAKATK2_1, // atkstate
- S_BEAKATK2_1, // holdatkstate
- S_NULL // flashstate
- }
+weaponinfo_t wpnlev2info[NUMWEAPONS] = {
+ { // Staff
+ am_noammo, // ammo
+ S_STAFFUP2, // upstate
+ S_STAFFDOWN2, // downstate
+ S_STAFFREADY2_1, // readystate
+ S_STAFFATK2_1, // atkstate
+ S_STAFFATK2_1, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Gold wand
+ am_goldwand, // ammo
+ S_GOLDWANDUP, // upstate
+ S_GOLDWANDDOWN, // downstate
+ S_GOLDWANDREADY, // readystate
+ S_GOLDWANDATK2_1, // atkstate
+ S_GOLDWANDATK2_1, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Crossbow
+ am_crossbow, // ammo
+ S_CRBOWUP, // upstate
+ S_CRBOWDOWN, // downstate
+ S_CRBOW1, // readystate
+ S_CRBOWATK2_1, // atkstate
+ S_CRBOWATK2_1, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Blaster
+ am_blaster, // ammo
+ S_BLASTERUP, // upstate
+ S_BLASTERDOWN, // downstate
+ S_BLASTERREADY, // readystate
+ S_BLASTERATK2_1, // atkstate
+ S_BLASTERATK2_3, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Skull rod
+ am_skullrod, // ammo
+ S_HORNRODUP, // upstate
+ S_HORNRODDOWN, // downstate
+ S_HORNRODREADY, // readystae
+ S_HORNRODATK2_1, // atkstate
+ S_HORNRODATK2_1, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Phoenix rod
+ am_phoenixrod, // ammo
+ S_PHOENIXUP, // upstate
+ S_PHOENIXDOWN, // downstate
+ S_PHOENIXREADY, // readystate
+ S_PHOENIXATK2_1, // atkstate
+ S_PHOENIXATK2_2, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Mace
+ am_mace, // ammo
+ S_MACEUP, // upstate
+ S_MACEDOWN, // downstate
+ S_MACEREADY, // readystate
+ S_MACEATK2_1, // atkstate
+ S_MACEATK2_1, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Gauntlets
+ am_noammo, // ammo
+ S_GAUNTLETUP2, // upstate
+ S_GAUNTLETDOWN2, // downstate
+ S_GAUNTLETREADY2_1, // readystate
+ S_GAUNTLETATK2_1, // atkstate
+ S_GAUNTLETATK2_3, // holdatkstate
+ S_NULL // flashstate
+ },
+ { // Beak
+ am_noammo, // ammo
+ S_BEAKUP, // upstate
+ S_BEAKDOWN, // downstate
+ S_BEAKREADY, // readystate
+ S_BEAKATK2_1, // atkstate
+ S_BEAKATK2_1, // holdatkstate
+ S_NULL // flashstate
+ }
};
//---------------------------------------------------------------------------
@@ -228,7 +248,7 @@
void P_OpenWeapons(void)
{
- MaceSpotCount = 0;
+ MaceSpotCount = 0;
}
//---------------------------------------------------------------------------
@@ -237,15 +257,15 @@
//
//---------------------------------------------------------------------------
-void P_AddMaceSpot(mapthing_t *mthing)
+void P_AddMaceSpot(mapthing_t * mthing)
{
- if(MaceSpotCount == MAX_MACE_SPOTS)
- {
- I_Error("Too many mace spots.");
- }
- MaceSpots[MaceSpotCount].x = mthing->x<<FRACBITS;
- MaceSpots[MaceSpotCount].y = mthing->y<<FRACBITS;
- MaceSpotCount++;
+ if (MaceSpotCount == MAX_MACE_SPOTS)
+ {
+ I_Error("Too many mace spots.");
+ }
+ MaceSpots[MaceSpotCount].x = mthing->x << FRACBITS;
+ MaceSpots[MaceSpotCount].y = mthing->y << FRACBITS;
+ MaceSpotCount++;
}
//---------------------------------------------------------------------------
@@ -256,19 +276,19 @@
//
//---------------------------------------------------------------------------
-void P_RepositionMace(mobj_t *mo)
+void P_RepositionMace(mobj_t * mo)
{
- int spot;
- subsector_t *ss;
+ int spot;
+ subsector_t *ss;
- P_UnsetThingPosition(mo);
- spot = P_Random()%MaceSpotCount;
- mo->x = MaceSpots[spot].x;
- mo->y = MaceSpots[spot].y;
- ss = R_PointInSubsector(mo->x, mo->y);
- mo->z = mo->floorz = ss->sector->floorheight;
- mo->ceilingz = ss->sector->ceilingheight;
- P_SetThingPosition(mo);
+ P_UnsetThingPosition(mo);
+ spot = P_Random() % MaceSpotCount;
+ mo->x = MaceSpots[spot].x;
+ mo->y = MaceSpots[spot].y;
+ ss = R_PointInSubsector(mo->x, mo->y);
+ mo->z = mo->floorz = ss->sector->floorheight;
+ mo->ceilingz = ss->sector->ceilingheight;
+ P_SetThingPosition(mo);
}
//---------------------------------------------------------------------------
@@ -281,18 +301,18 @@
void P_CloseWeapons(void)
{
- int spot;
+ int spot;
- if(!MaceSpotCount)
- { // No maces placed
- return;
- }
- if(!deathmatch && P_Random() < 64)
- { // Sometimes doesn't show up if not in deathmatch
- return;
- }
- spot = P_Random()%MaceSpotCount;
- P_SpawnMobj(MaceSpots[spot].x, MaceSpots[spot].y, ONFLOORZ, MT_WMACE);
+ if (!MaceSpotCount)
+ { // No maces placed
+ return;
+ }
+ if (!deathmatch && P_Random() < 64)
+ { // Sometimes doesn't show up if not in deathmatch
+ return;
+ }
+ spot = P_Random() % MaceSpotCount;
+ P_SpawnMobj(MaceSpots[spot].x, MaceSpots[spot].y, ONFLOORZ, MT_WMACE);
}
//---------------------------------------------------------------------------
@@ -301,37 +321,38 @@
//
//---------------------------------------------------------------------------
-void P_SetPsprite(player_t *player, int position, statenum_t stnum)
+void P_SetPsprite(player_t * player, int position, statenum_t stnum)
{
- pspdef_t *psp;
- state_t *state;
+ pspdef_t *psp;
+ state_t *state;
- psp = &player->psprites[position];
- do
- {
- if(!stnum)
- { // Object removed itself.
- psp->state = NULL;
- break;
- }
- state = &states[stnum];
- psp->state = state;
- psp->tics = state->tics; // could be 0
- if(state->misc1)
- { // Set coordinates.
- psp->sx = state->misc1<<FRACBITS;
- psp->sy = state->misc2<<FRACBITS;
- }
- if(state->action)
- { // Call action routine.
- state->action(player, psp);
- if(!psp->state)
- {
- break;
- }
- }
- stnum = psp->state->nextstate;
- } while(!psp->tics); // An initial state of 0 could cycle through.
+ psp = &player->psprites[position];
+ do
+ {
+ if (!stnum)
+ { // Object removed itself.
+ psp->state = NULL;
+ break;
+ }
+ state = &states[stnum];
+ psp->state = state;
+ psp->tics = state->tics; // could be 0
+ if (state->misc1)
+ { // Set coordinates.
+ psp->sx = state->misc1 << FRACBITS;
+ psp->sy = state->misc2 << FRACBITS;
+ }
+ if (state->action)
+ { // Call action routine.
+ state->action(player, psp);
+ if (!psp->state)
+ {
+ break;
+ }
+ }
+ stnum = psp->state->nextstate;
+ }
+ while (!psp->tics); // An initial state of 0 could cycle through.
}
/*
@@ -367,12 +388,12 @@
//
//---------------------------------------------------------------------------
-void P_ActivateBeak(player_t *player)
+void P_ActivateBeak(player_t * player)
{
- player->pendingweapon = wp_nochange;
- player->readyweapon = wp_beak;
- player->psprites[ps_weapon].sy = WEAPONTOP;
- P_SetPsprite(player, ps_weapon, S_BEAKREADY);
+ player->pendingweapon = wp_nochange;
+ player->readyweapon = wp_beak;
+ player->psprites[ps_weapon].sy = WEAPONTOP;
+ P_SetPsprite(player, ps_weapon, S_BEAKREADY);
}
//---------------------------------------------------------------------------
@@ -381,16 +402,16 @@
//
//---------------------------------------------------------------------------
-void P_PostChickenWeapon(player_t *player, weapontype_t weapon)
+void P_PostChickenWeapon(player_t * player, weapontype_t weapon)
{
- if(weapon == wp_beak)
- { // Should never happen
- weapon = wp_staff;
- }
- player->pendingweapon = wp_nochange;
- player->readyweapon = weapon;
- player->psprites[ps_weapon].sy = WEAPONBOTTOM;
- P_SetPsprite(player, ps_weapon, wpnlev1info[weapon].upstate);
+ if (weapon == wp_beak)
+ { // Should never happen
+ weapon = wp_staff;
+ }
+ player->pendingweapon = wp_nochange;
+ player->readyweapon = weapon;
+ player->psprites[ps_weapon].sy = WEAPONBOTTOM;
+ P_SetPsprite(player, ps_weapon, wpnlev1info[weapon].upstate);
}
//---------------------------------------------------------------------------
@@ -401,29 +422,29 @@
//
//---------------------------------------------------------------------------
-void P_BringUpWeapon(player_t *player)
+void P_BringUpWeapon(player_t * player)
{
- statenum_t new;
+ statenum_t new;
- if(player->pendingweapon == wp_nochange)
- {
- player->pendingweapon = player->readyweapon;
- }
- if(player->pendingweapon == wp_gauntlets)
- {
- S_StartSound(player->mo, sfx_gntact);
- }
- if(player->powers[pw_weaponlevel2])
- {
- new = wpnlev2info[player->pendingweapon].upstate;
- }
- else
- {
- new = wpnlev1info[player->pendingweapon].upstate;
- }
- player->pendingweapon = wp_nochange;
- player->psprites[ps_weapon].sy = WEAPONBOTTOM;
- P_SetPsprite(player, ps_weapon, new);
+ if (player->pendingweapon == wp_nochange)
+ {
+ player->pendingweapon = player->readyweapon;
+ }
+ if (player->pendingweapon == wp_gauntlets)
+ {
+ S_StartSound(player->mo, sfx_gntact);
+ }
+ if (player->powers[pw_weaponlevel2])
+ {
+ new = wpnlev2info[player->pendingweapon].upstate;
+ }
+ else
+ {
+ new = wpnlev1info[player->pendingweapon].upstate;
+ }
+ player->pendingweapon = wp_nochange;
+ player->psprites[ps_weapon].sy = WEAPONBOTTOM;
+ P_SetPsprite(player, ps_weapon, new);
}
//---------------------------------------------------------------------------
@@ -435,78 +456,79 @@
//
//---------------------------------------------------------------------------
-boolean P_CheckAmmo(player_t *player)
+boolean P_CheckAmmo(player_t * player)
{
- ammotype_t ammo;
- int *ammoUse;
- int count;
+ ammotype_t ammo;
+ int *ammoUse;
+ int count;
- ammo = wpnlev1info[player->readyweapon].ammo;
- if(player->powers[pw_weaponlevel2] && !deathmatch)
- {
- ammoUse = WeaponAmmoUsePL2;
- }
- else
- {
- ammoUse = WeaponAmmoUsePL1;
- }
- count = ammoUse[player->readyweapon];
- if(ammo == am_noammo || player->ammo[ammo] >= count)
- {
- return(true);
- }
- // out of ammo, pick a weapon to change to
- do
- {
- if(player->weaponowned[wp_skullrod]
- && player->ammo[am_skullrod] > ammoUse[wp_skullrod])
- {
- player->pendingweapon = wp_skullrod;
- }
- else if(player->weaponowned[wp_blaster]
- && player->ammo[am_blaster] > ammoUse[wp_blaster])
- {
- player->pendingweapon = wp_blaster;
- }
- else if(player->weaponowned[wp_crossbow]
- && player->ammo[am_crossbow] > ammoUse[wp_crossbow])
- {
- player->pendingweapon = wp_crossbow;
- }
- else if(player->weaponowned[wp_mace]
- && player->ammo[am_mace] > ammoUse[wp_mace])
- {
- player->pendingweapon = wp_mace;
- }
- else if(player->ammo[am_goldwand] > ammoUse[wp_goldwand])
- {
- player->pendingweapon = wp_goldwand;
- }
- else if(player->weaponowned[wp_gauntlets])
- {
- player->pendingweapon = wp_gauntlets;
- }
- else if(player->weaponowned[wp_phoenixrod]
- && player->ammo[am_phoenixrod] > ammoUse[wp_phoenixrod])
- {
- player->pendingweapon = wp_phoenixrod;
- }
- else
- {
- player->pendingweapon = wp_staff;
- }
- } while(player->pendingweapon == wp_nochange);
- if(player->powers[pw_weaponlevel2])
- {
- P_SetPsprite(player, ps_weapon,
- wpnlev2info[player->readyweapon].downstate);
- }
- else
- {
- P_SetPsprite(player, ps_weapon,
- wpnlev1info[player->readyweapon].downstate);
- }
- return(false);
+ ammo = wpnlev1info[player->readyweapon].ammo;
+ if (player->powers[pw_weaponlevel2] && !deathmatch)
+ {
+ ammoUse = WeaponAmmoUsePL2;
+ }
+ else
+ {
+ ammoUse = WeaponAmmoUsePL1;
+ }
+ count = ammoUse[player->readyweapon];
+ if (ammo == am_noammo || player->ammo[ammo] >= count)
+ {
+ return (true);
+ }
+ // out of ammo, pick a weapon to change to
+ do
+ {
+ if (player->weaponowned[wp_skullrod]
+ && player->ammo[am_skullrod] > ammoUse[wp_skullrod])
+ {
+ player->pendingweapon = wp_skullrod;
+ }
+ else if (player->weaponowned[wp_blaster]
+ && player->ammo[am_blaster] > ammoUse[wp_blaster])
+ {
+ player->pendingweapon = wp_blaster;
+ }
+ else if (player->weaponowned[wp_crossbow]
+ && player->ammo[am_crossbow] > ammoUse[wp_crossbow])
+ {
+ player->pendingweapon = wp_crossbow;
+ }
+ else if (player->weaponowned[wp_mace]
+ && player->ammo[am_mace] > ammoUse[wp_mace])
+ {
+ player->pendingweapon = wp_mace;
+ }
+ else if (player->ammo[am_goldwand] > ammoUse[wp_goldwand])
+ {
+ player->pendingweapon = wp_goldwand;
+ }
+ else if (player->weaponowned[wp_gauntlets])
+ {
+ player->pendingweapon = wp_gauntlets;
+ }
+ else if (player->weaponowned[wp_phoenixrod]
+ && player->ammo[am_phoenixrod] > ammoUse[wp_phoenixrod])
+ {
+ player->pendingweapon = wp_phoenixrod;
+ }
+ else
+ {
+ player->pendingweapon = wp_staff;
+ }
+ }
+ while (player->pendingweapon == wp_nochange);
+ if (player->powers[pw_weaponlevel2])
+ {
+ P_SetPsprite(player, ps_weapon,
+ wpnlev2info[player->readyweapon].downstate);
+ }
+ else
+ {
+ P_SetPsprite(player, ps_weapon,
+ wpnlev1info[player->readyweapon].downstate);
+ }
+ return (false);
}
//---------------------------------------------------------------------------
@@ -515,26 +537,26 @@
//
//---------------------------------------------------------------------------
-void P_FireWeapon(player_t *player)
+void P_FireWeapon(player_t * player)
{
- weaponinfo_t *wpinfo;
- statenum_t attackState;
+ weaponinfo_t *wpinfo;
+ statenum_t attackState;
- if(!P_CheckAmmo(player))
- {
- return;
- }
- P_SetMobjState(player->mo, S_PLAY_ATK2);
- wpinfo = player->powers[pw_weaponlevel2] ? &wpnlev2info[0]
- : &wpnlev1info[0];
- attackState = player->refire ? wpinfo[player->readyweapon].holdatkstate
- : wpinfo[player->readyweapon].atkstate;
- P_SetPsprite(player, ps_weapon, attackState);
- P_NoiseAlert(player->mo, player->mo);
- if(player->readyweapon == wp_gauntlets && !player->refire)
- { // Play the sound for the initial gauntlet attack
- S_StartSound(player->mo, sfx_gntuse);
- }
+ if (!P_CheckAmmo(player))
+ {
+ return;
+ }
+ P_SetMobjState(player->mo, S_PLAY_ATK2);
+ wpinfo = player->powers[pw_weaponlevel2] ? &wpnlev2info[0]
+ : &wpnlev1info[0];
+ attackState = player->refire ? wpinfo[player->readyweapon].holdatkstate
+ : wpinfo[player->readyweapon].atkstate;
+ P_SetPsprite(player, ps_weapon, attackState);
+ P_NoiseAlert(player->mo, player->mo);
+ if (player->readyweapon == wp_gauntlets && !player->refire)
+ { // Play the sound for the initial gauntlet attack
+ S_StartSound(player->mo, sfx_gntuse);
+ }
}
//---------------------------------------------------------------------------
@@ -545,18 +567,18 @@
//
//---------------------------------------------------------------------------
-void P_DropWeapon(player_t *player)
+void P_DropWeapon(player_t * player)
{
- if(player->powers[pw_weaponlevel2])
- {
- P_SetPsprite(player, ps_weapon,
- wpnlev2info[player->readyweapon].downstate);
- }
- else
- {
- P_SetPsprite(player, ps_weapon,
- wpnlev1info[player->readyweapon].downstate);
- }
+ if (player->powers[pw_weaponlevel2])
+ {
+ P_SetPsprite(player, ps_weapon,
+ wpnlev2info[player->readyweapon].downstate);
+ }
+ else
+ {
+ P_SetPsprite(player, ps_weapon,
+ wpnlev1info[player->readyweapon].downstate);
+ }
}
//---------------------------------------------------------------------------
@@ -567,65 +589,64 @@
//
//---------------------------------------------------------------------------
-void A_WeaponReady(player_t *player, pspdef_t *psp)
+void A_WeaponReady(player_t * player, pspdef_t * psp)
{
- int angle;
+ int angle;
- if(player->chickenTics)
- { // Change to the chicken beak
- P_ActivateBeak(player);
- return;
- }
- // Change player from attack state
- if(player->mo->state == &states[S_PLAY_ATK1]
- || player->mo->state == &states[S_PLAY_ATK2])
- {
- P_SetMobjState(player->mo, S_PLAY);
- }
- // Check for staff PL2 active sound
- if((player->readyweapon == wp_staff)
- && (psp->state == &states[S_STAFFREADY2_1])
- && P_Random() < 128)
- {
- S_StartSound(player->mo, sfx_stfcrk);
- }
- // Put the weapon away if the player has a pending weapon or has
- // died.
- if(player->pendingweapon != wp_nochange || !player->health)
- {
- if(player->powers[pw_weaponlevel2])
- {
- P_SetPsprite(player, ps_weapon,
- wpnlev2info[player->readyweapon].downstate);
- }
- else
- {
- P_SetPsprite(player, ps_weapon,
- wpnlev1info[player->readyweapon].downstate);
- }
- return;
- }
+ if (player->chickenTics)
+ { // Change to the chicken beak
+ P_ActivateBeak(player);
+ return;
+ }
+ // Change player from attack state
+ if (player->mo->state == &states[S_PLAY_ATK1]
+ || player->mo->state == &states[S_PLAY_ATK2])
+ {
+ P_SetMobjState(player->mo, S_PLAY);
+ }
+ // Check for staff PL2 active sound
+ if ((player->readyweapon == wp_staff)
+ && (psp->state == &states[S_STAFFREADY2_1]) && P_Random() < 128)
+ {
+ S_StartSound(player->mo, sfx_stfcrk);
+ }
+ // Put the weapon away if the player has a pending weapon or has
+ // died.
+ if (player->pendingweapon != wp_nochange || !player->health)
+ {
+ if (player->powers[pw_weaponlevel2])
+ {
+ P_SetPsprite(player, ps_weapon,
+ wpnlev2info[player->readyweapon].downstate);
+ }
+ else
+ {
+ P_SetPsprite(player, ps_weapon,
+ wpnlev1info[player->readyweapon].downstate);
+ }
+ return;
+ }
- // Check for fire. The phoenix rod does not auto fire.
- if(player->cmd.buttons&BT_ATTACK)
- {
- if(!player->attackdown || (player->readyweapon != wp_phoenixrod))
- {
- player->attackdown = true;
- P_FireWeapon(player);
- return;
- }
- }
- else
- {
- player->attackdown = false;
- }
+ // Check for fire. The phoenix rod does not auto fire.
+ if (player->cmd.buttons & BT_ATTACK)
+ {
+ if (!player->attackdown || (player->readyweapon != wp_phoenixrod))
+ {
+ player->attackdown = true;
+ P_FireWeapon(player);
+ return;
+ }
+ }
+ else
+ {
+ player->attackdown = false;
+ }
- // Bob the weapon based on movement speed.
- angle = (128*leveltime)&FINEMASK;
- psp->sx = FRACUNIT+FixedMul(player->bob, finecosine[angle]);
- angle &= FINEANGLES/2-1;
- psp->sy = WEAPONTOP+FixedMul(player->bob, finesine[angle]);
+ // Bob the weapon based on movement speed.
+ angle = (128 * leveltime) & FINEMASK;
+ psp->sx = FRACUNIT + FixedMul(player->bob, finecosine[angle]);
+ angle &= FINEANGLES / 2 - 1;
+ psp->sy = WEAPONTOP + FixedMul(player->bob, finesine[angle]);
}
//---------------------------------------------------------------------------
@@ -634,9 +655,9 @@
//
//---------------------------------------------------------------------------
-void P_UpdateBeak(player_t *player, pspdef_t *psp)
+void P_UpdateBeak(player_t * player, pspdef_t * psp)
{
- psp->sy = WEAPONTOP+(player->chickenPeck<<(FRACBITS-1));
+ psp->sy = WEAPONTOP + (player->chickenPeck << (FRACBITS - 1));
}
//---------------------------------------------------------------------------
@@ -645,30 +666,30 @@
//
//---------------------------------------------------------------------------
-void A_BeakReady(player_t *player, pspdef_t *psp)
+void A_BeakReady(player_t * player, pspdef_t * psp)
{
- if(player->cmd.buttons&BT_ATTACK)
- { // Chicken beak attack
- player->attackdown = true;
- P_SetMobjState(player->mo, S_CHICPLAY_ATK1);
- if(player->powers[pw_weaponlevel2])
- {
- P_SetPsprite(player, ps_weapon, S_BEAKATK2_1);
- }
- else
- {
- P_SetPsprite(player, ps_weapon, S_BEAKATK1_1);
- }
- P_NoiseAlert(player->mo, player->mo);
- }
- else
- {
- if(player->mo->state == &states[S_CHICPLAY_ATK1])
- { // Take out of attack state
- P_SetMobjState(player->mo, S_CHICPLAY);
- }
- player->attackdown = false;
- }
+ if (player->cmd.buttons & BT_ATTACK)
+ { // Chicken beak attack
+ player->attackdown = true;
+ P_SetMobjState(player->mo, S_CHICPLAY_ATK1);
+ if (player->powers[pw_weaponlevel2])
+ {
+ P_SetPsprite(player, ps_weapon, S_BEAKATK2_1);
+ }
+ else
+ {
+ P_SetPsprite(player, ps_weapon, S_BEAKATK1_1);
+ }
+ P_NoiseAlert(player->mo, player->mo);
+ }
+ else
+ {
+ if (player->mo->state == &states[S_CHICPLAY_ATK1])
+ { // Take out of attack state
+ P_SetMobjState(player->mo, S_CHICPLAY);
+ }
+ player->attackdown = false;
+ }
}
//---------------------------------------------------------------------------
@@ -679,19 +700,19 @@
//
//---------------------------------------------------------------------------
-void A_ReFire(player_t *player, pspdef_t *psp)
+void A_ReFire(player_t * player, pspdef_t * psp)
{
- if((player->cmd.buttons&BT_ATTACK)
- && player->pendingweapon == wp_nochange && player->health)
- {
- player->refire++;
- P_FireWeapon(player);
- }
- else
- {
- player->refire = 0;
- P_CheckAmmo(player);
- }
+ if ((player->cmd.buttons & BT_ATTACK)
+ && player->pendingweapon == wp_nochange && player->health)
+ {
+ player->refire++;
+ P_FireWeapon(player);
+ }
+ else
+ {
+ player->refire = 0;
+ P_CheckAmmo(player);
+ }
}
//---------------------------------------------------------------------------
@@ -700,32 +721,32 @@
//
//---------------------------------------------------------------------------
-void A_Lower(player_t *player, pspdef_t *psp)
+void A_Lower(player_t * player, pspdef_t * psp)
{
- if(player->chickenTics)
- {
- psp->sy = WEAPONBOTTOM;
- }
- else
- {
- psp->sy += LOWERSPEED;
- }
- if(psp->sy < WEAPONBOTTOM)
- { // Not lowered all the way yet
- return;
- }
- if(player->playerstate == PST_DEAD)
- { // Player is dead, so don't bring up a pending weapon
- psp->sy = WEAPONBOTTOM;
- return;
- }
- if(!player->health)
- { // Player is dead, so keep the weapon off screen
- P_SetPsprite(player, ps_weapon, S_NULL);
- return;
- }
- player->readyweapon = player->pendingweapon;
- P_BringUpWeapon(player);
+ if (player->chickenTics)
+ {
+ psp->sy = WEAPONBOTTOM;
+ }
+ else
+ {
+ psp->sy += LOWERSPEED;
+ }
+ if (psp->sy < WEAPONBOTTOM)
+ { // Not lowered all the way yet
+ return;
+ }
+ if (player->playerstate == PST_DEAD)
+ { // Player is dead, so don't bring up a pending weapon
+ psp->sy = WEAPONBOTTOM;
+ return;
+ }
+ if (!player->health)
+ { // Player is dead, so keep the weapon off screen
+ P_SetPsprite(player, ps_weapon, S_NULL);
+ return;
+ }
+ player->readyweapon = player->pendingweapon;
+ P_BringUpWeapon(player);
}
//---------------------------------------------------------------------------
@@ -734,11 +755,11 @@
//
//---------------------------------------------------------------------------
-void A_BeakRaise(player_t *player, pspdef_t *psp)
+void A_BeakRaise(player_t * player, pspdef_t * psp)
{
- psp->sy = WEAPONTOP;
- P_SetPsprite(player, ps_weapon,
- wpnlev1info[player->readyweapon].readystate);
+ psp->sy = WEAPONTOP;
+ P_SetPsprite(player, ps_weapon,
+ wpnlev1info[player->readyweapon].readystate);
}
//---------------------------------------------------------------------------
@@ -747,24 +768,24 @@
//
//---------------------------------------------------------------------------
-void A_Raise(player_t *player, pspdef_t *psp)
+void A_Raise(player_t * player, pspdef_t * psp)
{
- psp->sy -= RAISESPEED;
- if(psp->sy > WEAPONTOP)
- { // Not raised all the way yet
- return;
- }
- psp->sy = WEAPONTOP;
- if(player->powers[pw_weaponlevel2])
- {
- P_SetPsprite(player, ps_weapon,
- wpnlev2info[player->readyweapon].readystate);
- }
- else
- {
- P_SetPsprite(player, ps_weapon,
- wpnlev1info[player->readyweapon].readystate);
- }
+ psp->sy -= RAISESPEED;
+ if (psp->sy > WEAPONTOP)
+ { // Not raised all the way yet
+ return;
+ }
+ psp->sy = WEAPONTOP;
+ if (player->powers[pw_weaponlevel2])
+ {
+ P_SetPsprite(player, ps_weapon,
+ wpnlev2info[player->readyweapon].readystate);
+ }
+ else
+ {
+ P_SetPsprite(player, ps_weapon,
+ wpnlev1info[player->readyweapon].readystate);
+ }
}
/*
@@ -778,30 +799,30 @@
===============
*/
-void P_BulletSlope (mobj_t *mo)
+void P_BulletSlope(mobj_t * mo)
{
- angle_t an;
+ angle_t an;
//
// see which target is to be aimed at
//
- an = mo->angle;
- bulletslope = P_AimLineAttack (mo, an, 16*64*FRACUNIT);
- if (!linetarget)
- {
- an += 1<<26;
- bulletslope = P_AimLineAttack (mo, an, 16*64*FRACUNIT);
- if (!linetarget)
- {
- an -= 2<<26;
- bulletslope = P_AimLineAttack (mo, an, 16*64*FRACUNIT);
- }
- if (!linetarget)
- {
- an += 2<<26;
- bulletslope = (mo->player->lookdir<<FRACBITS)/173;
- }
- }
+ an = mo->angle;
+ bulletslope = P_AimLineAttack(mo, an, 16 * 64 * FRACUNIT);
+ if (!linetarget)
+ {
+ an += 1 << 26;
+ bulletslope = P_AimLineAttack(mo, an, 16 * 64 * FRACUNIT);
+ if (!linetarget)
+ {
+ an -= 2 << 26;
+ bulletslope = P_AimLineAttack(mo, an, 16 * 64 * FRACUNIT);
+ }
+ if (!linetarget)
+ {
+ an += 2 << 26;
+ bulletslope = (mo->player->lookdir << FRACBITS) / 173;
+ }
+ }
}
//****************************************************************************
@@ -816,25 +837,26 @@
//
//----------------------------------------------------------------------------
-void A_BeakAttackPL1(player_t *player, pspdef_t *psp)
+void A_BeakAttackPL1(player_t * player, pspdef_t * psp)
{
- angle_t angle;
- int damage;
- int slope;
+ angle_t angle;
+ int damage;
+ int slope;
- damage = 1+(P_Random()&3);
- angle = player->mo->angle;
- slope = P_AimLineAttack(player->mo, angle, MELEERANGE);
- PuffType = MT_BEAKPUFF;
- P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
- if(linetarget)
- {
- player->mo->angle = R_PointToAngle2(player->mo->x,
- player->mo->y, linetarget->x, linetarget->y);
- }
- S_StartSound(player->mo, sfx_chicpk1+(P_Random()%3));
- player->chickenPeck = 12;
- psp->tics -= P_Random()&7;
+ damage = 1 + (P_Random() & 3);
+ angle = player->mo->angle;
+ slope = P_AimLineAttack(player->mo, angle, MELEERANGE);
+ PuffType = MT_BEAKPUFF;
+ P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
+ if (linetarget)
+ {
+ player->mo->angle = R_PointToAngle2(player->mo->x,
+ player->mo->y, linetarget->x,
+ linetarget->y);
+ }
+ S_StartSound(player->mo, sfx_chicpk1 + (P_Random() % 3));
+ player->chickenPeck = 12;
+ psp->tics -= P_Random() & 7;
}
//----------------------------------------------------------------------------
@@ -843,25 +865,26 @@
//
//----------------------------------------------------------------------------
-void A_BeakAttackPL2(player_t *player, pspdef_t *psp)
+void A_BeakAttackPL2(player_t * player, pspdef_t * psp)
{
- angle_t angle;
- int damage;
- int slope;
+ angle_t angle;
+ int damage;
+ int slope;
- damage = HITDICE(4);
- angle = player->mo->angle;
- slope = P_AimLineAttack(player->mo, angle, MELEERANGE);
- PuffType = MT_BEAKPUFF;
- P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
- if(linetarget)
- {
- player->mo->angle = R_PointToAngle2(player->mo->x,
- player->mo->y, linetarget->x, linetarget->y);
- }
- S_StartSound(player->mo, sfx_chicpk1+(P_Random()%3));
- player->chickenPeck = 12;
- psp->tics -= P_Random()&3;
+ damage = HITDICE(4);
+ angle = player->mo->angle;
+ slope = P_AimLineAttack(player->mo, angle, MELEERANGE);
+ PuffType = MT_BEAKPUFF;
+ P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
+ if (linetarget)
+ {
+ player->mo->angle = R_PointToAngle2(player->mo->x,
+ player->mo->y, linetarget->x,
+ linetarget->y);
+ }
+ S_StartSound(player->mo, sfx_chicpk1 + (P_Random() % 3));
+ player->chickenPeck = 12;
+ psp->tics -= P_Random() & 3;
}
//----------------------------------------------------------------------------
@@ -870,25 +893,26 @@
//
//----------------------------------------------------------------------------
-void A_StaffAttackPL1(player_t *player, pspdef_t *psp)
+void A_StaffAttackPL1(player_t * player, pspdef_t * psp)
{
- angle_t angle;
- int damage;
- int slope;
+ angle_t angle;
+ int damage;
+ int slope;
- damage = 5+(P_Random()&15);
- angle = player->mo->angle;
- angle += (P_Random()-P_Random())<<18;
- slope = P_AimLineAttack(player->mo, angle, MELEERANGE);
- PuffType = MT_STAFFPUFF;
- P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
- if(linetarget)
- {
- //S_StartSound(player->mo, sfx_stfhit);
- // turn to face target
- player->mo->angle = R_PointToAngle2(player->mo->x,
- player->mo->y, linetarget->x, linetarget->y);
- }
+ damage = 5 + (P_Random() & 15);
+ angle = player->mo->angle;
+ angle += (P_Random() - P_Random()) << 18;
+ slope = P_AimLineAttack(player->mo, angle, MELEERANGE);
+ PuffType = MT_STAFFPUFF;
+ P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
+ if (linetarget)
+ {
+ //S_StartSound(player->mo, sfx_stfhit);
+ // turn to face target
+ player->mo->angle = R_PointToAngle2(player->mo->x,
+ player->mo->y, linetarget->x,
+ linetarget->y);
+ }
}
//----------------------------------------------------------------------------
@@ -897,26 +921,27 @@
//
//----------------------------------------------------------------------------
-void A_StaffAttackPL2(player_t *player, pspdef_t *psp)
+void A_StaffAttackPL2(player_t * player, pspdef_t * psp)
{
- angle_t angle;
- int damage;
- int slope;
+ angle_t angle;
+ int damage;
+ int slope;
- // P_inter.c:P_DamageMobj() handles target momentums
- damage = 18+(P_Random()&63);
- angle = player->mo->angle;
- angle += (P_Random()-P_Random())<<18;
- slope = P_AimLineAttack(player->mo, angle, MELEERANGE);
- PuffType = MT_STAFFPUFF2;
- P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
- if(linetarget)
- {
- //S_StartSound(player->mo, sfx_stfpow);
- // turn to face target
- player->mo->angle = R_PointToAngle2(player->mo->x,
- player->mo->y, linetarget->x, linetarget->y);
- }
+ // P_inter.c:P_DamageMobj() handles target momentums
+ damage = 18 + (P_Random() & 63);
+ angle = player->mo->angle;
+ angle += (P_Random() - P_Random()) << 18;
+ slope = P_AimLineAttack(player->mo, angle, MELEERANGE);
+ PuffType = MT_STAFFPUFF2;
+ P_LineAttack(player->mo, angle, MELEERANGE, slope, damage);
+ if (linetarget)
+ {
+ //S_StartSound(player->mo, sfx_stfpow);
+ // turn to face target
+ player->mo->angle = R_PointToAngle2(player->mo->x,
+ player->mo->y, linetarget->x,
+ linetarget->y);
+ }
}
//----------------------------------------------------------------------------
@@ -925,25 +950,25 @@
//
//----------------------------------------------------------------------------
-void A_FireBlasterPL1(player_t *player, pspdef_t *psp)
+void A_FireBlasterPL1(player_t * player, pspdef_t * psp)
{
- mobj_t *mo;
- angle_t angle;
- int damage;
+ mobj_t *mo;
+ angle_t angle;
+ int damage;
- mo = player->mo;
- S_StartSound(mo, sfx_gldhit);
- player->ammo[am_blaster] -= USE_BLSR_AMMO_1;
- P_BulletSlope(mo);
- damage = HITDICE(4);
- angle = mo->angle;
- if(player->refire)
- {
- angle += (P_Random()-P_Random())<<18;
- }
- PuffType = MT_BLASTERPUFF1;
- P_LineAttack(mo, angle, MISSILERANGE, bulletslope, damage);
- S_StartSound(player->mo, sfx_blssht);
+ mo = player->mo;
+ S_StartSound(mo, sfx_gldhit);
+ player->ammo[am_blaster] -= USE_BLSR_AMMO_1;
+ P_BulletSlope(mo);
+ damage = HITDICE(4);
+ angle = mo->angle;
+ if (player->refire)
+ {
+ angle += (P_Random() - P_Random()) << 18;
+ }
+ PuffType = MT_BLASTERPUFF1;
+ P_LineAttack(mo, angle, MISSILERANGE, bulletslope, damage);
+ S_StartSound(player->mo, sfx_blssht);
}
//----------------------------------------------------------------------------
@@ -952,18 +977,18 @@
//
//----------------------------------------------------------------------------
-void A_FireBlasterPL2(player_t *player, pspdef_t *psp)
+void A_FireBlasterPL2(player_t * player, pspdef_t * psp)
{
- mobj_t *mo;
+ mobj_t *mo;
- player->ammo[am_blaster] -=
- deathmatch ? USE_BLSR_AMMO_1 : USE_BLSR_AMMO_2;
- mo = P_SpawnPlayerMissile(player->mo, MT_BLASTERFX1);
- if(mo)
- {
- mo->thinker.function = P_BlasterMobjThinker;
- }
- S_StartSound(player->mo, sfx_blssht);
+ player->ammo[am_blaster] -=
+ deathmatch ? USE_BLSR_AMMO_1 : USE_BLSR_AMMO_2;
+ mo = P_SpawnPlayerMissile(player->mo, MT_BLASTERFX1);
+ if (mo)
+ {
+ mo->thinker.function = P_BlasterMobjThinker;
+ }
+ S_StartSound(player->mo, sfx_blssht);
}
//----------------------------------------------------------------------------
@@ -972,24 +997,24 @@
//
//----------------------------------------------------------------------------
-void A_FireGoldWandPL1(player_t *player, pspdef_t *psp)
+void A_FireGoldWandPL1(player_t * player, pspdef_t * psp)
{
- mobj_t *mo;
- angle_t angle;
- int damage;
+ mobj_t *mo;
+ angle_t angle;
+ int damage;
- mo = player->mo;
- player->ammo[am_goldwand] -= USE_GWND_AMMO_1;
- P_BulletSlope(mo);
- damage = 7+(P_Random()&7);
- angle = mo->angle;
- if(player->refire)
- {
- angle += (P_Random()-P_Random())<<18;
- }
- PuffType = MT_GOLDWANDPUFF1;
- P_LineAttack(mo, angle, MISSILERANGE, bulletslope, damage);
- S_StartSound(player->mo, sfx_gldhit);
+ mo = player->mo;
+ player->ammo[am_goldwand] -= USE_GWND_AMMO_1;
+ P_BulletSlope(mo);
+ damage = 7 + (P_Random() & 7);
+ angle = mo->angle;
+ if (player->refire)
+ {
+ angle += (P_Random() - P_Random()) << 18;
+ }
+ PuffType = MT_GOLDWANDPUFF1;
+ P_LineAttack(mo, angle, MISSILERANGE, bulletslope, damage);
+ S_StartSound(player->mo, sfx_gldhit);
}
//----------------------------------------------------------------------------
@@ -998,30 +1023,30 @@
//
//----------------------------------------------------------------------------
-void A_FireGoldWandPL2(player_t *player, pspdef_t *psp)
+void A_FireGoldWandPL2(player_t * player, pspdef_t * psp)
{
- int i;
- mobj_t *mo;
- angle_t angle;
- int damage;
- fixed_t momz;
+ int i;
+ mobj_t *mo;
+ angle_t angle;
+ int damage;
+ fixed_t momz;
- mo = player->mo;
- player->ammo[am_goldwand] -=
- deathmatch ? USE_GWND_AMMO_1 : USE_GWND_AMMO_2;
- PuffType = MT_GOLDWANDPUFF2;
- P_BulletSlope(mo);
- momz = FixedMul(mobjinfo[MT_GOLDWANDFX2].speed, bulletslope);
- P_SpawnMissileAngle(mo, MT_GOLDWANDFX2, mo->angle-(ANG45/8), momz);
- P_SpawnMissileAngle(mo, MT_GOLDWANDFX2, mo->angle+(ANG45/8), momz);
- angle = mo->angle-(ANG45/8);
- for(i = 0; i < 5; i++)
- {
- damage = 1+(P_Random()&7);
- P_LineAttack(mo, angle, MISSILERANGE, bulletslope, damage);
- angle += ((ANG45/8)*2)/4;
- }
- S_StartSound(player->mo, sfx_gldhit);
+ mo = player->mo;
+ player->ammo[am_goldwand] -=
+ deathmatch ? USE_GWND_AMMO_1 : USE_GWND_AMMO_2;
+ PuffType = MT_GOLDWANDPUFF2;
+ P_BulletSlope(mo);
+ momz = FixedMul(mobjinfo[MT_GOLDWANDFX2].speed, bulletslope);
+ P_SpawnMissileAngle(mo, MT_GOLDWANDFX2, mo->angle - (ANG45 / 8), momz);
+ P_SpawnMissileAngle(mo, MT_GOLDWANDFX2, mo->angle + (ANG45 / 8), momz);
+ angle = mo->angle - (ANG45 / 8);
+ for (i = 0; i < 5; i++)
+ {
+ damage = 1 + (P_Random() & 7);
+ P_LineAttack(mo, angle, MISSILERANGE, bulletslope, damage);
+ angle += ((ANG45 / 8) * 2) / 4;
+ }
+ S_StartSound(player->mo, sfx_gldhit);
}
//----------------------------------------------------------------------------
@@ -1030,32 +1055,33 @@
//
//----------------------------------------------------------------------------
-void A_FireMacePL1B(player_t *player, pspdef_t *psp)
+void A_FireMacePL1B(player_t * player, pspdef_t * psp)
{
- mobj_t *pmo;
- mobj_t *ball;
- angle_t angle;
+ mobj_t *pmo;
+ mobj_t *ball;
+ angle_t angle;
- if(player->ammo[am_mace] < USE_MACE_AMMO_1)
- {
- return;
- }
- player->ammo[am_mace] -= USE_MACE_AMMO_1;
- pmo = player->mo;
- ball = P_SpawnMobj(pmo->x, pmo->y, pmo->z+28*FRACUNIT
- - FOOTCLIPSIZE*(pmo->flags2&MF2_FEETARECLIPPED != 0), MT_MACEFX2);
- ball->momz = 2*FRACUNIT+((player->lookdir)<<(FRACBITS-5));
- angle = pmo->angle;
- ball->target = pmo;
- ball->angle = angle;
- ball->z += (player->lookdir)<<(FRACBITS-4);
- angle >>= ANGLETOFINESHIFT;
- ball->momx = (pmo->momx>>1)
- +FixedMul(ball->info->speed, finecosine[angle]);
- ball->momy = (pmo->momy>>1)
- +FixedMul(ball->info->speed, finesine[angle]);
- S_StartSound(ball, sfx_lobsht);
- P_CheckMissileSpawn(ball);
+ if (player->ammo[am_mace] < USE_MACE_AMMO_1)
+ {
+ return;
+ }
+ player->ammo[am_mace] -= USE_MACE_AMMO_1;
+ pmo = player->mo;
+ ball = P_SpawnMobj(pmo->x, pmo->y, pmo->z + 28 * FRACUNIT
+ - FOOTCLIPSIZE * (pmo->flags2 & MF2_FEETARECLIPPED !=
+ 0), MT_MACEFX2);
+ ball->momz = 2 * FRACUNIT + ((player->lookdir) << (FRACBITS - 5));
+ angle = pmo->angle;
+ ball->target = pmo;
+ ball->angle = angle;
+ ball->z += (player->lookdir) << (FRACBITS - 4);
+ angle >>= ANGLETOFINESHIFT;
+ ball->momx = (pmo->momx >> 1)
+ + FixedMul(ball->info->speed, finecosine[angle]);
+ ball->momy = (pmo->momy >> 1)
+ + FixedMul(ball->info->speed, finesine[angle]);
+ S_StartSound(ball, sfx_lobsht);
+ P_CheckMissileSpawn(ball);
}
//----------------------------------------------------------------------------
@@ -1064,28 +1090,28 @@
//
//----------------------------------------------------------------------------
-void A_FireMacePL1(player_t *player, pspdef_t *psp)
+void A_FireMacePL1(player_t * player, pspdef_t * psp)
{
- mobj_t *ball;
+ mobj_t *ball;
- if(P_Random() < 28)
- {
- A_FireMacePL1B(player, psp);
- return;
- }
- if(player->ammo[am_mace] < USE_MACE_AMMO_1)
- {
- return;
- }
- player->ammo[am_mace] -= USE_MACE_AMMO_1;
- psp->sx = ((P_Random()&3)-2)*FRACUNIT;
- psp->sy = WEAPONTOP+(P_Random()&3)*FRACUNIT;
- ball = P_SPMAngle(player->mo, MT_MACEFX1, player->mo->angle
- +(((P_Random()&7)-4)<<24));
- if(ball)
- {
- ball->special1 = 16; // tics till dropoff
- }
+ if (P_Random() < 28)
+ {
+ A_FireMacePL1B(player, psp);
+ return;
+ }
+ if (player->ammo[am_mace] < USE_MACE_AMMO_1)
+ {
+ return;
+ }
+ player->ammo[am_mace] -= USE_MACE_AMMO_1;
+ psp->sx = ((P_Random() & 3) - 2) * FRACUNIT;
+ psp->sy = WEAPONTOP + (P_Random() & 3) * FRACUNIT;
+ ball = P_SPMAngle(player->mo, MT_MACEFX1, player->mo->angle
+ + (((P_Random() & 7) - 4) << 24));
+ if (ball)
+ {
+ ball->special1 = 16; // tics till dropoff
+ }
}
//----------------------------------------------------------------------------
@@ -1094,25 +1120,25 @@
//
//----------------------------------------------------------------------------
-void A_MacePL1Check(mobj_t *ball)
+void A_MacePL1Check(mobj_t * ball)
{
- angle_t angle;
+ angle_t angle;
- if(ball->special1 == 0)
- {
- return;
- }
- ball->special1 -= 4;
- if(ball->special1 > 0)
- {
- return;
- }
- ball->special1 = 0;
- ball->flags2 |= MF2_LOGRAV;
- angle = ball->angle>>ANGLETOFINESHIFT;
- ball->momx = FixedMul(7*FRACUNIT, finecosine[angle]);
- ball->momy = FixedMul(7*FRACUNIT, finesine[angle]);
- ball->momz -= ball->momz>>1;
+ if (ball->special1 == 0)
+ {
+ return;
+ }
+ ball->special1 -= 4;
+ if (ball->special1 > 0)
+ {
+ return;
+ }
+ ball->special1 = 0;
+ ball->flags2 |= MF2_LOGRAV;
+ angle = ball->angle >> ANGLETOFINESHIFT;
+ ball->momx = FixedMul(7 * FRACUNIT, finecosine[angle]);
+ ball->momy = FixedMul(7 * FRACUNIT, finesine[angle]);
+ ball->momz -= ball->momz >> 1;
}
//----------------------------------------------------------------------------
@@ -1121,28 +1147,28 @@
//
//----------------------------------------------------------------------------
-void A_MaceBallImpact(mobj_t *ball)
+void A_MaceBallImpact(mobj_t * ball)
{
- if((ball->z <= ball->floorz) && (P_HitFloor(ball) != FLOOR_SOLID))
- { // Landed in some sort of liquid
- P_RemoveMobj(ball);
- return;
- }
- if((ball->health != MAGIC_JUNK) && (ball->z <= ball->floorz)
- && ball->momz)
- { // Bounce
- ball->health = MAGIC_JUNK;
- ball->momz = (ball->momz*192)>>8;
- ball->flags2 &= ~MF2_FLOORBOUNCE;
- P_SetMobjState(ball, ball->info->spawnstate);
- S_StartSound(ball, sfx_bounce);
- }
- else
- { // Explode
- ball->flags |= MF_NOGRAVITY;
- ball->flags2 &= ~MF2_LOGRAV;
- S_StartSound(ball, sfx_lobhit);
- }
+ if ((ball->z <= ball->floorz) && (P_HitFloor(ball) != FLOOR_SOLID))
+ { // Landed in some sort of liquid
+ P_RemoveMobj(ball);
+ return;
+ }
+ if ((ball->health != MAGIC_JUNK) && (ball->z <= ball->floorz)
+ && ball->momz)
+ { // Bounce
+ ball->health = MAGIC_JUNK;
+ ball->momz = (ball->momz * 192) >> 8;
+ ball->flags2 &= ~MF2_FLOORBOUNCE;
+ P_SetMobjState(ball, ball->info->spawnstate);
+ S_StartSound(ball, sfx_bounce);
+ }
+ else
+ { // Explode
+ ball->flags |= MF_NOGRAVITY;
+ ball->flags2 &= ~MF2_LOGRAV;
+ S_StartSound(ball, sfx_lobhit);
+ }
}
//----------------------------------------------------------------------------
@@ -1151,51 +1177,51 @@
//
//----------------------------------------------------------------------------
-void A_MaceBallImpact2(mobj_t *ball)
+void A_MaceBallImpact2(mobj_t * ball)
{
- mobj_t *tiny;
- angle_t angle;
+ mobj_t *tiny;
+ angle_t angle;
- if((ball->z <= ball->floorz) && (P_HitFloor(ball) != FLOOR_SOLID))
- { // Landed in some sort of liquid
- P_RemoveMobj(ball);
- return;
- }
- if((ball->z != ball->floorz) || (ball->momz < 2*FRACUNIT))
- { // Explode
- ball->momx = ball->momy = ball->momz = 0;
- ball->flags |= MF_NOGRAVITY;
- ball->flags2 &= ~(MF2_LOGRAV|MF2_FLOORBOUNCE);
- }
- else
- { // Bounce
- ball->momz = (ball->momz*192)>>8;
- P_SetMobjState(ball, ball->info->spawnstate);
+ if ((ball->z <= ball->floorz) && (P_HitFloor(ball) != FLOOR_SOLID))
+ { // Landed in some sort of liquid
+ P_RemoveMobj(ball);
+ return;
+ }
+ if ((ball->z != ball->floorz) || (ball->momz < 2 * FRACUNIT))
+ { // Explode
+ ball->momx = ball->momy = ball->momz = 0;
+ ball->flags |= MF_NOGRAVITY;
+ ball->flags2 &= ~(MF2_LOGRAV | MF2_FLOORBOUNCE);
+ }
+ else
+ { // Bounce
+ ball->momz = (ball->momz * 192) >> 8;
+ P_SetMobjState(ball, ball->info->spawnstate);
- tiny = P_SpawnMobj(ball->x, ball->y, ball->z, MT_MACEFX3);
- angle = ball->angle+ANG90;
- tiny->target = ball->target;
- tiny->angle = angle;
- angle >>= ANGLETOFINESHIFT;
- tiny->momx = (ball->momx>>1)+FixedMul(ball->momz-FRACUNIT,
- finecosine[angle]);
- tiny->momy = (ball->momy>>1)+FixedMul(ball->momz-FRACUNIT,
- finesine[angle]);
- tiny->momz = ball->momz;
- P_CheckMissileSpawn(tiny);
+ tiny = P_SpawnMobj(ball->x, ball->y, ball->z, MT_MACEFX3);
+ angle = ball->angle + ANG90;
+ tiny->target = ball->target;
+ tiny->angle = angle;
+ angle >>= ANGLETOFINESHIFT;
+ tiny->momx = (ball->momx >> 1) + FixedMul(ball->momz - FRACUNIT,
+ finecosine[angle]);
+ tiny->momy = (ball->momy >> 1) + FixedMul(ball->momz - FRACUNIT,
+ finesine[angle]);
+ tiny->momz = ball->momz;
+ P_CheckMissileSpawn(tiny);
- tiny = P_SpawnMobj(ball->x, ball->y, ball->z, MT_MACEFX3);
- angle = ball->angle-ANG90;
- tiny->target = ball->target;
- tiny->angle = angle;
- angle >>= ANGLETOFINESHIFT;
- tiny->momx = (ball->momx>>1)+FixedMul(ball->momz-FRACUNIT,
- finecosine[angle]);
- tiny->momy = (ball->momy>>1)+FixedMul(ball->momz-FRACUNIT,
- finesine[angle]);
- tiny->momz = ball->momz;
- P_CheckMissileSpawn(tiny);
- }
+ tiny = P_SpawnMobj(ball->x, ball->y, ball->z, MT_MACEFX3);
+ angle = ball->angle - ANG90;
+ tiny->target = ball->target;
+ tiny->angle = angle;
+ angle >>= ANGLETOFINESHIFT;
+ tiny->momx = (ball->momx >> 1) + FixedMul(ball->momz - FRACUNIT,
+ finecosine[angle]);
+ tiny->momy = (ball->momy >> 1) + FixedMul(ball->momz - FRACUNIT,
+ finesine[angle]);
+ tiny->momz = ball->momz;
+ P_CheckMissileSpawn(tiny);
+ }
}
//----------------------------------------------------------------------------
@@ -1204,24 +1230,23 @@
//
//----------------------------------------------------------------------------
-void A_FireMacePL2(player_t *player, pspdef_t *psp)
+void A_FireMacePL2(player_t * player, pspdef_t * psp)
{
- mobj_t *mo;
+ mobj_t *mo;
- player->ammo[am_mace] -=
- deathmatch ? USE_MACE_AMMO_1 : USE_MACE_AMMO_2;
- mo = P_SpawnPlayerMissile(player->mo, MT_MACEFX4);
- if(mo)
- {
- mo->momx += player->mo->momx;
- mo->momy += player->mo->momy;
- mo->momz = 2*FRACUNIT+((player->lookdir)<<(FRACBITS-5));
- if(linetarget)
- {
- mo->special1 = (int)linetarget;
- }
- }
- S_StartSound(player->mo, sfx_lobsht);
+ player->ammo[am_mace] -= deathmatch ? USE_MACE_AMMO_1 : USE_MACE_AMMO_2;
+ mo = P_SpawnPlayerMissile(player->mo, MT_MACEFX4);
+ if (mo)
+ {
+ mo->momx += player->mo->momx;
+ mo->momy += player->mo->momy;
+ mo->momz = 2 * FRACUNIT + ((player->lookdir) << (FRACBITS - 5));
+ if (linetarget)
+ {
+ mo->special1 = (int) linetarget;
+ }
+ }
+ S_StartSound(player->mo, sfx_lobsht);
}
//----------------------------------------------------------------------------
@@ -1230,69 +1255,69 @@
//
//----------------------------------------------------------------------------
-void A_DeathBallImpact(mobj_t *ball)
+void A_DeathBallImpact(mobj_t * ball)
{
- int i;
- mobj_t *target;
- angle_t angle;
- boolean newAngle;
+ int i;
+ mobj_t *target;
+ angle_t angle;
+ boolean newAngle;
- if((ball->z <= ball->floorz) && (P_HitFloor(ball) != FLOOR_SOLID))
- { // Landed in some sort of liquid
- P_RemoveMobj(ball);
- return;
- }
- if((ball->z <= ball->floorz) && ball->momz)
- { // Bounce
- newAngle = false;
- target = (mobj_t *)ball->special1;
- if(target)
- {
- if(!(target->flags&MF_SHOOTABLE))
- { // Target died
- ball->special1 = 0;
- }
- else
- { // Seek
- angle = R_PointToAngle2(ball->x, ball->y,
- target->x, target->y);
- newAngle = true;
- }
- }
- else
- { // Find new target
- angle = 0;
- for(i = 0; i < 16; i++)
- {
- P_AimLineAttack(ball, angle, 10*64*FRACUNIT);
- if(linetarget && ball->target != linetarget)
- {
- ball->special1 = (int)linetarget;
- angle = R_PointToAngle2(ball->x, ball->y,
- linetarget->x, linetarget->y);
- newAngle = true;
- break;
- }
- angle += ANGLE_45/2;
- }
- }
- if(newAngle)
- {
- ball->angle = angle;
- angle >>= ANGLETOFINESHIFT;
- ball->momx = FixedMul(ball->info->speed, finecosine[angle]);
- ball->momy = FixedMul(ball->info->speed, finesine[angle]);
- }
- P_SetMobjState(ball, ball->info->spawnstate);
- S_StartSound(ball, sfx_pstop);
- }
- else
- { // Explode
- ball->flags |= MF_NOGRAVITY;
- ball->flags2 &= ~MF2_LOGRAV;
- S_StartSound(ball, sfx_phohit);
- }
-}
+ if ((ball->z <= ball->floorz) && (P_HitFloor(ball) != FLOOR_SOLID))
+ { // Landed in some sort of liquid
+ P_RemoveMobj(ball);
+ return;
+ }
+ if ((ball->z <= ball->floorz) && ball->momz)
+ { // Bounce
+ newAngle = false;
+ target = (mobj_t *) ball->special1;
+ if (target)
+ {
+ if (!(target->flags & MF_SHOOTABLE))
+ { // Target died
+ ball->special1 = 0;
+ }
+ else
+ { // Seek
+ angle = R_PointToAngle2(ball->x, ball->y,
+ target->x, target->y);
+ newAngle = true;
+ }
+ }
+ else
+ { // Find new target
+ angle = 0;
+ for (i = 0; i < 16; i++)
+ {
+ P_AimLineAttack(ball, angle, 10 * 64 * FRACUNIT);
+ if (linetarget && ball->target != linetarget)
+ {
+ ball->special1 = (int) linetarget;
+ angle = R_PointToAngle2(ball->x, ball->y,
+ linetarget->x, linetarget->y);
+ newAngle = true;
+ break;
+ }
+ angle += ANGLE_45 / 2;
+ }
+ }
+ if (newAngle)
+ {
+ ball->angle = angle;
+ angle >>= ANGLETOFINESHIFT;
+ ball->momx = FixedMul(ball->info->speed, finecosine[angle]);
+ ball->momy = FixedMul(ball->info->speed, finesine[angle]);
+ }
+ P_SetMobjState(ball, ball->info->spawnstate);
+ S_StartSound(ball, sfx_pstop);
+ }
+ else
+ { // Explode
+ ball->flags |= MF_NOGRAVITY;
+ ball->flags2 &= ~MF2_LOGRAV;
+ S_StartSound(ball, sfx_phohit);
+ }
+}
//----------------------------------------------------------------------------
//
@@ -1300,23 +1325,23 @@
//
//----------------------------------------------------------------------------
-void A_SpawnRippers(mobj_t *actor)
+void A_SpawnRippers(mobj_t * actor)
{
- int i;
- angle_t angle;
- mobj_t *ripper;
+ int i;
+ angle_t angle;
+ mobj_t *ripper;
- for(i = 0; i < 8; i++)
- {
- ripper = P_SpawnMobj(actor->x, actor->y, actor->z, MT_RIPPER);
- angle = i*ANG45;
- ripper->target = actor->target;
- ripper->angle = angle;
- angle >>= ANGLETOFINESHIFT;
- ripper->momx = FixedMul(ripper->info->speed, finecosine[angle]);
- ripper->momy = FixedMul(ripper->info->speed, finesine[angle]);
- P_CheckMissileSpawn(ripper);
- }
+ for (i = 0; i < 8; i++)
+ {
+ ripper = P_SpawnMobj(actor->x, actor->y, actor->z, MT_RIPPER);
+ angle = i * ANG45;
+ ripper->target = actor->target;
+ ripper->angle = angle;
+ angle >>= ANGLETOFINESHIFT;
+ ripper->momx = FixedMul(ripper->info->speed, finecosine[angle]);
+ ripper->momy = FixedMul(ripper->info->speed, finesine[angle]);
+ P_CheckMissileSpawn(ripper);
+ }
}
//----------------------------------------------------------------------------
@@ -1325,15 +1350,15 @@
//
//----------------------------------------------------------------------------
-void A_FireCrossbowPL1(player_t *player, pspdef_t *psp)
+void A_FireCrossbowPL1(player_t * player, pspdef_t * psp)
{
- mobj_t *pmo;
+ mobj_t *pmo;
- pmo = player->mo;
- player->ammo[am_crossbow] -= USE_CBOW_AMMO_1;
- P_SpawnPlayerMissile(pmo, MT_CRBOWFX1);
- P_SPMAngle(pmo, MT_CRBOWFX3, pmo->angle-(ANG45/10));
- P_SPMAngle(pmo, MT_CRBOWFX3, pmo->angle+(ANG45/10));
+ pmo = player->mo;
+ player->ammo[am_crossbow] -= USE_CBOW_AMMO_1;
+ P_SpawnPlayerMissile(pmo, MT_CRBOWFX1);
+ P_SPMAngle(pmo, MT_CRBOWFX3, pmo->angle - (ANG45 / 10));
+ P_SPMAngle(pmo, MT_CRBOWFX3, pmo->angle + (ANG45 / 10));
}
//----------------------------------------------------------------------------
@@ -1342,18 +1367,18 @@
//
//----------------------------------------------------------------------------
-void A_FireCrossbowPL2(player_t *player, pspdef_t *psp)
+void A_FireCrossbowPL2(player_t * player, pspdef_t * psp)
{
- mobj_t *pmo;
+ mobj_t *pmo;
- pmo = player->mo;
- player->ammo[am_crossbow] -=
- deathmatch ? USE_CBOW_AMMO_1 : USE_CBOW_AMMO_2;
- P_SpawnPlayerMissile(pmo, MT_CRBOWFX2);
- P_SPMAngle(pmo, MT_CRBOWFX2, pmo->angle-(ANG45/10));
- P_SPMAngle(pmo, MT_CRBOWFX2, pmo->angle+(ANG45/10));
- P_SPMAngle(pmo, MT_CRBOWFX3, pmo->angle-(ANG45/5));
- P_SPMAngle(pmo, MT_CRBOWFX3, pmo->angle+(ANG45/5));
+ pmo = player->mo;
+ player->ammo[am_crossbow] -=
+ deathmatch ? USE_CBOW_AMMO_1 : USE_CBOW_AMMO_2;
+ P_SpawnPlayerMissile(pmo, MT_CRBOWFX2);
+ P_SPMAngle(pmo, MT_CRBOWFX2, pmo->angle - (ANG45 / 10));
+ P_SPMAngle(pmo, MT_CRBOWFX2, pmo->angle + (ANG45 / 10));
+ P_SPMAngle(pmo, MT_CRBOWFX3, pmo->angle - (ANG45 / 5));
+ P_SPMAngle(pmo, MT_CRBOWFX3, pmo->angle + (ANG45 / 5));
}
//----------------------------------------------------------------------------
@@ -1362,16 +1387,16 @@
//
//----------------------------------------------------------------------------
-void A_BoltSpark(mobj_t *bolt)
+void A_BoltSpark(mobj_t * bolt)
{
- mobj_t *spark;
+ mobj_t *spark;
- if(P_Random() > 50)
- {
- spark = P_SpawnMobj(bolt->x, bolt->y, bolt->z, MT_CRBOWFX4);
- spark->x += (P_Random()-P_Random())<<10;
- spark->y += (P_Random()-P_Random())<<10;
- }
+ if (P_Random() > 50)
+ {
+ spark = P_SpawnMobj(bolt->x, bolt->y, bolt->z, MT_CRBOWFX4);
+ spark->x += (P_Random() - P_Random()) << 10;
+ spark->y += (P_Random() - P_Random()) << 10;
+ }
}
//----------------------------------------------------------------------------
@@ -1380,21 +1405,21 @@
//
//----------------------------------------------------------------------------
-void A_FireSkullRodPL1(player_t *player, pspdef_t *psp)
+void A_FireSkullRodPL1(player_t * player, pspdef_t * psp)
{
- mobj_t *mo;
+ mobj_t *mo;
- if(player->ammo[am_skullrod] < USE_SKRD_AMMO_1)
- {
- return;
- }
- player->ammo[am_skullrod] -= USE_SKRD_AMMO_1;
- mo = P_SpawnPlayerMissile(player->mo, MT_HORNRODFX1);
- // Randomize the first frame
- if(mo && P_Random() > 128)
- {
- P_SetMobjState(mo, S_HRODFX1_2);
- }
+ if (player->ammo[am_skullrod] < USE_SKRD_AMMO_1)
+ {
+ return;
+ }
+ player->ammo[am_skullrod] -= USE_SKRD_AMMO_1;
+ mo = P_SpawnPlayerMissile(player->mo, MT_HORNRODFX1);
+ // Randomize the first frame
+ if (mo && P_Random() > 128)
+ {
+ P_SetMobjState(mo, S_HRODFX1_2);
+ }
}
//----------------------------------------------------------------------------
@@ -1407,27 +1432,27 @@
//
//----------------------------------------------------------------------------
-void A_FireSkullRodPL2(player_t *player, pspdef_t *psp)
+void A_FireSkullRodPL2(player_t * player, pspdef_t * psp)
{
- player->ammo[am_skullrod] -=
- deathmatch ? USE_SKRD_AMMO_1 : USE_SKRD_AMMO_2;
- P_SpawnPlayerMissile(player->mo, MT_HORNRODFX2);
- // Use MissileMobj instead of the return value from
- // P_SpawnPlayerMissile because we need to give info to the mobj
- // even if it exploded immediately.
- if(netgame)
- { // Multi-player game
- MissileMobj->special2 = P_GetPlayerNum(player);
- }
- else
- { // Always use red missiles in single player games
- MissileMobj->special2 = 2;
- }
- if(linetarget)
- {
- MissileMobj->special1 = (int)linetarget;
- }
- S_StartSound(MissileMobj, sfx_hrnpow);
+ player->ammo[am_skullrod] -=
+ deathmatch ? USE_SKRD_AMMO_1 : USE_SKRD_AMMO_2;
+ P_SpawnPlayerMissile(player->mo, MT_HORNRODFX2);
+ // Use MissileMobj instead of the return value from
+ // P_SpawnPlayerMissile because we need to give info to the mobj
+ // even if it exploded immediately.
+ if (netgame)
+ { // Multi-player game
+ MissileMobj->special2 = P_GetPlayerNum(player);
+ }
+ else
+ { // Always use red missiles in single player games
+ MissileMobj->special2 = 2;
+ }
+ if (linetarget)
+ {
+ MissileMobj->special1 = (int) linetarget;
+ }
+ S_StartSound(MissileMobj, sfx_hrnpow);
}
//----------------------------------------------------------------------------
@@ -1436,9 +1461,9 @@
//
//----------------------------------------------------------------------------
-void A_SkullRodPL2Seek(mobj_t *actor)
+void A_SkullRodPL2Seek(mobj_t * actor)
{
- P_SeekerMissile(actor, ANGLE_1*10, ANGLE_1*30);
+ P_SeekerMissile(actor, ANGLE_1 * 10, ANGLE_1 * 30);
}
//----------------------------------------------------------------------------
@@ -1447,49 +1472,49 @@
//
//----------------------------------------------------------------------------
-void A_AddPlayerRain(mobj_t *actor)
+void A_AddPlayerRain(mobj_t * actor)
{
- int playerNum;
- player_t *player;
+ int playerNum;
+ player_t *player;
- playerNum = netgame ? actor->special2 : 0;
- if(!playeringame[playerNum])
- { // Player left the game
- return;
- }
- player = &players[playerNum];
- if(player->health <= 0)
- { // Player is dead
- return;
- }
- if(player->rain1 && player->rain2)
- { // Terminate an active rain
- if(player->rain1->health < player->rain2->health)
- {
- if(player->rain1->health > 16)
- {
- player->rain1->health = 16;
- }
- player->rain1 = NULL;
- }
- else
- {
- if(player->rain2->health > 16)
- {
- player->rain2->health = 16;
- }
- player->rain2 = NULL;
- }
- }
- // Add rain mobj to list
- if(player->rain1)
- {
- player->rain2 = actor;
- }
- else
- {
- player->rain1 = actor;
- }
+ playerNum = netgame ? actor->special2 : 0;
+ if (!playeringame[playerNum])
+ { // Player left the game
+ return;
+ }
+ player = &players[playerNum];
+ if (player->health <= 0)
+ { // Player is dead
+ return;
+ }
+ if (player->rain1 && player->rain2)
+ { // Terminate an active rain
+ if (player->rain1->health < player->rain2->health)
+ {
+ if (player->rain1->health > 16)
+ {
+ player->rain1->health = 16;
+ }
+ player->rain1 = NULL;
+ }
+ else
+ {
+ if (player->rain2->health > 16)
+ {
+ player->rain2->health = 16;
+ }
+ player->rain2 = NULL;
+ }
+ }
+ // Add rain mobj to list
+ if (player->rain1)
+ {
+ player->rain2 = actor;
+ }
+ else
+ {
+ player->rain1 = actor;
+ }
}
//----------------------------------------------------------------------------
@@ -1498,54 +1523,54 @@
//
//----------------------------------------------------------------------------
-void A_SkullRodStorm(mobj_t *actor)
+void A_SkullRodStorm(mobj_t * actor)
{
- fixed_t x;
- fixed_t y;
- mobj_t *mo;
- int playerNum;
- player_t *player;
+ fixed_t x;
+ fixed_t y;
+ mobj_t *mo;
+ int playerNum;
+ player_t *player;
- if(actor->health-- == 0)
- {
- P_SetMobjState(actor, S_NULL);
- playerNum = netgame ? actor->special2 : 0;
- if(!playeringame[playerNum])
- { // Player left the game
- return;
- }
- player = &players[playerNum];
- if(player->health <= 0)
- { // Player is dead
- return;
- }
- if(player->rain1 == actor)
- {
- player->rain1 = NULL;
- }
- else if(player->rain2 == actor)
- {
- player->rain2 = NULL;
- }
- return;
- }
- if(P_Random() < 25)
- { // Fudge rain frequency
- return;
- }
- x = actor->x+((P_Random()&127)-64)*FRACUNIT;
- y = actor->y+((P_Random()&127)-64)*FRACUNIT;
- mo = P_SpawnMobj(x, y, ONCEILINGZ, MT_RAINPLR1+actor->special2);
- mo->target = actor->target;
- mo->momx = 1; // Force collision detection
- mo->momz = -mo->info->speed;
- mo->special2 = actor->special2; // Transfer player number
- P_CheckMissileSpawn(mo);
- if(!(actor->special1&31))
- {
- S_StartSound(actor, sfx_ramrain);
- }
- actor->special1++;
+ if (actor->health-- == 0)
+ {
+ P_SetMobjState(actor, S_NULL);
+ playerNum = netgame ? actor->special2 : 0;
+ if (!playeringame[playerNum])
+ { // Player left the game
+ return;
+ }
+ player = &players[playerNum];
+ if (player->health <= 0)
+ { // Player is dead
+ return;
+ }
+ if (player->rain1 == actor)
+ {
+ player->rain1 = NULL;
+ }
+ else if (player->rain2 == actor)
+ {
+ player->rain2 = NULL;
+ }
+ return;
+ }
+ if (P_Random() < 25)
+ { // Fudge rain frequency
+ return;
+ }
+ x = actor->x + ((P_Random() & 127) - 64) * FRACUNIT;
+ y = actor->y + ((P_Random() & 127) - 64) * FRACUNIT;
+ mo = P_SpawnMobj(x, y, ONCEILINGZ, MT_RAINPLR1 + actor->special2);
+ mo->target = actor->target;
+ mo->momx = 1; // Force collision detection
+ mo->momz = -mo->info->speed;
+ mo->special2 = actor->special2; // Transfer player number
+ P_CheckMissileSpawn(mo);
+ if (!(actor->special1 & 31))
+ {
+ S_StartSound(actor, sfx_ramrain);
+ }
+ actor->special1++;
}
//----------------------------------------------------------------------------
@@ -1554,16 +1579,16 @@
//
//----------------------------------------------------------------------------
-void A_RainImpact(mobj_t *actor)
+void A_RainImpact(mobj_t * actor)
{
- if(actor->z > actor->floorz)
- {
- P_SetMobjState(actor, S_RAINAIRXPLR1_1+actor->special2);
- }
- else if(P_Random() < 40)
- {
- P_HitFloor(actor);
- }
+ if (actor->z > actor->floorz)
+ {
+ P_SetMobjState(actor, S_RAINAIRXPLR1_1 + actor->special2);
+ }
+ else if (P_Random() < 40)
+ {
+ P_HitFloor(actor);
+ }
}
//----------------------------------------------------------------------------
@@ -1572,9 +1597,9 @@
//
//----------------------------------------------------------------------------
-void A_HideInCeiling(mobj_t *actor)
+void A_HideInCeiling(mobj_t * actor)
{
- actor->z = actor->ceilingz+4*FRACUNIT;
+ actor->z = actor->ceilingz + 4 * FRACUNIT;
}
//----------------------------------------------------------------------------
@@ -1583,17 +1608,17 @@
//
//----------------------------------------------------------------------------
-void A_FirePhoenixPL1(player_t *player, pspdef_t *psp)
+void A_FirePhoenixPL1(player_t * player, pspdef_t * psp)
{
- angle_t angle;
+ angle_t angle;
- player->ammo[am_phoenixrod] -= USE_PHRD_AMMO_1;
- P_SpawnPlayerMissile(player->mo, MT_PHOENIXFX1);
- //P_SpawnPlayerMissile(player->mo, MT_MNTRFX2);
- angle = player->mo->angle+ANG180;
- angle >>= ANGLETOFINESHIFT;
- player->mo->momx += FixedMul(4*FRACUNIT, finecosine[angle]);
- player->mo->momy += FixedMul(4*FRACUNIT, finesine[angle]);
+ player->ammo[am_phoenixrod] -= USE_PHRD_AMMO_1;
+ P_SpawnPlayerMissile(player->mo, MT_PHOENIXFX1);
+ //P_SpawnPlayerMissile(player->mo, MT_MNTRFX2);
+ angle = player->mo->angle + ANG180;
+ angle >>= ANGLETOFINESHIFT;
+ player->mo->momx += FixedMul(4 * FRACUNIT, finecosine[angle]);
+ player->mo->momy += FixedMul(4 * FRACUNIT, finesine[angle]);
}
//----------------------------------------------------------------------------
@@ -1602,24 +1627,24 @@
//
//----------------------------------------------------------------------------
-void A_PhoenixPuff(mobj_t *actor)
+void A_PhoenixPuff(mobj_t * actor)
{
- mobj_t *puff;
- angle_t angle;
+ mobj_t *puff;
+ angle_t angle;
- P_SeekerMissile(actor, ANGLE_1*5, ANGLE_1*10);
- puff = P_SpawnMobj(actor->x, actor->y, actor->z, MT_PHOENIXPUFF);
- angle = actor->angle+ANG90;
- angle >>= ANGLETOFINESHIFT;
- puff->momx = FixedMul(FRACUNIT*1.3, finecosine[angle]);
- puff->momy = FixedMul(FRACUNIT*1.3, finesine[angle]);
- puff->momz = 0;
- puff = P_SpawnMobj(actor->x, actor->y, actor->z, MT_PHOENIXPUFF);
- angle = actor->angle-ANG90;
- angle >>= ANGLETOFINESHIFT;
- puff->momx = FixedMul(FRACUNIT*1.3, finecosine[angle]);
- puff->momy = FixedMul(FRACUNIT*1.3, finesine[angle]);
- puff->momz = 0;
+ P_SeekerMissile(actor, ANGLE_1 * 5, ANGLE_1 * 10);
+ puff = P_SpawnMobj(actor->x, actor->y, actor->z, MT_PHOENIXPUFF);
+ angle = actor->angle + ANG90;
+ angle >>= ANGLETOFINESHIFT;
+ puff->momx = FixedMul(FRACUNIT * 1.3, finecosine[angle]);
+ puff->momy = FixedMul(FRACUNIT * 1.3, finesine[angle]);
+ puff->momz = 0;
+ puff = P_SpawnMobj(actor->x, actor->y, actor->z, MT_PHOENIXPUFF);
+ angle = actor->angle - ANG90;
+ angle >>= ANGLETOFINESHIFT;
+ puff->momx = FixedMul(FRACUNIT * 1.3, finecosine[angle]);
+ puff->momy = FixedMul(FRACUNIT * 1.3, finesine[angle]);
+ puff->momz = 0;
}
//----------------------------------------------------------------------------
@@ -1628,9 +1653,9 @@
//
//----------------------------------------------------------------------------
-void A_InitPhoenixPL2(player_t *player, pspdef_t *psp)
+void A_InitPhoenixPL2(player_t * player, pspdef_t * psp)
{
- player->flamecount = FLAME_THROWER_TICS;
+ player->flamecount = FLAME_THROWER_TICS;
}
//----------------------------------------------------------------------------
@@ -1641,43 +1666,43 @@
//
//----------------------------------------------------------------------------
-void A_FirePhoenixPL2(player_t *player, pspdef_t *psp)
+void A_FirePhoenixPL2(player_t * player, pspdef_t * psp)
{
- mobj_t *mo;
- mobj_t *pmo;
- angle_t angle;
- fixed_t x, y, z;
- fixed_t slope;
+ mobj_t *mo;
+ mobj_t *pmo;
+ angle_t angle;
+ fixed_t x, y, z;
+ fixed_t slope;
- if(--player->flamecount == 0)
- { // Out of flame
- P_SetPsprite(player, ps_weapon, S_PHOENIXATK2_4);
- player->refire = 0;
- return;
- }
- pmo = player->mo;
- angle = pmo->angle;
- x = pmo->x+((P_Random()-P_Random())<<9);
- y = pmo->y+((P_Random()-P_Random())<<9);
- z = pmo->z+26*FRACUNIT+((player->lookdir)<<FRACBITS)/173;
- if(pmo->flags2&MF2_FEETARECLIPPED)
- {
- z -= FOOTCLIPSIZE;
- }
- slope = ((player->lookdir)<<FRACBITS)/173+(FRACUNIT/10);
- mo = P_SpawnMobj(x, y, z, MT_PHOENIXFX2);
- mo->target = pmo;
- mo->angle = angle;
- mo->momx = pmo->momx+FixedMul(mo->info->speed,
- finecosine[angle>>ANGLETOFINESHIFT]);
- mo->momy = pmo->momy+FixedMul(mo->info->speed,
- finesine[angle>>ANGLETOFINESHIFT]);
- mo->momz = FixedMul(mo->info->speed, slope);
- if(!player->refire || !(leveltime%38))
- {
- S_StartSound(player->mo, sfx_phopow);
- }
- P_CheckMissileSpawn(mo);
+ if (--player->flamecount == 0)
+ { // Out of flame
+ P_SetPsprite(player, ps_weapon, S_PHOENIXATK2_4);
+ player->refire = 0;
+ return;
+ }
+ pmo = player->mo;
+ angle = pmo->angle;
+ x = pmo->x + ((P_Random() - P_Random()) << 9);
+ y = pmo->y + ((P_Random() - P_Random()) << 9);
+ z = pmo->z + 26 * FRACUNIT + ((player->lookdir) << FRACBITS) / 173;
+ if (pmo->flags2 & MF2_FEETARECLIPPED)
+ {
+ z -= FOOTCLIPSIZE;
+ }
+ slope = ((player->lookdir) << FRACBITS) / 173 + (FRACUNIT / 10);
+ mo = P_SpawnMobj(x, y, z, MT_PHOENIXFX2);
+ mo->target = pmo;
+ mo->angle = angle;
+ mo->momx = pmo->momx + FixedMul(mo->info->speed,
+ finecosine[angle >> ANGLETOFINESHIFT]);
+ mo->momy = pmo->momy + FixedMul(mo->info->speed,
+ finesine[angle >> ANGLETOFINESHIFT]);
+ mo->momz = FixedMul(mo->info->speed, slope);
+ if (!player->refire || !(leveltime % 38))
+ {
+ S_StartSound(player->mo, sfx_phopow);
+ }
+ P_CheckMissileSpawn(mo);
}
//----------------------------------------------------------------------------
@@ -1686,9 +1711,9 @@
//
//----------------------------------------------------------------------------
-void A_ShutdownPhoenixPL2(player_t *player, pspdef_t *psp)
+void A_ShutdownPhoenixPL2(player_t * player, pspdef_t * psp)
{
- player->ammo[am_phoenixrod] -= USE_PHRD_AMMO_2;
+ player->ammo[am_phoenixrod] -= USE_PHRD_AMMO_2;
}
//----------------------------------------------------------------------------
@@ -1697,9 +1722,9 @@
//
//----------------------------------------------------------------------------
-void A_FlameEnd(mobj_t *actor)
+void A_FlameEnd(mobj_t * actor)
{
- actor->momz += 1.5*FRACUNIT;
+ actor->momz += 1.5 * FRACUNIT;
}
//----------------------------------------------------------------------------
@@ -1708,9 +1733,9 @@
//
//----------------------------------------------------------------------------
-void A_FloatPuff(mobj_t *puff)
+void A_FloatPuff(mobj_t * puff)
{
- puff->momz += 1.8*FRACUNIT;
+ puff->momz += 1.8 * FRACUNIT;
}
//---------------------------------------------------------------------------
@@ -1719,97 +1744,97 @@
//
//---------------------------------------------------------------------------
-void A_GauntletAttack(player_t *player, pspdef_t *psp)
+void A_GauntletAttack(player_t * player, pspdef_t * psp)
{
- angle_t angle;
- int damage;
- int slope;
- int randVal;
- fixed_t dist;
+ angle_t angle;
+ int damage;
+ int slope;
+ int randVal;
+ fixed_t dist;
- psp->sx = ((P_Random()&3)-2)*FRACUNIT;
- psp->sy = WEAPONTOP+(P_Random()&3)*FRACUNIT;
- angle = player->mo->angle;
- if(player->powers[pw_weaponlevel2])
- {
- damage = HITDICE(2);
- dist = 4*MELEERANGE;
- angle += (P_Random()-P_Random())<<17;
- PuffType = MT_GAUNTLETPUFF2;
- }
- else
- {
- damage = HITDICE(2);
- dist = MELEERANGE+1;
- angle += (P_Random()-P_Random())<<18;
- PuffType = MT_GAUNTLETPUFF1;
- }
- slope = P_AimLineAttack(player->mo, angle, dist);
- P_LineAttack(player->mo, angle, dist, slope, damage);
- if(!linetarget)
- {
- if(P_Random() > 64)
- {
- player->extralight = !player->extralight;
- }
- S_StartSound(player->mo, sfx_gntful);
- return;
- }
- randVal = P_Random();
- if(randVal < 64)
- {
- player->extralight = 0;
- }
- else if(randVal < 160)
- {
- player->extralight = 1;
- }
- else
- {
- player->extralight = 2;
- }
- if(player->powers[pw_weaponlevel2])
- {
- P_GiveBody(player, damage>>1);
- S_StartSound(player->mo, sfx_gntpow);
- }
- else
- {
- S_StartSound(player->mo, sfx_gnthit);
- }
- // turn to face target
- angle = R_PointToAngle2(player->mo->x, player->mo->y,
- linetarget->x, linetarget->y);
- if(angle-player->mo->angle > ANG180)
- {
- if(angle-player->mo->angle < -ANG90/20)
- player->mo->angle = angle+ANG90/21;
- else
- player->mo->angle -= ANG90/20;
- }
- else
- {
- if(angle-player->mo->angle > ANG90/20)
- player->mo->angle = angle-ANG90/21;
- else
- player->mo->angle += ANG90/20;
- }
- player->mo->flags |= MF_JUSTATTACKED;
+ psp->sx = ((P_Random() & 3) - 2) * FRACUNIT;
+ psp->sy = WEAPONTOP + (P_Random() & 3) * FRACUNIT;
+ angle = player->mo->angle;
+ if (player->powers[pw_weaponlevel2])
+ {
+ damage = HITDICE(2);
+ dist = 4 * MELEERANGE;
+ angle += (P_Random() - P_Random()) << 17;
+ PuffType = MT_GAUNTLETPUFF2;
+ }
+ else
+ {
+ damage = HITDICE(2);
+ dist = MELEERANGE + 1;
+ angle += (P_Random() - P_Random()) << 18;
+ PuffType = MT_GAUNTLETPUFF1;
+ }
+ slope = P_AimLineAttack(player->mo, angle, dist);
+ P_LineAttack(player->mo, angle, dist, slope, damage);
+ if (!linetarget)
+ {
+ if (P_Random() > 64)
+ {
+ player->extralight = !player->extralight;
+ }
+ S_StartSound(player->mo, sfx_gntful);
+ return;
+ }
+ randVal = P_Random();
+ if (randVal < 64)
+ {
+ player->extralight = 0;
+ }
+ else if (randVal < 160)
+ {
+ player->extralight = 1;
+ }
+ else
+ {
+ player->extralight = 2;
+ }
+ if (player->powers[pw_weaponlevel2])
+ {
+ P_GiveBody(player, damage >> 1);
+ S_StartSound(player->mo, sfx_gntpow);
+ }
+ else
+ {
+ S_StartSound(player->mo, sfx_gnthit);
+ }
+ // turn to face target
+ angle = R_PointToAngle2(player->mo->x, player->mo->y,
+ linetarget->x, linetarget->y);
+ if (angle - player->mo->angle > ANG180)
+ {
+ if (angle - player->mo->angle < -ANG90 / 20)
+ player->mo->angle = angle + ANG90 / 21;
+ else
+ player->mo->angle -= ANG90 / 20;
+ }
+ else
+ {
+ if (angle - player->mo->angle > ANG90 / 20)
+ player->mo->angle = angle - ANG90 / 21;
+ else
+ player->mo->angle += ANG90 / 20;
+ }
+ player->mo->flags |= MF_JUSTATTACKED;
}
-void A_Light0(player_t *player, pspdef_t *psp)
+void A_Light0(player_t * player, pspdef_t * psp)
{
- player->extralight = 0;
+ player->extralight = 0;
}
-void A_Light1(player_t *player, pspdef_t *psp)
+void A_Light1(player_t * player, pspdef_t * psp)
{
- player->extralight = 1;
+ player->extralight = 1;
}
-void A_Light2(player_t *player, pspdef_t *psp)
+void A_Light2(player_t * player, pspdef_t * psp)
{
- player->extralight = 2;
+ player->extralight = 2;
}
//------------------------------------------------------------------------
@@ -1820,18 +1845,18 @@
//
//------------------------------------------------------------------------
-void P_SetupPsprites(player_t *player)
+void P_SetupPsprites(player_t * player)
{
- int i;
+ int i;
- // Remove all psprites
- for(i = 0; i < NUMPSPRITES; i++)
- {
- player->psprites[i].state = NULL;
- }
- // Spawn the ready weapon
- player->pendingweapon = player->readyweapon;
- P_BringUpWeapon(player);
+ // Remove all psprites
+ for (i = 0; i < NUMPSPRITES; i++)
+ {
+ player->psprites[i].state = NULL;
+ }
+ // Spawn the ready weapon
+ player->pendingweapon = player->readyweapon;
+ P_BringUpWeapon(player);
}
//------------------------------------------------------------------------
@@ -1842,28 +1867,28 @@
//
//------------------------------------------------------------------------
-void P_MovePsprites(player_t *player)
+void P_MovePsprites(player_t * player)
{
- int i;
- pspdef_t *psp;
- state_t *state;
+ int i;
+ pspdef_t *psp;
+ state_t *state;
- psp = &player->psprites[0];
- for(i = 0; i < NUMPSPRITES; i++, psp++)
- {
- if((state = psp->state) != 0) // a null state means not active
- {
- // drop tic count and possibly change state
- if(psp->tics != -1) // a -1 tic count never changes
- {
- psp->tics--;
- if(!psp->tics)
- {
- P_SetPsprite(player, i, psp->state->nextstate);
- }
- }
- }
- }
- player->psprites[ps_flash].sx = player->psprites[ps_weapon].sx;
- player->psprites[ps_flash].sy = player->psprites[ps_weapon].sy;
+ psp = &player->psprites[0];
+ for (i = 0; i < NUMPSPRITES; i++, psp++)
+ {
+ if ((state = psp->state) != 0) // a null state means not active
+ {
+ // drop tic count and possibly change state
+ if (psp->tics != -1) // a -1 tic count never changes
+ {
+ psp->tics--;
+ if (!psp->tics)
+ {
+ P_SetPsprite(player, i, psp->state->nextstate);
+ }
+ }
+ }
+ }
+ player->psprites[ps_flash].sx = player->psprites[ps_weapon].sx;
+ player->psprites[ps_flash].sy = player->psprites[ps_weapon].sy;
}
--- a/src/heretic/p_setup.c
+++ b/src/heretic/p_setup.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_main.c
@@ -7,39 +29,39 @@
#include "P_local.h"
#include "soundst.h"
-void P_SpawnMapThing (mapthing_t *mthing);
+void P_SpawnMapThing(mapthing_t * mthing);
-int numvertexes;
-vertex_t *vertexes;
+int numvertexes;
+vertex_t *vertexes;
-int numsegs;
-seg_t *segs;
+int numsegs;
+seg_t *segs;
-int numsectors;
-sector_t *sectors;
+int numsectors;
+sector_t *sectors;
-int numsubsectors;
-subsector_t *subsectors;
+int numsubsectors;
+subsector_t *subsectors;
-int numnodes;
-node_t *nodes;
+int numnodes;
+node_t *nodes;
-int numlines;
-line_t *lines;
+int numlines;
+line_t *lines;
-int numsides;
-side_t *sides;
+int numsides;
+side_t *sides;
-short *blockmaplump; // offsets in blockmap are from here
-short *blockmap;
-int bmapwidth, bmapheight; // in mapblocks
-fixed_t bmaporgx, bmaporgy; // origin of block map
-mobj_t **blocklinks; // for thing chains
+short *blockmaplump; // offsets in blockmap are from here
+short *blockmap;
+int bmapwidth, bmapheight; // in mapblocks
+fixed_t bmaporgx, bmaporgy; // origin of block map
+mobj_t **blocklinks; // for thing chains
-byte *rejectmatrix; // for fast sight rejection
+byte *rejectmatrix; // for fast sight rejection
-mapthing_t deathmatchstarts[10], *deathmatch_p;
-mapthing_t playerstarts[MAXPLAYERS];
+mapthing_t deathmatchstarts[10], *deathmatch_p;
+mapthing_t playerstarts[MAXPLAYERS];
/*
=================
@@ -49,26 +71,26 @@
=================
*/
-void P_LoadVertexes (int lump)
+void P_LoadVertexes(int lump)
{
- byte *data;
- int i;
- mapvertex_t *ml;
- vertex_t *li;
-
- numvertexes = W_LumpLength (lump) / sizeof(mapvertex_t);
- vertexes = Z_Malloc (numvertexes*sizeof(vertex_t),PU_LEVEL,0);
- data = W_CacheLumpNum (lump,PU_STATIC);
-
- ml = (mapvertex_t *)data;
- li = vertexes;
- for (i=0 ; i<numvertexes ; i++, li++, ml++)
- {
- li->x = SHORT(ml->x)<<FRACBITS;
- li->y = SHORT(ml->y)<<FRACBITS;
- }
-
- Z_Free (data);
+ byte *data;
+ int i;
+ mapvertex_t *ml;
+ vertex_t *li;
+
+ numvertexes = W_LumpLength(lump) / sizeof(mapvertex_t);
+ vertexes = Z_Malloc(numvertexes * sizeof(vertex_t), PU_LEVEL, 0);
+ data = W_CacheLumpNum(lump, PU_STATIC);
+
+ ml = (mapvertex_t *) data;
+ li = vertexes;
+ for (i = 0; i < numvertexes; i++, li++, ml++)
+ {
+ li->x = SHORT(ml->x) << FRACBITS;
+ li->y = SHORT(ml->y) << FRACBITS;
+ }
+
+ Z_Free(data);
}
@@ -80,42 +102,42 @@
=================
*/
-void P_LoadSegs (int lump)
+void P_LoadSegs(int lump)
{
- byte *data;
- int i;
- mapseg_t *ml;
- seg_t *li;
- line_t *ldef;
- int linedef, side;
-
- numsegs = W_LumpLength (lump) / sizeof(mapseg_t);
- segs = Z_Malloc (numsegs*sizeof(seg_t),PU_LEVEL,0);
- memset (segs, 0, numsegs*sizeof(seg_t));
- data = W_CacheLumpNum (lump,PU_STATIC);
-
- ml = (mapseg_t *)data;
- li = segs;
- for (i=0 ; i<numsegs ; i++, li++, ml++)
- {
- li->v1 = &vertexes[SHORT(ml->v1)];
- li->v2 = &vertexes[SHORT(ml->v2)];
-
- li->angle = (SHORT(ml->angle))<<16;
- li->offset = (SHORT(ml->offset))<<16;
- linedef = SHORT(ml->linedef);
- ldef = &lines[linedef];
- li->linedef = ldef;
- side = SHORT(ml->side);
- li->sidedef = &sides[ldef->sidenum[side]];
- li->frontsector = sides[ldef->sidenum[side]].sector;
- if (ldef-> flags & ML_TWOSIDED)
- li->backsector = sides[ldef->sidenum[side^1]].sector;
- else
- li->backsector = 0;
- }
-
- Z_Free (data);
+ byte *data;
+ int i;
+ mapseg_t *ml;
+ seg_t *li;
+ line_t *ldef;
+ int linedef, side;
+
+ numsegs = W_LumpLength(lump) / sizeof(mapseg_t);
+ segs = Z_Malloc(numsegs * sizeof(seg_t), PU_LEVEL, 0);
+ memset(segs, 0, numsegs * sizeof(seg_t));
+ data = W_CacheLumpNum(lump, PU_STATIC);
+
+ ml = (mapseg_t *) data;
+ li = segs;
+ for (i = 0; i < numsegs; i++, li++, ml++)
+ {
+ li->v1 = &vertexes[SHORT(ml->v1)];
+ li->v2 = &vertexes[SHORT(ml->v2)];
+
+ li->angle = (SHORT(ml->angle)) << 16;
+ li->offset = (SHORT(ml->offset)) << 16;
+ linedef = SHORT(ml->linedef);
+ ldef = &lines[linedef];
+ li->linedef = ldef;
+ side = SHORT(ml->side);
+ li->sidedef = &sides[ldef->sidenum[side]];
+ li->frontsector = sides[ldef->sidenum[side]].sector;
+ if (ldef->flags & ML_TWOSIDED)
+ li->backsector = sides[ldef->sidenum[side ^ 1]].sector;
+ else
+ li->backsector = 0;
+ }
+
+ Z_Free(data);
}
@@ -127,27 +149,27 @@
=================
*/
-void P_LoadSubsectors (int lump)
+void P_LoadSubsectors(int lump)
{
- byte *data;
- int i;
- mapsubsector_t *ms;
- subsector_t *ss;
-
- numsubsectors = W_LumpLength (lump) / sizeof(mapsubsector_t);
- subsectors = Z_Malloc (numsubsectors*sizeof(subsector_t),PU_LEVEL,0);
- data = W_CacheLumpNum (lump,PU_STATIC);
-
- ms = (mapsubsector_t *)data;
- memset (subsectors,0, numsubsectors*sizeof(subsector_t));
- ss = subsectors;
- for (i=0 ; i<numsubsectors ; i++, ss++, ms++)
- {
- ss->numlines = SHORT(ms->numsegs);
- ss->firstline = SHORT(ms->firstseg);
- }
-
- Z_Free (data);
+ byte *data;
+ int i;
+ mapsubsector_t *ms;
+ subsector_t *ss;
+
+ numsubsectors = W_LumpLength(lump) / sizeof(mapsubsector_t);
+ subsectors = Z_Malloc(numsubsectors * sizeof(subsector_t), PU_LEVEL, 0);
+ data = W_CacheLumpNum(lump, PU_STATIC);
+
+ ms = (mapsubsector_t *) data;
+ memset(subsectors, 0, numsubsectors * sizeof(subsector_t));
+ ss = subsectors;
+ for (i = 0; i < numsubsectors; i++, ss++, ms++)
+ {
+ ss->numlines = SHORT(ms->numsegs);
+ ss->firstline = SHORT(ms->firstseg);
+ }
+
+ Z_Free(data);
}
@@ -159,33 +181,33 @@
=================
*/
-void P_LoadSectors (int lump)
+void P_LoadSectors(int lump)
{
- byte *data;
- int i;
- mapsector_t *ms;
- sector_t *ss;
-
- numsectors = W_LumpLength (lump) / sizeof(mapsector_t);
- sectors = Z_Malloc (numsectors*sizeof(sector_t),PU_LEVEL,0);
- memset (sectors, 0, numsectors*sizeof(sector_t));
- data = W_CacheLumpNum (lump,PU_STATIC);
-
- ms = (mapsector_t *)data;
- ss = sectors;
- for (i=0 ; i<numsectors ; i++, ss++, ms++)
- {
- ss->floorheight = SHORT(ms->floorheight)<<FRACBITS;
- ss->ceilingheight = SHORT(ms->ceilingheight)<<FRACBITS;
- ss->floorpic = R_FlatNumForName(ms->floorpic);
- ss->ceilingpic = R_FlatNumForName(ms->ceilingpic);
- ss->lightlevel = SHORT(ms->lightlevel);
- ss->special = SHORT(ms->special);
- ss->tag = SHORT(ms->tag);
- ss->thinglist = NULL;
- }
-
- Z_Free (data);
+ byte *data;
+ int i;
+ mapsector_t *ms;
+ sector_t *ss;
+
+ numsectors = W_LumpLength(lump) / sizeof(mapsector_t);
+ sectors = Z_Malloc(numsectors * sizeof(sector_t), PU_LEVEL, 0);
+ memset(sectors, 0, numsectors * sizeof(sector_t));
+ data = W_CacheLumpNum(lump, PU_STATIC);
+
+ ms = (mapsector_t *) data;
+ ss = sectors;
+ for (i = 0; i < numsectors; i++, ss++, ms++)
+ {
+ ss->floorheight = SHORT(ms->floorheight) << FRACBITS;
+ ss->ceilingheight = SHORT(ms->ceilingheight) << FRACBITS;
+ ss->floorpic = R_FlatNumForName(ms->floorpic);
+ ss->ceilingpic = R_FlatNumForName(ms->ceilingpic);
+ ss->lightlevel = SHORT(ms->lightlevel);
+ ss->special = SHORT(ms->special);
+ ss->tag = SHORT(ms->tag);
+ ss->thinglist = NULL;
+ }
+
+ Z_Free(data);
}
@@ -197,34 +219,34 @@
=================
*/
-void P_LoadNodes (int lump)
+void P_LoadNodes(int lump)
{
- byte *data;
- int i,j,k;
- mapnode_t *mn;
- node_t *no;
-
- numnodes = W_LumpLength (lump) / sizeof(mapnode_t);
- nodes = Z_Malloc (numnodes*sizeof(node_t),PU_LEVEL,0);
- data = W_CacheLumpNum (lump,PU_STATIC);
-
- mn = (mapnode_t *)data;
- no = nodes;
- for (i=0 ; i<numnodes ; i++, no++, mn++)
- {
- no->x = SHORT(mn->x)<<FRACBITS;
- no->y = SHORT(mn->y)<<FRACBITS;
- no->dx = SHORT(mn->dx)<<FRACBITS;
- no->dy = SHORT(mn->dy)<<FRACBITS;
- for (j=0 ; j<2 ; j++)
- {
- no->children[j] = SHORT(mn->children[j]);
- for (k=0 ; k<4 ; k++)
- no->bbox[j][k] = SHORT(mn->bbox[j][k])<<FRACBITS;
- }
- }
-
- Z_Free (data);
+ byte *data;
+ int i, j, k;
+ mapnode_t *mn;
+ node_t *no;
+
+ numnodes = W_LumpLength(lump) / sizeof(mapnode_t);
+ nodes = Z_Malloc(numnodes * sizeof(node_t), PU_LEVEL, 0);
+ data = W_CacheLumpNum(lump, PU_STATIC);
+
+ mn = (mapnode_t *) data;
+ no = nodes;
+ for (i = 0; i < numnodes; i++, no++, mn++)
+ {
+ no->x = SHORT(mn->x) << FRACBITS;
+ no->y = SHORT(mn->y) << FRACBITS;
+ no->dx = SHORT(mn->dx) << FRACBITS;
+ no->dy = SHORT(mn->dy) << FRACBITS;
+ for (j = 0; j < 2; j++)
+ {
+ no->children[j] = SHORT(mn->children[j]);
+ for (k = 0; k < 4; k++)
+ no->bbox[j][k] = SHORT(mn->bbox[j][k]) << FRACBITS;
+ }
+ }
+
+ Z_Free(data);
}
@@ -237,28 +259,28 @@
=================
*/
-void P_LoadThings (int lump)
+void P_LoadThings(int lump)
{
- byte *data;
- int i;
- mapthing_t *mt;
- int numthings;
-
- data = W_CacheLumpNum (lump,PU_STATIC);
- numthings = W_LumpLength (lump) / sizeof(mapthing_t);
-
- mt = (mapthing_t *)data;
- for (i=0 ; i<numthings ; i++, mt++)
- {
- mt->x = SHORT(mt->x);
- mt->y = SHORT(mt->y);
- mt->angle = SHORT(mt->angle);
- mt->type = SHORT(mt->type);
- mt->options = SHORT(mt->options);
- P_SpawnMapThing (mt);
- }
-
- Z_Free (data);
+ byte *data;
+ int i;
+ mapthing_t *mt;
+ int numthings;
+
+ data = W_CacheLumpNum(lump, PU_STATIC);
+ numthings = W_LumpLength(lump) / sizeof(mapthing_t);
+
+ mt = (mapthing_t *) data;
+ for (i = 0; i < numthings; i++, mt++)
+ {
+ mt->x = SHORT(mt->x);
+ mt->y = SHORT(mt->y);
+ mt->angle = SHORT(mt->angle);
+ mt->type = SHORT(mt->type);
+ mt->options = SHORT(mt->options);
+ P_SpawnMapThing(mt);
+ }
+
+ Z_Free(data);
}
@@ -272,75 +294,75 @@
=================
*/
-void P_LoadLineDefs (int lump)
+void P_LoadLineDefs(int lump)
{
- byte *data;
- int i;
- maplinedef_t *mld;
- line_t *ld;
- vertex_t *v1, *v2;
-
- numlines = W_LumpLength (lump) / sizeof(maplinedef_t);
- lines = Z_Malloc (numlines*sizeof(line_t),PU_LEVEL,0);
- memset (lines, 0, numlines*sizeof(line_t));
- data = W_CacheLumpNum (lump,PU_STATIC);
-
- mld = (maplinedef_t *)data;
- ld = lines;
- for (i=0 ; i<numlines ; i++, mld++, ld++)
- {
- ld->flags = SHORT(mld->flags);
- ld->special = SHORT(mld->special);
- ld->tag = SHORT(mld->tag);
- v1 = ld->v1 = &vertexes[SHORT(mld->v1)];
- v2 = ld->v2 = &vertexes[SHORT(mld->v2)];
- ld->dx = v2->x - v1->x;
- ld->dy = v2->y - v1->y;
- if (!ld->dx)
- ld->slopetype = ST_VERTICAL;
- else if (!ld->dy)
- ld->slopetype = ST_HORIZONTAL;
- else
- {
- if (FixedDiv (ld->dy , ld->dx) > 0)
- ld->slopetype = ST_POSITIVE;
- else
- ld->slopetype = ST_NEGATIVE;
- }
-
- if (v1->x < v2->x)
- {
- ld->bbox[BOXLEFT] = v1->x;
- ld->bbox[BOXRIGHT] = v2->x;
- }
- else
- {
- ld->bbox[BOXLEFT] = v2->x;
- ld->bbox[BOXRIGHT] = v1->x;
- }
- if (v1->y < v2->y)
- {
- ld->bbox[BOXBOTTOM] = v1->y;
- ld->bbox[BOXTOP] = v2->y;
- }
- else
- {
- ld->bbox[BOXBOTTOM] = v2->y;
- ld->bbox[BOXTOP] = v1->y;
- }
- ld->sidenum[0] = SHORT(mld->sidenum[0]);
- ld->sidenum[1] = SHORT(mld->sidenum[1]);
- if (ld->sidenum[0] != -1)
- ld->frontsector = sides[ld->sidenum[0]].sector;
- else
- ld->frontsector = 0;
- if (ld->sidenum[1] != -1)
- ld->backsector = sides[ld->sidenum[1]].sector;
- else
- ld->backsector = 0;
- }
-
- Z_Free (data);
+ byte *data;
+ int i;
+ maplinedef_t *mld;
+ line_t *ld;
+ vertex_t *v1, *v2;
+
+ numlines = W_LumpLength(lump) / sizeof(maplinedef_t);
+ lines = Z_Malloc(numlines * sizeof(line_t), PU_LEVEL, 0);
+ memset(lines, 0, numlines * sizeof(line_t));
+ data = W_CacheLumpNum(lump, PU_STATIC);
+
+ mld = (maplinedef_t *) data;
+ ld = lines;
+ for (i = 0; i < numlines; i++, mld++, ld++)
+ {
+ ld->flags = SHORT(mld->flags);
+ ld->special = SHORT(mld->special);
+ ld->tag = SHORT(mld->tag);
+ v1 = ld->v1 = &vertexes[SHORT(mld->v1)];
+ v2 = ld->v2 = &vertexes[SHORT(mld->v2)];
+ ld->dx = v2->x - v1->x;
+ ld->dy = v2->y - v1->y;
+ if (!ld->dx)
+ ld->slopetype = ST_VERTICAL;
+ else if (!ld->dy)
+ ld->slopetype = ST_HORIZONTAL;
+ else
+ {
+ if (FixedDiv(ld->dy, ld->dx) > 0)
+ ld->slopetype = ST_POSITIVE;
+ else
+ ld->slopetype = ST_NEGATIVE;
+ }
+
+ if (v1->x < v2->x)
+ {
+ ld->bbox[BOXLEFT] = v1->x;
+ ld->bbox[BOXRIGHT] = v2->x;
+ }
+ else
+ {
+ ld->bbox[BOXLEFT] = v2->x;
+ ld->bbox[BOXRIGHT] = v1->x;
+ }
+ if (v1->y < v2->y)
+ {
+ ld->bbox[BOXBOTTOM] = v1->y;
+ ld->bbox[BOXTOP] = v2->y;
+ }
+ else
+ {
+ ld->bbox[BOXBOTTOM] = v2->y;
+ ld->bbox[BOXTOP] = v1->y;
+ }
+ ld->sidenum[0] = SHORT(mld->sidenum[0]);
+ ld->sidenum[1] = SHORT(mld->sidenum[1]);
+ if (ld->sidenum[0] != -1)
+ ld->frontsector = sides[ld->sidenum[0]].sector;
+ else
+ ld->frontsector = 0;
+ if (ld->sidenum[1] != -1)
+ ld->backsector = sides[ld->sidenum[1]].sector;
+ else
+ ld->backsector = 0;
+ }
+
+ Z_Free(data);
}
@@ -352,31 +374,31 @@
=================
*/
-void P_LoadSideDefs (int lump)
+void P_LoadSideDefs(int lump)
{
- byte *data;
- int i;
- mapsidedef_t *msd;
- side_t *sd;
-
- numsides = W_LumpLength (lump) / sizeof(mapsidedef_t);
- sides = Z_Malloc (numsides*sizeof(side_t),PU_LEVEL,0);
- memset (sides, 0, numsides*sizeof(side_t));
- data = W_CacheLumpNum (lump,PU_STATIC);
-
- msd = (mapsidedef_t *)data;
- sd = sides;
- for (i=0 ; i<numsides ; i++, msd++, sd++)
- {
- sd->textureoffset = SHORT(msd->textureoffset)<<FRACBITS;
- sd->rowoffset = SHORT(msd->rowoffset)<<FRACBITS;
- sd->toptexture = R_TextureNumForName(msd->toptexture);
- sd->bottomtexture = R_TextureNumForName(msd->bottomtexture);
- sd->midtexture = R_TextureNumForName(msd->midtexture);
- sd->sector = §ors[SHORT(msd->sector)];
- }
-
- Z_Free (data);
+ byte *data;
+ int i;
+ mapsidedef_t *msd;
+ side_t *sd;
+
+ numsides = W_LumpLength(lump) / sizeof(mapsidedef_t);
+ sides = Z_Malloc(numsides * sizeof(side_t), PU_LEVEL, 0);
+ memset(sides, 0, numsides * sizeof(side_t));
+ data = W_CacheLumpNum(lump, PU_STATIC);
+
+ msd = (mapsidedef_t *) data;
+ sd = sides;
+ for (i = 0; i < numsides; i++, msd++, sd++)
+ {
+ sd->textureoffset = SHORT(msd->textureoffset) << FRACBITS;
+ sd->rowoffset = SHORT(msd->rowoffset) << FRACBITS;
+ sd->toptexture = R_TextureNumForName(msd->toptexture);
+ sd->bottomtexture = R_TextureNumForName(msd->bottomtexture);
+ sd->midtexture = R_TextureNumForName(msd->midtexture);
+ sd->sector = §ors[SHORT(msd->sector)];
+ }
+
+ Z_Free(data);
}
@@ -389,25 +411,25 @@
=================
*/
-void P_LoadBlockMap (int lump)
+void P_LoadBlockMap(int lump)
{
- int i, count;
-
- blockmaplump = W_CacheLumpNum (lump,PU_LEVEL);
- blockmap = blockmaplump+4;
- count = W_LumpLength (lump)/2;
- for (i=0 ; i<count ; i++)
- blockmaplump[i] = SHORT(blockmaplump[i]);
-
- bmaporgx = blockmaplump[0]<<FRACBITS;
- bmaporgy = blockmaplump[1]<<FRACBITS;
- bmapwidth = blockmaplump[2];
- bmapheight = blockmaplump[3];
-
+ int i, count;
+
+ blockmaplump = W_CacheLumpNum(lump, PU_LEVEL);
+ blockmap = blockmaplump + 4;
+ count = W_LumpLength(lump) / 2;
+ for (i = 0; i < count; i++)
+ blockmaplump[i] = SHORT(blockmaplump[i]);
+
+ bmaporgx = blockmaplump[0] << FRACBITS;
+ bmaporgy = blockmaplump[1] << FRACBITS;
+ bmapwidth = blockmaplump[2];
+ bmapheight = blockmaplump[3];
+
// clear out mobj chains
- count = sizeof(*blocklinks)* bmapwidth*bmapheight;
- blocklinks = Z_Malloc (count,PU_LEVEL, 0);
- memset (blocklinks, 0, count);
+ count = sizeof(*blocklinks) * bmapwidth * bmapheight;
+ blocklinks = Z_Malloc(count, PU_LEVEL, 0);
+ memset(blocklinks, 0, count);
}
@@ -423,81 +445,81 @@
=================
*/
-void P_GroupLines (void)
+void P_GroupLines(void)
{
- line_t **linebuffer;
- int i, j, total;
- line_t *li;
- sector_t *sector;
- subsector_t *ss;
- seg_t *seg;
- fixed_t bbox[4];
- int block;
-
+ line_t **linebuffer;
+ int i, j, total;
+ line_t *li;
+ sector_t *sector;
+ subsector_t *ss;
+ seg_t *seg;
+ fixed_t bbox[4];
+ int block;
+
// look up sector number for each subsector
- ss = subsectors;
- for (i=0 ; i<numsubsectors ; i++, ss++)
- {
- seg = &segs[ss->firstline];
- ss->sector = seg->sidedef->sector;
- }
+ ss = subsectors;
+ for (i = 0; i < numsubsectors; i++, ss++)
+ {
+ seg = &segs[ss->firstline];
+ ss->sector = seg->sidedef->sector;
+ }
// count number of lines in each sector
- li = lines;
- total = 0;
- for (i=0 ; i<numlines ; i++, li++)
- {
- total++;
- li->frontsector->linecount++;
- if (li->backsector && li->backsector != li->frontsector)
- {
- li->backsector->linecount++;
- total++;
- }
- }
-
-// build line tables for each sector
- linebuffer = Z_Malloc (total*4, PU_LEVEL, 0);
- sector = sectors;
- for (i=0 ; i<numsectors ; i++, sector++)
- {
- M_ClearBox (bbox);
- sector->lines = linebuffer;
- li = lines;
- for (j=0 ; j<numlines ; j++, li++)
- {
- if (li->frontsector == sector || li->backsector == sector)
- {
- *linebuffer++ = li;
- M_AddToBox (bbox, li->v1->x, li->v1->y);
- M_AddToBox (bbox, li->v2->x, li->v2->y);
- }
- }
- if (linebuffer - sector->lines != sector->linecount)
- I_Error ("P_GroupLines: miscounted");
-
- // set the degenmobj_t to the middle of the bounding box
- sector->soundorg.x = (bbox[BOXRIGHT]+bbox[BOXLEFT])/2;
- sector->soundorg.y = (bbox[BOXTOP]+bbox[BOXBOTTOM])/2;
-
- // adjust bounding box to map blocks
- block = (bbox[BOXTOP]-bmaporgy+MAXRADIUS)>>MAPBLOCKSHIFT;
- block = block >= bmapheight ? bmapheight-1 : block;
- sector->blockbox[BOXTOP]=block;
+ li = lines;
+ total = 0;
+ for (i = 0; i < numlines; i++, li++)
+ {
+ total++;
+ li->frontsector->linecount++;
+ if (li->backsector && li->backsector != li->frontsector)
+ {
+ li->backsector->linecount++;
+ total++;
+ }
+ }
- block = (bbox[BOXBOTTOM]-bmaporgy-MAXRADIUS)>>MAPBLOCKSHIFT;
- block = block < 0 ? 0 : block;
- sector->blockbox[BOXBOTTOM]=block;
+// build line tables for each sector
+ linebuffer = Z_Malloc(total * 4, PU_LEVEL, 0);
+ sector = sectors;
+ for (i = 0; i < numsectors; i++, sector++)
+ {
+ M_ClearBox(bbox);
+ sector->lines = linebuffer;
+ li = lines;
+ for (j = 0; j < numlines; j++, li++)
+ {
+ if (li->frontsector == sector || li->backsector == sector)
+ {
+ *linebuffer++ = li;
+ M_AddToBox(bbox, li->v1->x, li->v1->y);
+ M_AddToBox(bbox, li->v2->x, li->v2->y);
+ }
+ }
+ if (linebuffer - sector->lines != sector->linecount)
+ I_Error("P_GroupLines: miscounted");
- block = (bbox[BOXRIGHT]-bmaporgx+MAXRADIUS)>>MAPBLOCKSHIFT;
- block = block >= bmapwidth ? bmapwidth-1 : block;
- sector->blockbox[BOXRIGHT]=block;
+ // set the degenmobj_t to the middle of the bounding box
+ sector->soundorg.x = (bbox[BOXRIGHT] + bbox[BOXLEFT]) / 2;
+ sector->soundorg.y = (bbox[BOXTOP] + bbox[BOXBOTTOM]) / 2;
- block = (bbox[BOXLEFT]-bmaporgx-MAXRADIUS)>>MAPBLOCKSHIFT;
- block = block < 0 ? 0 : block;
- sector->blockbox[BOXLEFT]=block;
- }
-
+ // adjust bounding box to map blocks
+ block = (bbox[BOXTOP] - bmaporgy + MAXRADIUS) >> MAPBLOCKSHIFT;
+ block = block >= bmapheight ? bmapheight - 1 : block;
+ sector->blockbox[BOXTOP] = block;
+
+ block = (bbox[BOXBOTTOM] - bmaporgy - MAXRADIUS) >> MAPBLOCKSHIFT;
+ block = block < 0 ? 0 : block;
+ sector->blockbox[BOXBOTTOM] = block;
+
+ block = (bbox[BOXRIGHT] - bmaporgx + MAXRADIUS) >> MAPBLOCKSHIFT;
+ block = block >= bmapwidth ? bmapwidth - 1 : block;
+ sector->blockbox[BOXRIGHT] = block;
+
+ block = (bbox[BOXLEFT] - bmaporgx - MAXRADIUS) >> MAPBLOCKSHIFT;
+ block = block < 0 ? 0 : block;
+ sector->blockbox[BOXLEFT] = block;
+ }
+
}
//=============================================================================
@@ -511,95 +533,95 @@
=================
*/
-void P_SetupLevel (int episode, int map, int playermask, skill_t skill)
+void P_SetupLevel(int episode, int map, int playermask, skill_t skill)
{
- int i;
- int parm;
- char lumpname[9];
- int lumpnum;
- mobj_t *mobj;
-
- totalkills = totalitems = totalsecret = 0;
- for (i=0 ; i<MAXPLAYERS ; i++)
- {
- players[i].killcount = players[i].secretcount
- = players[i].itemcount = 0;
- }
- players[consoleplayer].viewz = 1; // will be set by player think
-
- S_Start (); // make sure all sounds are stopped before Z_FreeTags
-
- Z_FreeTags (PU_LEVEL, PU_PURGELEVEL-1);
-
- P_InitThinkers ();
-
+ int i;
+ int parm;
+ char lumpname[9];
+ int lumpnum;
+ mobj_t *mobj;
+
+ totalkills = totalitems = totalsecret = 0;
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ players[i].killcount = players[i].secretcount
+ = players[i].itemcount = 0;
+ }
+ players[consoleplayer].viewz = 1; // will be set by player think
+
+ S_Start(); // make sure all sounds are stopped before Z_FreeTags
+
+ Z_FreeTags(PU_LEVEL, PU_PURGELEVEL - 1);
+
+ P_InitThinkers();
+
//
// look for a regular (development) map first
//
- lumpname[0] = 'E';
- lumpname[1] = '0' + episode;
- lumpname[2] = 'M';
- lumpname[3] = '0' + map;
- lumpname[4] = 0;
- leveltime = 0;
-
- lumpnum = W_GetNumForName (lumpname);
-
-// note: most of this ordering is important
- P_LoadBlockMap (lumpnum+ML_BLOCKMAP);
- P_LoadVertexes (lumpnum+ML_VERTEXES);
- P_LoadSectors (lumpnum+ML_SECTORS);
- P_LoadSideDefs (lumpnum+ML_SIDEDEFS);
+ lumpname[0] = 'E';
+ lumpname[1] = '0' + episode;
+ lumpname[2] = 'M';
+ lumpname[3] = '0' + map;
+ lumpname[4] = 0;
+ leveltime = 0;
- P_LoadLineDefs (lumpnum+ML_LINEDEFS);
- P_LoadSubsectors (lumpnum+ML_SSECTORS);
- P_LoadNodes (lumpnum+ML_NODES);
- P_LoadSegs (lumpnum+ML_SEGS);
-
- rejectmatrix = W_CacheLumpNum (lumpnum+ML_REJECT,PU_LEVEL);
- P_GroupLines ();
+ lumpnum = W_GetNumForName(lumpname);
- bodyqueslot = 0;
- deathmatch_p = deathmatchstarts;
- P_InitAmbientSound();
- P_InitMonsters();
- P_OpenWeapons();
- P_LoadThings(lumpnum+ML_THINGS);
- P_CloseWeapons();
+// note: most of this ordering is important
+ P_LoadBlockMap(lumpnum + ML_BLOCKMAP);
+ P_LoadVertexes(lumpnum + ML_VERTEXES);
+ P_LoadSectors(lumpnum + ML_SECTORS);
+ P_LoadSideDefs(lumpnum + ML_SIDEDEFS);
+ P_LoadLineDefs(lumpnum + ML_LINEDEFS);
+ P_LoadSubsectors(lumpnum + ML_SSECTORS);
+ P_LoadNodes(lumpnum + ML_NODES);
+ P_LoadSegs(lumpnum + ML_SEGS);
+
+ rejectmatrix = W_CacheLumpNum(lumpnum + ML_REJECT, PU_LEVEL);
+ P_GroupLines();
+
+ bodyqueslot = 0;
+ deathmatch_p = deathmatchstarts;
+ P_InitAmbientSound();
+ P_InitMonsters();
+ P_OpenWeapons();
+ P_LoadThings(lumpnum + ML_THINGS);
+ P_CloseWeapons();
+
//
// if deathmatch, randomly spawn the active players
//
- TimerGame = 0;
- if(deathmatch)
- {
- for (i=0 ; i<MAXPLAYERS ; i++)
- {
- if (playeringame[i])
- { // must give a player spot before deathmatchspawn
- mobj = P_SpawnMobj (playerstarts[i].x<<16,
- playerstarts[i].y<<16,0, MT_PLAYER);
- players[i].mo = mobj;
- G_DeathMatchSpawnPlayer (i);
- P_RemoveMobj (mobj);
- }
- }
- parm = M_CheckParm("-timer");
- if(parm && parm < myargc-1)
- {
- TimerGame = atoi(myargv[parm+1])*35*60;
- }
- }
+ TimerGame = 0;
+ if (deathmatch)
+ {
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (playeringame[i])
+ { // must give a player spot before deathmatchspawn
+ mobj = P_SpawnMobj(playerstarts[i].x << 16,
+ playerstarts[i].y << 16, 0, MT_PLAYER);
+ players[i].mo = mobj;
+ G_DeathMatchSpawnPlayer(i);
+ P_RemoveMobj(mobj);
+ }
+ }
+ parm = M_CheckParm("-timer");
+ if (parm && parm < myargc - 1)
+ {
+ TimerGame = atoi(myargv[parm + 1]) * 35 * 60;
+ }
+ }
// set up world state
- P_SpawnSpecials ();
-
+ P_SpawnSpecials();
+
// build subsector connect matrix
-// P_ConnectSubsectors ();
+// P_ConnectSubsectors ();
// preload graphics
- if (precache)
- R_PrecacheLevel ();
+ if (precache)
+ R_PrecacheLevel();
//printf ("free memory: 0x%x\n", Z_FreeMemory());
@@ -614,11 +636,11 @@
=================
*/
-void P_Init (void)
-{
- P_InitSwitchList();
- P_InitPicAnims();
- P_InitTerrainTypes();
- P_InitLava();
- R_InitSprites(sprnames);
+void P_Init(void)
+{
+ P_InitSwitchList();
+ P_InitPicAnims();
+ P_InitTerrainTypes();
+ P_InitLava();
+ R_InitSprites(sprnames);
}
--- a/src/heretic/p_sight.c
+++ b/src/heretic/p_sight.c
@@ -1,22 +1,44 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_sight.c
#include "DoomDef.h"
#include "P_local.h"
-/*
-==============================================================================
+/*
+==============================================================================
P_CheckSight
This uses specialized forms of the maputils routines for optimized performance
-==============================================================================
-*/
+==============================================================================
+*/
-fixed_t sightzstart; // eye z of looker
-fixed_t topslope, bottomslope; // slopes to top and bottom of target
+fixed_t sightzstart; // eye z of looker
+fixed_t topslope, bottomslope; // slopes to top and bottom of target
-int sightcounts[3];
+int sightcounts[3];
/*
==============
@@ -26,39 +48,39 @@
==============
*/
-boolean PTR_SightTraverse (intercept_t *in)
+boolean PTR_SightTraverse(intercept_t * in)
{
- line_t *li;
- fixed_t slope;
-
- li = in->d.line;
+ line_t *li;
+ fixed_t slope;
+ li = in->d.line;
+
//
// crosses a two sided line
//
- P_LineOpening (li);
+ P_LineOpening(li);
- if (openbottom >= opentop) // quick test for totally closed doors
- return false; // stop
+ if (openbottom >= opentop) // quick test for totally closed doors
+ return false; // stop
- if (li->frontsector->floorheight != li->backsector->floorheight)
- {
- slope = FixedDiv (openbottom - sightzstart , in->frac);
- if (slope > bottomslope)
- bottomslope = slope;
- }
-
- if (li->frontsector->ceilingheight != li->backsector->ceilingheight)
- {
- slope = FixedDiv (opentop - sightzstart , in->frac);
- if (slope < topslope)
- topslope = slope;
- }
-
- if (topslope <= bottomslope)
- return false; // stop
-
- return true; // keep going
+ if (li->frontsector->floorheight != li->backsector->floorheight)
+ {
+ slope = FixedDiv(openbottom - sightzstart, in->frac);
+ if (slope > bottomslope)
+ bottomslope = slope;
+ }
+
+ if (li->frontsector->ceilingheight != li->backsector->ceilingheight)
+ {
+ slope = FixedDiv(opentop - sightzstart, in->frac);
+ if (slope < topslope)
+ topslope = slope;
+ }
+
+ if (topslope <= bottomslope)
+ return false; // stop
+
+ return true; // keep going
}
@@ -71,46 +93,47 @@
===================
*/
-boolean P_SightBlockLinesIterator (int x, int y )
+boolean P_SightBlockLinesIterator(int x, int y)
{
- int offset;
- short *list;
- line_t *ld;
- int s1, s2;
- divline_t dl;
-
- offset = y*bmapwidth+x;
-
- offset = *(blockmap+offset);
+ int offset;
+ short *list;
+ line_t *ld;
+ int s1, s2;
+ divline_t dl;
- for ( list = blockmaplump+offset ; *list != -1 ; list++)
- {
- ld = &lines[*list];
- if (ld->validcount == validcount)
- continue; // line has already been checked
- ld->validcount = validcount;
-
- s1 = P_PointOnDivlineSide (ld->v1->x, ld->v1->y, &trace);
- s2 = P_PointOnDivlineSide (ld->v2->x, ld->v2->y, &trace);
- if (s1 == s2)
- continue; // line isn't crossed
- P_MakeDivline (ld, &dl);
- s1 = P_PointOnDivlineSide (trace.x, trace.y, &dl);
- s2 = P_PointOnDivlineSide (trace.x+trace.dx, trace.y+trace.dy, &dl);
- if (s1 == s2)
- continue; // line isn't crossed
-
- // try to early out the check
- if (!ld->backsector)
- return false; // stop checking
+ offset = y * bmapwidth + x;
- // store the line for later intersection testing
- intercept_p->d.line = ld;
- intercept_p++;
-
- }
-
- return true; // everything was checked
+ offset = *(blockmap + offset);
+
+ for (list = blockmaplump + offset; *list != -1; list++)
+ {
+ ld = &lines[*list];
+ if (ld->validcount == validcount)
+ continue; // line has already been checked
+ ld->validcount = validcount;
+
+ s1 = P_PointOnDivlineSide(ld->v1->x, ld->v1->y, &trace);
+ s2 = P_PointOnDivlineSide(ld->v2->x, ld->v2->y, &trace);
+ if (s1 == s2)
+ continue; // line isn't crossed
+ P_MakeDivline(ld, &dl);
+ s1 = P_PointOnDivlineSide(trace.x, trace.y, &dl);
+ s2 = P_PointOnDivlineSide(trace.x + trace.dx, trace.y + trace.dy,
+ &dl);
+ if (s1 == s2)
+ continue; // line isn't crossed
+
+ // try to early out the check
+ if (!ld->backsector)
+ return false; // stop checking
+
+ // store the line for later intersection testing
+ intercept_p->d.line = ld;
+ intercept_p++;
+
+ }
+
+ return true; // everything was checked
}
/*
@@ -122,49 +145,49 @@
====================
*/
-boolean P_SightTraverseIntercepts ( void )
+boolean P_SightTraverseIntercepts(void)
{
- int count;
- fixed_t dist;
- intercept_t *scan, *in;
- divline_t dl;
-
- count = intercept_p - intercepts;
+ int count;
+ fixed_t dist;
+ intercept_t *scan, *in;
+ divline_t dl;
+
+ count = intercept_p - intercepts;
//
// calculate intercept distance
//
- for (scan = intercepts ; scan<intercept_p ; scan++)
- {
- P_MakeDivline (scan->d.line, &dl);
- scan->frac = P_InterceptVector (&trace, &dl);
- }
-
+ for (scan = intercepts; scan < intercept_p; scan++)
+ {
+ P_MakeDivline(scan->d.line, &dl);
+ scan->frac = P_InterceptVector(&trace, &dl);
+ }
+
//
// go through in order
-//
- in = 0; // shut up compiler warning
-
- while (count--)
- {
- dist = MAXINT;
- for (scan = intercepts ; scan<intercept_p ; scan++)
- if (scan->frac < dist)
- {
- dist = scan->frac;
- in = scan;
- }
-
- if ( !PTR_SightTraverse (in) )
- return false; // don't bother going farther
- in->frac = MAXINT;
- }
-
- return true; // everything was traversed
+//
+ in = 0; // shut up compiler warning
+
+ while (count--)
+ {
+ dist = MAXINT;
+ for (scan = intercepts; scan < intercept_p; scan++)
+ if (scan->frac < dist)
+ {
+ dist = scan->frac;
+ in = scan;
+ }
+
+ if (!PTR_SightTraverse(in))
+ return false; // don't bother going farther
+ in->frac = MAXINT;
+ }
+
+ return true; // everything was traversed
}
-/*
+/*
==================
=
= P_SightPathTraverse
@@ -172,125 +195,125 @@
= Traces a line from x1,y1 to x2,y2, calling the traverser function for each
= Returns true if the traverser function returns true for all lines
==================
-*/
+*/
-boolean P_SightPathTraverse (fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2)
+boolean P_SightPathTraverse(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2)
{
- fixed_t xt1,yt1,xt2,yt2;
- fixed_t xstep,ystep;
- fixed_t partial;
- fixed_t xintercept, yintercept;
- int mapx, mapy, mapxstep, mapystep;
- int count;
-
- validcount++;
- intercept_p = intercepts;
-
- if ( ((x1-bmaporgx)&(MAPBLOCKSIZE-1)) == 0)
- x1 += FRACUNIT; // don't side exactly on a line
- if ( ((y1-bmaporgy)&(MAPBLOCKSIZE-1)) == 0)
- y1 += FRACUNIT; // don't side exactly on a line
- trace.x = x1;
- trace.y = y1;
- trace.dx = x2 - x1;
- trace.dy = y2 - y1;
+ fixed_t xt1, yt1, xt2, yt2;
+ fixed_t xstep, ystep;
+ fixed_t partial;
+ fixed_t xintercept, yintercept;
+ int mapx, mapy, mapxstep, mapystep;
+ int count;
- x1 -= bmaporgx;
- y1 -= bmaporgy;
- xt1 = x1>>MAPBLOCKSHIFT;
- yt1 = y1>>MAPBLOCKSHIFT;
+ validcount++;
+ intercept_p = intercepts;
- x2 -= bmaporgx;
- y2 -= bmaporgy;
- xt2 = x2>>MAPBLOCKSHIFT;
- yt2 = y2>>MAPBLOCKSHIFT;
+ if (((x1 - bmaporgx) & (MAPBLOCKSIZE - 1)) == 0)
+ x1 += FRACUNIT; // don't side exactly on a line
+ if (((y1 - bmaporgy) & (MAPBLOCKSIZE - 1)) == 0)
+ y1 += FRACUNIT; // don't side exactly on a line
+ trace.x = x1;
+ trace.y = y1;
+ trace.dx = x2 - x1;
+ trace.dy = y2 - y1;
+ x1 -= bmaporgx;
+ y1 -= bmaporgy;
+ xt1 = x1 >> MAPBLOCKSHIFT;
+ yt1 = y1 >> MAPBLOCKSHIFT;
+
+ x2 -= bmaporgx;
+ y2 -= bmaporgy;
+ xt2 = x2 >> MAPBLOCKSHIFT;
+ yt2 = y2 >> MAPBLOCKSHIFT;
+
// points should never be out of bounds, but check once instead of
// each block
- if (xt1<0 || yt1<0 || xt1>=bmapwidth || yt1>=bmapheight
- || xt2<0 || yt2<0 || xt2>=bmapwidth || yt2>=bmapheight)
- return false;
+ if (xt1 < 0 || yt1 < 0 || xt1 >= bmapwidth || yt1 >= bmapheight
+ || xt2 < 0 || yt2 < 0 || xt2 >= bmapwidth || yt2 >= bmapheight)
+ return false;
- if (xt2 > xt1)
- {
- mapxstep = 1;
- partial = FRACUNIT - ((x1>>MAPBTOFRAC)&(FRACUNIT-1));
- ystep = FixedDiv (y2-y1,abs(x2-x1));
- }
- else if (xt2 < xt1)
- {
- mapxstep = -1;
- partial = (x1>>MAPBTOFRAC)&(FRACUNIT-1);
- ystep = FixedDiv (y2-y1,abs(x2-x1));
- }
- else
- {
- mapxstep = 0;
- partial = FRACUNIT;
- ystep = 256*FRACUNIT;
- }
- yintercept = (y1>>MAPBTOFRAC) + FixedMul (partial, ystep);
+ if (xt2 > xt1)
+ {
+ mapxstep = 1;
+ partial = FRACUNIT - ((x1 >> MAPBTOFRAC) & (FRACUNIT - 1));
+ ystep = FixedDiv(y2 - y1, abs(x2 - x1));
+ }
+ else if (xt2 < xt1)
+ {
+ mapxstep = -1;
+ partial = (x1 >> MAPBTOFRAC) & (FRACUNIT - 1);
+ ystep = FixedDiv(y2 - y1, abs(x2 - x1));
+ }
+ else
+ {
+ mapxstep = 0;
+ partial = FRACUNIT;
+ ystep = 256 * FRACUNIT;
+ }
+ yintercept = (y1 >> MAPBTOFRAC) + FixedMul(partial, ystep);
-
- if (yt2 > yt1)
- {
- mapystep = 1;
- partial = FRACUNIT - ((y1>>MAPBTOFRAC)&(FRACUNIT-1));
- xstep = FixedDiv (x2-x1,abs(y2-y1));
- }
- else if (yt2 < yt1)
- {
- mapystep = -1;
- partial = (y1>>MAPBTOFRAC)&(FRACUNIT-1);
- xstep = FixedDiv (x2-x1,abs(y2-y1));
- }
- else
- {
- mapystep = 0;
- partial = FRACUNIT;
- xstep = 256*FRACUNIT;
- }
- xintercept = (x1>>MAPBTOFRAC) + FixedMul (partial, xstep);
-
+ if (yt2 > yt1)
+ {
+ mapystep = 1;
+ partial = FRACUNIT - ((y1 >> MAPBTOFRAC) & (FRACUNIT - 1));
+ xstep = FixedDiv(x2 - x1, abs(y2 - y1));
+ }
+ else if (yt2 < yt1)
+ {
+ mapystep = -1;
+ partial = (y1 >> MAPBTOFRAC) & (FRACUNIT - 1);
+ xstep = FixedDiv(x2 - x1, abs(y2 - y1));
+ }
+ else
+ {
+ mapystep = 0;
+ partial = FRACUNIT;
+ xstep = 256 * FRACUNIT;
+ }
+ xintercept = (x1 >> MAPBTOFRAC) + FixedMul(partial, xstep);
+
+
//
// step through map blocks
// Count is present to prevent a round off error from skipping the break
- mapx = xt1;
- mapy = yt1;
+ mapx = xt1;
+ mapy = yt1;
-
- for (count = 0 ; count < 64 ; count++)
- {
- if (!P_SightBlockLinesIterator (mapx, mapy))
- {
-sightcounts[1]++;
- return false; // early out
- }
-
- if (mapx == xt2 && mapy == yt2)
- break;
-
- if ( (yintercept >> FRACBITS) == mapy)
- {
- yintercept += ystep;
- mapx += mapxstep;
- }
- else if ( (xintercept >> FRACBITS) == mapx)
- {
- xintercept += xstep;
- mapy += mapystep;
- }
-
- }
+ for (count = 0; count < 64; count++)
+ {
+ if (!P_SightBlockLinesIterator(mapx, mapy))
+ {
+ sightcounts[1]++;
+ return false; // early out
+ }
+ if (mapx == xt2 && mapy == yt2)
+ break;
+
+ if ((yintercept >> FRACBITS) == mapy)
+ {
+ yintercept += ystep;
+ mapx += mapxstep;
+ }
+ else if ((xintercept >> FRACBITS) == mapx)
+ {
+ xintercept += xstep;
+ mapy += mapystep;
+ }
+
+ }
+
+
//
// couldn't early out, so go through the sorted list
//
-sightcounts[2]++;
+ sightcounts[2]++;
- return P_SightTraverseIntercepts ( );
+ return P_SightTraverseIntercepts();
}
@@ -306,35 +329,32 @@
=====================
*/
-boolean P_CheckSight (mobj_t *t1, mobj_t *t2)
+boolean P_CheckSight(mobj_t * t1, mobj_t * t2)
{
- int s1, s2;
- int pnum, bytenum, bitnum;
+ int s1, s2;
+ int pnum, bytenum, bitnum;
//
// check for trivial rejection
//
- s1 = (t1->subsector->sector - sectors);
- s2 = (t2->subsector->sector - sectors);
- pnum = s1*numsectors + s2;
- bytenum = pnum>>3;
- bitnum = 1 << (pnum&7);
-
- if (rejectmatrix[bytenum]&bitnum)
- {
-sightcounts[0]++;
- return false; // can't possibly be connected
- }
+ s1 = (t1->subsector->sector - sectors);
+ s2 = (t2->subsector->sector - sectors);
+ pnum = s1 * numsectors + s2;
+ bytenum = pnum >> 3;
+ bitnum = 1 << (pnum & 7);
+ if (rejectmatrix[bytenum] & bitnum)
+ {
+ sightcounts[0]++;
+ return false; // can't possibly be connected
+ }
+
//
// check precisely
-//
- sightzstart = t1->z + t1->height - (t1->height>>2);
- topslope = (t2->z+t2->height) - sightzstart;
- bottomslope = (t2->z) - sightzstart;
+//
+ sightzstart = t1->z + t1->height - (t1->height >> 2);
+ topslope = (t2->z + t2->height) - sightzstart;
+ bottomslope = (t2->z) - sightzstart;
- return P_SightPathTraverse ( t1->x, t1->y, t2->x, t2->y );
+ return P_SightPathTraverse(t1->x, t1->y, t2->x, t2->y);
}
-
-
-
--- a/src/heretic/p_spec.c
+++ b/src/heretic/p_spec.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_Spec.c
@@ -7,18 +29,18 @@
// Macros
-#define MAX_AMBIENT_SFX 8 // Per level
+#define MAX_AMBIENT_SFX 8 // Per level
// Types
typedef enum
{
- afxcmd_play, // (sound)
- afxcmd_playabsvol, // (sound, volume)
- afxcmd_playrelvol, // (sound, volume)
- afxcmd_delay, // (ticks)
- afxcmd_delayrand, // (andbits)
- afxcmd_end // ()
+ afxcmd_play, // (sound)
+ afxcmd_playabsvol, // (sound, volume)
+ afxcmd_playrelvol, // (sound, volume)
+ afxcmd_delay, // (ticks)
+ afxcmd_delayrand, // (andbits)
+ afxcmd_end // ()
} afxcmd_t;
// Data
@@ -29,155 +51,142 @@
int AmbSfxTics;
int AmbSfxVolume;
-int AmbSndSeqInit[] =
-{ // Startup
- afxcmd_end
+int AmbSndSeqInit[] = { // Startup
+ afxcmd_end
};
-int AmbSndSeq1[] =
-{ // Scream
- afxcmd_play, sfx_amb1,
- afxcmd_end
+int AmbSndSeq1[] = { // Scream
+ afxcmd_play, sfx_amb1,
+ afxcmd_end
};
-int AmbSndSeq2[] =
-{ // Squish
- afxcmd_play, sfx_amb2,
- afxcmd_end
+int AmbSndSeq2[] = { // Squish
+ afxcmd_play, sfx_amb2,
+ afxcmd_end
};
-int AmbSndSeq3[] =
-{ // Drops
- afxcmd_play, sfx_amb3,
- afxcmd_delay, 16,
- afxcmd_delayrand, 31,
- afxcmd_play, sfx_amb7,
- afxcmd_delay, 16,
- afxcmd_delayrand, 31,
- afxcmd_play, sfx_amb3,
- afxcmd_delay, 16,
- afxcmd_delayrand, 31,
- afxcmd_play, sfx_amb7,
- afxcmd_delay, 16,
- afxcmd_delayrand, 31,
- afxcmd_play, sfx_amb3,
- afxcmd_delay, 16,
- afxcmd_delayrand, 31,
- afxcmd_play, sfx_amb7,
- afxcmd_delay, 16,
- afxcmd_delayrand, 31,
- afxcmd_end
+int AmbSndSeq3[] = { // Drops
+ afxcmd_play, sfx_amb3,
+ afxcmd_delay, 16,
+ afxcmd_delayrand, 31,
+ afxcmd_play, sfx_amb7,
+ afxcmd_delay, 16,
+ afxcmd_delayrand, 31,
+ afxcmd_play, sfx_amb3,
+ afxcmd_delay, 16,
+ afxcmd_delayrand, 31,
+ afxcmd_play, sfx_amb7,
+ afxcmd_delay, 16,
+ afxcmd_delayrand, 31,
+ afxcmd_play, sfx_amb3,
+ afxcmd_delay, 16,
+ afxcmd_delayrand, 31,
+ afxcmd_play, sfx_amb7,
+ afxcmd_delay, 16,
+ afxcmd_delayrand, 31,
+ afxcmd_end
};
-int AmbSndSeq4[] =
-{ // SlowFootSteps
- afxcmd_play, sfx_amb4,
- afxcmd_delay, 15,
- afxcmd_playrelvol, sfx_amb11, -3,
- afxcmd_delay, 15,
- afxcmd_playrelvol, sfx_amb4, -3,
- afxcmd_delay, 15,
- afxcmd_playrelvol, sfx_amb11, -3,
- afxcmd_delay, 15,
- afxcmd_playrelvol, sfx_amb4, -3,
- afxcmd_delay, 15,
- afxcmd_playrelvol, sfx_amb11, -3,
- afxcmd_delay, 15,
- afxcmd_playrelvol, sfx_amb4, -3,
- afxcmd_delay, 15,
- afxcmd_playrelvol, sfx_amb11, -3,
- afxcmd_end
+int AmbSndSeq4[] = { // SlowFootSteps
+ afxcmd_play, sfx_amb4,
+ afxcmd_delay, 15,
+ afxcmd_playrelvol, sfx_amb11, -3,
+ afxcmd_delay, 15,
+ afxcmd_playrelvol, sfx_amb4, -3,
+ afxcmd_delay, 15,
+ afxcmd_playrelvol, sfx_amb11, -3,
+ afxcmd_delay, 15,
+ afxcmd_playrelvol, sfx_amb4, -3,
+ afxcmd_delay, 15,
+ afxcmd_playrelvol, sfx_amb11, -3,
+ afxcmd_delay, 15,
+ afxcmd_playrelvol, sfx_amb4, -3,
+ afxcmd_delay, 15,
+ afxcmd_playrelvol, sfx_amb11, -3,
+ afxcmd_end
};
-int AmbSndSeq5[] =
-{ // Heartbeat
- afxcmd_play, sfx_amb5,
- afxcmd_delay, 35,
- afxcmd_play, sfx_amb5,
- afxcmd_delay, 35,
- afxcmd_play, sfx_amb5,
- afxcmd_delay, 35,
- afxcmd_play, sfx_amb5,
- afxcmd_end
+int AmbSndSeq5[] = { // Heartbeat
+ afxcmd_play, sfx_amb5,
+ afxcmd_delay, 35,
+ afxcmd_play, sfx_amb5,
+ afxcmd_delay, 35,
+ afxcmd_play, sfx_amb5,
+ afxcmd_delay, 35,
+ afxcmd_play, sfx_amb5,
+ afxcmd_end
};
-int AmbSndSeq6[] =
-{ // Bells
- afxcmd_play, sfx_amb6,
- afxcmd_delay, 17,
- afxcmd_playrelvol, sfx_amb6, -8,
- afxcmd_delay, 17,
- afxcmd_playrelvol, sfx_amb6, -8,
- afxcmd_delay, 17,
- afxcmd_playrelvol, sfx_amb6, -8,
- afxcmd_end
+int AmbSndSeq6[] = { // Bells
+ afxcmd_play, sfx_amb6,
+ afxcmd_delay, 17,
+ afxcmd_playrelvol, sfx_amb6, -8,
+ afxcmd_delay, 17,
+ afxcmd_playrelvol, sfx_amb6, -8,
+ afxcmd_delay, 17,
+ afxcmd_playrelvol, sfx_amb6, -8,
+ afxcmd_end
};
-int AmbSndSeq7[] =
-{ // Growl
- afxcmd_play, sfx_bstsit,
- afxcmd_end
+int AmbSndSeq7[] = { // Growl
+ afxcmd_play, sfx_bstsit,
+ afxcmd_end
};
-int AmbSndSeq8[] =
-{ // Magic
- afxcmd_play, sfx_amb8,
- afxcmd_end
+int AmbSndSeq8[] = { // Magic
+ afxcmd_play, sfx_amb8,
+ afxcmd_end
};
-int AmbSndSeq9[] =
-{ // Laughter
- afxcmd_play, sfx_amb9,
- afxcmd_delay, 16,
- afxcmd_playrelvol, sfx_amb9, -4,
- afxcmd_delay, 16,
- afxcmd_playrelvol, sfx_amb9, -4,
- afxcmd_delay, 16,
- afxcmd_playrelvol, sfx_amb10, -4,
- afxcmd_delay, 16,
- afxcmd_playrelvol, sfx_amb10, -4,
- afxcmd_delay, 16,
- afxcmd_playrelvol, sfx_amb10, -4,
- afxcmd_end
+int AmbSndSeq9[] = { // Laughter
+ afxcmd_play, sfx_amb9,
+ afxcmd_delay, 16,
+ afxcmd_playrelvol, sfx_amb9, -4,
+ afxcmd_delay, 16,
+ afxcmd_playrelvol, sfx_amb9, -4,
+ afxcmd_delay, 16,
+ afxcmd_playrelvol, sfx_amb10, -4,
+ afxcmd_delay, 16,
+ afxcmd_playrelvol, sfx_amb10, -4,
+ afxcmd_delay, 16,
+ afxcmd_playrelvol, sfx_amb10, -4,
+ afxcmd_end
};
-int AmbSndSeq10[] =
-{ // FastFootsteps
- afxcmd_play, sfx_amb4,
- afxcmd_delay, 8,
- afxcmd_playrelvol, sfx_amb11, -3,
- afxcmd_delay, 8,
- afxcmd_playrelvol, sfx_amb4, -3,
- afxcmd_delay, 8,
- afxcmd_playrelvol, sfx_amb11, -3,
- afxcmd_delay, 8,
- afxcmd_playrelvol, sfx_amb4, -3,
- afxcmd_delay, 8,
- afxcmd_playrelvol, sfx_amb11, -3,
- afxcmd_delay, 8,
- afxcmd_playrelvol, sfx_amb4, -3,
- afxcmd_delay, 8,
- afxcmd_playrelvol, sfx_amb11, -3,
- afxcmd_end
+int AmbSndSeq10[] = { // FastFootsteps
+ afxcmd_play, sfx_amb4,
+ afxcmd_delay, 8,
+ afxcmd_playrelvol, sfx_amb11, -3,
+ afxcmd_delay, 8,
+ afxcmd_playrelvol, sfx_amb4, -3,
+ afxcmd_delay, 8,
+ afxcmd_playrelvol, sfx_amb11, -3,
+ afxcmd_delay, 8,
+ afxcmd_playrelvol, sfx_amb4, -3,
+ afxcmd_delay, 8,
+ afxcmd_playrelvol, sfx_amb11, -3,
+ afxcmd_delay, 8,
+ afxcmd_playrelvol, sfx_amb4, -3,
+ afxcmd_delay, 8,
+ afxcmd_playrelvol, sfx_amb11, -3,
+ afxcmd_end
};
-int *AmbientSfx[] =
-{
- AmbSndSeq1, // Scream
- AmbSndSeq2, // Squish
- AmbSndSeq3, // Drops
- AmbSndSeq4, // SlowFootsteps
- AmbSndSeq5, // Heartbeat
- AmbSndSeq6, // Bells
- AmbSndSeq7, // Growl
- AmbSndSeq8, // Magic
- AmbSndSeq9, // Laughter
- AmbSndSeq10 // FastFootsteps
+int *AmbientSfx[] = {
+ AmbSndSeq1, // Scream
+ AmbSndSeq2, // Squish
+ AmbSndSeq3, // Drops
+ AmbSndSeq4, // SlowFootsteps
+ AmbSndSeq5, // Heartbeat
+ AmbSndSeq6, // Bells
+ AmbSndSeq7, // Growl
+ AmbSndSeq8, // Magic
+ AmbSndSeq9, // Laughter
+ AmbSndSeq10 // FastFootsteps
};
-animdef_t animdefs[] =
-{
- // false = flat
- // true = texture
- {false, "FLTWAWA3", "FLTWAWA1", 8}, // Water
- {false, "FLTSLUD3", "FLTSLUD1", 8}, // Sludge
- {false, "FLTTELE4", "FLTTELE1", 6}, // Teleport
- {false, "FLTFLWW3", "FLTFLWW1", 9}, // River - West
- {false, "FLTLAVA4", "FLTLAVA1", 8}, // Lava
- {false, "FLATHUH4", "FLATHUH1", 8}, // Super Lava
- {true, "LAVAFL3", "LAVAFL1", 6}, // Texture: Lavaflow
- {true, "WATRWAL3", "WATRWAL1", 4}, // Texture: Waterfall
- {-1}
+animdef_t animdefs[] = {
+ // false = flat
+ // true = texture
+ {false, "FLTWAWA3", "FLTWAWA1", 8}, // Water
+ {false, "FLTSLUD3", "FLTSLUD1", 8}, // Sludge
+ {false, "FLTTELE4", "FLTTELE1", 6}, // Teleport
+ {false, "FLTFLWW3", "FLTFLWW1", 9}, // River - West
+ {false, "FLTLAVA4", "FLTLAVA1", 8}, // Lava
+ {false, "FLATHUH4", "FLATHUH1", 8}, // Super Lava
+ {true, "LAVAFL3", "LAVAFL1", 6}, // Texture: Lavaflow
+ {true, "WATRWAL3", "WATRWAL1", 4}, // Texture: Waterfall
+ {-1}
};
anim_t anims[MAXANIMS];
@@ -186,16 +195,22 @@
int *TerrainTypes;
struct
{
- char *name;
- int type;
+ char *name;
+ int type;
} TerrainTypeDefs[] =
{
- { "FLTWAWA1", FLOOR_WATER },
- { "FLTFLWW1", FLOOR_WATER },
- { "FLTLAVA1", FLOOR_LAVA },
- { "FLATHUH1", FLOOR_LAVA },
- { "FLTSLUD1", FLOOR_SLUDGE },
- { "END", -1 }
+ {
+ "FLTWAWA1", FLOOR_WATER},
+ {
+ "FLTFLWW1", FLOOR_WATER},
+ {
+ "FLTLAVA1", FLOOR_LAVA},
+ {
+ "FLATHUH1", FLOOR_LAVA},
+ {
+ "FLTSLUD1", FLOOR_SLUDGE},
+ {
+ "END", -1}
};
mobj_t LavaInflictor;
@@ -208,9 +223,9 @@
void P_InitLava(void)
{
- memset(&LavaInflictor, 0, sizeof(mobj_t));
- LavaInflictor.type = MT_PHOENIXFX2;
- LavaInflictor.flags2 = MF2_FIREDAMAGE|MF2_NODMGTHRUST;
+ memset(&LavaInflictor, 0, sizeof(mobj_t));
+ LavaInflictor.type = MT_PHOENIXFX2;
+ LavaInflictor.flags2 = MF2_FIREDAMAGE | MF2_NODMGTHRUST;
}
//----------------------------------------------------------------------------
@@ -221,21 +236,21 @@
void P_InitTerrainTypes(void)
{
- int i;
- int lump;
- int size;
+ int i;
+ int lump;
+ int size;
- size = (numflats+1)*sizeof(int);
- TerrainTypes = Z_Malloc(size, PU_STATIC, 0);
- memset(TerrainTypes, 0, size);
- for(i = 0; TerrainTypeDefs[i].type != -1; i++)
- {
- lump = W_CheckNumForName(TerrainTypeDefs[i].name);
- if(lump != -1)
- {
- TerrainTypes[lump-firstflat] = TerrainTypeDefs[i].type;
- }
- }
+ size = (numflats + 1) * sizeof(int);
+ TerrainTypes = Z_Malloc(size, PU_STATIC, 0);
+ memset(TerrainTypes, 0, size);
+ for (i = 0; TerrainTypeDefs[i].type != -1; i++)
+ {
+ lump = W_CheckNumForName(TerrainTypeDefs[i].name);
+ if (lump != -1)
+ {
+ TerrainTypes[lump - firstflat] = TerrainTypeDefs[i].type;
+ }
+ }
}
//----------------------------------------------------------------------------
@@ -246,39 +261,39 @@
void P_InitPicAnims(void)
{
- int i;
+ int i;
- lastanim = anims;
- for(i = 0; animdefs[i].istexture != -1; i++)
- {
- if(animdefs[i].istexture)
- { // Texture animation
- if(R_CheckTextureNumForName(animdefs[i].startname) == -1)
- { // Texture doesn't exist
- continue;
- }
- lastanim->picnum = R_TextureNumForName(animdefs[i].endname);
- lastanim->basepic = R_TextureNumForName(animdefs[i].startname);
- }
- else
- { // Flat animation
- if(W_CheckNumForName(animdefs[i].startname) == -1)
- { // Flat doesn't exist
- continue;
- }
- lastanim->picnum = R_FlatNumForName(animdefs[i].endname);
- lastanim->basepic = R_FlatNumForName(animdefs[i].startname);
- }
- lastanim->istexture = animdefs[i].istexture;
- lastanim->numpics = lastanim->picnum-lastanim->basepic+1;
- if(lastanim->numpics < 2)
- {
- I_Error("P_InitPicAnims: bad cycle from %s to %s",
- animdefs[i].startname, animdefs[i].endname);
- }
- lastanim->speed = animdefs[i].speed;
- lastanim++;
- }
+ lastanim = anims;
+ for (i = 0; animdefs[i].istexture != -1; i++)
+ {
+ if (animdefs[i].istexture)
+ { // Texture animation
+ if (R_CheckTextureNumForName(animdefs[i].startname) == -1)
+ { // Texture doesn't exist
+ continue;
+ }
+ lastanim->picnum = R_TextureNumForName(animdefs[i].endname);
+ lastanim->basepic = R_TextureNumForName(animdefs[i].startname);
+ }
+ else
+ { // Flat animation
+ if (W_CheckNumForName(animdefs[i].startname) == -1)
+ { // Flat doesn't exist
+ continue;
+ }
+ lastanim->picnum = R_FlatNumForName(animdefs[i].endname);
+ lastanim->basepic = R_FlatNumForName(animdefs[i].startname);
+ }
+ lastanim->istexture = animdefs[i].istexture;
+ lastanim->numpics = lastanim->picnum - lastanim->basepic + 1;
+ if (lastanim->numpics < 2)
+ {
+ I_Error("P_InitPicAnims: bad cycle from %s to %s",
+ animdefs[i].startname, animdefs[i].endname);
+ }
+ lastanim->speed = animdefs[i].speed;
+ lastanim++;
+ }
}
/*
@@ -290,218 +305,218 @@
*/
//
-// Will return a side_t* given the number of the current sector,
-// the line number, and the side (0/1) that you want.
+// Will return a side_t* given the number of the current sector,
+// the line number, and the side (0/1) that you want.
//
-side_t *getSide(int currentSector,int line, int side)
+side_t *getSide(int currentSector, int line, int side)
{
- return &sides[ (sectors[currentSector].lines[line])->sidenum[side] ];
+ return &sides[(sectors[currentSector].lines[line])->sidenum[side]];
}
//
-// Will return a sector_t* given the number of the current sector,
-// the line number and the side (0/1) that you want.
+// Will return a sector_t* given the number of the current sector,
+// the line number and the side (0/1) that you want.
//
-sector_t *getSector(int currentSector,int line,int side)
+sector_t *getSector(int currentSector, int line, int side)
{
- return sides[ (sectors[currentSector].lines[line])->sidenum[side] ].sector;
+ return sides[(sectors[currentSector].lines[line])->sidenum[side]].sector;
}
//
-// Given the sector number and the line number, will tell you whether
-// the line is two-sided or not.
+// Given the sector number and the line number, will tell you whether
+// the line is two-sided or not.
//
-int twoSided(int sector,int line)
+int twoSided(int sector, int line)
{
- return (sectors[sector].lines[line])->flags & ML_TWOSIDED;
+ return (sectors[sector].lines[line])->flags & ML_TWOSIDED;
}
//==================================================================
//
-// Return sector_t * of sector next to current. NULL if not two-sided line
+// Return sector_t * of sector next to current. NULL if not two-sided line
//
//==================================================================
-sector_t *getNextSector(line_t *line,sector_t *sec)
+sector_t *getNextSector(line_t * line, sector_t * sec)
{
- if (!(line->flags & ML_TWOSIDED))
- return NULL;
-
- if (line->frontsector == sec)
- return line->backsector;
-
- return line->frontsector;
+ if (!(line->flags & ML_TWOSIDED))
+ return NULL;
+
+ if (line->frontsector == sec)
+ return line->backsector;
+
+ return line->frontsector;
}
//==================================================================
//
-// FIND LOWEST FLOOR HEIGHT IN SURROUNDING SECTORS
+// FIND LOWEST FLOOR HEIGHT IN SURROUNDING SECTORS
//
//==================================================================
-fixed_t P_FindLowestFloorSurrounding(sector_t *sec)
+fixed_t P_FindLowestFloorSurrounding(sector_t * sec)
{
- int i;
- line_t *check;
- sector_t *other;
- fixed_t floor = sec->floorheight;
-
- for (i=0 ;i < sec->linecount ; i++)
- {
- check = sec->lines[i];
- other = getNextSector(check,sec);
- if (!other)
- continue;
- if (other->floorheight < floor)
- floor = other->floorheight;
- }
- return floor;
+ int i;
+ line_t *check;
+ sector_t *other;
+ fixed_t floor = sec->floorheight;
+
+ for (i = 0; i < sec->linecount; i++)
+ {
+ check = sec->lines[i];
+ other = getNextSector(check, sec);
+ if (!other)
+ continue;
+ if (other->floorheight < floor)
+ floor = other->floorheight;
+ }
+ return floor;
}
//==================================================================
//
-// FIND HIGHEST FLOOR HEIGHT IN SURROUNDING SECTORS
+// FIND HIGHEST FLOOR HEIGHT IN SURROUNDING SECTORS
//
//==================================================================
-fixed_t P_FindHighestFloorSurrounding(sector_t *sec)
+fixed_t P_FindHighestFloorSurrounding(sector_t * sec)
{
- int i;
- line_t *check;
- sector_t *other;
- fixed_t floor = -500*FRACUNIT;
-
- for (i=0 ;i < sec->linecount ; i++)
- {
- check = sec->lines[i];
- other = getNextSector(check,sec);
- if (!other)
- continue;
- if (other->floorheight > floor)
- floor = other->floorheight;
- }
- return floor;
+ int i;
+ line_t *check;
+ sector_t *other;
+ fixed_t floor = -500 * FRACUNIT;
+
+ for (i = 0; i < sec->linecount; i++)
+ {
+ check = sec->lines[i];
+ other = getNextSector(check, sec);
+ if (!other)
+ continue;
+ if (other->floorheight > floor)
+ floor = other->floorheight;
+ }
+ return floor;
}
//==================================================================
//
-// FIND NEXT HIGHEST FLOOR IN SURROUNDING SECTORS
+// FIND NEXT HIGHEST FLOOR IN SURROUNDING SECTORS
//
//==================================================================
-fixed_t P_FindNextHighestFloor(sector_t *sec,int currentheight)
+fixed_t P_FindNextHighestFloor(sector_t * sec, int currentheight)
{
- int i;
- int h;
- int min;
- line_t *check;
- sector_t *other;
- fixed_t height = currentheight;
- fixed_t heightlist[20]; // 20 adjoining sectors max!
-
- for (i =0,h = 0 ;i < sec->linecount ; i++)
- {
- check = sec->lines[i];
- other = getNextSector(check,sec);
- if (!other)
- continue;
- if (other->floorheight > height)
- heightlist[h++] = other->floorheight;
- }
-
- //
- // Find lowest height in list
- //
- min = heightlist[0];
- for (i = 1;i < h;i++)
- if (heightlist[i] < min)
- min = heightlist[i];
-
- return min;
+ int i;
+ int h;
+ int min;
+ line_t *check;
+ sector_t *other;
+ fixed_t height = currentheight;
+ fixed_t heightlist[20]; // 20 adjoining sectors max!
+
+ for (i = 0, h = 0; i < sec->linecount; i++)
+ {
+ check = sec->lines[i];
+ other = getNextSector(check, sec);
+ if (!other)
+ continue;
+ if (other->floorheight > height)
+ heightlist[h++] = other->floorheight;
+ }
+
+ //
+ // Find lowest height in list
+ //
+ min = heightlist[0];
+ for (i = 1; i < h; i++)
+ if (heightlist[i] < min)
+ min = heightlist[i];
+
+ return min;
}
//==================================================================
//
-// FIND LOWEST CEILING IN THE SURROUNDING SECTORS
+// FIND LOWEST CEILING IN THE SURROUNDING SECTORS
//
//==================================================================
-fixed_t P_FindLowestCeilingSurrounding(sector_t *sec)
+fixed_t P_FindLowestCeilingSurrounding(sector_t * sec)
{
- int i;
- line_t *check;
- sector_t *other;
- fixed_t height = MAXINT;
-
- for (i=0 ;i < sec->linecount ; i++)
- {
- check = sec->lines[i];
- other = getNextSector(check,sec);
- if (!other)
- continue;
- if (other->ceilingheight < height)
- height = other->ceilingheight;
- }
- return height;
+ int i;
+ line_t *check;
+ sector_t *other;
+ fixed_t height = MAXINT;
+
+ for (i = 0; i < sec->linecount; i++)
+ {
+ check = sec->lines[i];
+ other = getNextSector(check, sec);
+ if (!other)
+ continue;
+ if (other->ceilingheight < height)
+ height = other->ceilingheight;
+ }
+ return height;
}
//==================================================================
//
-// FIND HIGHEST CEILING IN THE SURROUNDING SECTORS
+// FIND HIGHEST CEILING IN THE SURROUNDING SECTORS
//
//==================================================================
-fixed_t P_FindHighestCeilingSurrounding(sector_t *sec)
+fixed_t P_FindHighestCeilingSurrounding(sector_t * sec)
{
- int i;
- line_t *check;
- sector_t *other;
- fixed_t height = 0;
-
- for (i=0 ;i < sec->linecount ; i++)
- {
- check = sec->lines[i];
- other = getNextSector(check,sec);
- if (!other)
- continue;
- if (other->ceilingheight > height)
- height = other->ceilingheight;
- }
- return height;
+ int i;
+ line_t *check;
+ sector_t *other;
+ fixed_t height = 0;
+
+ for (i = 0; i < sec->linecount; i++)
+ {
+ check = sec->lines[i];
+ other = getNextSector(check, sec);
+ if (!other)
+ continue;
+ if (other->ceilingheight > height)
+ height = other->ceilingheight;
+ }
+ return height;
}
//==================================================================
//
-// RETURN NEXT SECTOR # THAT LINE TAG REFERS TO
+// RETURN NEXT SECTOR # THAT LINE TAG REFERS TO
//
//==================================================================
-int P_FindSectorFromLineTag(line_t *line,int start)
+int P_FindSectorFromLineTag(line_t * line, int start)
{
- int i;
-
- for (i=start+1;i<numsectors;i++)
- if (sectors[i].tag == line->tag)
- return i;
- return -1;
+ int i;
+
+ for (i = start + 1; i < numsectors; i++)
+ if (sectors[i].tag == line->tag)
+ return i;
+ return -1;
}
//==================================================================
//
-// Find minimum light from an adjacent sector
+// Find minimum light from an adjacent sector
//
//==================================================================
-int P_FindMinSurroundingLight(sector_t *sector,int max)
+int P_FindMinSurroundingLight(sector_t * sector, int max)
{
- int i;
- int min;
- line_t *line;
- sector_t *check;
-
- min = max;
- for (i=0 ; i < sector->linecount ; i++)
- {
- line = sector->lines[i];
- check = getNextSector(line,sector);
- if (!check)
- continue;
- if (check->lightlevel < min)
- min = check->lightlevel;
- }
- return min;
+ int i;
+ int min;
+ line_t *line;
+ sector_t *check;
+
+ min = max;
+ for (i = 0; i < sector->linecount; i++)
+ {
+ line = sector->lines[i];
+ check = getNextSector(line, sector);
+ if (!check)
+ continue;
+ if (check->lightlevel < min)
+ min = check->lightlevel;
+ }
+ return min;
}
/*
@@ -527,246 +542,246 @@
===============================================================================
*/
-void P_CrossSpecialLine(int linenum, int side, mobj_t *thing)
+void P_CrossSpecialLine(int linenum, int side, mobj_t * thing)
{
- line_t *line;
+ line_t *line;
- line = &lines[linenum];
- if(!thing->player)
- { // Check if trigger allowed by non-player mobj
- switch(line->special)
- {
- case 39: // Trigger_TELEPORT
- case 97: // Retrigger_TELEPORT
- case 4: // Trigger_Raise_Door
- //case 10: // PLAT DOWN-WAIT-UP-STAY TRIGGER
- //case 88: // PLAT DOWN-WAIT-UP-STAY RETRIGGER
- break;
- default:
- return;
- break;
- }
- }
- switch(line->special)
- {
- //====================================================
- // TRIGGERS
- //====================================================
- case 2: // Open Door
- EV_DoDoor(line,open,VDOORSPEED);
- line->special = 0;
- break;
- case 3: // Close Door
- EV_DoDoor(line,close,VDOORSPEED);
- line->special = 0;
- break;
- case 4: // Raise Door
- EV_DoDoor(line,normal,VDOORSPEED);
- line->special = 0;
- break;
- case 5: // Raise Floor
- EV_DoFloor(line,raiseFloor);
- line->special = 0;
- break;
- case 6: // Fast Ceiling Crush & Raise
- EV_DoCeiling(line,fastCrushAndRaise);
- line->special = 0;
- break;
- case 8: // Trigger_Build_Stairs (8 pixel steps)
- EV_BuildStairs(line, 8*FRACUNIT);
- line->special = 0;
- break;
- case 106: // Trigger_Build_Stairs_16 (16 pixel steps)
- EV_BuildStairs(line, 16*FRACUNIT);
- line->special = 0;
- break;
- case 10: // PlatDownWaitUp
- EV_DoPlat(line,downWaitUpStay,0);
- line->special = 0;
- break;
- case 12: // Light Turn On - brightest near
- EV_LightTurnOn(line,0);
- line->special = 0;
- break;
- case 13: // Light Turn On 255
- EV_LightTurnOn(line,255);
- line->special = 0;
- break;
- case 16: // Close Door 30
- EV_DoDoor(line,close30ThenOpen,VDOORSPEED);
- line->special = 0;
- break;
- case 17: // Start Light Strobing
- EV_StartLightStrobing(line);
- line->special = 0;
- break;
- case 19: // Lower Floor
- EV_DoFloor(line,lowerFloor);
- line->special = 0;
- break;
- case 22: // Raise floor to nearest height and change texture
- EV_DoPlat(line,raiseToNearestAndChange,0);
- line->special = 0;
- break;
- case 25: // Ceiling Crush and Raise
- EV_DoCeiling(line,crushAndRaise);
- line->special = 0;
- break;
- case 30: // Raise floor to shortest texture height
- // on either side of lines
- EV_DoFloor(line,raiseToTexture);
- line->special = 0;
- break;
- case 35: // Lights Very Dark
- EV_LightTurnOn(line,35);
- line->special = 0;
- break;
- case 36: // Lower Floor (TURBO)
- EV_DoFloor(line,turboLower);
- line->special = 0;
- break;
- case 37: // LowerAndChange
- EV_DoFloor(line,lowerAndChange);
- line->special = 0;
- break;
- case 38: // Lower Floor To Lowest
- EV_DoFloor( line, lowerFloorToLowest );
- line->special = 0;
- break;
- case 39: // TELEPORT!
- EV_Teleport( line, side, thing );
- line->special = 0;
- break;
- case 40: // RaiseCeilingLowerFloor
- EV_DoCeiling( line, raiseToHighest );
- EV_DoFloor( line, lowerFloorToLowest );
- line->special = 0;
- break;
- case 44: // Ceiling Crush
- EV_DoCeiling( line, lowerAndCrush );
- line->special = 0;
- break;
- case 52: // EXIT!
- G_ExitLevel ();
- line->special = 0;
- break;
- case 53: // Perpetual Platform Raise
- EV_DoPlat(line,perpetualRaise,0);
- line->special = 0;
- break;
- case 54: // Platform Stop
- EV_StopPlat(line);
- line->special = 0;
- break;
- case 56: // Raise Floor Crush
- EV_DoFloor(line,raiseFloorCrush);
- line->special = 0;
- break;
- case 57: // Ceiling Crush Stop
- EV_CeilingCrushStop(line);
- line->special = 0;
- break;
- case 58: // Raise Floor 24
- EV_DoFloor(line,raiseFloor24);
- line->special = 0;
- break;
- case 59: // Raise Floor 24 And Change
- EV_DoFloor(line,raiseFloor24AndChange);
- line->special = 0;
- break;
- case 104: // Turn lights off in sector(tag)
- EV_TurnTagLightsOff(line);
- line->special = 0;
- break;
- case 105: // Trigger_SecretExit
- G_SecretExitLevel();
- line->special = 0;
- break;
+ line = &lines[linenum];
+ if (!thing->player)
+ { // Check if trigger allowed by non-player mobj
+ switch (line->special)
+ {
+ case 39: // Trigger_TELEPORT
+ case 97: // Retrigger_TELEPORT
+ case 4: // Trigger_Raise_Door
+ //case 10: // PLAT DOWN-WAIT-UP-STAY TRIGGER
+ //case 88: // PLAT DOWN-WAIT-UP-STAY RETRIGGER
+ break;
+ default:
+ return;
+ break;
+ }
+ }
+ switch (line->special)
+ {
+ //====================================================
+ // TRIGGERS
+ //====================================================
+ case 2: // Open Door
+ EV_DoDoor(line, open, VDOORSPEED);
+ line->special = 0;
+ break;
+ case 3: // Close Door
+ EV_DoDoor(line, close, VDOORSPEED);
+ line->special = 0;
+ break;
+ case 4: // Raise Door
+ EV_DoDoor(line, normal, VDOORSPEED);
+ line->special = 0;
+ break;
+ case 5: // Raise Floor
+ EV_DoFloor(line, raiseFloor);
+ line->special = 0;
+ break;
+ case 6: // Fast Ceiling Crush & Raise
+ EV_DoCeiling(line, fastCrushAndRaise);
+ line->special = 0;
+ break;
+ case 8: // Trigger_Build_Stairs (8 pixel steps)
+ EV_BuildStairs(line, 8 * FRACUNIT);
+ line->special = 0;
+ break;
+ case 106: // Trigger_Build_Stairs_16 (16 pixel steps)
+ EV_BuildStairs(line, 16 * FRACUNIT);
+ line->special = 0;
+ break;
+ case 10: // PlatDownWaitUp
+ EV_DoPlat(line, downWaitUpStay, 0);
+ line->special = 0;
+ break;
+ case 12: // Light Turn On - brightest near
+ EV_LightTurnOn(line, 0);
+ line->special = 0;
+ break;
+ case 13: // Light Turn On 255
+ EV_LightTurnOn(line, 255);
+ line->special = 0;
+ break;
+ case 16: // Close Door 30
+ EV_DoDoor(line, close30ThenOpen, VDOORSPEED);
+ line->special = 0;
+ break;
+ case 17: // Start Light Strobing
+ EV_StartLightStrobing(line);
+ line->special = 0;
+ break;
+ case 19: // Lower Floor
+ EV_DoFloor(line, lowerFloor);
+ line->special = 0;
+ break;
+ case 22: // Raise floor to nearest height and change texture
+ EV_DoPlat(line, raiseToNearestAndChange, 0);
+ line->special = 0;
+ break;
+ case 25: // Ceiling Crush and Raise
+ EV_DoCeiling(line, crushAndRaise);
+ line->special = 0;
+ break;
+ case 30: // Raise floor to shortest texture height
+ // on either side of lines
+ EV_DoFloor(line, raiseToTexture);
+ line->special = 0;
+ break;
+ case 35: // Lights Very Dark
+ EV_LightTurnOn(line, 35);
+ line->special = 0;
+ break;
+ case 36: // Lower Floor (TURBO)
+ EV_DoFloor(line, turboLower);
+ line->special = 0;
+ break;
+ case 37: // LowerAndChange
+ EV_DoFloor(line, lowerAndChange);
+ line->special = 0;
+ break;
+ case 38: // Lower Floor To Lowest
+ EV_DoFloor(line, lowerFloorToLowest);
+ line->special = 0;
+ break;
+ case 39: // TELEPORT!
+ EV_Teleport(line, side, thing);
+ line->special = 0;
+ break;
+ case 40: // RaiseCeilingLowerFloor
+ EV_DoCeiling(line, raiseToHighest);
+ EV_DoFloor(line, lowerFloorToLowest);
+ line->special = 0;
+ break;
+ case 44: // Ceiling Crush
+ EV_DoCeiling(line, lowerAndCrush);
+ line->special = 0;
+ break;
+ case 52: // EXIT!
+ G_ExitLevel();
+ line->special = 0;
+ break;
+ case 53: // Perpetual Platform Raise
+ EV_DoPlat(line, perpetualRaise, 0);
+ line->special = 0;
+ break;
+ case 54: // Platform Stop
+ EV_StopPlat(line);
+ line->special = 0;
+ break;
+ case 56: // Raise Floor Crush
+ EV_DoFloor(line, raiseFloorCrush);
+ line->special = 0;
+ break;
+ case 57: // Ceiling Crush Stop
+ EV_CeilingCrushStop(line);
+ line->special = 0;
+ break;
+ case 58: // Raise Floor 24
+ EV_DoFloor(line, raiseFloor24);
+ line->special = 0;
+ break;
+ case 59: // Raise Floor 24 And Change
+ EV_DoFloor(line, raiseFloor24AndChange);
+ line->special = 0;
+ break;
+ case 104: // Turn lights off in sector(tag)
+ EV_TurnTagLightsOff(line);
+ line->special = 0;
+ break;
+ case 105: // Trigger_SecretExit
+ G_SecretExitLevel();
+ line->special = 0;
+ break;
- //====================================================
- // RE-DOABLE TRIGGERS
- //====================================================
+ //====================================================
+ // RE-DOABLE TRIGGERS
+ //====================================================
- case 72: // Ceiling Crush
- EV_DoCeiling( line, lowerAndCrush );
- break;
- case 73: // Ceiling Crush and Raise
- EV_DoCeiling(line,crushAndRaise);
- break;
- case 74: // Ceiling Crush Stop
- EV_CeilingCrushStop(line);
- break;
- case 75: // Close Door
- EV_DoDoor(line,close,VDOORSPEED);
- break;
- case 76: // Close Door 30
- EV_DoDoor(line,close30ThenOpen,VDOORSPEED);
- break;
- case 77: // Fast Ceiling Crush & Raise
- EV_DoCeiling(line,fastCrushAndRaise);
- break;
- case 79: // Lights Very Dark
- EV_LightTurnOn(line,35);
- break;
- case 80: // Light Turn On - brightest near
- EV_LightTurnOn(line,0);
- break;
- case 81: // Light Turn On 255
- EV_LightTurnOn(line,255);
- break;
- case 82: // Lower Floor To Lowest
- EV_DoFloor( line, lowerFloorToLowest );
- break;
- case 83: // Lower Floor
- EV_DoFloor(line,lowerFloor);
- break;
- case 84: // LowerAndChange
- EV_DoFloor(line,lowerAndChange);
- break;
- case 86: // Open Door
- EV_DoDoor(line,open,VDOORSPEED);
- break;
- case 87: // Perpetual Platform Raise
- EV_DoPlat(line,perpetualRaise,0);
- break;
- case 88: // PlatDownWaitUp
- EV_DoPlat(line,downWaitUpStay,0);
- break;
- case 89: // Platform Stop
- EV_StopPlat(line);
- break;
- case 90: // Raise Door
- EV_DoDoor(line,normal,VDOORSPEED);
- break;
- case 100: // Retrigger_Raise_Door_Turbo
- EV_DoDoor(line, normal, VDOORSPEED*3);
- break;
- case 91: // Raise Floor
- EV_DoFloor(line,raiseFloor);
- break;
- case 92: // Raise Floor 24
- EV_DoFloor(line,raiseFloor24);
- break;
- case 93: // Raise Floor 24 And Change
- EV_DoFloor(line,raiseFloor24AndChange);
- break;
- case 94: // Raise Floor Crush
- EV_DoFloor(line,raiseFloorCrush);
- break;
- case 95: // Raise floor to nearest height and change texture
- EV_DoPlat(line,raiseToNearestAndChange,0);
- break;
- case 96: // Raise floor to shortest texture height
- // on either side of lines
- EV_DoFloor(line,raiseToTexture);
- break;
- case 97: // TELEPORT!
- EV_Teleport( line, side, thing );
- break;
- case 98: // Lower Floor (TURBO)
- EV_DoFloor(line,turboLower);
- break;
- }
+ case 72: // Ceiling Crush
+ EV_DoCeiling(line, lowerAndCrush);
+ break;
+ case 73: // Ceiling Crush and Raise
+ EV_DoCeiling(line, crushAndRaise);
+ break;
+ case 74: // Ceiling Crush Stop
+ EV_CeilingCrushStop(line);
+ break;
+ case 75: // Close Door
+ EV_DoDoor(line, close, VDOORSPEED);
+ break;
+ case 76: // Close Door 30
+ EV_DoDoor(line, close30ThenOpen, VDOORSPEED);
+ break;
+ case 77: // Fast Ceiling Crush & Raise
+ EV_DoCeiling(line, fastCrushAndRaise);
+ break;
+ case 79: // Lights Very Dark
+ EV_LightTurnOn(line, 35);
+ break;
+ case 80: // Light Turn On - brightest near
+ EV_LightTurnOn(line, 0);
+ break;
+ case 81: // Light Turn On 255
+ EV_LightTurnOn(line, 255);
+ break;
+ case 82: // Lower Floor To Lowest
+ EV_DoFloor(line, lowerFloorToLowest);
+ break;
+ case 83: // Lower Floor
+ EV_DoFloor(line, lowerFloor);
+ break;
+ case 84: // LowerAndChange
+ EV_DoFloor(line, lowerAndChange);
+ break;
+ case 86: // Open Door
+ EV_DoDoor(line, open, VDOORSPEED);
+ break;
+ case 87: // Perpetual Platform Raise
+ EV_DoPlat(line, perpetualRaise, 0);
+ break;
+ case 88: // PlatDownWaitUp
+ EV_DoPlat(line, downWaitUpStay, 0);
+ break;
+ case 89: // Platform Stop
+ EV_StopPlat(line);
+ break;
+ case 90: // Raise Door
+ EV_DoDoor(line, normal, VDOORSPEED);
+ break;
+ case 100: // Retrigger_Raise_Door_Turbo
+ EV_DoDoor(line, normal, VDOORSPEED * 3);
+ break;
+ case 91: // Raise Floor
+ EV_DoFloor(line, raiseFloor);
+ break;
+ case 92: // Raise Floor 24
+ EV_DoFloor(line, raiseFloor24);
+ break;
+ case 93: // Raise Floor 24 And Change
+ EV_DoFloor(line, raiseFloor24AndChange);
+ break;
+ case 94: // Raise Floor Crush
+ EV_DoFloor(line, raiseFloorCrush);
+ break;
+ case 95: // Raise floor to nearest height and change texture
+ EV_DoPlat(line, raiseToNearestAndChange, 0);
+ break;
+ case 96: // Raise floor to shortest texture height
+ // on either side of lines
+ EV_DoFloor(line, raiseToTexture);
+ break;
+ case 97: // TELEPORT!
+ EV_Teleport(line, side, thing);
+ break;
+ case 98: // Lower Floor (TURBO)
+ EV_DoFloor(line, turboLower);
+ break;
+ }
}
//----------------------------------------------------------------------------
@@ -777,34 +792,34 @@
//
//----------------------------------------------------------------------------
-void P_ShootSpecialLine(mobj_t *thing, line_t *line)
+void P_ShootSpecialLine(mobj_t * thing, line_t * line)
{
- if(!thing->player)
- { // Check if trigger allowed by non-player mobj
- switch(line->special)
- {
- case 46: // Impact_OpenDoor
- break;
- default:
- return;
- break;
- }
- }
- switch(line->special)
- {
- case 24: // Impact_RaiseFloor
- EV_DoFloor(line, raiseFloor);
- P_ChangeSwitchTexture(line, 0);
- break;
- case 46: // Impact_OpenDoor
- EV_DoDoor(line, open, VDOORSPEED);
- P_ChangeSwitchTexture(line, 1);
- break;
- case 47: // Impact_RaiseFloorNear&Change
- EV_DoPlat(line, raiseToNearestAndChange, 0);
- P_ChangeSwitchTexture(line, 0);
- break;
- }
+ if (!thing->player)
+ { // Check if trigger allowed by non-player mobj
+ switch (line->special)
+ {
+ case 46: // Impact_OpenDoor
+ break;
+ default:
+ return;
+ break;
+ }
+ }
+ switch (line->special)
+ {
+ case 24: // Impact_RaiseFloor
+ EV_DoFloor(line, raiseFloor);
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 46: // Impact_OpenDoor
+ EV_DoDoor(line, open, VDOORSPEED);
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 47: // Impact_RaiseFloorNear&Change
+ EV_DoPlat(line, raiseToNearestAndChange, 0);
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ }
}
//----------------------------------------------------------------------------
@@ -815,96 +830,122 @@
//
//----------------------------------------------------------------------------
-void P_PlayerInSpecialSector(player_t *player)
+void P_PlayerInSpecialSector(player_t * player)
{
- sector_t *sector;
- static int pushTab[5] = {
- 2048*5,
- 2048*10,
- 2048*25,
- 2048*30,
- 2048*35
- };
+ sector_t *sector;
+ static int pushTab[5] = {
+ 2048 * 5,
+ 2048 * 10,
+ 2048 * 25,
+ 2048 * 30,
+ 2048 * 35
+ };
- sector = player->mo->subsector->sector;
- if(player->mo->z != sector->floorheight)
- { // Player is not touching the floor
- return;
- }
- switch(sector->special)
- {
- case 7: // Damage_Sludge
- if(!(leveltime&31))
- {
- P_DamageMobj(player->mo, NULL, NULL, 4);
- }
- break;
- case 5: // Damage_LavaWimpy
- if(!(leveltime&15))
- {
- P_DamageMobj(player->mo, &LavaInflictor, NULL, 5);
- P_HitFloor(player->mo);
- }
- break;
- case 16: // Damage_LavaHefty
- if(!(leveltime&15))
- {
- P_DamageMobj(player->mo, &LavaInflictor, NULL, 8);
- P_HitFloor(player->mo);
- }
- break;
- case 4: // Scroll_EastLavaDamage
- P_Thrust(player, 0, 2048*28);
- if(!(leveltime&15))
- {
- P_DamageMobj(player->mo, &LavaInflictor, NULL, 5);
- P_HitFloor(player->mo);
- }
- break;
- case 9: // SecretArea
- player->secretcount++;
- sector->special = 0;
- break;
- case 11: // Exit_SuperDamage (DOOM E1M8 finale)
- /*
- player->cheats &= ~CF_GODMODE;
- if(!(leveltime&0x1f))
- {
- P_DamageMobj(player->mo, NULL, NULL, 20);
- }
- if(player->health <= 10)
- {
- G_ExitLevel();
- }
- */
- break;
+ sector = player->mo->subsector->sector;
+ if (player->mo->z != sector->floorheight)
+ { // Player is not touching the floor
+ return;
+ }
+ switch (sector->special)
+ {
+ case 7: // Damage_Sludge
+ if (!(leveltime & 31))
+ {
+ P_DamageMobj(player->mo, NULL, NULL, 4);
+ }
+ break;
+ case 5: // Damage_LavaWimpy
+ if (!(leveltime & 15))
+ {
+ P_DamageMobj(player->mo, &LavaInflictor, NULL, 5);
+ P_HitFloor(player->mo);
+ }
+ break;
+ case 16: // Damage_LavaHefty
+ if (!(leveltime & 15))
+ {
+ P_DamageMobj(player->mo, &LavaInflictor, NULL, 8);
+ P_HitFloor(player->mo);
+ }
+ break;
+ case 4: // Scroll_EastLavaDamage
+ P_Thrust(player, 0, 2048 * 28);
+ if (!(leveltime & 15))
+ {
+ P_DamageMobj(player->mo, &LavaInflictor, NULL, 5);
+ P_HitFloor(player->mo);
+ }
+ break;
+ case 9: // SecretArea
+ player->secretcount++;
+ sector->special = 0;
+ break;
+ case 11: // Exit_SuperDamage (DOOM E1M8 finale)
+ /*
+ player->cheats &= ~CF_GODMODE;
+ if(!(leveltime&0x1f))
+ {
+ P_DamageMobj(player->mo, NULL, NULL, 20);
+ }
+ if(player->health <= 10)
+ {
+ G_ExitLevel();
+ }
+ */
+ break;
- case 25: case 26: case 27: case 28: case 29: // Scroll_North
- P_Thrust(player, ANG90, pushTab[sector->special-25]);
- break;
- case 20: case 21: case 22: case 23: case 24: // Scroll_East
- P_Thrust(player, 0, pushTab[sector->special-20]);
- break;
- case 30: case 31: case 32: case 33: case 34: // Scroll_South
- P_Thrust(player, ANG270, pushTab[sector->special-30]);
- break;
- case 35: case 36: case 37: case 38: case 39: // Scroll_West
- P_Thrust(player, ANG180, pushTab[sector->special-35]);
- break;
+ case 25:
+ case 26:
+ case 27:
+ case 28:
+ case 29: // Scroll_North
+ P_Thrust(player, ANG90, pushTab[sector->special - 25]);
+ break;
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 24: // Scroll_East
+ P_Thrust(player, 0, pushTab[sector->special - 20]);
+ break;
+ case 30:
+ case 31:
+ case 32:
+ case 33:
+ case 34: // Scroll_South
+ P_Thrust(player, ANG270, pushTab[sector->special - 30]);
+ break;
+ case 35:
+ case 36:
+ case 37:
+ case 38:
+ case 39: // Scroll_West
+ P_Thrust(player, ANG180, pushTab[sector->special - 35]);
+ break;
- case 40: case 41: case 42: case 43: case 44: case 45:
- case 46: case 47: case 48: case 49: case 50: case 51:
- // Wind specials are handled in (P_mobj):P_XYMovement
- break;
+ case 40:
+ case 41:
+ case 42:
+ case 43:
+ case 44:
+ case 45:
+ case 46:
+ case 47:
+ case 48:
+ case 49:
+ case 50:
+ case 51:
+ // Wind specials are handled in (P_mobj):P_XYMovement
+ break;
- case 15: // Friction_Low
- // Only used in (P_mobj):P_XYMovement and (P_user):P_Thrust
- break;
+ case 15: // Friction_Low
+ // Only used in (P_mobj):P_XYMovement and (P_user):P_Thrust
+ break;
- default:
- I_Error("P_PlayerInSpecialSector: "
- "unknown special %i", sector->special);
- }
+ default:
+ I_Error("P_PlayerInSpecialSector: "
+ "unknown special %i", sector->special);
+ }
}
//----------------------------------------------------------------------------
@@ -917,138 +958,140 @@
void P_UpdateSpecials(void)
{
- int i;
- int pic;
- anim_t *anim;
- line_t *line;
+ int i;
+ int pic;
+ anim_t *anim;
+ line_t *line;
- // Animate flats and textures
- for(anim = anims; anim < lastanim; anim++)
- {
- for(i = anim->basepic; i < anim->basepic+anim->numpics; i++)
- {
- pic = anim->basepic+((leveltime/anim->speed+i)%anim->numpics);
- if(anim->istexture)
- {
- texturetranslation[i] = pic;
- }
- else
- {
- flattranslation[i] = pic;
- }
- }
- }
- // Update scrolling texture offsets
- for(i = 0; i < numlinespecials; i++)
- {
- line = linespeciallist[i];
- switch(line->special)
- {
- case 48: // Effect_Scroll_Left
- sides[line->sidenum[0]].textureoffset += FRACUNIT;
- break;
- case 99: // Effect_Scroll_Right
- sides[line->sidenum[0]].textureoffset -= FRACUNIT;
- break;
- }
- }
- // Handle buttons
- for(i = 0; i < MAXBUTTONS; i++)
- {
- if(buttonlist[i].btimer)
- {
- buttonlist[i].btimer--;
- if(!buttonlist[i].btimer)
- {
- switch(buttonlist[i].where)
- {
- case top:
- sides[buttonlist[i].line->sidenum[0]].toptexture =
- buttonlist[i].btexture;
- break;
- case middle:
- sides[buttonlist[i].line->sidenum[0]].midtexture =
- buttonlist[i].btexture;
- break;
- case bottom:
- sides[buttonlist[i].line->sidenum[0]].bottomtexture =
- buttonlist[i].btexture;
- break;
- }
- S_StartSound((mobj_t *)&buttonlist[i].soundorg, sfx_switch);
- memset(&buttonlist[i], 0, sizeof(button_t));
- }
- }
- }
-}
+ // Animate flats and textures
+ for (anim = anims; anim < lastanim; anim++)
+ {
+ for (i = anim->basepic; i < anim->basepic + anim->numpics; i++)
+ {
+ pic =
+ anim->basepic +
+ ((leveltime / anim->speed + i) % anim->numpics);
+ if (anim->istexture)
+ {
+ texturetranslation[i] = pic;
+ }
+ else
+ {
+ flattranslation[i] = pic;
+ }
+ }
+ }
+ // Update scrolling texture offsets
+ for (i = 0; i < numlinespecials; i++)
+ {
+ line = linespeciallist[i];
+ switch (line->special)
+ {
+ case 48: // Effect_Scroll_Left
+ sides[line->sidenum[0]].textureoffset += FRACUNIT;
+ break;
+ case 99: // Effect_Scroll_Right
+ sides[line->sidenum[0]].textureoffset -= FRACUNIT;
+ break;
+ }
+ }
+ // Handle buttons
+ for (i = 0; i < MAXBUTTONS; i++)
+ {
+ if (buttonlist[i].btimer)
+ {
+ buttonlist[i].btimer--;
+ if (!buttonlist[i].btimer)
+ {
+ switch (buttonlist[i].where)
+ {
+ case top:
+ sides[buttonlist[i].line->sidenum[0]].toptexture =
+ buttonlist[i].btexture;
+ break;
+ case middle:
+ sides[buttonlist[i].line->sidenum[0]].midtexture =
+ buttonlist[i].btexture;
+ break;
+ case bottom:
+ sides[buttonlist[i].line->sidenum[0]].bottomtexture =
+ buttonlist[i].btexture;
+ break;
+ }
+ S_StartSound((mobj_t *) & buttonlist[i].soundorg, sfx_switch);
+ memset(&buttonlist[i], 0, sizeof(button_t));
+ }
+ }
+ }
+}
//============================================================
//
-// Special Stuff that can't be categorized
+// Special Stuff that can't be categorized
//
//============================================================
-int EV_DoDonut(line_t *line)
+int EV_DoDonut(line_t * line)
{
- sector_t *s1;
- sector_t *s2;
- sector_t *s3;
- int secnum;
- int rtn;
- int i;
- floormove_t *floor;
-
- secnum = -1;
- rtn = 0;
- while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
- {
- s1 = §ors[secnum];
-
- // ALREADY MOVING? IF SO, KEEP GOING...
- if (s1->specialdata)
- continue;
-
- rtn = 1;
- s2 = getNextSector(s1->lines[0],s1);
- for (i = 0;i < s2->linecount;i++)
- {
- if ((!s2->lines[i]->flags & ML_TWOSIDED) ||
- (s2->lines[i]->backsector == s1))
- continue;
- s3 = s2->lines[i]->backsector;
+ sector_t *s1;
+ sector_t *s2;
+ sector_t *s3;
+ int secnum;
+ int rtn;
+ int i;
+ floormove_t *floor;
+
+ secnum = -1;
+ rtn = 0;
+ while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0)
+ {
+ s1 = §ors[secnum];
+
+ // ALREADY MOVING? IF SO, KEEP GOING...
+ if (s1->specialdata)
+ continue;
+
+ rtn = 1;
+ s2 = getNextSector(s1->lines[0], s1);
+ for (i = 0; i < s2->linecount; i++)
+ {
+ if ((!s2->lines[i]->flags & ML_TWOSIDED) ||
+ (s2->lines[i]->backsector == s1))
+ continue;
+ s3 = s2->lines[i]->backsector;
+
+ //
+ // Spawn rising slime
+ //
+ floor = Z_Malloc(sizeof(*floor), PU_LEVSPEC, 0);
+ P_AddThinker(&floor->thinker);
+ s2->specialdata = floor;
+ floor->thinker.function = T_MoveFloor;
+ floor->type = donutRaise;
+ floor->crush = false;
+ floor->direction = 1;
+ floor->sector = s2;
+ floor->speed = FLOORSPEED / 2;
+ floor->texture = s3->floorpic;
+ floor->newspecial = 0;
+ floor->floordestheight = s3->floorheight;
- //
- // Spawn rising slime
- //
- floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0);
- P_AddThinker (&floor->thinker);
- s2->specialdata = floor;
- floor->thinker.function = T_MoveFloor;
- floor->type = donutRaise;
- floor->crush = false;
- floor->direction = 1;
- floor->sector = s2;
- floor->speed = FLOORSPEED / 2;
- floor->texture = s3->floorpic;
- floor->newspecial = 0;
- floor->floordestheight = s3->floorheight;
-
- //
- // Spawn lowering donut-hole
- //
- floor = Z_Malloc (sizeof(*floor), PU_LEVSPEC, 0);
- P_AddThinker (&floor->thinker);
- s1->specialdata = floor;
- floor->thinker.function = T_MoveFloor;
- floor->type = lowerFloor;
- floor->crush = false;
- floor->direction = -1;
- floor->sector = s1;
- floor->speed = FLOORSPEED / 2;
- floor->floordestheight = s3->floorheight;
- break;
- }
- }
- return rtn;
+ //
+ // Spawn lowering donut-hole
+ //
+ floor = Z_Malloc(sizeof(*floor), PU_LEVSPEC, 0);
+ P_AddThinker(&floor->thinker);
+ s1->specialdata = floor;
+ floor->thinker.function = T_MoveFloor;
+ floor->type = lowerFloor;
+ floor->crush = false;
+ floor->direction = -1;
+ floor->sector = s1;
+ floor->speed = FLOORSPEED / 2;
+ floor->floordestheight = s3->floorheight;
+ break;
+ }
+ }
+ return rtn;
}
/*
@@ -1068,87 +1111,87 @@
===============================================================================
*/
-short numlinespecials;
-line_t *linespeciallist[MAXLINEANIMS];
+short numlinespecials;
+line_t *linespeciallist[MAXLINEANIMS];
-void P_SpawnSpecials (void)
+void P_SpawnSpecials(void)
{
- sector_t *sector;
- int i;
- int episode;
+ sector_t *sector;
+ int i;
+ int episode;
- episode = 1;
- if (W_CheckNumForName("texture2") >= 0)
- episode = 2;
-
- //
- // Init special SECTORs
- //
- sector = sectors;
- for (i=0 ; i<numsectors ; i++, sector++)
- {
- if (!sector->special)
- continue;
- switch (sector->special)
- {
- case 1: // FLICKERING LIGHTS
- P_SpawnLightFlash (sector);
- break;
- case 2: // STROBE FAST
- P_SpawnStrobeFlash(sector,FASTDARK,0);
- break;
- case 3: // STROBE SLOW
- P_SpawnStrobeFlash(sector,SLOWDARK,0);
- break;
- case 4: // STROBE FAST/DEATH SLIME
- P_SpawnStrobeFlash(sector,FASTDARK,0);
- sector->special = 4;
- break;
- case 8: // GLOWING LIGHT
- P_SpawnGlowingLight(sector);
- break;
- case 9: // SECRET SECTOR
- totalsecret++;
- break;
- case 10: // DOOR CLOSE IN 30 SECONDS
- P_SpawnDoorCloseIn30 (sector);
- break;
- case 12: // SYNC STROBE SLOW
- P_SpawnStrobeFlash (sector, SLOWDARK, 1);
- break;
- case 13: // SYNC STROBE FAST
- P_SpawnStrobeFlash (sector, FASTDARK, 1);
- break;
- case 14: // DOOR RAISE IN 5 MINUTES
- P_SpawnDoorRaiseIn5Mins (sector, i);
- break;
- }
- }
-
-
- //
- // Init line EFFECTs
- //
- numlinespecials = 0;
- for (i = 0;i < numlines; i++)
- switch(lines[i].special)
- {
- case 48: // Effect_Scroll_Left
- case 99: // Effect_Scroll_Right
- linespeciallist[numlinespecials] = &lines[i];
- numlinespecials++;
- break;
- }
-
- //
- // Init other misc stuff
- //
- for (i = 0;i < MAXCEILINGS;i++)
- activeceilings[i] = NULL;
- for (i = 0;i < MAXPLATS;i++)
- activeplats[i] = NULL;
- for (i = 0;i < MAXBUTTONS;i++)
- memset(&buttonlist[i],0,sizeof(button_t));
+ episode = 1;
+ if (W_CheckNumForName("texture2") >= 0)
+ episode = 2;
+
+ //
+ // Init special SECTORs
+ //
+ sector = sectors;
+ for (i = 0; i < numsectors; i++, sector++)
+ {
+ if (!sector->special)
+ continue;
+ switch (sector->special)
+ {
+ case 1: // FLICKERING LIGHTS
+ P_SpawnLightFlash(sector);
+ break;
+ case 2: // STROBE FAST
+ P_SpawnStrobeFlash(sector, FASTDARK, 0);
+ break;
+ case 3: // STROBE SLOW
+ P_SpawnStrobeFlash(sector, SLOWDARK, 0);
+ break;
+ case 4: // STROBE FAST/DEATH SLIME
+ P_SpawnStrobeFlash(sector, FASTDARK, 0);
+ sector->special = 4;
+ break;
+ case 8: // GLOWING LIGHT
+ P_SpawnGlowingLight(sector);
+ break;
+ case 9: // SECRET SECTOR
+ totalsecret++;
+ break;
+ case 10: // DOOR CLOSE IN 30 SECONDS
+ P_SpawnDoorCloseIn30(sector);
+ break;
+ case 12: // SYNC STROBE SLOW
+ P_SpawnStrobeFlash(sector, SLOWDARK, 1);
+ break;
+ case 13: // SYNC STROBE FAST
+ P_SpawnStrobeFlash(sector, FASTDARK, 1);
+ break;
+ case 14: // DOOR RAISE IN 5 MINUTES
+ P_SpawnDoorRaiseIn5Mins(sector, i);
+ break;
+ }
+ }
+
+
+ //
+ // Init line EFFECTs
+ //
+ numlinespecials = 0;
+ for (i = 0; i < numlines; i++)
+ switch (lines[i].special)
+ {
+ case 48: // Effect_Scroll_Left
+ case 99: // Effect_Scroll_Right
+ linespeciallist[numlinespecials] = &lines[i];
+ numlinespecials++;
+ break;
+ }
+
+ //
+ // Init other misc stuff
+ //
+ for (i = 0; i < MAXCEILINGS; i++)
+ activeceilings[i] = NULL;
+ for (i = 0; i < MAXPLATS; i++)
+ activeplats[i] = NULL;
+ for (i = 0; i < MAXBUTTONS; i++)
+ memset(&buttonlist[i], 0, sizeof(button_t));
}
//----------------------------------------------------------------------------
@@ -1159,10 +1202,10 @@
void P_InitAmbientSound(void)
{
- AmbSfxCount = 0;
- AmbSfxVolume = 0;
- AmbSfxTics = 10*TICSPERSEC;
- AmbSfxPtr = AmbSndSeqInit;
+ AmbSfxCount = 0;
+ AmbSfxVolume = 0;
+ AmbSfxTics = 10 * TICSPERSEC;
+ AmbSfxPtr = AmbSndSeqInit;
}
//----------------------------------------------------------------------------
@@ -1175,11 +1218,11 @@
void P_AddAmbientSfx(int sequence)
{
- if(AmbSfxCount == MAX_AMBIENT_SFX)
- {
- I_Error("Too many ambient sound sequences");
- }
- LevelAmbientSfx[AmbSfxCount++] = AmbientSfx[sequence];
+ if (AmbSfxCount == MAX_AMBIENT_SFX)
+ {
+ I_Error("Too many ambient sound sequences");
+ }
+ LevelAmbientSfx[AmbSfxCount++] = AmbientSfx[sequence];
}
//----------------------------------------------------------------------------
@@ -1192,62 +1235,63 @@
void P_AmbientSound(void)
{
- afxcmd_t cmd;
- int sound;
- boolean done;
+ afxcmd_t cmd;
+ int sound;
+ boolean done;
- if(!AmbSfxCount)
- { // No ambient sound sequences on current level
- return;
- }
- if(--AmbSfxTics)
- {
- return;
- }
- done = false;
- do
- {
- cmd = *AmbSfxPtr++;
- switch(cmd)
- {
- case afxcmd_play:
- AmbSfxVolume = P_Random()>>2;
- S_StartSoundAtVolume(NULL, *AmbSfxPtr++, AmbSfxVolume);
- break;
- case afxcmd_playabsvol:
- sound = *AmbSfxPtr++;
- AmbSfxVolume = *AmbSfxPtr++;
- S_StartSoundAtVolume(NULL, sound, AmbSfxVolume);
- break;
- case afxcmd_playrelvol:
- sound = *AmbSfxPtr++;
- AmbSfxVolume += *AmbSfxPtr++;
- if(AmbSfxVolume < 0)
- {
- AmbSfxVolume = 0;
- }
- else if(AmbSfxVolume > 127)
- {
- AmbSfxVolume = 127;
- }
- S_StartSoundAtVolume(NULL, sound, AmbSfxVolume);
- break;
- case afxcmd_delay:
- AmbSfxTics = *AmbSfxPtr++;
- done = true;
- break;
- case afxcmd_delayrand:
- AmbSfxTics = P_Random()&(*AmbSfxPtr++);
- done = true;
- break;
- case afxcmd_end:
- AmbSfxTics = 6*TICSPERSEC+P_Random();
- AmbSfxPtr = LevelAmbientSfx[P_Random()%AmbSfxCount];
- done = true;
- break;
- default:
- I_Error("P_AmbientSound: Unknown afxcmd %d", cmd);
- break;
- }
- } while(done == false);
+ if (!AmbSfxCount)
+ { // No ambient sound sequences on current level
+ return;
+ }
+ if (--AmbSfxTics)
+ {
+ return;
+ }
+ done = false;
+ do
+ {
+ cmd = *AmbSfxPtr++;
+ switch (cmd)
+ {
+ case afxcmd_play:
+ AmbSfxVolume = P_Random() >> 2;
+ S_StartSoundAtVolume(NULL, *AmbSfxPtr++, AmbSfxVolume);
+ break;
+ case afxcmd_playabsvol:
+ sound = *AmbSfxPtr++;
+ AmbSfxVolume = *AmbSfxPtr++;
+ S_StartSoundAtVolume(NULL, sound, AmbSfxVolume);
+ break;
+ case afxcmd_playrelvol:
+ sound = *AmbSfxPtr++;
+ AmbSfxVolume += *AmbSfxPtr++;
+ if (AmbSfxVolume < 0)
+ {
+ AmbSfxVolume = 0;
+ }
+ else if (AmbSfxVolume > 127)
+ {
+ AmbSfxVolume = 127;
+ }
+ S_StartSoundAtVolume(NULL, sound, AmbSfxVolume);
+ break;
+ case afxcmd_delay:
+ AmbSfxTics = *AmbSfxPtr++;
+ done = true;
+ break;
+ case afxcmd_delayrand:
+ AmbSfxTics = P_Random() & (*AmbSfxPtr++);
+ done = true;
+ break;
+ case afxcmd_end:
+ AmbSfxTics = 6 * TICSPERSEC + P_Random();
+ AmbSfxPtr = LevelAmbientSfx[P_Random() % AmbSfxCount];
+ done = true;
+ break;
+ default:
+ I_Error("P_AmbientSound: Unknown afxcmd %d", cmd);
+ break;
+ }
+ }
+ while (done == false);
}
--- a/src/heretic/p_spec.h
+++ b/src/heretic/p_spec.h
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_spec.h
@@ -10,41 +32,41 @@
*/
//
-// Animating textures and planes
+// Animating textures and planes
//
typedef struct
{
- boolean istexture;
- int picnum;
- int basepic;
- int numpics;
- int speed;
+ boolean istexture;
+ int picnum;
+ int basepic;
+ int numpics;
+ int speed;
} anim_t;
//
-// source animation definition
+// source animation definition
//
typedef struct
{
- boolean istexture; // if false, it's a flat
- char endname[9];
- char startname[9];
- int speed;
+ boolean istexture; // if false, it's a flat
+ char endname[9];
+ char startname[9];
+ int speed;
} animdef_t;
#define MAXANIMS 32
-extern anim_t anims[MAXANIMS], *lastanim;
+extern anim_t anims[MAXANIMS], *lastanim;
extern int *TerrainTypes;
//
-// Animating line specials
+// Animating line specials
//
#define MAXLINEANIMS 64
-extern short numlinespecials;
-extern line_t *linespeciallist[MAXLINEANIMS];
+extern short numlinespecials;
+extern line_t *linespeciallist[MAXLINEANIMS];
-// Define values for map objects
+// Define values for map objects
#define MO_TELEPORTMAN 14
// at game start
@@ -62,28 +84,28 @@
void P_AmbientSound(void);
// when needed
-boolean P_UseSpecialLine ( mobj_t *thing, line_t *line);
-void P_ShootSpecialLine ( mobj_t *thing, line_t *line);
-void P_CrossSpecialLine (int linenum, int side, mobj_t *thing);
+boolean P_UseSpecialLine(mobj_t * thing, line_t * line);
+void P_ShootSpecialLine(mobj_t * thing, line_t * line);
+void P_CrossSpecialLine(int linenum, int side, mobj_t * thing);
-void P_PlayerInSpecialSector (player_t *player);
+void P_PlayerInSpecialSector(player_t * player);
-int twoSided(int sector,int line);
-sector_t *getSector(int currentSector,int line,int side);
-side_t *getSide(int currentSector,int line, int side);
-fixed_t P_FindLowestFloorSurrounding(sector_t *sec);
-fixed_t P_FindHighestFloorSurrounding(sector_t *sec);
-fixed_t P_FindNextHighestFloor(sector_t *sec,int currentheight);
-fixed_t P_FindLowestCeilingSurrounding(sector_t *sec);
-fixed_t P_FindHighestCeilingSurrounding(sector_t *sec);
-int P_FindSectorFromLineTag(line_t *line,int start);
-int P_FindMinSurroundingLight(sector_t *sector,int max);
-sector_t *getNextSector(line_t *line,sector_t *sec);
+int twoSided(int sector, int line);
+sector_t *getSector(int currentSector, int line, int side);
+side_t *getSide(int currentSector, int line, int side);
+fixed_t P_FindLowestFloorSurrounding(sector_t * sec);
+fixed_t P_FindHighestFloorSurrounding(sector_t * sec);
+fixed_t P_FindNextHighestFloor(sector_t * sec, int currentheight);
+fixed_t P_FindLowestCeilingSurrounding(sector_t * sec);
+fixed_t P_FindHighestCeilingSurrounding(sector_t * sec);
+int P_FindSectorFromLineTag(line_t * line, int start);
+int P_FindMinSurroundingLight(sector_t * sector, int max);
+sector_t *getNextSector(line_t * line, sector_t * sec);
//
-// SPECIAL
+// SPECIAL
//
-int EV_DoDonut(line_t *line);
+int EV_DoDonut(line_t * line);
/*
===============================================================================
@@ -94,33 +116,33 @@
*/
typedef struct
{
- thinker_t thinker;
- sector_t *sector;
- int count;
- int maxlight;
- int minlight;
- int maxtime;
- int mintime;
+ thinker_t thinker;
+ sector_t *sector;
+ int count;
+ int maxlight;
+ int minlight;
+ int maxtime;
+ int mintime;
} lightflash_t;
typedef struct
{
- thinker_t thinker;
- sector_t *sector;
- int count;
- int minlight;
- int maxlight;
- int darktime;
- int brighttime;
+ thinker_t thinker;
+ sector_t *sector;
+ int count;
+ int minlight;
+ int maxlight;
+ int darktime;
+ int brighttime;
} strobe_t;
typedef struct
{
- thinker_t thinker;
- sector_t *sector;
- int minlight;
- int maxlight;
- int direction;
+ thinker_t thinker;
+ sector_t *sector;
+ int minlight;
+ int maxlight;
+ int direction;
} glow_t;
#define GLOWSPEED 8
@@ -128,15 +150,15 @@
#define FASTDARK 15
#define SLOWDARK 35
-void T_LightFlash (lightflash_t *flash);
-void P_SpawnLightFlash (sector_t *sector);
-void T_StrobeFlash (strobe_t *flash);
-void P_SpawnStrobeFlash (sector_t *sector, int fastOrSlow, int inSync);
-void EV_StartLightStrobing(line_t *line);
-void EV_TurnTagLightsOff(line_t *line);
-void EV_LightTurnOn(line_t *line, int bright);
-void T_Glow(glow_t *g);
-void P_SpawnGlowingLight(sector_t *sector);
+void T_LightFlash(lightflash_t * flash);
+void P_SpawnLightFlash(sector_t * sector);
+void T_StrobeFlash(strobe_t * flash);
+void P_SpawnStrobeFlash(sector_t * sector, int fastOrSlow, int inSync);
+void EV_StartLightStrobing(line_t * line);
+void EV_TurnTagLightsOff(line_t * line);
+void EV_LightTurnOn(line_t * line, int bright);
+void T_Glow(glow_t * g);
+void P_SpawnGlowingLight(sector_t * sector);
/*
===============================================================================
@@ -147,35 +169,35 @@
*/
typedef struct
{
- char name1[9];
- char name2[9];
- short episode;
+ char name1[9];
+ char name2[9];
+ short episode;
} switchlist_t;
typedef enum
{
- top,
- middle,
- bottom
+ top,
+ middle,
+ bottom
} bwhere_e;
typedef struct
{
- line_t *line;
- bwhere_e where;
- int btexture;
- int btimer;
- mobj_t *soundorg;
+ line_t *line;
+ bwhere_e where;
+ int btexture;
+ int btimer;
+ mobj_t *soundorg;
} button_t;
-#define MAXSWITCHES 50 // max # of wall switches in a level
-#define MAXBUTTONS 16 // 4 players, 4 buttons each at once, max.
-#define BUTTONTIME 35 // 1 second
+#define MAXSWITCHES 50 // max # of wall switches in a level
+#define MAXBUTTONS 16 // 4 players, 4 buttons each at once, max.
+#define BUTTONTIME 35 // 1 second
-extern button_t buttonlist[MAXBUTTONS];
+extern button_t buttonlist[MAXBUTTONS];
-void P_ChangeSwitchTexture(line_t *line,int useAgain);
-void P_InitSwitchList(void);
+void P_ChangeSwitchTexture(line_t * line, int useAgain);
+void P_InitSwitchList(void);
/*
===============================================================================
@@ -186,34 +208,34 @@
*/
typedef enum
{
- up,
- down,
- waiting,
- in_stasis
+ up,
+ down,
+ waiting,
+ in_stasis
} plat_e;
typedef enum
{
- perpetualRaise,
- downWaitUpStay,
- raiseAndChange,
- raiseToNearestAndChange
+ perpetualRaise,
+ downWaitUpStay,
+ raiseAndChange,
+ raiseToNearestAndChange
} plattype_e;
typedef struct
{
- thinker_t thinker;
- sector_t *sector;
- fixed_t speed;
- fixed_t low;
- fixed_t high;
- int wait;
- int count;
- plat_e status;
- plat_e oldstatus;
- boolean crush;
- int tag;
- plattype_e type;
+ thinker_t thinker;
+ sector_t *sector;
+ fixed_t speed;
+ fixed_t low;
+ fixed_t high;
+ int wait;
+ int count;
+ plat_e status;
+ plat_e oldstatus;
+ boolean crush;
+ int tag;
+ plattype_e type;
} plat_t;
#define PLATWAIT 3
@@ -220,14 +242,14 @@
#define PLATSPEED FRACUNIT
#define MAXPLATS 30
-extern plat_t *activeplats[MAXPLATS];
+extern plat_t *activeplats[MAXPLATS];
-void T_PlatRaise(plat_t *plat);
-int EV_DoPlat(line_t *line,plattype_e type,int amount);
-void P_AddActivePlat(plat_t *plat);
-void P_RemoveActivePlat(plat_t *plat);
-void EV_StopPlat(line_t *line);
-void P_ActivateInStasis(int tag);
+void T_PlatRaise(plat_t * plat);
+int EV_DoPlat(line_t * line, plattype_e type, int amount);
+void P_AddActivePlat(plat_t * plat);
+void P_RemoveActivePlat(plat_t * plat);
+void EV_StopPlat(line_t * line);
+void P_ActivateInStasis(int tag);
/*
===============================================================================
@@ -238,34 +260,34 @@
*/
typedef enum
{
- normal,
- close30ThenOpen,
- close,
- open,
- raiseIn5Mins
+ normal,
+ close30ThenOpen,
+ close,
+ open,
+ raiseIn5Mins
} vldoor_e;
typedef struct
{
- thinker_t thinker;
- vldoor_e type;
- sector_t *sector;
- fixed_t topheight;
- fixed_t speed;
- int direction; // 1 = up, 0 = waiting at top, -1 = down
- int topwait; // tics to wait at the top
- // (keep in case a door going down is reset)
- int topcountdown; // when it reaches 0, start going down
+ thinker_t thinker;
+ vldoor_e type;
+ sector_t *sector;
+ fixed_t topheight;
+ fixed_t speed;
+ int direction; // 1 = up, 0 = waiting at top, -1 = down
+ int topwait; // tics to wait at the top
+ // (keep in case a door going down is reset)
+ int topcountdown; // when it reaches 0, start going down
} vldoor_t;
-
+
#define VDOORSPEED FRACUNIT*2
#define VDOORWAIT 150
-void EV_VerticalDoor (line_t *line, mobj_t *thing);
-int EV_DoDoor (line_t *line, vldoor_e type, fixed_t speed);
-void T_VerticalDoor (vldoor_t *door);
-void P_SpawnDoorCloseIn30 (sector_t *sec);
-void P_SpawnDoorRaiseIn5Mins (sector_t *sec, int secnum);
+void EV_VerticalDoor(line_t * line, mobj_t * thing);
+int EV_DoDoor(line_t * line, vldoor_e type, fixed_t speed);
+void T_VerticalDoor(vldoor_t * door);
+void P_SpawnDoorCloseIn30(sector_t * sec);
+void P_SpawnDoorRaiseIn5Mins(sector_t * sec, int secnum);
/*
===============================================================================
@@ -276,24 +298,24 @@
*/
typedef enum
{
- lowerToFloor,
- raiseToHighest,
- lowerAndCrush,
- crushAndRaise,
- fastCrushAndRaise
+ lowerToFloor,
+ raiseToHighest,
+ lowerAndCrush,
+ crushAndRaise,
+ fastCrushAndRaise
} ceiling_e;
typedef struct
{
- thinker_t thinker;
- ceiling_e type;
- sector_t *sector;
- fixed_t bottomheight, topheight;
- fixed_t speed;
- boolean crush;
- int direction; // 1 = up, 0 = waiting, -1 = down
- int tag; // ID
- int olddirection;
+ thinker_t thinker;
+ ceiling_e type;
+ sector_t *sector;
+ fixed_t bottomheight, topheight;
+ fixed_t speed;
+ boolean crush;
+ int direction; // 1 = up, 0 = waiting, -1 = down
+ int tag; // ID
+ int olddirection;
} ceiling_t;
#define CEILSPEED FRACUNIT
@@ -300,14 +322,14 @@
#define CEILWAIT 150
#define MAXCEILINGS 30
-extern ceiling_t *activeceilings[MAXCEILINGS];
+extern ceiling_t *activeceilings[MAXCEILINGS];
-int EV_DoCeiling (line_t *line, ceiling_e type);
-void T_MoveCeiling (ceiling_t *ceiling);
-void P_AddActiveCeiling(ceiling_t *c);
-void P_RemoveActiveCeiling(ceiling_t *c);
-int EV_CeilingCrushStop(line_t *line);
-void P_ActivateInStasisCeiling(line_t *line);
+int EV_DoCeiling(line_t * line, ceiling_e type);
+void T_MoveCeiling(ceiling_t * ceiling);
+void P_AddActiveCeiling(ceiling_t * c);
+void P_RemoveActiveCeiling(ceiling_t * c);
+int EV_CeilingCrushStop(line_t * line);
+void P_ActivateInStasisCeiling(line_t * line);
/*
===============================================================================
@@ -318,32 +340,32 @@
*/
typedef enum
{
- lowerFloor, // lower floor to highest surrounding floor
- lowerFloorToLowest, // lower floor to lowest surrounding floor
- turboLower, // lower floor to highest surrounding floor VERY FAST
- raiseFloor, // raise floor to lowest surrounding CEILING
- raiseFloorToNearest, // raise floor to next highest surrounding floor
- raiseToTexture, // raise floor to shortest height texture around it
- lowerAndChange, // lower floor to lowest surrounding floor and change
- // floorpic
- raiseFloor24,
- raiseFloor24AndChange,
- raiseFloorCrush,
- donutRaise,
- raiseBuildStep // One step of a staircase
+ lowerFloor, // lower floor to highest surrounding floor
+ lowerFloorToLowest, // lower floor to lowest surrounding floor
+ turboLower, // lower floor to highest surrounding floor VERY FAST
+ raiseFloor, // raise floor to lowest surrounding CEILING
+ raiseFloorToNearest, // raise floor to next highest surrounding floor
+ raiseToTexture, // raise floor to shortest height texture around it
+ lowerAndChange, // lower floor to lowest surrounding floor and change
+ // floorpic
+ raiseFloor24,
+ raiseFloor24AndChange,
+ raiseFloorCrush,
+ donutRaise,
+ raiseBuildStep // One step of a staircase
} floor_e;
typedef struct
{
- thinker_t thinker;
- floor_e type;
- boolean crush;
- sector_t *sector;
- int direction;
- int newspecial;
- short texture;
- fixed_t floordestheight;
- fixed_t speed;
+ thinker_t thinker;
+ floor_e type;
+ boolean crush;
+ sector_t *sector;
+ int direction;
+ int newspecial;
+ short texture;
+ fixed_t floordestheight;
+ fixed_t speed;
} floormove_t;
#define FLOORSPEED FRACUNIT
@@ -350,17 +372,18 @@
typedef enum
{
- ok,
- crushed,
- pastdest
+ ok,
+ crushed,
+ pastdest
} result_e;
-result_e T_MovePlane(sector_t *sector,fixed_t speed,
- fixed_t dest,boolean crush,int floorOrCeiling,int direction);
+result_e T_MovePlane(sector_t * sector, fixed_t speed,
+ fixed_t dest, boolean crush, int floorOrCeiling,
+ int direction);
-int EV_BuildStairs(line_t *line, fixed_t stepDelta);
-int EV_DoFloor(line_t *line,floor_e floortype);
-void T_MoveFloor(floormove_t *floor);
+int EV_BuildStairs(line_t * line, fixed_t stepDelta);
+int EV_DoFloor(line_t * line, floor_e floortype);
+void T_MoveFloor(floormove_t * floor);
/*
===============================================================================
@@ -370,5 +393,5 @@
===============================================================================
*/
-boolean P_Teleport(mobj_t *thing, fixed_t x, fixed_t y, angle_t angle);
-boolean EV_Teleport(line_t *line, int side, mobj_t *thing);
+boolean P_Teleport(mobj_t * thing, fixed_t x, fixed_t y, angle_t angle);
+boolean EV_Teleport(line_t * line, int side, mobj_t * thing);
--- a/src/heretic/p_switch.c
+++ b/src/heretic/p_switch.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
#include "DoomDef.h"
#include "P_local.h"
@@ -5,13 +27,12 @@
//==================================================================
//
-// CHANGE THE TEXTURE OF A WALL SWITCH TO ITS OPPOSITE
+// CHANGE THE TEXTURE OF A WALL SWITCH TO ITS OPPOSITE
//
//==================================================================
-switchlist_t alphSwitchList[] =
-{
- {"SW1OFF", "SW1ON", 1},
- {"SW2OFF", "SW2ON", 1},
+switchlist_t alphSwitchList[] = {
+ {"SW1OFF", "SW1ON", 1},
+ {"SW2OFF", "SW2ON", 1},
/*
{"SW1CTY", "SW2CTY", 1},
@@ -35,43 +56,43 @@
*/
#if 0
- {"SW1BRCOM", "SW2BRCOM", 1},
- {"SW1BRN1", "SW2BRN1", 1},
- {"SW1BRN2", "SW2BRN2", 1},
- {"SW1BRNGN", "SW2BRNGN", 1},
- {"SW1BROWN", "SW2BROWN", 1},
- {"SW1COMM", "SW2COMM", 1},
- {"SW1COMP", "SW2COMP", 1},
- {"SW1DIRT", "SW2DIRT", 1},
- {"SW1EXIT", "SW2EXIT", 1},
- {"SW1GRAY", "SW2GRAY", 1},
- {"SW1GRAY1", "SW2GRAY1", 1},
- {"SW1METAL", "SW2METAL", 1},
- {"SW1PIPE", "SW2PIPE", 1},
- {"SW1SLAD", "SW2SLAD", 1},
- {"SW1STARG", "SW2STARG", 1},
- {"SW1STON1", "SW2STON1", 1},
- {"SW1STON2", "SW2STON2", 1},
- {"SW1STONE", "SW2STONE", 1},
- {"SW1STRTN", "SW2STRTN", 1},
-
- {"SW1BLUE", "SW2BLUE", 2},
- {"SW1CMT", "SW2CMT", 2},
- {"SW1GARG", "SW2GARG", 2},
- {"SW1GSTON", "SW2GSTON", 2},
- {"SW1HOT", "SW2HOT", 2},
- {"SW1LION", "SW2LION", 2},
- {"SW1SATYR", "SW2SATYR", 2},
- {"SW1SKIN", "SW2SKIN", 2},
- {"SW1VINE", "SW2VINE", 2},
- {"SW1WOOD", "SW2WOOD", 2},
-#endif
- {"\0", "\0", 0}
+ {"SW1BRCOM", "SW2BRCOM", 1},
+ {"SW1BRN1", "SW2BRN1", 1},
+ {"SW1BRN2", "SW2BRN2", 1},
+ {"SW1BRNGN", "SW2BRNGN", 1},
+ {"SW1BROWN", "SW2BROWN", 1},
+ {"SW1COMM", "SW2COMM", 1},
+ {"SW1COMP", "SW2COMP", 1},
+ {"SW1DIRT", "SW2DIRT", 1},
+ {"SW1EXIT", "SW2EXIT", 1},
+ {"SW1GRAY", "SW2GRAY", 1},
+ {"SW1GRAY1", "SW2GRAY1", 1},
+ {"SW1METAL", "SW2METAL", 1},
+ {"SW1PIPE", "SW2PIPE", 1},
+ {"SW1SLAD", "SW2SLAD", 1},
+ {"SW1STARG", "SW2STARG", 1},
+ {"SW1STON1", "SW2STON1", 1},
+ {"SW1STON2", "SW2STON2", 1},
+ {"SW1STONE", "SW2STONE", 1},
+ {"SW1STRTN", "SW2STRTN", 1},
+
+ {"SW1BLUE", "SW2BLUE", 2},
+ {"SW1CMT", "SW2CMT", 2},
+ {"SW1GARG", "SW2GARG", 2},
+ {"SW1GSTON", "SW2GSTON", 2},
+ {"SW1HOT", "SW2HOT", 2},
+ {"SW1LION", "SW2LION", 2},
+ {"SW1SATYR", "SW2SATYR", 2},
+ {"SW1SKIN", "SW2SKIN", 2},
+ {"SW1VINE", "SW2VINE", 2},
+ {"SW1WOOD", "SW2WOOD", 2},
+#endif
+ {"\0", "\0", 0}
};
-int switchlist[MAXSWITCHES * 2];
-int numswitches;
-button_t buttonlist[MAXBUTTONS];
+int switchlist[MAXSWITCHES * 2];
+int numswitches;
+button_t buttonlist[MAXBUTTONS];
/*
===============
@@ -85,106 +106,106 @@
void P_InitSwitchList(void)
{
- int i;
- int index;
- int episode;
-
- episode = 1;
- if (!shareware)
- episode = 2;
-
- for (index = 0,i = 0;i < MAXSWITCHES;i++)
- {
- if (!alphSwitchList[i].episode)
- {
- numswitches = index/2;
- switchlist[index] = -1;
- break;
- }
-
- if (alphSwitchList[i].episode <= episode)
- {
- switchlist[index++] = R_TextureNumForName(alphSwitchList[i].name1);
- switchlist[index++] = R_TextureNumForName(alphSwitchList[i].name2);
- }
- }
+ int i;
+ int index;
+ int episode;
+
+ episode = 1;
+ if (!shareware)
+ episode = 2;
+
+ for (index = 0, i = 0; i < MAXSWITCHES; i++)
+ {
+ if (!alphSwitchList[i].episode)
+ {
+ numswitches = index / 2;
+ switchlist[index] = -1;
+ break;
+ }
+
+ if (alphSwitchList[i].episode <= episode)
+ {
+ switchlist[index++] =
+ R_TextureNumForName(alphSwitchList[i].name1);
+ switchlist[index++] =
+ R_TextureNumForName(alphSwitchList[i].name2);
+ }
+ }
}
//==================================================================
//
-// Start a button counting down till it turns off.
+// Start a button counting down till it turns off.
//
//==================================================================
-void P_StartButton(line_t *line,bwhere_e w,int texture,int time)
+void P_StartButton(line_t * line, bwhere_e w, int texture, int time)
{
- int i;
-
- for (i = 0;i < MAXBUTTONS;i++)
- if (!buttonlist[i].btimer)
- {
- buttonlist[i].line = line;
- buttonlist[i].where = w;
- buttonlist[i].btexture = texture;
- buttonlist[i].btimer = time;
- buttonlist[i].soundorg = (mobj_t *)&line->frontsector->soundorg;
- return;
- }
-
- I_Error("P_StartButton: no button slots left!");
+ int i;
+
+ for (i = 0; i < MAXBUTTONS; i++)
+ if (!buttonlist[i].btimer)
+ {
+ buttonlist[i].line = line;
+ buttonlist[i].where = w;
+ buttonlist[i].btexture = texture;
+ buttonlist[i].btimer = time;
+ buttonlist[i].soundorg = (mobj_t *) & line->frontsector->soundorg;
+ return;
+ }
+
+ I_Error("P_StartButton: no button slots left!");
}
//==================================================================
//
-// Function that changes wall texture.
-// Tell it if switch is ok to use again (1=yes, it's a button).
+// Function that changes wall texture.
+// Tell it if switch is ok to use again (1=yes, it's a button).
//
//==================================================================
-void P_ChangeSwitchTexture(line_t *line,int useAgain)
+void P_ChangeSwitchTexture(line_t * line, int useAgain)
{
- int texTop;
- int texMid;
- int texBot;
- int i;
- int sound;
-
- if (!useAgain)
- line->special = 0;
+ int texTop;
+ int texMid;
+ int texBot;
+ int i;
+ int sound;
- texTop = sides[line->sidenum[0]].toptexture;
- texMid = sides[line->sidenum[0]].midtexture;
- texBot = sides[line->sidenum[0]].bottomtexture;
+ if (!useAgain)
+ line->special = 0;
- sound = sfx_switch;
- //if (line->special == 11) // EXIT SWITCH?
- // sound = sfx_swtchx;
-
- for (i = 0;i < numswitches*2;i++)
- if (switchlist[i] == texTop)
- {
- S_StartSound(buttonlist->soundorg,sound);
- sides[line->sidenum[0]].toptexture = switchlist[i^1];
- if (useAgain)
- P_StartButton(line,top,switchlist[i],BUTTONTIME);
- return;
- }
- else
- if (switchlist[i] == texMid)
- {
- S_StartSound(buttonlist->soundorg,sound);
- sides[line->sidenum[0]].midtexture = switchlist[i^1];
- if (useAgain)
- P_StartButton(line, middle,switchlist[i],BUTTONTIME);
- return;
- }
- else
- if (switchlist[i] == texBot)
- {
- S_StartSound(buttonlist->soundorg,sound);
- sides[line->sidenum[0]].bottomtexture = switchlist[i^1];
- if (useAgain)
- P_StartButton(line, bottom,switchlist[i],BUTTONTIME);
- return;
- }
+ texTop = sides[line->sidenum[0]].toptexture;
+ texMid = sides[line->sidenum[0]].midtexture;
+ texBot = sides[line->sidenum[0]].bottomtexture;
+
+ sound = sfx_switch;
+ //if (line->special == 11) // EXIT SWITCH?
+ // sound = sfx_swtchx;
+
+ for (i = 0; i < numswitches * 2; i++)
+ if (switchlist[i] == texTop)
+ {
+ S_StartSound(buttonlist->soundorg, sound);
+ sides[line->sidenum[0]].toptexture = switchlist[i ^ 1];
+ if (useAgain)
+ P_StartButton(line, top, switchlist[i], BUTTONTIME);
+ return;
+ }
+ else if (switchlist[i] == texMid)
+ {
+ S_StartSound(buttonlist->soundorg, sound);
+ sides[line->sidenum[0]].midtexture = switchlist[i ^ 1];
+ if (useAgain)
+ P_StartButton(line, middle, switchlist[i], BUTTONTIME);
+ return;
+ }
+ else if (switchlist[i] == texBot)
+ {
+ S_StartSound(buttonlist->soundorg, sound);
+ sides[line->sidenum[0]].bottomtexture = switchlist[i ^ 1];
+ if (useAgain)
+ P_StartButton(line, bottom, switchlist[i], BUTTONTIME);
+ return;
+ }
}
/*
@@ -197,194 +218,193 @@
===============================================================================
*/
-boolean P_UseSpecialLine ( mobj_t *thing, line_t *line)
-{
- //
- // Switches that other things can activate
- //
- if (!thing->player)
- {
- if (line->flags & ML_SECRET)
- return false; // never open secret doors
- switch(line->special)
- {
- case 1: // MANUAL DOOR RAISE
- case 32: // MANUAL BLUE
- case 33: // MANUAL RED
- case 34: // MANUAL YELLOW
- break;
- default:
- return false;
- }
- }
-
- //
- // do something
- //
- switch (line->special)
- {
- //===============================================
- // MANUALS
- //===============================================
- case 1: // Vertical Door
- case 26: // Blue Door/Locked
- case 27: // Yellow Door /Locked
- case 28: // Red Door /Locked
+boolean P_UseSpecialLine(mobj_t * thing, line_t * line)
+{
+ //
+ // Switches that other things can activate
+ //
+ if (!thing->player)
+ {
+ if (line->flags & ML_SECRET)
+ return false; // never open secret doors
+ switch (line->special)
+ {
+ case 1: // MANUAL DOOR RAISE
+ case 32: // MANUAL BLUE
+ case 33: // MANUAL RED
+ case 34: // MANUAL YELLOW
+ break;
+ default:
+ return false;
+ }
+ }
- case 31: // Manual door open
- case 32: // Blue locked door open
- case 33: // Red locked door open
- case 34: // Yellow locked door open
- EV_VerticalDoor (line, thing);
- break;
- //===============================================
- // SWITCHES
- //===============================================
- case 7: // Switch_Build_Stairs (8 pixel steps)
- if(EV_BuildStairs(line, 8*FRACUNIT))
- {
- P_ChangeSwitchTexture(line, 0);
- }
- break;
- case 107: // Switch_Build_Stairs_16 (16 pixel steps)
- if(EV_BuildStairs(line, 16*FRACUNIT))
- {
- P_ChangeSwitchTexture(line, 0);
- }
- break;
- case 9: // Change Donut
- if (EV_DoDonut(line))
- P_ChangeSwitchTexture(line,0);
- break;
- case 11: // Exit level
- G_ExitLevel ();
- P_ChangeSwitchTexture(line,0);
- break;
- case 14: // Raise Floor 32 and change texture
- if (EV_DoPlat(line,raiseAndChange,32))
- P_ChangeSwitchTexture(line,0);
- break;
- case 15: // Raise Floor 24 and change texture
- if (EV_DoPlat(line,raiseAndChange,24))
- P_ChangeSwitchTexture(line,0);
- break;
- case 18: // Raise Floor to next highest floor
- if (EV_DoFloor(line, raiseFloorToNearest))
- P_ChangeSwitchTexture(line,0);
- break;
- case 20: // Raise Plat next highest floor and change texture
- if (EV_DoPlat(line,raiseToNearestAndChange,0))
- P_ChangeSwitchTexture(line,0);
- break;
- case 21: // PlatDownWaitUpStay
- if (EV_DoPlat(line,downWaitUpStay,0))
- P_ChangeSwitchTexture(line,0);
- break;
- case 23: // Lower Floor to Lowest
- if (EV_DoFloor(line,lowerFloorToLowest))
- P_ChangeSwitchTexture(line,0);
- break;
- case 29: // Raise Door
- if (EV_DoDoor(line,normal,VDOORSPEED))
- P_ChangeSwitchTexture(line,0);
- break;
- case 41: // Lower Ceiling to Floor
- if (EV_DoCeiling(line,lowerToFloor))
- P_ChangeSwitchTexture(line,0);
- break;
- case 71: // Turbo Lower Floor
- if (EV_DoFloor(line,turboLower))
- P_ChangeSwitchTexture(line,0);
- break;
- case 49: // Lower Ceiling And Crush
- if (EV_DoCeiling(line,lowerAndCrush))
- P_ChangeSwitchTexture(line,0);
- break;
- case 50: // Close Door
- if (EV_DoDoor(line,close,VDOORSPEED))
- P_ChangeSwitchTexture(line,0);
- break;
- case 51: // Secret EXIT
- G_SecretExitLevel ();
- P_ChangeSwitchTexture(line,0);
- break;
- case 55: // Raise Floor Crush
- if (EV_DoFloor(line,raiseFloorCrush))
- P_ChangeSwitchTexture(line,0);
- break;
- case 101: // Raise Floor
- if (EV_DoFloor(line,raiseFloor))
- P_ChangeSwitchTexture(line,0);
- break;
- case 102: // Lower Floor to Surrounding floor height
- if (EV_DoFloor(line,lowerFloor))
- P_ChangeSwitchTexture(line,0);
- break;
- case 103: // Open Door
- if (EV_DoDoor(line,open,VDOORSPEED))
- P_ChangeSwitchTexture(line,0);
- break;
- //===============================================
- // BUTTONS
- //===============================================
- case 42: // Close Door
- if (EV_DoDoor(line,close,VDOORSPEED))
- P_ChangeSwitchTexture(line,1);
- break;
- case 43: // Lower Ceiling to Floor
- if (EV_DoCeiling(line,lowerToFloor))
- P_ChangeSwitchTexture(line,1);
- break;
- case 45: // Lower Floor to Surrounding floor height
- if (EV_DoFloor(line,lowerFloor))
- P_ChangeSwitchTexture(line,1);
- break;
- case 60: // Lower Floor to Lowest
- if (EV_DoFloor(line,lowerFloorToLowest))
- P_ChangeSwitchTexture(line,1);
- break;
- case 61: // Open Door
- if (EV_DoDoor(line,open,VDOORSPEED))
- P_ChangeSwitchTexture(line,1);
- break;
- case 62: // PlatDownWaitUpStay
- if (EV_DoPlat(line,downWaitUpStay,1))
- P_ChangeSwitchTexture(line,1);
- break;
- case 63: // Raise Door
- if (EV_DoDoor(line,normal,VDOORSPEED))
- P_ChangeSwitchTexture(line,1);
- break;
- case 64: // Raise Floor to ceiling
- if (EV_DoFloor(line,raiseFloor))
- P_ChangeSwitchTexture(line,1);
- break;
- case 66: // Raise Floor 24 and change texture
- if (EV_DoPlat(line,raiseAndChange,24))
- P_ChangeSwitchTexture(line,1);
- break;
- case 67: // Raise Floor 32 and change texture
- if (EV_DoPlat(line,raiseAndChange,32))
- P_ChangeSwitchTexture(line,1);
- break;
- case 65: // Raise Floor Crush
- if (EV_DoFloor(line,raiseFloorCrush))
- P_ChangeSwitchTexture(line,1);
- break;
- case 68: // Raise Plat to next highest floor and change texture
- if (EV_DoPlat(line,raiseToNearestAndChange,0))
- P_ChangeSwitchTexture(line,1);
- break;
- case 69: // Raise Floor to next highest floor
- if (EV_DoFloor(line, raiseFloorToNearest))
- P_ChangeSwitchTexture(line,1);
- break;
- case 70: // Turbo Lower Floor
- if (EV_DoFloor(line,turboLower))
- P_ChangeSwitchTexture(line,1);
- break;
- }
-
- return true;
-}
+ //
+ // do something
+ //
+ switch (line->special)
+ {
+ //===============================================
+ // MANUALS
+ //===============================================
+ case 1: // Vertical Door
+ case 26: // Blue Door/Locked
+ case 27: // Yellow Door /Locked
+ case 28: // Red Door /Locked
+
+ case 31: // Manual door open
+ case 32: // Blue locked door open
+ case 33: // Red locked door open
+ case 34: // Yellow locked door open
+ EV_VerticalDoor(line, thing);
+ break;
+ //===============================================
+ // SWITCHES
+ //===============================================
+ case 7: // Switch_Build_Stairs (8 pixel steps)
+ if (EV_BuildStairs(line, 8 * FRACUNIT))
+ {
+ P_ChangeSwitchTexture(line, 0);
+ }
+ break;
+ case 107: // Switch_Build_Stairs_16 (16 pixel steps)
+ if (EV_BuildStairs(line, 16 * FRACUNIT))
+ {
+ P_ChangeSwitchTexture(line, 0);
+ }
+ break;
+ case 9: // Change Donut
+ if (EV_DoDonut(line))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 11: // Exit level
+ G_ExitLevel();
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 14: // Raise Floor 32 and change texture
+ if (EV_DoPlat(line, raiseAndChange, 32))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 15: // Raise Floor 24 and change texture
+ if (EV_DoPlat(line, raiseAndChange, 24))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 18: // Raise Floor to next highest floor
+ if (EV_DoFloor(line, raiseFloorToNearest))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 20: // Raise Plat next highest floor and change texture
+ if (EV_DoPlat(line, raiseToNearestAndChange, 0))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 21: // PlatDownWaitUpStay
+ if (EV_DoPlat(line, downWaitUpStay, 0))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 23: // Lower Floor to Lowest
+ if (EV_DoFloor(line, lowerFloorToLowest))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 29: // Raise Door
+ if (EV_DoDoor(line, normal, VDOORSPEED))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 41: // Lower Ceiling to Floor
+ if (EV_DoCeiling(line, lowerToFloor))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 71: // Turbo Lower Floor
+ if (EV_DoFloor(line, turboLower))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 49: // Lower Ceiling And Crush
+ if (EV_DoCeiling(line, lowerAndCrush))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 50: // Close Door
+ if (EV_DoDoor(line, close, VDOORSPEED))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 51: // Secret EXIT
+ G_SecretExitLevel();
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 55: // Raise Floor Crush
+ if (EV_DoFloor(line, raiseFloorCrush))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 101: // Raise Floor
+ if (EV_DoFloor(line, raiseFloor))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 102: // Lower Floor to Surrounding floor height
+ if (EV_DoFloor(line, lowerFloor))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ case 103: // Open Door
+ if (EV_DoDoor(line, open, VDOORSPEED))
+ P_ChangeSwitchTexture(line, 0);
+ break;
+ //===============================================
+ // BUTTONS
+ //===============================================
+ case 42: // Close Door
+ if (EV_DoDoor(line, close, VDOORSPEED))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 43: // Lower Ceiling to Floor
+ if (EV_DoCeiling(line, lowerToFloor))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 45: // Lower Floor to Surrounding floor height
+ if (EV_DoFloor(line, lowerFloor))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 60: // Lower Floor to Lowest
+ if (EV_DoFloor(line, lowerFloorToLowest))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 61: // Open Door
+ if (EV_DoDoor(line, open, VDOORSPEED))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 62: // PlatDownWaitUpStay
+ if (EV_DoPlat(line, downWaitUpStay, 1))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 63: // Raise Door
+ if (EV_DoDoor(line, normal, VDOORSPEED))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 64: // Raise Floor to ceiling
+ if (EV_DoFloor(line, raiseFloor))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 66: // Raise Floor 24 and change texture
+ if (EV_DoPlat(line, raiseAndChange, 24))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 67: // Raise Floor 32 and change texture
+ if (EV_DoPlat(line, raiseAndChange, 32))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 65: // Raise Floor Crush
+ if (EV_DoFloor(line, raiseFloorCrush))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 68: // Raise Plat to next highest floor and change texture
+ if (EV_DoPlat(line, raiseToNearestAndChange, 0))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 69: // Raise Floor to next highest floor
+ if (EV_DoFloor(line, raiseFloorToNearest))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ case 70: // Turbo Lower Floor
+ if (EV_DoFloor(line, turboLower))
+ P_ChangeSwitchTexture(line, 1);
+ break;
+ }
+ return true;
+}
--- a/src/heretic/p_telept.c
+++ b/src/heretic/p_telept.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_telept.c
@@ -11,88 +33,89 @@
//
//----------------------------------------------------------------------------
-boolean P_Teleport(mobj_t *thing, fixed_t x, fixed_t y, angle_t angle)
+boolean P_Teleport(mobj_t * thing, fixed_t x, fixed_t y, angle_t angle)
{
- fixed_t oldx;
- fixed_t oldy;
- fixed_t oldz;
- fixed_t aboveFloor;
- fixed_t fogDelta;
- player_t *player;
- unsigned an;
- mobj_t *fog;
+ fixed_t oldx;
+ fixed_t oldy;
+ fixed_t oldz;
+ fixed_t aboveFloor;
+ fixed_t fogDelta;
+ player_t *player;
+ unsigned an;
+ mobj_t *fog;
- oldx = thing->x;
- oldy = thing->y;
- oldz = thing->z;
- aboveFloor = thing->z-thing->floorz;
- if(!P_TeleportMove(thing, x, y))
- {
- return(false);
- }
- if(thing->player)
- {
- player = thing->player;
- if(player->powers[pw_flight] && aboveFloor)
- {
- thing->z = thing->floorz+aboveFloor;
- if(thing->z+thing->height > thing->ceilingz)
- {
- thing->z = thing->ceilingz-thing->height;
- }
- player->viewz = thing->z+player->viewheight;
- }
- else
- {
- thing->z = thing->floorz;
- player->viewz = thing->z+player->viewheight;
- player->lookdir = 0;
- }
- }
- else if(thing->flags&MF_MISSILE)
- {
- thing->z = thing->floorz+aboveFloor;
- if(thing->z+thing->height > thing->ceilingz)
- {
- thing->z = thing->ceilingz-thing->height;
- }
- }
- else
- {
- thing->z = thing->floorz;
- }
- // Spawn teleport fog at source and destination
- fogDelta = thing->flags&MF_MISSILE ? 0 : TELEFOGHEIGHT;
- fog = P_SpawnMobj(oldx, oldy, oldz+fogDelta, MT_TFOG);
- S_StartSound(fog, sfx_telept);
- an = angle>>ANGLETOFINESHIFT;
- fog = P_SpawnMobj(x+20*finecosine[an],
- y+20*finesine[an], thing->z+fogDelta, MT_TFOG);
- S_StartSound(fog, sfx_telept);
- if(thing->player && !thing->player->powers[pw_weaponlevel2])
- { // Freeze player for about .5 sec
- thing->reactiontime = 18;
- }
- thing->angle = angle;
- if(thing->flags2&MF2_FOOTCLIP && P_GetThingFloorType(thing) != FLOOR_SOLID)
- {
- thing->flags2 |= MF2_FEETARECLIPPED;
- }
- else if(thing->flags2&MF2_FEETARECLIPPED)
- {
- thing->flags2 &= ~MF2_FEETARECLIPPED;
- }
- if(thing->flags&MF_MISSILE)
- {
- angle >>= ANGLETOFINESHIFT;
- thing->momx = FixedMul(thing->info->speed, finecosine[angle]);
- thing->momy = FixedMul(thing->info->speed, finesine[angle]);
- }
- else
- {
- thing->momx = thing->momy = thing->momz = 0;
- }
- return(true);
+ oldx = thing->x;
+ oldy = thing->y;
+ oldz = thing->z;
+ aboveFloor = thing->z - thing->floorz;
+ if (!P_TeleportMove(thing, x, y))
+ {
+ return (false);
+ }
+ if (thing->player)
+ {
+ player = thing->player;
+ if (player->powers[pw_flight] && aboveFloor)
+ {
+ thing->z = thing->floorz + aboveFloor;
+ if (thing->z + thing->height > thing->ceilingz)
+ {
+ thing->z = thing->ceilingz - thing->height;
+ }
+ player->viewz = thing->z + player->viewheight;
+ }
+ else
+ {
+ thing->z = thing->floorz;
+ player->viewz = thing->z + player->viewheight;
+ player->lookdir = 0;
+ }
+ }
+ else if (thing->flags & MF_MISSILE)
+ {
+ thing->z = thing->floorz + aboveFloor;
+ if (thing->z + thing->height > thing->ceilingz)
+ {
+ thing->z = thing->ceilingz - thing->height;
+ }
+ }
+ else
+ {
+ thing->z = thing->floorz;
+ }
+ // Spawn teleport fog at source and destination
+ fogDelta = thing->flags & MF_MISSILE ? 0 : TELEFOGHEIGHT;
+ fog = P_SpawnMobj(oldx, oldy, oldz + fogDelta, MT_TFOG);
+ S_StartSound(fog, sfx_telept);
+ an = angle >> ANGLETOFINESHIFT;
+ fog = P_SpawnMobj(x + 20 * finecosine[an],
+ y + 20 * finesine[an], thing->z + fogDelta, MT_TFOG);
+ S_StartSound(fog, sfx_telept);
+ if (thing->player && !thing->player->powers[pw_weaponlevel2])
+ { // Freeze player for about .5 sec
+ thing->reactiontime = 18;
+ }
+ thing->angle = angle;
+ if (thing->flags2 & MF2_FOOTCLIP
+ && P_GetThingFloorType(thing) != FLOOR_SOLID)
+ {
+ thing->flags2 |= MF2_FEETARECLIPPED;
+ }
+ else if (thing->flags2 & MF2_FEETARECLIPPED)
+ {
+ thing->flags2 &= ~MF2_FEETARECLIPPED;
+ }
+ if (thing->flags & MF_MISSILE)
+ {
+ angle >>= ANGLETOFINESHIFT;
+ thing->momx = FixedMul(thing->info->speed, finecosine[angle]);
+ thing->momy = FixedMul(thing->info->speed, finesine[angle]);
+ }
+ else
+ {
+ thing->momx = thing->momy = thing->momz = 0;
+ }
+ return (true);
}
//----------------------------------------------------------------------------
@@ -101,48 +124,48 @@
//
//----------------------------------------------------------------------------
-boolean EV_Teleport(line_t *line, int side, mobj_t *thing)
+boolean EV_Teleport(line_t * line, int side, mobj_t * thing)
{
- int i;
- int tag;
- mobj_t *m;
- thinker_t *thinker;
- sector_t *sector;
+ int i;
+ int tag;
+ mobj_t *m;
+ thinker_t *thinker;
+ sector_t *sector;
- if(thing->flags2&MF2_NOTELEPORT)
- {
- return(false);
- }
- if(side == 1)
- { // Don't teleport when crossing back side
- return(false);
- }
- tag = line->tag;
- for(i = 0; i < numsectors; i++)
- {
- if(sectors[i].tag == tag)
- {
- thinker = thinkercap.next;
- for(thinker = thinkercap.next; thinker != &thinkercap;
- thinker = thinker->next)
- {
- if(thinker->function != P_MobjThinker)
- { // Not a mobj
- continue;
- }
- m = (mobj_t *)thinker;
- if(m->type != MT_TELEPORTMAN )
- { // Not a teleportman
- continue;
- }
- sector = m->subsector->sector;
- if(sector-sectors != i)
- { // Wrong sector
- continue;
- }
- return(P_Teleport(thing, m->x, m->y, m->angle));
- }
- }
- }
- return(false);
+ if (thing->flags2 & MF2_NOTELEPORT)
+ {
+ return (false);
+ }
+ if (side == 1)
+ { // Don't teleport when crossing back side
+ return (false);
+ }
+ tag = line->tag;
+ for (i = 0; i < numsectors; i++)
+ {
+ if (sectors[i].tag == tag)
+ {
+ thinker = thinkercap.next;
+ for (thinker = thinkercap.next; thinker != &thinkercap;
+ thinker = thinker->next)
+ {
+ if (thinker->function != P_MobjThinker)
+ { // Not a mobj
+ continue;
+ }
+ m = (mobj_t *) thinker;
+ if (m->type != MT_TELEPORTMAN)
+ { // Not a teleportman
+ continue;
+ }
+ sector = m->subsector->sector;
+ if (sector - sectors != i)
+ { // Wrong sector
+ continue;
+ }
+ return (P_Teleport(thing, m->x, m->y, m->angle));
+ }
+ }
+ }
+ return (false);
}
--- a/src/heretic/p_tick.c
+++ b/src/heretic/p_tick.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_tick.c
@@ -17,27 +39,27 @@
void P_ArchivePlayers(void)
{
- int i;
- int j;
- player_t dest;
+ int i;
+ int j;
+ player_t dest;
- for(i = 0; i < MAXPLAYERS; i++)
- {
- if(!playeringame[i])
- {
- continue;
- }
- memcpy(&dest, &players[i], sizeof(player_t));
- for(j = 0; j < NUMPSPRITES; j++)
- {
- if(dest.psprites[j].state)
- {
- dest.psprites[j].state =
- (state_t *)(dest.psprites[j].state-states);
- }
- }
- SV_Write(&dest, sizeof(player_t));
- }
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (!playeringame[i])
+ {
+ continue;
+ }
+ memcpy(&dest, &players[i], sizeof(player_t));
+ for (j = 0; j < NUMPSPRITES; j++)
+ {
+ if (dest.psprites[j].state)
+ {
+ dest.psprites[j].state =
+ (state_t *) (dest.psprites[j].state - states);
+ }
+ }
+ SV_Write(&dest, sizeof(player_t));
+ }
}
/*
@@ -48,24 +70,24 @@
====================
*/
-void P_UnArchivePlayers (void)
+void P_UnArchivePlayers(void)
{
- int i,j;
+ int i, j;
- for (i=0 ; i<MAXPLAYERS ; i++)
- {
- if (!playeringame[i])
- continue;
- memcpy (&players[i],save_p, sizeof(player_t));
- save_p += sizeof(player_t);
- players[i].mo = NULL; // will be set when unarc thinker
- players[i].message = NULL;
- players[i].attacker = NULL;
- for (j=0 ; j<NUMPSPRITES ; j++)
- if (players[i]. psprites[j].state)
- players[i]. psprites[j].state
- = &states[ (int)players[i].psprites[j].state ];
- }
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (!playeringame[i])
+ continue;
+ memcpy(&players[i], save_p, sizeof(player_t));
+ save_p += sizeof(player_t);
+ players[i].mo = NULL; // will be set when unarc thinker
+ players[i].message = NULL;
+ players[i].attacker = NULL;
+ for (j = 0; j < NUMPSPRITES; j++)
+ if (players[i].psprites[j].state)
+ players[i].psprites[j].state
+ = &states[(int) players[i].psprites[j].state];
+ }
}
//=============================================================================
@@ -81,43 +103,43 @@
void P_ArchiveWorld(void)
{
- int i, j;
- sector_t *sec;
- line_t *li;
- side_t *si;
+ int i, j;
+ sector_t *sec;
+ line_t *li;
+ side_t *si;
- // Sectors
- for(i = 0, sec = sectors; i < numsectors; i++, sec++)
- {
- SV_WriteWord(sec->floorheight>>FRACBITS);
- SV_WriteWord(sec->ceilingheight>>FRACBITS);
- SV_WriteWord(sec->floorpic);
- SV_WriteWord(sec->ceilingpic);
- SV_WriteWord(sec->lightlevel);
- SV_WriteWord(sec->special); // needed?
- SV_WriteWord(sec->tag); // needed?
- }
+ // Sectors
+ for (i = 0, sec = sectors; i < numsectors; i++, sec++)
+ {
+ SV_WriteWord(sec->floorheight >> FRACBITS);
+ SV_WriteWord(sec->ceilingheight >> FRACBITS);
+ SV_WriteWord(sec->floorpic);
+ SV_WriteWord(sec->ceilingpic);
+ SV_WriteWord(sec->lightlevel);
+ SV_WriteWord(sec->special); // needed?
+ SV_WriteWord(sec->tag); // needed?
+ }
- // Lines
- for(i = 0, li = lines; i < numlines; i++, li++)
- {
- SV_WriteWord(li->flags);
- SV_WriteWord(li->special);
- SV_WriteWord(li->tag);
- for(j = 0; j < 2; j++)
- {
- if(li->sidenum[j] == -1)
- {
- continue;
- }
- si = &sides[li->sidenum[j]];
- SV_WriteWord(si->textureoffset>>FRACBITS);
- SV_WriteWord(si->rowoffset>>FRACBITS);
- SV_WriteWord(si->toptexture);
- SV_WriteWord(si->bottomtexture);
- SV_WriteWord(si->midtexture);
- }
- }
+ // Lines
+ for (i = 0, li = lines; i < numlines; i++, li++)
+ {
+ SV_WriteWord(li->flags);
+ SV_WriteWord(li->special);
+ SV_WriteWord(li->tag);
+ for (j = 0; j < 2; j++)
+ {
+ if (li->sidenum[j] == -1)
+ {
+ continue;
+ }
+ si = &sides[li->sidenum[j]];
+ SV_WriteWord(si->textureoffset >> FRACBITS);
+ SV_WriteWord(si->rowoffset >> FRACBITS);
+ SV_WriteWord(si->toptexture);
+ SV_WriteWord(si->bottomtexture);
+ SV_WriteWord(si->midtexture);
+ }
+ }
}
/*
@@ -128,54 +150,54 @@
====================
*/
-void P_UnArchiveWorld (void)
+void P_UnArchiveWorld(void)
{
- int i,j;
- sector_t *sec;
- line_t *li;
- side_t *si;
- short *get;
-
- get = (short *)save_p;
-
+ int i, j;
+ sector_t *sec;
+ line_t *li;
+ side_t *si;
+ short *get;
+
+ get = (short *) save_p;
+
//
// do sectors
//
- for (i=0, sec = sectors ; i<numsectors ; i++,sec++)
- {
- sec->floorheight = *get++ << FRACBITS;
- sec->ceilingheight = *get++ << FRACBITS;
- sec->floorpic = *get++;
- sec->ceilingpic = *get++;
- sec->lightlevel = *get++;
- sec->special = *get++; // needed?
- sec->tag = *get++; // needed?
- sec->specialdata = 0;
- sec->soundtarget = 0;
- }
+ for (i = 0, sec = sectors; i < numsectors; i++, sec++)
+ {
+ sec->floorheight = *get++ << FRACBITS;
+ sec->ceilingheight = *get++ << FRACBITS;
+ sec->floorpic = *get++;
+ sec->ceilingpic = *get++;
+ sec->lightlevel = *get++;
+ sec->special = *get++; // needed?
+ sec->tag = *get++; // needed?
+ sec->specialdata = 0;
+ sec->soundtarget = 0;
+ }
//
// do lines
//
- for (i=0, li = lines ; i<numlines ; i++,li++)
- {
- li->flags = *get++;
- li->special = *get++;
- li->tag = *get++;
- for (j=0 ; j<2 ; j++)
- {
- if (li->sidenum[j] == -1)
- continue;
- si = &sides[li->sidenum[j]];
- si->textureoffset = *get++ << FRACBITS;
- si->rowoffset = *get++ << FRACBITS;
- si->toptexture = *get++;
- si->bottomtexture = *get++;
- si->midtexture = *get++;
- }
- }
-
- save_p = (byte *)get;
+ for (i = 0, li = lines; i < numlines; i++, li++)
+ {
+ li->flags = *get++;
+ li->special = *get++;
+ li->tag = *get++;
+ for (j = 0; j < 2; j++)
+ {
+ if (li->sidenum[j] == -1)
+ continue;
+ si = &sides[li->sidenum[j]];
+ si->textureoffset = *get++ << FRACBITS;
+ si->rowoffset = *get++ << FRACBITS;
+ si->toptexture = *get++;
+ si->bottomtexture = *get++;
+ si->midtexture = *get++;
+ }
+ }
+
+ save_p = (byte *) get;
}
//=============================================================================
@@ -182,8 +204,8 @@
typedef enum
{
- tc_end,
- tc_mobj
+ tc_end,
+ tc_mobj
} thinkerclass_t;
/*
@@ -196,28 +218,28 @@
void P_ArchiveThinkers(void)
{
- thinker_t *th;
- mobj_t mobj;
+ thinker_t *th;
+ mobj_t mobj;
- for(th = thinkercap.next; th != &thinkercap; th = th->next)
- {
- if(th->function == P_MobjThinker)
- {
- SV_WriteByte(tc_mobj);
- memcpy(&mobj, th, sizeof(mobj_t));
- mobj.state = (state_t *)(mobj.state-states);
- if(mobj.player)
- {
- mobj.player = (player_t *)((mobj.player-players)+1);
- }
- SV_Write(&mobj, sizeof(mobj_t));
- continue;
- }
- //I_Error("P_ArchiveThinkers: Unknown thinker function");
- }
+ for (th = thinkercap.next; th != &thinkercap; th = th->next)
+ {
+ if (th->function == P_MobjThinker)
+ {
+ SV_WriteByte(tc_mobj);
+ memcpy(&mobj, th, sizeof(mobj_t));
+ mobj.state = (state_t *) (mobj.state - states);
+ if (mobj.player)
+ {
+ mobj.player = (player_t *) ((mobj.player - players) + 1);
+ }
+ SV_Write(&mobj, sizeof(mobj_t));
+ continue;
+ }
+ //I_Error("P_ArchiveThinkers: Unknown thinker function");
+ }
- // Add a terminating marker
- SV_WriteByte(tc_end);
+ // Add a terminating marker
+ SV_WriteByte(tc_end);
}
/*
@@ -228,63 +250,63 @@
====================
*/
-void P_UnArchiveThinkers (void)
+void P_UnArchiveThinkers(void)
{
- byte tclass;
- thinker_t *currentthinker, *next;
- mobj_t *mobj;
-
+ byte tclass;
+ thinker_t *currentthinker, *next;
+ mobj_t *mobj;
+
//
// remove all the current thinkers
//
- currentthinker = thinkercap.next;
- while (currentthinker != &thinkercap)
- {
- next = currentthinker->next;
- if (currentthinker->function == P_MobjThinker)
- P_RemoveMobj ((mobj_t *)currentthinker);
- else
- Z_Free (currentthinker);
- currentthinker = next;
- }
- P_InitThinkers ();
-
+ currentthinker = thinkercap.next;
+ while (currentthinker != &thinkercap)
+ {
+ next = currentthinker->next;
+ if (currentthinker->function == P_MobjThinker)
+ P_RemoveMobj((mobj_t *) currentthinker);
+ else
+ Z_Free(currentthinker);
+ currentthinker = next;
+ }
+ P_InitThinkers();
+
// read in saved thinkers
- while (1)
- {
- tclass = *save_p++;
- switch (tclass)
- {
- case tc_end:
- return; // end of list
-
- case tc_mobj:
- mobj = Z_Malloc (sizeof(*mobj), PU_LEVEL, NULL);
- memcpy (mobj, save_p, sizeof(*mobj));
- save_p += sizeof(*mobj);
- mobj->state = &states[(int)mobj->state];
- mobj->target = NULL;
- if (mobj->player)
- {
- mobj->player = &players[(int)mobj->player-1];
- mobj->player->mo = mobj;
- }
- P_SetThingPosition (mobj);
- mobj->info = &mobjinfo[mobj->type];
- mobj->floorz = mobj->subsector->sector->floorheight;
- mobj->ceilingz = mobj->subsector->sector->ceilingheight;
- mobj->thinker.function = P_MobjThinker;
- P_AddThinker (&mobj->thinker);
- break;
-
- default:
- I_Error ("Unknown tclass %i in savegame",tclass);
- }
-
- }
+ while (1)
+ {
+ tclass = *save_p++;
+ switch (tclass)
+ {
+ case tc_end:
+ return; // end of list
-}
+ case tc_mobj:
+ mobj = Z_Malloc(sizeof(*mobj), PU_LEVEL, NULL);
+ memcpy(mobj, save_p, sizeof(*mobj));
+ save_p += sizeof(*mobj);
+ mobj->state = &states[(int) mobj->state];
+ mobj->target = NULL;
+ if (mobj->player)
+ {
+ mobj->player = &players[(int) mobj->player - 1];
+ mobj->player->mo = mobj;
+ }
+ P_SetThingPosition(mobj);
+ mobj->info = &mobjinfo[mobj->type];
+ mobj->floorz = mobj->subsector->sector->floorheight;
+ mobj->ceilingz = mobj->subsector->sector->ceilingheight;
+ mobj->thinker.function = P_MobjThinker;
+ P_AddThinker(&mobj->thinker);
+ break;
+ default:
+ I_Error("Unknown tclass %i in savegame", tclass);
+ }
+
+ }
+
+}
+
//=============================================================================
@@ -297,15 +319,15 @@
*/
enum
{
- tc_ceiling,
- tc_door,
- tc_floor,
- tc_plat,
- tc_flash,
- tc_strobe,
- tc_glow,
- tc_endspecials
-} specials_e;
+ tc_ceiling,
+ tc_door,
+ tc_floor,
+ tc_plat,
+ tc_flash,
+ tc_strobe,
+ tc_glow,
+ tc_endspecials
+} specials_e;
void P_ArchiveSpecials(void)
{
@@ -319,76 +341,76 @@
T_PlatRaise, (plat_t: sector_t *), - active list
*/
- thinker_t *th;
- ceiling_t ceiling;
- vldoor_t door;
- floormove_t floor;
- plat_t plat;
- lightflash_t flash;
- strobe_t strobe;
- glow_t glow;
+ thinker_t *th;
+ ceiling_t ceiling;
+ vldoor_t door;
+ floormove_t floor;
+ plat_t plat;
+ lightflash_t flash;
+ strobe_t strobe;
+ glow_t glow;
- for(th = thinkercap.next; th != &thinkercap; th = th->next)
- {
- if(th->function == T_MoveCeiling)
- {
- SV_WriteByte(tc_ceiling);
- memcpy(&ceiling, th, sizeof(ceiling_t));
- ceiling.sector = (sector_t *)(ceiling.sector-sectors);
- SV_Write(&ceiling, sizeof(ceiling_t));
- continue;
- }
- if(th->function == T_VerticalDoor)
- {
- SV_WriteByte(tc_door);
- memcpy(&door, th, sizeof(vldoor_t));
- door.sector = (sector_t *)(door.sector-sectors);
- SV_Write(&door, sizeof(vldoor_t));
- continue;
- }
- if(th->function == T_MoveFloor)
- {
- SV_WriteByte(tc_floor);
- memcpy(&floor, th, sizeof(floormove_t));
- floor.sector = (sector_t *)(floor.sector-sectors);
- SV_Write(&floor, sizeof(floormove_t));
- continue;
- }
- if(th->function == T_PlatRaise)
- {
- SV_WriteByte(tc_plat);
- memcpy(&plat, th, sizeof(plat_t));
- plat.sector = (sector_t *)(plat.sector-sectors);
- SV_Write(&plat, sizeof(plat_t));
- continue;
- }
- if(th->function == T_LightFlash)
- {
- SV_WriteByte(tc_flash);
- memcpy(&flash, th, sizeof(lightflash_t));
- flash.sector = (sector_t *)(flash.sector-sectors);
- SV_Write(&flash, sizeof(lightflash_t));
- continue;
- }
- if(th->function == T_StrobeFlash)
- {
- SV_WriteByte(tc_strobe);
- memcpy(&strobe, th, sizeof(strobe_t));
- strobe.sector = (sector_t *)(strobe.sector-sectors);
- SV_Write(&strobe, sizeof(strobe_t));
- continue;
- }
- if(th->function == T_Glow)
- {
- SV_WriteByte(tc_glow);
- memcpy(&glow, th, sizeof(glow_t));
- glow.sector = (sector_t *)(glow.sector-sectors);
- SV_Write(&glow, sizeof(glow_t));
- continue;
- }
- }
- // Add a terminating marker
- SV_WriteByte(tc_endspecials);
+ for (th = thinkercap.next; th != &thinkercap; th = th->next)
+ {
+ if (th->function == T_MoveCeiling)
+ {
+ SV_WriteByte(tc_ceiling);
+ memcpy(&ceiling, th, sizeof(ceiling_t));
+ ceiling.sector = (sector_t *) (ceiling.sector - sectors);
+ SV_Write(&ceiling, sizeof(ceiling_t));
+ continue;
+ }
+ if (th->function == T_VerticalDoor)
+ {
+ SV_WriteByte(tc_door);
+ memcpy(&door, th, sizeof(vldoor_t));
+ door.sector = (sector_t *) (door.sector - sectors);
+ SV_Write(&door, sizeof(vldoor_t));
+ continue;
+ }
+ if (th->function == T_MoveFloor)
+ {
+ SV_WriteByte(tc_floor);
+ memcpy(&floor, th, sizeof(floormove_t));
+ floor.sector = (sector_t *) (floor.sector - sectors);
+ SV_Write(&floor, sizeof(floormove_t));
+ continue;
+ }
+ if (th->function == T_PlatRaise)
+ {
+ SV_WriteByte(tc_plat);
+ memcpy(&plat, th, sizeof(plat_t));
+ plat.sector = (sector_t *) (plat.sector - sectors);
+ SV_Write(&plat, sizeof(plat_t));
+ continue;
+ }
+ if (th->function == T_LightFlash)
+ {
+ SV_WriteByte(tc_flash);
+ memcpy(&flash, th, sizeof(lightflash_t));
+ flash.sector = (sector_t *) (flash.sector - sectors);
+ SV_Write(&flash, sizeof(lightflash_t));
+ continue;
+ }
+ if (th->function == T_StrobeFlash)
+ {
+ SV_WriteByte(tc_strobe);
+ memcpy(&strobe, th, sizeof(strobe_t));
+ strobe.sector = (sector_t *) (strobe.sector - sectors);
+ SV_Write(&strobe, sizeof(strobe_t));
+ continue;
+ }
+ if (th->function == T_Glow)
+ {
+ SV_WriteByte(tc_glow);
+ memcpy(&glow, th, sizeof(glow_t));
+ glow.sector = (sector_t *) (glow.sector - sectors);
+ SV_Write(&glow, sizeof(glow_t));
+ continue;
+ }
+ }
+ // Add a terminating marker
+ SV_WriteByte(tc_endspecials);
}
/*
@@ -399,105 +421,105 @@
====================
*/
-void P_UnArchiveSpecials (void)
+void P_UnArchiveSpecials(void)
{
- byte tclass;
- ceiling_t *ceiling;
- vldoor_t *door;
- floormove_t *floor;
- plat_t *plat;
- lightflash_t *flash;
- strobe_t *strobe;
- glow_t *glow;
-
-
+ byte tclass;
+ ceiling_t *ceiling;
+ vldoor_t *door;
+ floormove_t *floor;
+ plat_t *plat;
+ lightflash_t *flash;
+ strobe_t *strobe;
+ glow_t *glow;
+
+
// read in saved thinkers
- while (1)
- {
- tclass = *save_p++;
- switch (tclass)
- {
- case tc_endspecials:
- return; // end of list
-
- case tc_ceiling:
- ceiling = Z_Malloc (sizeof(*ceiling), PU_LEVEL, NULL);
- memcpy (ceiling, save_p, sizeof(*ceiling));
- save_p += sizeof(*ceiling);
- ceiling->sector = §ors[(int)ceiling->sector];
- ceiling->sector->specialdata = T_MoveCeiling;
- if (ceiling->thinker.function)
- ceiling->thinker.function = T_MoveCeiling;
- P_AddThinker (&ceiling->thinker);
- P_AddActiveCeiling(ceiling);
- break;
+ while (1)
+ {
+ tclass = *save_p++;
+ switch (tclass)
+ {
+ case tc_endspecials:
+ return; // end of list
- case tc_door:
- door = Z_Malloc (sizeof(*door), PU_LEVEL, NULL);
- memcpy (door, save_p, sizeof(*door));
- save_p += sizeof(*door);
- door->sector = §ors[(int)door->sector];
- door->sector->specialdata = door;
- door->thinker.function = T_VerticalDoor;
- P_AddThinker (&door->thinker);
- break;
+ case tc_ceiling:
+ ceiling = Z_Malloc(sizeof(*ceiling), PU_LEVEL, NULL);
+ memcpy(ceiling, save_p, sizeof(*ceiling));
+ save_p += sizeof(*ceiling);
+ ceiling->sector = §ors[(int) ceiling->sector];
+ ceiling->sector->specialdata = T_MoveCeiling;
+ if (ceiling->thinker.function)
+ ceiling->thinker.function = T_MoveCeiling;
+ P_AddThinker(&ceiling->thinker);
+ P_AddActiveCeiling(ceiling);
+ break;
- case tc_floor:
- floor = Z_Malloc (sizeof(*floor), PU_LEVEL, NULL);
- memcpy (floor, save_p, sizeof(*floor));
- save_p += sizeof(*floor);
- floor->sector = §ors[(int)floor->sector];
- floor->sector->specialdata = T_MoveFloor;
- floor->thinker.function = T_MoveFloor;
- P_AddThinker (&floor->thinker);
- break;
-
- case tc_plat:
- plat = Z_Malloc (sizeof(*plat), PU_LEVEL, NULL);
- memcpy (plat, save_p, sizeof(*plat));
- save_p += sizeof(*plat);
- plat->sector = §ors[(int)plat->sector];
- plat->sector->specialdata = T_PlatRaise;
- if (plat->thinker.function)
- plat->thinker.function = T_PlatRaise;
- P_AddThinker (&plat->thinker);
- P_AddActivePlat(plat);
- break;
-
- case tc_flash:
- flash = Z_Malloc (sizeof(*flash), PU_LEVEL, NULL);
- memcpy (flash, save_p, sizeof(*flash));
- save_p += sizeof(*flash);
- flash->sector = §ors[(int)flash->sector];
- flash->thinker.function = T_LightFlash;
- P_AddThinker (&flash->thinker);
- break;
-
- case tc_strobe:
- strobe = Z_Malloc (sizeof(*strobe), PU_LEVEL, NULL);
- memcpy (strobe, save_p, sizeof(*strobe));
- save_p += sizeof(*strobe);
- strobe->sector = §ors[(int)strobe->sector];
- strobe->thinker.function = T_StrobeFlash;
- P_AddThinker (&strobe->thinker);
- break;
-
- case tc_glow:
- glow = Z_Malloc (sizeof(*glow), PU_LEVEL, NULL);
- memcpy (glow, save_p, sizeof(*glow));
- save_p += sizeof(*glow);
- glow->sector = §ors[(int)glow->sector];
- glow->thinker.function = T_Glow;
- P_AddThinker (&glow->thinker);
- break;
-
- default:
- I_Error ("P_UnarchiveSpecials:Unknown tclass %i "
- "in savegame",tclass);
- }
-
- }
+ case tc_door:
+ door = Z_Malloc(sizeof(*door), PU_LEVEL, NULL);
+ memcpy(door, save_p, sizeof(*door));
+ save_p += sizeof(*door);
+ door->sector = §ors[(int) door->sector];
+ door->sector->specialdata = door;
+ door->thinker.function = T_VerticalDoor;
+ P_AddThinker(&door->thinker);
+ break;
+ case tc_floor:
+ floor = Z_Malloc(sizeof(*floor), PU_LEVEL, NULL);
+ memcpy(floor, save_p, sizeof(*floor));
+ save_p += sizeof(*floor);
+ floor->sector = §ors[(int) floor->sector];
+ floor->sector->specialdata = T_MoveFloor;
+ floor->thinker.function = T_MoveFloor;
+ P_AddThinker(&floor->thinker);
+ break;
+
+ case tc_plat:
+ plat = Z_Malloc(sizeof(*plat), PU_LEVEL, NULL);
+ memcpy(plat, save_p, sizeof(*plat));
+ save_p += sizeof(*plat);
+ plat->sector = §ors[(int) plat->sector];
+ plat->sector->specialdata = T_PlatRaise;
+ if (plat->thinker.function)
+ plat->thinker.function = T_PlatRaise;
+ P_AddThinker(&plat->thinker);
+ P_AddActivePlat(plat);
+ break;
+
+ case tc_flash:
+ flash = Z_Malloc(sizeof(*flash), PU_LEVEL, NULL);
+ memcpy(flash, save_p, sizeof(*flash));
+ save_p += sizeof(*flash);
+ flash->sector = §ors[(int) flash->sector];
+ flash->thinker.function = T_LightFlash;
+ P_AddThinker(&flash->thinker);
+ break;
+
+ case tc_strobe:
+ strobe = Z_Malloc(sizeof(*strobe), PU_LEVEL, NULL);
+ memcpy(strobe, save_p, sizeof(*strobe));
+ save_p += sizeof(*strobe);
+ strobe->sector = §ors[(int) strobe->sector];
+ strobe->thinker.function = T_StrobeFlash;
+ P_AddThinker(&strobe->thinker);
+ break;
+
+ case tc_glow:
+ glow = Z_Malloc(sizeof(*glow), PU_LEVEL, NULL);
+ memcpy(glow, save_p, sizeof(*glow));
+ save_p += sizeof(*glow);
+ glow->sector = §ors[(int) glow->sector];
+ glow->thinker.function = T_Glow;
+ P_AddThinker(&glow->thinker);
+ break;
+
+ default:
+ I_Error("P_UnarchiveSpecials:Unknown tclass %i "
+ "in savegame", tclass);
+ }
+
+ }
+
}
@@ -513,7 +535,7 @@
===============================================================================
*/
-thinker_t thinkercap; // both the head and tail of the thinker list
+thinker_t thinkercap; // both the head and tail of the thinker list
/*
===============
@@ -523,9 +545,9 @@
===============
*/
-void P_InitThinkers (void)
+void P_InitThinkers(void)
{
- thinkercap.prev = thinkercap.next = &thinkercap;
+ thinkercap.prev = thinkercap.next = &thinkercap;
}
@@ -539,12 +561,12 @@
===============
*/
-void P_AddThinker (thinker_t *thinker)
+void P_AddThinker(thinker_t * thinker)
{
- thinkercap.prev->next = thinker;
- thinker->next = &thinkercap;
- thinker->prev = thinkercap.prev;
- thinkercap.prev = thinker;
+ thinkercap.prev->next = thinker;
+ thinker->next = &thinkercap;
+ thinker->prev = thinkercap.prev;
+ thinkercap.prev = thinker;
}
/*
@@ -558,9 +580,9 @@
===============
*/
-void P_RemoveThinker (thinker_t *thinker)
+void P_RemoveThinker(thinker_t * thinker)
{
- thinker->function = (think_t)-1;
+ thinker->function = (think_t) - 1;
}
/*
@@ -573,7 +595,7 @@
===============
*/
-void P_AllocateThinker (thinker_t *thinker)
+void P_AllocateThinker(thinker_t * thinker)
{
}
@@ -586,26 +608,26 @@
===============
*/
-void P_RunThinkers (void)
+void P_RunThinkers(void)
{
- thinker_t *currentthinker;
+ thinker_t *currentthinker;
- currentthinker = thinkercap.next;
- while (currentthinker != &thinkercap)
- {
- if (currentthinker->function == (think_t)-1)
- { // time to remove it
- currentthinker->next->prev = currentthinker->prev;
- currentthinker->prev->next = currentthinker->next;
- Z_Free (currentthinker);
- }
- else
- {
- if (currentthinker->function)
- currentthinker->function (currentthinker);
- }
- currentthinker = currentthinker->next;
- }
+ currentthinker = thinkercap.next;
+ while (currentthinker != &thinkercap)
+ {
+ if (currentthinker->function == (think_t) - 1)
+ { // time to remove it
+ currentthinker->next->prev = currentthinker->prev;
+ currentthinker->prev->next = currentthinker->next;
+ Z_Free(currentthinker);
+ }
+ else
+ {
+ if (currentthinker->function)
+ currentthinker->function(currentthinker);
+ }
+ currentthinker = currentthinker->next;
+ }
}
//----------------------------------------------------------------------------
@@ -616,28 +638,28 @@
void P_Ticker(void)
{
- int i;
+ int i;
- if(paused)
- {
- return;
- }
- for(i = 0; i < MAXPLAYERS; i++)
- {
- if(playeringame[i])
- {
- P_PlayerThink(&players[i]);
- }
- }
- if(TimerGame)
- {
- if(!--TimerGame)
- {
- G_ExitLevel();
- }
- }
- P_RunThinkers();
- P_UpdateSpecials();
- P_AmbientSound();
- leveltime++;
+ if (paused)
+ {
+ return;
+ }
+ for (i = 0; i < MAXPLAYERS; i++)
+ {
+ if (playeringame[i])
+ {
+ P_PlayerThink(&players[i]);
+ }
+ }
+ if (TimerGame)
+ {
+ if (!--TimerGame)
+ {
+ G_ExitLevel();
+ }
+ }
+ P_RunThinkers();
+ P_UpdateSpecials();
+ P_AmbientSound();
+ leveltime++;
}
--- a/src/heretic/p_user.c
+++ b/src/heretic/p_user.c
@@ -1,3 +1,25 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 1993-1996 Id Software, Inc.
+// Copyright(C) 1993-2008 Raven Software
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+//-----------------------------------------------------------------------------
// P_user.c
@@ -5,29 +27,28 @@
#include "P_local.h"
#include "soundst.h"
-void P_PlayerNextArtifact(player_t *player);
+void P_PlayerNextArtifact(player_t * player);
// Macros
-#define MAXBOB 0x100000 // 16 pixels of bob
+#define MAXBOB 0x100000 // 16 pixels of bob
// Data
boolean onground;
-int newtorch; // used in the torch flicker effect.
+int newtorch; // used in the torch flicker effect.
int newtorchdelta;
-boolean WeaponInShareware[] =
-{
- true, // Staff
- true, // Gold wand
- true, // Crossbow
- true, // Blaster
- false, // Skull rod
- false, // Phoenix rod
- false, // Mace
- true, // Gauntlets
- true // Beak
+boolean WeaponInShareware[] = {
+ true, // Staff
+ true, // Gold wand
+ true, // Crossbow
+ true, // Blaster
+ false, // Skull rod
+ false, // Phoenix rod
+ false, // Mace
+ true, // Gauntlets
+ true // Beak
};
/*
@@ -40,24 +61,24 @@
==================
*/
-void P_Thrust(player_t *player, angle_t angle, fixed_t move)
+void P_Thrust(player_t * player, angle_t angle, fixed_t move)
{
- angle >>= ANGLETOFINESHIFT;
- if(player->powers[pw_flight] && !(player->mo->z <= player->mo->floorz))
- {
- player->mo->momx += FixedMul(move, finecosine[angle]);
- player->mo->momy += FixedMul(move, finesine[angle]);
- }
- else if(player->mo->subsector->sector->special == 15) // Friction_Low
- {
- player->mo->momx += FixedMul(move>>2, finecosine[angle]);
- player->mo->momy += FixedMul(move>>2, finesine[angle]);
- }
- else
- {
- player->mo->momx += FixedMul(move, finecosine[angle]);
- player->mo->momy += FixedMul(move, finesine[angle]);
- }
+ angle >>= ANGLETOFINESHIFT;
+ if (player->powers[pw_flight] && !(player->mo->z <= player->mo->floorz))
+ {
+ player->mo->momx += FixedMul(move, finecosine[angle]);
+ player->mo->momy += FixedMul(move, finesine[angle]);
+ }
+ else if (player->mo->subsector->sector->special == 15) // Friction_Low
+ {
+ player->mo->momx += FixedMul(move >> 2, finecosine[angle]);
+ player->mo->momy += FixedMul(move >> 2, finesine[angle]);
+ }
+ else
+ {
+ player->mo->momx += FixedMul(move, finecosine[angle]);
+ player->mo->momy += FixedMul(move, finesine[angle]);
+ }
}
@@ -71,10 +92,10 @@
==================
*/
-void P_CalcHeight (player_t *player)
+void P_CalcHeight(player_t * player)
{
- int angle;
- fixed_t bob;
+ int angle;
+ fixed_t bob;
//
// regular movement bobbing (needs to be calculated for gun swing even
@@ -81,76 +102,76 @@
// if not on ground)
// OPTIMIZE: tablify angle
- player->bob = FixedMul (player->mo->momx, player->mo->momx)+
- FixedMul (player->mo->momy,player->mo->momy);
- player->bob >>= 2;
- if (player->bob>MAXBOB)
- player->bob = MAXBOB;
- if(player->mo->flags2&MF2_FLY && !onground)
- {
- player->bob = FRACUNIT/2;
- }
+ player->bob = FixedMul(player->mo->momx, player->mo->momx) +
+ FixedMul(player->mo->momy, player->mo->momy);
+ player->bob >>= 2;
+ if (player->bob > MAXBOB)
+ player->bob = MAXBOB;
+ if (player->mo->flags2 & MF2_FLY && !onground)
+ {
+ player->bob = FRACUNIT / 2;
+ }
- if ((player->cheats & CF_NOMOMENTUM))
- {
- player->viewz = player->mo->z + VIEWHEIGHT;
- if (player->viewz > player->mo->ceilingz-4*FRACUNIT)
- player->viewz = player->mo->ceilingz-4*FRACUNIT;
- player->viewz = player->mo->z + player->viewheight;
- return;
- }
+ if ((player->cheats & CF_NOMOMENTUM))
+ {
+ player->viewz = player->mo->z + VIEWHEIGHT;
+ if (player->viewz > player->mo->ceilingz - 4 * FRACUNIT)
+ player->viewz = player->mo->ceilingz - 4 * FRACUNIT;
+ player->viewz = player->mo->z + player->viewheight;
+ return;
+ }
- angle = (FINEANGLES/20*leveltime)&FINEMASK;
- bob = FixedMul ( player->bob/2, finesine[angle]);
+ angle = (FINEANGLES / 20 * leveltime) & FINEMASK;
+ bob = FixedMul(player->bob / 2, finesine[angle]);
//
// move viewheight
//
- if (player->playerstate == PST_LIVE)
- {
- player->viewheight += player->deltaviewheight;
- if (player->viewheight > VIEWHEIGHT)
- {
- player->viewheight = VIEWHEIGHT;
- player->deltaviewheight = 0;
- }
- if (player->viewheight < VIEWHEIGHT/2)
- {
- player->viewheight = VIEWHEIGHT/2;
- if (player->deltaviewheight <= 0)
- player->deltaviewheight = 1;
- }
+ if (player->playerstate == PST_LIVE)
+ {
+ player->viewheight += player->deltaviewheight;
+ if (player->viewheight > VIEWHEIGHT)
+ {
+ player->viewheight = VIEWHEIGHT;
+ player->deltaviewheight = 0;
+ }
+ if (player->viewheight < VIEWHEIGHT / 2)
+ {
+ player->viewheight = VIEWHEIGHT / 2;
+ if (player->deltaviewheight <= 0)
+ player->deltaviewheight = 1;
+ }
- if (player->deltaviewheight)
- {
- player->deltaviewheight += FRACUNIT/4;
- if (!player->deltaviewheight)
- player->deltaviewheight = 1;
- }
- }
+ if (player->deltaviewheight)
+ {
+ player->deltaviewheight += FRACUNIT / 4;
+ if (!player->deltaviewheight)
+ player->deltaviewheight = 1;
+ }
+ }
- if(player->chickenTics)
- {
- player->viewz = player->mo->z+player->viewheight-(20*FRACUNIT);
- }
- else
- {
- player->viewz = player->mo->z+player->viewheight+bob;
- }
- if(player->mo->flags2&MF2_FEETARECLIPPED
- && player->playerstate != PST_DEAD
- && player->mo->z <= player->mo->floorz)
- {
- player->viewz -= FOOTCLIPSIZE;
- }
- if(player->viewz > player->mo->ceilingz-4*FRACUNIT)
- {
- player->viewz = player->mo->ceilingz-4*FRACUNIT;
- }
- if(player->viewz < player->mo->floorz+4*FRACUNIT)
- {
- player->viewz = player->mo->floorz+4*FRACUNIT;
- }
+ if (player->chickenTics)
+ {
+ player->viewz = player->mo->z + player->viewheight - (20 * FRACUNIT);
+ }
+ else
+ {
+ player->viewz = player->mo->z + player->viewheight + bob;
+ }
+ if (player->mo->flags2 & MF2_FEETARECLIPPED
+ && player->playerstate != PST_DEAD
+ && player->mo->z <= player->mo->floorz)
+ {
+ player->viewz -= FOOTCLIPSIZE;
+ }
+ if (player->viewz > player->mo->ceilingz - 4 * FRACUNIT)
+ {
+ player->viewz = player->mo->ceilingz - 4 * FRACUNIT;
+ }
+ if (player->viewz < player->mo->floorz + 4 * FRACUNIT)
+ {
+ player->viewz = player->mo->floorz + 4 * FRACUNIT;
+ }
}
/*
@@ -161,121 +182,121 @@
=================
*/
-void P_MovePlayer(player_t *player)
+void P_MovePlayer(player_t * player)
{
- int look;
- int fly;
- ticcmd_t *cmd;
+ int look;
+ int fly;
+ ticcmd_t *cmd;
- cmd = &player->cmd;
- player->mo->angle += (cmd->angleturn<<16);
+ cmd = &player->cmd;
+ player->mo->angle += (cmd->angleturn << 16);
- onground = (player->mo->z <= player->mo->floorz
- || (player->mo->flags2&MF2_ONMOBJ));
+ onground = (player->mo->z <= player->mo->floorz
+ || (player->mo->flags2 & MF2_ONMOBJ));
- if(player->chickenTics)
- { // Chicken speed
- if(cmd->forwardmove && (onground||player->mo->flags2&MF2_FLY))
- P_Thrust(player, player->mo->angle, cmd->forwardmove*2500);
- if(cmd->sidemove && (onground||player->mo->flags2&MF2_FLY))
- P_Thrust(player, player->mo->angle-ANG90, cmd->sidemove*2500);
- }
- else
- { // Normal speed
- if(cmd->forwardmove && (onground||player->mo->flags2&MF2_FLY))
- P_Thrust(player, player->mo->angle, cmd->forwardmove*2048);
- if(cmd->sidemove && (onground||player->mo->flags2&MF2_FLY))
- P_Thrust(player, player->mo->angle-ANG90, cmd->sidemove*2048);
- }
+ if (player->chickenTics)
+ { // Chicken speed
+ if (cmd->forwardmove && (onground || player->mo->flags2 & MF2_FLY))
+ P_Thrust(player, player->mo->angle, cmd->forwardmove * 2500);
+ if (cmd->sidemove && (onground || player->mo->flags2 & MF2_FLY))
+ P_Thrust(player, player->mo->angle - ANG90, cmd->sidemove * 2500);
+ }
+ else
+ { // Normal speed
+ if (cmd->forwardmove && (onground || player->mo->flags2 & MF2_FLY))
+ P_Thrust(player, player->mo->angle, cmd->forwardmove * 2048);
+ if (cmd->sidemove && (onground || player->mo->flags2 & MF2_FLY))
+ P_Thrust(player, player->mo->angle - ANG90, cmd->sidemove * 2048);
+ }
- if(cmd->forwardmove || cmd->sidemove)
- {
- if(player->chickenTics)
- {
- if(player->mo->state == &states[S_CHICPLAY])
- {
- P_SetMobjState(player->mo, S_CHICPLAY_RUN1);
- }
- }
- else
- {
- if(player->mo->state == &states[S_PLAY])
- {
- P_SetMobjState(player->mo, S_PLAY_RUN1);
- }
- }
- }
+ if (cmd->forwardmove || cmd->sidemove)
+ {
+ if (player->chickenTics)
+ {
+ if (player->mo->state == &states[S_CHICPLAY])