aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Mandel <richard@tech-transfer.com>2014-06-09 16:20:00 -0400
committerRichard Mandel <richard@tech-transfer.com>2014-06-09 16:20:00 -0400
commit374403ea47e9f6d69829c518c6ebee779b314703 (patch)
tree57f1d7c12fcb79f26e0e6b752c00a1c4d96b15fe
parent7109bfa2859e723ef214909f2dc98b2f7ec4040a (diff)
downloadcatacombapocalypse-374403ea47e9f6d69829c518c6ebee779b314703.tar.gz
catacombapocalypse-374403ea47e9f6d69829c518c6ebee779b314703.tar.bz2
catacombapocalypse-374403ea47e9f6d69829c518c6ebee779b314703.zip
Catacomb Apocalypse open source release.HEADmaster
-rw-r--r--APCADICT.OBJbin1151 -> 1151 bytes
-rw-r--r--APCAHEAD.OBJbin561 -> 585 bytes
-rw-r--r--APCEDICT.OBJbin1149 -> 1149 bytes
-rw-r--r--APCEHEAD.OBJbin2119 -> 2198 bytes
-rw-r--r--APCMHEAD.OBJbin962 -> 962 bytes
-rw-r--r--APOCGAME.PRJbin12826 -> 12826 bytes
-rw-r--r--AUDIOAPC.H20
-rw-r--r--C6_ACT1.C724
-rw-r--r--C6_ACT2.C1128
-rw-r--r--C6_ACT3.C1118
-rw-r--r--C6_ACT4.C310
-rw-r--r--C6_ASM.ASM2
-rw-r--r--C6_DEBUG.C10
-rw-r--r--C6_DRAW.C344
-rw-r--r--C6_GAME.C564
-rw-r--r--C6_MAIN.C71
-rw-r--r--C6_PLAY.C100
-rw-r--r--C6_SCALE.C2
-rw-r--r--C6_SCA_A.ASM2
-rw-r--r--C6_STATE.C276
-rw-r--r--C6_TRACE.C2
-rw-r--r--C6_WIZ.C211
-rw-r--r--DEF.H488
-rw-r--r--GELIB.C2
-rw-r--r--GELIB.H8
-rw-r--r--GFXE_APC.EQU978
-rw-r--r--GFXE_APC.H1052
-rw-r--r--ID_ASM.EQU2
-rw-r--r--ID_CA.C2
-rw-r--r--ID_CA.H2
-rw-r--r--ID_HEADS.H10
-rw-r--r--ID_IN.C2
-rw-r--r--ID_IN.H2
-rw-r--r--ID_MM.C4
-rw-r--r--ID_MM.H2
-rw-r--r--ID_RF.C2
-rw-r--r--ID_RF.H2
-rw-r--r--ID_RF_A.ASM2
-rw-r--r--ID_SD.C6
-rw-r--r--ID_SD.H2
-rw-r--r--ID_STRS.H2
-rw-r--r--ID_US.C2
-rw-r--r--ID_US.H2
-rw-r--r--ID_US_1.C2
-rw-r--r--ID_US_2.C2
-rw-r--r--ID_US_A.ASM2
-rw-r--r--ID_VW.C2
-rw-r--r--ID_VW.H2
-rw-r--r--ID_VW_A.ASM2
-rw-r--r--ID_VW_AC.ASM2
-rw-r--r--ID_VW_AE.ASM2
-rw-r--r--JABHACK.ASM2
-rw-r--r--JAMPAK.C2
-rw-r--r--JAMPAK.H2
-rw-r--r--JAM_IO.C2
-rw-r--r--JAM_IO.H2
-rw-r--r--LZHUF.C2
-rw-r--r--LZHUFF.H2
-rw-r--r--LZW.C2
-rw-r--r--LZW.H2
-rw-r--r--MAPSAPC.H39
-rw-r--r--README.md8
-rw-r--r--SL_FILE.H2
-rw-r--r--SOFT.C2
-rw-r--r--SOFT.H2
65 files changed, 3764 insertions, 3781 deletions
diff --git a/APCADICT.OBJ b/APCADICT.OBJ
index 3dff988..d729a58 100644
--- a/APCADICT.OBJ
+++ b/APCADICT.OBJ
Binary files differ
diff --git a/APCAHEAD.OBJ b/APCAHEAD.OBJ
index 2fcd49d..aeaca12 100644
--- a/APCAHEAD.OBJ
+++ b/APCAHEAD.OBJ
Binary files differ
diff --git a/APCEDICT.OBJ b/APCEDICT.OBJ
index 33ee378..b490894 100644
--- a/APCEDICT.OBJ
+++ b/APCEDICT.OBJ
Binary files differ
diff --git a/APCEHEAD.OBJ b/APCEHEAD.OBJ
index b818f4b..f8d6777 100644
--- a/APCEHEAD.OBJ
+++ b/APCEHEAD.OBJ
Binary files differ
diff --git a/APCMHEAD.OBJ b/APCMHEAD.OBJ
index e8dbe9f..bc282be 100644
--- a/APCMHEAD.OBJ
+++ b/APCMHEAD.OBJ
Binary files differ
diff --git a/APOCGAME.PRJ b/APOCGAME.PRJ
index bea242c..519f6ff 100644
--- a/APOCGAME.PRJ
+++ b/APOCGAME.PRJ
Binary files differ
diff --git a/AUDIOAPC.H b/AUDIOAPC.H
index 46b813c..5cc1515 100644
--- a/AUDIOAPC.H
+++ b/AUDIOAPC.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -18,13 +18,13 @@
/////////////////////////////////////////////////
//
-// MUSE Header for .ARM
-// Created Mon Jun 08 16:14:17 1992
+// MUSE Header for .APC
+// Created Mon Nov 02 15:09:16 1992
//
/////////////////////////////////////////////////
-#define NUMSOUNDS 35
-#define NUMSNDCHUNKS 106
+#define NUMSOUNDS 37
+#define NUMSNDCHUNKS 112
//
// Sound names & indexes
@@ -37,7 +37,7 @@ typedef enum {
GETNUKESND, // 4
GETPOTIONSND, // 5
GETKEYSND, // 6
- GETSCROLLSND, // 7
+ PORTALSND, // 7
GETPOINTSSND, // 8
USEBOLTSND, // 9
USENUKESND, // 10
@@ -65,6 +65,8 @@ typedef enum {
TIMERETURNSND, // 32
TICKSND, // 33
BODY_EXPLODESND, // 34
+ LARGEMONSTERSND, // 35
+ SMALLMONSTERSND, // 36
LASTSOUND
} soundnames;
@@ -72,9 +74,9 @@ typedef enum {
// Base offsets
//
#define STARTPCSOUNDS 0
-#define STARTADLIBSOUNDS 35
-#define STARTDIGISOUNDS 70
-#define STARTMUSIC 105
+#define STARTADLIBSOUNDS 37
+#define STARTDIGISOUNDS 74
+#define STARTMUSIC 111
//
// Music names & indexes
diff --git a/C6_ACT1.C b/C6_ACT1.C
index dcd65e3..f94a878 100644
--- a/C6_ACT1.C
+++ b/C6_ACT1.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -79,11 +79,6 @@ dirtype dirtable[9] = {northwest,north,northeast,west,nodir,east,
=============================================================================
*/
-extern statetype s_boltbonus2;
-extern statetype s_nukebonus2;
-extern statetype s_boltbonus3;
-extern statetype s_nukebonus3;
-
statetype s_boltbonus = {BOLTOBJPIC,8,NULL,&s_boltbonus2};
statetype s_boltbonus2 = {BOLT2OBJPIC,8,NULL,&s_boltbonus3};
statetype s_boltbonus3 = {BOLT3OBJPIC,8,NULL,&s_boltbonus};
@@ -93,36 +88,22 @@ statetype s_nukebonus2 = {NUKE2OBJPIC,8,NULL,&s_nukebonus3};
statetype s_nukebonus3 = {NUKE3OBJPIC,8,NULL,&s_nukebonus};
statetype s_potionbonus = {POTIONOBJPIC,0,NULL,&s_potionbonus};
-//statetype s_rkey2bonus = {RKEY2PIC,0,NULL,&s_rkey2bonus};
statetype s_rkeybonus = {RKEYOBJPIC,0,NULL,&s_rkeybonus};
statetype s_ykeybonus = {YKEYOBJPIC,0,NULL,&s_ykeybonus};
statetype s_gkeybonus = {GKEYOBJPIC,0,NULL,&s_gkeybonus};
statetype s_bkeybonus = {BKEYOBJPIC,0,NULL,&s_bkeybonus};
-//////////////////////////statetype s_scrollbonus = {SCROLLOBJPIC,0,NULL,&s_scrollbonus};
statetype s_chestbonus = {CHESTOBJPIC,0,NULL,&s_chestbonus};
-//statetype s_goalbonus = {NEMESISPIC,0,NULL,&s_goalbonus};
-
-extern statetype s_waterchestbonus2;
-statetype s_waterchestbonus1 = {O_WATER_CHEST1PIC,8,NULL,&s_waterchestbonus2};
-statetype s_waterchestbonus2 = {O_WATER_CHEST2PIC,8,NULL,&s_waterchestbonus1};
-
-extern statetype s_rgem2bonus;
-extern statetype s_ygem2bonus;
-extern statetype s_ggem2bonus;
-extern statetype s_bgem2bonus;
-extern statetype s_pgem2bonus;
-
-statetype s_rgem1bonus = {RGEM1PIC,30,NULL,&s_rgem2bonus};
-statetype s_ygem1bonus = {YGEM1PIC,30,NULL,&s_ygem2bonus};
-statetype s_ggem1bonus = {GGEM1PIC,30,NULL,&s_ggem2bonus};
-statetype s_bgem1bonus = {BGEM1PIC,30,NULL,&s_bgem2bonus};
-statetype s_pgem1bonus = {PGEM1PIC,30,NULL,&s_pgem2bonus};
-
-statetype s_rgem2bonus = {RGEM2PIC,30,NULL,&s_rgem1bonus};
-statetype s_ygem2bonus = {YGEM2PIC,30,NULL,&s_ygem1bonus};
-statetype s_ggem2bonus = {GGEM2PIC,30,NULL,&s_ggem1bonus};
-statetype s_bgem2bonus = {BGEM2PIC,30,NULL,&s_bgem1bonus};
-statetype s_pgem2bonus = {PGEM2PIC,30,NULL,&s_pgem1bonus};
+statetype s_oldchestbonus = {OLD_CHESTPIC,0,NULL,&s_oldchestbonus};
+
+statetype s_waterchestbonus1 = {O_WATER_CHEST1PIC, 10, NULL, &s_waterchestbonus2};
+statetype s_waterchestbonus2 = {O_WATER_CHEST2PIC, 10, NULL, &s_waterchestbonus3};
+statetype s_waterchestbonus3 = {O_WATER_CHEST3PIC, 10, NULL, &s_waterchestbonus1};
+
+statetype s_rgem1bonus = {RGEM1PIC,30,NULL,&s_rgem1bonus};
+statetype s_ygem1bonus = {YGEM1PIC,30,NULL,&s_ygem1bonus};
+statetype s_ggem1bonus = {GGEM1PIC,30,NULL,&s_ggem1bonus};
+statetype s_bgem1bonus = {BGEM1PIC,30,NULL,&s_bgem1bonus};
+statetype s_pgem1bonus = {PGEM1PIC,30,NULL,&s_pgem1bonus};
statetype s_bonus_die = {0,8,NULL,NULL};
@@ -164,18 +145,8 @@ void SpawnBonus (int tilex, int tiley, int number)
state = &s_chestbonus;
break;
-#if 0
- case B_SCROLL1:
- case B_SCROLL2:
- case B_SCROLL3:
- case B_SCROLL4:
- case B_SCROLL5:
- case B_SCROLL6:
- case B_SCROLL7:
- case B_SCROLL8: state = &s_scrollbonus; break;
-#endif
+ case B_OLDCHEST: state = &s_oldchestbonus; break;
-// case B_RKEY2: state = &s_rkey2bonus; break;
default:
Quit("SpawnBonus(): INVALID BONUS");
@@ -183,13 +154,13 @@ void SpawnBonus (int tilex, int tiley, int number)
}
SpawnNewObj (tilex,tiley,state,TILEGLOBAL/2);
-// new->tileobject = true;
new->temp1 = number;
new->obclass = bonusobj;
switch (number)
{
case B_POTION:
+ case B_OLDCHEST:
case B_CHEST:
case B_BOLT:
case B_NUKE:
@@ -203,28 +174,6 @@ void SpawnBonus (int tilex, int tiley, int number)
}
-/*
-===============
-=
-= SpawnTombstone
-=
-===============
-*/
-
-statetype s_tombs[3] = {{TOMB1PIC,8,NULL,&s_tombs[0]},
- {TOMB2PIC,8,NULL,&s_tombs[1]},
- {TOMB3PIC,8,NULL,&s_tombs[2]}};
-
-void SpawnTombstone (int tilex, int tiley, int shape)
-{
- statetype *state=&s_tombs[shape];
-
- SpawnNewObj (tilex,tiley,state,TILEGLOBAL/2);
-// new->tileobject = true;
- new->obclass = realsolidobj;
- new->flags |= of_shootable;
-}
-
/*
============================================================================
@@ -362,35 +311,62 @@ void T_WallDie (objtype *ob)
*/
void T_Gate (objtype *ob);
+void T_Gate_Wait (objtype *ob);
-extern statetype s_obj_gate1;
-extern statetype s_obj_gate2;
-extern statetype s_obj_gate3;
-extern statetype s_obj_gate4;
-
-statetype s_obj_gate1 = {OBJ_WARP1PIC,10,T_Gate,&s_obj_gate2};
-statetype s_obj_gate2 = {OBJ_WARP2PIC,10,T_Gate,&s_obj_gate3};
-statetype s_obj_gate3 = {OBJ_WARP3PIC,10,T_Gate,&s_obj_gate4};
-statetype s_obj_gate4 = {OBJ_WARP4PIC,10,T_Gate,&s_obj_gate1};
+extern statetype s_portal_wait;
+statetype s_portal_wait = {0, 10, &T_Gate_Wait, &s_portal_wait};
-extern statetype s_anthill;
-statetype s_anthill = {ANT_HILLPIC, 20, T_Gate, &s_anthill};
+statetype s_portal1 = {PORTAL1PIC, 6, &T_Gate, &s_portal2};
+statetype s_portal2 = {PORTAL2PIC, 6, &T_Gate, &s_portal3};
+statetype s_portal3 = {PORTAL3PIC, 6, &T_Gate, &s_portal4};
+statetype s_portal4 = {PORTAL4PIC, 6, &T_Gate, &s_portal5};
+statetype s_portal5 = {PORTAL5PIC, 6, &T_Gate, &s_portal6};
+statetype s_portal6 = {PORTAL6PIC, 6, &T_Gate, &s_portal1};
//---------------------------------------------------------------------------
// SpawnWarp()
-//
-// TYPE : Type param is the gate number (1-what ever) will link you to
-// gate of that type.
//---------------------------------------------------------------------------
-void SpawnWarp (int tilex, int tiley, int type)
+void SpawnWarp (int tilex, int tiley)
{
+ unsigned spot;
+ objtype *ob;
- if (type)
- SpawnNewObj (tilex,tiley,&s_obj_gate1,TILEGLOBAL/3);
+ spot = (*(mapsegs[2]+farmapylookup[tiley]+tilex+1)) >> 8;
+
+ if (spot)
+ {
+ SpawnNewObj (tilex, tiley, &s_portal_wait, TILEGLOBAL/3);
+ new->temp1 = spot*70;
+ }
else
- SpawnNewObj (tilex,tiley,&s_anthill,TILEGLOBAL/3);
+ SpawnNewObj (tilex, tiley, &s_portal1, TILEGLOBAL/3);
+
new->obclass = gateobj;
- new->temp1 = type;
+}
+
+/*
+===============
+=
+= T_Gate_Wait
+=
+===============
+*/
+
+void T_Gate_Wait (objtype *ob)
+{
+ if ((ob->temp1 -= tics) <= 0)
+ {
+ if ((ob->tilex == player->tilex) && (ob->tiley == player->tiley))
+ return;
+ if (CheckHandAttack(ob))
+ return;
+
+ SD_PlaySound(PORTALSND);
+ ob->state = &s_portal1;
+ ob->ticcount = ob->state->tictime;
+
+ }
+
}
@@ -403,8 +379,6 @@ void SpawnWarp (int tilex, int tiley, int type)
===============
*/
-#define STATUSCOLOR 4
-
void T_Gate (objtype *ob)
{
objtype *check;
@@ -412,55 +386,13 @@ void T_Gate (objtype *ob)
if (CheckHandAttack (ob) && !playstate)
{
- // make
- //
-// spot = (*(mapsegs[2]+farmapylookup[ob->tiley+1]+ob->tilex)) >> 8;
-// if (spot--)
-// if (gamestate.keys[spot])
-// TakeKey(spot);
-// else
-// return;
-
//
- // warp
+ // teleport out of level
//
-
-// temp = bufferofs;
-// bufferofs = 0;
-// VW_Bar (26,4,232,9,STATUSCOLOR); // clear text description
-// bufferofs = temp;
-
-// IN_ClearKeysDown ();
- if (ob->temp1)
- {
- //
- // teleport inside level
- //
-
- for (check=player->next;check;check=check->next)
- if (check->obclass==gateobj && check->temp1==ob->temp1 &&
- check != ob)
- {
- player->x = check->x;
- player->y = check->y;
- Thrust (player->angle,TILEGLOBAL/2); // move forwards
- Thrust (player->angle,TILEGLOBAL/2); // move forwards
- Thrust (player->angle,TILEGLOBAL/2); // move forwards
- fizzlein=true;
- SD_PlaySound(WARPSND);
- }
- }
- else
- {
- //
- // teleport out of level
- //
-
- playstate = ex_warped;
- spot = (*(mapsegs[2]+farmapylookup[ob->tiley+1]+ob->tilex)) >> 8;
- gamestate.mapon=spot;
- SD_PlaySound(WARPUPSND);
- }
+ playstate = ex_warped;
+ spot = (*(mapsegs[2]+farmapylookup[ob->tiley+1]+ob->tilex)) >> 8;
+ gamestate.mapon=spot;
+ SD_PlaySound(WARPUPSND);
}
}
@@ -469,339 +401,517 @@ void T_Gate (objtype *ob)
/*
=============================================================================
- FAT DEMON
+ AQUAMAN
=============================================================================
*/
-#define FATCLOUDDAMAGE 2
+void T_AquaMan(objtype *ob);
-void T_FatDemon (objtype *ob);
-void T_CheckCnt(objtype *ob);
-void ExplodeSound(objtype *ob);
+statetype s_aqua_under1 = {EYESTALKUNDER1PIC, 25, &T_AquaMan, &s_aqua_under2};
+statetype s_aqua_under2 = {EYESTALKUNDER2PIC, 20, &T_AquaMan, &s_aqua_under3};
+statetype s_aqua_under3 = {EYESTALKUNDER3PIC, 20, &T_AquaMan, &s_aqua_under2};
-extern statetype s_fatdemon_pause;
-extern statetype s_fatdemon_walk1;
-extern statetype s_fatdemon_walk2;
-extern statetype s_fatdemon_walk3;
-extern statetype s_fatdemon_walk4;
-extern statetype s_fatdemon_attack1;
-extern statetype s_fatdemon_attack2;
-extern statetype s_fatdemon_blowup2;
-extern statetype s_fatdemon_blowup3;
-extern statetype s_fatdemon_blowup4;
-extern statetype s_fatdemon_blowup5;
-extern statetype s_fatdemon_blowup6;
-extern statetype s_fatdemon_blowup7;
-extern statetype s_fatdemon_explode;
-extern statetype s_fatdemon_feet;
+statetype s_aqua_left = {EYESTALKUNDER4PIC, 40, NULL, &s_aqua_under3};
+statetype s_aqua_right = {EYESTALKUNDER5PIC, 40, NULL, &s_aqua_under3};
-statetype s_fatdemon_pause = {FATDEMON_WALK1PIC,40,NULL,&s_fatdemon_walk2};
+statetype s_aqua_rise1 = {EYESTALKRISE1PIC, 20, NULL, &s_aqua_rise2};
+statetype s_aqua_rise2 = {EYESTALKRISE2PIC, 15, NULL, &s_aqua_walk1};
-statetype s_fatdemon_walk1 = {FATDEMON_WALK1PIC,13,T_FatDemon,&s_fatdemon_walk2};
-statetype s_fatdemon_walk2 = {FATDEMON_WALK2PIC,13,T_FatDemon,&s_fatdemon_walk3};
-statetype s_fatdemon_walk3 = {FATDEMON_WALK3PIC,13,T_FatDemon,&s_fatdemon_walk4};
-statetype s_fatdemon_walk4 = {FATDEMON_WALK4PIC,13,T_FatDemon,&s_fatdemon_walk1};
+statetype s_aqua_sink1 = {EYESTALKRISE2PIC, 15, NULL, &s_aqua_sink2};
+statetype s_aqua_sink2 = {EYESTALKRISE1PIC, 20, NULL, &s_aqua_under1};
-statetype s_fatdemon_attack1 = {FATDEMON_ATTACK1PIC,20,NULL,&s_fatdemon_attack2};
-statetype s_fatdemon_attack2 = {FATDEMON_ATTACK2PIC,20,T_DoDamage,&s_fatdemon_pause};
+statetype s_aqua_walk1 = {EYESTALKWALK1PIC, 12, &T_AquaMan, &s_aqua_walk2};
+statetype s_aqua_walk2 = {EYESTALKWALK2PIC, 12, &T_AquaMan, &s_aqua_walk1};
-statetype s_fatdemon_ouch = {FATDEMON_OUCHPIC,14,NULL,&s_fatdemon_walk1};
+statetype s_aqua_attack1 = {EYESTALKATTACKPIC, 10, NULL, &s_aqua_attack2};
+statetype s_aqua_attack2 = {EYESTALKWALK1PIC, 10, &T_DoDamage, &s_aqua_walk1};
-statetype s_fatdemon_blowup1 = {FATDEMON_BLOWUP1PIC,25,NULL,&s_fatdemon_blowup2};
-statetype s_fatdemon_blowup2 = {FATDEMON_BLOWUP2PIC,25,NULL,&s_fatdemon_blowup3};
-statetype s_fatdemon_blowup3 = {FATDEMON_BLOWUP1PIC,15,NULL,&s_fatdemon_blowup4};
-statetype s_fatdemon_blowup4 = {FATDEMON_BLOWUP2PIC,15,NULL,&s_fatdemon_blowup5};
-statetype s_fatdemon_blowup5 = {FATDEMON_BLOWUP1PIC,6,NULL,&s_fatdemon_blowup6};
-statetype s_fatdemon_blowup6 = {FATDEMON_BLOWUP2PIC,6,T_CheckCnt,&s_fatdemon_blowup5};
-statetype s_fatdemon_blowup7 = {FATDEMON_BLOWUP3PIC,30,NULL,&s_fatdemon_explode};
+statetype s_aqua_die1 = {EYESTALKDEATH1PIC, 8, NULL, &s_aqua_die2};
+statetype s_aqua_die2 = {EYESTALKDEATH2PIC, 8, NULL, &s_aqua_die3};
+statetype s_aqua_die3 = {EYESTALKDEATH2PIC, -1, &T_AlternateStates, &s_aqua_die1};
+statetype s_aqua_die4 = {EYESTALKDEATH2PIC, 30, NULL, &s_aqua_die5};
+statetype s_aqua_die5 = {EYESTALKDEATH3PIC, 40, NULL, &s_aqua_die6};
+statetype s_aqua_die6 = {EYESTALKDEATH4PIC, 30, &ExplosionSnd, &s_aqua_die7};
+statetype s_aqua_die7 = {EYESTALKDEATH5PIC, 20, NULL, NULL};
+typedef enum {wt_UNDER, wt_WALK} AquaManTypes;
-statetype s_fatdemon_explode = {FATDEMON_EXPLODEPIC,40,ExplodeSound,&s_fatdemon_feet};
-statetype s_fatdemon_feet = {FATDEMON_FEETPIC,30,NULL,&s_fatdemon_feet};
-
-#define cnt ob->temp1
-#define cloud_delay ob->temp2
+#define AQ_TIMEREMAIN (ob->temp1)
+#define AQ_STAGE (ob->temp2)
/*
===============
=
-= SpawnFatDemon
+= SpawnAquaMan
=
===============
*/
+void SpawnAquaMan(int tilex, int tiley)
+{
+ objtype *ob;
+ SpawnNewObj(tilex,tiley,&s_aqua_under1,PIXRADIUS*32);
+ ob = new;
-void SpawnFatDemon (int tilex, int tiley)
+ AQ_STAGE = wt_UNDER;
+ AQ_TIMEREMAIN = 60*4+random(60*3);
+
+ new->obclass = aquamanobj;
+ new->speed = 1000;
+ new->flags &= ~of_shootable;
+ new->hitpoints = EasyHitPoints(15);
+}
+
+void ExplosionSnd(objtype *ob)
{
- SpawnNewObj(tilex,tiley,&s_fatdemon_walk1,35*PIXRADIUS);
- new->speed = 2500;
- new->obclass = fatdemonobj;
- new->flags |= of_shootable;
- new->hitpoints = EasyHitPoints(10);
- new->temp1 = 25; //used to "shake" the fat dude??????
+ if (ob->temp1 != SOUNDPLAYED)
+ {
+ SD_PlaySound(BODY_EXPLODESND);
+ ob->temp1 = SOUNDPLAYED;
+
+ }
}
/*
===============
=
-= T_FatDemon
+= T_AquaMan
=
===============
*/
-void T_FatDemon (objtype *ob)
+void T_AquaMan(objtype *ob)
{
- if (Chase(ob,true) || (random(1000)<RANDOM_ATTACK))
+ switch (AQ_STAGE)
{
- ob->state = &s_fatdemon_attack1;
- ob->ticcount = ob->state->tictime;
- return;
+ case wt_UNDER:
+ ob->flags &= ~of_shootable;
+ if (Chase(ob,true))
+ {
+ // RISE & GOTO WALK STAGE
+ //
+
+ AQ_STAGE = wt_WALK;
+ AQ_TIMEREMAIN = 60*5+random(60*5);
+ ob->state = &s_aqua_rise1;
+ ob->speed = 2200;
+ ob->ticcount = ob->state->tictime;
+ }
+ else
+ {
+ // DEC COUNTER - And check for WALK
+ //
+ if ((AQ_TIMEREMAIN-=realtics) < 0)
+ {
+ // RISE & GOTO WALK STAGE
+ //
+
+ if (CheckHandAttack(ob))
+ break;
+
+ AQ_STAGE = wt_WALK;
+ AQ_TIMEREMAIN = 60+random(60*2);
+ ob->state = &s_aqua_rise1;
+ ob->speed = 2200;
+ ob->ticcount = ob->state->tictime;
+ }
+ else
+ if (random(1000)<5)
+ {
+ // RANDOM PEEK UP OUT OF WATER
+ //
+ if (random(2) == 0)
+ ob->state = &s_aqua_left;
+ else
+ ob->state = &s_aqua_right;
+ ob->ticcount = ob->state->tictime;
+ }
+ }
+ break;
+
+
+ case wt_WALK:
+ ob->flags |= of_shootable;
+ if (Chase(ob,true) || (random(1000)<RANDOM_ATTACK))
+ {
+ ob->state = &s_aqua_attack1;
+ ob->ticcount = ob->state->tictime;
+ }
+ else
+ {
+ // DEC COUNTER - And check for SINK
+ //
+ if ((AQ_TIMEREMAIN-=realtics) < 0)
+ {
+ // SINK & GOTO BUBBLE STAGE
+ //
+
+ AQ_STAGE = wt_UNDER;
+ AQ_TIMEREMAIN = 60*4+random(60*3);
+ ob->state = &s_aqua_sink1;
+ ob->speed = 1200;
+ ob->ticcount = ob->state->tictime;
+ ob->flags &= ~of_shootable;
+ }
+
+ }
+ break;
}
}
+
+
+/*
+=============================================================================
+
+ WIZARD
+
+=============================================================================
+*/
+
+void T_Wizard(objtype *ob);
+void T_WizardShoot(objtype *ob);
+
+statetype s_wizard_walk1 = {WIZARDWALK1PIC, 20, &T_Wizard, &s_wizard_walk2};
+statetype s_wizard_walk2 = {WIZARDWALK2PIC, 20, &T_Wizard, &s_wizard_walk3};
+statetype s_wizard_walk3 = {WIZARDWALK3PIC, 20, &T_Wizard, &s_wizard_walk4};
+statetype s_wizard_walk4 = {WIZARDWALK4PIC, 20, &T_Wizard, &s_wizard_walk1};
+
+statetype s_wizard_attack1 = {WIZARDATTACK1PIC, 20, NULL, &s_wizard_attack2};
+statetype s_wizard_attack2 = {WIZARDATTACK2PIC, 20, &T_DoDamage, &s_wizard_walk1};
+
+statetype s_wizard_ouch = {WIZARDOUCHPIC, 15, NULL, &s_wizard_walk1};
+
+statetype s_wizard_die1 = {WIZARDDEATH1PIC, 45, &SmallSound, &s_wizard_die2};
+statetype s_wizard_die2 = {WIZARDDEATH2PIC, 30, NULL, &s_wizard_die3};
+statetype s_wizard_die3 = {WIZARDDEATH3PIC, 15, NULL, &s_wizard_die4};
+statetype s_wizard_die4 = {WIZARDDEATH4PIC, 15, NULL, &s_wizard_die4};
+
+statetype s_wizard_shoot1 = {WIZARDATTACK1PIC, 20, NULL, &s_wizard_shoot2};
+statetype s_wizard_shoot2 = {WIZARDATTACK1PIC, -1, &T_WizardShoot, &s_wizard_shoot3};
+statetype s_wizard_shoot3 = {WIZARDATTACK2PIC, 20, NULL, &s_wizard_walk1};
+
+statetype s_wizard_shot1 = {WIZARD_SHOT1PIC, 8, &T_ShootPlayer, &s_wizard_shot2};
+statetype s_wizard_shot2 = {WIZARD_SHOT2PIC, 8, &T_ShootPlayer, &s_wizard_shot1};
+
+
+/*
+===============
+=
+= SpawnWizard
+=
+===============
+*/
+
+void SpawnWizard (int tilex, int tiley)
+{
+ SpawnNewObj(tilex,tiley,&s_wizard_walk1,TILEGLOBAL/2);
+ new->obclass = wizardobj;
+ new->speed = 1536;
+ new->flags |= of_shootable;
+ new->hitpoints = EasyHitPoints(10);
+}
+
+
/*
===============
=
-= T_DecCnt
+= T_Wizard
=
===============
*/
-void T_CheckCnt (objtype *ob)
+void T_Wizard(objtype *ob)
{
- ob->temp1--;
- if (!ob->temp1)
+ if (Chase (ob,true))// || (random(1000)<RANDOM_ATTACK))
{
- ob->state = &s_fatdemon_blowup7;
+ ob->state = &s_wizard_attack1;
ob->ticcount = ob->state->tictime;
+ return;
}
+ else
+ if (AngleNearPlayer(ob) != -1)
+ {
+ ob->state = &s_wizard_shoot1;
+ ob->ticcount = ob->state->tictime;
+ return;
+ }
}
/*
===============
=
-= ExplodeSound
+= T_Wizard
=
===============
*/
-void ExplodeSound(objtype *ob)
+void T_WizardShoot(objtype *ob)
{
- if (ob->temp1 != 666) // Has this think been called already?
- {
- SD_PlaySound(BODY_EXPLODESND);
- ob->temp1 = 666; // Has now!
- }
+ ShootPlayer(ob, wshotobj, 10000, &s_wizard_shot1);
}
+
/*
=============================================================================
- WATER DRAGON
+ RAY
=============================================================================
*/
-extern statetype s_dragon_shot1;
-extern statetype s_dragon_shot2;
+void T_BlobRay(objtype *ob);
+void T_RayShoot (objtype *ob);
+
+statetype s_ray_under = {0, 20, &T_BlobRay, &s_ray_under};
+
+statetype s_ray_rise = {RAYRISEPIC, 30, NULL, &s_ray_fly1};
+
+statetype s_ray_sink = {RAYRISEPIC, 30, NULL, &s_ray_under};
+
+statetype s_ray_fly1 = {RAYFLY1PIC, 10, &T_BlobRay, &s_ray_fly2};
+statetype s_ray_fly2 = {RAYFLY2PIC, 10, &T_BlobRay, &s_ray_fly3};
+statetype s_ray_fly3 = {RAYFLY1PIC, 10, &T_BlobRay, &s_ray_fly4};
+statetype s_ray_fly4 = {RAYFLY3PIC, 10, &T_BlobRay, &s_ray_fly1};
+
+statetype s_ray_attack1 = {RAYSHOOT1PIC, 15, NULL, &s_ray_attack2};
+statetype s_ray_attack2 = {RAYSHOOT2PIC, -1, &T_RayShoot, &s_ray_attack3};
+statetype s_ray_attack3 = {RAYSHOOT2PIC, 20, NULL, &s_ray_fly1};
+
+statetype s_ray_die1 = {RAYDEATH1PIC, 50, &SmallSound, &s_ray_die2};
+statetype s_ray_die2 = {RAYDEATH2PIC, 30, NULL, NULL};
+
+statetype s_ray_shot1 = {RAYSHOT1PIC, 8, &T_ShootPlayer, &s_ray_shot2};
+statetype s_ray_shot2 = {RAYSHOT2PIC, 8, &T_ShootPlayer, &s_ray_shot1};
+
+
+typedef enum {br_GND, br_WALK, br_CORNER1, br_CORNER2, br_CORNER3, br_CORNER4} BlobTypes;
+#define BR_TIMEREMAIN (ob->temp1)
+#define BR_STAGE (ob->temp2)
+#define BLOB_LEAVE 0x04
-void T_Dragon(objtype *ob);
-void T_DragonShoot(objtype *ob);
+/*
+===============
+=
+= SpawnRay
+=
+===============
+*/
+void SpawnRay(int tilex, int tiley)
+{
+ objtype *ob;
+ SpawnNewObj(tilex, tiley, &s_ray_under, PIXRADIUS*25);
+ ob=new;
+
+ BR_STAGE = br_GND;
+ BR_TIMEREMAIN = random(60)+random(100);
+
+ new->obclass = rayobj;
+ new->speed = 1700;
+ new->flags &= ~of_shootable;
+ new->hitpoints = EasyHitPoints(15);
+}
-statetype s_wet_bubbles1 = {DRAGON_BUBBLES1PIC,13,T_Dragon,&s_wet_bubbles2};
-statetype s_wet_bubbles2 = {DRAGON_BUBBLES2PIC,15,T_Dragon,&s_wet_bubbles1};
-statetype s_wet_bubbles3 = {0,35,T_Dragon,&s_wet_bubbles1};
-statetype s_wet_peek = {DRAGON_EYESPIC,45,NULL,&s_wet_bubbles1};
+/*
+=============================================================================
-statetype s_wet_rise1 = {DRAGON_BUBBLES2PIC,15,NULL,&s_wet_rise3};
-statetype s_wet_rise3 = {DRAGON_EYESPIC,20,NULL,&s_wet_rise4};
-statetype s_wet_rise4 = {DRAGON_RISE1PIC,20,NULL,&s_wet_rise5};
-statetype s_wet_rise5 = {DRAGON_RISE2PIC,20,NULL,&s_wet_walk1};
+ BLOB
-statetype s_wet_sink1 = {DRAGON_RISE2PIC,20,NULL,&s_wet_sink2};
-statetype s_wet_sink2 = {DRAGON_RISE1PIC,20,NULL,&s_wet_sink3};
-statetype s_wet_sink3 = {DRAGON_EYESPIC,20,NULL,&s_wet_bubbles1};
+=============================================================================
+*/
-statetype s_wet_walk1 = {DRAGON_WALK1PIC,12,T_Dragon,&s_wet_walk2};
-statetype s_wet_walk2 = {DRAGON_WALK2PIC,12,T_Dragon,&s_wet_walk3};
-statetype s_wet_walk3 = {DRAGON_WALK3PIC,12,T_Dragon,&s_wet_walk4};
-statetype s_wet_walk4 = {DRAGON_WALK4PIC,12,T_Dragon,&s_wet_walk1};
-statetype s_wet_attack1 = {DRAGON_ATTACK1PIC,10,NULL,&s_wet_attack2};
-statetype s_wet_attack2 = {DRAGON_ATTACK2PIC,10,NULL,&s_wet_attack3};
-statetype s_wet_attack3 = {DRAGON_ATTACK2PIC,10,NULL,&s_wet_attack4};
-statetype s_wet_attack4 = {DRAGON_ATTACK3PIC,10,T_DragonShoot,&s_wet_walk1};
+statetype s_blob_gnd1 = {BLOBGND1PIC, 13, T_BlobRay, &s_blob_gnd2};
+statetype s_blob_gnd2 = {BLOBGND2PIC, 15, T_BlobRay, &s_blob_gnd1};
-statetype s_wet_ouch = {DRAGON_OUCHPIC,10,T_Dragon,&s_wet_walk1};
+statetype s_blob_rise1 = {BLOBRISE1PIC, 20, NULL, &s_blob_rise2};
+statetype s_blob_rise2 = {BLOBRISE2PIC, 20, NULL, &s_blob_walk1};
-statetype s_wet_die1 = {DRAGON_DEATH1PIC,27,NULL,&s_wet_die2};
-statetype s_wet_die2 = {DRAGON_DEATH2PIC,29,NULL,&s_wet_die3};
-statetype s_wet_die3 = {DRAGON_DEATH3PIC,44,NULL,&s_wet_die4};
-statetype s_wet_die4 = {DRAGON_BUBBLES2PIC,26,NULL,&s_wet_die5};
-statetype s_wet_die5 = {DRAGON_BUBBLES1PIC,23,NULL,NULL};
+statetype s_blob_sink1 = {BLOBRISE2PIC, 20, NULL, &s_blob_sink2};
+statetype s_blob_sink2 = {BLOBRISE1PIC, 20, NULL, &s_blob_gnd1};
-statetype s_dragon_shot1 = {PSHOT1PIC,8,&T_ShootPlayer,&s_dragon_shot2};
-statetype s_dragon_shot2 = {PSHOT2PIC,8,&T_ShootPlayer,&s_dragon_shot1};
+statetype s_blob_walk1 = {BLOBWALK1PIC, 15, T_BlobRay, &s_blob_walk2};
+statetype s_blob_walk2 = {BLOBWALK2PIC, 15, T_BlobRay, &s_blob_walk3};
+statetype s_blob_walk3 = {BLOBWALK3PIC, 15, T_BlobRay, &s_blob_walk1};
+statetype s_blob_ouch = {BLOBRISE2PIC, 10, T_BlobRay, &s_blob_walk1};
-typedef enum {wt_BUBBLES,wt_WALK,wt_CORNER1,wt_CORNER2,wt_CORNER3,wt_CORNER4} DragonTypes;
+statetype s_blob_die1 = {BLOBDEATH1PIC, 30, &ExplosionSnd, &s_blob_die2};
+statetype s_blob_die2 = {BLOBDEATH2PIC, 30, NULL, &s_blob_die3};
+statetype s_blob_die3 = {BLOBDEATH3PIC, 30, NULL, NULL};
+statetype s_blob_shot1 = {BLOB_SHOT1PIC, 8, &T_ShootPlayer, &s_blob_shot2};
+statetype s_blob_shot2 = {BLOB_SHOT2PIC, 8, &T_ShootPlayer, &s_blob_shot1};
-#define WD_TIMEREMAIN (ob->temp1)
-#define WD_STAGE (ob->temp2)
-#define WATER_DRAGON_LEAVE 0x04
/*
===============
=
-= SpawnDragon
+= SpawnBlob
=
===============
*/
-void SpawnDragon(int tilex, int tiley)
+void SpawnBlob(int tilex, int tiley)
{
objtype *ob;
- SpawnNewObj(tilex,tiley,&s_wet_bubbles1,PIXRADIUS*35);
+ SpawnNewObj(tilex, tiley, &s_blob_gnd1, PIXRADIUS*14);
ob=new;
- WD_STAGE = wt_BUBBLES;
- WD_TIMEREMAIN = 80;
+ BR_STAGE = br_GND;
+ BR_TIMEREMAIN = random(60)+random(100);
- new->obclass = wetobj;
- new->speed = 1000;
- new->flags &= ~of_shootable;
- new->hitpoints = EasyHitPoints(20);
+ new->obclass = blobobj;
+ new->speed = 1200;
+ new->flags &= ~of_shootable;
+ new->hitpoints = EasyHitPoints(13);
}
/*
===============
=
-= T_Dragon
+= T_BlobRay
=
===============
*/
-void T_Dragon(objtype *ob)
+void T_BlobRay(objtype *ob)
{
- switch (WD_STAGE)
+ switch (BR_STAGE)
{
- case wt_BUBBLES:
+ case br_GND:
ob->flags &= ~of_shootable;
if (Chase(ob,true))
{
// RISE & GOTO WALK STAGE
//
- WD_STAGE = wt_WALK;
- WD_TIMEREMAIN = 60*8+random(60*5);
- ob->state = &s_wet_rise1;
- ob->speed = 2200;
- ob->ticcount = ob->state->tictime;
+ BR_STAGE = br_WALK;
+ BR_TIMEREMAIN = 60*8+random(60*5);
+ if (ob->obclass == blobobj)
+ ob->state = &s_blob_rise1;
+ else
+ ob->state = &s_ray_rise;
+ ob->speed = 2200;
+ ob->ticcount = ob->state->tictime;
}
else
{
// DEC COUNTER - And check for WALK
//
- if ((WD_TIMEREMAIN-=realtics) < 0)
+ if ((BR_TIMEREMAIN -= realtics) < 0)
{
// RISE & GOTO WALK STAGE
//
- WD_STAGE = wt_WALK;
- WD_TIMEREMAIN = 60*8+random(60*5);
- ob->state = &s_wet_rise1;
- ob->speed = 2200;
- ob->ticcount = ob->state->tictime;
- }
- else
- if (random(1000)<5)
- {
- // RANDOM PEEK UP OUT OF WATER
- //
-
- ob->state=&s_wet_peek;
- ob->ticcount = ob->state->tictime;
+ BR_STAGE = br_WALK;
+ BR_TIMEREMAIN = 60*8+random(60*5);
+ if (ob->obclass == blobobj)
+ ob->state = &s_blob_rise1;
+ else
+ ob->state = &s_ray_rise;
+ ob->speed = 2200;
+ ob->ticcount = ob->state->tictime;
}
}
break;
- case wt_WALK:
+ case br_WALK:
ob->flags |= of_shootable;
if (Chase(ob,true) || (CheckHandAttack(ob)))
{
- ob->flags |= WATER_DRAGON_LEAVE;
- WD_STAGE = random(wt_CORNER3) + 2;
- WD_TIMEREMAIN = 60*2+(random(6)*60);
- ob->state = &s_wet_bubbles1;
- ob->ticcount = ob->state->tictime;
+ ob->flags |= BLOB_LEAVE;
+ BR_STAGE = random(br_CORNER3) + 2;
+ BR_TIMEREMAIN = 60*2+(random(6)*60);
+ if (ob->obclass == blobobj)
+ ob->state = &s_blob_gnd1;
+ else
+ ob->state = &s_ray_under;
+ ob->ticcount = ob->state->tictime;
}
else
if (AngleNearPlayer(ob) != -1)
{
- ob->state = &s_wet_attack1;
- ob->ticcount = ob->state->tictime;
+ if (ob->obclass == blobobj)
+ {
+ if (!(random(15)))
+ ShootPlayer(ob, bshotobj, 10000, &s_blob_shot1);
+ }
+ else
+ if (!(random(7)))
+ {
+ ob->state = &s_ray_attack1;
+ ob->ticcount = ob->state->tictime;
+ }
}
else
{
// DEC COUNTER - And check for SINK
//
- if ((WD_TIMEREMAIN-=realtics) < 0)
+ if ((BR_TIMEREMAIN -= realtics) < 0)
{
- // SINK & GOTO BUBBLE STAGE
+ // SINK & GOTO GROUND STAGE
//
- WD_STAGE = wt_BUBBLES;
- WD_TIMEREMAIN = 60*2+random(60*2);
- ob->state = &s_wet_sink1;
- ob->speed = 1200;
- ob->ticcount = ob->state->tictime;
- ob->flags &= ~of_shootable;
+ BR_STAGE = br_GND;
+ BR_TIMEREMAIN = 60*2+random(60*2);
+ if (ob->obclass == blobobj)
+ {
+ ob->state = &s_blob_sink1;
+ ob->speed = 1200;
+ }
+ else
+ {
+ ob->state = &s_ray_sink;
+ ob->speed = 1700;
+ }
+ ob->ticcount = ob->state->tictime;
+ ob->flags &= ~of_shootable;
}
}
break;
- case wt_CORNER1:
- case wt_CORNER2:
- case wt_CORNER3:
- case wt_CORNER4:
+ case br_CORNER1:
+ case br_CORNER2:
+ case br_CORNER3:
+ case br_CORNER4:
ob->flags &= ~of_shootable;
- if ((WD_TIMEREMAIN -= realtics) < 0)
+ if ((BR_TIMEREMAIN -= realtics) < 0)
{
- WD_STAGE = wt_BUBBLES;
- ob->flags &= ~WATER_DRAGON_LEAVE;
+ BR_STAGE = br_GND;
+ ob->flags &= ~BLOB_LEAVE;
}
else
{
fixed tempx,tempy;
unsigned temp_tilex,temp_tiley;
- tempx = player->x;
- tempy = player->y;
- temp_tilex = player->tilex;
- temp_tiley = player->tiley;
+ tempx = player->x;
+ tempy = player->y;
+ temp_tilex = player->tilex;
+ temp_tiley = player->tiley;
- player->x = ((long)other_x[WD_STAGE-2]<<TILESHIFT)+TILEGLOBAL/2;
- player->y = ((long)other_y[WD_STAGE-2]<<TILESHIFT)+TILEGLOBAL/2;
- player->tilex = other_x[WD_STAGE-2];
- player->tiley = other_y[WD_STAGE-2];
+ player->x = ((long)other_x[BR_STAGE-2]<<TILESHIFT)+TILEGLOBAL/2;
+ player->y = ((long)other_y[BR_STAGE-2]<<TILESHIFT)+TILEGLOBAL/2;
+ player->tilex = other_x[BR_STAGE-2];
+ player->tiley = other_y[BR_STAGE-2];
Chase(ob,true);
- player->x = tempx;
- player->y = tempy;
- player->tilex = temp_tilex;
- player->tiley = temp_tiley;
+ player->x = tempx;
+ player->y = tempy;
+ player->tilex = temp_tilex;
+ player->tiley = temp_tiley;
}
break;
}
@@ -810,11 +920,11 @@ void T_Dragon(objtype *ob)
/*
===============
=
-= T_DragonShoot
+= T_RayShoot
=
===============
*/
-void T_DragonShoot (objtype *ob)
+void T_RayShoot (objtype *ob)
{
- ShootPlayer(ob,dshotobj,10000,&s_dragon_shot1);
-}
+ ShootPlayer(ob, rshotobj, 10000, &s_ray_shot1);
+} \ No newline at end of file
diff --git a/C6_ACT2.C b/C6_ACT2.C
index fd8633a..803fe8b 100644
--- a/C6_ACT2.C
+++ b/C6_ACT2.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -21,495 +21,493 @@
#include "DEF.H"
#pragma hdrstop
+
/*
=============================================================================
- LOCAL CONSTANTS
+ GLOBAL VARIABLES
=============================================================================
*/
-void SpawnSkeleton(int tilex, int tiley);
-
-#if 0
-#define MSHOTDAMAGE 2
-#define MSHOTSPEED 10000
-#define ESHOTDAMAGE 1
-#define ESHOTSPEED 5000
-
-#define SSHOTDAMAGE 3
-#define SSHOTSPEED 6500
+boolean ShootPlayer (objtype *ob, short obclass, short speed, statetype *state);
+void T_ShootPlayer(objtype *ob);
-#define RANDOM_ATTACK 20
-#endif
+short head_base_delay;
/*
=============================================================================
- GLOBAL VARIABLES
+ LOCAL VARIABLES
=============================================================================
*/
-boolean ShootPlayer (objtype *ob, short obclass, short speed, statetype *state);
-void T_ShootPlayer(objtype *ob);
+
+void T_ShooterObj(objtype *ob);
+
+void SpawnRamBone(int tilex, int tiley);
+void T_SkeletonShoot(objtype *ob);
+void SpawnFutureMage (int tilex, int tiley);
+void T_FMageShoot(objtype *ob);
+void SpawnRoboTank(int tilex, int tiley);
+void T_RoboTankShoot(objtype *ob);
+void SpawnStompy(int tilex, int tiley);
+void T_StompyShoot(objtype *ob);
+void SpawnBug(int tilex, int tiley);
+void T_BugShoot(objtype *ob);
+void SpawnShooterEye(int tilex, int tiley);
+void T_EyeShootPlayer(objtype *ob);
+void SpawnRunningEye(int tilex, int tiley);
+void T_RunningEye(objtype *ob);
+
/*
=============================================================================
- LOCAL VARIABLES
+ LARGE SOUND
=============================================================================
*/
+void LargeSound (objtype *ob)
+{
+ if (ob->temp1 != SOUNDPLAYED)
+ {
+ SD_PlaySound(LARGEMONSTERSND);
+ ob->temp1 = SOUNDPLAYED;
+ }
+}
/*
=============================================================================
- SKELETON IN WALL
+ SMALL SOUND
=============================================================================
*/
+void SmallSound (objtype *ob)
+{
+ if (ob->temp1 != SOUNDPLAYED)
+ {
+ SD_PlaySound(SMALLMONSTERSND);
+ ob->temp1 = SOUNDPLAYED;
-void T_WallSkeleton(objtype *ob);
+ }
+}
-statetype s_wallskel = {0,40,T_WallSkeleton,&s_wallskel};
-statetype s_wallskel2 = {0,1,NULL,NULL};
-enum wskel_modes {ws_wall1,ws_wall2,ws_wall3,ws_exit};
-//enum wskel_modes {ws_wall1,ws_exit};
+/*
+=============================================================================
-#define wskel_mode ob->temp1
-#define wskel_delay ob->temp2
-#define wskel_base ob->angle
-#define wskel_wallx ob->hitpoints
-#define wskel_wally ob->speed
+ RAMBONE
-/*
-===============
-=
-= SpawnWallSkeleton
-=
-===============
+=============================================================================
*/
-void SpawnWallSkeleton(int tilex, int tiley)
-{
- char xofs[] = {0,0,-1,+1};
- char yofs[] = {-1,+1,0,0};
- objtype *ob;
- int wallx=tilex,wally=tiley,wallbase,wallmode,loop;
- unsigned tile,current_delay;
- for (loop=0; loop<4; loop++)
- {
- tile = *(mapsegs[0]+farmapylookup[tiley+yofs[loop]]+tilex+xofs[loop]);
- switch (tile)
- {
-// case WALL_SKELETON_CODE:
-// case WALL_SKELETON_CODE+1:
-// case WALL_SKELETON_CODE+2:
-// wallmode = ws_wall1+(tile-WALL_SKELETON_CODE);
-// wallbase = WALL_SKELETON_CODE;
-// goto foundtile;
-// break;
-
- case 66:
- case 68:
-// case 21:
- wallmode = ws_wall1+(tile-66);
- wallbase = 66;
- goto foundtile;
-// break;
-
- case 67:
- case 69:
- wallmode = ws_wall1+(tile-67);
- wallbase = 67;
- goto foundtile;
-// break;
- }
- }
+statetype s_skel_1 = {RAMBONEWALK1PIC, 10, &T_ShooterObj, &s_skel_2};
+statetype s_skel_2 = {RAMBONEWALK2PIC, 10, &T_ShooterObj, &s_skel_3};
+statetype s_skel_3 = {RAMBONEWALK3PIC, 10, &T_ShooterObj, &s_skel_4};
+statetype s_skel_4 = {RAMBONEWALK4PIC, 10, &T_ShooterObj, &s_skel_1};
- return;
-foundtile:;
+statetype s_skel_attack1 = {RAMBONEATTACK1PIC, 12, NULL, &s_skel_attack2};
+statetype s_skel_attack2 = {RAMBONEATTACK2PIC, 20, NULL, &s_skel_attack3};
+statetype s_skel_attack3 = {RAMBONEATTACK2PIC, -1, T_SkeletonShoot, &s_skel_attack4};
+statetype s_skel_attack4 = {RAMBONEATTACK3PIC, 20, NULL, &s_skel_ouch};
- wallx += xofs[loop];
- wally += yofs[loop];
+statetype s_skel_ouch = {RAMBONEATTACK1PIC, 10, NULL, &s_skel_1};
- SpawnNewObj(tilex,tiley,&s_wallskel,PIXRADIUS*35);
- ob = new;
- new->obclass = wallskelobj;
- new->speed = 1900;
- new->flags &= ~of_shootable;
- new->hitpoints = 12;
+statetype s_skel_die1 = {RAMBONEDEATH1PIC, 40, NULL, &s_skel_die2};
+statetype s_skel_die2 = {RAMBONEDEATH2PIC, 30, NULL, &s_skel_die3};
+statetype s_skel_die3 = {RAMBONEDEATH3PIC, 20, &LargeSound, NULL};
-// new->tilex = wallx;
-// new->tiley = wally;
- wskel_wallx = wallx;
- wskel_wally = wally;
- wskel_base = wallbase;
- new->active = no;
+statetype s_skel_shot1 = {RAMBONESHOT1PIC, 10, &T_ShootPlayer, &s_skel_shot2};
+statetype s_skel_shot2 = {RAMBONESHOT2PIC, 10, &T_ShootPlayer, &s_skel_shot1};
- wskel_mode = wallmode;
+#define shooter_mode ob->temp1
+#define shooter_delay ob->temp2
- tile = *(mapsegs[2]+farmapylookup[wally]+wallx);
- if (tile)
- wskel_delay = (tile>>8)*30;
- else
- {
- current_delay = (2*60)+random(4*60);
- wskel_delay = zombie_base_delay+current_delay;
- zombie_base_delay += current_delay;
- if (zombie_base_delay > 8*60)
- zombie_base_delay = 0;
- }
-}
/*
===============
=
-= T_WallSkeleton
+= SpawnSkeleton
=
===============
*/
-void T_WallSkeleton(objtype *ob)
+void SpawnRamBone(int tilex, int tiley)
{
- int x=wskel_wallx,y=wskel_wally;
-
- wskel_delay -= realtics;
- if (wskel_delay > 0)
- return;
+ SpawnNewObj(tilex, tiley, &s_skel_1,PIXRADIUS*20);
+ new->obclass = ramboneobj;
+ new->speed = 2036;
+ new->flags |= of_shootable;
+ new->hitpoints = EasyHitPoints(12);
+}
- switch (wskel_mode)
- {
- case ws_wall2:
- if ((wskel_base == 66) || (wskel_base == 67))
- wskel_mode++;
- case ws_wall1:
- case ws_wall3:
- (unsigned)actorat[x][y]
- = tilemap[x][y]
- = *(mapsegs[0]+farmapylookup[y]+x)
- = wskel_base+(wskel_mode-ws_wall1);
-
- wskel_mode++;
- wskel_delay = (120);
- ob->active = always;
- break;
- case ws_exit:
- (unsigned)actorat[x][y]
- = tilemap[x][y]
- = *(mapsegs[0]+farmapylookup[y]+x)
- = 21;
-// = wskel_base;
- ob->tilex = ob->x >> TILESHIFT;
- ob->tiley = ob->y >> TILESHIFT;
-
- ob->obclass = skeletonobj;
- ob->speed = 2036;
- ob->flags |= of_shootable;
- ob->hitpoints = 12;
- ob->state = &s_skel_1;
- ob->ticcount = ob->state->tictime;
- break;
- }
+/*
+=================
+=
+= T_SkeletonShoot
+=
+=================
+*/
+void T_SkeletonShoot(objtype *ob)
+{
+ ShootPlayer(ob, rbshotobj, MSHOTSPEED, &s_skel_shot1);
}
+
/*
=============================================================================
- SKELETONS
+ FUTURE MAGE
=============================================================================
*/
-void T_Skeleton(objtype *ob);
-
-
-
+statetype s_fmage1 = {FMAGEWALK1PIC, 20, &T_ShooterObj, &s_fmage2};
+statetype s_fmage2 = {FMAGEWALK2PIC, 20, &T_ShooterObj, &s_fmage3};
+statetype s_fmage3 = {FMAGEWALK3PIC, 20, &T_ShooterObj, &s_fmage1};
-statetype s_skel_pause = {SKELETON_1PIC,40,NULL,&s_skel_2};
+statetype s_fmageattack1 = {FMAGEATTACK1PIC, 20, NULL, &s_fmageattack2};
+statetype s_fmageattack2 = {FMAGEATTACK1PIC, -1, &T_FMageShoot, &s_fmageattack3};
+statetype s_fmageattack3 = {FMAGEATTACK2PIC, 30, NULL, &s_fmage1};
-statetype s_skel_1 = {SKELETON_1PIC,10,T_Skeleton,&s_skel_2};
-statetype s_skel_2 = {SKELETON_2PIC,10,T_Skeleton,&s_skel_3};
-statetype s_skel_3 = {SKELETON_3PIC,10,T_Skeleton,&s_skel_4};
-statetype s_skel_4 = {SKELETON_4PIC,10,T_Skeleton,&s_skel_1};
+statetype s_fmageouch = {FMAGEATTACK1PIC, 10, NULL, &s_fmage1};
-statetype s_skel_attack1 = {SKELETON_ATTACK_1PIC,12,NULL,&s_skel_attack2};
-statetype s_skel_attack2 = {SKELETON_ATTACK_2PIC,12,NULL,&s_skel_attack3};
-statetype s_skel_attack3 = {SKELETON_ATTACK_3PIC,12,T_DoDamage,&s_skel_pause};
+statetype s_fmagedie1 = {FMAGEDEATH1PIC, 40, NULL, &s_fmagedie2};
+statetype s_fmagedie2 = {FMAGEDEATH2PIC, 30, &SmallSound, &s_fmagedie3};
+statetype s_fmagedie3 = {FMAGEDEATH3PIC, 0, NULL, &s_fmagedie3};
-statetype s_skel_ouch = {SKELETON_OUCHPIC,8,NULL,&s_skel_1};
-
-statetype s_skel_die1 = {SKELETON_OUCHPIC,18,NULL,&s_skel_die2};
-statetype s_skel_die2 = {SKELETON_DEATH_1PIC,18,NULL,&s_skel_die3};
-statetype s_skel_die3 = {SKELETON_DEATH_2PIC,18,NULL,&s_skel_die3};
+statetype s_fmshot1 = {FMAGESHOT1PIC, 8, &T_ShootPlayer, &s_fmshot2};
+statetype s_fmshot2 = {FMAGESHOT2PIC, 8, &T_ShootPlayer, &s_fmshot1};
/*
-===============
+=================
=
-= SpawnSkeleton
+= SpawnFutureMage
=
-===============
+=================
*/
-void SpawnSkeleton(int tilex, int tiley)
+
+void SpawnFutureMage (int tilex, int tiley)
{
- SpawnNewObj(tilex,tiley,&s_skel_1,PIXRADIUS*35);
- new->obclass = skeletonobj;
- new->speed = 2036;
- new->flags |= of_shootable;
- new->hitpoints = EasyHitPoints(12);
+ SpawnNewObj(tilex, tiley, &s_fmage1, PIXRADIUS*15);
+ new->obclass = fmageobj;
+ new->speed = 3072;
+ new->flags |= of_shootable;
+ new->hitpoints = EasyHitPoints(12);
}
/*
-===============
+=================
=
-= T_Skeleton
+= T_FMageShoot
=
-===============
+=================
*/
-
-void T_Skeleton(objtype *ob)
+void T_FMageShoot(objtype *ob)
{
- if (Chase (ob,true) || (random(1000)<RANDOM_ATTACK))
- {
- ob->state = &s_skel_attack1;
- ob->ticcount = ob->state->tictime;
- return;
- }
+ ShootPlayer(ob, fmshotobj, MSHOTSPEED, &s_fmshot1);
}
+
+
/*
=============================================================================
- EYE
+ ROBO TANK
=============================================================================
*/
-void T_EyeMage (objtype *ob);
-boolean T_EyeShoot (objtype *ob, boolean eyeshot);
-void T_EyeShootPlayer (objtype *ob);
+statetype s_robotank_walk1 = {ROBOTANKWALK1PIC, 15, &T_ShooterObj, &s_robotank_walk2};
+statetype s_robotank_walk2 = {ROBOTANKWALK2PIC, 15, &T_ShooterObj, &s_robotank_walk3};
+statetype s_robotank_walk3 = {ROBOTANKWALK3PIC, 15, &T_ShooterObj, &s_robotank_walk4};
+statetype s_robotank_walk4 = {ROBOTANKWALK4PIC, 15, &T_ShooterObj, &s_robotank_walk1};
-extern statetype s_eye_shootplayer_1;
-extern statetype s_eye_shootplayer_2;
+statetype s_robotank_attack1 = {ROBOTANKWALK1PIC, 15, NULL, &s_robotank_attack2};
+statetype s_robotank_attack2 = {ROBOTANKATTACK1PIC, 15, NULL, &s_robotank_attack3};
+statetype s_robotank_attack3 = {ROBOTANKATTACK1PIC, -1, &T_RoboTankShoot, &s_robotank_attack4};
+statetype s_robotank_attack4 = {ROBOTANKWALK1PIC, 15, NULL, &s_robotank_walk1};
-statetype s_eye_pause = {EYE_WALK1PIC,40,NULL,&s_eye_2};
+statetype s_robotank_death1 = {ROBOTANKDEATH1PIC, 8, NULL, &s_robotank_death2};
+statetype s_robotank_death2 = {ROBOTANKDEATH2PIC, 8, NULL, &s_robotank_death3};
+statetype s_robotank_death3 = {ROBOTANKDEATH2PIC, -1, &T_AlternateStates, &s_robotank_death1};
+statetype s_robotank_death4 = {ROBOTANKDEATH3PIC, 25, &ExplosionSnd, &s_robotank_death5};
+statetype s_robotank_death5 = {ROBOTANKDEATH4PIC, 20, NULL, &s_robotank_death5};
-statetype s_eye_1 = {EYE_WALK1PIC,20,T_EyeMage,&s_eye_2};
-statetype s_eye_2 = {EYE_WALK2PIC,20,T_EyeMage,&s_eye_3};
-statetype s_eye_3 = {EYE_WALK3PIC,20,T_EyeMage,&s_eye_4};
-statetype s_eye_4 = {EYE_WALK2PIC,20,T_EyeMage,&s_eye_1};
-statetype s_eye_shootplayer_1 = {EYE_SCOWLPIC,1,T_EyeShootPlayer,&s_eye_shootplayer_2};
-statetype s_eye_shootplayer_2 = {EYE_SCOWLPIC,20,NULL,&s_eye_1};
+statetype s_robotank_shot1 = {PSHOT1PIC, 10, &T_ShootPlayer, &s_robotank_shot2};
+statetype s_robotank_shot2 = {PSHOT2PIC, 10, &T_ShootPlayer, &s_robotank_shot1};
-statetype s_eye_ouch = {EYE_OUCH1PIC,8,NULL,&s_eye_ouch2};
-statetype s_eye_ouch2 = {EYE_OUCH2PIC,8,NULL,&s_eye_1};
-statetype s_eye_die1 = {EYE_DEATH1PIC,22,NULL,&s_eye_die2};
-statetype s_eye_die2 = {EYE_DEATH2PIC,22,NULL,&s_eye_die3};
-statetype s_eye_die3 = {EYE_DEATH2PIC,22,NULL,NULL};
+/*
+=================
+=
+= SpawnRoboTank
+=
+=================
+*/
+void SpawnRoboTank(int tilex, int tiley)
+{
+ SpawnNewObj(tilex, tiley, &s_robotank_walk1, PIXRADIUS*35);
+ new->obclass = robotankobj;
+ new->speed = 1700;
+ new->flags |= of_shootable;
+ new->hitpoints = EasyHitPoints(25);
+}
-extern statetype s_eshot2;
-statetype s_eshot1 = {EYE_SHOT1PIC,8,&T_ShootPlayer,&s_eshot2};
-statetype s_eshot2 = {EYE_SHOT2PIC,8,&T_ShootPlayer,&s_eshot1};
+/*
+=================
+=
+= T_RoboTankShoot
+=
+=================
+*/
+void T_RoboTankShoot(objtype *ob)
+{
+ ShootPlayer(ob, rtshotobj, 7000, &s_robotank_shot1);
+}
-#define eye_mode ob->temp1
-#define eye_delay ob->temp2
-//-------------------------------------------------------------------------
-// SpawnEye()
-//-------------------------------------------------------------------------
-void SpawnEye(int tilex, int tiley)
+/*
+====================
+=
+= T_AlternateStates
+=
+====================
+*/
+void T_AlternateStates(objtype *ob)
{
- objtype *ob;
-
- SpawnNewObj(tilex,tiley,&s_eye_1,PIXRADIUS*35);
- ob = new;
- new->obclass = eyeobj;
- new->speed = 1200;
- new->flags |= of_shootable;
- new->hitpoints = EasyHitPoints(15);
- eye_mode = em_other1;
+ if (ob->temp1--)
+ {
+ ob->state = ob->state->next;
+ }
+ else
+ {
+ if (ob->state == &s_robotank_death3)
+ ob->state = &s_robotank_death4;
+ else
+ ob->state = &s_aqua_die4;
+ }
+ ob->ticcount = ob->state->tictime;
}
-//---------------------------------------------------------------------------
-// T_EyeShootPlayer
-//---------------------------------------------------------------------------
-void T_EyeShootPlayer (objtype *ob)
-{
- ShootPlayer(ob,eshotobj,ESHOTSPEED,&s_eshot1);
-}
+
+
/*
=============================================================================
- SUCCUBUS
+ STOMPY
=============================================================================
*/
-void T_Succubus (objtype *ob);
-void T_SuccubusShot (objtype *ob);
-
-extern statetype s_succubus_pause;
-extern statetype s_succubus_walk1;
-extern statetype s_succubus_walk2;
-extern statetype s_succubus_walk3;
-extern statetype s_succubus_walk4;
-extern statetype s_succubus_shot1;
-extern statetype s_succubus_attack1;
-extern statetype s_succubus_attack2;
-extern statetype s_succubus_attack3;
-extern statetype s_succubus_death1;
-extern statetype s_succubus_death2;
-
-statetype s_succubus_pause = {SUCCUBUS_WALK2PIC,10,NULL,&s_succubus_walk3};
+statetype s_stompy_walk1 = {STOMPYWALK1PIC, 15, &T_ShooterObj, &s_stompy_walk2};
+statetype s_stompy_walk2 = {STOMPYWALK2PIC, 15, &T_ShooterObj, &s_stompy_walk3};
+statetype s_stompy_walk3 = {STOMPYWALK3PIC, 15, &T_ShooterObj, &s_stompy_walk4};
+statetype s_stompy_walk4 = {STOMPYWALK4PIC, 15, &T_ShooterObj, &s_stompy_walk1};
-statetype s_succubus_walk1 = {SUCCUBUS_WALK1PIC,10,T_EyeMage,&s_succubus_walk2};
-statetype s_succubus_walk2 = {SUCCUBUS_WALK2PIC,10,T_EyeMage,&s_succubus_walk3};
-statetype s_succubus_walk3 = {SUCCUBUS_WALK3PIC,10,T_EyeMage,&s_succubus_walk4};
-statetype s_succubus_walk4 = {SUCCUBUS_WALK4PIC,10,T_EyeMage,&s_succubus_walk1};
+statetype s_stompy_attack1 = {STOMPYATTACK1PIC, 10, NULL, &s_stompy_attack2};
+statetype s_stompy_attack2 = {STOMPYATTACK2PIC, 15, NULL, &s_stompy_attack3};
+statetype s_stompy_attack3 = {STOMPYATTACK2PIC, -1, T_StompyShoot, &s_stompy_attack4};
+statetype s_stompy_attack4 = {STOMPYATTACK1PIC, 10, NULL, &s_stompy_walk1};
-statetype s_succubus_attack1 = {SUCCUBUS_ATTACK1PIC,15,NULL,&s_succubus_attack2};
-statetype s_succubus_attack2 = {SUCCUBUS_ATTACK1PIC,-1,T_SuccubusShot,&s_succubus_attack3};
-statetype s_succubus_attack3 = {SUCCUBUS_ATTACK2PIC,15,NULL,&s_succubus_pause};
+statetype s_stompy_ouch = {STOMPYATTACK1PIC, 10, NULL, &s_stompy_walk2};
-statetype s_succubus_ouch = {SUCCUBUS_OUCHPIC,15,NULL,&s_succubus_walk1};
+statetype s_stompy_death1 = {STOMPYDEATH1PIC, 45, &ExplosionSnd, &s_stompy_death2};
+statetype s_stompy_death2 = {STOMPYDEATH2PIC, 30, NULL, &s_stompy_death3};
+statetype s_stompy_death3 = {STOMPYDEATH3PIC, 25, NULL, &s_stompy_death4};
+statetype s_stompy_death4 = {STOMPYDEATH4PIC, 20, NULL, NULL};
-statetype s_succubus_death1 = {SUCCUBUS_DEATH1PIC,55,NULL,&s_succubus_death2};
-statetype s_succubus_death2 = {SUCCUBUS_DEATH2PIC,20,NULL,&s_succubus_death2};
+statetype s_stompy_shot1 = {STOMPYSHOT1PIC, 6, &T_ShootPlayer, &s_stompy_shot2};
+statetype s_stompy_shot2 = {STOMPYSHOT2PIC, 6, &T_ShootPlayer, &s_stompy_shot3};
+statetype s_stompy_shot3 = {STOMPYSHOT1PIC, 6, &T_ShootPlayer, &s_stompy_shot4};
+statetype s_stompy_shot4 = {STOMPYSHOT3PIC, 6, &T_ShootPlayer, &s_stompy_shot5};
+statetype s_stompy_shot5 = {STOMPYSHOT4PIC, 6, &T_ShootPlayer, &s_stompy_shot4};
-statetype s_succubus_shot1 = {SUCCUBUS_SHOT1PIC,12,&T_ShootPlayer,&s_succubus_shot1};
/*
-===============
+=================
=
-= SpawnSuccubus
+= SpawnStompy
=
-===============
+=================
*/
-
-void SpawnSuccubus (int tilex, int tiley)
+void SpawnStompy(int tilex, int tiley)
{
- SpawnNewObj(tilex,tiley,&s_succubus_walk1,PIXRADIUS*30);
- new->obclass = succubusobj;
- new->speed = 2500;
- new->flags |= of_shootable;
- new->hitpoints = EasyHitPoints(12);
+ SpawnNewObj(tilex, tiley, &s_stompy_walk1, PIXRADIUS*25);
+ new->obclass = stompyobj;
+ new->speed = 1800;
+ new->flags |= of_shootable;
+ new->hitpoints = EasyHitPoints(20);
}
+
/*
-===============
+=================
=
-= T_SuccubusShot
+= T_StompyShoot
=
-===============
+=================
*/
-
-void T_SuccubusShot (objtype *ob)
+void T_StompyShoot(objtype *ob)
{
- ShootPlayer(ob,sshotobj,ob->temp1 ? MSHOTSPEED : SSHOTSPEED,&s_succubus_shot1);
-// ob->state = &s_succubus_attack3;
-// ob->ticcount = ob->temp1 ? 7 : ob->state->tictime;
+ ShootPlayer(ob, syshotobj, 8500, &s_stompy_shot1);
}
+
/*
=============================================================================
- MAGE
+ BUG
=============================================================================
*/
+statetype s_bug_walk1 = {BUG_WALK1PIC, 15, &T_ShooterObj, &s_bug_walk2};
+statetype s_bug_walk2 = {BUG_WALK2PIC, 15, &T_ShooterObj, &s_bug_walk3};
+statetype s_bug_walk3 = {BUG_WALK3PIC, 15, &T_ShooterObj, &s_bug_walk1};
-void T_MageShoot (objtype *ob);
+statetype s_bug_attack1 = {BUG_ATTACK1PIC, 20, NULL, &s_bug_attack2};
+statetype s_bug_attack2 = {BUG_ATTACK2PIC, 20, NULL, &s_bug_attack3};
+statetype s_bug_attack3 = {BUG_ATTACK2PIC, -1, &T_BugShoot, &s_bug_attack4};
+statetype s_bug_attack4 = {BUG_ATTACK1PIC, 15, NULL, &s_bug_walk1};
-extern statetype s_magepause;
+statetype s_bug_ouch = {BUG_WALK1PIC, 10, NULL, &s_bug_walk2};
-extern statetype s_mage1;
-extern statetype s_mage2;
+statetype s_bug_death1 = {BUG_DEATH1PIC, 35, &SmallSound, &s_bug_death2};
+statetype s_bug_death2 = {BUG_DEATH2PIC, 10, NULL, &s_bug_death2};
-extern statetype s_mageattack1;
-extern statetype s_mageattack2;
-extern statetype s_mageattack3;
+statetype s_bug_shot1 = {BUG_SHOT1PIC, 10, &T_ShootPlayer, &s_bug_shot2};
+statetype s_bug_shot2 = {BUG_SHOT2PIC, 10, &T_ShootPlayer, &s_bug_shot1};
-extern statetype s_mageouch;
-extern statetype s_magedie1;
-extern statetype s_magedie2;
+/*
+=================
+=
+= SpawnBug
+=
+=================
+*/
+void SpawnBug(int tilex, int tiley)
+{
+ SpawnNewObj(tilex, tiley, &s_bug_walk1, PIXRADIUS*20);
+ new->obclass = bugobj;
+ new->speed = 1500;
+ new->flags |= of_shootable;
+ new->hitpoints = EasyHitPoints(10);
+}
-statetype s_magepause = {MAGE1PIC,10,NULL,&s_mage2};
+/*
+=================
+=
+= T_BugShoot
+=
+=================
+*/
+void T_BugShoot(objtype *ob)
+{
+ ShootPlayer(ob, bgshotobj, 8000, &s_bug_shot1);
+}
-statetype s_mage1 = {MAGE1PIC,20,T_EyeMage,&s_mage2};
-statetype s_mage2 = {MAGE2PIC,20,T_EyeMage,&s_mage1};
-//statetype s_mageattack1 = {MAGEATTACKPIC,20,NULL,&s_mageattack2};
-//statetype s_mageattack2 = {MAGEATTACKPIC,-1,T_MageShoot,&s_mageattack3};
-statetype s_mageattack3 = {MAGEATTACKPIC,30,NULL,&s_magepause};
-statetype s_mageouch = {MAGEOUCHPIC,10,NULL,&s_mage1};
-statetype s_magedie1 = {MAGEDIE1PIC,20,NULL,&s_magedie2};
-statetype s_magedie2 = {MAGEDIE2PIC,0,NULL,&s_magedie2};
+/*
+=============================================================================
-statetype s_mshot1 = {PSHOT1PIC,8,&T_ShootPlayer,&s_mshot2};
-statetype s_mshot2 = {PSHOT2PIC,8,&T_ShootPlayer,&s_mshot1};
+ MEC EYE
-/*
-===============
-=
-= SpawnMage
-=
-===============
+=============================================================================
*/
-void SpawnMage (int tilex, int tiley)
+void T_EyeShootPlayer (objtype *ob);
+
+statetype s_eye_pause = {EYE_WALK1PIC,40,NULL,&s_eye_2};
+
+statetype s_eye_1 = {EYE_WALK1PIC,20,T_ShooterObj,&s_eye_2};
+statetype s_eye_2 = {EYE_WALK2PIC,20,T_ShooterObj,&s_eye_3};
+statetype s_eye_3 = {EYE_WALK3PIC,20,T_ShooterObj,&s_eye_4};
+statetype s_eye_4 = {EYE_WALK2PIC,20,T_ShooterObj,&s_eye_1};
+statetype s_eye_shootplayer_1 = {EYE_WALK1PIC,1,T_EyeShootPlayer,&s_eye_shootplayer_2};
+statetype s_eye_shootplayer_2 = {EYE_WALK1PIC,20,NULL,&s_eye_1};
+
+statetype s_eye_ouch = {EYE_OUCH1PIC,8,NULL,&s_eye_ouch2};
+statetype s_eye_ouch2 = {EYE_OUCH2PIC,8,NULL,&s_eye_1};
+
+statetype s_eye_die1 = {EYE_DEATH1PIC,22,NULL,&s_eye_die2};
+statetype s_eye_die2 = {EYE_DEATH2PIC,22,&SmallSound,&s_eye_die3};
+statetype s_eye_die3 = {EYE_DEATH3PIC,22,NULL,&s_eye_die4};
+statetype s_eye_die4 = {EYE_DEATH4PIC,22,NULL,&s_eye_die4};
+
+statetype s_eshot1 = {EYE_SHOT1PIC,8,&T_ShootPlayer,&s_eshot2};
+statetype s_eshot2 = {EYE_SHOT2PIC,8,&T_ShootPlayer,&s_eshot1};
+
+
+//-------------------------------------------------------------------------
+// SpawnEye()
+//-------------------------------------------------------------------------
+void SpawnShooterEye(int tilex, int tiley)
{
- SpawnNewObj(tilex,tiley,&s_mage1,PIXRADIUS*35);
- new->obclass = mageobj;
- new->speed = 3072;
+ objtype *ob;
+
+ SpawnNewObj(tilex,tiley,&s_eye_1,PIXRADIUS*10);
+ ob = new;
+ new->obclass = eyeobj;
+ new->speed = 3000;
new->flags |= of_shootable;
- new->hitpoints = EasyHitPoints(12);
+ new->hitpoints = EasyHitPoints(15);
+ shooter_mode = sm_other1;
+}
+
+
+//---------------------------------------------------------------------------
+// T_EyeShootPlayer
+//---------------------------------------------------------------------------
+void T_EyeShootPlayer (objtype *ob)
+{
+ ShootPlayer(ob, eshotobj, ESHOTSPEED, &s_eshot1);
}
/*
===============
=
-= T_EyeMage
+= T_ShooterObj
=
= **********
-= ***NOTE*** This routine controls the thinks for the Eye, Mage, and Succubus.
-= **********
+= ***NOTE*** This routine controls the thinks for the RamBone, RoboTank,
+= ********** Stompy, Future Mage, Bug, and Old Mage
=
===============
*/
-void T_EyeMage (objtype *ob)
+void T_ShooterObj(objtype *ob)
{
fixed tempx,tempy;
unsigned temp_tilex,temp_tiley;
int angle;
- eye_delay -= realtics;
- if (eye_delay < 0)
+ shooter_delay -= realtics;
+ if (shooter_delay < 0)
{
- eye_mode = random(em_dummy);
- eye_delay = (10*60);
+ shooter_mode = random(sm_dummy);
+ shooter_delay = random(10*60)+random(50);
}
tempx = player->x;
@@ -518,310 +516,376 @@ void T_EyeMage (objtype *ob)
temp_tiley = player->tiley;
- switch (eye_mode)
+ switch (shooter_mode)
{
- case em_other1:
- case em_other2:
- case em_other3:
- case em_other4:
- player->x = ((long)other_x[eye_mode]<<TILESHIFT)+TILEGLOBAL/2;
- player->y = ((long)other_y[eye_mode]<<TILESHIFT)+TILEGLOBAL/2;
- player->tilex = other_x[eye_mode];
- player->tiley = other_y[eye_mode];
+ case sm_other1:
+ case sm_other2:
+ case sm_other3:
+ case sm_other4:
+ player->x = ((long)other_x[shooter_mode]<<TILESHIFT)+TILEGLOBAL/2;
+ player->y = ((long)other_y[shooter_mode]<<TILESHIFT)+TILEGLOBAL/2;
+ player->tilex = other_x[shooter_mode];
+ player->tiley = other_y[shooter_mode];
break;
}
if (Chase(ob,true))
- eye_delay = 0;
+ shooter_delay = 0;
player->x = tempx;
player->y = tempy;
player->tilex = temp_tilex;
player->tiley = temp_tiley;
+ angle = AngleNearPlayer(ob);
- if (ob->obclass == mageobj) // do the mage shot
+
+ // Handle shooting for the different characters controlled by this think.
+ switch (ob->obclass)
{
- if (!random(10))
- if (ShootPlayer(ob,mshotobj,MSHOTSPEED,&s_mshot1))
+ case ramboneobj:
+ if (!random(2) && (angle != -1))
{
- ob->state = &s_mageattack3;
+ ob->state = &s_skel_attack1;
ob->ticcount = ob->state->tictime;
}
- }
- else
- if (ob->obclass == succubusobj) // do the succubus shot
- {
- angle = AngleNearPlayer(ob); // make sure angle is correct
- // - see AngleNearPlayer
- if (!random(5) && (angle != -1)) // if correct angle and random # attack
+ break;
+
+ case fmageobj:
+ if (!random(8) && (angle != -1))
+ {
+ ob->state = &s_fmageattack1;
+ ob->ticcount = ob->state->tictime;
+ }
+ break;
+
+ case robotankobj:
+ if (!random(15) && (angle != -1))
{
- ob->state = &s_succubus_attack1; // change state to attack
- ob->ticcount = ob->state->tictime; // init ticcount - otherwise
- } // object may get hung in a
- } // endless state
+ ob->state = &s_robotank_attack1;
+ ob->ticcount = ob->state->tictime;
+ }
+ break;
- else
- {
- angle = AngleNearPlayer(ob); // do the eye shot
+ case stompyobj:
+ if (angle != -1)
+ {
+ ob->state = &s_stompy_attack1;
+ ob->ticcount = ob->state->tictime;
+ }
+ break;
+ case bugobj:
+ if (!random(5) && (angle != -1))
+ {
+ ob->state = &s_bug_attack1;
+ ob->ticcount = ob->state->tictime;
+ }
+ break;
+
+ case eyeobj:
if (!random(2) && (angle != -1))
{
ob->state = &s_eye_shootplayer_1;
ob->ticcount = ob->state->tictime;
}
- }
-
+ break;
+ }
}
-/*
-=============================================================================
-
- BUNNY
-
-=============================================================================
-*/
-
-void T_HarmlessBunnyWalk(objtype *ob);
-void T_Bunny(objtype *ob);
-extern statetype s_bunny_left1;
-extern statetype s_bunny_left2;
-extern statetype s_bunny_left3;
-extern statetype s_bunny_right1;
-extern statetype s_bunny_right2;
-extern statetype s_bunny_right3;
-extern statetype s_bunny_meta1;
-extern statetype s_bunny_meta2;
-extern statetype s_bunny_walk1;
-extern statetype s_bunny_walk2;
-extern statetype s_bunny_attack1;
-extern statetype s_bunny_attack2;
-extern statetype s_bunny_pause;
-extern statetype s_bunny_death1;
-extern statetype s_bunny_death2;
-extern statetype s_bunny_death3;
-statetype s_bunny_left1 = {BUNNY_LEFT1PIC, 55, NULL, &s_bunny_left2};
-statetype s_bunny_left2 = {BUNNY_LEFT1PIC, 10, T_HarmlessBunnyWalk, &s_bunny_left1};
-statetype s_bunny_left3 = {BUNNY_LEFT2PIC, 30, NULL, &s_bunny_left1};
-statetype s_bunny_right1 = {BUNNY_RIGHT1PIC, 55, NULL, &s_bunny_right2};
-statetype s_bunny_right2 = {BUNNY_RIGHT1PIC, 10, T_HarmlessBunnyWalk, &s_bunny_right1};
-statetype s_bunny_right3 = {BUNNY_RIGHT2PIC, 30, NULL, &s_bunny_right1};
-statetype s_bunny_meta1 = {BUNNY_META1PIC, 30, NULL, &s_bunny_meta2};
-statetype s_bunny_meta2 = {BUNNY_META2PIC, 30, NULL, &s_bunny_walk1};
-
-statetype s_bunny_walk1 = {BUNNY_WALK1PIC, 25, T_Bunny, &s_bunny_walk2};
-statetype s_bunny_walk2 = {BUNNY_WALK2PIC, 25, T_Bunny, &s_bunny_walk1};
+/*
+=============================================================================
-statetype s_bunny_attack1 = {BUNNY_WALK1PIC, 25, NULL, &s_bunny_attack2};
-statetype s_bunny_attack2 = {BUNNY_WALK2PIC, 25, T_DoDamage, &s_bunny_walk1};
+ RUNNING EYE
-statetype s_bunny_ouch = {BUNNY_OUCHPIC, 30, NULL, &s_bunny_pause};
-statetype s_bunny_pause = {BUNNY_WALK1PIC, 50, T_Bunny, &s_bunny_walk2};
+=============================================================================
+*/
-statetype s_bunny_death1 = {BUNNY_OUCHPIC, 40, NULL, &s_bunny_death2};
-statetype s_bunny_death2 = {BUNNY_DEATH1PIC, 50, NULL, &s_bunny_death3};
-statetype s_bunny_death3 = {BUNNY_DEATH2PIC, 20, NULL, &s_bunny_death3};
+statetype s_reye_1 = {EYE_WALK1PIC, 20, &T_RunningEye, &s_reye_2};
+statetype s_reye_2 = {EYE_WALK2PIC, 20, &T_RunningEye, &s_reye_3};
+statetype s_reye_3 = {EYE_WALK3PIC, 20, &T_RunningEye, &s_reye_4};
+statetype s_reye_4 = {EYE_WALK2PIC, 20, &T_RunningEye, &s_reye_1};
+statetype s_reye_ouch = {EYE_OUCH1PIC, 8, NULL, &s_reye_ouch2};
+statetype s_reye_ouch2 = {EYE_OUCH2PIC, 8, NULL, &s_reye_1};
-#define bunny_dir_hop ob->temp1
-#define bunny_delay ob->temp2
-#define LEFTSIDE 0x8 // 1=left 0=right --side showing
+statetype s_reye_die1 = {EYE_DEATH1PIC, 22, NULL, &s_reye_die2};
+statetype s_reye_die2 = {EYE_DEATH2PIC, 22, &SmallSound, &s_reye_die3};
+statetype s_reye_die3 = {EYE_DEATH3PIC, 22, NULL, &s_reye_die4};
+statetype s_reye_die4 = {EYE_DEATH4PIC, 22, NULL, &s_reye_die4};
/*
-===============
+====================
=
-= SpawnBunny
+= SpawnRunningEye()
=
-===============
+====================
*/
-
-void SpawnBunny (int tilex, int tiley)
+void SpawnRunningEye(int tilex, int tiley)
{
- SpawnNewObj(tilex,tiley,&s_bunny_left1,PIXRADIUS*35);
- new->obclass = hbunnyobj;
- new->speed = 1947;
- new->temp1 = (random(3))+2;
- new->temp2 = random(30);
- new->flags &= ~of_shootable;
- new->flags |= LEFTSIDE; //left side showing}
+ SpawnNewObj(tilex,tiley,&s_reye_1,PIXRADIUS*25);
+ new->obclass = reyeobj;
+ new->speed = 3500;
+ new->flags |= of_shootable;
+ new->hitpoints = EasyHitPoints(15);
+ new->temp2 = (*(mapsegs[2]+farmapylookup[tiley+1]+tilex))>>8;
+ *(mapsegs[2]+farmapylookup[tiley+1]+tilex) = 0;
+
+ new->temp1 = 2;
+
+ if (!new->temp2)
+ Quit("Initialize the running eye!\n");
}
+
/*
-===============
+====================
=
-= T_HarmlessBunnyWalk
+= T_RunningEye
=
-===============
+====================
*/
-
-
-void T_HarmlessBunnyWalk(objtype *ob)
+void T_RunningEye(objtype *ob)
{
- int valid_dir[8][2] = {{6,5}, {7,6}, {4,7}, {5,4}, {3,2}, {0,3}, {1,0}, {2,1}};
- long move;
- dirtype player_dir;
- fixed old_x, old_y;
- unsigned old_tilex, old_tiley;
- long old_distance;
-
-
- ob->temp2 -= realtics;
- if (ob->temp2 <= 0)
- {
- if (CheckHandAttack(ob))
- {
- ob->temp2 = -1;
- return;
- }
+ int x, y, dir_num, switch_num;
+ fixed tempx,tempy;
+ unsigned temp_tilex,temp_tiley;
- actorat[ob->tilex][ob->tiley] = 0;
- ob->x = ((long)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
- ob->y = ((long)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
- ob->distance = TILEGLOBAL;
- ob->state = &s_bunny_meta1;
- ob->ticcount = ob->state->tictime;
- ob->obclass = bunnyobj;
- ob->flags |= of_shootable;
- ob->hitpoints = EasyHitPoints(10);
- ob->dir = nodir;
- ChaseThink(ob,true); // JTR - testing..
- return;
- }
+ dir_num = *(mapsegs[2]+farmapylookup[ob->tiley]+ob->tilex);
+ dir_num = dir_num>>8;
- // The direction of the player isn't updated so it must be
- // calculated. This is done so the correct side (left/right)
- // of the bunny will be showed.
+ if (!dir_num)
+ dir_num = ob->temp2;
- if ((player->angle > 337) || (player->angle <= 22))
- player_dir = east;
- else
- if (player->angle <= 67)
- player_dir = northeast;
- else
- if (player->angle <= 112)
- player_dir = north;
- else
- if (player->angle <= 157)
- player_dir = northwest;
- else
- if (player->angle <= 202)
- player_dir = west;
- else
- if (player->angle <= 247)
- player_dir = southwest;
- else
- if (player->angle <= 292)
- player_dir = south;
- else
- if (player->angle <= 337)
- player_dir = southeast;
- if (ob->temp1)
- ob->temp1--;
- else
- ob->temp1 = (random(3))+2;
- if (ob->flags & LEFTSIDE)
+ if (dir_num == 5)
{
if (ob->temp1)
{
- if (valid_dir[player_dir][0] != ob->dir)
- {
- ob->dir = valid_dir[player_dir][0];
- }
+ ob->temp1--;
}
else
{
- ob->state = &s_bunny_right1;
- ob->ticcount = ob->state->tictime;
- ob->flags &= ~LEFTSIDE;
- ob->dir = valid_dir[player_dir][1];
- return;
- }
- }
- else
- {
- if (ob->temp1)
- {
- if (valid_dir[player_dir][1] != ob->dir)
+ ob->temp1 = 2;
+ actorat[ob->tilex][ob->tiley] = 0;
+ switch (ob->temp2)
{
- ob->dir = valid_dir[player_dir][1];
+ case 1:
+ ob->tiley = ob->tiley-1;
+ ob->y = ((long)(ob->tiley)<<TILESHIFT)+TILEGLOBAL/2;
+ break;
+
+ case 2:
+ ob->tilex = ob->tilex+1;
+ ob->x = ((long)(ob->tilex)<<TILESHIFT)+TILEGLOBAL/2;
+ break;
+
+ case 3:
+ ob->tiley = ob->tiley+1;
+ ob->y = ((long)(ob->tiley)<<TILESHIFT)+TILEGLOBAL/2;
+ break;
+
+ case 0:
+ case 4:
+ ob->tilex = ob->tilex-1;
+ ob->x = ((long)(ob->tilex)<<TILESHIFT)+TILEGLOBAL/2;
+ break;
}
- }
- else
- {
- ob->state = &s_bunny_left1;
- ob->ticcount = ob->state->tictime;
- ob->flags |= LEFTSIDE;
- ob->dir = valid_dir[player_dir][2];
+ CalcBounds (ob);
+ ChaseThink(ob,false);
+ actorat[ob->tilex][ob->tiley] = ob;
return;
}
}
- move = ob->speed*tics;
+ tempx = player->x;
+ tempy = player->y;
+ temp_tilex = player->tilex;
+ temp_tiley = player->tiley;
- do
+ if (dir_num == 5)
+ switch_num = ob->temp2;
+ else
+ switch_num = dir_num;
+
+ switch (switch_num)
{
- old_distance = ob->distance;
- old_x = ob->x;
- old_y = ob->y;
- old_tilex = ob->tilex;
- old_tiley = ob->tiley;
+ case 1:
+ player->x = ((long)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ player->y = ((long)(ob->tiley-2)<<TILESHIFT)+TILEGLOBAL/2;
+ player->tilex = ob->tilex;
+ player->tiley = ob->tiley-2;
+ break;
- MoveObj (ob, move);
+ case 2:
+ player->x = ((long)(ob->tilex+2)<<TILESHIFT)+TILEGLOBAL/2;
+ player->y = ((long)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+ player->tilex = ob->tilex+2;
+ player->tiley = ob->tiley;
+ break;
- ob->tilex = ob->x >> TILESHIFT;
- ob->tiley = ob->y >> TILESHIFT;
+ case 3:
+ player->x = ((long)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
+ player->y = ((long)(ob->tiley+2)<<TILESHIFT)+TILEGLOBAL/2;
+ player->tilex = ob->tilex;
+ player->tiley = ob->tiley+2;
+ break;
- if (ob->tilex == old_tilex && ob->tiley == old_tiley)
- {
- break;
- }
- else
- if (actorat[ob->tilex][ob->tiley] == 0)
- {
- actorat[old_tilex][old_tiley] = 0;
- actorat[ob->tilex][ob->tiley] = ob;
- ob->distance = TILEGLOBAL;
- }
- else
- {
- ob->distance = old_distance;
- ob->x = old_x;
- ob->y = old_y;
- ob->tilex = old_tilex;
- ob->tiley = old_tiley;
- return;
- }
+ case 0:
+ case 4:
+ player->x = ((long)(ob->tilex-2)<<TILESHIFT)+TILEGLOBAL/2;
+ player->y = ((long)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
+ player->tilex = ob->tilex-2;
+ player->tiley = ob->tiley;
+ break;
+ }
- } while (0);
+ Chase(ob, false);
- CalcBounds (ob);
+ player->x = tempx;
+ player->y = tempy;
+ player->tilex = temp_tilex;
+ player->tiley = temp_tiley;
- if (ob->flags & LEFTSIDE)
- ob->state = &s_bunny_left3;
- else
- ob->state = &s_bunny_right3;
- ob->ticcount = ob->state->tictime;
+ if (dir_num != 5)
+ ob->temp2 = dir_num;
}
+
/*
-===============
+=============================================================================
+
+ EGYPTIAN HEAD
+
+=============================================================================
+*/
+
+void T_Head(objtype *ob);
+
+statetype s_head = {HEADPIC, 20, &T_Head, &s_head};
+
+statetype s_head_shot1 = {PSHOT1PIC, 10, &T_ShootPlayer, &s_head_shot2};
+statetype s_head_shot2 = {PSHOT2PIC, 10, &T_ShootPlayer, &s_head_shot1};
+
+
+/*
+===================
=
-= T_Bunny
+= SpawnEgyptianHead
=
-===============
+===================
*/
-void T_Bunny(objtype *ob)
+void SpawnEgyptianHead (int tilex, int tiley)
{
- if (Chase (ob, true) || (random(1000)<RANDOM_ATTACK))
+ objtype *ob;
+ short current_head_delay;
+ unsigned tile;
+
+ SpawnNewObj(tilex, tiley, &s_head, PIXRADIUS*35);
+ ob = new;
+ head_mode = h_wait_to_rise;
+
+ tile = *(mapsegs[2]+farmapylookup[tiley+1]+tilex);
+ if (tile)
+ head_delay = (tile>>8)*30;
+ else
{
- ob->state = &s_bunny_attack1;
- ob->ticcount = ob->state->tictime;
- return;
+ current_head_delay = (3*60)+random(3*60);
+ head_delay = head_base_delay+current_head_delay;
+ head_base_delay += current_head_delay;
+ if (head_base_delay > 8*60)
+ head_base_delay = 0;
+ }
+
+ new->obclass = realsolidobj;
+ new->speed = 3000;
+ new->flags |= of_shootable;
+}
+
+
+
+//--------------------------------------------------------------------------
+// T_Head()
+//--------------------------------------------------------------------------
+void T_Head(objtype *ob)
+{
+ fixed tempx,tempy;
+ unsigned temp_tilex,temp_tiley;
+ int angle;
+
+ switch (head_mode)
+ {
+ case h_wait_to_rise:
+ if (head_delay < 0)
+ {
+ if ((ob->tilex == player->tilex) && (ob->tiley == player->tiley))
+ break;
+ if (CheckHandAttack(ob))
+ break;
+
+ ob->obclass = headobj;
+ ob->active = always;
+ head_mode = h_active;
+ head_delay = random(100)+random(60);
+ ob->hitpoints = EasyHitPoints(16);
+ }
+ else
+ head_delay -= tics;
+
+ break;
+
+ case h_player1:
+ case h_player2:
+ case h_player3:
+ case h_player4:
+ case h_active:
+ Chase (ob,true);
+
+ if (!random(2) && (angle != -1))
+ ShootPlayer(ob, hshotobj, 10000, &s_head_shot1);
+
+ head_delay -= tics;
+ if (head_delay < 0)
+ {
+ head_mode = random(h_other4)+1;
+ head_delay = random(10*60)+random(50);
+ }
+ break;
+
+ case h_other1:
+ case h_other2:
+ case h_other3:
+ case h_other4:
+
+ tempx = player->x;
+ tempy = player->y;
+ temp_tilex = player->tilex;
+ temp_tiley = player->tiley;
+
+ player->x = ((long)other_x[head_mode]<<TILESHIFT)+TILEGLOBAL/2;
+ player->y = ((long)other_y[head_mode]<<TILESHIFT)+TILEGLOBAL/2;
+ player->tilex = other_x[head_mode];
+ player->tiley = other_y[head_mode];
+
+ if (Chase(ob,true))
+ head_delay = 0;
+
+ player->x = tempx;
+ player->y = tempy;
+ player->tilex = temp_tilex;
+ player->tiley = temp_tiley;
+
+ head_delay -= tics;
+ if (head_delay <= 0)
+ {
+ head_mode = h_active;
+ head_delay = random(10*60)+random(50);
+ }
+ break;
}
}
diff --git a/C6_ACT3.C b/C6_ACT3.C
index 79378d4..3740289 100644
--- a/C6_ACT3.C
+++ b/C6_ACT3.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -29,19 +29,6 @@
=============================================================================
*/
-#if 0
-#define MSHOTDAMAGE 2
-#define MSHOTSPEED 10000
-
-#define ESHOTDAMAGE 1
-#define ESHOTSPEED 5000
-
-#define SSHOTDAMAGE 3
-#define SSHOTSPEED 6500
-
-#define RANDOM_ATTACK 20
-#endif
-
/*
=============================================================================
@@ -61,406 +48,320 @@ void T_ShootPlayer(objtype *ob);
=============================================================================
*/
-/*
-=============================================================================
- RED DEMON
-=============================================================================
-*/
-void T_RedDemon (objtype *ob);
-void T_RedDemonCheckCnt (objtype *ob);
-extern statetype s_red_demonpause;
+/*
+=============================================================================
-extern statetype s_red_demon1;
-extern statetype s_red_demon2;
-extern statetype s_red_demon3;
-extern statetype s_red_demon4;
+ DEMON
-extern statetype s_red_demonattack1;
-extern statetype s_red_demonattack2;
-extern statetype s_red_demonattack3;
+=============================================================================
+*/
-extern statetype s_red_demonouch;
+void T_TrollDemon (objtype *ob);
-extern statetype s_red_demondie1;
-extern statetype s_red_demondie2;
-extern statetype s_red_demondie3;
-extern statetype s_red_demondie4;
+statetype s_demonpause = {DEMON1PIC,40,NULL,&s_demon2};
-statetype s_red_demonpause = {RED_DEMON1PIC,30,NULL,&s_red_demon2};
+statetype s_demon1 = {DEMON1PIC,20,&T_TrollDemon,&s_demon2};
+statetype s_demon2 = {DEMON2PIC,20,&T_TrollDemon,&s_demon3};
+statetype s_demon3 = {DEMON3PIC,20,&T_TrollDemon,&s_demon4};
+statetype s_demon4 = {DEMON4PIC,20,&T_TrollDemon,&s_demon1};
-statetype s_red_demon1 = {RED_DEMON1PIC,20,T_RedDemon,&s_red_demon2};
-statetype s_red_demon2 = {RED_DEMON2PIC,20,T_RedDemon,&s_red_demon3};
-statetype s_red_demon3 = {RED_DEMON3PIC,20,T_RedDemon,&s_red_demon4};
-statetype s_red_demon4 = {RED_DEMON4PIC,20,T_RedDemon,&s_red_demon1};
+statetype s_demonattack1 = {DEMONATTACK1PIC,20,NULL,&s_demonattack2};
+statetype s_demonattack2 = {DEMONATTACK2PIC,20,NULL,&s_demonattack3};
+statetype s_demonattack3 = {DEMONATTACK3PIC,30,&T_DoDamage,&s_demonpause};
-statetype s_red_demonattack1 = {RED_DEMONATTACK1PIC,20,NULL,&s_red_demonattack2};
-statetype s_red_demonattack2 = {RED_DEMONATTACK2PIC,20,NULL,&s_red_demonattack3};
-statetype s_red_demonattack3 = {RED_DEMONATTACK3PIC,30,T_DoDamage,&s_red_demon2};
+statetype s_demonouch = {DEMONOUCHPIC,15,&T_TrollDemon,&s_demon1};
-statetype s_red_demonouch = {RED_DEMONOUCHPIC,30,NULL,&s_red_demon1};
+statetype s_demondie1 = {DEMONDIE1PIC,40,NULL,&s_demondie2};
+statetype s_demondie2 = {DEMONDIE2PIC,30,&LargeSound,&s_demondie3};
+statetype s_demondie3 = {DEMONDIE3PIC,0,NULL,&s_demondie3};
-statetype s_red_demondie1 = {RED_DEMONOUCHPIC,9,NULL,&s_red_demondie2};
-statetype s_red_demondie2 = {RED_DEMONDIE1PIC,9,T_RedDemonCheckCnt,&s_red_demondie1};
-statetype s_red_demondie3 = {RED_DEMONDIE2PIC,20,NULL,&s_red_demondie4};
-statetype s_red_demondie4 = {RED_DEMONDIE3PIC,10,NULL,&s_red_demondie4};
/*
===============
=
-= SpawnRedDemon
+= SpawnDemon
=
===============
*/
-void SpawnRedDemon (int tilex, int tiley)
+void SpawnDemon (int tilex, int tiley)
{
- SpawnNewObj(tilex,tiley,&s_red_demon1,PIXRADIUS*35);
- new->obclass = reddemonobj;
+ SpawnNewObj(tilex,tiley,&s_demon1,PIXRADIUS*35);
+ new->obclass = demonobj;
new->speed = 2048;
new->flags |= of_shootable;
- new->hitpoints = EasyHitPoints(50);
- new->temp1 = 25;
+ new->hitpoints = EasyHitPoints(30);
}
/*
-===============
-=
-= T_RedDemon
-=
-===============
+=============================================================================
+
+ TROLL
+
+=============================================================================
*/
-void T_RedDemon (objtype *ob)
-{
- if (Chase (ob,true) || (random(1000)<RANDOM_ATTACK))
- {
- ob->state = &s_red_demonattack1;
- ob->ticcount = ob->state->tictime;
- return;
- }
-}
+statetype s_trollpause = {TROLL1PIC, 30, &T_DoDamage, &s_troll2};
+
+statetype s_troll1 = {TROLL1PIC, 13, &T_TrollDemon, &s_troll2};
+statetype s_troll2 = {TROLL2PIC, 13, &T_TrollDemon, &s_troll3};
+statetype s_troll3 = {TROLL3PIC, 13, &T_TrollDemon, &s_troll4};
+statetype s_troll4 = {TROLL4PIC, 13, &T_TrollDemon, &s_troll1};
+
+statetype s_trollattack1 = {TROLLATTACK1PIC, 15, NULL, &s_trollattack2};
+statetype s_trollattack2 = {TROLLATTACK2PIC, 20, NULL, &s_trollpause};
+
+statetype s_trollouch = {TROLLOUCHPIC, 14, &T_TrollDemon, &s_troll1};
+
+statetype s_trolldie1 = {TROLLDIE1PIC, 18, NULL, &s_trolldie2};
+statetype s_trolldie2 = {TROLLDIE2PIC, 15, &LargeSound, &s_trolldie3};
+statetype s_trolldie3 = {TROLLDIE3PIC, 0, NULL, &s_trolldie3};
+
/*
===============
=
-= T_RedDemonCheckCnt
+= SpawnTroll
=
===============
*/
-void T_RedDemonCheckCnt (objtype *ob)
+void SpawnTroll (int tilex, int tiley)
{
- ob->temp1--;
- if (!ob->temp1)
- {
- ob->state = &s_red_demondie3;
- ob->ticcount = ob->state->tictime;
- }
+ SpawnNewObj(tilex,tiley,&s_troll1,35*PIXRADIUS);
+ new->speed = 2500;
+ new->obclass = trollobj;
+ new->flags |= of_shootable;
+ new->hitpoints = EasyHitPoints(15);
}
/*
=============================================================================
- GRELMINAR
+ CYBORG DEMON
=============================================================================
*/
+void T_Demon (objtype *ob);
-void T_Grelminar (objtype *ob);
-void T_GrelminarShoot (objtype *ob);
-void T_Grelm_DropKey(objtype *ob);
-
-extern statetype s_grelpause;
-
-extern statetype s_grel1;
-extern statetype s_grel2;
-
-extern statetype s_grelattack1;
-extern statetype s_grelattack2;
-extern statetype s_grelattack3;
-
-extern statetype s_grelouch;
-
-extern statetype s_greldie1;
-extern statetype s_greldie2;
-extern statetype s_greldie3;
-extern statetype s_greldie4;
-extern statetype s_greldie5;
-extern statetype s_greldie5a;
-extern statetype s_greldie6;
-
-
-statetype s_grelpause = {GREL1PIC,50,NULL,&s_grel2};
-
-statetype s_grel1 = {GREL1PIC,20,T_Grelminar,&s_grel2};
-statetype s_grel2 = {GREL2PIC,20,T_Grelminar,&s_grel1};
-
-//statetype s_grelattack1 = {GRELATTACKPIC,20,NULL,&s_grelattack2};
-//statetype s_grelattack2 = {GRELATTACKPIC,-1,T_GrelminarShoot,&s_grelattack3};
-statetype s_grelattack3 = {GRELATTACKPIC,30,NULL,&s_grelpause};
-
-statetype s_grelouch = {GRELHITPIC,6,NULL,&s_grel1};
-
-statetype s_greldie1 = {GRELDIE1PIC,22,NULL,&s_greldie2};
-statetype s_greldie2 = {GRELDIE2PIC,22,NULL,&s_greldie3};
-statetype s_greldie3 = {GRELDIE3PIC,22,NULL,&s_greldie4};
-statetype s_greldie4 = {GRELDIE4PIC,22,NULL,&s_greldie5};
-statetype s_greldie5 = {GRELDIE5PIC,22,NULL,&s_greldie5a};
-statetype s_greldie5a = {GRELDIE5PIC,1,T_Grelm_DropKey,&s_greldie6};
-statetype s_greldie6 = {GRELDIE6PIC,0,NULL,&s_greldie6};
+statetype s_cyborg_demon1 = {CYBORG1PIC, 20, T_TrollDemon, &s_cyborg_demon2};
+statetype s_cyborg_demon2 = {CYBORG2PIC, 20, T_TrollDemon, &s_cyborg_demon3};
+statetype s_cyborg_demon3 = {CYBORG3PIC, 20, T_TrollDemon, &s_cyborg_demon4};
+statetype s_cyborg_demon4 = {CYBORG4PIC, 20, T_TrollDemon, &s_cyborg_demon1};
+statetype s_cyborg_demonattack1 = {CYBORGATTACK1PIC, 20, NULL, &s_cyborg_demonattack2};
+statetype s_cyborg_demonattack2 = {CYBORGATTACK2PIC, 20, NULL, &s_cyborg_demonattack3};
+statetype s_cyborg_demonattack3 = {CYBORGATTACK3PIC, 30, T_DoDamage, &s_cyborg_demon2};
-extern statetype s_gshot1;
+statetype s_cyborg_demonouch = {CYBORGOUCHPIC, 30, NULL, &s_cyborg_demon1};
-statetype s_gshot1 = {SKULL_SHOTPIC,8,T_ShootPlayer,&s_gshot1};
+statetype s_cyborg_demondie1 = {CYBORGOUCHPIC, 40, NULL, &s_cyborg_demondie2};
+statetype s_cyborg_demondie2 = {CYBORGDIE1PIC, 30, &LargeSound, &s_cyborg_demondie3};
+statetype s_cyborg_demondie3 = {CYBORGDIE2PIC, 20, NULL, &s_cyborg_demondie3};
/*
===============
=
-= SpawnGrelminar
+= SpawnCyborgDemon
=
===============
*/
-void SpawnGrelminar (int tilex, int tiley)
+void SpawnCyborgDemon (int tilex, int tiley)
{
- unsigned Grel_Hard;
- unsigned DropKey;
-
- SpawnNewObj(tilex,tiley,&s_grel1,PIXRADIUS*35);
- new->obclass = grelmobj;
+ SpawnNewObj(tilex, tiley, &s_cyborg_demon1, PIXRADIUS*35);
+ new->obclass = cyborgdemonobj;
new->speed = 2048;
new->flags |= of_shootable;
-
- //
- // if Grelminar is to drop a key the info-plane byte to the right
- // should have a 1 in the highbyte, else he will not drop the key.
- //
- DropKey = *(mapsegs[2]+farmapylookup[tiley]+tilex+1);
- if (DropKey)
- new->temp1 = DropKey>>8;
- else
- new->temp1 = 0;
-
- //
- // The info-plane byte below Grelminar will determine how powerful
- // Grelminar is. If nothing is there, he is the most powerful.
- // -- affected are the hit points and the shot damage.
- // The hit points are controlled here, the shot damage is controlled
- // within the spawning of the shot. See ShootPlayer for more info.
- //
- Grel_Hard = *(mapsegs[2]+farmapylookup[tiley+1]+tilex);
- if (Grel_Hard)
- {
- new->temp2 = Grel_Hard>>8;
- new->hitpoints = EasyHitPoints((new->temp2 * 10));
- }
- else
- new->hitpoints = EasyHitPoints(100);
+ new->hitpoints = EasyHitPoints(30);
}
/*
===============
=
-= T_Grelminar
+= T_TrollDemon
=
===============
*/
-void T_Grelminar (objtype *ob)
+void T_TrollDemon (objtype *ob)
{
- Chase (ob,false);
-
- if (!random(10))
- if (ShootPlayer(ob,gshotobj,ob->temp2,&s_gshot1))
- {
- ob->state = &s_grelattack3;
- ob->ticcount = ob->state->tictime;
- }
- if (CheckHandAttack(ob))
- TakeDamage (ob->temp2*3);
-
+ if (Chase (ob,true) || (random(1000)<RANDOM_ATTACK))
+ {
+ if (ob->obclass == cyborgdemonobj)
+ ob->state = &s_cyborg_demonattack1;
+ else
+ if (ob->obclass == trollobj)
+ ob->state = &s_trollattack1;
+ else
+ ob->state = &s_demonattack1;
+ ob->ticcount = ob->state->tictime;
+ }
}
-//=================================
-//
-// T_Grelm_DropKey
-//
-//=================================
-void T_Grelm_DropKey(objtype *ob)
-{
- if (!(ob->temp1))
- {
- ob->state = NULL;
- return;
- }
- SpawnBonus(ob->tilex,ob->tiley,B_RKEY);
- SD_PlaySound(GRELM_DEADSND);
- ob->temp1 = false;
-}
+
/*
=============================================================================
- BAT
+ INVISIBLE DUDE!
=============================================================================
*/
-void T_Bat (objtype *ob);
-void T_BatPast (objtype *ob);
+void T_InvisibleDude (objtype *ob);
-extern statetype s_bat1;
-extern statetype s_bat2;
-extern statetype s_bat3;
-extern statetype s_bat4;
+statetype s_invis_fizz1 = {INVIS_FIZZ1PIC, 8, &T_InvisibleDude, &s_invis_fizz2};
+statetype s_invis_fizz2 = {INVIS_FIZZ2PIC, 8, &T_InvisibleDude, &s_invis_fizz3};
+statetype s_invis_fizz3 = {INVIS_FIZZ3PIC, 8, &T_InvisibleDude, &s_invis_walk};
-extern statetype s_batdie1;
-extern statetype s_batdie2;
+statetype s_invis_walk = {0, 25, &T_InvisibleDude, &s_invis_walk};
+statetype s_invis_attack = {0, -1, &T_DoDamage, &s_invis_pause};
+statetype s_invis_pause = {0, 40, NULL, &s_invis_walk};
+statetype s_invis_flash1 = {INVIS_FIZZ1PIC, 8, &T_InvisibleDude, &s_invis_walk};
+statetype s_invis_flash2 = {INVIS_FIZZ2PIC, 8, &T_InvisibleDude, &s_invis_walk};
+statetype s_invis_flash3 = {INVIS_FIZZ3PIC, 8, &T_InvisibleDude, &s_invis_walk};
-statetype s_bat1 = {BAT1PIC,6,T_Bat,&s_bat2};
-statetype s_bat2 = {BAT2PIC,6,T_Bat,&s_bat3};
-statetype s_bat3 = {BAT3PIC,6,T_Bat,&s_bat4};
-statetype s_bat4 = {BAT4PIC,6,T_Bat,&s_bat1};
-
-statetype s_batpast = {BAT4PIC,80,T_BatPast,&s_bat1};
-
-statetype s_batdie1 = {BATDIE1PIC,18,NULL,&s_batdie2};
-statetype s_batdie2 = {BATDIE2PIC,18,NULL,NULL};
-
+statetype s_invis_death1 = {INVIS_DEATH1PIC, 40, NULL, &s_invis_death2};
+statetype s_invis_death2 = {INVIS_DEATH2PIC, 30, &LargeSound, &s_invis_death3};
+statetype s_invis_death3 = {INVIS_DEATH3PIC, 20, NULL, &s_invis_death3};
/*
===============
=
-= SpawnBat
+= SpawnInvisDude
=
===============
*/
-
-void SpawnBat (int tilex, int tiley)
+void SpawnInvisDude(int tilex, int tiley)
{
- SpawnNewObj(tilex,tiley,&s_bat1,PIXRADIUS*35);
- new->obclass = batobj;
- new->flags |= of_shootable;
-
- new->hitpoints = 1;
- new->speed = 2000;
+ SpawnNewObj(tilex, tiley, &s_invis_walk, PIXRADIUS*20);
+ new->obclass = invisdudeobj;
+ new->speed = 2048;
+ new->flags |= of_shootable;
+ new->hitpoints = EasyHitPoints(20);
+ new->temp1 = 0; // for random flashing of pictures
}
/*
-==================================
+===============
=
-= BatChaseThink
+= T_InvisibleDude
=
-==================================
+===============
*/
-
-void BatChaseThink (objtype *obj)
+void T_InvisibleDude (objtype *ob)
{
- int deltax,deltay;
+ if (!random(100))
+ {
+ switch (ob->temp1++)
+ {
+ case 0:
+ ob->state = &s_invis_flash1;
+ break;
- deltax=player->tilex - obj->tilex;
- deltay=player->tiley - obj->tiley;
+ case 1:
+ ob->state = &s_invis_flash2;
+ break;
- if (deltax>0)
- deltax = 2;
- else if (deltax<0)
- deltax = 0;
- else deltax = 1;
+ case 2:
+ ob->state = &s_invis_flash3;
+ ob->temp1 = 0;
+ break;
+ }
+ ob->ticcount = ob->state->tictime;
+ }
- if (deltay>0)
- deltay = 2;
- else if (deltay<0)
- deltay = 0;
- else deltay = 1;
- obj->dir = dirtable[deltay*3+deltax];
- if (Walk(obj))
- return;
+ if (Chase (ob,true))
+ {
+ ob->state = &s_invis_attack;
+ ob->ticcount = ob->state->tictime;
+ }
- obj->dir = dirtable[3+deltax];
- if (Walk(obj))
- return;
+}
- obj->dir = dirtable[deltay*3+1];
- if (Walk(obj))
- return;
- obj->dir = nodir;
-}
+/*
+=============================================================================
-void BatRunThink (objtype *obj)
-{
- int deltax,deltay;
+ BOUNCE
- deltax=player->tilex - obj->tilex;
- deltay=player->tiley - obj->tiley;
+temp2 = set when hit player, reset when hit wall
- if (deltax>=0)
- deltax = 0;
- else
- deltax = 2;
+=============================================================================
+*/
- if (deltay>=0)
- deltay = 0;
- else
- deltay = 2;
+#define SPDBOUNCE 4096
+#define DMGBOUNCE 10
- obj->dir = dirtable[deltay*3+deltax];
- if (Walk(obj))
- return;
+void T_Bounce (objtype *ob);
+void T_Bounce_Death (objtype *ob);
- obj->dir = dirtable[3+deltax];
- if (Walk(obj))
- return;
+statetype s_bounce1 = {PSHOT1PIC, 8, &T_Bounce, &s_bounce2};
+statetype s_bounce2 = {PSHOT2PIC, 8, &T_Bounce, &s_bounce1};
- obj->dir = dirtable[deltay*3+1];
- Walk(obj);
-}
+/*
+===============
+=
+= SpawnBounce
+=
+===============
+*/
+void SpawnBounce (int tilex, int tiley, boolean towest)
+{
+ SpawnNewObj(tilex, tiley, &s_bounce1, 24*PIXRADIUS);
+ new->obclass = bounceobj;
+ new->hitpoints = EasyHitPoints(10);
+ new->flags |= of_shootable;
+ if (towest)
+ new->dir = west;
+ else
+ new->dir = north;
+}
/*
===============
=
-= T_Bat
+= T_Bounce
=
===============
*/
-void T_Bat (objtype *ob)
+void T_Bounce (objtype *ob)
{
long move;
long deltax,deltay,size;
- move = ob->speed*tics;
+ move = SPDBOUNCE*tics;
size = (long)ob->size + player->size + move;
-
- do
+ while (move)
{
deltax = ob->x - player->x;
deltay = ob->y - player->y;
if (deltax <= size && deltax >= -size
- && deltay <= size && deltay >= -size && !ob->temp1)
+ && deltay <= size && deltay >= -size && !ob->temp2)
{
- TakeDamage (4);
- ob->temp1 = 2;
+ ob->temp2 = 1;
+ TakeDamage (DMGBOUNCE);
}
if (move < ob->distance)
@@ -468,554 +369,184 @@ void T_Bat (objtype *ob)
MoveObj (ob,move);
break;
}
-
actorat[ob->tilex][ob->tiley] = 0; // pick up marker from goal
- if (ob->dir == nodir)
- ob->dir = north;
ob->x = ((long)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
ob->y = ((long)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
move -= ob->distance;
- if (ob->temp1)
+ //
+ // bounce if hit wall
+ //
+ switch (ob->dir)
{
- Walk (ob); // go straight
- if (!--ob->temp1)
+ case north:
+ if (tilemap[ob->tilex][--ob->tiley])
{
- ob->state = &s_batpast;
- ob->ticcount = ob->state->tictime;
+ ob->dir = south;
+ ob->tiley+=2;
+ ob->temp2 = 0;
+ }
+ break;
+ case east:
+ if (tilemap[++ob->tilex][ob->tiley])
+ {
+ ob->dir = west;
+ ob->tilex-=2;
+ ob->temp2 = 0;
+ }
+ break;
+ case south:
+ if (tilemap[ob->tilex][++ob->tiley])
+ {
+ ob->dir = north;
+ ob->tiley-=2;
+ ob->temp2 = 0;
+ }
+ break;
+ case west:
+ if (tilemap[--ob->tilex][ob->tiley])
+ {
+ ob->dir = east;
+ ob->tilex+=2;
+ ob->temp2 = 0;
}
- }
- else
- BatChaseThink (ob); // head towards player
-
- actorat[ob->tilex][ob->tiley] = ob; // set down a new goal marker
- } while (0); // just once
- CalcBounds (ob);
-}
-
-
-/*
-===============
-=
-= T_BatPast
-=
-===============
-*/
-
-void T_BatPast (objtype *ob)
-{
- long move;
- long deltax,deltay,size;
-
- move = ob->speed*tics;
-
- do
- {
- if (move < ob->distance)
- {
- MoveObj (ob,move);
break;
}
- actorat[ob->tilex][ob->tiley] = 0; // pick up marker from goal
- ob->x = ((long)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;
- ob->y = ((long)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
- move -= ob->distance;
-
- BatRunThink (ob);
+ ob->distance = TILEGLOBAL;
actorat[ob->tilex][ob->tiley] = ob; // set down a new goal marker
- } while (0); //(move)
+ }
CalcBounds (ob);
}
-void T_ChaseThink(objtype *obj);
-void T_AwakeThink(objtype *obj);
-
-
-
/*
=============================================================================
- GODESS
+ GRELMINAR
=============================================================================
*/
-void T_Godess (objtype *ob);
-
-
-extern statetype s_godesspause;
-
-extern statetype s_godess_statue1;
-extern statetype s_godess_statue2;
-
-extern statetype s_godess1;
-extern statetype s_godess2;
-extern statetype s_godess3;
-
-extern statetype s_godessattack1;
-extern statetype s_godessattack2;
-extern statetype s_godessattack3;
-
-extern statetype s_godessouch;
-extern statetype s_godessdie1;
-extern statetype s_godessdie2;
-extern statetype s_godessdie3;
-
-
-statetype s_godesspause = {GODESS_WALK1PIC,25,NULL,&s_godess2};
-
-statetype s_godess_statue1 = {GODESS_STATUEPIC,20,T_ChaseThink,&s_godess_statue1};
-statetype s_godess_statue2 = {GODESS_STATUEPIC,1,T_AwakeThink,&s_godess1};
+void T_Grelminar (objtype *ob);
+void T_GrelminarShoot (objtype *ob);
+void T_Grelm_DropKey(objtype *ob);
-statetype s_godess1 = {GODESS_WALK1PIC,20,T_ChaseThink,&s_godess2};
-statetype s_godess2 = {GODESS_WALK2PIC,20,T_ChaseThink,&s_godess3};
-statetype s_godess3 = {GODESS_WALK3PIC,20,T_ChaseThink,&s_godess1};
+statetype s_grelpause = {GREL1PIC,50,NULL,&s_grel2};
-statetype s_godessattack1 = {GODESS_ATTACK1PIC,10,NULL,&s_godessattack2};//20
-statetype s_godessattack2 = {GODESS_ATTACK2PIC,8,NULL,&s_godessattack3};//20
-statetype s_godessattack3 = {GODESS_ATTACK3PIC,10,T_DoDamage,&s_godesspause};//30
+statetype s_grel1 = {GREL1PIC,20,T_Grelminar,&s_grel2};
+statetype s_grel2 = {GREL2PIC,20,T_Grelminar,&s_grel1};
-statetype s_godessouch = {GODESS_OUCHPIC,10,NULL,&s_godess1};
+statetype s_grelattack3 = {GRELATTACKPIC,30,NULL,&s_grelpause};
-statetype s_godessdie1 = {GODESS_DEATH1PIC,65,NULL,&s_godessdie2};
-statetype s_godessdie2 = {GODESS_DEATH2PIC,30,NULL,&s_godessdie2};
+statetype s_grelouch = {GRELHITPIC,6,NULL,&s_grel1};
+statetype s_greldie1 = {GRELDIE1PIC,22,NULL,&s_greldie2};
+statetype s_greldie2 = {GRELDIE2PIC,22,NULL,&s_greldie3};
+statetype s_greldie3 = {GRELDIE3PIC,22,NULL,&s_greldie4};
+statetype s_greldie4 = {GRELDIE4PIC,22,NULL,&s_greldie5};
+statetype s_greldie5 = {GRELDIE5PIC,22,NULL,&s_greldie5a};
+statetype s_greldie5a = {GRELDIE5PIC,-1,T_Grelm_DropKey,&s_greldie6};
+statetype s_greldie6 = {GRELDIE6PIC,0,NULL,&s_greldie6};
+statetype s_gshot1 = {SKULL_SHOTPIC,8,T_ShootPlayer,&s_gshot1};
/*
===============
=
-= SpawnGodess
+= SpawnGrelminar
=
===============
*/
-void SpawnGodess (int tilex, int tiley)
+void SpawnGrelminar (int tilex, int tiley)
{
- objtype *ob;
- short current_zombie_delay;
- unsigned tile;
+ unsigned Grel_Hard;
+ unsigned DropKey;
- SpawnNewObj(tilex,tiley,&s_godess_statue1,PIXRADIUS*35);
- ob = new;
- zombie_mode = zm_wait_for_dark;
+ SpawnNewObj(tilex,tiley,&s_grel1,PIXRADIUS*25);
+ new->obclass = grelmobj;
+ new->speed = 2048;
+ new->flags |= of_shootable;
- tile = *(mapsegs[2]+farmapylookup[tiley+1]+tilex);
- if (tile)
- zombie_delay = (tile>>8)*30;
+ //
+ // if Grelminar is to drop a key the info-plane byte to the right
+ // should have a 1 in the highbyte, else he will not drop the key.
+ //
+ DropKey = *(mapsegs[2]+farmapylookup[tiley]+tilex+1);
+ if (DropKey)
+ new->temp1 = DropKey>>8;
else
+ new->temp1 = 0;
+
+ //
+ // The info-plane byte below Grelminar will determine how powerful
+ // Grelminar is. If nothing is there, he is the most powerful.
+ // -- affected are the hit points and the shot damage.
+ // The hit points are controlled here, the shot damage is controlled
+ // within the spawning of the shot. See ShootPlayer for more info.
+ //
+ Grel_Hard = *(mapsegs[2]+farmapylookup[tiley+1]+tilex);
+ if (Grel_Hard)
{
- current_zombie_delay = (2*60)+random(4*60);
- zombie_delay = zombie_base_delay+current_zombie_delay;
- zombie_base_delay += current_zombie_delay;
- if (zombie_base_delay > 8*60)
- zombie_base_delay = 0;
+ new->temp2 = Grel_Hard>>8;
+ new->hitpoints = EasyHitPoints((new->temp2 * 10));
+ }
+ else
+ {
+ new->hitpoints = EasyHitPoints(100);
+ new->temp2 = 10;
}
-
- new->obclass = realsolidobj;//godessobj;
- new->speed = 3000;
- new->flags |= of_shootable;
- new->flags &= ~of_tree;
-// new->hitpoints = EasyHitPoints(10);
}
-
-
-/*
-=============================================================================
-
- ANT
-
-=============================================================================
-*/
-
-void T_Ant(objtype *ob);
-
-statetype s_ant_wait = {ANT_EGG1PIC,10,T_ChaseThink,&s_ant_wait};
-
-statetype s_ant_egg = {ANT_EGG2PIC,45,T_AwakeThink,&s_ant_walk1};
-
-statetype s_ant_walk1 = {ANT_WALK1PIC,20,T_ChaseThink,&s_ant_walk2};
-statetype s_ant_walk2 = {ANT_WALK2PIC,20,T_ChaseThink,&s_ant_walk3};
-statetype s_ant_walk3 = {ANT_WALK3PIC,20,T_ChaseThink,&s_ant_walk1};
-
-statetype s_ant_attack1 = {ANT_ATTACKPIC,20,NULL,&s_ant_pause};
-
-statetype s_ant_pause = {ANT_WALK2PIC,15,T_DoDamage,&s_ant_walk1};
-
-statetype s_ant_ouch = {ANT_WALK1PIC,15,NULL,&s_ant_walk1};
-
-statetype s_ant_die1 = {ANT_DEATH1PIC,40,NULL,&s_ant_die2};
-statetype s_ant_die2 = {ANT_DEATH2PIC,10,NULL,&s_ant_die3};
-statetype s_ant_die3 = {ANT_DEATH3PIC,10,NULL,&s_ant_die2};
-
-#define ant_mode ob->temp1
-#define ant_delay ob->temp2
-
/*
===============
=
-= SpawnAnt
+= T_Grelminar
=
===============
*/
-void SpawnAnt(int tilex, int tiley)
-{
- objtype *ob;
- unsigned tile;
- SpawnNewObj(tilex,tiley,&s_ant_wait,PIXRADIUS*35);
- ob = new;
-
- tile = *(mapsegs[2]+farmapylookup[tiley+1]+tilex);
- if (tile)
- ant_delay = (tile>>8)*30;
- else
- ant_delay = 2*60+random(5*60);
-
- ant_mode = zm_wait_for_dark;
-
- new->obclass = antobj;
- new->speed = 1900;
- new->flags &= ~of_shootable;
- new->hitpoints = EasyHitPoints(15);
-}
-
-
-
-/*
-=============================================================================
-
- ZOMBIE
-
-=============================================================================
-*/
-
-extern statetype s_zombie_rise1;
-extern statetype s_zombie_rise2;
-extern statetype s_zombie_rise3;
-extern statetype s_zombie_rise4;
-
-extern statetype s_zombie_alive1;
-extern statetype s_zombie_alive2;
-extern statetype s_zombie_alive3;
-
-//extern statetype s_zombie_attack1;
-
-extern statetype s_zombie_death1;
-extern statetype s_zombie_death2;
-extern statetype s_zombie_death3;
-
-void T_Zombie (objtype *ob);
-void T_ZombieRisen(objtype *obj);
-
-statetype s_zombie_risen = {ZOMB_WALK3PIC,1,T_AwakeThink,&s_zombie_alive1};
-
-statetype s_zombie_pause = {ZOMB_WALK1PIC,20,NULL,&s_zombie_alive1};
-
-statetype s_zombie_inground = {0,13,T_ChaseThink,&s_zombie_inground};
-
-statetype s_zombie_rise1 = {ZOMB_APPEAR1PIC,24,NULL,&s_zombie_rise2};
-statetype s_zombie_rise2 = {ZOMB_APPEAR2PIC,24,NULL,&s_zombie_rise3};
-statetype s_zombie_rise3 = {ZOMB_APPEAR3PIC,24,NULL,&s_zombie_rise4};
-statetype s_zombie_rise4 = {ZOMB_APPEAR4PIC,24,NULL,&s_zombie_risen};
-
-statetype s_zombie_alive1 = {ZOMB_WALK1PIC,13,T_ChaseThink,&s_zombie_alive2};
-statetype s_zombie_alive2 = {ZOMB_WALK2PIC,13,T_ChaseThink,&s_zombie_alive3};
-statetype s_zombie_alive3 = {ZOMB_WALK3PIC,13,T_ChaseThink,&s_zombie_alive1};
-
-statetype s_zombie_death1 = {ZOMB_DIE1PIC,16,NULL,&s_zombie_death2};
-statetype s_zombie_death2 = {ZOMB_DIE2PIC,16,NULL,&s_zombie_death3};
-statetype s_zombie_death3 = {ZOMB_DIE3PIC,16,NULL,&s_zombie_death3};
-
-statetype s_zombie_attack = {ZOMB_ATTACKPIC,15,T_DoDamage,&s_zombie_pause};
-//statetype s_zombie_attack1 = {ZOMB_ATTACKPIC,15,NULL,&s_zombie_pause};
-
-statetype s_zombie_ouch = {ZOMB_OUCHPIC,15,NULL,&s_zombie_alive1};
-
-
-//--------------------------------------------------------------------------
-// SpawnZombie()
-//--------------------------------------------------------------------------
-void SpawnZombie (int tilex, int tiley)
-{
- objtype *ob;
- short current_zombie_delay;
- unsigned tile;
-
- SpawnNewObj(tilex,tiley,&s_zombie_inground,35*PIXRADIUS);
- ob = new;
- zombie_mode = zm_wait_for_dark;
-
- tile = *(mapsegs[2]+farmapylookup[tiley+1]+tilex);
- if (tile)
- zombie_delay = (tile>>8)*30;
- else
- {
- current_zombie_delay = (2*60)+random(4*60);
- zombie_delay = zombie_base_delay+current_zombie_delay;
- zombie_base_delay += current_zombie_delay;
- if (zombie_base_delay > 8*60)
- zombie_base_delay = 0;
- }
-
- new->speed = 2500;
- new->obclass = zombieobj;
- new->hitpoints = EasyHitPoints(8);
- new->active = yes;
- new->flags &= ~of_shootable;
-}
-
-
-/*
-=============================================================================
-
- TREE
-
-=============================================================================
-*/
-
-extern statetype s_tree_pause;
-extern statetype s_tree_idle;
-extern statetype s_tree_awakening1;
-extern statetype s_tree_awakening2;
-extern statetype s_tree_walk1;
-extern statetype s_tree_walk2;
-extern statetype s_tree_walk3;
-extern statetype s_tree_death1;
-extern statetype s_tree_death2;
-extern statetype s_tree_death3;
-extern statetype s_tree_death4;
-extern statetype s_tree_death5;
-extern statetype s_tree_attack1;
-extern statetype s_tree_attack2;
-extern statetype s_tree_attack3;
-extern statetype s_tree_ouch;
-
-void T_Tree (objtype *ob);
-void T_DeathThink(objtype *ob);
-
-statetype s_tree_pause = {TREE_WALK1PIC,25,NULL,&s_tree_walk2};
-
-statetype s_tree_idle = {TREE_IDLEPIC,13,T_ChaseThink,&s_tree_idle};
-
-statetype s_tree_awakening1 = {TREE_AWAKENINGPIC,1,T_AwakeThink,&s_tree_awakening2};
-statetype s_tree_awakening2 = {TREE_AWAKENINGPIC,50,NULL,&s_tree_walk1};
-
-statetype s_tree_walk1 = {TREE_WALK1PIC,13,T_ChaseThink,&s_tree_walk2};
-statetype s_tree_walk2 = {TREE_WALK2PIC,13,T_ChaseThink,&s_tree_walk1};
-statetype s_tree_death1 = {TREE_DEATH1PIC,45,NULL,&s_tree_death2};
-statetype s_tree_death2 = {TREE_DEATH2PIC,25,NULL,&s_tree_death3};
-statetype s_tree_death3 = {TREE_DEATH1PIC,15,T_DeathThink,&s_tree_death4};
-statetype s_tree_death4 = {TREE_DEATH2PIC,15,T_DeathThink,&s_tree_death5};
-statetype s_tree_death5 = {TREE_DEATH3PIC,15,T_DeathThink,&s_tree_death3};
-
-statetype s_tree_attack1 = {TREE_ATTACK1PIC,15,T_DoDamage,&s_tree_attack2};
-statetype s_tree_attack2 = {TREE_ATTACK2PIC,15,T_DoDamage,&s_tree_attack3};
-statetype s_tree_attack3 = {TREE_ATTACK3PIC,15,T_DoDamage,&s_tree_pause};
-
-statetype s_tree_ouch = {TREE_AWAKENINGPIC,15,NULL,&s_tree_walk1};
-
-
-#define zombie_mode ob->temp1
-#define zombie_delay ob->temp2
-
-
-//--------------------------------------------------------------------------
-// SpawnTree()
-//--------------------------------------------------------------------------
-void SpawnTree(int tilex, int tiley)
-{
- objtype *ob;
- short current_zombie_delay;
- unsigned tile;
-
- SpawnNewObj(tilex,tiley,&s_tree_idle,35*PIXRADIUS);
- ob = new;
- zombie_mode = zm_wait_for_dark;
-
- tile = *(mapsegs[2]+farmapylookup[tiley+1]+tilex);
- if (tile)
- zombie_delay = (tile>>8)*30;
- else
- {
- current_zombie_delay = (2*60)+random(4*60);
- zombie_delay = zombie_base_delay+current_zombie_delay;
- zombie_base_delay += current_zombie_delay;
- if (zombie_base_delay > 8*60)
- zombie_base_delay = 0;
- }
-
- new->speed = 2500;
- new->obclass = realsolidobj;
-// new->hitpoints = EasyHitPoints(12);
- new->active = yes;
- new->flags |= of_shootable;
- new->flags |= of_tree;
-}
-
-//--------------------------------------------------------------------------
-// T_DeathThink()
-//--------------------------------------------------------------------------
-void T_DeathThink(objtype *ob)
+void T_Grelminar (objtype *ob)
{
- char num;
+ Chase (ob,false);
- if ((ob->ticcount - realtics) <= 0)
- {
- num = random(2);
- switch (ob->temp1)
+ if (!random(10))
+ if (ShootPlayer(ob,gshotobj,ob->temp2,&s_gshot1))
{
- case 3:
- if (num)
- ob->state = &s_tree_death4;
- else
- ob->state = &s_tree_death5;
- ob->temp1++;
- break;
-
- case 4:
- if (num)
- ob->state = &s_tree_death3;
- else
- ob->state = &s_tree_death5;
- ob->temp1++;
- break;
-
- case 5:
- if (num)
- ob->state = &s_tree_death3;
- else
- ob->state = &s_tree_death4;
- ob->temp1 = 3;
- break;
+ ob->state = &s_grelattack3;
+ ob->ticcount = ob->state->tictime;
}
- ob->ticcount = ob->state->tictime;
- }
-
-
-
if (CheckHandAttack(ob))
- TakeDamage (1);
+ TakeDamage (ob->temp2*3);
+
}
-//////////////////////////////////////////////////////////////////////////
+//=================================
//
-// GENERAL THINK ROUTINES USED BY THE ZOMBIE, TREE, ANT, AND GODESS
-// ----trying to cut down on the code size----
+// T_Grelm_DropKey
//
-//////////////////////////////////////////////////////////////////////////
-
-
-//--------------------------------------------------------------------------
-// T_ChaseThink()
-//--------------------------------------------------------------------------
-void T_ChaseThink(objtype *ob)
+//=================================
+void T_Grelm_DropKey(objtype *ob)
{
- switch (zombie_mode)
+ if (!(ob->temp1))
{
- case zm_wait_for_dark:
-#if 0
- if (gamestate.mapon == 0)
- {
- if (BGFLAGS & BGF_NIGHT)
- zombie_mode = zm_wait_to_rise;
- }
- else
-#endif
- zombie_mode = zm_wait_to_rise;
- break;
-
- case zm_wait_to_rise:
- if (zombie_delay < 0)
- {
- if ((ob->tilex == player->tilex) && (ob->tiley == player->tiley))
- break;
- if (CheckHandAttack(ob))
- break;
-
- ob->active = always;
- switch (ob->obclass)
- {
- case zombieobj:
- ob->state = &s_zombie_rise1;
- break;
-
- case antobj:
- ob->state = &s_ant_egg;
- break;
-
- case realsolidobj: //tree and godess
- if (ob->flags & of_tree)
- ob->state = &s_tree_awakening1;
- else
- ob->state = &s_godess_statue2;
- break;
- }
- ob->ticcount = ob->state->tictime;
- zombie_mode = zm_active;
- }
- else
- zombie_delay -= tics;
-
- break;
-
- case zm_active:
- if (Chase (ob,true) || (random(1000)<RANDOM_ATTACK))
- {
- switch (ob->obclass)
- {
- case zombieobj:
- ob->state = &s_zombie_attack;
- break;
-
- case antobj:
- ob->state = &s_ant_attack1;
- break;
-
- case treeobj:
- ob->state = &s_tree_attack1;
- break;
-
- case godessobj:
- ob->state = &s_godessattack1;
- break;
- }
- ob->ticcount = ob->state->tictime;
- return;
- }
- break;
+ ob->state = NULL;
+ return;
}
-}
-//--------------------------------------------------------------------------
-// T_AwakeThink()
-//--------------------------------------------------------------------------
-void T_AwakeThink(objtype *obj)
-{
- if (obj->obclass == realsolidobj)
- {
- if (obj->flags & of_tree)
- obj->obclass = treeobj;
- else
- obj->obclass = godessobj;
- obj->hitpoints = EasyHitPoints(12);
- }
- else
- obj->flags |= of_shootable;
+ SpawnBonus(ob->tilex,ob->tiley,B_RKEY);
+ SD_PlaySound(GRELM_DEADSND);
+ ob->temp1 = false;
}
-
-
//--------------------------------------------------------------------------
// ShootPlayer()
//--------------------------------------------------------------------------
@@ -1026,7 +557,7 @@ boolean ShootPlayer(objtype *ob, short obclass, short speed, statetype *state)
if (angle == -1)
return(false);
- DSpawnNewObjFrac (ob->x,ob->y,state,PIXRADIUS*35);
+ DSpawnNewObjFrac (ob->x,ob->y,state,PIXRADIUS*14);
new->obclass = obclass;
new->active = always;
new->angle = angle;
@@ -1077,7 +608,7 @@ void T_ShootPlayer(objtype *ob)
//
if (tilemap[ob->tilex][ob->tiley])
{
- SD_PlaySound (SHOOTWALLSND);
+// SD_PlaySound (SHOOTWALLSND);
ob->state = &s_pshot_exp1;
ob->ticcount = s_pshot_exp1.tictime;
return;
@@ -1094,25 +625,50 @@ void T_ShootPlayer(objtype *ob)
{
switch (ob->obclass)
{
- case eshotobj:
- TakeDamage (ESHOTDAMAGE);
+ case wshotobj: // Wizard's shot
+ TakeDamage (7);
break;
- case mshotobj:
- TakeDamage (MSHOTDAMAGE);
+ case hshotobj: // Egyptian Head's shot
+ TakeDamage (5);
break;
- case gshotobj:
- TakeDamage (ob->temp1); // the damage of Grelminar's shot -
- break; // see Grelminar's spawning
+ case bshotobj: // Blob's shot
+ TakeDamage (5);
+ break;
+
+ case rshotobj: // Ray's shot
+ TakeDamage (5);
+ break;
- case sshotobj:
- TakeDamage(SSHOTDAMAGE);
+ case rbshotobj: // RamBone's shot
+ TakeDamage(7);
break;
- case dshotobj:
+ case fmshotobj: // Future Mage's shot
TakeDamage(7);
break;
+
+ case rtshotobj: // RoboTank's shot
+ TakeDamage(15);
+ break;
+
+ case syshotobj: // Stompy's shot
+ TakeDamage(7);
+ break;
+
+ case bgshotobj: // Bug's shot
+ TakeDamage(7);
+ break;
+
+ case eshotobj: // Eye's shot
+ TakeDamage(5);
+ break;
+
+ case gshotobj:
+ TakeDamage (ob->temp1); // the damage of Grelminar's shot -
+ break; // see Grelminar's spawning
+
}
ob->state = NULL;
return;
@@ -1135,7 +691,7 @@ void T_ShootPlayer(objtype *ob)
// check for collision with player
//
for (check = player->next; check; check=check->next)
- if ((ob->flags & of_shootable) && ob->obclass != mageobj
+ if ((ob->flags & of_shootable)
&& ob->xl <= check->xh
&& ob->xh >= check->xl
&& ob->yl <= check->yh
@@ -1143,12 +699,45 @@ void T_ShootPlayer(objtype *ob)
{
switch (ob->obclass)
{
- case eshotobj:
- ShootActor (check,ESHOTDAMAGE);
+// APOCALYPSE
+ case wshotobj: // Wizard's shot
+ ShootActor (check, 3);
break;
- case mshotobj:
- ShootActor (check,MSHOTDAMAGE);
+ case hshotobj: // Egyptian Head's shot
+ ShootActor (check, 5);
+ break;
+
+ case bshotobj: // Blob's shot
+ ShootActor (check, 2);
+ break;
+
+ case rshotobj: // Ray's shot
+ ShootActor (check, 5);
+ break;
+
+ case rbshotobj: // RamBone's shot
+ ShootActor (check, 5);
+ break;
+
+ case fmshotobj: // Future Mage's shot
+ ShootActor (check, 5);
+ break;
+
+ case rtshotobj: // RoboTank's shot
+ ShootActor (check, 15);
+ break;
+
+ case syshotobj: // Stompy's shot
+ ShootActor (check, 5);
+ break;
+
+ case bgshotobj: // Bug's shot
+ ShootActor (check, 3);
+ break;
+
+ case eshotobj: // Eye's shot
+ ShootActor (check, 2);
break;
case gshotobj:
@@ -1159,13 +748,6 @@ void T_ShootPlayer(objtype *ob)
ShootActor (check,25);
break;
- case sshotobj:
- ShootActor(check, SSHOTDAMAGE);
- break;
-
- case dshotobj:
- ShootActor(check, 7);
- break;
}
ob->state = &s_pshot_exp1;
ob->ticcount = s_pshot_exp1.tictime;
@@ -1216,3 +798,5 @@ int AngleNearPlayer(objtype *ob)
return(angle);
}
+
+
diff --git a/C6_ACT4.C b/C6_ACT4.C
index 676e0b7..ced1178 100644
--- a/C6_ACT4.C
+++ b/C6_ACT4.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -21,6 +21,7 @@
#include "DEF.H"
#pragma hdrstop
+
/*
=============================================================================
@@ -30,102 +31,6 @@
*/
-
-//-------------------------------------------------------------------------
-//
-// ARCH OBJECTS
-//
-//-------------------------------------------------------------------------
-
-
-
-//-------------------------------------------------------------------------
-// ARCH
-//-------------------------------------------------------------------------
-
-void SpawnArch(int tilex, int tiley, int num);
-
-extern statetype s_arch_1;
-extern statetype s_arch_2;
-extern statetype s_arch_3;
-extern statetype s_arch_4;
-extern statetype s_arch_5;
-extern statetype s_arch_6;
-extern statetype s_arch_7;
-extern statetype s_arch_8;
-extern statetype s_arch_9;
-extern statetype s_arch_10;
-extern statetype s_arch_11;
-extern statetype s_arch_12;
-extern statetype s_arch_13;
-
-statetype s_arch_1 = {ARCH1PIC, 20, NULL, &s_arch_1};
-statetype s_arch_2 = {ARCH2PIC, 20, NULL, &s_arch_2};
-statetype s_arch_3 = {ARCH3PIC, 20, NULL, &s_arch_3};
-statetype s_arch_4 = {ARCH4PIC, 20, NULL, &s_arch_4};
-statetype s_arch_5 = {ARCH5PIC, 20, NULL, &s_arch_5};
-statetype s_arch_6 = {ARCH6PIC, 20, NULL, &s_arch_6};
-statetype s_arch_7 = {ARCH7PIC, 20, NULL, &s_arch_7};
-statetype s_arch_8 = {ARCH8PIC, 20, NULL, &s_arch_8};
-statetype s_arch_9 = {ARCH9PIC, 20, NULL, &s_arch_9};
-statetype s_arch_10 = {ARCH10PIC, 20, NULL, &s_arch_10};
-statetype s_arch_11 = {ARCH11PIC, 20, NULL, &s_arch_11};
-statetype s_arch_12 = {ARCH12PIC, 20, NULL, &s_arch_12};
-statetype s_arch_13 = {ARCH13PIC, 20, NULL, &s_arch_13};
-
-void SpawnArch (int tilex, int tiley, int num)
-{
- statetype *objstate;
-
-
- switch (num)
- {
- case 1:
- objstate = &s_arch_1;
- break;
- case 2:
- objstate = &s_arch_2;
- break;
- case 3:
- objstate = &s_arch_3;
- break;
- case 4:
- objstate = &s_arch_4;
- break;
- case 5:
- objstate = &s_arch_5;
- break;
- case 6:
- objstate = &s_arch_6;
- break;
- case 7:
- objstate = &s_arch_7;
- break;
- case 8:
- objstate = &s_arch_8;
- break;
- case 9:
- objstate = &s_arch_9;
- break;
- case 10:
- objstate = &s_arch_10;
- break;
- case 11:
- objstate = &s_arch_11;
- break;
- case 12:
- objstate = &s_arch_12;
- break;
- case 13:
- objstate = &s_arch_13;
- break;
- }
- ASpawnNewObj(tilex,tiley,objstate,PIXRADIUS*35);
- new->obclass = solidobj;
- new->flags &= ~of_shootable;
-}
-
-
//-------------------------------------------------------------------------
//
// MISC OBJECTS
@@ -140,23 +45,16 @@ void SpawnArch (int tilex, int tiley, int num)
void SpawnMiscObjects(int tilex, int tiley, int num);
-extern statetype s_column;
-extern statetype s_sulphur_gas_1;
-extern statetype s_sulphur_gas_2;
-extern statetype s_sulphur_gas_3;
-extern statetype s_fire_pot_1;
-extern statetype s_fire_pot_2;
-extern statetype s_fountain;
-
-statetype s_column = {COLUMNPIC, 20, NULL, &s_column};
-statetype s_sulphur_gas_1 = {SULPHUR_GAS_1PIC, 20, NULL, &s_sulphur_gas_2};
-statetype s_sulphur_gas_2 = {SULPHUR_GAS_2PIC, 20, NULL, &s_sulphur_gas_3};
-statetype s_sulphur_gas_3 = {SULPHUR_GAS_3PIC, 20, NULL, &s_sulphur_gas_1};
-statetype s_fire_pot_1 = {FIRE_POT_1PIC, 20, NULL, &s_fire_pot_2};
-statetype s_fire_pot_2 = {FIRE_POT_2PIC, 20, NULL, &s_fire_pot_1};
-statetype s_fountain = {WFOUNTAINPIC, 20, NULL, &s_fountain};
-
-
+statetype s_column1 = {COLUMN1PIC, 20, NULL, &s_column1};
+statetype s_column2 = {COLUMN2PIC, 20, NULL, &s_column2};
+statetype s_column3 = {COLUMN3PIC, 20, NULL, &s_column3};
+statetype s_column4 = {COLUMN4PIC, 20, NULL, &s_column4};
+statetype s_column5 = {COLUMN5PIC, 20, NULL, &s_column5};
+statetype s_ffire_pot = {FFIRE_POTPIC, 20, NULL, &s_ffire_pot};
+statetype s_ofire_pot1 = {OFIRE_POT1PIC, 20, NULL, &s_ofire_pot2};
+statetype s_ofire_pot2 = {OFIRE_POT2PIC, 20, NULL, &s_ofire_pot1};
+statetype s_tomb1 = {TOMB1PIC, 20, NULL, &s_tomb1};
+statetype s_tomb2 = {TOMB2PIC, 20, NULL, &s_tomb2};
void SpawnMiscObjects(int tilex, int tiley, int num)
{
statetype *objstate;
@@ -164,108 +62,47 @@ void SpawnMiscObjects(int tilex, int tiley, int num)
switch (num)
{
case 1:
- objstate = &s_column;
+ objstate = &s_column1;
break;
case 2:
- objstate = &s_sulphur_gas_1;
+ objstate = &s_column2;
break;
case 3:
- objstate = &s_fire_pot_1;
+ objstate = &s_column3;
break;
case 4:
- objstate = &s_fountain;
+ objstate = &s_ffire_pot;
break;
- }
-
- SpawnNewObj(tilex,tiley,objstate,PIXRADIUS*35);
- new->obclass = realsolidobj;
- if (num == 2)
- new->flags &= ~of_shootable;
- else
- new->flags |= of_shootable;
-}
-
-
-
-
-
-
-#if 0
-void SpawnColumn(int tilex, int tiley);
-
-extern statetype s_column;
-statetype s_column = {COLUMNPIC, 20, NULL, &s_column};
-
-void SpawnColumn(int tilex, int tiley)
-{
- SpawnNewObj(tilex,tiley,&s_column,PIXRADIUS*35);
- new->obclass = realsolidobj;
- new->flags |= of_shootable;
-}
-
-
-//-------------------------------------------------------------------------
-// SULPHUR GAS
-//-------------------------------------------------------------------------
-
-void SpawnSulphurGas(int tilex, int tiley);
-
-extern statetype s_sulphur_gas_1;
-extern statetype s_sulphur_gas_2;
-extern statetype s_sulphur_gas_3;
-
-statetype s_sulphur_gas_1 = {SULPHUR_GAS_1PIC, 20, NULL, &s_sulphur_gas_2};
-statetype s_sulphur_gas_2 = {SULPHUR_GAS_2PIC, 20, NULL, &s_sulphur_gas_3};
-statetype s_sulphur_gas_3 = {SULPHUR_GAS_3PIC, 20, NULL, &s_sulphur_gas_1};
-
-void SpawnSulphurGas(int tilex, int tiley)
-{
- SpawnNewObj(tilex,tiley,&s_sulphur_gas_1,PIXRADIUS*35);
- new->obclass = realsolidobj;
- new->flags &= ~of_shootable;
-}
-
-
-//-------------------------------------------------------------------------
-// FIRE POT
-//-------------------------------------------------------------------------
-
-void SpawnFirePot(int tilex, int tiley);
-
-extern statetype s_fire_pot_1;
-extern statetype s_fire_pot_2;
-statetype s_fire_pot_1 = {FIRE_POT_1PIC, 20, NULL, &s_fire_pot_2};
-statetype s_fire_pot_2 = {FIRE_POT_2PIC, 20, NULL, &s_fire_pot_1};
-
-void SpawnFirePot(int tilex, int tiley)
-{
- SpawnNewObj(tilex,tiley,&s_fire_pot_1,PIXRADIUS*35);
- new->obclass = realsolidobj;
- new->flags |= of_shootable;
+ case 5:
+ objstate = &s_column4;
+ break;
-}
+ case 6:
+ objstate = &s_ofire_pot1;
+ break;
-//------------------------------------------------------------------------
-// FOUNTAIN
-//------------------------------------------------------------------------
+ case 7:
+ objstate = &s_tomb1;
+ break;
-void SpawnFountain(int tilex, int tiley);
+ case 8:
+ objstate = &s_tomb2;
+ break;
-extern statetype s_fountain;
-statetype s_fountain = {WFOUNTAINPIC, 20, NULL, &s_fountain};
+ case 9:
+ objstate = &s_column5;
+ break;
+ }
-void SpawnFountain(int tilex, int tiley)
-{
- SpawnNewObj(tilex,tiley,&s_fountain,PIXRADIUS*35);
+ SpawnNewObj(tilex, tiley, objstate, PIXRADIUS*10);
new->obclass = realsolidobj;
new->flags |= of_shootable;
}
-#endif
//------------------------------------------------------------------------
@@ -276,12 +113,6 @@ void SpawnForceField(int tilex, int tiley);
void T_ForceField(objtype *ob);
void T_ForceFieldRemove(objtype *ob);
-extern statetype s_force_field_1;
-extern statetype s_force_field_2;
-extern statetype s_force_field_3;
-extern statetype s_force_field_4;
-extern statetype s_force_field_die1;
-
statetype s_force_field_1 = {FORCE_FIELD_1PIC, 10, T_ForceField, &s_force_field_2};
statetype s_force_field_2 = {FORCE_FIELD_2PIC, 10, T_ForceField, &s_force_field_3};
statetype s_force_field_3 = {FORCE_FIELD_3PIC, 10, T_ForceField, &s_force_field_4};
@@ -295,8 +126,9 @@ void SpawnForceField(int tilex, int tiley)
SpawnNewObj(tilex,tiley,&s_force_field_1,PIXRADIUS*35);
new->obclass = solidobj;
new->hitpoints = EasyHitPoints(20);
+ new->temp1 = 0;
new->flags |= of_forcefield; //sets bit 7 :: makes it nonsolid, but also detectable
- // without adding another object type!
+ // without adding another object type!
new->flags |= of_shootable;
}
@@ -311,8 +143,15 @@ void T_ForceField(objtype *ob)
if (deltax <= size && deltax >= -size
&& deltay <= size && deltay >= -size)
- TakeDamage (20);
-
+ if (!new->temp1)
+ {
+ TakeDamage (94);
+ new->temp1 = 1;
+ return;
+ }
+ else
+ return;
+ new->temp1 = 0;
}
void T_ForceFieldRemove(objtype *ob)
@@ -321,43 +160,50 @@ void T_ForceFieldRemove(objtype *ob)
}
-//------------------------------------------------------------------------
-// SKELETON HANGING FROM CEILING
-//------------------------------------------------------------------------
-void SpawnSkeletonHanging(int tilex, int tiley);
-void T_SkelHangThink(objtype *ob);
-extern statetype s_skeleton_hanging;
-statetype s_skeleton_hanging = {SKEL_HANGPIC, 20, T_SkelHangThink, &s_skeleton_hanging};
+//-------------------------------------------------------------------------
+//
+// INVISIBLE WALL CONTROLLER
+//
+//-------------------------------------------------------------------------
-void SpawnSkeletonHanging(int tilex, int tiley)
-{
- unsigned tile;
+void SpawnInvisWallCntroller(int x, int y);
+void T_InvisWall(objtype *ob);
- SpawnNewObj(tilex,tiley,&s_skeleton_hanging,PIXRADIUS*35);
- new->obclass = solidobj;
+extern statetype s_invis_wall_control;
- tile = *(mapsegs[2]+farmapylookup[tiley+1]+tilex);
- if (tile)
- new->temp1 = (tile>>8)*30;
- else
- new->temp1 = (3*60)+random(4*60);
+statetype s_invis_wall_control = {0, 10, T_InvisWall, &s_invis_wall_control};
- new->flags |= of_shootable;
+void SpawnInvisWallCntroller(int tilex, int tiley)
+{
+ SpawnNewObj(tilex,tiley,&s_invis_wall_control,PIXRADIUS*35);
+ new->obclass = solidobj;
+ new->flags &= ~of_shootable;
+ new->temp1 = tilemap[tilex][tiley]; // Number for the wall tile here
+ // Used for replacing the wall tile
}
-void T_SkelHangThink(objtype *ob)
+void T_InvisWall(objtype *ob)
{
- ob->temp1 -= realtics;
- if (ob->temp1 <= 0)
+ long move,deltax,deltay,size;
+
+ size = (long)ob->size + player->size;
+
+ deltax = ob->x - player->x;
+ deltay = ob->y - player->y;
+
+ if ((deltax <= size && deltax >= -size
+ && deltay <= size && deltay >= -size) ||
+ (ob->tilex == player->tilex) && (ob->tiley == player->tiley))
+ {
+ // Get rid of the wall tile if you are on it
+ tilemap[ob->tilex][ob->tiley] = 0;
+ }
+ else
{
- ob->state = &s_skel_1;
- ob->ticcount = ob->state->tictime;
- ob->obclass = skeletonobj;
- ob->speed = 2036;
- ob->flags |= of_shootable;
- ob->hitpoints = EasyHitPoints(12);
+ // Replace wall tile
+ tilemap[ob->tilex][ob->tiley] = ob->temp1;
}
}
diff --git a/C6_ASM.ASM b/C6_ASM.ASM
index a4390b2..004c20a 100644
--- a/C6_ASM.ASM
+++ b/C6_ASM.ASM
@@ -1,4 +1,4 @@
-; Catacomb Armageddon Source Code
+; Catacomb Apocalypse Source Code
; Copyright (C) 1993-2014 Flat Rock Software
;
; This program is free software; you can redistribute it and/or modify
diff --git a/C6_DEBUG.C b/C6_DEBUG.C
index d8e2b1a..f3ce665 100644
--- a/C6_DEBUG.C
+++ b/C6_DEBUG.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -54,7 +54,7 @@
*/
short colordelay=0;
-boolean autofire=false;
+//boolean autofire=false;
int maporgx;
int maporgy;
enum {mapview,tilemapview,actoratview,visview,mapseg2,lastview} viewtype;
@@ -277,10 +277,10 @@ int DebugKeys (void)
IN_Ack ();
}
-
+#endif
if (Keyboard[sc_Q]) // Q = Insta-Quit!
Quit("Insta-Quit!");
-
+#if 0
if (Keyboard[sc_Z]) // Z = freeze Time
{
if (FreezeTime)
@@ -524,7 +524,7 @@ int DebugKeys (void)
{
CenterWindow(26,3);
PrintY+=6;
- US_Print(" Warp to which level(0-16):");
+ US_Print(" Warp to which level(0-17):");
VW_UpdateScreen();
esc = !US_LineInput (px,py,str,NULL,true,2,0);
if (!esc)
diff --git a/C6_DRAW.C b/C6_DRAW.C
index bab5ea3..9d261a0 100644
--- a/C6_DRAW.C
+++ b/C6_DRAW.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -444,209 +444,222 @@ char wall_anim_pos[NUMFLOORS];
//
int far walllight1[NUMFLOORS] = {0,
- CRYSTAL_LIGHT_1PIC,
- CRYSTAL_LIGHT_2PIC,
- CRYSTAL_LIGHT_3PIC,
- CRYSTAL_LIGHT_4PIC, //4
+ 0,//CRYSTAL1LIGHTPIC,
+ 0,//EGYPT1LIGHTPIC,
+ EGYPT2LIGHTPIC,
+ EGYPT3LIGHTPIC,
- FIRE_WALL_1PIC,
- FIRE_WALL_2PIC,
- FIRE_WALL_3PIC,
- FIRE_WALL_4PIC, //8
+ FIREWALL1PIC,
+ FIREWALL2PIC,
+ FIREWALL3PIC,
+ FIREWALL4PIC,
- BRN_STONE_GATEPIC,
- BRN_STONE_WALL_1PIC,
- KUDZU_WEAK_LIGHTPIC,
- KUDZU_LIGHT_WALLPIC,
- HEDGE_WALLPIC,
- HEDGE_EYESPIC, //14
- W_GEN_DOOR1PIC, //15
- BRN_WINDOW_LIGHTPIC,
+ NEMESISPIC,
- ALTAR_LEFTPIC,
- ALTAR_RIGHTPIC,
- GRAY_LIGHT_WALLPIC,
- GRAY_LIGHT_SIGNPIC, //20
+ ALTARLEFTPIC,
+ ALTARRIGHTPIC,
- MANICLE_LIGHT_WALLPIC,
- MANICLE_LIGHT_BLOODYPIC,
+ TEMPLEWALLLIGHTPIC,
- LIGHT_CURTAIN_WINDOWPIC,
- LIGHT_CURTAIN_WALLPIC,
- BRN_LIGHT_SIGNPIC, //25
+ TORCHWALL1PIC,
+ TORCHWALL2PIC,
- LIGHT_STONE_WALLPIC,
+ BRNBRKLIGHTPIC,
+ BRNBRKEMLIGHTPIC,
- W_GEN_DOOR2PIC, //27
+ IRONGATEPIC,
- TROLL_LIGHT_STONEPIC,
+ BRNFLGLIGHTPIC,
+ BRNFLGWINDOWLIGHTPIC,
+ BRNFLGVINELIGHTPIC,
+ BRNFLGDMGLIGHTPIC,
- BRN_FLAGSTONE_LIGHT_2PIC,
+ SPACEDMG1LIGHTPIC,
+ SPACEDMG2LIGHTPIC,
- W_CRYSTAL_DOORPIC,
+ SPACE1LIGHTPIC,
+ SPACE2LIGHTPIC,
+ SPACE3LIGHTPIC,
+ SPACE4LIGHTPIC,
- DMG_BRN_FSTN_LTPIC,
+ SPACE5LIGHTPIC,
+ SPACE6LIGHTPIC,
+ SPACE7LIGHTPIC,
+ SPACE8LIGHTPIC,
- RUST_METAL_LIGHTPIC,
- GRAY_METAL_LIGHTPIC, //33
+ 0,//SPACE9LIGHTPIC,
+ 0,//SPACEDMG9LIGHTPIC,
+ SPACE10LIGHTPIC,
+ RUSTDOORLIGHTPIC,
- WEAK_STONE_LIGHTPIC,
+ SPACE11LIGHTPIC,
+ SPACE12LIGHTPIC,
+ SPACE13LIGHTPIC,
+ SPACE14LIGHTPIC,
- DMG_FIN_FSTN_LTPIC,
+ SPACEDMG5LIGHTPIC,
+ SPACEDMG6LIGHTPIC,
- WEAK_GRAY_RFGSTN_LIGHTPIC,
- 0,
-
- WEAK_CRYSTAL_LIGHTPIC,
-
- RED_MUD_LIGHTPIC,
-
- STEEL_DOOR1PIC, //40
-
- RED_MUD_WEAK_LIGHTPIC,
+ TAP1PIC,
+ TAP2PIC,
+ ENDPIC,
+ 0,//SIRONLIGHTPIC,
- STEEL_DOOR2PIC, //42
+ SPCDOOR1LIGHTPIC,
+ SPCDOOR2LIGHTPIC,
+ SPCDOOR3LIGHTPIC,
+ SPCDOOR4LIGHTPIC,
- HORN_DOORPIC,
- TROLL_BLOODY_LT_STONEPIC,
- CLOSED_DOOR_1PIC,
+ COLUMNSLIGHTPIC,
- GRY_DOOR_LTPIC, //46
+ DEMONSTATUELIGHTPIC,
- BRN_DOOR_LTPIC, //47
+ 0,//CRYSTALBWALL1LIGHTPIC,
- GRY_FGSTN_LTPIC, //48
- DOOR_2PIC,
+ 0,//SRUSTLIGHTPIC,
- WATER_LIGHT_WEAK_1PIC,
- WATER_LIGHT_WEAK_2PIC,
- WATER_LIGHT_WEAK_3PIC, //52
+ TROLLSTATUELIGHTPIC,
- WATER_LIGHT_1PIC,
- WATER_LIGHT_2PIC,
- WATER_LIGHT_3PIC,
-
- LIGHT_BREATH_1PIC,
- LIGHT_BREATH_2PIC,
- LIGHT_BREATH_3PIC, //58
+ BRNDMGVINELIGHTPIC,
+ TAP3PIC,
+ HORNDOORPIC,
+ RUNEDOORPIC,
EXP_WALL_1PIC,
EXP_WALL_2PIC,
EXP_WALL_3PIC,
-
WATER_EXP_WALL_1PIC,
WATER_EXP_WALL_2PIC,
- WATER_EXP_WALL_3PIC, //64
+ WATER_EXP_WALL_3PIC,
- FINALWALLPIC,
+ IRONDMGLIGHTPIC,
+ IRONLIGHTPIC,
+ 0,
+ TROLLBLOODYLIGHTPIC,
+ TROLLLIGHTPIC,
- LT_SKEL1PIC,
- DK_SKEL1PIC,
- LT_SKEL2PIC,
- DK_SKEL2PIC,
+ 0, // INVISIBLE WALL
+ STONEDOORLIGHTPIC,
0,
- TAP_1PIC,
- TAP_2PIC,
- TAP_3PIC,
- TAP_4PIC,
- TAP_5PIC,
+ IRONWTR1LIGHTPIC,
+ IRONWTR2LIGHTPIC,
+ IRONWTR3LIGHTPIC,
- WATER_DOOR1_PIC,
- WATER_DOOR2_PIC,
- };
+ RUSTWTR1LIGHTPIC,
+ RUSTWTR2LIGHTPIC,
+ RUSTWTR3LIGHTPIC,
-// NORTH / SOUTH WALLS
-//
-int far walldark1[NUMFLOORS] = {0,
+ CEMETARYLIGHTPIC,
+ 0, // STAIRDWNLIGHTPIC,
- CRYSTAL_DARK_1PIC,
- CRYSTAL_DARK_2PIC,
- CRYSTAL_DARK_3PIC,
- CRYSTAL_DARK_4PIC, //4
+ WGRATE1LIGHTPIC,
+ WGRATE2LIGHTPIC,
+ WGRATE3LIGHTPIC,
- FIRE_WALL_1PIC,
- FIRE_WALL_2PIC,
- FIRE_WALL_3PIC,
- FIRE_WALL_4PIC, //8
+ MAS_WIN_LIGHTPIC,
+ MAS_DOOR_LIGHTPIC,
+ MAS_VINE1_LIGHTPIC,
+ MAS_VINE2_LIGHTPIC,
- BRN_STONE_GATEPIC,
- BRN_STONE_WALL_2PIC,
- KUDZU_WEAK_DARKPIC,
- KUDZU_DARK_WALLPIC,
- HEDGE_WALLPIC,
- HEDGE_EYESPIC, //14
+ // Start of non-solid walls
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
- W_GEN_DOOR1PIC, //15
- BRN_WINDOW_DARKPIC,
+ // solid walls
+ SGRATEPIC,
+};
- ALTAR_LEFTPIC,
- ALTAR_RIGHTPIC,
- GRAY_DARK_WALLPIC,
- GRAY_DARK_SIGNPIC, //20
+// NORTH / SOUTH WALLS
+//
+int far walldark1[NUMFLOORS] = {0,
- MANICLE_DARK_WALLPIC,
- MANICLE_DARK_BLOODYPIC,
+ 0,//CRYSTAL1DARKPIC,
+ 0,//EGYPT1DARKPIC,
+ EGYPT2DARKPIC,
+ EGYPT3DARKPIC,
- DARK_CURTAIN_WINDOWPIC,
- DARK_CURTAIN_WALLPIC,
- BRN_DARK_SIGNPIC,
+ FIREWALL1PIC,
+ FIREWALL2PIC,
+ FIREWALL3PIC,
+ FIREWALL4PIC,
- DARK_STONE_WALLPIC,
+ NEMESISPIC,
- W_GEN_DOOR2PIC, //27
+ ALTARLEFTPIC,
+ ALTARRIGHTPIC,
- TROLL_DARK_STONEPIC,
+ TEMPLEWALLDARKPIC,
- BRN_FLAGSTONE_DARK_2PIC,
+ TORCHWALL1PIC,
+ TORCHWALL2PIC,
- W_CRYSTAL_DOORPIC, //30
+ BRNBRKDARKPIC,
+ BRNBRKEMDARKPIC,
- DMG_BRN_FSTN_DKPIC,
+ IRONGATEPIC,
- RUST_METAL_DARKPIC,
- GRAY_METAL_DARKPIC,
+ BRNFLGDARKPIC,
+ BRNFLGWINDOWDARKPIC,
+ BRNFLGVINEDARKPIC,
+ BRNFLGDMGDARKPIC,
- WEAK_STONE_DARKPIC,
+ SPACEDMG1DARKPIC,
+ SPACEDMG2DARKPIC,
- DMG_FIN_FSTN_DKPIC, //35
+ SPACE1DARKPIC,
+ SPACE2DARKPIC,
+ SPACE3DARKPIC,
+ SPACE4DARKPIC,
- WEAK_GRAY_RFGSTN_DARKPIC,
- 0,
+ SPACE5DARKPIC,
+ SPACE6DARKPIC,
+ SPACE7DARKPIC,
+ SPACE8DARKPIC,
- WEAK_CRYSTAL_DARKPIC,
+ 0,//SPACE9DARKPIC,
+ 0,//SPACEDMG9DARKPIC,
+ SPACE10DARKPIC,
+ RUSTDOORDARKPIC,
- BRN_MUD_DARKPIC,
+ SPACE11DARKPIC,
+ SPACE12DARKPIC,
+ SPACE13DARKPIC,
+ SPACE14DARKPIC,
- STEEL_DOOR1PIC, //40
+ SPACEDMG5DARKPIC,
+ SPACEDMG6DARKPIC,
- BRN_MUD_WEAK_DARKPIC,
+ TAP1PIC,
+ TAP2PIC,
+ ENDPIC,
+ 0,//SIRONDARKPIC,
- STEEL_DOOR2PIC,
+ SPCDOOR1DARKPIC,
+ SPCDOOR2DARKPIC,
+ SPCDOOR3DARKPIC,
+ SPCDOOR4DARKPIC,
- HORN_DOORPIC,
- TROLL_BLOODY_DK_STONEPIC,
+ COLUMNSDARKPIC,
- CLOSED_DOOR_1PIC,
+ DEMONSTATUEDARKPIC,
- GRY_DOOR_DKPIC, //46
- BRN_DOOR_DKPIC, //47
- GRY_FGSTN_DKPIC, //48
- DOOR_2PIC,
+ 0,//CRYSTALBWALL1DARKPIC,
- WATER_DARK_WEAK_1PIC,
- WATER_DARK_WEAK_2PIC,
- WATER_DARK_WEAK_3PIC,
+ 0,//SRUSTDARKPIC,
- WATER_DARK_1PIC,
- WATER_DARK_2PIC,
- WATER_DARK_3PIC,
+ TROLLSTATUEDARKPIC,
- DARK_BREATH_1PIC,
- DARK_BREATH_2PIC,
- DARK_BREATH_3PIC,
+ BRNDMGVINEDARKPIC,
+ TAP3PIC,
+ HORNDOORPIC,
+ RUNEDOORPIC,
EXP_WALL_1PIC,
EXP_WALL_2PIC,
@@ -656,24 +669,49 @@ int far walldark1[NUMFLOORS] = {0,
WATER_EXP_WALL_2PIC,
WATER_EXP_WALL_3PIC,
- FINALWALLPIC,
+ IRONDMGDARKPIC,
+ IRONDARKPIC,
+ 0,
+ TROLLBLOODYDARKPIC,
+
+ TROLLDARKPIC,
+
+ 0, // INVISIBLE WALL
+
+ STONEDOORDARKPIC,
+ 0,
+
+ IRONWTR1DARKPIC,
+ IRONWTR2DARKPIC,
+ IRONWTR3DARKPIC,
- LT_SKEL1PIC,
- DK_SKEL1PIC,
- LT_SKEL2PIC,
- DK_SKEL2PIC,
+ RUSTWTR1DARKPIC,
+ RUSTWTR2DARKPIC,
+ RUSTWTR3DARKPIC,
+ CEMETARYDARKPIC,
0,
- TAP_1PIC,
- TAP_2PIC,
- TAP_3PIC,
- TAP_4PIC,
- TAP_5PIC,
+ WGRATE1DARKPIC,
+ WGRATE2DARKPIC,
+ WGRATE3DARKPIC,
+
+ MAS_WIN_DARKPIC,
+ MAS_DOOR_DARKPIC,
+ MAS_VINE1_DARKPIC,
+ MAS_VINE2_DARKPIC,
+
+ // Start of non-solid walls
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
- WATER_DOOR1_PIC,
- WATER_DOOR2_PIC,
- };
+ // solid walls
+ SGRATEPIC,
+};
/*
diff --git a/C6_GAME.C b/C6_GAME.C
index 14693a7..d31a047 100644
--- a/C6_GAME.C
+++ b/C6_GAME.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -37,72 +37,56 @@
=============================================================================
*/
-#define NUMLUMPS 61
-
-#define SUCCUBUSLUMP 0
-#define FATDEMONLUMP 1
-#define BOLTLUMP 2
-#define NUKELUMP 3
-#define POTIONLUMP 4
-#define RKEYLUMP 5
-#define YKEYLUMP 6
-#define GKEYLUMP 7
-#define BKEYLUMP 8
-//#define SCROLLLUMP 9
-#define CHESTLUMP 10
-#define PLAYERLUMP 11
-#define WALL1LUMP 12
-#define WALL2LUMP 13
-#define BDOORLUMP 14
-#define GODESSLUMP 15
-#define MAGELUMP 16
-#define BATLUMP 17
-#define GRELLUMP 18
-#define TOMBSTONESLUMP 19
-#define ZOMBIELUMP 20
-#define ANTLUMP 21
-#define SKELETONLUMP 22
-#define RGEMLUMP 23
-#define GGEMLUMP 24
-#define BGEMLUMP 25
-#define YGEMLUMP 26
-#define PGEMLUMP 27
-//#define RKEY2LUMP 28
-#define DRAGONLUMP 29
-#define OBJ_WARPLUMP 30
-#define EYELUMP 31
-#define REDDEMONLUMP 32
-//#define PITLUMP 33
-#define FTIMELUMP 34
-#define WATERCHESTLUMP 35
-#define TREELUMP 36
-#define ARCH1LUMP 37
-#define BUNNYLUMP 38
-#define ANTHILLLUMP 39
-#define COLUMNLUMP 40
-#define SULPHURGASLUMP 41
-#define FIREPOTLUMP 42
-//#define WHIRLPOOLLUMP 43
-#define FOUNTAINLUMP 44
-#define FORCEFIELDLUMP 45
-#define ARCH2LUMP 46
-#define ARCH3LUMP 47
-#define ARCH4LUMP 48
-#define ARCH5LUMP 49
-#define ARCH6LUMP 50
-#define SKELHANGLUMP 51
-//#define SKELPILELUMP 52
-#define ARCH7LUMP 53
-#define ARCH8LUMP 54
-#define ARCH9LUMP 55
-#define ARCH10LUMP 56
-#define ARCH11LUMP 57
-#define ARCH12LUMP 58
-#define ARCH13LUMP 59
+#define NUMLUMPS 45
+
+#define EYESTALKLUMP 0
+#define BLOBLUMP 1
+#define BOLTLUMP 2
+#define NUKELUMP 3
+#define POTIONLUMP 4
+#define RKEYLUMP 5
+#define YKEYLUMP 6
+#define GKEYLUMP 7
+#define BKEYLUMP 8
+#define RGEMLUMP 9
+#define GGEMLUMP 10
+#define BGEMLUMP 11
+#define YGEMLUMP 12
+#define PGEMLUMP 13
+#define CHESTLUMP 14
+#define PLAYERLUMP 15
+#define FTIMELUMP 16
+#define PORTALLUMP 17
+#define COLUMN1LUMP 18
+#define FIREPOTLUMP 19
+#define COLUMN2LUMP 20
+#define EYELUMP 21
+#define FUTUREMAGELUMP 22
+#define FORCEFIELDLUMP 23
+#define ROBOTANKLUMP 24
+#define RAMBONELUMP 25
+#define STOMPYLUMP 26
+#define TROLLLUMP 27
+#define WIZARDLUMP 28
+#define HEADLUMP 29
+#define INVISDUDELUMP 30
+#define BUGLUMP 31
+#define CYBORGLUMP 32
+#define WATERCHESTLUMP 33
+#define GRELLUMP 34
+#define RAYLUMP 35
+#define COLUMN3LUMP 36
+#define OLDCHESTLUMP 37
+#define OLDFIREPOTLUMP 38
+#define COLUMN4LUMP 39
+#define TOMB1LUMP 40
+#define TOMB2LUMP 41
+#define DEMONLUMP 42
+#define COLUMN5LUMP 43
int lumpstart[NUMLUMPS] = {
-SUCCUBUS_LUMP_START,
-FATDEMON_LUMP_START,
+EYESTALK_LUMP_START,
+BLOB_LUMP_START,
BOLT_LUMP_START,
NUKE_LUMP_START,
POTION_LUMP_START,
@@ -110,65 +94,47 @@ RKEY_LUMP_START,
YKEY_LUMP_START,
GKEY_LUMP_START,
BKEY_LUMP_START,
-0,
-//SCROLL_LUMP_START,
-CHEST_LUMP_START,
-PLAYER_LUMP_START,
-//WALL1_LUMP_START,
-//WALL2_LUMP_START,
-//BDOOR_LUMP_START,
-0,0,0,
-GODESS_LUMP_START,
-MAGE_LUMP_START,
-BAT_LUMP_START,
-GREL_LUMP_START,
-TOMBSTONES_LUMP_START,
-ZOMBIE_LUMP_START,
-ANT_LUMP_START,
-SKELDUDE_LUMP_START,
RGEM_LUMP_START,
GGEM_LUMP_START,
BGEM_LUMP_START,
YGEM_LUMP_START,
PGEM_LUMP_START,
-0, //RKEY2_LUMP_START,
-DRAGON_LUMP_START,
-OBJ_WARP_LUMP_START,
-EYE_LUMP_START,
-REDDEMON_LUMP_START,
-0, //PIT_LUMP_START,
+CHEST_LUMP_START,
+PLAYER_LUMP_START,
TIME_LUMP_START,
-O_WATER_CHEST_LUMP_START,
-TREE_LUMP_START,
-ARCH1_LUMP_START,
-BUNNY_LUMP_START,
-ANTHILL_LUMP_START,
-COLUMN_LUMP_START,
-SULPHURGAS_LUMP_START,
-FIREPOT_LUMP_START,
-0, //WHIRLPOOL_LUMP_START,
-FOUNTAIN_LUMP_START,
+PORTAL_LUMP_START,
+COLUMN1_LUMP_START,
+FFIREPOT_LUMP_START,
+COLUMN2_LUMP_START,
+EYE_LUMP_START,
+FUTUREMAGE_LUMP_START,
FORCEFIELD_LUMP_START,
-ARCH2_LUMP_START,
-ARCH3_LUMP_START,
-ARCH4_LUMP_START,
-ARCH5_LUMP_START,
-ARCH6_LUMP_START,
-SKELHANG_LUMP_START,
-0, //SKELPILE_LUMP_START,
-ARCH7_LUMP_START,
-ARCH8_LUMP_START,
-ARCH9_LUMP_START,
-ARCH10_LUMP_START,
-ARCH11_LUMP_START,
-ARCH12_LUMP_START,
-ARCH13_LUMP_START,
+ROBOTANK_LUMP_START,
+RAMBONE_LUMP_START,
+STOMPY_LUMP_START,
+TROLL_LUMP_START,
+WIZARD_LUMP_START,
+HEAD_LUMP_START,
+INVISDUDE_LUMP_START,
+BUG_LUMP_START,
+CYBORG_LUMP_START,
+O_WATER_CHEST_LUMP_START,
+GREL_LUMP_START,
+RAY_LUMP_START,
+COLUMN3_LUMP_START,
+OLD_CHEST_LUMP_START,
+OFIREPOT_LUMP_START,
+COLUMN4_LUMP_START,
+TOMB1_LUMP_START,
+TOMB2_LUMP_START,
+DEMON_LUMP_START,
+COLUMN5_LUMP_START,
};
int lumpend[NUMLUMPS] = {
-SUCCUBUS_LUMP_END,
-FATDEMON_LUMP_END,
+EYESTALK_LUMP_END,
+BLOB_LUMP_END,
BOLT_LUMP_END,
NUKE_LUMP_END,
POTION_LUMP_END,
@@ -176,61 +142,44 @@ RKEY_LUMP_END,
YKEY_LUMP_END,
GKEY_LUMP_END,
BKEY_LUMP_END,
-0,
-//SCROLL_LUMP_END,
-CHEST_LUMP_END,
-PLAYER_LUMP_END,
-0,0,0,
-GODESS_LUMP_END,
-MAGE_LUMP_END,
-BAT_LUMP_END,
-GREL_LUMP_END,
-TOMBSTONES_LUMP_END,
-ZOMBIE_LUMP_END,
-ANT_LUMP_END,
-SKELDUDE_LUMP_END,
RGEM_LUMP_END,
GGEM_LUMP_END,
BGEM_LUMP_END,
YGEM_LUMP_END,
PGEM_LUMP_END,
-0, //RKEY2_LUMP_END,
-DRAGON_LUMP_END,
-OBJ_WARP_LUMP_END,
-EYE_LUMP_END,
-REDDEMON_LUMP_END,
-0, //PIT_LUMP_END,
+CHEST_LUMP_END,
+PLAYER_LUMP_END,
TIME_LUMP_END,
-O_WATER_CHEST_LUMP_END,
-TREE_LUMP_END,
-ARCH1_LUMP_END,
-BUNNY_LUMP_END,
-ANTHILL_LUMP_END,
-COLUMN_LUMP_END,
-SULPHURGAS_LUMP_END,
-FIREPOT_LUMP_END,
-0, //WHIRLPOOL_LUMP_END,
-FOUNTAIN_LUMP_END,
+PORTAL_LUMP_END,
+COLUMN1_LUMP_END,
+FFIREPOT_LUMP_END,
+COLUMN2_LUMP_END,
+EYE_LUMP_END,
+FUTUREMAGE_LUMP_END,
FORCEFIELD_LUMP_END,
-ARCH2_LUMP_END,
-ARCH3_LUMP_END,
-ARCH4_LUMP_END,
-ARCH5_LUMP_END,
-ARCH6_LUMP_END,
-SKELHANG_LUMP_END,
-0, //SKELPILE_LUMP_END,
-ARCH7_LUMP_END,
-ARCH8_LUMP_END,
-ARCH9_LUMP_END,
-ARCH10_LUMP_END,
-ARCH11_LUMP_END,
-ARCH12_LUMP_END,
-ARCH13_LUMP_END,
+ROBOTANK_LUMP_END,
+RAMBONE_LUMP_END,
+STOMPY_LUMP_END,
+TROLL_LUMP_END,
+WIZARD_LUMP_END,
+HEAD_LUMP_END,
+INVISDUDE_LUMP_END,
+BUG_LUMP_END,
+CYBORG_LUMP_END,
+O_WATER_CHEST_LUMP_END,
+GREL_LUMP_END,
+RAY_LUMP_END,
+COLUMN3_LUMP_END,
+OLD_CHEST_LUMP_END,
+OFIREPOT_LUMP_END,
+COLUMN4_LUMP_END,
+TOMB1_LUMP_END,
+TOMB2_LUMP_END,
+DEMON_LUMP_END,
+COLUMN5_LUMP_END,
};
-//extern unsigned scolor,gcolor;
-
/*
=============================================================================
@@ -245,7 +194,6 @@ unsigned tileoffsets[NUMTILE16];
unsigned textstarts[27];
boolean splitscreen=false;
-
/*
=============================================================================
@@ -259,16 +207,6 @@ boolean lumpneeded[NUMLUMPS];
//===========================================================================
-//==========================================================================
-//
-//
-// LOCAL PROTOTYPES
-//
-//
-//==========================================================================
-
-void CashPoints(void);
-
/*
@@ -315,7 +253,6 @@ void ScanInfoPlane (void)
break;
case 0xfa: // sky/ground color
- case 0xf9: // sky/ground 'strip'
x++;
tile = *start++;
hi = tile >> 8;
@@ -329,8 +266,6 @@ void ScanInfoPlane (void)
groundcolor = &gcolor;
break;
- case 0xf9: // sky / ground 'strip'
- break;
}
break;
}
@@ -346,7 +281,7 @@ void ScanInfoPlane (void)
case 4:
lumpneeded[PLAYERLUMP] = true;
SpawnPlayer(x,y,NORTH+tile-1);
- break;
+ break;
case 5:
case 6:
@@ -357,107 +292,141 @@ void ScanInfoPlane (void)
case 11:
lumpneeded[tile-5+BOLTLUMP] = true;
SpawnBonus(x,y,tile-5);
- break;
+ break;
-#if 0
case 12:
+ lumpneeded[EYESTALKLUMP] = true;
+ SpawnAquaMan(x, y);
+ break;
+
+
case 13:
+ lumpneeded[BLOBLUMP] = true;
+ SpawnBlob(x, y);
+ break;
+
+
case 14:
+ lumpneeded[BUGLUMP] = true;
+ SpawnBug(x, y);
+ break;
+
case 15:
+ lumpneeded[CYBORGLUMP] = true;
+ SpawnCyborgDemon(x, y);
+ break;
+
case 16:
+ lumpneeded[EYELUMP] = true;
+ SpawnShooterEye(x, y);
+ break;
+
case 17:
+ lumpneeded[FUTUREMAGELUMP] = true;
+ SpawnFutureMage(x, y);
+ break;
+
case 18:
+ lumpneeded[INVISDUDELUMP] = true;
+ SpawnInvisDude(x, y);
+ break;
+
case 19:
- lumpneeded[SCROLLLUMP] = true;
- SpawnBonus(x,y,B_SCROLL1+tile-12);
- break;
-#endif
+ lumpneeded[ROBOTANKLUMP] = true;
+ SpawnRoboTank(x, y);
+ break;
case 20:
- lumpneeded[REDDEMONLUMP] = true;
- SpawnRedDemon (x,y);
- break;
-
-#if 0
- case 20: // goal
- lumpneeded[GOALLUMP] = true;
- SpawnBonus(x,y,B_GOAL);
- break;
-#endif
+ lumpneeded[RAMBONELUMP] = true;
+ SpawnRamBone(x, y);
+ break;
case 21:
- lumpneeded[GODESSLUMP] = true;
- SpawnGodess (x,y);
- break;
+ lumpneeded[STOMPYLUMP] = true;
+ SpawnStompy(x, y);
+ break;
case 22:
- lumpneeded[FATDEMONLUMP] = true;
- SpawnFatDemon (x,y);
- break;
+ lumpneeded[TROLLLUMP] = true;
+ SpawnTroll(x, y);
+ break;
case 23:
- lumpneeded[SUCCUBUSLUMP] = true;
- SpawnSuccubus (x,y);
- break;
+ lumpneeded[WIZARDLUMP] = true;
+ SpawnWizard(x, y);
+ break;
case 24:
- lumpneeded[DRAGONLUMP] = true;
- SpawnDragon(x,y);
- break;
+ SpawnBounce(x, y, 0);
+ break;
case 25:
- lumpneeded[BATLUMP] = true;
- SpawnBat (x,y);
- break;
+ SpawnBounce(x, y, 1);
+ break;
case 26:
- lumpneeded[EYELUMP] = true;
- SpawnEye(x,y);
- break;
+ lumpneeded[RKEYLUMP] = lumpneeded[GRELLUMP] = true;
+ SpawnGrelminar (x,y);
+ break;
case 27:
- lumpneeded[MAGELUMP] = true;
- SpawnMage (x,y);
- break;
+ lumpneeded[EYELUMP] = true;
+ SpawnRunningEye(x,y);
+ break;
case 28:
- lumpneeded[RKEYLUMP] = lumpneeded[GRELLUMP] = true;
- SpawnGrelminar (x,y);
- break;
+ lumpneeded[RAYLUMP] = true;
+ SpawnRay(x, y);
+ break;
+
+ case 29:
+ lumpneeded[HEADLUMP] = true;
+ SpawnEgyptianHead(x, y);
+ break;
case 30:
- lumpneeded[ANTLUMP] = true;
- SpawnAnt(x,y);
- break;
+ lumpneeded[DEMONLUMP] = true;
+ SpawnDemon(x, y);
+ break;
case 31:
+ lumpneeded[COLUMN5LUMP] = true;
+ SpawnMiscObjects(x, y, 9);
+ break;
+
case 32:
+ SpawnInvisWallCntroller(x, y);
+ break;
+
case 33:
+ break;
+
case 34:
+ break;
+
case 35:
- lumpneeded[OBJ_WARPLUMP] = true;
- SpawnWarp (x,y,tile-30);
- break;
+ break;
case 36:
- lumpneeded[ZOMBIELUMP] = true;
- SpawnZombie(x,y);
- break;
+ lumpneeded[COLUMN1LUMP] = true;
+ SpawnMiscObjects(x, y, 1);
+ break;
case 37:
- lumpneeded[SKELETONLUMP] = true;
- SpawnSkeleton(x,y);
- break;
+ lumpneeded[FIREPOTLUMP] = true;
+ SpawnMiscObjects(x, y, 4);
+ break;
case 38:
- lumpneeded[SKELETONLUMP] = true;
- SpawnWallSkeleton(x,y);
- break;
+ lumpneeded[PORTALLUMP] = true;
+ SpawnWarp(x, y);
+ break;
case 39:
lumpneeded[FTIMELUMP] = true;
SpawnFTime(x,y);
- break;
+ break;
+
case 40:
case 41:
@@ -469,18 +438,25 @@ void ScanInfoPlane (void)
break;
case 45:
+ lumpneeded[COLUMN2LUMP] = true;
+ SpawnMiscObjects(x, y, 2);
+ break;
+
case 46:
+ lumpneeded[COLUMN3LUMP] = true;
+ SpawnMiscObjects(x, y, 3);
+ break;
+
case 47:
- lumpneeded[TOMBSTONESLUMP] = true;
- SpawnTombstone(x,y,tile-45);
- break;
+ lumpneeded[FORCEFIELDLUMP] = true;
+ SpawnForceField(x, y);
+ break;
-#if 0
case 48:
- lumpneeded[PITLUMP] = true;
- SpawnWarp(x,y,0);
- break;
-#endif
+ lumpneeded[OLDCHESTLUMP] = true;
+ SpawnBonus(x, y, B_OLDCHEST);
+ break;
+
case 49: // chest
if (gcolor == 0x0101)
lumpneeded[WATERCHESTLUMP] = true;
@@ -490,115 +466,79 @@ void ScanInfoPlane (void)
break;
case 50:
- lumpneeded[TREELUMP] = true;
- SpawnTree(x,y);
- break;
+ lumpneeded[COLUMN4LUMP] = true;
+ SpawnMiscObjects(x, y, 5);
+ break;
case 51:
- lumpneeded[BUNNYLUMP] = true;
- SpawnBunny(x,y);
- break;
+ lumpneeded[OLDFIREPOTLUMP] = true;
+ SpawnMiscObjects(x, y, 6);
+ break;
case 52:
- lumpneeded[ARCH1LUMP] = true;
- SpawnArch(x,y,1);
- break;
+ lumpneeded[TOMB1LUMP] = true;
+ SpawnMiscObjects(x, y, 7);
+ break;
case 53:
- lumpneeded[ANTHILLLUMP] = true;
- SpawnWarp(x,y,0);
- break;
+ lumpneeded[TOMB2LUMP] = true;
+ SpawnMiscObjects(x, y, 8);
+ break;
case 54:
- lumpneeded[COLUMNLUMP] = true;
- SpawnMiscObjects(x,y,1); //1=column,2=sulphur hole,3=fire pot,4=fountain
- break;
+ break;
case 55:
- lumpneeded[SULPHURGASLUMP] = true;
- SpawnMiscObjects(x,y,2);
- break;
+ break;
case 56:
- lumpneeded[FIREPOTLUMP] = true;
- SpawnMiscObjects(x,y,3);
- break;
+ break;
case 57:
- lumpneeded[ARCH13LUMP] = true;
- SpawnArch(x,y,13);
- break;
+ break;
case 58:
- lumpneeded[FOUNTAINLUMP] = true;
- SpawnMiscObjects(x,y,4);
- break;
+ break;
case 59:
- lumpneeded[FORCEFIELDLUMP] = true;
- SpawnForceField(x,y);
- break;
+ break;
case 60:
- lumpneeded[ARCH2LUMP] = true;
- SpawnArch(x,y,2);
- break;
+ break;
case 61:
- lumpneeded[ARCH3LUMP] = true;
- SpawnArch(x,y,3);
- break;
+ break;
case 62:
- lumpneeded[ARCH4LUMP] = true;
- SpawnArch(x,y,4);
- break;
+ break;
case 63:
- lumpneeded[ARCH5LUMP] = true;
- SpawnArch(x,y,5);
- break;
+ break;
case 64:
- lumpneeded[ARCH6LUMP] = true;
- SpawnArch(x,y,6);
- break;
+ break;
case 65:
- lumpneeded[SKELHANGLUMP] = true;
- lumpneeded[SKELETONLUMP] = true;
- SpawnSkeletonHanging(x,y);
- break;
+ break;
case 66:
- lumpneeded[ARCH12LUMP] = true;
- SpawnArch(x,y,12);
- break;
+ break;
case 67:
- lumpneeded[ARCH7LUMP] = true;
- SpawnArch(x,y,7);
- break;
+ break;
case 68:
- lumpneeded[ARCH8LUMP] = true;
- SpawnArch(x,y,8);
- break;
+ break;
case 69:
- lumpneeded[ARCH9LUMP] = true;
- SpawnArch(x,y,9);
- break;
+ break;
case 70:
- lumpneeded[ARCH10LUMP] = true;
- SpawnArch(x,y,10);
- break;
+ break;
case 71:
- lumpneeded[ARCH11LUMP] = true;
- SpawnArch(x,y,11);
- break;
+ break;
+
}
}
@@ -692,18 +632,19 @@ static char *levelnames[] =
};
#endif
-void DrawEnterScreen (void)
+void DrawEnterScreen ()
{
int width;
bufferofs = displayofs = screenloc[screenpage];
VW_Bar(0,0,VIEWWIDTH,VIEWHEIGHT,0);
+
// width = strlen(levelnames[gamestate.mapon]);
- width = strlen("You enter a new area ...");
+ width = strlen("A new challenge awaits you.");
if (width < 20)
width = 20;
CenterWindow(width,3);
- US_CPrint("\nYou enter a new area ...\n");
+ US_CPrint("\nA new challenge awaits you.\n");
// US_CPrint(levelnames[gamestate.mapon]);
}
@@ -893,7 +834,7 @@ void SetupGameLevel ()
//
// decide which graphics are needed and spawn actors
//
- zombie_base_delay = 0; // (1*60) + random(1*60);
+ head_base_delay = 0; // (1*60) + random(1*60);
ScanInfoPlane ();
_fmemset(wall_anim_pos,0,sizeof(wall_anim_pos));
@@ -1050,8 +991,8 @@ void Victory (boolean playsounds)
SD_WaitSoundDone ();
SD_PlaySound (GETKEYSND);
SD_WaitSoundDone ();
- SD_PlaySound (GETSCROLLSND);
- SD_WaitSoundDone ();
+// SD_PlaySound (GETSCROLLSND);
+// SD_WaitSoundDone ();
SD_PlaySound (GETPOINTSSND);
}
@@ -1069,6 +1010,7 @@ void Victory (boolean playsounds)
VW_DrawPic(0, 0, FINALEPIC);
VW_FadeIn();
+
}
//==========================================================================
@@ -1159,7 +1101,7 @@ void DrawPlayScreen (void)
grneeded[STATUSPIC] &= ~ca_levelbit;
MM_SetPurge(&grsegs[STATUSPIC],3);
- RedrawStatusWindow ();
+// RedrawStatusWindow ();
bufferofs = displayofs = screenloc[0];
}
diff --git a/C6_MAIN.C b/C6_MAIN.C
index c7e0f82..9e284ee 100644
--- a/C6_MAIN.C
+++ b/C6_MAIN.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -20,7 +20,6 @@
#define CATALOG
-
#include <time.h>
#include <stdarg.h>
@@ -46,6 +45,23 @@
=============================================================================
*/
+typedef enum demo_screens {sc_logo,sc_title,sc_credits1,sc_credits2,sc_credits3,sc_credits4,sc_end} demo_screens;
+struct Shape shape,
+ SdLogoShp,
+ TitleShp,
+ CreditBKShp,
+ Credit1Shp,
+ Credit2Shp,
+ Credit3Shp,
+ Credit4Shp,
+ Credit5Shp,
+ Credit6Shp,
+ Credit7Shp,
+ Credit8Shp,
+ Credit9Shp,
+ Credit10Shp;
+
+
PresenterInfo MainHelpText;
GameDiff restartgame;
@@ -61,8 +77,6 @@ exittype playstate;
char SlowMode = 0;
int starting_level;
-//extern unsigned scolor,gcolor; //NPM
-
short NumGames=0;
unsigned Flags=0;
@@ -398,9 +412,8 @@ void InitGame (void)
#endif
US_Startup ();
-// US_UpdateTextScreen();
-
CA_Startup ();
+
US_Setup ();
US_SetLoadSaveHooks(LoadTheGame,SaveTheGame,ResetGame);
@@ -576,13 +589,13 @@ void DisplayDepartment(char *text)
short temp;
// bufferofs = 0;
- PrintY = 1;
- WindowX = 0;
- WindowW = 320;
+ PrintY = 5;
+ WindowX = 17;
+ WindowW = 168;
- VW_Bar(WindowX,PrintY+1,WindowW,7,7);
+ VW_Bar(WindowX,PrintY+1,WindowW,7,0);
temp = fontcolor;
- fontcolor = 2;
+ fontcolor = 10;
US_CPrintLine (text);
fontcolor = temp;
}
@@ -597,6 +610,8 @@ void DisplayDepartment(char *text)
=====================
*/
+static char *ParmStrings[] = {"easy","normal","hard",""};
+
void DemoLoop (void)
{
@@ -647,7 +662,6 @@ void DemoLoop (void)
GameLoop();
}
-
//-------------------------------------------------------------------------
// DisplayIntroText()
//-------------------------------------------------------------------------
@@ -690,12 +704,23 @@ void DisplayIntroText()
PrintX = 0;
WindowX = 0;
WindowW = 320;
- US_Print (" You stand before the gate leading into\n");
- US_Print (" the Towne of Morbidity...\n");
+
+
+ US_Print (" A chilling wind greets you at the entrance\n");
+ US_Print (" to the Sanctuary of the Dead.\n");
PrintY = 180;
- US_Print (" Enter now boldly to defeat the evil Nemesis\n");
- US_Print (" deep inside the catacombs.\n");
+
+ fontcolor = 9;
+ US_Print (" Shall you proceed as\n");
+ fontcolor = 14;
+ US_Print (" N");
+ fontcolor = 9;
+ US_Print ("ovice or");
+ fontcolor = 14;
+ US_Print (" W");
+ fontcolor = 9;
+ US_Print ("arrior ?");
#endif
@@ -920,12 +945,15 @@ void main (void)
case 4:
Flags |= (FL_HELPTEST|FL_QUICK);
break;
+
}
}
if (stricmp(_argv[1], "^(a@&r`"))
- Quit("You must type CATARM to run CATACOMB ARMAGEDDON 3-D\n");
+ Quit("You must type CATAPOC to run CATACOMB APOCALYPSE\n");
+
+#if 0
MainHelpText.xl = 0;
MainHelpText.yl = 0;
MainHelpText.xh = 639;
@@ -933,6 +961,7 @@ void main (void)
MainHelpText.bgcolor = 7;
MainHelpText.ltcolor = 15;
MainHelpText.dkcolor = 8;
+#endif
// jabhack();
@@ -957,7 +986,7 @@ void main (void)
//-------------------------------------------------------------------------
// Display640()
//-------------------------------------------------------------------------
-void Display640()
+void Display640(void)
{
// Can you believe it takes all this just to change to 640 mode!!???!
//
@@ -973,7 +1002,7 @@ void Display640()
//-------------------------------------------------------------------------
// Display320()
//-------------------------------------------------------------------------
-void Display320()
+void Display320(void)
{
// Can you believe it takes all this just to change to 320 mode!!???!
//
@@ -983,6 +1012,7 @@ void Display320()
MoveScreen(0,0);
VW_Bar (0,0,320,200,0);
VW_SetScreenMode(EGA320GR);
+ VW_SetLineWidth(40);
BlackPalette();
VW_ScreenToScreen(FREESTART-STATUSLEN,0,40,80);
}
@@ -1020,10 +1050,11 @@ void PrintHelp(void)
US_Print ("F4\n");
US_Print ("F5\n");
US_Print ("ESC\n\n");
-#ifndef CATALOG
fontcolor = (7 ^ 0);
+#ifndef CATALOG
US_Print (" (See complete Instructions for more info)\n");
#endif
+ US_Print ("\n copyright (c) 1992-93 Softdisk Publishing\n");
fontcolor = (7 ^ 8);
PrintX = 400;
diff --git a/C6_PLAY.C b/C6_PLAY.C
index 96f7775..995e6c7 100644
--- a/C6_PLAY.C
+++ b/C6_PLAY.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -295,6 +295,7 @@ deadloop:;
{
char choices[] = {sc_Escape,sc_R,sc_N,sc_Q,0};
ch = DisplayMsg("Restore New Quit",choices);
+ DisplayMsg(" ", NULL);
}
else
{
@@ -412,7 +413,7 @@ deadloop:;
PostFullDisplay(false);
Victory(false);
IN_Ack();
-// gamestate.mapon++;
+ Quit(NULL);
}
else
PostFullDisplay(true);
@@ -936,39 +937,26 @@ nextactor:;
// WIZARD'S SHOTS
//
+ case bounceobj:
case pshotobj:
case bigpshotobj:
RadarXY[objnum++][2]=shot_color[screenpage];
break;
- // BATS (DK GRAY)
- //
- case batobj:
- if (obj->active == always)
- RadarXY[objnum++][2]=8;
- break;
-
- // RABBITS (LT GRAY)
- //
- case bunnyobj:
- if (obj->active == always)
- RadarXY[objnum++][2]=7;
- break;
-
// RED GEM
//
- // EYE, RED DEMON (DK RED)
+ // STOMPY (DK RED)
//
- case eyeobj:
- case reddemonobj:
+ case invisdudeobj:
+ case stompyobj:
if (gamestate.gems[B_RGEM-B_RGEM])
if (obj->active == always)
RadarXY[objnum++][2]=4;
break;
- // RED MAGE (LT RED)
+ // BLOB (LT RED)
//
- case mageobj:
+ case blobobj:
if (gamestate.gems[B_RGEM-B_RGEM])
if (obj->active == always)
RadarXY[objnum++][2]=12;
@@ -976,37 +964,38 @@ nextactor:;
// BLUE GEM
//
- // SUCCUBUS (LT BLUE)
+ // ROBOTANK (LT BLUE)
//
- case succubusobj:
+ case robotankobj:
+ case fmageobj:
if (gamestate.gems[B_BGEM-B_RGEM])
if (obj->active == always)
RadarXY[objnum++][2]=9;
break;
- // WATER DRAGON (DK BLUE)
+#if 1
+ // BLUE DEMON (DK BLUE)
//
- case wetobj:
+ case demonobj:
if (gamestate.gems[B_GGEM-B_RGEM])
if (obj->active == always)
RadarXY[objnum++][2]=1;
break;
-
-
+#endif
// GREEN GEM
//
- // GREEN TROLL (LT GREEN)
+ // WIZARD (LT GREEN)
//
- case fatdemonobj:
+ case wizardobj:
if (gamestate.gems[B_GGEM-B_RGEM])
if (obj->active == always)
RadarXY[objnum++][2]=10;
break;
- // GODESS (DK GREEN)
+ // AQUA MAN (DK GREEN)
//
- case godessobj:
+ case aquamanobj:
if (gamestate.gems[B_GGEM-B_RGEM])
if (obj->active == always)
RadarXY[objnum++][2]=2;
@@ -1014,28 +1003,51 @@ nextactor:;
// YELLOW GEM
//
- // ANT (BROWN)
+ // EQYPTIAN HEAD (BROWN)
//
- case antobj:
- case treeobj:
+ case headobj:
if (gamestate.gems[B_YGEM-B_RGEM])
if (obj->active == always)
RadarXY[objnum++][2]=6;
break;
- // SKELETON (YELLOW)
- //
- case skeletonobj:
+ // RAMBONE (YELLOW)
+ // TROLL
+ case ramboneobj:
+ case trollobj:
if (gamestate.gems[B_YGEM-B_RGEM])
if (obj->active == always)
RadarXY[objnum++][2]=14;
break;
+ // BUG (LIGHT GRAY)
+ case bugobj:
+ if (gamestate.gems[B_YGEM-B_RGEM])
+ if (obj->active == always)
+ RadarXY[objnum++][2]=7;
+ break;
+
+ // RAY (DARK GRAY)
+ case rayobj:
+ if (gamestate.gems[B_YGEM-B_RGEM])
+ if (obj->active == always)
+ RadarXY[objnum++][2]=8;
+ break;
+
// PURPLE GEM
//
- // ZOMBIE
+ // MEC DEMON (PURPLE)
+ //
+ case cyborgdemonobj:
+ if (gamestate.gems[B_PGEM-B_RGEM])
+ if (obj->active == always)
+ RadarXY[objnum++][2]=5;
+ break;
+
+ // EYE (LT PURPLE)
//
- case zombieobj:
+ case eyeobj:
+ case reyeobj:
if (gamestate.gems[B_PGEM-B_RGEM])
if (obj->active == always)
RadarXY[objnum++][2]=13;
@@ -1175,13 +1187,6 @@ nextactor:;
SD_PlaySound (GAMEOVERSND);
DisplaySMsg("DEAD",NULL);
DrawHealth();
- if (gamestate.potions)
- {
- bufferofs = displayofs = screenloc[screenpage];
- CenterWindow(35,3);
- US_CPrint("\nYou should use your Cure Potions wisely\n");
- IN_Ack();
- }
}
// check for win
@@ -1189,9 +1194,8 @@ nextactor:;
if (playstate == ex_victorious)
{
Victory(true);
-// Flags |= FL_DEAD;
IN_Ack();
-// gamestate.mapon++;
+ Quit(NULL);
}
CheckKeys();
diff --git a/C6_SCALE.C b/C6_SCALE.C
index fee4dbe..bb824ac 100644
--- a/C6_SCALE.C
+++ b/C6_SCALE.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/C6_SCA_A.ASM b/C6_SCA_A.ASM
index 44c8eb1..74160c3 100644
--- a/C6_SCA_A.ASM
+++ b/C6_SCA_A.ASM
@@ -1,4 +1,4 @@
-; Catacomb Armageddon Source Code
+; Catacomb Apocalypse Source Code
; Copyright (C) 1993-2014 Flat Rock Software
;
; This program is free software; you can redistribute it and/or modify
diff --git a/C6_STATE.C b/C6_STATE.C
index ac10ae8..e17b77f 100644
--- a/C6_STATE.C
+++ b/C6_STATE.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -151,31 +151,29 @@ void T_DoDamage (objtype *ob)
switch (ob->obclass)
{
- case zombieobj:
- case fatdemonobj:
- points = 8;
- break;
- case reddemonobj:
- case godessobj:
- points = 15;
- break;
- case antobj:
- points = 2;
- break;
- case skeletonobj:
- points = 6;
- break;
-
- case wetobj:
+ case aquamanobj:
points = 7;
- break;
- case treeobj:
+ break;
+
+ case wizardobj:
points = 7;
- break;
- case bunnyobj:
- points = 4;
- break;
+ break;
+
+ case trollobj:
+ points = 10;
+ break;
+
+ case invisdudeobj:
+ points = 10;
+ break;
+
+ case demonobj:
+ case cyborgdemonobj:
+ points = 15;
+ break;
+
}
+ points = EasyDoDamage(points);
TakeDamage (points);
ob->flags |= of_damagedone;
}
@@ -348,6 +346,12 @@ void ChaseThink (objtype *obj, boolean diagonal)
}
}
+ // Kluge to make the running eye stay in place if blocked, ie, not divert
+ // from path
+ if (obj->obclass == reyeobj)
+ return;
+
+
/* there is no direct path to the player, so pick another direction */
obj->dir=olddir;
@@ -465,11 +469,21 @@ boolean Chase (objtype *ob, boolean diagonal)
return true;
}
- if (move < ob->distance)
- {
+ if (move < ob->distance) //ob->distance - distance before you move
+ { // over into next tile
MoveObj (ob,move);
break;
}
+ else
+ if (ob->obclass == reyeobj) // Kludge for the "running eye"
+ {
+ if (ob->temp1 < 2)
+ {
+ MoveObj(ob, ob->distance/2);
+ ob->temp1 = 0;
+ }
+ }
+
actorat[ob->tilex][ob->tiley] = 0; // pick up marker from goal
if (ob->dir == nodir)
ob->dir = north;
@@ -478,7 +492,7 @@ boolean Chase (objtype *ob, boolean diagonal)
ob->y = ((long)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;
move -= ob->distance;
- ChaseThink (ob,diagonal);
+ ChaseThink (ob, diagonal);
if (!ob->distance)
break; // no possible move
actorat[ob->tilex][ob->tiley] = ob; // set down a new goal marker
@@ -500,86 +514,116 @@ boolean Chase (objtype *ob, boolean diagonal)
void ShootActor (objtype *ob, unsigned damage)
{
+
ob->hitpoints -= damage;
if (ob->hitpoints<=0)
{
switch (ob->obclass)
{
- case reddemonobj:
- ob->state = &s_red_demondie1;
- break;
- case succubusobj:
- ob->state = &s_succubus_death1;
- break;
- case fatdemonobj:
- ob->state = &s_fatdemon_blowup1;
- break;
- case godessobj:
- ob->state = &s_godessdie1;
- break;
- case mageobj:
- ob->state = &s_magedie1;
- break;
- case batobj:
- ob->state = &s_batdie1;
-#if USE_INERT_LIST
- ob->obclass = solidobj; // don't add this obj to inert list
-#endif
- break;
- case grelmobj:
- ob->state = &s_greldie1;
- break;
- case zombieobj:
- ob->state = &s_zombie_death1;
+ case headobj:
+ ob->state = &s_pshot_exp1;
+ ob->obclass = expobj;
+ ob->ticcount = ob->state->tictime;
+ SpawnBigExplosion(ob->x,ob->y,12,(16l<<16L));
+ break;
+
+ case aquamanobj:
+ ob->state = &s_aqua_die1;
+ ob->temp1 = 10;
+ break;
+
+ case wizardobj:
+ ob->state = &s_wizard_die1;
break;
- case skeletonobj:
+ case trollobj:
+ ob->state = &s_trolldie1;
+ break;
+
+ case blobobj:
+ ob->state = &s_blob_die1;
+ break;
+
+ case rayobj:
+ ob->state = &s_ray_die1;
+ break;
+
+ case ramboneobj:
ob->state = &s_skel_die1;
break;
- case antobj:
- ob->state = &s_ant_die1;
+ case fmageobj:
+ ob->state = &s_fmagedie1;
break;
- case wetobj:
- ob->state = &s_wet_die1;
-#if USE_INERT_LIST
- ob->obclass = solidobj; // don't add this obj to inert list
-#endif
+ case robotankobj:
+ ob->state = &s_robotank_death1;
+ ob->temp1 = 10;
+ break;
+
+ case stompyobj:
+ ob->state = &s_stompy_death1;
+ break;
+
+ case bugobj:
+ ob->state = &s_bug_death1;
+ break;
+
+ case demonobj:
+ ob->state = &s_demondie1;
+ break;
+
+ case cyborgdemonobj:
+ ob->state = &s_cyborg_demondie1;
+ break;
+
+ case invisdudeobj:
+ ob->state = &s_invis_death1;
+ break;
+
+ case grelmobj:
+ ob->state = &s_greldie1;
break;
case eyeobj:
ob->state = &s_eye_die1;
break;
- case sshotobj:
+ case reyeobj:
+ ob->state = &s_reye_die1;
+ break;
+
+ case bounceobj:
+ ob->state = &s_pshot_exp1;
+ ob->obclass = expobj;
+ ob->ticcount = ob->state->tictime;
+ SpawnBigExplosion(ob->x,ob->y,12,(16l<<16L));
+ break;
+
+ case rshotobj:
case eshotobj:
- case mshotobj:
+ case wshotobj:
+ case hshotobj:
+ case bshotobj:
+ case rbshotobj:
+ case fmshotobj:
+ case rtshotobj:
+ case syshotobj:
+ case bgshotobj:
ob->state = &s_bonus_die;
#if USE_INERT_LIST
ob->obclass = solidobj; // don't add these objs to inert list
#endif
break;
- case treeobj:
- ob->state = &s_tree_death1;
- ob->obclass = solidobj;
- ob->temp1 = 3;
- ob->flags &= ~of_damagedone;
- CalcBounds(ob);
- break;
-
- case bunnyobj:
- ob->state = &s_bunny_death1;
- break;
-
case bonusobj:
case freezeobj:
switch (ob->temp1)
{
case B_POTION:
+ case B_OLDCHEST:
case B_CHEST:
case B_NUKE:
case B_BOLT:
@@ -599,7 +643,6 @@ void ShootActor (objtype *ob, unsigned damage)
ob->obclass = solidobj; // don't add this obj to inert list
#endif
break;
-
}
if (ob->obclass != solidobj && ob->obclass != realsolidobj)
@@ -624,58 +667,69 @@ void ShootActor (objtype *ob, unsigned damage)
{
switch (ob->obclass)
{
- case reddemonobj:
- if (!(random(8)))
- ob->state = &s_red_demonouch;
+ case wizardobj:
+ ob->state = &s_wizard_ouch;
+ break;
+
+ case trollobj:
+ if (!random(5))
+ ob->state = &s_trollouch;
else
return;
- break;
- case succubusobj:
- ob->state = &s_succubus_ouch;
- break;
- case fatdemonobj:
- ob->state = &s_fatdemon_ouch;
- break;
- case godessobj:
- ob->state = &s_godessouch;
- break;
- case mageobj:
- ob->state = &s_mageouch;
- break;
+ break;
- case grelmobj:
- ob->state = &s_grelouch;
- break;
+ case blobobj:
+ ob->state = &s_blob_ouch;
+ break;
- case zombieobj:
- ob->state = &s_zombie_ouch;
+ case ramboneobj:
+ ob->state = &s_skel_ouch;
break;
- case antobj:
- ob->state = &s_ant_ouch;
- break;
+ case fmageobj:
+ ob->state = &s_fmageouch;
+ break;
- case skeletonobj:
- ob->state = &s_skel_ouch;
- break;
+ case stompyobj:
+ ob->state = &s_stompy_ouch;
+ break;
- case wetobj:
- ob->state = &s_wet_ouch;
- break;
+ case bugobj:
+ ob->state = &s_bug_ouch;
+ break;
- case eyeobj:
- ob->state = &s_eye_ouch;
+ case cyborgdemonobj:
+ if (!(random(8)))
+ ob->state = &s_cyborg_demonouch;
+ else
+ return;
break;
- case treeobj:
- ob->state = &s_tree_ouch;
+ case demonobj:
+ if (!(random(8)))
+ ob->state = &s_demonouch;
+ else
+ return;
+ break;
+
+ case invisdudeobj:
+ ob->state = &s_invis_fizz1;
+ break;
+
+ case grelmobj:
+ ob->state = &s_grelouch;
break;
- case bunnyobj:
- ob->state = &s_bunny_ouch;
+ case eyeobj:
+ ob->state = &s_eye_ouch;
+ break;
+
+ case reyeobj:
+ ob->state = &s_reye_ouch;
break;
}
}
+
ob->ticcount = ob->state->tictime;
}
diff --git a/C6_TRACE.C b/C6_TRACE.C
index d9ed20e..82ace1c 100644
--- a/C6_TRACE.C
+++ b/C6_TRACE.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/C6_WIZ.C b/C6_WIZ.C
index b899ef6..571ae3f 100644
--- a/C6_WIZ.C
+++ b/C6_WIZ.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -32,19 +32,19 @@
////////#define NUMSCROLLS 8
-#define SHOWITEMS 9
+#define SHOWITEMS 9
-#define NUKETIME 40
-#define NUMBOLTS 10
-#define BOLTTICS 6
+#define NUKETIME 40
+#define NUMBOLTS 10
+#define BOLTTICS 6
-#define STATUSCOLOR 8
-#define TEXTCOLOR 14
+#define STATUSCOLOR 1
+#define TEXTCOLOR 14
-#define SIDEBARWIDTH 5
+#define SIDEBARWIDTH 5
-#define BODYLINE 8
-#define POWERLINE 80
+#define BODYLINE 8
+#define POWERLINE 80
#define SPECTILESTART 0 // 18
@@ -53,24 +53,24 @@
#define BIGSHOTDAMAGE 3
-#define PLAYERSPEED 5120
-#define RUNSPEED (8192<<1)
+#define PLAYERSPEED 5120
+#define RUNSPEED (8192<<1)
-#define SHOTSPEED 10000
+#define SHOTSPEED 10000
-//#define LASTWALLTILE 47
+//#define LASTWALLTILE 47
//#define LASTSPECIALTILE 37
-#define LASTTILE (LASTWALLPIC-FIRSTWALLPIC) // 47
+#define LASTTILE (LASTWALLPIC-FIRSTWALLPIC) // 47
-#define FIRETIME 2
+#define FIRETIME 2
-#define HANDPAUSE 60
+#define HANDPAUSE 30
#define RIGHTEDGE 205;
#define LEFTEDGE 95;
-#define PRNY 32;
-#define WINX 10;
+#define PRNY 32;
+#define WINX 10;
#define WINY 32;
/*
@@ -602,9 +602,12 @@ void DrawHealth()
*/
void DrawFreezeTime()
{
+ short temp = fontcolor;
long percentage;
percentage = PERCENTAGE(100,MAXFREEZETIME,(long)FreezeTime,7);
+ fontcolor = 1 ^ 14;
DrawNum(23,70,percentage,3);
+ fontcolor = temp;
}
//===========================================================================
@@ -745,6 +748,14 @@ void DrawText (boolean draw_text_whether_it_needs_it_or_not)
text = (char _seg *)grsegs[LEVEL1TEXT+mapon]+textstarts[number];
+ if (text[0] == '@')
+ {
+ bordertime = 20;//FLASHTICS;
+ bcolor = 15;
+ VW_ColorBorder (15 | 56);
+ text++;
+ }
+
_fmemcpy (str,text,80);
DisplayMsg(str,NULL);
}
@@ -1091,7 +1102,7 @@ statetype s_pshot_exp3 = {PSHOT_EXP3PIC,7,NULL,NULL};
void SpawnPShot (void)
{
- DSpawnNewObjFrac (player->x,player->y,&s_pshot1,PIXRADIUS*7);
+ DSpawnNewObjFrac (player->x,player->y,&s_pshot1,PIXRADIUS*2);
new->obclass = pshotobj;
new->speed = SHOTSPEED;
new->angle = player->angle;
@@ -1154,7 +1165,7 @@ boolean JimsShotClipMove (objtype *ob, long xmove, long ymove)
ob->x -= xmove;
ob->y -= ymove;
- if (check->obclass != solidobj && check->obclass != hbunnyobj)
+ if (check->obclass != solidobj)
{
if (PlayMonsterSound(check->obclass))
SD_PlaySound (SHOOTMONSTERSND);
@@ -1281,7 +1292,7 @@ void T_Pshot (objtype *ob)
&& ob->yh >= check->yl)
{
- if (check->obclass != solidobj && check->obclass != hbunnyobj)
+ if (check->obclass != solidobj)
{
if (PlayMonsterSound(check->obclass))
SD_PlaySound (SHOOTMONSTERSND);
@@ -1521,7 +1532,7 @@ void ContinueBolt (void)
void CastNuke (void)
{
- extern boolean autofire;
+// extern boolean autofire;
int angle;
@@ -1531,7 +1542,7 @@ void CastNuke (void)
return;
}
- if (!autofire)
+// if (!autofire)
TakeNuke ();
lastnuke = TimeCount;
@@ -1778,8 +1789,7 @@ void TakeDamage (int points)
if (!gamestate.body || (bordertime && bcolor==FLASHCOLOR) || godmode)
return;
- if (points != 1)
- points = EasyDoDamage(points);
+ points = EasyDoDamage(points);
if (points >= gamestate.body)
{
@@ -1937,29 +1947,29 @@ boolean HitSpecialTile (unsigned x, unsigned y, unsigned tile)
short keyspot;
unsigned temp,spot,curmap=gamestate.mapon,newlevel;
char *key_colors[] = {"a RED key",
- "a YELLOW key",
- "a GREEN key",
- "a BLUE key"};
+ "a YELLOW key",
+ "a GREEN key",
+ "a BLUE key"};
switch (tile)
{
- case 65:
+ case 44:
playstate = ex_victorious;
break;
- case 9:
- case 15:
- case 27:
+ case 17:
case 30:
- case 40:
- case 42:
- case 43:
- case 45:
+ case 31:
+ case 35:
case 46:
case 47:
+ case 48:
case 49:
- case 76:
- case 77:
+ case 57:
+ case 58:
+ case 71:
+ case 85:
+ case 94:
if (!playstate && !FreezeTime)
{
@@ -2117,6 +2127,7 @@ boolean TouchActor (objtype *ob, objtype *check)
case B_SCROLL8: GiveScroll (check->temp1-B_SCROLL1,true); break;
#endif
+ case B_OLDCHEST:
case B_CHEST: GiveChest (); break;
case B_RGEM:
@@ -2144,10 +2155,6 @@ boolean TouchActor (objtype *ob, objtype *check)
(unsigned)actorat[check->tilex][check->tiley] = 0;
RemoveObj(check);
return(false);
-
- case cloudobj:
- TakeDamage(2);
- return false;
}
return true;
@@ -2528,7 +2535,7 @@ boolean ShotClipMove (objtype *ob, long xmove, long ymove)
case bigpshotobj:
ExplodeWall (x,y);
goto blockmove;
- break;
+// break;
}
tile = *(mapsegs[0]+farmapylookup[y]+x);
@@ -2540,7 +2547,8 @@ boolean ShotClipMove (objtype *ob, long xmove, long ymove)
blockmove:
- SD_PlaySound (SHOOTWALLSND);
+ if (ob->obclass == pshotobj)
+ SD_PlaySound (SHOOTWALLSND);
moveok = false;
@@ -2806,7 +2814,7 @@ void ControlMovement (objtype *ob)
void T_Player (objtype *ob)
{
- extern boolean autofire;
+// extern boolean autofire;
int angle,speed,scroll,loop;
unsigned text,tilex,tiley;
@@ -2842,7 +2850,7 @@ void T_Player (objtype *ob)
if (!button0down)
Shoot();
- if (!autofire)
+// if (!autofire)
button0down=true;
}
else
@@ -2897,7 +2905,7 @@ void T_Player (objtype *ob)
if (Keyboard[sc_Z] && !boltsleft)
CastBolt ();
- if ( (Keyboard[sc_Enter] || Keyboard[sc_X]) && ((TimeCount-lastnuke > NUKETIME) || (autofire)))
+ if ( (Keyboard[sc_Enter] || Keyboard[sc_X]) && ((TimeCount-lastnuke > NUKETIME))) //|| (autofire)))
CastNuke ();
#if 0
@@ -3142,45 +3150,90 @@ void FaceAngle(short DestAngle)
RadarXY[objnum++][2]=15;
break;
- // RED GEM
- //
- case godessobj:
- if (gamestate.gems[B_RGEM-B_RGEM])
- if (obj->active == always)
- RadarXY[objnum++][2]=12;
+ // RED GEM
+ //
+ // STOMPY (DK RED)
+ //
+ case invisdudeobj:
+ case stompyobj:
+ RadarXY[objnum++][2]=4;
break;
- // GREEN GEM
- //
- case fatdemonobj:
- if (gamestate.gems[B_GGEM-B_RGEM])
- if (obj->active == always)
- RadarXY[objnum++][2]=10;
+ // BLOB (LT RED)
+ //
+ case blobobj:
+ RadarXY[objnum++][2]=12;
break;
- // YELLOW GEM
- //
- case skeletonobj:
- if (gamestate.gems[B_YGEM-B_RGEM])
- if (obj->active == always)
- RadarXY[objnum++][2]=14;
+ // BLUE GEM
+ //
+ // ROBOTANK (LT BLUE)
+ //
+ case robotankobj:
+ case fmageobj:
+ RadarXY[objnum++][2]=9;
break;
- // BLUE GEM
- //
- case mageobj:
- case wetobj:
- if (gamestate.gems[B_BGEM-B_RGEM])
- if (obj->active == always)
- RadarXY[objnum++][2]=9;
+#if 1
+ // BLUE DEMON (DK BLUE)
+ //
+ case demonobj:
+ RadarXY[objnum++][2]=1;
+ break;
+#endif
+
+ // GREEN GEM
+ //
+ // WIZARD (LT GREEN)
+ //
+ case wizardobj:
+ RadarXY[objnum++][2]=10;
+ break;
+
+ // AQUA MAN (DK GREEN)
+ //
+ case aquamanobj:
+ RadarXY[objnum++][2]=2;
+ break;
+
+ // YELLOW GEM
+ //
+ // EQYPTIAN HEAD (BROWN)
+ //
+ case headobj:
+ RadarXY[objnum++][2]=6;
+ break;
+
+ // RAMBONE (YELLOW)
+ // TROLL
+ case ramboneobj:
+ case trollobj:
+ RadarXY[objnum++][2]=14;
+ break;
+
+ // BUG (LIGHT GRAY)
+ case bugobj:
+ RadarXY[objnum++][2]=7;
+ break;
+
+ // RAY (DARK GRAY)
+ case rayobj:
+ RadarXY[objnum++][2]=8;
+ break;
+
+ // PURPLE GEM
+ //
+ // MEC DEMON (PURPLE)
+ //
+ case cyborgdemonobj:
+ RadarXY[objnum++][2]=5;
break;
- // PURPLE GEM
- //
- case zombieobj:
- if (gamestate.gems[B_PGEM-B_RGEM])
- if (obj->active == always)
- RadarXY[objnum++][2]=13;
+ // EYE (LT PURPLE)
+ //
+ case eyeobj:
+ case reyeobj:
+ RadarXY[objnum++][2]=13;
break;
}
}
diff --git a/DEF.H b/DEF.H
index 63c5a05..22863ac 100644
--- a/DEF.H
+++ b/DEF.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -35,7 +35,7 @@
//
// SOFTLIB GFX FILENAME
//
-#define SLIB_GFX "ARM_SLIB."EXT
+#define SLIB_GFX "APC_SLIB."EXT
#define USE_INERT_LIST false
@@ -125,11 +125,10 @@
#define MOUSEINT 0x33
-#define EXPWALLSTART 8
#define NUMEXPWALLS 7
#define WALLEXP 59
-#define WATEREXP 62
-#define NUMFLOORS 80 //71
+#define WATEREXP 62
+#define NUMFLOORS 100
#define NUMLATCHPICS (FIRSTWALLPIC-FIRSTLATCHPIC) //+5
#define NUMSCALEPICS (FIRSTWALLPIC-FIRSTSCALEPIC) //+5
@@ -137,7 +136,7 @@
#define FLASHCOLOR 12
-#define FLASHTICS 4
+#define FLASHTICS 4
#define NUMLEVELS 32 //21
@@ -194,9 +193,8 @@
#define STATUSLINES (200-VIEWHEIGHT)
-enum bonusnumbers {B_BOLT,B_NUKE,B_POTION,B_RKEY,B_YKEY,B_GKEY,B_BKEY,B_SCROLL1,
- B_SCROLL2,B_SCROLL3,B_SCROLL4,B_SCROLL5,B_SCROLL6,B_SCROLL7,B_SCROLL8,
- B_GOAL,B_CHEST,B_RGEM,B_GGEM,B_BGEM,B_YGEM,B_PGEM};
+enum bonusnumbers {B_BOLT,B_NUKE,B_POTION,B_RKEY,B_YKEY,B_GKEY,B_BKEY,
+ B_GOAL,B_CHEST,B_OLDCHEST,B_RGEM,B_GGEM,B_BGEM,B_YGEM,B_PGEM};
#define MAX_DOOR_STORAGE 5
@@ -205,20 +203,20 @@ enum bonusnumbers {B_BOLT,B_NUKE,B_POTION,B_RKEY,B_YKEY,B_GKEY,B_BKEY,B_SCROLL1,
#define ROTATE_SPEED (6)
-#define WALL_SKELETON_CODE 6
+#define MAXREALTICS (2*60)
-#define MAXREALTICS (2*60)
+#define MAXFREEZETIME (100*30) // 50 secs (100 half)
-#define MAXFREEZETIME (100*30) // 50 secs (100 half)
-
-#define INVISIBLEWALL 0x46
+#define INVISIBLEWALL 0x46
#define USE_STRIPS FALSE
+#define SOUNDPLAYED 888
+
/*
=============================================================================
- GLOBAL TYPES
+ GLOBAL TYPES
=============================================================================
*/
@@ -239,15 +237,26 @@ typedef struct
} walltype;
typedef enum
- {nothing,playerobj,bonusobj,succubusobj,batobj,skeletonobj,fatdemonobj,godessobj,
- mageobj,pshotobj,bigpshotobj,mshotobj,inertobj,bounceobj,grelmobj,sshotobj,
- gateobj,zombieobj,antobj,wetobj,expobj,eyeobj,wallskelobj,eshotobj,treeobj,
- gshotobj,reddemonobj,freezeobj,solidobj,cloudobj,dshotobj,hbunnyobj,bunnyobj,
- realsolidobj} classtype;
+ {nothing, playerobj, bonusobj, aquamanobj, wizardobj, trollobj,
+ wshotobj, blobobj, bshotobj, fmageobj, ramboneobj, robotankobj,
+ rtshotobj, stompyobj, syshotobj, fmshotobj, rbshotobj, bugobj,
+ bgshotobj, cyborgdemonobj, invisdudeobj, bounceobj,
+ eyeobj, reyeobj, rayobj, rshotobj, headobj, hshotobj,
+ demonobj, pshotobj, grelmobj, freezeobj, solidobj, inertobj,
+ gateobj, realsolidobj, expobj, bigpshotobj, eshotobj,
+ gshotobj,
+
+
+// sshotobj,
+
+
+// dshotobj
+ } classtype;
typedef enum {north,east,south,west,northeast,southeast,southwest,
northwest,nodir} dirtype; // a catacombs 2 carryover
+
typedef struct statestruct
{
int shapenum;
@@ -258,11 +267,10 @@ typedef struct statestruct
#define statetype statetypestruct far
+
#define of_shootable 0x01
#define of_damagedone 0x02
#define of_forcefield 0x40 // defines a solid object as a forcefield???????????
-#define of_tree 0x80 // used to identify between a tree and a statue --
- // last minute changes for Greg
typedef struct objstruct
{
@@ -317,10 +325,10 @@ typedef enum {ex_stillplaying,ex_died,ex_warped,ex_resetgame
,ex_loadedgame,ex_victorious,ex_turning,ex_abort} exittype;
-typedef enum {S_NONE, S_HELP, S_SND, S_SAVING, S_RESTORING,
- S_JOYSTICK, S_RETREAT, S_ADVANCE, S_SIDESTEP, S_QTURN,
- S_MISSLE, S_ZAPPER, S_XTER, S_CURING, S_READ,
- S_VIEWING, S_ITEMDES, S_DAMAGE, S_TURN, S_TIMESTOP} status_flags;
+typedef enum { S_NONE, S_HELP, S_SND, S_SAVING, S_RESTORING,
+ S_JOYSTICK, S_RETREAT, S_ADVANCE, S_SIDESTEP, S_QTURN,
+ S_MISSLE, S_ZAPPER, S_XTER, S_CURING, S_READ,
+ S_VIEWING, S_ITEMDES, S_DAMAGE, S_TURN, S_TIMESTOP} status_flags;
typedef struct {
char x,y;
@@ -356,7 +364,7 @@ typedef struct
=============================================================================
*/
-extern char inlevel[][2];
+extern char inlevel[][2];
extern char str[80],str2[20];
extern unsigned tedlevelnum;
extern boolean tedlevel;
@@ -364,9 +372,12 @@ extern gametype gamestate;
extern exittype playstate;
extern char SlowMode;
extern unsigned Flags;
-extern boolean LoadShapes;
extern boolean EASYMODEON;
+void ExplosionSnd(objtype *ob);
+void LargeSound(objtype *ob);
+void SmallSound(objtype *ob);
+
void NewGame (void);
boolean SaveTheGame(int file);
@@ -531,7 +542,7 @@ extern boolean aborttrace;
=============================================================================
*/
-#define MAXWALLS 50
+#define MAXWALLS 50
#define DANGERHIGH 45
#define MIDWALL (MAXWALLS/2)
@@ -717,15 +728,14 @@ void SpawnBigExplosion(fixed x, fixed y, short Delay, fixed Range);
=============================================================================
*/
-int EasyHitPoints(int NrmHitPts);
-int EasyDoDamage(int Damage);
-
-#define zombie_mode ob->temp1
-#define zombie_delay ob->temp2
+#define head_mode ob->temp1
+#define head_delay ob->temp2
-enum zombie_modes {zm_wait_for_dark,zm_wait_to_rise,zm_active};
+enum head_modes {h_wait_to_rise, h_active, h_other1, h_player1, h_other2,
+ h_player2, h_other3, h_player3, h_other4, h_player4};
-enum eye_modes {em_other1,em_player1,em_other2,em_player2,em_other3,em_player3,em_other4,em_player4,em_dummy};
+enum shooter_modes {sm_other1, sm_player1, sm_other2, sm_player2, sm_other3,
+ sm_player3, sm_other4, sm_player4, sm_dummy};
#define MSHOTDAMAGE 2
#define MSHOTSPEED 10000
@@ -740,46 +750,125 @@ enum eye_modes {em_other1,em_player1,em_other2,em_player2,em_other3,em_player3,e
extern dirtype dirtable[];
extern short other_x[], other_y[];
-extern short zombie_base_delay;
-
-extern statetype s_fatdemon_ouch;
-extern statetype s_fatdemon_blowup1;
-
-extern statetype s_succubus_ouch;
-extern statetype s_succubus_death1;
+extern short head_base_delay;
-extern statetype s_godessouch;
-extern statetype s_godessdie1;
+void T_AlternateStates(objtype *ob);
+int EasyHitPoints(int NrmHitPts);
+int EasyDoDamage(int Damage);
-extern statetype s_mageouch;
-extern statetype s_magedie1;
+////////////////////////////////////////////////////////////////////////////
+//
+// New monsters added for Apocalypse
+//
+////////////////////////////////////////////////////////////////////////////
-extern statetype s_grelouch;
-extern statetype s_greldie1;
+//
+// Bonus states
+//
+extern statetype s_boltbonus;
+extern statetype s_boltbonus2;
+extern statetype s_boltbonus3;
+extern statetype s_nukebonus;
+extern statetype s_nukebonus2;
+extern statetype s_nukebonus3;
+extern statetype s_potionbonus;
+extern statetype s_rkeybonus;
+extern statetype s_ykeybonus;
+extern statetype s_gkeybonus;
+extern statetype s_bkeybonus;
+extern statetype s_chestbonus;
+extern statetype s_oldchestbonus;
+extern statetype s_waterchestbonus1;
+extern statetype s_waterchestbonus2;
+extern statetype s_waterchestbonus3;
+extern statetype s_rgem1bonus;
+extern statetype s_ygem1bonus;
+extern statetype s_ggem1bonus;
+extern statetype s_bgem1bonus;
+extern statetype s_pgem1bonus;
+extern statetype s_bonus_die;
-extern statetype s_batdie1;
+//
+// AquaMan states
+//
+extern statetype s_aqua_under1;
+extern statetype s_aqua_under2;
+extern statetype s_aqua_under3;
+extern statetype s_aqua_left;
+extern statetype s_aqua_right;
+extern statetype s_aqua_rise1;
+extern statetype s_aqua_rise2;
+extern statetype s_aqua_sink1;
+extern statetype s_aqua_sink2;
+extern statetype s_aqua_walk1;
+extern statetype s_aqua_walk2;
+extern statetype s_aqua_attack1;
+extern statetype s_aqua_attack2;
+extern statetype s_aqua_die1;
+extern statetype s_aqua_die2;
+extern statetype s_aqua_die3;
+extern statetype s_aqua_die4;
+extern statetype s_aqua_die5;
+extern statetype s_aqua_die6;
+extern statetype s_aqua_die7;
-extern statetype s_zombie_death1;
-extern statetype s_zombie_ouch;
+//
+// Wizard states
+//
+extern statetype s_wizard_walk1;
+extern statetype s_wizard_walk2;
+extern statetype s_wizard_walk3;
+extern statetype s_wizard_walk4;
+extern statetype s_wizard_attack1;
+extern statetype s_wizard_attack2;
+extern statetype s_wizard_ouch;
+extern statetype s_wizard_die1;
+extern statetype s_wizard_die2;
+extern statetype s_wizard_die3;
+extern statetype s_wizard_die4;
+extern statetype s_wizard_shoot1;
+extern statetype s_wizard_shoot2;
+extern statetype s_wizard_shoot3;
+extern statetype s_wizard_shot1;
+extern statetype s_wizard_shot2;
-extern statetype s_zombie_rise1;
-extern statetype s_zombie_rise2;
-extern statetype s_zombie_rise3;
-extern statetype s_zombie_rise4;
+//
+// Troll states
+//
+extern statetype s_trollpause;
+extern statetype s_troll1;
+extern statetype s_troll2;
+extern statetype s_troll3;
+extern statetype s_troll4;
+extern statetype s_trollattack1;
+extern statetype s_trollattack2;
+extern statetype s_trollouch;
+extern statetype s_trolldie1;
+extern statetype s_trolldie2;
+extern statetype s_trolldie3;
-extern statetype s_ant_wait;
-extern statetype s_ant_egg;
-extern statetype s_ant_walk1;
-extern statetype s_ant_walk2;
-extern statetype s_ant_walk3;
-extern statetype s_ant_attack1;
-extern statetype s_ant_pause;
-extern statetype s_ant_ouch;
-extern statetype s_ant_die1;
-extern statetype s_ant_die2;
-extern statetype s_ant_die3;
+//
+// Blob states
+//
+extern statetype s_blob_gnd1;
+extern statetype s_blob_gnd2;
+extern statetype s_blob_rise1;
+extern statetype s_blob_rise2;
+extern statetype s_blob_sink1;
+extern statetype s_blob_sink2;
+extern statetype s_blob_walk1;
+extern statetype s_blob_walk2;
+extern statetype s_blob_walk3;
+extern statetype s_blob_ouch;
+extern statetype s_blob_die1;
+extern statetype s_blob_die2;
+extern statetype s_blob_die3;
+extern statetype s_blob_shot1;
+extern statetype s_blob_shot2;
-extern statetype s_skel_pause;
+//
+// RamBone states
+//
extern statetype s_skel_1;
extern statetype s_skel_2;
extern statetype s_skel_3;
@@ -787,79 +876,248 @@ extern statetype s_skel_4;
extern statetype s_skel_attack1;
extern statetype s_skel_attack2;
extern statetype s_skel_attack3;
+extern statetype s_skel_attack4;
extern statetype s_skel_ouch;
extern statetype s_skel_die1;
extern statetype s_skel_die2;
extern statetype s_skel_die3;
+extern statetype s_skel_shot1;
+extern statetype s_skel_shot2;
-extern statetype s_wet_pause;
-
-extern statetype s_wet_bubbles1;
-extern statetype s_wet_bubbles2;
-extern statetype s_wet_bubbles3;
-extern statetype s_wet_bubbles4;
-
-extern statetype s_wet_peek;
+//
+// Future Mage states
+//
+extern statetype s_fmage1;
+extern statetype s_fmage2;
+extern statetype s_fmage3;
+extern statetype s_fmageattack1;
+extern statetype s_fmageattack2;
+extern statetype s_fmageattack3;
+extern statetype s_fmageouch;
+extern statetype s_fmagedie1;
+extern statetype s_fmagedie2;
+extern statetype s_fmagedie3;
+extern statetype s_fmshot1;
+extern statetype s_fmshot2;
-extern statetype s_wet_rise1;
-extern statetype s_wet_rise2;
-extern statetype s_wet_rise3;
-extern statetype s_wet_rise4;
-extern statetype s_wet_rise5;
+//
+// Robo Tank states
+//
+extern statetype s_robotank_walk1;
+extern statetype s_robotank_walk2;
+extern statetype s_robotank_walk3;
+extern statetype s_robotank_walk4;
+extern statetype s_robotank_attack1;
+extern statetype s_robotank_attack2;
+extern statetype s_robotank_attack3;
+extern statetype s_robotank_attack4;
+extern statetype s_robotank_death1;
+extern statetype s_robotank_death2;
+extern statetype s_robotank_death3;
+extern statetype s_robotank_death4;
+extern statetype s_robotank_death5;
+extern statetype s_robotank_shot1;
+extern statetype s_robotank_shot2;
-extern statetype s_wet_sink1;
-extern statetype s_wet_sink2;
-extern statetype s_wet_sink3;
+//
+// Stompy states
+//
+extern statetype s_stompy_walk1;
+extern statetype s_stompy_walk2;
+extern statetype s_stompy_walk3;
+extern statetype s_stompy_walk4;
+extern statetype s_stompy_attack1;
+extern statetype s_stompy_attack2;
+extern statetype s_stompy_attack3;
+extern statetype s_stompy_attack4;
+extern statetype s_stompy_ouch;
+extern statetype s_stompy_death1;
+extern statetype s_stompy_death2;
+extern statetype s_stompy_death3;
+extern statetype s_stompy_death4;
+extern statetype s_stompy_shot1;
+extern statetype s_stompy_shot2;
+extern statetype s_stompy_shot3;
+extern statetype s_stompy_shot4;
+extern statetype s_stompy_shot5;
+extern statetype s_stompy_shot6;
-extern statetype s_wet_walk1;
-extern statetype s_wet_walk2;
-extern statetype s_wet_walk3;
-extern statetype s_wet_walk4;
+//
+// Bug states
+//
+extern statetype s_bug_walk1;
+extern statetype s_bug_walk2;
+extern statetype s_bug_walk3;
+extern statetype s_bug_attack1;
+extern statetype s_bug_attack2;
+extern statetype s_bug_attack3;
+extern statetype s_bug_attack4;
+extern statetype s_bug_ouch;
+extern statetype s_bug_death1;
+extern statetype s_bug_death2;
+extern statetype s_bug_shot1;
+extern statetype s_bug_shot2;
-extern statetype s_wet_attack1;
-extern statetype s_wet_attack2;
-extern statetype s_wet_attack3;
-extern statetype s_wet_attack4;
+//
+// Cyborg states
+//
+extern statetype s_cyborg_demon1;
+extern statetype s_cyborg_demon2;
+extern statetype s_cyborg_demon3;
+extern statetype s_cyborg_demon4;
+extern statetype s_cyborg_demonattack1;
+extern statetype s_cyborg_demonattack2;
+extern statetype s_cyborg_demonattack3;
+extern statetype s_cyborg_demonouch;
+extern statetype s_cyborg_demondie1;
+extern statetype s_cyborg_demondie2;
+extern statetype s_cyborg_demondie3;
-extern statetype s_wet_ouch;
+//
+// Invisible Dude
+//
+extern statetype s_invis_fizz1;
+extern statetype s_invis_fizz2;
+extern statetype s_invis_fizz3;
+extern statetype s_invis_walk;
+extern statetype s_invis_attack;
+extern statetype s_invis_pause;
+extern statetype s_invis_flash1;
+extern statetype s_invis_flash2;
+extern statetype s_invis_flash3;
+extern statetype s_invis_death1;
+extern statetype s_invis_death2;
+extern statetype s_invis_death3;
-extern statetype s_wet_die1;
-extern statetype s_wet_die2;
-extern statetype s_wet_die3;
-extern statetype s_wet_die4;
-extern statetype s_wet_die5;
+//
+// Bounce
+//
+extern statetype s_bounce1;
+extern statetype s_bounce2;
-extern statetype s_obj_gate1;
-extern statetype s_obj_gate2;
-extern statetype s_obj_gate3;
-extern statetype s_obj_gate4;
+//
+// Grelminar or Nemesis
+//
+extern statetype s_grelpause;
+extern statetype s_grel1;
+extern statetype s_grel2;
+extern statetype s_grelattack3;
+extern statetype s_grelouch;
+extern statetype s_greldie1;
+extern statetype s_greldie2;
+extern statetype s_greldie3;
+extern statetype s_greldie4;
+extern statetype s_greldie5;
+extern statetype s_greldie5a;
+extern statetype s_greldie6;
+extern statetype s_gshot1;
+//
+// Eye states - shooting eye
+//
extern statetype s_eye_pause;
-
extern statetype s_eye_1;
extern statetype s_eye_2;
extern statetype s_eye_3;
extern statetype s_eye_4;
-
+extern statetype s_eye_shootplayer_1;
+extern statetype s_eye_shootplayer_2;
extern statetype s_eye_ouch;
extern statetype s_eye_ouch2;
-
extern statetype s_eye_die1;
extern statetype s_eye_die2;
extern statetype s_eye_die3;
+extern statetype s_eye_die4;
+extern statetype s_eshot1;
+extern statetype s_eshot2;
-extern statetype s_mshot1;
-extern statetype s_mshot2;
+//
+// Running Eye states
+//
+extern statetype s_reye_1;
+extern statetype s_reye_2;
+extern statetype s_reye_3;
+extern statetype s_reye_4;
+extern statetype s_reye_ouch;
+extern statetype s_reye_ouch2;
+extern statetype s_reye_die1;
+extern statetype s_reye_die2;
+extern statetype s_reye_die3;
+extern statetype s_reye_die4;
-extern statetype s_bonus_die;
+//
+// Ray states
+//
+extern statetype s_ray_under;
+extern statetype s_ray_rise;
+extern statetype s_ray_sink;
+extern statetype s_ray_fly1;
+extern statetype s_ray_fly2;
+extern statetype s_ray_fly3;
+extern statetype s_ray_fly4;
+extern statetype s_ray_attack1;
+extern statetype s_ray_attack2;
+extern statetype s_ray_attack3;
+extern statetype s_ray_die1;
+extern statetype s_ray_die2;
+extern statetype s_ray_shot1;
+extern statetype s_ray_shot2;
-extern statetype s_red_demonouch;
-extern statetype s_red_demondie1;
+//
+// Portal states
+//
+extern statetype s_portal1;
+extern statetype s_portal2;
+extern statetype s_portal3;
+extern statetype s_portal4;
+extern statetype s_portal5;
+extern statetype s_portal6;
-extern statetype s_bunny_death1;
-extern statetype s_bunny_ouch;
+//
+// Misc states
+//
+extern statetype s_column1;
+extern statetype s_column2;
+extern statetype s_column3;
+extern statetype s_column4;
+extern statetype s_column5;
+extern statetype s_ffire_pot;
+extern statetype s_ofire_pot1;
+extern statetype s_ofire_pot2;
+extern statetype s_tomb1;
+extern statetype s_tomb2;
+extern statetype s_tomb3;
+
+//
+// Force Field states
+//
+extern statetype s_force_field_1;
+extern statetype s_force_field_2;
+extern statetype s_force_field_3;
+extern statetype s_force_field_4;
+extern statetype s_force_field_die;
+extern statetype s_force_field_die1;
+
+//
+// Egyptian head states
+//
+extern statetype s_head;
+extern statetype s_head_shot1;
+extern statetype s_head_shot2;
-extern statetype s_tree_death1;
-extern statetype s_tree_ouch;
-extern statetype s_force_field_die; \ No newline at end of file
+//
+// Blue Demon states
+//
+extern statetype s_demonpause;
+extern statetype s_demon1;
+extern statetype s_demon2;
+extern statetype s_demon3;
+extern statetype s_demon4;
+extern statetype s_demonattack1;
+extern statetype s_demonattack2;
+extern statetype s_demonattack3;
+extern statetype s_demonouch;
+extern statetype s_demondie1;
+extern statetype s_demondie2;
+extern statetype s_demondie3;
diff --git a/GELIB.C b/GELIB.C
index 5e0bd6f..3048373 100644
--- a/GELIB.C
+++ b/GELIB.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/GELIB.H b/GELIB.H
index eb25be6..310d643 100644
--- a/GELIB.H
+++ b/GELIB.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -31,9 +31,9 @@
#define SAVEVER_DATA "0.01"
#define FILENAME_LEN 15
-#define GAMENAME "CATACOMB ARMAGEDDON 3-D"
-#define VERSION "V1.02"
-#define REVISION " rev 1 "
+#define GAMENAME "CATACOMB APOCALYPSE 3-D"
+#define VERSION "1.01"
+#define REVISION "(rev 1)"
//#define BOBLIST 1 //SP - Undefine if not using BOBList
diff --git a/GFXE_APC.EQU b/GFXE_APC.EQU
index f833b11..b3b1ba2 100644
--- a/GFXE_APC.EQU
+++ b/GFXE_APC.EQU
@@ -1,7 +1,7 @@
;=====================================
;
-; Graphics .EQU file for .ARM
-; IGRAB-ed on Thu Dec 02 13:59:00 1993
+; Graphics .EQU file for .APC
+; IGRAB-ed on Thu Dec 02 16:04:06 1993
;
;=====================================
@@ -21,522 +21,522 @@ RADAR_BGEMPIC = 16
RADAR_YGEMPIC = 17
RADAR_PGEMPIC = 18
FIRSTGROUNDPIC = 19
-FIRSTSTRIPPIC = 20
-FIRSTSCALEPIC = 21
-SKELETON_1PIC = 22
-SKELETON_2PIC = 23
-SKELETON_3PIC = 24
-SKELETON_4PIC = 25
-SKELETON_ATTACK_1PIC = 26
-SKELETON_ATTACK_2PIC = 27
-SKELETON_ATTACK_3PIC = 28
-SKELETON_OUCHPIC = 29
-SKELETON_DEATH_1PIC = 30
-SKELETON_DEATH_2PIC = 31
-TOMB1PIC = 32
-TOMB2PIC = 33
-TOMB3PIC = 34
-OBJ_WARP1PIC = 35
-OBJ_WARP2PIC = 36
-OBJ_WARP3PIC = 37
-OBJ_WARP4PIC = 38
-EYE_WALK1PIC = 39
-EYE_WALK2PIC = 40
-EYE_WALK3PIC = 41
-EYE_OUCH1PIC = 42
-EYE_OUCH2PIC = 43
-EYE_DEATH1PIC = 44
-EYE_DEATH2PIC = 45
-EYE_DEATH3PIC = 46
-EYE_SCOWLPIC = 47
-EYE_SHOT1PIC = 48
-EYE_SHOT2PIC = 49
-ZOMB_APPEAR1PIC = 50
-ZOMB_APPEAR2PIC = 51
-ZOMB_APPEAR3PIC = 52
-ZOMB_APPEAR4PIC = 53
-ZOMB_WALK1PIC = 54
-ZOMB_WALK2PIC = 55
-ZOMB_WALK3PIC = 56
-ZOMB_OUCHPIC = 57
-ZOMB_ATTACKPIC = 58
-ZOMB_DIE1PIC = 59
-ZOMB_DIE2PIC = 60
-ZOMB_DIE3PIC = 61
-BOLTOBJPIC = 62
-BOLT2OBJPIC = 63
-BOLT3OBJPIC = 64
-NUKEOBJPIC = 65
-NUKE2OBJPIC = 66
-NUKE3OBJPIC = 67
-TIMEOBJ1PIC = 68
-TIMEOBJ2PIC = 69
-O_WATER_CHEST1PIC = 70
-O_WATER_CHEST2PIC = 71
-POTIONOBJPIC = 72
-RKEYOBJPIC = 73
-YKEYOBJPIC = 74
-GKEYOBJPIC = 75
-BKEYOBJPIC = 76
-RGEM1PIC = 77
-RGEM2PIC = 78
-GGEM1PIC = 79
-GGEM2PIC = 80
-BGEM1PIC = 81
-BGEM2PIC = 82
-YGEM1PIC = 83
-YGEM2PIC = 84
-PGEM1PIC = 85
-PGEM2PIC = 86
-CHESTOBJPIC = 87
-PSHOT1PIC = 88
-PSHOT2PIC = 89
-PSHOT_EXP1PIC = 90
-PSHOT_EXP2PIC = 91
-PSHOT_EXP3PIC = 92
-RED_DEMON1PIC = 93
-RED_DEMON2PIC = 94
-RED_DEMON3PIC = 95
-RED_DEMON4PIC = 96
-RED_DEMONATTACK1PIC = 97
-RED_DEMONATTACK2PIC = 98
-RED_DEMONATTACK3PIC = 99
-RED_DEMONOUCHPIC = 100
-RED_DEMONDIE1PIC = 101
-RED_DEMONDIE2PIC = 102
-RED_DEMONDIE3PIC = 103
-MAGE1PIC = 104
-MAGE2PIC = 105
-MAGEOUCHPIC = 106
-MAGEATTACKPIC = 107
-MAGEDIE1PIC = 108
-MAGEDIE2PIC = 109
-BAT1PIC = 110
-BAT2PIC = 111
-BAT3PIC = 112
-BAT4PIC = 113
-BATDIE1PIC = 114
-BATDIE2PIC = 115
-GREL1PIC = 116
-GREL2PIC = 117
-GRELATTACKPIC = 118
-GRELHITPIC = 119
-GRELDIE1PIC = 120
-GRELDIE2PIC = 121
-GRELDIE3PIC = 122
-GRELDIE4PIC = 123
-GRELDIE5PIC = 124
-GRELDIE6PIC = 125
-SKULL_SHOTPIC = 126
-GODESS_WALK1PIC = 127
-GODESS_WALK2PIC = 128
-GODESS_WALK3PIC = 129
-GODESS_ATTACK1PIC = 130
-GODESS_ATTACK2PIC = 131
-GODESS_ATTACK3PIC = 132
-GODESS_STATUEPIC = 133
-GODESS_OUCHPIC = 134
-GODESS_DEATH1PIC = 135
-GODESS_DEATH2PIC = 136
-ANT_EGG1PIC = 137
-ANT_EGG2PIC = 138
-ANT_WALK1PIC = 139
-ANT_WALK2PIC = 140
-ANT_WALK3PIC = 141
-ANT_ATTACKPIC = 142
-ANT_DEATH1PIC = 143
-ANT_DEATH2PIC = 144
-ANT_DEATH3PIC = 145
-FATDEMON_WALK1PIC = 146
-FATDEMON_WALK2PIC = 147
-FATDEMON_WALK3PIC = 148
-FATDEMON_WALK4PIC = 149
-FATDEMON_ATTACK1PIC = 150
-FATDEMON_ATTACK2PIC = 151
-FATDEMON_OUCHPIC = 152
-FATDEMON_BLOWUP1PIC = 153
-FATDEMON_BLOWUP2PIC = 154
-FATDEMON_BLOWUP3PIC = 155
-FATDEMON_EXPLODEPIC = 156
-FATDEMON_FEETPIC = 157
-SUCCUBUS_WALK1PIC = 158
-SUCCUBUS_WALK2PIC = 159
-SUCCUBUS_WALK3PIC = 160
-SUCCUBUS_WALK4PIC = 161
-SUCCUBUS_ATTACK1PIC = 162
-SUCCUBUS_ATTACK2PIC = 163
-SUCCUBUS_OUCHPIC = 164
-SUCCUBUS_DEATH1PIC = 165
-SUCCUBUS_DEATH2PIC = 166
-SUCCUBUS_SHOT1PIC = 167
-TREE_IDLEPIC = 168
-TREE_AWAKENINGPIC = 169
-TREE_WALK1PIC = 170
-TREE_WALK2PIC = 171
-TREE_ATTACK1PIC = 172
-TREE_ATTACK2PIC = 173
-TREE_ATTACK3PIC = 174
-TREE_DEATH1PIC = 175
-TREE_DEATH2PIC = 176
-TREE_DEATH3PIC = 177
-DRAGON_BUBBLES1PIC = 178
-DRAGON_BUBBLES2PIC = 179
-DRAGON_EYESPIC = 180
-DRAGON_RISE1PIC = 181
-DRAGON_RISE2PIC = 182
-DRAGON_WALK1PIC = 183
-DRAGON_WALK2PIC = 184
-DRAGON_WALK3PIC = 185
-DRAGON_WALK4PIC = 186
-DRAGON_ATTACK1PIC = 187
-DRAGON_ATTACK2PIC = 188
-DRAGON_ATTACK3PIC = 189
-DRAGON_OUCHPIC = 190
-DRAGON_DEATH1PIC = 191
-DRAGON_DEATH2PIC = 192
-DRAGON_DEATH3PIC = 193
-BUNNY_LEFT1PIC = 194
-BUNNY_LEFT2PIC = 195
-BUNNY_RIGHT1PIC = 196
-BUNNY_RIGHT2PIC = 197
-BUNNY_META1PIC = 198
-BUNNY_META2PIC = 199
-BUNNY_WALK1PIC = 200
-BUNNY_WALK2PIC = 201
-BUNNY_OUCHPIC = 202
-BUNNY_DEATH1PIC = 203
-BUNNY_DEATH2PIC = 204
-ARCH1PIC = 205
-ARCH2PIC = 206
-ARCH3PIC = 207
-ARCH4PIC = 208
-ARCH5PIC = 209
-ARCH6PIC = 210
-ARCH7PIC = 211
-ARCH8PIC = 212
-ARCH9PIC = 213
-ARCH10PIC = 214
-ARCH11PIC = 215
-ARCH12PIC = 216
-ARCH13PIC = 217
-ANT_HILLPIC = 218
-COLUMNPIC = 219
-SULPHUR_GAS_1PIC = 220
-SULPHUR_GAS_2PIC = 221
-SULPHUR_GAS_3PIC = 222
-FIRE_POT_1PIC = 223
-FIRE_POT_2PIC = 224
-SKEL_HANGPIC = 225
-FORCE_FIELD_1PIC = 226
-FORCE_FIELD_2PIC = 227
-FORCE_FIELD_3PIC = 228
-FORCE_FIELD_4PIC = 229
-WFOUNTAINPIC = 230
-FIRSTWALLPIC = 231
-CRYSTAL_LIGHT_1PIC = 232
-CRYSTAL_LIGHT_2PIC = 233
-CRYSTAL_LIGHT_3PIC = 234
-CRYSTAL_LIGHT_4PIC = 235
-CRYSTAL_DARK_1PIC = 236
-CRYSTAL_DARK_2PIC = 237
-CRYSTAL_DARK_3PIC = 238
-CRYSTAL_DARK_4PIC = 239
-FIRE_WALL_1PIC = 240
-FIRE_WALL_2PIC = 241
-FIRE_WALL_3PIC = 242
-FIRE_WALL_4PIC = 243
-BRN_STONE_GATEPIC = 244
-BRN_STONE_WALL_1PIC = 245
-BRN_STONE_WALL_2PIC = 246
-KUDZU_LIGHT_WALLPIC = 247
-KUDZU_DARK_WALLPIC = 248
-HEDGE_WALLPIC = 249
-HEDGE_EYESPIC = 250
-BRN_WINDOW_LIGHTPIC = 251
-ALTAR_LEFTPIC = 252
-ALTAR_RIGHTPIC = 253
-GRAY_LIGHT_WALLPIC = 254
-GRAY_DARK_WALLPIC = 255
-GRAY_LIGHT_SIGNPIC = 256
-GRAY_DARK_SIGNPIC = 257
-MANICLE_LIGHT_BLOODYPIC = 258
-MANICLE_DARK_BLOODYPIC = 259
-LIGHT_CURTAIN_WINDOWPIC = 260
-LIGHT_CURTAIN_WALLPIC = 261
-DARK_CURTAIN_WINDOWPIC = 262
-DARK_CURTAIN_WALLPIC = 263
-BRN_LIGHT_SIGNPIC = 264
-BRN_DARK_SIGNPIC = 265
-LIGHT_STONE_WALLPIC = 266
-DARK_STONE_WALLPIC = 267
-BRN_FLAGSTONE_LIGHT_2PIC = 268
-BRN_FLAGSTONE_DARK_2PIC = 269
-RUST_METAL_LIGHTPIC = 270
-RUST_METAL_DARKPIC = 271
-GRAY_METAL_LIGHTPIC = 272
-GRAY_METAL_DARKPIC = 273
-WEAK_STONE_LIGHTPIC = 274
-WEAK_STONE_DARKPIC = 275
-WEAK_GRAY_RFGSTN_LIGHTPIC = 276
-WEAK_GRAY_RFGSTN_DARKPIC = 277
-WEAK_CRYSTAL_LIGHTPIC = 278
-WEAK_CRYSTAL_DARKPIC = 279
-RED_MUD_LIGHTPIC = 280
-BRN_MUD_DARKPIC = 281
-RED_MUD_WEAK_LIGHTPIC = 282
-BRN_MUD_WEAK_DARKPIC = 283
-HORN_DOORPIC = 284
-CLOSED_DOOR_1PIC = 285
-DOOR_2PIC = 286
-WATER_LIGHT_WEAK_1PIC = 287
-WATER_LIGHT_WEAK_2PIC = 288
-WATER_LIGHT_WEAK_3PIC = 289
-WATER_DARK_WEAK_1PIC = 290
-WATER_DARK_WEAK_2PIC = 291
-WATER_DARK_WEAK_3PIC = 292
-WATER_LIGHT_1PIC = 293
-WATER_LIGHT_2PIC = 294
-WATER_LIGHT_3PIC = 295
-WATER_DARK_1PIC = 296
-WATER_DARK_2PIC = 297
-WATER_DARK_3PIC = 298
-TROLL_LIGHT_STONEPIC = 299
-TROLL_DARK_STONEPIC = 300
-TROLL_BLOODY_LT_STONEPIC = 301
-TROLL_BLOODY_DK_STONEPIC = 302
-LIGHT_BREATH_1PIC = 303
-LIGHT_BREATH_2PIC = 304
-LIGHT_BREATH_3PIC = 305
-DARK_BREATH_1PIC = 306
-DARK_BREATH_2PIC = 307
-DARK_BREATH_3PIC = 308
-EXP_WALL_1PIC = 309
-EXP_WALL_2PIC = 310
-EXP_WALL_3PIC = 311
-WATER_EXP_WALL_1PIC = 312
-WATER_EXP_WALL_2PIC = 313
-WATER_EXP_WALL_3PIC = 314
-W_GEN_DOOR1PIC = 315
-W_GEN_DOOR2PIC = 316
-W_CRYSTAL_DOORPIC = 317
-DMG_BRN_FSTN_LTPIC = 318
-DMG_BRN_FSTN_DKPIC = 319
-DMG_FIN_FSTN_LTPIC = 320
-DMG_FIN_FSTN_DKPIC = 321
-STEEL_DOOR1PIC = 322
-STEEL_DOOR2PIC = 323
-BRN_WINDOW_DARKPIC = 324
-GRY_DOOR_LTPIC = 325
-GRY_DOOR_DKPIC = 326
-BRN_DOOR_LTPIC = 327
-BRN_DOOR_DKPIC = 328
-GRY_FGSTN_LTPIC = 329
-GRY_FGSTN_DKPIC = 330
-KUDZU_WEAK_LIGHTPIC = 331
-KUDZU_WEAK_DARKPIC = 332
-LT_SKEL1PIC = 333
-DK_SKEL1PIC = 334
-LT_SKEL2PIC = 335
-DK_SKEL2PIC = 336
-MANICLE_LIGHT_WALLPIC = 337
-MANICLE_DARK_WALLPIC = 338
-TAP_1PIC = 339
-TAP_2PIC = 340
-TAP_3PIC = 341
-TAP_4PIC = 342
-TAP_5PIC = 343
-FINALWALLPIC = 344
-WATER_DOOR1_PIC = 345
-WATER_DOOR2_PIC = 346
-LASTWALLPIC = 347
-
-HAND1PICM = 348
-
-NORTHICONSPR = 349
-
-LEVEL1TEXT = 640
-LEVEL2TEXT = 641
-LEVEL3TEXT = 642
-LEVEL4TEXT = 643
-LEVEL5TEXT = 644
-LEVEL6TEXT = 645
-LEVEL7TEXT = 646
-LEVEL8TEXT = 647
-LEVEL9TEXT = 648
-LEVEL10TEXT = 649
-LEVEL11TEXT = 650
-LEVEL12TEXT = 651
-LEVEL13TEXT = 652
-LEVEL14TEXT = 653
-LEVEL15TEXT = 654
-LEVEL16TEXT = 655
-LEVEL17TEXT = 656
-PIRACY = 657
-
-SKELDUDE_LUMP_START = 22
-SKELDUDE_LUMP_END = 31
-
-TOMBSTONES_LUMP_START = 32
-TOMBSTONES_LUMP_END = 34
-
-OBJ_WARP_LUMP_START = 35
-OBJ_WARP_LUMP_END = 38
-
-EYE_LUMP_START = 39
-EYE_LUMP_END = 49
-
-ZOMBIE_LUMP_START = 50
-ZOMBIE_LUMP_END = 61
-
-BOLT_LUMP_START = 62
-BOLT_LUMP_END = 64
-
-NUKE_LUMP_START = 65
-NUKE_LUMP_END = 67
-
-TIME_LUMP_START = 68
-TIME_LUMP_END = 69
-
-O_WATER_CHEST_LUMP_START = 70
-O_WATER_CHEST_LUMP_END = 71
-
-POTION_LUMP_START = 72
-POTION_LUMP_END = 72
-
-RKEY_LUMP_START = 73
-RKEY_LUMP_END = 73
-
-YKEY_LUMP_START = 74
-YKEY_LUMP_END = 74
-
-GKEY_LUMP_START = 75
-GKEY_LUMP_END = 75
+FIRSTSCALEPIC = 20
+EYESTALKUNDER1PIC = 21
+EYESTALKUNDER2PIC = 22
+EYESTALKUNDER3PIC = 23
+EYESTALKUNDER4PIC = 24
+EYESTALKUNDER5PIC = 25
+EYESTALKRISE1PIC = 26
+EYESTALKRISE2PIC = 27
+EYESTALKWALK1PIC = 28
+EYESTALKWALK2PIC = 29
+EYESTALKATTACKPIC = 30
+EYESTALKDEATH1PIC = 31
+EYESTALKDEATH2PIC = 32
+EYESTALKDEATH3PIC = 33
+EYESTALKDEATH4PIC = 34
+EYESTALKDEATH5PIC = 35
+BLOB_SHOT1PIC = 36
+BLOBGND1PIC = 37
+BLOBGND2PIC = 38
+BLOBRISE1PIC = 39
+BLOBRISE2PIC = 40
+BLOBWALK1PIC = 41
+BLOB_SHOT2PIC = 42
+BLOBWALK2PIC = 43
+BLOBWALK3PIC = 44
+BLOBDEATH1PIC = 45
+BLOBDEATH2PIC = 46
+BLOBDEATH3PIC = 47
+POTIONOBJPIC = 48
+RKEYOBJPIC = 49
+YKEYOBJPIC = 50
+GKEYOBJPIC = 51
+BKEYOBJPIC = 52
+RGEM1PIC = 53
+GGEM1PIC = 54
+BGEM1PIC = 55
+YGEM1PIC = 56
+PGEM1PIC = 57
+CHESTOBJPIC = 58
+PSHOT1PIC = 59
+PSHOT2PIC = 60
+PSHOT_EXP1PIC = 61
+PSHOT_EXP2PIC = 62
+PSHOT_EXP3PIC = 63
+HEADPIC = 64
+BOLTOBJPIC = 65
+BOLT2OBJPIC = 66
+BOLT3OBJPIC = 67
+NUKEOBJPIC = 68
+NUKE2OBJPIC = 69
+NUKE3OBJPIC = 70
+TIMEOBJ1PIC = 71
+TIMEOBJ2PIC = 72
+COLUMN5PIC = 73
+COLUMN1PIC = 74
+FFIRE_POTPIC = 75
+COLUMN2PIC = 76
+COLUMN3PIC = 77
+COLUMN4PIC = 78
+OFIRE_POT1PIC = 79
+OFIRE_POT2PIC = 80
+TOMB1PIC = 81
+TOMB2PIC = 82
+O_WATER_CHEST1PIC = 83
+O_WATER_CHEST2PIC = 84
+O_WATER_CHEST3PIC = 85
+OLD_CHESTPIC = 86
+EYE_WALK1PIC = 87
+EYE_WALK2PIC = 88
+EYE_WALK3PIC = 89
+EYE_OUCH1PIC = 90
+EYE_OUCH2PIC = 91
+EYE_DEATH1PIC = 92
+EYE_DEATH2PIC = 93
+EYE_DEATH3PIC = 94
+EYE_DEATH4PIC = 95
+EYE_SHOT1PIC = 96
+EYE_SHOT2PIC = 97
+FMAGEWALK1PIC = 98
+FMAGEWALK2PIC = 99
+FMAGEWALK3PIC = 100
+FMAGEATTACK1PIC = 101
+FMAGEATTACK2PIC = 102
+FMAGEDEATH1PIC = 103
+FMAGEDEATH2PIC = 104
+FMAGEDEATH3PIC = 105
+FMAGESHOT1PIC = 106
+FMAGESHOT2PIC = 107
+FORCE_FIELD_1PIC = 108
+FORCE_FIELD_2PIC = 109
+FORCE_FIELD_3PIC = 110
+FORCE_FIELD_4PIC = 111
+ROBOTANKWALK1PIC = 112
+ROBOTANKWALK2PIC = 113
+ROBOTANKWALK3PIC = 114
+ROBOTANKWALK4PIC = 115
+ROBOTANKOUCHPIC = 116
+ROBOTANKATTACK1PIC = 117
+ROBOTANKATTACK2PIC = 118
+ROBOTANKDEATH1PIC = 119
+ROBOTANKDEATH2PIC = 120
+ROBOTANKDEATH3PIC = 121
+ROBOTANKDEATH4PIC = 122
+RAMBONEWALK1PIC = 123
+RAMBONEWALK2PIC = 124
+RAMBONEWALK3PIC = 125
+RAMBONEWALK4PIC = 126
+RAMBONEATTACK1PIC = 127
+RAMBONEATTACK2PIC = 128
+RAMBONEATTACK3PIC = 129
+RAMBONEDEATH1PIC = 130
+RAMBONEDEATH2PIC = 131
+RAMBONEDEATH3PIC = 132
+RAMBONESHOT1PIC = 133
+RAMBONESHOT2PIC = 134
+STOMPYWALK1PIC = 135
+STOMPYWALK2PIC = 136
+STOMPYWALK3PIC = 137
+STOMPYWALK4PIC = 138
+STOMPYATTACK1PIC = 139
+STOMPYATTACK2PIC = 140
+STOMPYDEATH1PIC = 141
+STOMPYDEATH2PIC = 142
+STOMPYDEATH3PIC = 143
+STOMPYDEATH4PIC = 144
+STOMPYSHOT1PIC = 145
+STOMPYSHOT2PIC = 146
+STOMPYSHOT3PIC = 147
+STOMPYSHOT4PIC = 148
+TROLL1PIC = 149
+TROLL2PIC = 150
+TROLL3PIC = 151
+TROLL4PIC = 152
+TROLLOUCHPIC = 153
+TROLLATTACK1PIC = 154
+TROLLATTACK2PIC = 155
+TROLLDIE1PIC = 156
+TROLLDIE2PIC = 157
+TROLLDIE3PIC = 158
+WIZARDWALK1PIC = 159
+WIZARDWALK2PIC = 160
+WIZARDWALK3PIC = 161
+WIZARDWALK4PIC = 162
+WIZARDDEATH4PIC = 163
+WIZARD_SHOT1PIC = 164
+WIZARD_SHOT2PIC = 165
+WIZARDATTACK1PIC = 166
+WIZARDATTACK2PIC = 167
+WIZARDOUCHPIC = 168
+WIZARDDEATH1PIC = 169
+WIZARDDEATH2PIC = 170
+WIZARDDEATH3PIC = 171
+INVIS_FIZZ1PIC = 172
+INVIS_FIZZ2PIC = 173
+INVIS_DEATH1PIC = 174
+INVIS_DEATH2PIC = 175
+INVIS_DEATH3PIC = 176
+INVIS_FIZZ3PIC = 177
+BUG_WALK1PIC = 178
+BUG_WALK2PIC = 179
+BUG_WALK3PIC = 180
+BUG_ATTACK1PIC = 181
+BUG_ATTACK2PIC = 182
+BUG_DEATH1PIC = 183
+BUG_DEATH2PIC = 184
+BUG_SHOT1PIC = 185
+BUG_SHOT2PIC = 186
+CYBORG1PIC = 187
+CYBORG2PIC = 188
+CYBORG3PIC = 189
+CYBORG4PIC = 190
+CYBORGATTACK1PIC = 191
+CYBORGATTACK2PIC = 192
+CYBORGATTACK3PIC = 193
+CYBORGOUCHPIC = 194
+CYBORGDIE1PIC = 195
+CYBORGDIE2PIC = 196
+GREL1PIC = 197
+GREL2PIC = 198
+GRELATTACKPIC = 199
+GRELHITPIC = 200
+GRELDIE1PIC = 201
+GRELDIE2PIC = 202
+GRELDIE3PIC = 203
+GRELDIE4PIC = 204
+GRELDIE5PIC = 205
+GRELDIE6PIC = 206
+SKULL_SHOTPIC = 207
+RAYFLY1PIC = 208
+RAYFLY2PIC = 209
+RAYFLY3PIC = 210
+RAYSHOT1PIC = 211
+RAYSHOT2PIC = 212
+RAYSHOOT1PIC = 213
+RAYSHOOT2PIC = 214
+RAYDEATH1PIC = 215
+RAYDEATH2PIC = 216
+RAYRISEPIC = 217
+PORTAL1PIC = 218
+PORTAL2PIC = 219
+PORTAL3PIC = 220
+PORTAL4PIC = 221
+PORTAL5PIC = 222
+PORTAL6PIC = 223
+DEMON1PIC = 224
+DEMON2PIC = 225
+DEMON3PIC = 226
+DEMON4PIC = 227
+DEMONATTACK1PIC = 228
+DEMONATTACK2PIC = 229
+DEMONATTACK3PIC = 230
+DEMONOUCHPIC = 231
+DEMONDIE1PIC = 232
+DEMONDIE2PIC = 233
+DEMONDIE3PIC = 234
+FIRSTWALLPIC = 235
+NEMESISPIC = 236
+ALTARLEFTPIC = 237
+ALTARRIGHTPIC = 238
+TEMPLEWALLLIGHTPIC = 239
+TEMPLEWALLDARKPIC = 240
+TORCHWALL1PIC = 241
+TORCHWALL2PIC = 242
+BRNBRKLIGHTPIC = 243
+BRNBRKDARKPIC = 244
+BRNBRKEMLIGHTPIC = 245
+BRNBRKEMDARKPIC = 246
+FIREWALL1PIC = 247
+FIREWALL2PIC = 248
+FIREWALL3PIC = 249
+FIREWALL4PIC = 250
+IRONGATEPIC = 251
+BRNFLGLIGHTPIC = 252
+BRNFLGDARKPIC = 253
+BRNFLGVINELIGHTPIC = 254
+BRNFLGVINEDARKPIC = 255
+BRNFLGDMGLIGHTPIC = 256
+BRNFLGDMGDARKPIC = 257
+SPACEDMG1LIGHTPIC = 258
+SPACEDMG1DARKPIC = 259
+SPACEDMG2LIGHTPIC = 260
+SPACEDMG2DARKPIC = 261
+SPACE1LIGHTPIC = 262
+SPACE1DARKPIC = 263
+SPACE2LIGHTPIC = 264
+SPACE2DARKPIC = 265
+SPACE3LIGHTPIC = 266
+SPACE3DARKPIC = 267
+SPACE4LIGHTPIC = 268
+SPACE4DARKPIC = 269
+SPACE5LIGHTPIC = 270
+SPACE5DARKPIC = 271
+SPACE6LIGHTPIC = 272
+SPACE6DARKPIC = 273
+SPACE7LIGHTPIC = 274
+SPACE7DARKPIC = 275
+SPACE8LIGHTPIC = 276
+SPACE8DARKPIC = 277
+SPACE10LIGHTPIC = 278
+SPACE10DARKPIC = 279
+RUSTDOORLIGHTPIC = 280
+RUSTDOORDARKPIC = 281
+SPACE11LIGHTPIC = 282
+SPACE11DARKPIC = 283
+SPACE12LIGHTPIC = 284
+SPACE12DARKPIC = 285
+SPACE13LIGHTPIC = 286
+SPACE13DARKPIC = 287
+SPACE14LIGHTPIC = 288
+SPACE14DARKPIC = 289
+SPACEDMG5LIGHTPIC = 290
+SPACEDMG5DARKPIC = 291
+SPACEDMG6LIGHTPIC = 292
+SPACEDMG6DARKPIC = 293
+SPCDOOR1LIGHTPIC = 294
+SPCDOOR1DARKPIC = 295
+SPCDOOR2LIGHTPIC = 296
+SPCDOOR2DARKPIC = 297
+SPCDOOR3LIGHTPIC = 298
+SPCDOOR3DARKPIC = 299
+SPCDOOR4LIGHTPIC = 300
+SPCDOOR4DARKPIC = 301
+COLUMNSLIGHTPIC = 302
+COLUMNSDARKPIC = 303
+DEMONSTATUELIGHTPIC = 304
+DEMONSTATUEDARKPIC = 305
+TROLLSTATUELIGHTPIC = 306
+TROLLSTATUEDARKPIC = 307
+BRNDMGVINELIGHTPIC = 308
+BRNDMGVINEDARKPIC = 309
+HORNDOORPIC = 310
+RUNEDOORPIC = 311
+IRONDMGLIGHTPIC = 312
+IRONDMGDARKPIC = 313
+IRONLIGHTPIC = 314
+IRONDARKPIC = 315
+TROLLLIGHTPIC = 316
+TROLLDARKPIC = 317
+TROLLBLOODYLIGHTPIC = 318
+TROLLBLOODYDARKPIC = 319
+STONEDOORLIGHTPIC = 320
+STONEDOORDARKPIC = 321
+IRONWTR1LIGHTPIC = 322
+IRONWTR2LIGHTPIC = 323
+IRONWTR3LIGHTPIC = 324
+IRONWTR1DARKPIC = 325
+IRONWTR2DARKPIC = 326
+IRONWTR3DARKPIC = 327
+RUSTWTR1LIGHTPIC = 328
+RUSTWTR2LIGHTPIC = 329
+RUSTWTR3LIGHTPIC = 330
+RUSTWTR1DARKPIC = 331
+RUSTWTR2DARKPIC = 332
+RUSTWTR3DARKPIC = 333
+CEMETARYLIGHTPIC = 334
+CEMETARYDARKPIC = 335
+WGRATE1LIGHTPIC = 336
+WGRATE2LIGHTPIC = 337
+WGRATE3LIGHTPIC = 338
+WGRATE1DARKPIC = 339
+WGRATE2DARKPIC = 340
+WGRATE3DARKPIC = 341
+BWGRATE1PIC = 342
+BWGRATE2PIC = 343
+GWGRATE3PIC = 344
+EGYPT2LIGHTPIC = 345
+EGYPT3LIGHTPIC = 346
+EGYPT2DARKPIC = 347
+EGYPT3DARKPIC = 348
+BRNFLGWINDOWLIGHTPIC = 349
+BRNFLGWINDOWDARKPIC = 350
+ENDPIC = 351
+SGRATEPIC = 352
+EXP_WALL_1PIC = 353
+EXP_WALL_2PIC = 354
+EXP_WALL_3PIC = 355
+WATER_EXP_WALL_1PIC = 356
+WATER_EXP_WALL_2PIC = 357
+WATER_EXP_WALL_3PIC = 358
+MAS_WIN_LIGHTPIC = 359
+MAS_WIN_DARKPIC = 360
+MAS_VINE1_LIGHTPIC = 361
+MAS_VINE1_DARKPIC = 362
+MAS_DOOR_LIGHTPIC = 363
+MAS_DOOR_DARKPIC = 364
+MAS_VINE2_LIGHTPIC = 365
+MAS_VINE2_DARKPIC = 366
+TAP1PIC = 367
+TAP2PIC = 368
+TAP3PIC = 369
+LASTWALLPIC = 370
+
+HAND1PICM = 371
+
+NORTHICONSPR = 372
+
+LEVEL1TEXT = 663
+LEVEL2TEXT = 664
+LEVEL3TEXT = 665
+LEVEL4TEXT = 666
+LEVEL5TEXT = 667
+LEVEL6TEXT = 668
+LEVEL7TEXT = 669
+LEVEL8TEXT = 670
+LEVEL9TEXT = 671
+LEVEL10TEXT = 672
+LEVEL11TEXT = 673
+LEVEL12TEXT = 674
+LEVEL13TEXT = 675
+LEVEL14TEXT = 676
+LEVEL15TEXT = 677
+LEVEL16TEXT = 678
+LEVEL17TEXT = 679
+LEVEL18TEXT = 680
+PIRACY = 681
+
+EYESTALK_LUMP_START = 21
+EYESTALK_LUMP_END = 35
+
+BLOB_LUMP_START = 36
+BLOB_LUMP_END = 47
+
+POTION_LUMP_START = 48
+POTION_LUMP_END = 48
+
+RKEY_LUMP_START = 49
+RKEY_LUMP_END = 49
+
+YKEY_LUMP_START = 50
+YKEY_LUMP_END = 50
+
+GKEY_LUMP_START = 51
+GKEY_LUMP_END = 51
+
+BKEY_LUMP_START = 52
+BKEY_LUMP_END = 52
+
+RGEM_LUMP_START = 53
+RGEM_LUMP_END = 53
+
+GGEM_LUMP_START = 54
+GGEM_LUMP_END = 54
+
+BGEM_LUMP_START = 55
+BGEM_LUMP_END = 55
+
+YGEM_LUMP_START = 56
+YGEM_LUMP_END = 56
+
+PGEM_LUMP_START = 57
+PGEM_LUMP_END = 57
-BKEY_LUMP_START = 76
-BKEY_LUMP_END = 76
+CHEST_LUMP_START = 58
+CHEST_LUMP_END = 58
-RGEM_LUMP_START = 77
-RGEM_LUMP_END = 78
+PLAYER_LUMP_START = 59
+PLAYER_LUMP_END = 63
-GGEM_LUMP_START = 79
-GGEM_LUMP_END = 80
+HEAD_LUMP_START = 64
+HEAD_LUMP_END = 64
-BGEM_LUMP_START = 81
-BGEM_LUMP_END = 82
+BOLT_LUMP_START = 65
+BOLT_LUMP_END = 67
-YGEM_LUMP_START = 83
-YGEM_LUMP_END = 84
+NUKE_LUMP_START = 68
+NUKE_LUMP_END = 70
-PGEM_LUMP_START = 85
-PGEM_LUMP_END = 86
+TIME_LUMP_START = 71
+TIME_LUMP_END = 72
-CHEST_LUMP_START = 87
-CHEST_LUMP_END = 87
+COLUMN5_LUMP_START = 73
+COLUMN5_LUMP_END = 73
-PLAYER_LUMP_START = 88
-PLAYER_LUMP_END = 92
+COLUMN1_LUMP_START = 74
+COLUMN1_LUMP_END = 74
-REDDEMON_LUMP_START = 93
-REDDEMON_LUMP_END = 103
+FFIREPOT_LUMP_START = 75
+FFIREPOT_LUMP_END = 75
-MAGE_LUMP_START = 104
-MAGE_LUMP_END = 109
+COLUMN2_LUMP_START = 76
+COLUMN2_LUMP_END = 76
-BAT_LUMP_START = 110
-BAT_LUMP_END = 115
+COLUMN3_LUMP_START = 77
+COLUMN3_LUMP_END = 77
-GREL_LUMP_START = 116
-GREL_LUMP_END = 126
+COLUMN4_LUMP_START = 78
+COLUMN4_LUMP_END = 78
-GODESS_LUMP_START = 127
-GODESS_LUMP_END = 136
+OFIREPOT_LUMP_START = 79
+OFIREPOT_LUMP_END = 80
-ANT_LUMP_START = 137
-ANT_LUMP_END = 145
+TOMB1_LUMP_START = 81
+TOMB1_LUMP_END = 81
-FATDEMON_LUMP_START = 146
-FATDEMON_LUMP_END = 157
+TOMB2_LUMP_START = 82
+TOMB2_LUMP_END = 82
-SUCCUBUS_LUMP_START = 158
-SUCCUBUS_LUMP_END = 167
+O_WATER_CHEST_LUMP_START = 83
+O_WATER_CHEST_LUMP_END = 85
-TREE_LUMP_START = 168
-TREE_LUMP_END = 177
+OLD_CHEST_LUMP_START = 86
+OLD_CHEST_LUMP_END = 86
-DRAGON_LUMP_START = 178
-DRAGON_LUMP_END = 193
+EYE_LUMP_START = 87
+EYE_LUMP_END = 97
-BUNNY_LUMP_START = 194
-BUNNY_LUMP_END = 204
+FUTUREMAGE_LUMP_START = 98
+FUTUREMAGE_LUMP_END = 107
-ARCH1_LUMP_START = 205
-ARCH1_LUMP_END = 205
+FORCEFIELD_LUMP_START = 108
+FORCEFIELD_LUMP_END = 111
-ARCH2_LUMP_START = 206
-ARCH2_LUMP_END = 206
+ROBOTANK_LUMP_START = 112
+ROBOTANK_LUMP_END = 122
-ARCH3_LUMP_START = 207
-ARCH3_LUMP_END = 207
+RAMBONE_LUMP_START = 123
+RAMBONE_LUMP_END = 134
-ARCH4_LUMP_START = 208
-ARCH4_LUMP_END = 208
+STOMPY_LUMP_START = 135
+STOMPY_LUMP_END = 148
-ARCH5_LUMP_START = 209
-ARCH5_LUMP_END = 209
+TROLL_LUMP_START = 149
+TROLL_LUMP_END = 158
-ARCH6_LUMP_START = 210
-ARCH6_LUMP_END = 210
+WIZARD_LUMP_START = 159
+WIZARD_LUMP_END = 171
-ARCH7_LUMP_START = 211
-ARCH7_LUMP_END = 211
+INVISDUDE_LUMP_START = 172
+INVISDUDE_LUMP_END = 177
-ARCH8_LUMP_START = 212
-ARCH8_LUMP_END = 212
+BUG_LUMP_START = 178
+BUG_LUMP_END = 186
-ARCH9_LUMP_START = 213
-ARCH9_LUMP_END = 213
+CYBORG_LUMP_START = 187
+CYBORG_LUMP_END = 196
-ARCH10_LUMP_START = 214
-ARCH10_LUMP_END = 214
+GREL_LUMP_START = 197
+GREL_LUMP_END = 207
-ARCH11_LUMP_START = 215
-ARCH11_LUMP_END = 215
+RAY_LUMP_START = 208
+RAY_LUMP_END = 217
-ARCH12_LUMP_START = 216
-ARCH12_LUMP_END = 216
+PORTAL_LUMP_START = 218
+PORTAL_LUMP_END = 223
-ARCH13_LUMP_START = 217
-ARCH13_LUMP_END = 217
-
-ANTHILL_LUMP_START = 218
-ANTHILL_LUMP_END = 218
-
-COLUMN_LUMP_START = 219
-COLUMN_LUMP_END = 219
-
-SULPHURGAS_LUMP_START = 220
-SULPHURGAS_LUMP_END = 222
-
-FIREPOT_LUMP_START = 223
-FIREPOT_LUMP_END = 224
-
-SKELHANG_LUMP_START = 225
-SKELHANG_LUMP_END = 225
-
-FORCEFIELD_LUMP_START = 226
-FORCEFIELD_LUMP_END = 229
-
-FOUNTAIN_LUMP_START = 230
-FOUNTAIN_LUMP_END = 230
+DEMON_LUMP_START = 224
+DEMON_LUMP_END = 234
;
; Amount of each data item
;
-NUMCHUNKS = 658
+NUMCHUNKS = 682
NUMFONT = 1
NUMFONTM = 0
-NUMPICS = 344
+NUMPICS = 367
NUMPICM = 1
NUMSPRITES = 1
NUMTILE8 = 108
@@ -545,7 +545,7 @@ NUMTILE16 = 216
NUMTILE16M = 72
NUMTILE32 = 0
NUMTILE32M = 0
-NUMEXTERN = 18
+NUMEXTERN = 19
;
; File offsets for data items
;
@@ -556,15 +556,15 @@ STRUCTSPRITE = 2
STARTFONT = 3
STARTFONTM = 4
STARTPICS = 4
-STARTPICM = 348
-STARTSPRITES = 349
-STARTTILE8 = 350
-STARTTILE8M = 351
-STARTTILE16 = 352
-STARTTILE16M = 568
-STARTTILE32 = 640
-STARTTILE32M = 640
-STARTEXTERN = 640
+STARTPICM = 371
+STARTSPRITES = 372
+STARTTILE8 = 373
+STARTTILE8M = 374
+STARTTILE16 = 375
+STARTTILE16M = 591
+STARTTILE32 = 663
+STARTTILE32M = 663
+STARTEXTERN = 663
;
; Thank you for using IGRAB!
diff --git a/GFXE_APC.H b/GFXE_APC.H
index cbeb40a..f396c65 100644
--- a/GFXE_APC.H
+++ b/GFXE_APC.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -18,8 +18,8 @@
//////////////////////////////////////
//
-// Graphics .H file for .ARM
-// IGRAB-ed on Thu Dec 02 13:58:59 1993
+// Graphics .H file for .APC
+// IGRAB-ed on Thu Dec 02 16:04:05 1993
//
//////////////////////////////////////
@@ -40,579 +40,571 @@ typedef enum {
RADAR_YGEMPIC, // 17
RADAR_PGEMPIC, // 18
FIRSTGROUNDPIC, // 19
- FIRSTSTRIPPIC, // 20
- FIRSTSCALEPIC, // 21
- // Lump Start
- SKELETON_1PIC, // 22
- SKELETON_2PIC, // 23
- SKELETON_3PIC, // 24
- SKELETON_4PIC, // 25
- SKELETON_ATTACK_1PIC, // 26
- SKELETON_ATTACK_2PIC, // 27
- SKELETON_ATTACK_3PIC, // 28
- SKELETON_OUCHPIC, // 29
- SKELETON_DEATH_1PIC, // 30
- SKELETON_DEATH_2PIC, // 31
- // Lump Start
- TOMB1PIC, // 32
- TOMB2PIC, // 33
- TOMB3PIC, // 34
- // Lump Start
- OBJ_WARP1PIC, // 35
- OBJ_WARP2PIC, // 36
- OBJ_WARP3PIC, // 37
- OBJ_WARP4PIC, // 38
- // Lump Start
- EYE_WALK1PIC, // 39
- EYE_WALK2PIC, // 40
- EYE_WALK3PIC, // 41
- EYE_OUCH1PIC, // 42
- EYE_OUCH2PIC, // 43
- EYE_DEATH1PIC, // 44
- EYE_DEATH2PIC, // 45
- EYE_DEATH3PIC, // 46
- EYE_SCOWLPIC, // 47
- EYE_SHOT1PIC, // 48
- EYE_SHOT2PIC, // 49
- // Lump Start
- ZOMB_APPEAR1PIC, // 50
- ZOMB_APPEAR2PIC, // 51
- ZOMB_APPEAR3PIC, // 52
- ZOMB_APPEAR4PIC, // 53
- ZOMB_WALK1PIC, // 54
- ZOMB_WALK2PIC, // 55
- ZOMB_WALK3PIC, // 56
- ZOMB_OUCHPIC, // 57
- ZOMB_ATTACKPIC, // 58
- ZOMB_DIE1PIC, // 59
- ZOMB_DIE2PIC, // 60
- ZOMB_DIE3PIC, // 61
- // Lump Start
- BOLTOBJPIC, // 62
- BOLT2OBJPIC, // 63
- BOLT3OBJPIC, // 64
- // Lump Start
- NUKEOBJPIC, // 65
- NUKE2OBJPIC, // 66
- NUKE3OBJPIC, // 67
- // Lump Start
- TIMEOBJ1PIC, // 68
- TIMEOBJ2PIC, // 69
- // Lump Start
- O_WATER_CHEST1PIC, // 70
- O_WATER_CHEST2PIC, // 71
- // Lump Start
- POTIONOBJPIC, // 72
- // Lump Start
- RKEYOBJPIC, // 73
- // Lump Start
- YKEYOBJPIC, // 74
- // Lump Start
- GKEYOBJPIC, // 75
- // Lump Start
- BKEYOBJPIC, // 76
- // Lump Start
- RGEM1PIC, // 77
- RGEM2PIC, // 78
- // Lump Start
- GGEM1PIC, // 79
- GGEM2PIC, // 80
- // Lump Start
- BGEM1PIC, // 81
- BGEM2PIC, // 82
- // Lump Start
- YGEM1PIC, // 83
- YGEM2PIC, // 84
- // Lump Start
- PGEM1PIC, // 85
- PGEM2PIC, // 86
- // Lump Start
- CHESTOBJPIC, // 87
- // Lump Start
- PSHOT1PIC, // 88
- PSHOT2PIC, // 89
- PSHOT_EXP1PIC, // 90
- PSHOT_EXP2PIC, // 91
- PSHOT_EXP3PIC, // 92
- // Lump Start
- RED_DEMON1PIC, // 93
- RED_DEMON2PIC, // 94
- RED_DEMON3PIC, // 95
- RED_DEMON4PIC, // 96
- RED_DEMONATTACK1PIC, // 97
- RED_DEMONATTACK2PIC, // 98
- RED_DEMONATTACK3PIC, // 99
- RED_DEMONOUCHPIC, // 100
- RED_DEMONDIE1PIC, // 101
- RED_DEMONDIE2PIC, // 102
- RED_DEMONDIE3PIC, // 103
- // Lump Start
- MAGE1PIC, // 104
- MAGE2PIC, // 105
- MAGEOUCHPIC, // 106
- MAGEATTACKPIC, // 107
- MAGEDIE1PIC, // 108
- MAGEDIE2PIC, // 109
- // Lump Start
- BAT1PIC, // 110
- BAT2PIC, // 111
- BAT3PIC, // 112
- BAT4PIC, // 113
- BATDIE1PIC, // 114
- BATDIE2PIC, // 115
- // Lump Start
- GREL1PIC, // 116
- GREL2PIC, // 117
- GRELATTACKPIC, // 118
- GRELHITPIC, // 119
- GRELDIE1PIC, // 120
- GRELDIE2PIC, // 121
- GRELDIE3PIC, // 122
- GRELDIE4PIC, // 123
- GRELDIE5PIC, // 124
- GRELDIE6PIC, // 125
- SKULL_SHOTPIC, // 126
- // Lump Start
- GODESS_WALK1PIC, // 127
- GODESS_WALK2PIC, // 128
- GODESS_WALK3PIC, // 129
- GODESS_ATTACK1PIC, // 130
- GODESS_ATTACK2PIC, // 131
- GODESS_ATTACK3PIC, // 132
- GODESS_STATUEPIC, // 133
- GODESS_OUCHPIC, // 134
- GODESS_DEATH1PIC, // 135
- GODESS_DEATH2PIC, // 136
- // Lump Start
- ANT_EGG1PIC, // 137
- ANT_EGG2PIC, // 138
- ANT_WALK1PIC, // 139
- ANT_WALK2PIC, // 140
- ANT_WALK3PIC, // 141
- ANT_ATTACKPIC, // 142
- ANT_DEATH1PIC, // 143
- ANT_DEATH2PIC, // 144
- ANT_DEATH3PIC, // 145
- // Lump Start
- FATDEMON_WALK1PIC, // 146
- FATDEMON_WALK2PIC, // 147
- FATDEMON_WALK3PIC, // 148
- FATDEMON_WALK4PIC, // 149
- FATDEMON_ATTACK1PIC, // 150
- FATDEMON_ATTACK2PIC, // 151
- FATDEMON_OUCHPIC, // 152
- FATDEMON_BLOWUP1PIC, // 153
- FATDEMON_BLOWUP2PIC, // 154
- FATDEMON_BLOWUP3PIC, // 155
- FATDEMON_EXPLODEPIC, // 156
- FATDEMON_FEETPIC, // 157
- // Lump Start
- SUCCUBUS_WALK1PIC, // 158
- SUCCUBUS_WALK2PIC, // 159
- SUCCUBUS_WALK3PIC, // 160
- SUCCUBUS_WALK4PIC, // 161
- SUCCUBUS_ATTACK1PIC, // 162
- SUCCUBUS_ATTACK2PIC, // 163
- SUCCUBUS_OUCHPIC, // 164
- SUCCUBUS_DEATH1PIC, // 165
- SUCCUBUS_DEATH2PIC, // 166
- SUCCUBUS_SHOT1PIC, // 167
- // Lump Start
- TREE_IDLEPIC, // 168
- TREE_AWAKENINGPIC, // 169
- TREE_WALK1PIC, // 170
- TREE_WALK2PIC, // 171
- TREE_ATTACK1PIC, // 172
- TREE_ATTACK2PIC, // 173
- TREE_ATTACK3PIC, // 174
- TREE_DEATH1PIC, // 175
- TREE_DEATH2PIC, // 176
- TREE_DEATH3PIC, // 177
- // Lump Start
- DRAGON_BUBBLES1PIC, // 178
- DRAGON_BUBBLES2PIC, // 179
- DRAGON_EYESPIC, // 180
- DRAGON_RISE1PIC, // 181
- DRAGON_RISE2PIC, // 182
- DRAGON_WALK1PIC, // 183
- DRAGON_WALK2PIC, // 184
- DRAGON_WALK3PIC, // 185
- DRAGON_WALK4PIC, // 186
- DRAGON_ATTACK1PIC, // 187
- DRAGON_ATTACK2PIC, // 188
- DRAGON_ATTACK3PIC, // 189
- DRAGON_OUCHPIC, // 190
- DRAGON_DEATH1PIC, // 191
- DRAGON_DEATH2PIC, // 192
- DRAGON_DEATH3PIC, // 193
- // Lump Start
- BUNNY_LEFT1PIC, // 194
- BUNNY_LEFT2PIC, // 195
- BUNNY_RIGHT1PIC, // 196
- BUNNY_RIGHT2PIC, // 197
- BUNNY_META1PIC, // 198
- BUNNY_META2PIC, // 199
- BUNNY_WALK1PIC, // 200
- BUNNY_WALK2PIC, // 201
- BUNNY_OUCHPIC, // 202
- BUNNY_DEATH1PIC, // 203
- BUNNY_DEATH2PIC, // 204
- // Lump Start
- ARCH1PIC, // 205
- // Lump Start
- ARCH2PIC, // 206
- // Lump Start
- ARCH3PIC, // 207
- // Lump Start
- ARCH4PIC, // 208
- // Lump Start
- ARCH5PIC, // 209
- // Lump Start
- ARCH6PIC, // 210
- // Lump Start
- ARCH7PIC, // 211
- // Lump Start
- ARCH8PIC, // 212
- // Lump Start
- ARCH9PIC, // 213
- // Lump Start
- ARCH10PIC, // 214
- // Lump Start
- ARCH11PIC, // 215
- // Lump Start
- ARCH12PIC, // 216
- // Lump Start
- ARCH13PIC, // 217
- // Lump Start
- ANT_HILLPIC, // 218
- // Lump Start
- COLUMNPIC, // 219
- // Lump Start
- SULPHUR_GAS_1PIC, // 220
- SULPHUR_GAS_2PIC, // 221
- SULPHUR_GAS_3PIC, // 222
- // Lump Start
- FIRE_POT_1PIC, // 223
- FIRE_POT_2PIC, // 224
- // Lump Start
- SKEL_HANGPIC, // 225
- // Lump Start
- FORCE_FIELD_1PIC, // 226
- FORCE_FIELD_2PIC, // 227
- FORCE_FIELD_3PIC, // 228
- FORCE_FIELD_4PIC, // 229
- // Lump Start
- WFOUNTAINPIC, // 230
- FIRSTWALLPIC, // 231
- CRYSTAL_LIGHT_1PIC, // 232
- CRYSTAL_LIGHT_2PIC, // 233
- CRYSTAL_LIGHT_3PIC, // 234
- CRYSTAL_LIGHT_4PIC, // 235
- CRYSTAL_DARK_1PIC, // 236
- CRYSTAL_DARK_2PIC, // 237
- CRYSTAL_DARK_3PIC, // 238
- CRYSTAL_DARK_4PIC, // 239
- FIRE_WALL_1PIC, // 240
- FIRE_WALL_2PIC, // 241
- FIRE_WALL_3PIC, // 242
- FIRE_WALL_4PIC, // 243
- BRN_STONE_GATEPIC, // 244
- BRN_STONE_WALL_1PIC, // 245
- BRN_STONE_WALL_2PIC, // 246
- KUDZU_LIGHT_WALLPIC, // 247
- KUDZU_DARK_WALLPIC, // 248
- HEDGE_WALLPIC, // 249
- HEDGE_EYESPIC, // 250
- BRN_WINDOW_LIGHTPIC, // 251
- ALTAR_LEFTPIC, // 252
- ALTAR_RIGHTPIC, // 253
- GRAY_LIGHT_WALLPIC, // 254
- GRAY_DARK_WALLPIC, // 255
- GRAY_LIGHT_SIGNPIC, // 256
- GRAY_DARK_SIGNPIC, // 257
- MANICLE_LIGHT_BLOODYPIC, // 258
- MANICLE_DARK_BLOODYPIC, // 259
- LIGHT_CURTAIN_WINDOWPIC, // 260
- LIGHT_CURTAIN_WALLPIC, // 261
- DARK_CURTAIN_WINDOWPIC, // 262
- DARK_CURTAIN_WALLPIC, // 263
- BRN_LIGHT_SIGNPIC, // 264
- BRN_DARK_SIGNPIC, // 265
- LIGHT_STONE_WALLPIC, // 266
- DARK_STONE_WALLPIC, // 267
- BRN_FLAGSTONE_LIGHT_2PIC, // 268
- BRN_FLAGSTONE_DARK_2PIC, // 269
- RUST_METAL_LIGHTPIC, // 270
- RUST_METAL_DARKPIC, // 271
- GRAY_METAL_LIGHTPIC, // 272
- GRAY_METAL_DARKPIC, // 273
- WEAK_STONE_LIGHTPIC, // 274
- WEAK_STONE_DARKPIC, // 275
- WEAK_GRAY_RFGSTN_LIGHTPIC, // 276
- WEAK_GRAY_RFGSTN_DARKPIC, // 277
- WEAK_CRYSTAL_LIGHTPIC, // 278
- WEAK_CRYSTAL_DARKPIC, // 279
- RED_MUD_LIGHTPIC, // 280
- BRN_MUD_DARKPIC, // 281
- RED_MUD_WEAK_LIGHTPIC, // 282
- BRN_MUD_WEAK_DARKPIC, // 283
- HORN_DOORPIC, // 284
- CLOSED_DOOR_1PIC, // 285
- DOOR_2PIC, // 286
- WATER_LIGHT_WEAK_1PIC, // 287
- WATER_LIGHT_WEAK_2PIC, // 288
- WATER_LIGHT_WEAK_3PIC, // 289
- WATER_DARK_WEAK_1PIC, // 290
- WATER_DARK_WEAK_2PIC, // 291
- WATER_DARK_WEAK_3PIC, // 292
- WATER_LIGHT_1PIC, // 293
- WATER_LIGHT_2PIC, // 294
- WATER_LIGHT_3PIC, // 295
- WATER_DARK_1PIC, // 296
- WATER_DARK_2PIC, // 297
- WATER_DARK_3PIC, // 298
- TROLL_LIGHT_STONEPIC, // 299
- TROLL_DARK_STONEPIC, // 300
- TROLL_BLOODY_LT_STONEPIC, // 301
- TROLL_BLOODY_DK_STONEPIC, // 302
- LIGHT_BREATH_1PIC, // 303
- LIGHT_BREATH_2PIC, // 304
- LIGHT_BREATH_3PIC, // 305
- DARK_BREATH_1PIC, // 306
- DARK_BREATH_2PIC, // 307
- DARK_BREATH_3PIC, // 308
- EXP_WALL_1PIC, // 309
- EXP_WALL_2PIC, // 310
- EXP_WALL_3PIC, // 311
- WATER_EXP_WALL_1PIC, // 312
- WATER_EXP_WALL_2PIC, // 313
- WATER_EXP_WALL_3PIC, // 314
- W_GEN_DOOR1PIC, // 315
- W_GEN_DOOR2PIC, // 316
- W_CRYSTAL_DOORPIC, // 317
- DMG_BRN_FSTN_LTPIC, // 318
- DMG_BRN_FSTN_DKPIC, // 319
- DMG_FIN_FSTN_LTPIC, // 320
- DMG_FIN_FSTN_DKPIC, // 321
- STEEL_DOOR1PIC, // 322
- STEEL_DOOR2PIC, // 323
- BRN_WINDOW_DARKPIC, // 324
- GRY_DOOR_LTPIC, // 325
- GRY_DOOR_DKPIC, // 326
- BRN_DOOR_LTPIC, // 327
- BRN_DOOR_DKPIC, // 328
- GRY_FGSTN_LTPIC, // 329
- GRY_FGSTN_DKPIC, // 330
- KUDZU_WEAK_LIGHTPIC, // 331
- KUDZU_WEAK_DARKPIC, // 332
- LT_SKEL1PIC, // 333
- DK_SKEL1PIC, // 334
- LT_SKEL2PIC, // 335
- DK_SKEL2PIC, // 336
- MANICLE_LIGHT_WALLPIC, // 337
- MANICLE_DARK_WALLPIC, // 338
- TAP_1PIC, // 339
- TAP_2PIC, // 340
- TAP_3PIC, // 341
- TAP_4PIC, // 342
- TAP_5PIC, // 343
- FINALWALLPIC, // 344
- WATER_DOOR1_PIC, // 345
- WATER_DOOR2_PIC, // 346
- LASTWALLPIC, // 347
-
- HAND1PICM=348,
-
- NORTHICONSPR=349,
-
- LEVEL1TEXT=640,
- LEVEL2TEXT, // 641
- LEVEL3TEXT, // 642
- LEVEL4TEXT, // 643
- LEVEL5TEXT, // 644
- LEVEL6TEXT, // 645
- LEVEL7TEXT, // 646
- LEVEL8TEXT, // 647
- LEVEL9TEXT, // 648
- LEVEL10TEXT, // 649
- LEVEL11TEXT, // 650
- LEVEL12TEXT, // 651
- LEVEL13TEXT, // 652
- LEVEL14TEXT, // 653
- LEVEL15TEXT, // 654
- LEVEL16TEXT, // 655
- LEVEL17TEXT, // 656
- PIRACY, // 657
+ FIRSTSCALEPIC, // 20
+ // Lump Start
+ EYESTALKUNDER1PIC, // 21
+ EYESTALKUNDER2PIC, // 22
+ EYESTALKUNDER3PIC, // 23
+ EYESTALKUNDER4PIC, // 24
+ EYESTALKUNDER5PIC, // 25
+ EYESTALKRISE1PIC, // 26
+ EYESTALKRISE2PIC, // 27
+ EYESTALKWALK1PIC, // 28
+ EYESTALKWALK2PIC, // 29
+ EYESTALKATTACKPIC, // 30
+ EYESTALKDEATH1PIC, // 31
+ EYESTALKDEATH2PIC, // 32
+ EYESTALKDEATH3PIC, // 33
+ EYESTALKDEATH4PIC, // 34
+ EYESTALKDEATH5PIC, // 35
+ // Lump Start
+ BLOB_SHOT1PIC, // 36
+ BLOBGND1PIC, // 37
+ BLOBGND2PIC, // 38
+ BLOBRISE1PIC, // 39
+ BLOBRISE2PIC, // 40
+ BLOBWALK1PIC, // 41
+ BLOB_SHOT2PIC, // 42
+ BLOBWALK2PIC, // 43
+ BLOBWALK3PIC, // 44
+ BLOBDEATH1PIC, // 45
+ BLOBDEATH2PIC, // 46
+ BLOBDEATH3PIC, // 47
+ // Lump Start
+ POTIONOBJPIC, // 48
+ // Lump Start
+ RKEYOBJPIC, // 49
+ // Lump Start
+ YKEYOBJPIC, // 50
+ // Lump Start
+ GKEYOBJPIC, // 51
+ // Lump Start
+ BKEYOBJPIC, // 52
+ // Lump Start
+ RGEM1PIC, // 53
+ // Lump Start
+ GGEM1PIC, // 54
+ // Lump Start
+ BGEM1PIC, // 55
+ // Lump Start
+ YGEM1PIC, // 56
+ // Lump Start
+ PGEM1PIC, // 57
+ // Lump Start
+ CHESTOBJPIC, // 58
+ // Lump Start
+ PSHOT1PIC, // 59
+ PSHOT2PIC, // 60
+ PSHOT_EXP1PIC, // 61
+ PSHOT_EXP2PIC, // 62
+ PSHOT_EXP3PIC, // 63
+ // Lump Start
+ HEADPIC, // 64
+ // Lump Start
+ BOLTOBJPIC, // 65
+ BOLT2OBJPIC, // 66
+ BOLT3OBJPIC, // 67
+ // Lump Start
+ NUKEOBJPIC, // 68
+ NUKE2OBJPIC, // 69
+ NUKE3OBJPIC, // 70
+ // Lump Start
+ TIMEOBJ1PIC, // 71
+ TIMEOBJ2PIC, // 72
+ // Lump Start
+ COLUMN5PIC, // 73
+ // Lump Start
+ COLUMN1PIC, // 74
+ // Lump Start
+ FFIRE_POTPIC, // 75
+ // Lump Start
+ COLUMN2PIC, // 76
+ // Lump Start
+ COLUMN3PIC, // 77
+ // Lump Start
+ COLUMN4PIC, // 78
+ // Lump Start
+ OFIRE_POT1PIC, // 79
+ OFIRE_POT2PIC, // 80
+ // Lump Start
+ TOMB1PIC, // 81
+ // Lump Start
+ TOMB2PIC, // 82
+ // Lump Start
+ O_WATER_CHEST1PIC, // 83
+ O_WATER_CHEST2PIC, // 84
+ O_WATER_CHEST3PIC, // 85
+ // Lump Start
+ OLD_CHESTPIC, // 86
+ // Lump Start
+ EYE_WALK1PIC, // 87
+ EYE_WALK2PIC, // 88
+ EYE_WALK3PIC, // 89
+ EYE_OUCH1PIC, // 90
+ EYE_OUCH2PIC, // 91
+ EYE_DEATH1PIC, // 92
+ EYE_DEATH2PIC, // 93
+ EYE_DEATH3PIC, // 94
+ EYE_DEATH4PIC, // 95
+ EYE_SHOT1PIC, // 96
+ EYE_SHOT2PIC, // 97
+ // Lump Start
+ FMAGEWALK1PIC, // 98
+ FMAGEWALK2PIC, // 99
+ FMAGEWALK3PIC, // 100
+ FMAGEATTACK1PIC, // 101
+ FMAGEATTACK2PIC, // 102
+ FMAGEDEATH1PIC, // 103
+ FMAGEDEATH2PIC, // 104
+ FMAGEDEATH3PIC, // 105
+ FMAGESHOT1PIC, // 106
+ FMAGESHOT2PIC, // 107
+ // Lump Start
+ FORCE_FIELD_1PIC, // 108
+ FORCE_FIELD_2PIC, // 109
+ FORCE_FIELD_3PIC, // 110
+ FORCE_FIELD_4PIC, // 111
+ // Lump Start
+ ROBOTANKWALK1PIC, // 112
+ ROBOTANKWALK2PIC, // 113
+ ROBOTANKWALK3PIC, // 114
+ ROBOTANKWALK4PIC, // 115
+ ROBOTANKOUCHPIC, // 116
+ ROBOTANKATTACK1PIC, // 117
+ ROBOTANKATTACK2PIC, // 118
+ ROBOTANKDEATH1PIC, // 119
+ ROBOTANKDEATH2PIC, // 120
+ ROBOTANKDEATH3PIC, // 121
+ ROBOTANKDEATH4PIC, // 122
+ // Lump Start
+ RAMBONEWALK1PIC, // 123
+ RAMBONEWALK2PIC, // 124
+ RAMBONEWALK3PIC, // 125
+ RAMBONEWALK4PIC, // 126
+ RAMBONEATTACK1PIC, // 127
+ RAMBONEATTACK2PIC, // 128
+ RAMBONEATTACK3PIC, // 129
+ RAMBONEDEATH1PIC, // 130
+ RAMBONEDEATH2PIC, // 131
+ RAMBONEDEATH3PIC, // 132
+ RAMBONESHOT1PIC, // 133
+ RAMBONESHOT2PIC, // 134
+ // Lump Start
+ STOMPYWALK1PIC, // 135
+ STOMPYWALK2PIC, // 136
+ STOMPYWALK3PIC, // 137
+ STOMPYWALK4PIC, // 138
+ STOMPYATTACK1PIC, // 139
+ STOMPYATTACK2PIC, // 140
+ STOMPYDEATH1PIC, // 141
+ STOMPYDEATH2PIC, // 142
+ STOMPYDEATH3PIC, // 143
+ STOMPYDEATH4PIC, // 144
+ STOMPYSHOT1PIC, // 145
+ STOMPYSHOT2PIC, // 146
+ STOMPYSHOT3PIC, // 147
+ STOMPYSHOT4PIC, // 148
+ // Lump Start
+ TROLL1PIC, // 149
+ TROLL2PIC, // 150
+ TROLL3PIC, // 151
+ TROLL4PIC, // 152
+ TROLLOUCHPIC, // 153
+ TROLLATTACK1PIC, // 154
+ TROLLATTACK2PIC, // 155
+ TROLLDIE1PIC, // 156
+ TROLLDIE2PIC, // 157
+ TROLLDIE3PIC, // 158
+ // Lump Start
+ WIZARDWALK1PIC, // 159
+ WIZARDWALK2PIC, // 160
+ WIZARDWALK3PIC, // 161
+ WIZARDWALK4PIC, // 162
+ WIZARDDEATH4PIC, // 163
+ WIZARD_SHOT1PIC, // 164
+ WIZARD_SHOT2PIC, // 165
+ WIZARDATTACK1PIC, // 166
+ WIZARDATTACK2PIC, // 167
+ WIZARDOUCHPIC, // 168
+ WIZARDDEATH1PIC, // 169
+ WIZARDDEATH2PIC, // 170
+ WIZARDDEATH3PIC, // 171
+ // Lump Start
+ INVIS_FIZZ1PIC, // 172
+ INVIS_FIZZ2PIC, // 173
+ INVIS_DEATH1PIC, // 174
+ INVIS_DEATH2PIC, // 175
+ INVIS_DEATH3PIC, // 176
+ INVIS_FIZZ3PIC, // 177
+ // Lump Start
+ BUG_WALK1PIC, // 178
+ BUG_WALK2PIC, // 179
+ BUG_WALK3PIC, // 180
+ BUG_ATTACK1PIC, // 181
+ BUG_ATTACK2PIC, // 182
+ BUG_DEATH1PIC, // 183
+ BUG_DEATH2PIC, // 184
+ BUG_SHOT1PIC, // 185
+ BUG_SHOT2PIC, // 186
+ // Lump Start
+ CYBORG1PIC, // 187
+ CYBORG2PIC, // 188
+ CYBORG3PIC, // 189
+ CYBORG4PIC, // 190
+ CYBORGATTACK1PIC, // 191
+ CYBORGATTACK2PIC, // 192
+ CYBORGATTACK3PIC, // 193
+ CYBORGOUCHPIC, // 194
+ CYBORGDIE1PIC, // 195
+ CYBORGDIE2PIC, // 196
+ // Lump Start
+ GREL1PIC, // 197
+ GREL2PIC, // 198
+ GRELATTACKPIC, // 199
+ GRELHITPIC, // 200
+ GRELDIE1PIC, // 201
+ GRELDIE2PIC, // 202
+ GRELDIE3PIC, // 203
+ GRELDIE4PIC, // 204
+ GRELDIE5PIC, // 205
+ GRELDIE6PIC, // 206
+ SKULL_SHOTPIC, // 207
+ // Lump Start
+ RAYFLY1PIC, // 208
+ RAYFLY2PIC, // 209
+ RAYFLY3PIC, // 210
+ RAYSHOT1PIC, // 211
+ RAYSHOT2PIC, // 212
+ RAYSHOOT1PIC, // 213
+ RAYSHOOT2PIC, // 214
+ RAYDEATH1PIC, // 215
+ RAYDEATH2PIC, // 216
+ RAYRISEPIC, // 217
+ // Lump Start
+ PORTAL1PIC, // 218
+ PORTAL2PIC, // 219
+ PORTAL3PIC, // 220
+ PORTAL4PIC, // 221
+ PORTAL5PIC, // 222
+ PORTAL6PIC, // 223
+ // Lump Start
+ DEMON1PIC, // 224
+ DEMON2PIC, // 225
+ DEMON3PIC, // 226
+ DEMON4PIC, // 227
+ DEMONATTACK1PIC, // 228
+ DEMONATTACK2PIC, // 229
+ DEMONATTACK3PIC, // 230
+ DEMONOUCHPIC, // 231
+ DEMONDIE1PIC, // 232
+ DEMONDIE2PIC, // 233
+ DEMONDIE3PIC, // 234
+ FIRSTWALLPIC, // 235
+ NEMESISPIC, // 236
+ ALTARLEFTPIC, // 237
+ ALTARRIGHTPIC, // 238
+ TEMPLEWALLLIGHTPIC, // 239
+ TEMPLEWALLDARKPIC, // 240
+ TORCHWALL1PIC, // 241
+ TORCHWALL2PIC, // 242
+ BRNBRKLIGHTPIC, // 243
+ BRNBRKDARKPIC, // 244
+ BRNBRKEMLIGHTPIC, // 245
+ BRNBRKEMDARKPIC, // 246
+ FIREWALL1PIC, // 247
+ FIREWALL2PIC, // 248
+ FIREWALL3PIC, // 249
+ FIREWALL4PIC, // 250
+ IRONGATEPIC, // 251
+ BRNFLGLIGHTPIC, // 252
+ BRNFLGDARKPIC, // 253
+ BRNFLGVINELIGHTPIC, // 254
+ BRNFLGVINEDARKPIC, // 255
+ BRNFLGDMGLIGHTPIC, // 256
+ BRNFLGDMGDARKPIC, // 257
+ SPACEDMG1LIGHTPIC, // 258
+ SPACEDMG1DARKPIC, // 259
+ SPACEDMG2LIGHTPIC, // 260
+ SPACEDMG2DARKPIC, // 261
+ SPACE1LIGHTPIC, // 262
+ SPACE1DARKPIC, // 263
+ SPACE2LIGHTPIC, // 264
+ SPACE2DARKPIC, // 265
+ SPACE3LIGHTPIC, // 266
+ SPACE3DARKPIC, // 267
+ SPACE4LIGHTPIC, // 268
+ SPACE4DARKPIC, // 269
+ SPACE5LIGHTPIC, // 270
+ SPACE5DARKPIC, // 271
+ SPACE6LIGHTPIC, // 272
+ SPACE6DARKPIC, // 273
+ SPACE7LIGHTPIC, // 274
+ SPACE7DARKPIC, // 275
+ SPACE8LIGHTPIC, // 276
+ SPACE8DARKPIC, // 277
+ SPACE10LIGHTPIC, // 278
+ SPACE10DARKPIC, // 279
+ RUSTDOORLIGHTPIC, // 280
+ RUSTDOORDARKPIC, // 281
+ SPACE11LIGHTPIC, // 282
+ SPACE11DARKPIC, // 283
+ SPACE12LIGHTPIC, // 284
+ SPACE12DARKPIC, // 285
+ SPACE13LIGHTPIC, // 286
+ SPACE13DARKPIC, // 287
+ SPACE14LIGHTPIC, // 288
+ SPACE14DARKPIC, // 289
+ SPACEDMG5LIGHTPIC, // 290
+ SPACEDMG5DARKPIC, // 291
+ SPACEDMG6LIGHTPIC, // 292
+ SPACEDMG6DARKPIC, // 293
+ SPCDOOR1LIGHTPIC, // 294
+ SPCDOOR1DARKPIC, // 295
+ SPCDOOR2LIGHTPIC, // 296
+ SPCDOOR2DARKPIC, // 297
+ SPCDOOR3LIGHTPIC, // 298
+ SPCDOOR3DARKPIC, // 299
+ SPCDOOR4LIGHTPIC, // 300
+ SPCDOOR4DARKPIC, // 301
+ COLUMNSLIGHTPIC, // 302
+ COLUMNSDARKPIC, // 303
+ DEMONSTATUELIGHTPIC, // 304
+ DEMONSTATUEDARKPIC, // 305
+ TROLLSTATUELIGHTPIC, // 306
+ TROLLSTATUEDARKPIC, // 307
+ BRNDMGVINELIGHTPIC, // 308
+ BRNDMGVINEDARKPIC, // 309
+ HORNDOORPIC, // 310
+ RUNEDOORPIC, // 311
+ IRONDMGLIGHTPIC, // 312
+ IRONDMGDARKPIC, // 313
+ IRONLIGHTPIC, // 314
+ IRONDARKPIC, // 315
+ TROLLLIGHTPIC, // 316
+ TROLLDARKPIC, // 317
+ TROLLBLOODYLIGHTPIC, // 318
+ TROLLBLOODYDARKPIC, // 319
+ STONEDOORLIGHTPIC, // 320
+ STONEDOORDARKPIC, // 321
+ IRONWTR1LIGHTPIC, // 322
+ IRONWTR2LIGHTPIC, // 323
+ IRONWTR3LIGHTPIC, // 324
+ IRONWTR1DARKPIC, // 325
+ IRONWTR2DARKPIC, // 326
+ IRONWTR3DARKPIC, // 327
+ RUSTWTR1LIGHTPIC, // 328
+ RUSTWTR2LIGHTPIC, // 329
+ RUSTWTR3LIGHTPIC, // 330
+ RUSTWTR1DARKPIC, // 331
+ RUSTWTR2DARKPIC, // 332
+ RUSTWTR3DARKPIC, // 333
+ CEMETARYLIGHTPIC, // 334
+ CEMETARYDARKPIC, // 335
+ WGRATE1LIGHTPIC, // 336
+ WGRATE2LIGHTPIC, // 337
+ WGRATE3LIGHTPIC, // 338
+ WGRATE1DARKPIC, // 339
+ WGRATE2DARKPIC, // 340
+ WGRATE3DARKPIC, // 341
+ BWGRATE1PIC, // 342
+ BWGRATE2PIC, // 343
+ GWGRATE3PIC, // 344
+ EGYPT2LIGHTPIC, // 345
+ EGYPT3LIGHTPIC, // 346
+ EGYPT2DARKPIC, // 347
+ EGYPT3DARKPIC, // 348
+ BRNFLGWINDOWLIGHTPIC, // 349
+ BRNFLGWINDOWDARKPIC, // 350
+ ENDPIC, // 351
+ SGRATEPIC, // 352
+ EXP_WALL_1PIC, // 353
+ EXP_WALL_2PIC, // 354
+ EXP_WALL_3PIC, // 355
+ WATER_EXP_WALL_1PIC, // 356
+ WATER_EXP_WALL_2PIC, // 357
+ WATER_EXP_WALL_3PIC, // 358
+ MAS_WIN_LIGHTPIC, // 359
+ MAS_WIN_DARKPIC, // 360
+ MAS_VINE1_LIGHTPIC, // 361
+ MAS_VINE1_DARKPIC, // 362
+ MAS_DOOR_LIGHTPIC, // 363
+ MAS_DOOR_DARKPIC, // 364
+ MAS_VINE2_LIGHTPIC, // 365
+ MAS_VINE2_DARKPIC, // 366
+ TAP1PIC, // 367
+ TAP2PIC, // 368
+ TAP3PIC, // 369
+ LASTWALLPIC, // 370
+
+ HAND1PICM=371,
+
+ NORTHICONSPR=372,
+
+ LEVEL1TEXT=663,
+ LEVEL2TEXT, // 664
+ LEVEL3TEXT, // 665
+ LEVEL4TEXT, // 666
+ LEVEL5TEXT, // 667
+ LEVEL6TEXT, // 668
+ LEVEL7TEXT, // 669
+ LEVEL8TEXT, // 670
+ LEVEL9TEXT, // 671
+ LEVEL10TEXT, // 672
+ LEVEL11TEXT, // 673
+ LEVEL12TEXT, // 674
+ LEVEL13TEXT, // 675
+ LEVEL14TEXT, // 676
+ LEVEL15TEXT, // 677
+ LEVEL16TEXT, // 678
+ LEVEL17TEXT, // 679
+ LEVEL18TEXT, // 680
+ PIRACY, // 681
ENUMEND
} graphicnums;
//
// Data LUMPs
//
-#define SKELDUDE_LUMP_START 22
-#define SKELDUDE_LUMP_END 31
-
-#define TOMBSTONES_LUMP_START 32
-#define TOMBSTONES_LUMP_END 34
-
-#define OBJ_WARP_LUMP_START 35
-#define OBJ_WARP_LUMP_END 38
-
-#define EYE_LUMP_START 39
-#define EYE_LUMP_END 49
-
-#define ZOMBIE_LUMP_START 50
-#define ZOMBIE_LUMP_END 61
-
-#define BOLT_LUMP_START 62
-#define BOLT_LUMP_END 64
-
-#define NUKE_LUMP_START 65
-#define NUKE_LUMP_END 67
-
-#define TIME_LUMP_START 68
-#define TIME_LUMP_END 69
-
-#define O_WATER_CHEST_LUMP_START 70
-#define O_WATER_CHEST_LUMP_END 71
+#define EYESTALK_LUMP_START 21
+#define EYESTALK_LUMP_END 35
-#define POTION_LUMP_START 72
-#define POTION_LUMP_END 72
+#define BLOB_LUMP_START 36
+#define BLOB_LUMP_END 47
-#define RKEY_LUMP_START 73
-#define RKEY_LUMP_END 73
+#define POTION_LUMP_START 48
+#define POTION_LUMP_END 48
-#define YKEY_LUMP_START 74
-#define YKEY_LUMP_END 74
+#define RKEY_LUMP_START 49
+#define RKEY_LUMP_END 49
-#define GKEY_LUMP_START 75
-#define GKEY_LUMP_END 75
+#define YKEY_LUMP_START 50
+#define YKEY_LUMP_END 50
-#define BKEY_LUMP_START 76
-#define BKEY_LUMP_END 76
+#define GKEY_LUMP_START 51
+#define GKEY_LUMP_END 51
-#define RGEM_LUMP_START 77
-#define RGEM_LUMP_END 78
+#define BKEY_LUMP_START 52
+#define BKEY_LUMP_END 52
-#define GGEM_LUMP_START 79
-#define GGEM_LUMP_END 80
+#define RGEM_LUMP_START 53
+#define RGEM_LUMP_END 53
-#define BGEM_LUMP_START 81
-#define BGEM_LUMP_END 82
+#define GGEM_LUMP_START 54
+#define GGEM_LUMP_END 54
-#define YGEM_LUMP_START 83
-#define YGEM_LUMP_END 84
+#define BGEM_LUMP_START 55
+#define BGEM_LUMP_END 55
-#define PGEM_LUMP_START 85
-#define PGEM_LUMP_END 86
+#define YGEM_LUMP_START 56
+#define YGEM_LUMP_END 56
-#define CHEST_LUMP_START 87
-#define CHEST_LUMP_END 87
+#define PGEM_LUMP_START 57
+#define PGEM_LUMP_END 57
-#define PLAYER_LUMP_START 88
-#define PLAYER_LUMP_END 92
+#define CHEST_LUMP_START 58
+#define CHEST_LUMP_END 58
-#define REDDEMON_LUMP_START 93
-#define REDDEMON_LUMP_END 103
+#define PLAYER_LUMP_START 59
+#define PLAYER_LUMP_END 63
-#define MAGE_LUMP_START 104
-#define MAGE_LUMP_END 109
+#define HEAD_LUMP_START 64
+#define HEAD_LUMP_END 64
-#define BAT_LUMP_START 110
-#define BAT_LUMP_END 115
+#define BOLT_LUMP_START 65
+#define BOLT_LUMP_END 67
-#define GREL_LUMP_START 116
-#define GREL_LUMP_END 126
+#define NUKE_LUMP_START 68
+#define NUKE_LUMP_END 70
-#define GODESS_LUMP_START 127
-#define GODESS_LUMP_END 136
+#define TIME_LUMP_START 71
+#define TIME_LUMP_END 72
-#define ANT_LUMP_START 137
-#define ANT_LUMP_END 145
+#define COLUMN5_LUMP_START 73
+#define COLUMN5_LUMP_END 73
-#define FATDEMON_LUMP_START 146
-#define FATDEMON_LUMP_END 157
+#define COLUMN1_LUMP_START 74
+#define COLUMN1_LUMP_END 74
-#define SUCCUBUS_LUMP_START 158
-#define SUCCUBUS_LUMP_END 167
+#define FFIREPOT_LUMP_START 75
+#define FFIREPOT_LUMP_END 75
-#define TREE_LUMP_START 168
-#define TREE_LUMP_END 177
+#define COLUMN2_LUMP_START 76
+#define COLUMN2_LUMP_END 76
-#define DRAGON_LUMP_START 178
-#define DRAGON_LUMP_END 193
+#define COLUMN3_LUMP_START 77
+#define COLUMN3_LUMP_END 77
-#define BUNNY_LUMP_START 194
-#define BUNNY_LUMP_END 204
+#define COLUMN4_LUMP_START 78
+#define COLUMN4_LUMP_END 78
-#define ARCH1_LUMP_START 205
-#define ARCH1_LUMP_END 205
+#define OFIREPOT_LUMP_START 79
+#define OFIREPOT_LUMP_END 80
-#define ARCH2_LUMP_START 206
-#define ARCH2_LUMP_END 206
+#define TOMB1_LUMP_START 81
+#define TOMB1_LUMP_END 81
-#define ARCH3_LUMP_START 207
-#define ARCH3_LUMP_END 207
+#define TOMB2_LUMP_START 82
+#define TOMB2_LUMP_END 82
-#define ARCH4_LUMP_START 208
-#define ARCH4_LUMP_END 208
+#define O_WATER_CHEST_LUMP_START 83
+#define O_WATER_CHEST_LUMP_END 85
-#define ARCH5_LUMP_START 209
-#define ARCH5_LUMP_END 209
+#define OLD_CHEST_LUMP_START 86
+#define OLD_CHEST_LUMP_END 86
-#define ARCH6_LUMP_START 210
-#define ARCH6_LUMP_END 210
+#define EYE_LUMP_START 87
+#define EYE_LUMP_END 97
-#define ARCH7_LUMP_START 211
-#define ARCH7_LUMP_END 211
+#define FUTUREMAGE_LUMP_START 98
+#define FUTUREMAGE_LUMP_END 107
-#define ARCH8_LUMP_START 212
-#define ARCH8_LUMP_END 212
+#define FORCEFIELD_LUMP_START 108
+#define FORCEFIELD_LUMP_END 111
-#define ARCH9_LUMP_START 213
-#define ARCH9_LUMP_END 213
+#define ROBOTANK_LUMP_START 112
+#define ROBOTANK_LUMP_END 122
-#define ARCH10_LUMP_START 214
-#define ARCH10_LUMP_END 214
+#define RAMBONE_LUMP_START 123
+#define RAMBONE_LUMP_END 134
-#define ARCH11_LUMP_START 215
-#define ARCH11_LUMP_END 215
+#define STOMPY_LUMP_START 135
+#define STOMPY_LUMP_END 148
-#define ARCH12_LUMP_START 216
-#define ARCH12_LUMP_END 216
+#define TROLL_LUMP_START 149
+#define TROLL_LUMP_END 158
-#define ARCH13_LUMP_START 217
-#define ARCH13_LUMP_END 217
+#define WIZARD_LUMP_START 159
+#define WIZARD_LUMP_END 171
-#define ANTHILL_LUMP_START 218
-#define ANTHILL_LUMP_END 218
+#define INVISDUDE_LUMP_START 172
+#define INVISDUDE_LUMP_END 177
-#define COLUMN_LUMP_START 219
-#define COLUMN_LUMP_END 219
+#define BUG_LUMP_START 178
+#define BUG_LUMP_END 186
-#define SULPHURGAS_LUMP_START 220
-#define SULPHURGAS_LUMP_END 222
+#define CYBORG_LUMP_START 187
+#define CYBORG_LUMP_END 196
-#define FIREPOT_LUMP_START 223
-#define FIREPOT_LUMP_END 224
+#define GREL_LUMP_START 197
+#define GREL_LUMP_END 207
-#define SKELHANG_LUMP_START 225
-#define SKELHANG_LUMP_END 225
+#define RAY_LUMP_START 208
+#define RAY_LUMP_END 217
-#define FORCEFIELD_LUMP_START 226
-#define FORCEFIELD_LUMP_END 229
+#define PORTAL_LUMP_START 218
+#define PORTAL_LUMP_END 223
-#define FOUNTAIN_LUMP_START 230
-#define FOUNTAIN_LUMP_END 230
+#define DEMON_LUMP_START 224
+#define DEMON_LUMP_END 234
//
// Amount of each data item
//
-#define NUMCHUNKS 658
+#define NUMCHUNKS 682
#define NUMFONT 1
#define NUMFONTM 0
-#define NUMPICS 344
+#define NUMPICS 367
#define NUMPICM 1
#define NUMSPRITES 1
#define NUMTILE8 108
@@ -621,7 +613,7 @@ typedef enum {
#define NUMTILE16M 72
#define NUMTILE32 0
#define NUMTILE32M 0
-#define NUMEXTERNS 18
+#define NUMEXTERNS 19
//
// File offsets for data items
//
@@ -632,15 +624,15 @@ typedef enum {
#define STARTFONT 3
#define STARTFONTM 4
#define STARTPICS 4
-#define STARTPICM 348
-#define STARTSPRITES 349
-#define STARTTILE8 350
-#define STARTTILE8M 351
-#define STARTTILE16 352
-#define STARTTILE16M 568
-#define STARTTILE32 640
-#define STARTTILE32M 640
-#define STARTEXTERNS 640
+#define STARTPICM 371
+#define STARTSPRITES 372
+#define STARTTILE8 373
+#define STARTTILE8M 374
+#define STARTTILE16 375
+#define STARTTILE16M 591
+#define STARTTILE32 663
+#define STARTTILE32M 663
+#define STARTEXTERNS 663
//
// Thank you for using IGRAB!
diff --git a/ID_ASM.EQU b/ID_ASM.EQU
index 01fe696..62da042 100644
--- a/ID_ASM.EQU
+++ b/ID_ASM.EQU
@@ -4,7 +4,7 @@
;----------------------------------------------------------------------------
-INCLUDE "GFXE_ARM.EQU"
+INCLUDE "GFXE_APC.EQU"
;----------------------------------------------------------------------------
diff --git a/ID_CA.C b/ID_CA.C
index cfc772e..bacb718 100644
--- a/ID_CA.C
+++ b/ID_CA.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_CA.H b/ID_CA.H
index 0b6a758..380ae29 100644
--- a/ID_CA.H
+++ b/ID_CA.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_HEADS.H b/ID_HEADS.H
index 88f86d3..88beabe 100644
--- a/ID_HEADS.H
+++ b/ID_HEADS.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -36,13 +36,13 @@
//--------------------------------------------------------------------------
-#define EXT "ARM"
+#define EXT "APC"
extern char far introscn;
-#include "GFXE_ARM.H"
-#include "AUDIOARM.H"
-#include "MAPSARM.H"
+#include "GFXE_APC.H"
+#include "AUDIOAPC.H"
+#include "MAPSAPC.H"
//--------------------------------------------------------------------------
diff --git a/ID_IN.C b/ID_IN.C
index 9beae17..a652f6f 100644
--- a/ID_IN.C
+++ b/ID_IN.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_IN.H b/ID_IN.H
index 93c4add..e2808d1 100644
--- a/ID_IN.H
+++ b/ID_IN.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_MM.C b/ID_MM.C
index c2d8154..4f01d8d 100644
--- a/ID_MM.C
+++ b/ID_MM.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -57,7 +57,7 @@ EMS / XMS unmanaged routines
#define OUT_OF_MEM_MSG "\n" \
- "You need more memory to run CATACOMB ARMAGEDDON. Read the INSTRUCTION\n" \
+ "You need more memory to run CATACOMB APOCALYPSE. Read the INSTRUCTION\n" \
"section of the START program for tips on getting more memory.\n"
#endif
diff --git a/ID_MM.H b/ID_MM.H
index 253b020..d7a697e 100644
--- a/ID_MM.H
+++ b/ID_MM.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_RF.C b/ID_RF.C
index 62dfa91..3d6f719 100644
--- a/ID_RF.C
+++ b/ID_RF.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_RF.H b/ID_RF.H
index 8a3b0e2..4fa2286 100644
--- a/ID_RF.H
+++ b/ID_RF.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_RF_A.ASM b/ID_RF_A.ASM
index 77af0e9..2121d66 100644
--- a/ID_RF_A.ASM
+++ b/ID_RF_A.ASM
@@ -1,4 +1,4 @@
-; Catacomb Armageddon Source Code
+; Catacomb Apocalypse Source Code
; Copyright (C) 1993-2014 Flat Rock Software
;
; This program is free software; you can redistribute it and/or modify
diff --git a/ID_SD.C b/ID_SD.C
index c62a0aa..898dbaa 100644
--- a/ID_SD.C
+++ b/ID_SD.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -1208,6 +1208,8 @@ SD_WaitSoundDone(void)
;
}
+
+#if 0
///////////////////////////////////////////////////////////////////////////
//
// SD_MusicOn() - turns on the sequencer
@@ -1317,3 +1319,5 @@ SD_MusicPlaying(void)
return(result);
#endif
}
+
+#endif \ No newline at end of file
diff --git a/ID_SD.H b/ID_SD.H
index d60aea3..8c3fbd6 100644
--- a/ID_SD.H
+++ b/ID_SD.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_STRS.H b/ID_STRS.H
index c34a245..f501bfd 100644
--- a/ID_STRS.H
+++ b/ID_STRS.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_US.C b/ID_US.C
index 082b231..aa6d442 100644
--- a/ID_US.C
+++ b/ID_US.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_US.H b/ID_US.H
index 7acc243..36ce898 100644
--- a/ID_US.H
+++ b/ID_US.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_US_1.C b/ID_US_1.C
index 789229c..3bc5755 100644
--- a/ID_US_1.C
+++ b/ID_US_1.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_US_2.C b/ID_US_2.C
index 3582803..4c42cb1 100644
--- a/ID_US_2.C
+++ b/ID_US_2.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_US_A.ASM b/ID_US_A.ASM
index a27ca54..c365f14 100644
--- a/ID_US_A.ASM
+++ b/ID_US_A.ASM
@@ -1,4 +1,4 @@
-; Catacomb Armageddon Source Code
+; Catacomb Apocalypse Source Code
; Copyright (C) 1993-2014 Flat Rock Software
;
; This program is free software; you can redistribute it and/or modify
diff --git a/ID_VW.C b/ID_VW.C
index f6a0067..9818d13 100644
--- a/ID_VW.C
+++ b/ID_VW.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_VW.H b/ID_VW.H
index 49e41d3..48777c4 100644
--- a/ID_VW.H
+++ b/ID_VW.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/ID_VW_A.ASM b/ID_VW_A.ASM
index d6376b2..232379d 100644
--- a/ID_VW_A.ASM
+++ b/ID_VW_A.ASM
@@ -1,4 +1,4 @@
-; Catacomb Armageddon Source Code
+; Catacomb Apocalypse Source Code
; Copyright (C) 1993-2014 Flat Rock Software
;
; This program is free software; you can redistribute it and/or modify
diff --git a/ID_VW_AC.ASM b/ID_VW_AC.ASM
index 97352be..40f574c 100644
--- a/ID_VW_AC.ASM
+++ b/ID_VW_AC.ASM
@@ -1,4 +1,4 @@
-; Catacomb Armageddon Source Code
+; Catacomb Apocalypse Source Code
; Copyright (C) 1993-2014 Flat Rock Software
;
; This program is free software; you can redistribute it and/or modify
diff --git a/ID_VW_AE.ASM b/ID_VW_AE.ASM
index e26c50b..354b50a 100644
--- a/ID_VW_AE.ASM
+++ b/ID_VW_AE.ASM
@@ -1,4 +1,4 @@
-; Catacomb Armageddon Source Code
+; Catacomb Apocalypse Source Code
; Copyright (C) 1993-2014 Flat Rock Software
;
; This program is free software; you can redistribute it and/or modify
diff --git a/JABHACK.ASM b/JABHACK.ASM
index 1621367..f290de2 100644
--- a/JABHACK.ASM
+++ b/JABHACK.ASM
@@ -1,4 +1,4 @@
-; Catacomb Armageddon Source Code
+; Catacomb Apocalypse Source Code
; Copyright (C) 1993-2014 Flat Rock Software
;
; This program is free software; you can redistribute it and/or modify
diff --git a/JAMPAK.C b/JAMPAK.C
index c12e038..6a6916a 100644
--- a/JAMPAK.C
+++ b/JAMPAK.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/JAMPAK.H b/JAMPAK.H
index 43f95ed..320664f 100644
--- a/JAMPAK.H
+++ b/JAMPAK.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/JAM_IO.C b/JAM_IO.C
index d0b019a..3526888 100644
--- a/JAM_IO.C
+++ b/JAM_IO.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/JAM_IO.H b/JAM_IO.H
index 77db01d..d080b31 100644
--- a/JAM_IO.H
+++ b/JAM_IO.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/LZHUF.C b/LZHUF.C
index bca738e..c6316c5 100644
--- a/LZHUF.C
+++ b/LZHUF.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/LZHUFF.H b/LZHUFF.H
index 1e4395e..092620d 100644
--- a/LZHUFF.H
+++ b/LZHUFF.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/LZW.C b/LZW.C
index 540cc7d..62a2bb5 100644
--- a/LZW.C
+++ b/LZW.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/LZW.H b/LZW.H
index 6279e25..9a1edec 100644
--- a/LZW.H
+++ b/LZW.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/MAPSAPC.H b/MAPSAPC.H
index b1de541..877f04b 100644
--- a/MAPSAPC.H
+++ b/MAPSAPC.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
@@ -18,7 +18,7 @@
///////////////////////////////////////
//
-// TED5 Map Header for ARM
+// TED5 Map Header for APC
//
///////////////////////////////////////
@@ -26,23 +26,24 @@
// Map Names
//
typedef enum {
- TOWN_MORBIDITY_MAP, // 0
- DARK_FOREST_MAP, // 1
- GARDEN_OF_SOULS_MAP, // 2
- LOST_CITY_DAMND_MAP, // 3
- TEMPLE_OF_VIPER_MAP, // 4
- TORTURE_CHAMBER_MAP, // 5
- DEMONS_HOLD_MAP, // 6
- COLONY_FIRE_ANT_MAP, // 7
- HALL_WRETCH_POX_MAP, // 8
- LAIR_OF_SUCUBUS_MAP, // 9
- BLOOD_CHAMB_EYE_MAP, // 10
- FLAMING_INFERNO_MAP, // 11
- SUBTERR_RIVER_MAP, // 12
- CRYSTAL_MAZE_MG_MAP, // 13
- RAMPARTS_OF_NEM_MAP, // 14
- FORTRESS_OF_NEM_MAP, // 15
- PASSAGE_TO_SURF_MAP, // 16
+ EGYPT_CEMETERY_MAP, // 0
+ CEMETERY_EGYPT_MAP, // 1
+ WIZARDS_ROOM_MAP, // 2
+ AXIS_TIME_LORDS_MAP, // 3
+ FUTURE_NODE_MAP, // 4
+ FIRE_NODE_MAP, // 5
+ ANCIENT_NODE_MAP, // 6
+ WATER_NODE_MAP, // 7
+ BIG_WIZARD_MAZE_MAP, // 8
+ RAMB_MANTA_MAP, // 9
+ FLOODED_CITY_MAP, // 10
+ COMPUTER_CORE_MAP, // 11
+ BIG_SPACE_MAP_MAP, // 12
+ ENCOUNTER_MAP, // 13
+ NEMESIS_FINAL_MAP, // 14
+ PASSAGE_HOME_MAP, // 15
+ EGYPT_1_MAP, // 16
+ WIZARD_GARDEN_MAP, // 17
LASTMAP
} mapnames;
diff --git a/README.md b/README.md
index 680f55a..297616d 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-The Catacomb Armageddon
+The Catacomb Apocalypse
=======================
-This repository contains the source code for The Catacomb Armageddon. The
+This repository contains the source code for The Catacomb Apocalypse. The
source code is designed for Borland C++ 2.0, but compiled fine with Borland C++
3.1 at the time of this release.
@@ -12,5 +12,5 @@ need to legally acquire the game data in order to use the exe built from this
source code.
To run the executable, the following command must be used or the check must be
-disabled in C5_MAIN.C:
- armgame.exe ^(a@&r`
+disabled in C6_MAIN.C:
+ apocgame.exe ^(a@&r`
diff --git a/SL_FILE.H b/SL_FILE.H
index 24849b1..81edb8f 100644
--- a/SL_FILE.H
+++ b/SL_FILE.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/SOFT.C b/SOFT.C
index f86481e..73cb9f9 100644
--- a/SOFT.C
+++ b/SOFT.C
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify
diff --git a/SOFT.H b/SOFT.H
index 2226de6..caad244 100644
--- a/SOFT.H
+++ b/SOFT.H
@@ -1,4 +1,4 @@
-/* Catacomb Armageddon Source Code
+/* Catacomb Apocalypse Source Code
* Copyright (C) 1993-2014 Flat Rock Software
*
* This program is free software; you can redistribute it and/or modify