+++ /dev/null
-/* 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
-// C4_PLAY.C\r
-\r
-#include "DEF.H"\r
-#pragma hdrstop\r
-\r
-\r
-/*\r
-=============================================================================\r
-\r
- LOCAL CONSTANTS\r
-\r
-=============================================================================\r
-*/\r
-\r
-\r
-//-------------------------------------------------------------------------\r
-//\r
-// MISC OBJECTS\r
-//\r
-//-------------------------------------------------------------------------\r
-\r
-\r
-//-------------------------------------------------------------------------\r
-// COLUMN, SULPHUR GAS HOLE, FIRE POT, FOUNTAIN\r
-//-------------------------------------------------------------------------\r
-\r
-\r
-void SpawnMiscObjects(int tilex, int tiley, int num);\r
-\r
-statetype s_column1 = {COLUMN1PIC, 20, NULL, &s_column1};\r
-statetype s_column2 = {COLUMN2PIC, 20, NULL, &s_column2};\r
-statetype s_column3 = {COLUMN3PIC, 20, NULL, &s_column3};\r
-statetype s_column4 = {COLUMN4PIC, 20, NULL, &s_column4};\r
-statetype s_column5 = {COLUMN5PIC, 20, NULL, &s_column5};\r
-statetype s_ffire_pot = {FFIRE_POTPIC, 20, NULL, &s_ffire_pot};\r
-statetype s_ofire_pot1 = {OFIRE_POT1PIC, 20, NULL, &s_ofire_pot2};\r
-statetype s_ofire_pot2 = {OFIRE_POT2PIC, 20, NULL, &s_ofire_pot1};\r
-statetype s_tomb1 = {TOMB1PIC, 20, NULL, &s_tomb1};\r
-statetype s_tomb2 = {TOMB2PIC, 20, NULL, &s_tomb2};\r
-void SpawnMiscObjects(int tilex, int tiley, int num)\r
-{\r
- statetype *objstate;\r
-\r
- switch (num)\r
- {\r
- case 1:\r
- objstate = &s_column1;\r
- break;\r
-\r
- case 2:\r
- objstate = &s_column2;\r
- break;\r
-\r
- case 3:\r
- objstate = &s_column3;\r
- break;\r
-\r
- case 4:\r
- objstate = &s_ffire_pot;\r
- break;\r
-\r
- case 5:\r
- objstate = &s_column4;\r
- break;\r
-\r
- case 6:\r
- objstate = &s_ofire_pot1;\r
- break;\r
-\r
- case 7:\r
- objstate = &s_tomb1;\r
- break;\r
-\r
- case 8:\r
- objstate = &s_tomb2;\r
- break;\r
-\r
- case 9:\r
- objstate = &s_column5;\r
- break;\r
- }\r
-\r
- SpawnNewObj(tilex, tiley, objstate, PIXRADIUS*10);\r
- new->obclass = realsolidobj;\r
- new->flags |= of_shootable;\r
-}\r
-\r
-\r
-\r
-//------------------------------------------------------------------------\r
-// FORCE FIELD\r
-//------------------------------------------------------------------------\r
-\r
-void SpawnForceField(int tilex, int tiley);\r
-void T_ForceField(objtype *ob);\r
-void T_ForceFieldRemove(objtype *ob);\r
-\r
-statetype s_force_field_1 = {FORCE_FIELD_1PIC, 10, T_ForceField, &s_force_field_2};\r
-statetype s_force_field_2 = {FORCE_FIELD_2PIC, 10, T_ForceField, &s_force_field_3};\r
-statetype s_force_field_3 = {FORCE_FIELD_3PIC, 10, T_ForceField, &s_force_field_4};\r
-statetype s_force_field_4 = {FORCE_FIELD_4PIC, 10, T_ForceField, &s_force_field_1};\r
-\r
-statetype s_force_field_die = {0,0,T_ForceFieldRemove,&s_force_field_die1};\r
-statetype s_force_field_die1 = {0,0,NULL,NULL};\r
-\r
-void SpawnForceField(int tilex, int tiley)\r
-{\r
- SpawnNewObj(tilex,tiley,&s_force_field_1,PIXRADIUS*35);\r
- new->obclass = solidobj;\r
- new->hitpoints = EasyHitPoints(20);\r
- new->temp1 = 0;\r
- new->flags |= of_forcefield; //sets bit 7 :: makes it nonsolid, but also detectable\r
- // without adding another object type!\r
- new->flags |= of_shootable;\r
-}\r
-\r
-void T_ForceField(objtype *ob)\r
-{\r
- long move,deltax,deltay,size;\r
-\r
- size = (long)ob->size + player->size;\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)\r
- if (!new->temp1)\r
- {\r
- TakeDamage (94);\r
- new->temp1 = 1;\r
- return;\r
- }\r
- else\r
- return;\r
- new->temp1 = 0;\r
-}\r
-\r
-void T_ForceFieldRemove(objtype *ob)\r
-{\r
- actorat[ob->tilex][ob->tiley] = 0;\r
-}\r
-\r
-\r
-\r
-\r
-//-------------------------------------------------------------------------\r
-//\r
-// INVISIBLE WALL CONTROLLER\r
-//\r
-//-------------------------------------------------------------------------\r
-\r
-void SpawnInvisWallCntroller(int x, int y);\r
-void T_InvisWall(objtype *ob);\r
-\r
-extern statetype s_invis_wall_control;\r
-\r
-statetype s_invis_wall_control = {0, 10, T_InvisWall, &s_invis_wall_control};\r
-\r
-void SpawnInvisWallCntroller(int tilex, int tiley)\r
-{\r
- SpawnNewObj(tilex,tiley,&s_invis_wall_control,PIXRADIUS*35);\r
- new->obclass = solidobj;\r
- new->flags &= ~of_shootable;\r
- new->temp1 = tilemap[tilex][tiley]; // Number for the wall tile here\r
- // Used for replacing the wall tile\r
-}\r
-\r
-void T_InvisWall(objtype *ob)\r
-{\r
- long move,deltax,deltay,size;\r
-\r
- size = (long)ob->size + player->size;\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) ||\r
- (ob->tilex == player->tilex) && (ob->tiley == player->tiley))\r
- {\r
- // Get rid of the wall tile if you are on it\r
- tilemap[ob->tilex][ob->tiley] = 0;\r
- }\r
- else\r
- {\r
- // Replace wall tile\r
- tilemap[ob->tilex][ob->tiley] = ob->temp1;\r
- }\r
-}\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// EasyHitPoints\r
-//\r
-// Checks to see if the player has selected the easy mode for playing.\r
-// If so then the normal hit points are cut in half.\r
-// This is when the object is spawned.\r
-//\r
-// Parms\r
-// NrmHitPts - the normal hit points\r
-//\r
-// Returns\r
-// Half of NrmHitPts\r
-//\r
-/////////////////////////////////////////////////////////////////////////////\r
-\r
-int EasyHitPoints(int NrmHitPts)\r
-{\r
- if (EASYMODEON) // Wimpy, Wimpy, Wimpy!!!!!\r
- {\r
- return(NrmHitPts/4);\r
- }\r
- else\r
- return(NrmHitPts);\r
-}\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// EasyDoDamage\r
-//\r
-// Checks to see if the player has selected the easy mode for playing.\r
-// If so then the normal amount of damage is cut in half.\r
-// This is called each time a monster does damage.\r
-//\r
-// Parms\r
-// Damage - the normal damage taken\r
-//\r
-// Returns\r
-// Half of Damage\r
-//\r
-/////////////////////////////////////////////////////////////////////////////\r
-\r
-int EasyDoDamage(int Damage)\r
-{\r
- if (EASYMODEON) // Wimpy, Wimpy, Wimpy!!!!!\r
- return(Damage/2);\r
- else\r
- return(Damage);\r
-}\r
-\r