]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/hb/c6_act3.c
going to start wolf3d core core (loop with input only) work soon. I was mostly brains...
[16.git] / src / lib / hb / c6_act3.c
diff --git a/src/lib/hb/c6_act3.c b/src/lib/hb/c6_act3.c
deleted file mode 100755 (executable)
index 3740289..0000000
+++ /dev/null
@@ -1,802 +0,0 @@
-/* Catacomb Apocalypse Source Code\r
- * Copyright (C) 1993-2014 Flat Rock Software\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along\r
- * with this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
- */\r
-\r
-// C3_PLAY.C\r
-\r
-#include "DEF.H"\r
-#pragma hdrstop\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                LOCAL CONSTANTS\r
-\r
-=============================================================================\r
-*/\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                GLOBAL VARIABLES\r
-\r
-=============================================================================\r
-*/\r
-\r
-boolean ShootPlayer (objtype *ob, short obclass, short speed, statetype *state);\r
-void T_ShootPlayer(objtype *ob);\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                LOCAL VARIABLES\r
-\r
-=============================================================================\r
-*/\r
-\r
-\r
-\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                       DEMON\r
-\r
-=============================================================================\r
-*/\r
-\r
-void T_TrollDemon (objtype *ob);\r
-\r
-statetype s_demonpause = {DEMON1PIC,40,NULL,&s_demon2};\r
-\r
-statetype s_demon1 = {DEMON1PIC,20,&T_TrollDemon,&s_demon2};\r
-statetype s_demon2 = {DEMON2PIC,20,&T_TrollDemon,&s_demon3};\r
-statetype s_demon3 = {DEMON3PIC,20,&T_TrollDemon,&s_demon4};\r
-statetype s_demon4 = {DEMON4PIC,20,&T_TrollDemon,&s_demon1};\r
-\r
-statetype s_demonattack1 = {DEMONATTACK1PIC,20,NULL,&s_demonattack2};\r
-statetype s_demonattack2 = {DEMONATTACK2PIC,20,NULL,&s_demonattack3};\r
-statetype s_demonattack3 = {DEMONATTACK3PIC,30,&T_DoDamage,&s_demonpause};\r
-\r
-statetype s_demonouch = {DEMONOUCHPIC,15,&T_TrollDemon,&s_demon1};\r
-\r
-statetype s_demondie1 = {DEMONDIE1PIC,40,NULL,&s_demondie2};\r
-statetype s_demondie2 = {DEMONDIE2PIC,30,&LargeSound,&s_demondie3};\r
-statetype s_demondie3 = {DEMONDIE3PIC,0,NULL,&s_demondie3};\r
-\r
-\r
-\r
-/*\r
-===============\r
-=\r
-= SpawnDemon\r
-=\r
-===============\r
-*/\r
-\r
-void SpawnDemon (int tilex, int tiley)\r
-{\r
-       SpawnNewObj(tilex,tiley,&s_demon1,PIXRADIUS*35);\r
-       new->obclass = demonobj;\r
-       new->speed = 2048;\r
-       new->flags |= of_shootable;\r
-       new->hitpoints = EasyHitPoints(30);\r
-}\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                                               TROLL\r
-\r
-=============================================================================\r
-*/\r
-\r
-statetype s_trollpause = {TROLL1PIC, 30, &T_DoDamage, &s_troll2};\r
-\r
-statetype s_troll1 = {TROLL1PIC, 13, &T_TrollDemon, &s_troll2};\r
-statetype s_troll2 = {TROLL2PIC, 13, &T_TrollDemon, &s_troll3};\r
-statetype s_troll3 = {TROLL3PIC, 13, &T_TrollDemon, &s_troll4};\r
-statetype s_troll4 = {TROLL4PIC, 13, &T_TrollDemon, &s_troll1};\r
-\r
-statetype s_trollattack1 = {TROLLATTACK1PIC, 15, NULL, &s_trollattack2};\r
-statetype s_trollattack2 = {TROLLATTACK2PIC, 20, NULL, &s_trollpause};\r
-\r
-statetype s_trollouch = {TROLLOUCHPIC, 14, &T_TrollDemon, &s_troll1};\r
-\r
-statetype s_trolldie1 = {TROLLDIE1PIC, 18, NULL, &s_trolldie2};\r
-statetype s_trolldie2 = {TROLLDIE2PIC, 15, &LargeSound, &s_trolldie3};\r
-statetype s_trolldie3 = {TROLLDIE3PIC, 0, NULL, &s_trolldie3};\r
-\r
-\r
-/*\r
-===============\r
-=\r
-= SpawnTroll\r
-=\r
-===============\r
-*/\r
-\r
-void SpawnTroll (int tilex, int tiley)\r
-{\r
-       SpawnNewObj(tilex,tiley,&s_troll1,35*PIXRADIUS);\r
-       new->speed = 2500;\r
-       new->obclass = trollobj;\r
-       new->flags |= of_shootable;\r
-       new->hitpoints = EasyHitPoints(15);\r
-}\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                                               CYBORG DEMON\r
-\r
-=============================================================================\r
-*/\r
-\r
-void T_Demon (objtype *ob);\r
-\r
-statetype s_cyborg_demon1 = {CYBORG1PIC, 20, T_TrollDemon, &s_cyborg_demon2};\r
-statetype s_cyborg_demon2 = {CYBORG2PIC, 20, T_TrollDemon, &s_cyborg_demon3};\r
-statetype s_cyborg_demon3 = {CYBORG3PIC, 20, T_TrollDemon, &s_cyborg_demon4};\r
-statetype s_cyborg_demon4 = {CYBORG4PIC, 20, T_TrollDemon, &s_cyborg_demon1};\r
-\r
-statetype s_cyborg_demonattack1 = {CYBORGATTACK1PIC, 20, NULL, &s_cyborg_demonattack2};\r
-statetype s_cyborg_demonattack2 = {CYBORGATTACK2PIC, 20, NULL, &s_cyborg_demonattack3};\r
-statetype s_cyborg_demonattack3 = {CYBORGATTACK3PIC, 30, T_DoDamage, &s_cyborg_demon2};\r
-\r
-statetype s_cyborg_demonouch = {CYBORGOUCHPIC, 30, NULL, &s_cyborg_demon1};\r
-\r
-statetype s_cyborg_demondie1 = {CYBORGOUCHPIC, 40, NULL, &s_cyborg_demondie2};\r
-statetype s_cyborg_demondie2 = {CYBORGDIE1PIC, 30, &LargeSound, &s_cyborg_demondie3};\r
-statetype s_cyborg_demondie3 = {CYBORGDIE2PIC, 20, NULL, &s_cyborg_demondie3};\r
-\r
-/*\r
-===============\r
-=\r
-= SpawnCyborgDemon\r
-=\r
-===============\r
-*/\r
-\r
-void SpawnCyborgDemon (int tilex, int tiley)\r
-{\r
-       SpawnNewObj(tilex, tiley, &s_cyborg_demon1, PIXRADIUS*35);\r
-       new->obclass    = cyborgdemonobj;\r
-       new->speed = 2048;\r
-       new->flags |= of_shootable;\r
-       new->hitpoints = EasyHitPoints(30);\r
-}\r
-\r
-\r
-/*\r
-===============\r
-=\r
-= T_TrollDemon\r
-=\r
-===============\r
-*/\r
-\r
-void T_TrollDemon (objtype *ob)\r
-{\r
-       if (Chase (ob,true) || (random(1000)<RANDOM_ATTACK))\r
-       {\r
-               if (ob->obclass == cyborgdemonobj)\r
-                       ob->state = &s_cyborg_demonattack1;\r
-               else\r
-                       if (ob->obclass == trollobj)\r
-                               ob->state = &s_trollattack1;\r
-                       else\r
-                               ob->state = &s_demonattack1;\r
-               ob->ticcount = ob->state->tictime;\r
-       }\r
-}\r
-\r
-\r
-\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                                               INVISIBLE DUDE!\r
-\r
-=============================================================================\r
-*/\r
-\r
-void T_InvisibleDude (objtype *ob);\r
-\r
-statetype s_invis_fizz1 = {INVIS_FIZZ1PIC, 8, &T_InvisibleDude, &s_invis_fizz2};\r
-statetype s_invis_fizz2 = {INVIS_FIZZ2PIC, 8, &T_InvisibleDude, &s_invis_fizz3};\r
-statetype s_invis_fizz3 = {INVIS_FIZZ3PIC, 8, &T_InvisibleDude, &s_invis_walk};\r
-\r
-statetype s_invis_walk = {0, 25, &T_InvisibleDude, &s_invis_walk};\r
-statetype s_invis_attack = {0, -1, &T_DoDamage, &s_invis_pause};\r
-statetype s_invis_pause = {0, 40, NULL, &s_invis_walk};\r
-\r
-statetype s_invis_flash1 = {INVIS_FIZZ1PIC, 8, &T_InvisibleDude, &s_invis_walk};\r
-statetype s_invis_flash2 = {INVIS_FIZZ2PIC, 8, &T_InvisibleDude, &s_invis_walk};\r
-statetype s_invis_flash3 = {INVIS_FIZZ3PIC, 8, &T_InvisibleDude, &s_invis_walk};\r
-\r
-statetype s_invis_death1 = {INVIS_DEATH1PIC, 40, NULL, &s_invis_death2};\r
-statetype s_invis_death2 = {INVIS_DEATH2PIC, 30, &LargeSound, &s_invis_death3};\r
-statetype s_invis_death3 = {INVIS_DEATH3PIC, 20, NULL, &s_invis_death3};\r
-\r
-/*\r
-===============\r
-=\r
-= SpawnInvisDude\r
-=\r
-===============\r
-*/\r
-void SpawnInvisDude(int tilex, int tiley)\r
-{\r
-       SpawnNewObj(tilex, tiley, &s_invis_walk, PIXRADIUS*20);\r
-       new->obclass    = invisdudeobj;\r
-       new->speed              = 2048;\r
-       new->flags              |= of_shootable;\r
-       new->hitpoints  = EasyHitPoints(20);\r
-       new->temp1              = 0;            // for random flashing of pictures\r
-}\r
-\r
-\r
-/*\r
-===============\r
-=\r
-= T_InvisibleDude\r
-=\r
-===============\r
-*/\r
-void T_InvisibleDude (objtype *ob)\r
-{\r
-       if (!random(100))\r
-       {\r
-               switch (ob->temp1++)\r
-               {\r
-                       case 0:\r
-                               ob->state = &s_invis_flash1;\r
-                       break;\r
-\r
-                       case 1:\r
-                               ob->state = &s_invis_flash2;\r
-                       break;\r
-\r
-                       case 2:\r
-                               ob->state = &s_invis_flash3;\r
-                               ob->temp1 = 0;\r
-                       break;\r
-               }\r
-               ob->ticcount = ob->state->tictime;\r
-       }\r
-\r
-\r
-       if (Chase (ob,true))\r
-       {\r
-               ob->state = &s_invis_attack;\r
-               ob->ticcount = ob->state->tictime;\r
-       }\r
-\r
-}\r
-\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                                                       BOUNCE\r
-\r
-temp2 = set when hit player, reset when hit wall\r
-\r
-=============================================================================\r
-*/\r
-\r
-#define SPDBOUNCE      4096\r
-#define DMGBOUNCE      10\r
-\r
-void T_Bounce (objtype *ob);\r
-void T_Bounce_Death (objtype *ob);\r
-\r
-statetype s_bounce1 = {PSHOT1PIC, 8, &T_Bounce, &s_bounce2};\r
-statetype s_bounce2 = {PSHOT2PIC, 8, &T_Bounce, &s_bounce1};\r
-\r
-/*\r
-===============\r
-=\r
-= SpawnBounce\r
-=\r
-===============\r
-*/\r
-\r
-void SpawnBounce (int tilex, int tiley, boolean towest)\r
-{\r
-       SpawnNewObj(tilex, tiley, &s_bounce1, 24*PIXRADIUS);\r
-       new->obclass = bounceobj;\r
-       new->hitpoints = EasyHitPoints(10);\r
-       new->flags |= of_shootable;\r
-       if (towest)\r
-               new->dir = west;\r
-       else\r
-               new->dir = north;\r
-}\r
-\r
-\r
-/*\r
-===============\r
-=\r
-= T_Bounce\r
-=\r
-===============\r
-*/\r
-\r
-void T_Bounce (objtype *ob)\r
-{\r
-       long move;\r
-       long deltax,deltay,size;\r
-\r
-       move = SPDBOUNCE*tics;\r
-       size = (long)ob->size + player->size + move;\r
-\r
-       while (move)\r
-       {\r
-               deltax = ob->x - player->x;\r
-               deltay = ob->y - player->y;\r
-\r
-               if (deltax <= size && deltax >= -size\r
-               && deltay <= size && deltay >= -size && !ob->temp2)\r
-               {\r
-                       ob->temp2 = 1;\r
-                       TakeDamage (DMGBOUNCE);\r
-               }\r
-\r
-               if (move < ob->distance)\r
-               {\r
-                       MoveObj (ob,move);\r
-                       break;\r
-               }\r
-               actorat[ob->tilex][ob->tiley] = 0;      // pick up marker from goal\r
-\r
-               ob->x = ((long)ob->tilex<<TILESHIFT)+TILEGLOBAL/2;\r
-               ob->y = ((long)ob->tiley<<TILESHIFT)+TILEGLOBAL/2;\r
-               move -= ob->distance;\r
-\r
-               //\r
-               // bounce if hit wall\r
-               //\r
-               switch (ob->dir)\r
-               {\r
-               case north:\r
-                       if (tilemap[ob->tilex][--ob->tiley])\r
-                       {\r
-                               ob->dir = south;\r
-                               ob->tiley+=2;\r
-                               ob->temp2 = 0;\r
-                       }\r
-                       break;\r
-               case east:\r
-                       if (tilemap[++ob->tilex][ob->tiley])\r
-                       {\r
-                               ob->dir = west;\r
-                               ob->tilex-=2;\r
-                               ob->temp2 = 0;\r
-                       }\r
-                       break;\r
-               case south:\r
-                       if (tilemap[ob->tilex][++ob->tiley])\r
-                       {\r
-                               ob->dir = north;\r
-                               ob->tiley-=2;\r
-                               ob->temp2 = 0;\r
-                       }\r
-                       break;\r
-               case west:\r
-                       if (tilemap[--ob->tilex][ob->tiley])\r
-                       {\r
-                               ob->dir = east;\r
-                               ob->tilex+=2;\r
-                               ob->temp2 = 0;\r
-                       }\r
-                       break;\r
-               }\r
-\r
-               ob->distance = TILEGLOBAL;\r
-\r
-               actorat[ob->tilex][ob->tiley] = ob;     // set down a new goal marker\r
-       }\r
-       CalcBounds (ob);\r
-}\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                       GRELMINAR\r
-\r
-=============================================================================\r
-*/\r
-\r
-\r
-void T_Grelminar (objtype *ob);\r
-void T_GrelminarShoot (objtype *ob);\r
-void T_Grelm_DropKey(objtype *ob);\r
-\r
-statetype s_grelpause = {GREL1PIC,50,NULL,&s_grel2};\r
-\r
-statetype s_grel1 = {GREL1PIC,20,T_Grelminar,&s_grel2};\r
-statetype s_grel2 = {GREL2PIC,20,T_Grelminar,&s_grel1};\r
-\r
-statetype s_grelattack3 = {GRELATTACKPIC,30,NULL,&s_grelpause};\r
-\r
-statetype s_grelouch = {GRELHITPIC,6,NULL,&s_grel1};\r
-\r
-statetype s_greldie1 = {GRELDIE1PIC,22,NULL,&s_greldie2};\r
-statetype s_greldie2 = {GRELDIE2PIC,22,NULL,&s_greldie3};\r
-statetype s_greldie3 = {GRELDIE3PIC,22,NULL,&s_greldie4};\r
-statetype s_greldie4 = {GRELDIE4PIC,22,NULL,&s_greldie5};\r
-statetype s_greldie5 = {GRELDIE5PIC,22,NULL,&s_greldie5a};\r
-statetype s_greldie5a = {GRELDIE5PIC,-1,T_Grelm_DropKey,&s_greldie6};\r
-statetype s_greldie6 = {GRELDIE6PIC,0,NULL,&s_greldie6};\r
-\r
-statetype s_gshot1 = {SKULL_SHOTPIC,8,T_ShootPlayer,&s_gshot1};\r
-\r
-/*\r
-===============\r
-=\r
-= SpawnGrelminar\r
-=\r
-===============\r
-*/\r
-\r
-void SpawnGrelminar (int tilex, int tiley)\r
-{\r
-       unsigned Grel_Hard;\r
-       unsigned DropKey;\r
-\r
-       SpawnNewObj(tilex,tiley,&s_grel1,PIXRADIUS*25);\r
-       new->obclass = grelmobj;\r
-       new->speed = 2048;\r
-       new->flags |= of_shootable;\r
-\r
-       //\r
-       // if Grelminar is to drop a key the info-plane byte to the right\r
-       //              should have a 1 in the highbyte, else he will not drop the key.\r
-       //\r
-       DropKey = *(mapsegs[2]+farmapylookup[tiley]+tilex+1);\r
-       if (DropKey)\r
-               new->temp1 = DropKey>>8;\r
-       else\r
-               new->temp1 = 0;\r
-\r
-       //\r
-       // The info-plane byte below Grelminar will determine how powerful\r
-       //              Grelminar is.  If nothing is there, he is the most powerful.\r
-       //                      -- affected are the hit points and the shot damage.\r
-       //      The hit points are controlled here, the shot damage is controlled\r
-       //      within the spawning of the shot.  See ShootPlayer for more info.\r
-       //\r
-       Grel_Hard = *(mapsegs[2]+farmapylookup[tiley+1]+tilex);\r
-       if (Grel_Hard)\r
-       {\r
-               new->temp2 = Grel_Hard>>8;\r
-               new->hitpoints = EasyHitPoints((new->temp2 * 10));\r
-       }\r
-       else\r
-       {\r
-               new->hitpoints = EasyHitPoints(100);\r
-               new->temp2 = 10;\r
-       }\r
-}\r
-\r
-\r
-/*\r
-===============\r
-=\r
-= T_Grelminar\r
-=\r
-===============\r
-*/\r
-\r
-void T_Grelminar (objtype *ob)\r
-{\r
-       Chase (ob,false);\r
-\r
-       if (!random(10))\r
-               if (ShootPlayer(ob,gshotobj,ob->temp2,&s_gshot1))\r
-               {\r
-                       ob->state = &s_grelattack3;\r
-                       ob->ticcount = ob->state->tictime;\r
-               }\r
-       if (CheckHandAttack(ob))\r
-               TakeDamage (ob->temp2*3);\r
-\r
-}\r
-\r
-\r
-//=================================\r
-//\r
-// T_Grelm_DropKey\r
-//\r
-//=================================\r
-void T_Grelm_DropKey(objtype *ob)\r
-{\r
-       if (!(ob->temp1))\r
-       {\r
-               ob->state = NULL;\r
-               return;\r
-       }\r
-\r
-       SpawnBonus(ob->tilex,ob->tiley,B_RKEY);\r
-       SD_PlaySound(GRELM_DEADSND);\r
-       ob->temp1 = false;\r
-}\r
-\r
-\r
-\r
-//--------------------------------------------------------------------------\r
-// ShootPlayer()\r
-//--------------------------------------------------------------------------\r
-boolean ShootPlayer(objtype *ob, short obclass, short speed, statetype *state)\r
-{\r
-       int angle = AngleNearPlayer(ob);\r
-\r
-       if (angle == -1)\r
-               return(false);\r
-\r
-       DSpawnNewObjFrac (ob->x,ob->y,state,PIXRADIUS*14);\r
-       new->obclass = obclass;\r
-       new->active = always;\r
-       new->angle = angle;\r
-\r
-       //\r
-       //      If the shot is Grelminar's, then determine the power of the shot.\r
-       //      The shot speed is hard-wired as 10000.  But the shot power is\r
-       //              determined by speed.  Speed now contains "Grelminar's level of\r
-       //              hardness" and this is multiplied by 3 to get the shot power.\r
-       //\r
-       if (obclass == gshotobj)\r
-       {\r
-               new->speed = 10000;\r
-               new->temp1 = speed*3;\r
-       }\r
-       else\r
-               new->speed = speed;\r
-\r
-\r
-       return(true);\r
-}\r
-\r
-//--------------------------------------------------------------------------\r
-// T_ShootPlayer()\r
-//--------------------------------------------------------------------------\r
-void T_ShootPlayer(objtype *ob)\r
-{\r
-       objtype *check;\r
-       long xmove,ymove,speed;\r
-\r
-       speed = ob->speed*tics;\r
-\r
-       xmove = FixedByFrac(speed,costable[ob->angle]);\r
-       ymove = -FixedByFrac(speed,sintable[ob->angle]);\r
-\r
-       if (ShotClipMove(ob,xmove,ymove))\r
-       {\r
-               ob->state = &s_pshot_exp1;\r
-               ob->ticcount = ob->state->tictime;\r
-               return;\r
-       }\r
-\r
-       ob->tilex = ob->x >> TILESHIFT;\r
-       ob->tiley = ob->y >> TILESHIFT;\r
-\r
-\r
-// check for collision with wall\r
-//\r
-       if (tilemap[ob->tilex][ob->tiley])\r
-       {\r
-//             SD_PlaySound (SHOOTWALLSND);\r
-               ob->state = &s_pshot_exp1;\r
-               ob->ticcount = s_pshot_exp1.tictime;\r
-               return;\r
-       }\r
-\r
-\r
-\r
-// check for collision with player\r
-//\r
-       if ( ob->xl <= player->xh\r
-       && ob->xh >= player->xl\r
-       && ob->yl <= player->yh\r
-       && ob->yh >= player->yl)\r
-       {\r
-               switch (ob->obclass)\r
-               {\r
-                       case wshotobj:                                          // Wizard's shot\r
-                               TakeDamage (7);\r
-                       break;\r
-\r
-                       case hshotobj:                                          // Egyptian Head's shot\r
-                               TakeDamage (5);\r
-                       break;\r
-\r
-                       case bshotobj:                                          // Blob's shot\r
-                               TakeDamage (5);\r
-                       break;\r
-\r
-                       case rshotobj:                                          // Ray's shot\r
-                               TakeDamage (5);\r
-                       break;\r
-\r
-                       case rbshotobj:                                 // RamBone's shot\r
-                               TakeDamage(7);\r
-                       break;\r
-\r
-                       case fmshotobj:                                 // Future Mage's shot\r
-                               TakeDamage(7);\r
-                       break;\r
-\r
-                       case rtshotobj:                                 // RoboTank's shot\r
-                               TakeDamage(15);\r
-                       break;\r
-\r
-                       case syshotobj:                                 // Stompy's shot\r
-                               TakeDamage(7);\r
-                       break;\r
-\r
-                       case bgshotobj:                                 // Bug's shot\r
-                               TakeDamage(7);\r
-                       break;\r
-\r
-                       case eshotobj:                                          // Eye's shot\r
-                               TakeDamage(5);\r
-                       break;\r
-\r
-                       case gshotobj:\r
-                               TakeDamage (ob->temp1);         // the damage of Grelminar's shot -\r
-                       break;                                                          //   see Grelminar's spawning\r
-\r
-               }\r
-               ob->state = NULL;\r
-               return;\r
-       }\r
-\r
-// check for collision with other solid and realsolid objects.\r
-//  Great terminology!! -- solid objects really aren't solid\r
-//                      -- realsolid objects ARE solid\r
-//     if ((actorat[ob->tilex][ob->tiley]) && (actorat[ob->tilex][ob->tiley]->obclass != ob->obclass))\r
-       if (((actorat[ob->tilex][ob->tiley]->obclass == realsolidobj) ||\r
-                (actorat[ob->tilex][ob->tiley]->obclass == solidobj)) &&\r
-                (actorat[ob->tilex][ob->tiley]->flags & of_shootable))\r
-       {\r
-                       ob->state = &s_pshot_exp1;\r
-                       ob->ticcount = s_pshot_exp1.tictime;\r
-                       return;\r
-       }\r
-\r
-\r
-// check for collision with player\r
-//\r
-       for (check = player->next; check; check=check->next)\r
-               if ((ob->flags & of_shootable)\r
-               && ob->xl <= check->xh\r
-               && ob->xh >= check->xl\r
-               && ob->yl <= check->yh\r
-               && ob->yh >= check->yl)\r
-               {\r
-                       switch (ob->obclass)\r
-                       {\r
-// APOCALYPSE\r
-                               case wshotobj:                                          // Wizard's shot\r
-                                       ShootActor (check, 3);\r
-                               break;\r
-\r
-                               case hshotobj:                                          // Egyptian Head's shot\r
-                                       ShootActor (check, 5);\r
-                               break;\r
-\r
-                               case bshotobj:                                          // Blob's shot\r
-                                       ShootActor (check, 2);\r
-                               break;\r
-\r
-                               case rshotobj:                                          // Ray's shot\r
-                                       ShootActor (check, 5);\r
-                               break;\r
-\r
-                               case rbshotobj:                                 // RamBone's shot\r
-                                       ShootActor (check, 5);\r
-                               break;\r
-\r
-                               case fmshotobj:                                 // Future Mage's shot\r
-                                       ShootActor (check, 5);\r
-                               break;\r
-\r
-                               case rtshotobj:                                 // RoboTank's shot\r
-                                       ShootActor (check, 15);\r
-                               break;\r
-\r
-                               case syshotobj:                                 // Stompy's shot\r
-                                       ShootActor (check, 5);\r
-                               break;\r
-\r
-                               case bgshotobj:                                 // Bug's shot\r
-                                       ShootActor (check, 3);\r
-                               break;\r
-\r
-                               case eshotobj:                                          // Eye's shot\r
-                                       ShootActor (check, 2);\r
-                               break;\r
-\r
-                               case gshotobj:\r
-                                       ShootActor (check,25);          //NOLAN--check on me!!!!!!!\r
-                               break;\r
-\r
-                               case pshotobj:\r
-                                       ShootActor (check,25);\r
-                               break;\r
-\r
-                       }\r
-                       ob->state = &s_pshot_exp1;\r
-                       ob->ticcount = s_pshot_exp1.tictime;\r
-                       return;\r
-               }\r
-}\r
-\r
-//-------------------------------------------------------------------------\r
-// AngleNearPlayer()\r
-//-------------------------------------------------------------------------\r
-int AngleNearPlayer(objtype *ob)\r
-{\r
-       int angle=-1;\r
-       int xdiff = ob->tilex-player->tilex;\r
-       int ydiff = ob->tiley-player->tiley;\r
-\r
-       if (ob->tiley == player->tiley)\r
-       {\r
-               if (ob->tilex < player->tilex)\r
-                       angle = 0;\r
-               else\r
-                       angle = 180;\r
-       }\r
-       else\r
-       if (ob->tilex == player->tilex)\r
-       {\r
-               if (ob->tiley < player->tiley)\r
-                       angle = 270;\r
-               else\r
-                       angle = 90;\r
-       }\r
-       else\r
-       if (xdiff == ydiff)\r
-               if (ob->tilex < player->tilex)\r
-               {\r
-                       if (ob->tiley < player->tiley)\r
-                               angle = 315;\r
-                       else\r
-                               angle = 45;\r
-               }\r
-               else\r
-               {\r
-                       if (ob->tiley < player->tiley)\r
-                               angle = 225;\r
-                       else\r
-                               angle = 135;\r
-               }\r
-\r
-       return(angle);\r
-}\r
-\r
-\r