]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/hb/c6_act4.c
[16_ca needs huge amounts of work and I should remember what needs to be done soon...
[16.git] / src / lib / hb / c6_act4.c
diff --git a/src/lib/hb/c6_act4.c b/src/lib/hb/c6_act4.c
new file mode 100755 (executable)
index 0000000..ced1178
--- /dev/null
@@ -0,0 +1,260 @@
+/* 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