OSDN Git Service

going on vacation >.<
[proj16/16.git] / src / lib / hb / def / kd_def.h
1 /* Keen Dreams Source Code\r
2  * Copyright (C) 2014 Javier M. Chavez\r
3  *\r
4  * This program is free software; you can redistribute it and/or modify\r
5  * it under the terms of the GNU General Public License as published by\r
6  * the Free Software Foundation; either version 2 of the License, or\r
7  * (at your option) any later version.\r
8  *\r
9  * This program is distributed in the hope that it will be useful,\r
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
12  * GNU General Public License for more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License along\r
15  * with this program; if not, write to the Free Software Foundation, Inc.,\r
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
17  */\r
18 \r
19 // KD_DEF.H\r
20 \r
21 #include "ID_HEADS.H"\r
22 #include <BIOS.H>\r
23 #include "SOFT.H"\r
24 #include "SL_FILE.H"\r
25 \r
26 #define FRILLS  0                       // Cut out frills for 360K - MIKE MAYNARD\r
27 \r
28 \r
29 /*\r
30 =============================================================================\r
31 \r
32                                                 GLOBAL CONSTANTS\r
33 \r
34 =============================================================================\r
35 */\r
36 \r
37 #define CREDITS 0\r
38 \r
39 #define MAXACTORS       MAXSPRITES\r
40 \r
41 #define ACCGRAVITY      3\r
42 #define SPDMAXY         80\r
43 \r
44 #define BLOCKSIZE       (8*PIXGLOBAL)           // for positioning starting actors\r
45 \r
46 //\r
47 // movement scrolling edges\r
48 //\r
49 #define SCROLLEAST (TILEGLOBAL*11)\r
50 #define SCROLLWEST (TILEGLOBAL*9)\r
51 #define SCROLLSOUTH (TILEGLOBAL*8)\r
52 #define SCROLLNORTH (TILEGLOBAL*4)\r
53 \r
54 #define CLIPMOVE        24                                      // speed to push out of a solid wall\r
55 \r
56 #define GAMELEVELS      17\r
57 \r
58 /*\r
59 =============================================================================\r
60 \r
61                                                          TYPES\r
62 \r
63 =============================================================================\r
64 */\r
65 \r
66 typedef enum    {notdone,resetgame,levelcomplete,warptolevel,died,victorious}\r
67                                 exittype;\r
68 \r
69 typedef enum    {nothing,keenobj,powerobj,doorobj,\r
70         bonusobj,broccoobj,tomatobj,carrotobj,celeryobj,asparobj,grapeobj,\r
71         taterobj,cartobj,frenchyobj,melonobj,turnipobj,cauliobj,brusselobj,\r
72         mushroomobj,squashobj,apelobj,peapodobj,peabrainobj,boobusobj,\r
73         shotobj,inertobj}       classtype;\r
74 \r
75 typedef struct\r
76 {\r
77   int           leftshapenum,rightshapenum;\r
78   enum          {step,slide,think,stepthink,slidethink} progress;\r
79   boolean       skippable;\r
80 \r
81   boolean       pushtofloor;\r
82   int tictime;\r
83   int xmove;\r
84   int ymove;\r
85   void (*think) ();\r
86   void (*contact) ();\r
87   void (*react) ();\r
88   void *nextstate;\r
89 } statetype;\r
90 \r
91 \r
92 typedef struct\r
93 {\r
94         unsigned        worldx,worldy;\r
95         boolean leveldone[GAMELEVELS];\r
96         long    score,nextextra;\r
97         int             flowerpowers;\r
98         int             boobusbombs,bombsthislevel;\r
99         int             keys;\r
100         int             mapon;\r
101         int             lives;\r
102         int             difficulty;\r
103 } gametype;\r
104 \r
105 \r
106 typedef struct  objstruct\r
107 {\r
108         classtype       obclass;\r
109         enum            {no,yes,allways,removable} active;\r
110         boolean         needtoreact,needtoclip;\r
111         unsigned        nothink;\r
112         unsigned        x,y;\r
113 \r
114         int                     xdir,ydir;\r
115         int                     xmove,ymove;\r
116         int                     xspeed,yspeed;\r
117 \r
118         int                     ticcount,ticadjust;\r
119         statetype       *state;\r
120 \r
121         unsigned        shapenum;\r
122 \r
123         unsigned        left,top,right,bottom;  // hit rectangle\r
124         unsigned        midx;\r
125         unsigned        tileleft,tiletop,tileright,tilebottom;  // hit rect in tiles\r
126         unsigned        tilemidx;\r
127 \r
128         int                     hitnorth,hiteast,hitsouth,hitwest;      // wall numbers contacted\r
129 \r
130         int                     temp1,temp2,temp3,temp4;\r
131 \r
132         void            *sprite;\r
133 \r
134         struct  objstruct       *next,*prev;\r
135 } objtype;\r
136 \r
137 \r
138 struct BitMapHeader {\r
139         unsigned int    w,h,x,y;\r
140         unsigned char   d,trans,comp,pad;\r
141 };\r
142 \r
143 struct BitMap {\r
144         unsigned int Width;\r
145         unsigned int Height;\r
146         unsigned int Depth;\r
147         unsigned int BytesPerRow;\r
148         char far *Planes[8];\r
149 };\r
150 \r
151 struct Shape {\r
152         memptr Data;\r
153         long size;\r
154         unsigned int BPR;\r
155         struct BitMapHeader bmHdr;\r
156 };\r
157 \r
158 typedef struct {\r
159         int handle;                     // handle of file\r
160         memptr buffer;          // pointer to buffer\r
161         word offset;            // offset into buffer\r
162         word status;            // read/write status\r
163 } BufferedIO;\r
164 \r
165 \r
166 \r
167 /*\r
168 =============================================================================\r
169 \r
170                                          KD_MAIN.C DEFINITIONS\r
171 \r
172 =============================================================================\r
173 */\r
174 \r
175 extern  char    str[80],str2[20];\r
176 extern  boolean singlestep,jumpcheat,godmode,tedlevel;\r
177 extern  unsigned        tedlevelnum;\r
178 \r
179 void    DebugMemory (void);\r
180 void    TestSprites(void);\r
181 int             DebugKeys (void);\r
182 void    StartupId (void);\r
183 void    ShutdownId (void);\r
184 void    Quit (char *error);\r
185 void    InitGame (void);\r
186 void    main (void);\r
187 \r
188 \r
189 /*\r
190 =============================================================================\r
191 \r
192                                           KD_DEMO.C DEFINITIONS\r
193 \r
194 =============================================================================\r
195 */\r
196 \r
197 void    Finale (void);\r
198 void    GameOver (void);\r
199 void    DemoLoop (void);\r
200 void    StatusWindow (void);\r
201 void    NewGame (void);\r
202 void    TEDDeath (void);\r
203 \r
204 boolean LoadGame (int file);\r
205 boolean SaveGame (int file);\r
206 void    ResetGame (void);\r
207 \r
208 /*\r
209 =============================================================================\r
210 \r
211                                           KD_PLAY.C DEFINITIONS\r
212 \r
213 =============================================================================\r
214 */\r
215 \r
216 extern  gametype        gamestate;\r
217 extern  exittype        playstate;\r
218 extern  boolean         button0held,button1held;\r
219 extern  unsigned        originxtilemax,originytilemax;\r
220 extern  objtype         *new,*check,*player,*scoreobj;\r
221 \r
222 extern  ControlInfo     c;\r
223 \r
224 extern  objtype dummyobj;\r
225 \r
226 extern  char            *levelnames[21];\r
227 \r
228 void    CheckKeys (void);\r
229 void    CalcInactivate (void);\r
230 void    InitObjArray (void);\r
231 void    GetNewObj (boolean usedummy);\r
232 void    RemoveObj (objtype *gone);\r
233 void    ScanInfoPlane (void);\r
234 void    PatchWorldMap (void);\r
235 void    MarkTileGraphics (void);\r
236 void    FadeAndUnhook (void);\r
237 void    SetupGameLevel (boolean loadnow);\r
238 void    ScrollScreen (void);\r
239 void    MoveObjVert (objtype *ob, int ymove);\r
240 void    MoveObjHoriz (objtype *ob, int xmove);\r
241 void    GivePoints (unsigned points);\r
242 void    ClipToEnds (objtype *ob);\r
243 void    ClipToEastWalls (objtype *ob);\r
244 void    ClipToWestWalls (objtype *ob);\r
245 void    ClipToWalls (objtype *ob);\r
246 void    ClipToSprite (objtype *push, objtype *solid, boolean squish);\r
247 void    ClipToSpriteSide (objtype *push, objtype *solid);\r
248 int     DoActor (objtype *ob,int tics);\r
249 void    StateMachine (objtype *ob);\r
250 void    NewState (objtype *ob,statetype *state);\r
251 void    PlayLoop (void);\r
252 void    GameLoop (void);\r
253 \r
254 /*\r
255 =============================================================================\r
256 \r
257                                           KD_KEEN.C DEFINITIONS\r
258 \r
259 =============================================================================\r
260 */\r
261 \r
262 void    CalcSingleGravity (void);\r
263 \r
264 void    ProjectileThink         (objtype *ob);\r
265 void    VelocityThink           (objtype *ob);\r
266 void    DrawReact                       (objtype *ob);\r
267 \r
268 void    SpawnScore (void);\r
269 void    FixScoreBox (void);\r
270 void    SpawnWorldKeen (int tilex, int tiley);\r
271 void    SpawnKeen (int tilex, int tiley, int dir);\r
272 \r
273 void    KillKeen (void);\r
274 \r
275 extern  int     singlegravity;\r
276 extern  unsigned        bounceangle[8][8];\r
277 \r
278 extern  statetype s_keendie1;\r
279 \r
280 /*\r
281 =============================================================================\r
282 \r
283                                           KD_ACT1.C DEFINITIONS\r
284 \r
285 =============================================================================\r
286 */\r
287 \r
288 void WalkReact (objtype *ob);\r
289 \r
290 void    DoGravity (objtype *ob);\r
291 void    AccelerateX (objtype *ob,int dir,int max);\r
292 void    FrictionX (objtype *ob);\r
293 \r
294 void    ProjectileThink         (objtype *ob);\r
295 void    VelocityThink           (objtype *ob);\r
296 void    DrawReact                       (objtype *ob);\r
297 void    DrawReact2                      (objtype *ob);\r
298 void    DrawReact3                      (objtype *ob);\r
299 void    ChangeState (objtype *ob, statetype *state);\r
300 \r
301 void    ChangeToFlower (objtype *ob);\r
302 \r
303 void    SpawnBonus (int tilex, int tiley, int type);\r
304 void    SpawnDoor (int tilex, int tiley);\r
305 void    SpawnBrocco (int tilex, int tiley);\r
306 void    SpawnTomat (int tilex, int tiley);\r
307 void    SpawnCarrot (int tilex, int tiley);\r
308 void    SpawnAspar (int tilex, int tiley);\r
309 void    SpawnGrape (int tilex, int tiley);\r
310 \r
311 extern  statetype s_doorraise;\r
312 \r
313 extern  statetype s_bonus;\r
314 extern  statetype s_bonusrise;\r
315 \r
316 extern  statetype s_broccosmash3;\r
317 extern  statetype s_broccosmash4;\r
318 \r
319 extern  statetype s_grapefall;\r
320 \r
321 /*\r
322 =============================================================================\r
323 \r
324                                           KD_ACT2.C DEFINITIONS\r
325 \r
326 =============================================================================\r
327 */\r
328 \r
329 void SpawnTater (int tilex, int tiley);\r
330 void SpawnCart (int tilex, int tiley);\r
331 void SpawnFrenchy (int tilex, int tiley);\r
332 void SpawnMelon (int tilex, int tiley,int dir);\r
333 void SpawnSquasher (int tilex, int tiley);\r
334 void SpawnApel (int tilex, int tiley);\r
335 void SpawnPeaPod (int tilex, int tiley);\r
336 void SpawnPeaBrain (int tilex, int tiley);\r
337 void SpawnBoobus (int tilex, int tiley);\r
338 \r
339 extern  statetype s_taterattack2;\r
340 extern  statetype s_squasherjump2;\r
341 extern  statetype s_boobusdie;\r
342 \r
343 extern  statetype s_deathwait1;\r
344 extern  statetype s_deathwait2;\r
345 extern  statetype s_deathwait3;\r
346 extern  statetype s_deathboom1;\r
347 extern  statetype s_deathboom2;\r
348 \r
349 \r
350 /////////////////////////////////////////////////////////////////////////////\r
351 //\r
352 //                                              GELIB.C DEFINITIONS\r
353 //\r
354 /////////////////////////////////////////////////////////////////////////////\r
355 \r
356 void FreeShape(struct Shape *shape);\r
357 int UnpackEGAShapeToScreen(struct Shape *SHP,int startx,int starty);\r
358 \r
359 long Verify(char *filename);\r
360 memptr InitBufferedIO(int handle, BufferedIO *bio);\r
361 void FreeBufferedIO(BufferedIO *bio);\r
362 byte bio_readch(BufferedIO *bio);\r
363 void bio_fillbuffer(BufferedIO *bio);\r
364 void SwapLong(long far *Var);\r
365 void SwapWord(unsigned int far *Var);\r
366 void MoveGfxDst(short x, short y);