|
|
1.1 root 1: /***************************************************************************
2: * WHPLR.C - code for player character *
3: * *
4: ***************************************************************************/
5:
6: #include "icorp.h"
7: #include <memcheck.h>
8:
9: int dropshieldcnt = 0;
10: int droptheshield = 0;
11:
12: int enchantedsoundhandle=-1;
13:
14: extern int shieldtype;
15: extern short gametype;
16: extern int godmode;
17:
18: #define EMPTY 0
19:
20: int spelltime;
21:
22: extern short torchpattern[];
23: extern int vampiretime;
24:
25: extern int loadedgame;
26: extern int goreon;
27: extern int helmettime;
28: extern int scoretime;
29: extern int difficulty;
30: int lives;
31: int madeahit = 0;
32: extern int lavasnd;
33: extern int expgained;
34:
35: int pyrn;
36: int dahand = 0;
37: int mapon = 1;
38:
39: long neartagdist,
40: neartaghitdist;
41:
42: short neartagsector,
43: neartagsprite,
44: neartagwall;
45:
46: struct player player[MAXPLAYERS];
47:
48: extern int justteleported;
49: extern int gameactivated;
50: extern long selectedgun;
51: extern short oldmousestatus;
52: extern long oldhoriz;
53:
54: extern int displaytime;
55:
56: extern int weapontimex;
57: extern int weapontimey;
58: extern int weapontilenum;
59:
60: extern int potiontilenum;
61: extern int shadowtime;
62:
63: extern int playerdie;
64: extern int frames;
65: extern long vel;
66:
67: int hasshot;
68: int orbshot;
69:
70: int weapondrop;
71: int weapondropgoal;
72: int weaponraise;
73:
74: int currweapon;
75: int currweapontics;
76: int currweaponanim;
77: short currweaponframe;
78: int currweaponfired;
79: int currweaponattackstyle;
80: int currweaponflip;
81:
82: int spellbooktics;
83: int spellbook;
84: int spellbookframe;
85: int spellbookflip;
86:
87: int spiketics;
88: int spikeframe;
89: int currspikeframe;
90: int spiked;
91:
92:
93: int strongtime,
94: invincibletime,
95: manatime,
96: invisibletime = -1,
97: nightglowtime;
98:
99: int arrowcnt;
100:
101: short arrowsprite[ARROWCOUNTLIMIT];
102:
103: #define THROWPIKELIMIT 100
104:
105: int throwpikecnt;
106:
107: short throwpikesprite[THROWPIKELIMIT];
108:
109: #define MAXFRAMES 12
110:
111: struct daweapons {
112: int daweapontics;
113: short daweaponframe;
114: long currx;
115: long curry;
116: };
117:
118: struct daweapons spikeanimtics[5] =
119: {{10, DIESPIKE, 136, 145},
120: {10, DIESPIKE + 1, 136, 124},
121: {10, DIESPIKE + 2, 136, 100},
122: {10, DIESPIKE + 3, 136, 70},
123: {10, DIESPIKE + 4, 136, 50}};
124:
125: //
126: struct daweapons spellbookanim[MAXNUMORBS][9] =
127: {
128: // SCARE
129: {{8, SPELLBOOK8, 121, 161}, {8, SPELLBOOK8 + 1, 121, 161},
130: {8, SPELLBOOK8 + 2, 121, 156}, {8, SPELLBOOK8 + 3, 121, 158},
131: {8, SPELLBOOK8 + 4, 121, 159}, {8, SPELLBOOK8 + 5, 121, 161},
132: {8, SPELLBOOK8 + 6, 121, 160}, {8, SPELLBOOK8 + 7, 121, 161},
133: {8, SPELLBOOK8 + 7, 121, 161}
134: },
135: // NIGHT VISION
136: {{8, SPELLBOOK6, 121, 161}, {8, SPELLBOOK6 + 1, 121, 161},
137: {8, SPELLBOOK6 + 2, 121, 156}, {8, SPELLBOOK6 + 3, 121, 158},
138: {8, SPELLBOOK6 + 4, 121, 159}, {8, SPELLBOOK6 + 5, 121, 161},
139: {8, SPELLBOOK6 + 6, 121, 160}, {8, SPELLBOOK6 + 7, 121, 161},
140: {8, SPELLBOOK6 + 7, 121, 161}
141: },
142: // FREEZE
143: {{8, SPELLBOOK3, 121, 161}, {8, SPELLBOOK3 + 1, 121, 161},
144: {8, SPELLBOOK3 + 2, 121, 156}, {8, SPELLBOOK3 + 3, 121, 158},
145: {8, SPELLBOOK3 + 4, 121, 159}, {8, SPELLBOOK3 + 5, 120, 161},
146: {8, SPELLBOOK3 + 6, 120, 160}, {8, SPELLBOOK3 + 7, 120, 161},
147: {8, SPELLBOOK3 + 7, 121, 161}
148: },
149: // MAGIC ARROW
150: {{8, SPELLBOOKBLANK, 121, 161}, {8, SPELLBOOKBLANK + 1, 121, 161},
151: {8, SPELLBOOKBLANK + 2, 121, 156}, {8, SPELLBOOKBLANK + 3, 121, 158},
152: {8, SPELLBOOKBLANK + 4, 121, 159}, {8, SPELLBOOKBLANK + 5, 121, 161},
153: {8, SPELLBOOKBLANK + 6, 120, 160}, {8, SPELLBOOKBLANK + 7, 121, 161},
154: {8, SPELLBOOKBLANK + 7, 122, 161}
155: },
156: // OPEN DOORS
157: {{8, SPELLBOOK7, 121, 161}, {8, SPELLBOOK7 + 1, 121, 161},
158: {8, SPELLBOOK7 + 2, 121, 156}, {8, SPELLBOOK7 + 3, 121, 158},
159: {8, SPELLBOOK7 + 4, 121, 159}, {8, SPELLBOOK7 + 5, 121, 161},
160: {8, SPELLBOOK7 + 6, 121, 160}, {8, SPELLBOOK7 + 7, 121, 161},
161: {8, SPELLBOOK7 + 7, 121, 161}
162: },
163: // FLY
164: {{8, SPELLBOOK2, 121, 161}, {8, SPELLBOOK2 + 1, 121, 161},
165: {8, SPELLBOOK2 + 2, 121, 156}, {8, SPELLBOOK2 + 3, 121, 158},
166: {8, SPELLBOOK2 + 4, 121, 159}, {8, SPELLBOOK2 + 5, 121, 161},
167: {8, SPELLBOOK2 + 6, 121, 160}, {8, SPELLBOOK2 + 7, 121, 161},
168: {8, SPELLBOOK2 + 7, 121, 161}
169: },
170: // FIRE BALL
171: {{8, SPELLBOOK4, 121, 161}, {8, SPELLBOOK4 + 1, 121, 161},
172: {8, SPELLBOOK4 + 2, 121, 156}, {8, SPELLBOOK4 + 3, 121, 158},
173: {8, SPELLBOOK4 + 4, 121, 159}, {8, SPELLBOOK4 + 5, 121, 161},
174: {8, SPELLBOOK4 + 6, 121, 160}, {8, SPELLBOOK4 + 7, 121, 161},
175: {8, SPELLBOOK4 + 7, 121, 161}
176: },
177: // NUKE!
178: {{8, SPELLBOOK5, 121, 161}, {8, SPELLBOOK5 + 1, 121, 161},
179: {8, SPELLBOOK5 + 2, 121, 156}, {8, SPELLBOOK5 + 3, 121, 158},
180: {8, SPELLBOOK5 + 4, 121, 159}, {8, SPELLBOOK5 + 5, 121, 161},
181: {8, SPELLBOOK5 + 6, 121, 160}, {8, SPELLBOOK5 + 7, 121, 161},
182: {8, SPELLBOOK5 + 7, 121, 161}
183: }
184:
185: };
186:
187: struct daweapons sspellbookanim[MAXNUMORBS][9] =
188: {
189: // SCARE
190: {{8, SSPELLBOOK8, 121, 389}, {8, SSPELLBOOK8 + 1, 121, 377},
191: {8, SSPELLBOOK8 + 2, 121, 383}, {8, SSPELLBOOK8 + 3, 121, 385},
192: {8, SSPELLBOOK8 + 4, 121, 389}, {8, SSPELLBOOK8 + 5, 121, 387},
193: {8, SSPELLBOOK8 + 6, 121, 389}, {8, SSPELLBOOK8 + 7, 121, 389},
194: {8, SSPELLBOOK8 + 7, 121, 389}
195: },
196: // NIGHT VISION
197: {{8, SSPELLBOOK6, 121, 389}, {8, SSPELLBOOK6 + 1, 121, 377},
198: {8, SSPELLBOOK6 + 2, 121, 383}, {8, SSPELLBOOK6 + 3, 121, 385},
199: {8, SSPELLBOOK6 + 4, 121, 389}, {8, SSPELLBOOK6 + 5, 121, 387},
200: {8, SSPELLBOOK6 + 6, 121, 389}, {8, SSPELLBOOK6 + 7, 121, 389},
201: {8, SSPELLBOOK6 + 7, 121, 389}
202: },
203: // FREEZE
204: {{8, SSPELLBOOK3, 121, 389}, {8, SSPELLBOOK3 + 1, 121, 377},
205: {8, SSPELLBOOK3 + 2, 121, 383}, {8, SSPELLBOOK3 + 3, 121, 385},
206: {8, SSPELLBOOK3 + 4, 121, 389}, {8, SSPELLBOOK3 + 5, 120, 387},
207: {8, SSPELLBOOK3 + 6, 120, 389}, {8, SSPELLBOOK3 + 7, 120, 389},
208: {8, SSPELLBOOK3 + 7, 121, 389}
209: },
210: // MAGIC ARROW
211: {{8, SSPELLBOOKBLANK, 121, 389}, {8, SSPELLBOOKBLANK + 1, 121, 377},
212: {8, SSPELLBOOKBLANK + 2, 121, 383}, {8, SSPELLBOOKBLANK + 3, 121, 385},
213: {8, SSPELLBOOKBLANK + 4, 121, 389}, {8, SSPELLBOOKBLANK + 5, 121, 387},
214: {8, SSPELLBOOKBLANK + 6, 120, 389}, {8, SSPELLBOOKBLANK + 7, 121, 389},
215: {8, SSPELLBOOKBLANK + 7, 122, 389}
216: },
217: // OPEN DOORS
218: {{8, SSPELLBOOK7, 121, 389}, {8, SSPELLBOOK7 + 1, 121, 377},
219: {8, SSPELLBOOK7 + 2, 121, 383}, {8, SSPELLBOOK7 + 3, 121, 385},
220: {8, SSPELLBOOK7 + 4, 121, 389}, {8, SSPELLBOOK7 + 5, 121, 387},
221: {8, SSPELLBOOK7 + 6, 121, 389}, {8, SSPELLBOOK7 + 7, 121, 389},
222: {8, SSPELLBOOK7 + 7, 121, 389}
223: },
224: // FLY
225: {{8, SSPELLBOOK2, 121, 389}, {8, SSPELLBOOK2 + 1, 121, 377},
226: {8, SSPELLBOOK2 + 2, 121, 383}, {8, SSPELLBOOK2 + 3, 121, 385},
227: {8, SSPELLBOOK2 + 4, 121, 389}, {8, SSPELLBOOK2 + 5, 121, 387},
228: {8, SSPELLBOOK2 + 6, 121, 389}, {8, SSPELLBOOK2 + 7, 121, 389},
229: {8, SSPELLBOOK2 + 7, 121, 389}
230: },
231: // FIRE BALL
232: {{8, SSPELLBOOK4, 121, 389}, {8, SSPELLBOOK4 + 1, 121, 377},
233: {8, SSPELLBOOK4 + 2, 121, 383}, {8, SSPELLBOOK4 + 3, 121, 385},
234: {8, SSPELLBOOK4 + 4, 121, 389}, {8, SSPELLBOOK4 + 5, 121, 387},
235: {8, SSPELLBOOK4 + 6, 121, 389}, {8, SSPELLBOOK4 + 6, 121, 389},
236: {8, SSPELLBOOK4 + 6, 121, 389}
237: },
238: // NUKE!
239: {{8, SSPELLBOOK5, 121, 389}, {8, SSPELLBOOK5 + 1, 121, 377},
240: {8, SSPELLBOOK5 + 2, 121, 383}, {8, SSPELLBOOK5 + 3, 121, 385},
241: {8, SSPELLBOOK5 + 4, 121, 389}, {8, SSPELLBOOK5 + 5, 121, 387},
242: {8, SSPELLBOOK5 + 6, 121, 389}, {8, SSPELLBOOK5 + 6, 121, 389},
243: {8, SSPELLBOOK5 + 6, 121, 389}
244: }
245:
246: };
247:
248:
249: struct daweapons throwanimtics[MAXNUMORBS][MAXFRAMES + 1] =
250: {
251: #if 0
252: // MUTWOHANDS - scare spell
253: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
254: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
255: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
256: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
257: {1, EMPTY, 127, 170}
258: },
259: #endif
260: // MUTWOHANDS - scare spell
261: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
262: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
263: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
264: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
265: {1, EMPTY, 127, 170}
266: },
267: #if 0
268: // MUMEDUSA - night vision
269: {{10, ZLIGHT, 0, 177}, {10, ZLIGHT + 1, 0, 137}, {10, ZLIGHT + 2, 48, 82},
270: {10, ZLIGHT + 3, 127, 41}, {10, ZLIGHT + 4, 210, 9}, {10, ZLIGHT + 5, 284, 26},
271: {10, ZLIGHT + 6, 213, 63}, {10, ZLIGHT + 7, 147, 99}, {10, ZLIGHT + 8, 91, 136},
272: {10, ZLIGHT + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
273: {1, EMPTY, 127, 170}
274: },
275: #endif
276: // MUTWOHANDS - night vision
277: {{10, ZFIREBALL, 0, 177}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82},
278: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26},
279: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136},
280: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
281: {1, EMPTY, 127, 170}
282: },
283: #if 0
284: // MUTWOHANDS - freeze
285: {{10, ZFREEZE, 0, 101}, {10, ZFREEZE + 1, 0, 51}, {10, ZFREEZE + 2, 0, 71},
286: {10, ZFREEZE + 3, 4, 85}, {10, ZFREEZE + 4, 32, 78}, {10, ZFREEZE + 5, 51, 80},
287: {10, ZFREEZE + 6, 50, 80}, {10, ZFREEZE + 7, 49, 89}, {10, ZFREEZE + 8, 49, 89},
288: {10, ZFREEZE + 9, 49, 98}, {10, ZFREEZE + 10, 47, 105}, {10, ZFREEZE + 11, 48, 121},
289: {1, EMPTY, 127, 170}
290: },
291: #endif
292: // MUTWOHANDS - freeze
293: {{1, EMPTY, 127, 170}, {10, ZFREEZE + 1, 0, 51}, {10, ZFREEZE + 2, 0, 71},
294: {10, ZFREEZE + 3, 4, 85}, {10, ZFREEZE + 4, 32, 78}, {10, ZFREEZE + 5, 51, 80},
295: {10, ZFREEZE + 6, 50, 80}, {10, ZFREEZE + 7, 49, 89}, {10, ZFREEZE + 8, 49, 89},
296: {10, ZFREEZE + 9, 49, 98}, {10, ZFREEZE + 10, 47, 105}, {10, ZFREEZE + 11, 48, 121},
297: {1, EMPTY, 127, 170}
298: },
299: #if 0
300: // MUTWOHANDS - magic arrow
301: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
302: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
303: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
304: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
305: {1, EMPTY, 127, 170}
306: },
307: #endif
308: // MUTWOHANDS - magic arrow
309: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
310: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
311: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
312: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
313: {1, EMPTY, 127, 170}
314: },
315: // MUTWOHANDS - open door
316: {{15, MUTWOHANDS, 19, 155}, {15, MUTWOHANDS + 1, 0, 128}, {15, MUTWOHANDS + 2, 0, 93},
317: {15, MUTWOHANDS + 3, 0, 83}, {15, MUTWOHANDS + 4, 0, 72}, {15, MUTWOHANDS + 5, 0, 83},
318: {15, MUTWOHANDS + 6, 10, 96}, {15, MUTWOHANDS + 7, 43, 109}, {15, MUTWOHANDS + 8, 69, 113},
319: {15, MUTWOHANDS + 9, 65, 115}, {15, MUTWOHANDS + 10, 64, 117}, {15, MUTWOHANDS + 11, 63, 117},
320: {1, EMPTY, 127, 170}
321: },
322: #if 0
323: // MUMEDUSA - fly
324: {{10, MUMEDUSA, 0, 177}, {10, MUMEDUSA + 1, 0, 137}, {10, MUMEDUSA + 2, 48, 82},
325: {10, MUMEDUSA + 3, 127, 41}, {10, MUMEDUSA + 4, 210, 9}, {10, MUMEDUSA + 5, 284, 26},
326: {10, MUMEDUSA + 6, 213, 63}, {10, MUMEDUSA + 7, 147, 99}, {10, MUMEDUSA + 8, 91, 136},
327: {10, MUMEDUSA + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
328: {1, EMPTY, 127, 170}
329: },
330: #endif
331: // MUMEDUSA - fly
332: {{10, ZLIGHT, 0, 177}, {10, ZLIGHT + 1, 0, 137}, {10, ZLIGHT + 2, 48, 82},
333: {10, ZLIGHT + 3, 127, 41}, {10, ZLIGHT + 4, 210, 9}, {10, ZLIGHT + 5, 284, 26},
334: {10, ZLIGHT + 6, 213, 63}, {10, ZLIGHT + 7, 147, 99}, {10, ZLIGHT + 8, 91, 136},
335: {10, ZLIGHT + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
336: {1, EMPTY, 127, 170}
337: },
338: #if 0
339: // MUTWOHANDS - fireball
340: {{10, ZFIREBALL, 0, 177}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82},
341: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26},
342: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136},
343: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
344: {1, EMPTY, 127, 170}
345: },
346: #endif
347: // MUTWOHANDS - fireball
348: {{1, EMPTY, 127, 170}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82},
349: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26},
350: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136},
351: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
352: {1, EMPTY, 127, 170}
353: },
354: #if 0
355: // MUTWOHANDS - nuke
356: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
357: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
358: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
359: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
360: {1, EMPTY, 127, 170}
361: }
362: #endif
363: // MUTWOHANDS - nuke
364: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
365: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
366: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
367: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
368: {1, EMPTY, 127, 170}
369: }
370: };
371:
372: struct daweapons lefthandanimtics[5][MAXFRAMES] =
373: {
374: {{10, RFIST, 15, 121}, {10, RFIST + 1, 17, 114}, {10, RFIST + 2, 54, 131},
375: {10, RFIST + 3, 76, 152}, {10, RFIST + 4, 31, 126}, {10, RFIST + 5, 26, 135},
376: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
377: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
378: },
379: // KNIFE
380: {{8, KNIFEATTACK2, 0, 113}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2 + 2, 119, 137},
381: {8, KNIFEATTACK2 + 3, 187, 159}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 187, 159},
382: {8, KNIFEATTACK2 + 2, 119, 137}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2, 0, 113},
383: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
384: },
385: // GOBLINATTACK
386: {{10, GOBSWORDATTACK, 243, 92}, {10, GOBSWORDATTACK + 1, 255, 68}, {10, GOBSWORDATTACK + 2, 279, 65},
387: {10, GOBSWORDATTACK + 3, 238, 55}, {10, GOBSWORDATTACK + 4, 153, 52}, {10, GOBSWORDATTACK + 5, 129, 152},
388: {10, GOBSWORDATTACK + 6, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24},
389: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
390: },
391: // MORNINGATTACK2
392:
393: {{12, MORNINGATTACK2, 38, 141}, {12, MORNINGATTACK2 + 1, 0, 111}, {12, MORNINGATTACK2 + 2, 0, 91},
394: {12, MORNINGATTACK2 + 3, 0, 47}, {12, MORNINGATTACK2 + 4, 0, 24}, {1, EMPTY, 0, 24},
395: {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24},
396: {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}
397:
398: },
399:
400: // GOBLINATTACK2
401: {{10, GOBSWORDATTACK2, 236, 99}, {10, GOBSWORDATTACK2 + 1, 202, 24}, {10, GOBSWORDATTACK2 + 2, 181, 0},
402: {10, GOBSWORDATTACK2 + 3, 52, 12}, {10, GOBSWORDATTACK2 + 4, 72, 72}, {10, GOBSWORDATTACK2 + 5, 134, 139},
403: {10, GOBSWORDATTACK2 + 6, 297, 169}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
404: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
405: }
406:
407: };
408:
409:
410: #define LFIST EMPTY
411:
412: struct daweapons cockanimtics[MAXFRAMES + 1] =
413: {
414: {24, EMPTY, 10, 10},
415: {12, BOWREADYEND + 1, 101, 115}, {12, BOWREADYEND + 2, 112, 0},
416: {12, BOWREADYEND + 3, 115, 0}, {12, BOWREADYEND + 4, 75, 13}
417: };
418:
419: struct daweapons readyanimtics[MAXWEAPONS][MAXFRAMES + 1] =
420: {
421: // FIST
422: {{10, RFIST, 216, 180}, {10, RFIST, 216, 170}, {10, RFIST, 216, 160},
423: {10, RFIST, 216, 150}, {10, RFIST, 216, 140}, {10, RFIST, 216, 130},
424: {10, RFIST, 216, 124}, {1, RFIST, 216, 124}, {1, RFIST, 216, 124},
425: {1, RFIST, 216, 122}, {1, RFIST, 216, 122}, {1, RFIST, 216, 122},
426: {1, EMPTY, 147, 76}
427: },
428: // KNIFE
429: {{10, KNIFEREADY, 69, 171}, {10, KNIFEREADY + 1, 11, 146}, {10, KNIFEREADY + 2, 25, 146},
430: {10, KNIFEREADY + 3, 35, 158}, {10, KNIFEREADY + 4, 38, 158}, {10, KNIFEREADY + 5, 16, 157},
431: {10, KNIFEREADY + 6, 37, 102}, {10, KNIFEREADY + 7, 239, 63}, {10, KNIFEREADY + 8, 214, 85},
432: {10, KNIFEREADY + 9, 206, 110}, {10, KNIFEREADY + 10, 217, 108}, {10, KNIFEREADY + 11, 204, 95},
433: {1, EMPTY, 147, 76}
434: },
435: // GOBSWORD
436: {{12, GOBSWORDPULL, 79, 169}, {12, GOBSWORDPULL + 1, 95, 115}, {12, GOBSWORDPULL + 2, 94, 93},
437: {12, GOBSWORDPULL + 3, 156, 77}, {12, GOBSWORDPULL + 4, 218, 64}, {12, GOBSWORDPULL + 5, 224, 57},
438: {8, GOBSWORDPULL + 6, 251, 54}, {1, GOBSWORDPULL + 7, 243, 92}, {1, GOBSWORDPULL + 7, 243, 92},
439: {1, GOBSWORDPULL + 7, 243, 92}, {1, GOBSWORDPULL + 7, 243, 92}, {1, GOBSWORDPULL + 7, 243, 92},
440: {1, EMPTY, 147, 76}
441: },
442: // MORNINGSTAR
443: {{6, MORNINGSTAR, 193, 190}, {6, MORNINGSTAR, 193, 180}, {6, MORNINGSTAR, 193, 170},
444: {6, MORNINGSTAR, 193, 160}, {6, MORNINGSTAR, 193, 150}, {6, MORNINGSTAR, 193, 140},
445: {6, MORNINGSTAR, 193, 130}, {6, MORNINGSTAR, 193, 120}, {6, MORNINGSTAR, 193, 110},
446: {6, MORNINGSTAR, 193, 100}, {6, MORNINGSTAR, 193, 90}, {1, MORNINGSTAR, 193, 90},
447: {1, EMPTY, 147, 76}
448: },
449: // SWORD
450: {{10, SWORDPULL, 58, 160}, {10, SWORDPULL + 1, 81, 111}, {10, SWORDPULL + 2, 19, 88},
451: {10, SWORDPULL + 3, 0, 93}, {10, SWORDPULL + 4, 104, 0}, {10, SWORDPULL + 5, 169, 0},
452: {10, SWORDPULL + 6, 244, 38}, {6, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121},
453: {1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121},
454: {1, EMPTY, 147, 76}
455: },
456: {{12, BIGAXEDRAW, 71, 108}, {12, BIGAXEDRAW + 1, 17, 58}, {12, BIGAXEDRAW + 2, 0, 56},
457: {12, BIGAXEDRAW + 3, 0, 71}, {12, BIGAXEDRAW + 4, 0, 102}, {12, BIGAXEDRAW + 5, 0, 11},
458: {12, BIGAXEDRAW + 6, 33, 0}, {12, BIGAXEDRAW + 7, 69, 0}, {12, BIGAXEDRAW + 8, 75, 20},
459: {12, BIGAXEDRAW9, 150, 92}, {12, BIGAXEDRAW10, 182, 116}, {1, EMPTY, 200, 122},
460: {1, EMPTY, 147, 76}
461: },
462: // BOW
463: {{12, BOWREADY, 0, 0}, {12, BOWREADY + 1, 0, 20}, {12, BOWREADY + 2, 0, 46},
464: {12, BOWREADY + 3, 0, 26}, {12, BOWREADY + 4, 0, 0}, {12, BOWREADY + 5, 71, 0},
465: {8, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23},
466: {1, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23}, {1, BOWREADYEND, 77, 23},
467: {1, EMPTY, 147, 76}
468: },
469: {{8, PIKEDRAW, 0, 156}, {8, PIKEDRAW + 1, 15, 98}, {8, PIKEDRAW + 2, 83, 49},
470: {8, PIKEDRAW + 3, 144, 66}, {8, PIKEDRAW + 4, 197, 99}, {8, PIKEDRAW + 5, 216, 131},
471: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
472: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
473: {1, EMPTY, 147, 76}
474: },
475: {{12, EXCALDRAW, 167, 130}, {12, EXCALDRAW + 1, 70, 117}, {12, EXCALDRAW + 2, 0, 128},
476: {12, EXCALDRAW + 3, 0, 150}, {12, EXCALDRAW + 4, 4, 72}, {12, EXCALDRAW + 5, 38, 81},
477: {12, EXCALDRAW + 6, 0, 44}, {12, EXCALDRAW + 7, 112, 0}, {12, EXCALDRAW + 8, 224, 0},
478: {12, EXCALDRAW + 9, 198, 84}, {12, EXCALDRAW + 10, 186, 120}, {12, EXCALDRAW + 11, 188, 123},
479: {1, EMPTY, 147, 76}
480: },
481: {{12, HALBERDDRAW, 183, 62}, {12, HALBERDDRAW + 1, 166, 10}, {12, HALBERDDRAW + 2, 173, 29},
482: {12, HALBERDDRAW + 3, 114, 35}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22},
483: {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22},
484: {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22},
485: {1, EMPTY, 147, 76}
486: }
487:
488: };
489:
490:
491:
492: struct daweapons weaponanimtics[MAXWEAPONS][MAXFRAMES] =
493: {
494: // FIST
495: {{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129},
496: {10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133},
497: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
498: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
499: },
500: // KNIFE
501: {{8, KNIFEATTACK, 189, 52}, {8, KNIFEATTACK + 1, 254, 68}, {8, EMPTY, 147, 76},
502: {8, EMPTY, 80, 41}, {8, KNIFEATTACK + 2, 254, 69}, {8, KNIFEATTACK + 3, 218, 80},
503: {8, KNIFEATTACK + 4, 137, 83}, {8, KNIFEATTACK + 5, 136, 100}, {8, KNIFEATTACK + 6, 126, 140},
504: {8, KNIFEATTACK + 5, 136, 100}, {8, KNIFEATTACK + 4, 137, 83}, {8, KNIFEATTACK, 189, 52}
505: },
506: // GOBLINATTACK
507: {{10, GOBSWORDATTACK, 243, 92}, {10, GOBSWORDATTACK + 1, 255, 68}, {10, GOBSWORDATTACK + 2, 279, 65},
508: {10, GOBSWORDATTACK + 3, 238, 55}, {10, GOBSWORDATTACK + 4, 153, 52}, {10, GOBSWORDATTACK + 5, 129, 152},
509: {10, GOBSWORDATTACK + 6, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24},
510: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
511: },
512: // MORNINGSTAR
513: {{12, MORNINGSTAR, 193, 90}, {12, MORNINGSTAR + 1, 102, 133}, {12, MORNINGSTAR + 2, 77, 164},
514: {12, MORNINGSTAR + 3, 239, 86}, {12, EMPTY, 299, 86}, {12, EMPTY, 107, 52},
515: {12, MORNINGSTAR + 4, 197, 24}, {12, MORNINGSTAR + 5, 125, 124}, {12, MORNINGSTAR + 6, 109, 191},
516: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
517: },
518: // SWORD
519: {{8, SWORDATTACK, 229, 123}, {8, SWORDATTACK + 1, 221, 87}, {8, SWORDATTACK + 2, 193, 21},
520: {8, SWORDATTACK + 3, 173, 0}, {8, SWORDATTACK + 4, 61, 0}, {8, SWORDATTACK + 5, 33, 48},
521: {8, SWORDATTACK + 6, 126, 131}, {8, SWORDATTACK + 7, 297, 164}, {3, EMPTY, 147, 76},
522: {3, EMPTY, 80, 41}, {3, EMPTY, 107, 52}, {3, EMPTY, 147, 76}
523: },
524: {{12, BIGAXEATTACK, 184, 123}, {12, BIGAXEATTACK + 1, 223, 112}, {12, BIGAXEATTACK + 2, 63, 151},
525: {12, BIGAXEATTACK + 3, 91, 133}, {12, BIGAXEATTACK + 4, 127, 138}, {12, BIGAXEATTACK + 5, 106, 128},
526: {12, BIGAXEATTACK + 6, 117, 49}, {12, BIGAXEATTACK + 7, 140, 0}, {12, BIGAXEATTACK + 8, 152, 47},
527: {12, BIGAXEATTACK + 9, 166, 143}, {12, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
528: },
529: // BOW
530: {{8, BOWWALK, 75, 13}, {8, BOWWALK + 1, 90, 0}, {8, BOWWALK + 2, 70, 0},
531: {8, BOWWALK + 3, 70, 0}, {6, BOWWALK + 4, 70, 0}, {4, BOWWALK + 5, 70, 0},
532: {1, EMPTY, 126, 131}, {1, EMPTY, 297, 164}, {1, EMPTY, 147, 76},
533: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
534: },
535: {{10, PIKEDRAW + 5, 216, 131}, {10, EMPTY, 80, 41}, {10, EMPTY, 107, 52}, {10, EMPTY, 147, 76},
536: {10, PIKEATTACK1, 0, 47}, {10, PIKEATTACK1 + 1, 0, 0}, {10, PIKEATTACK1 + 2, 0, 0},
537: {10, PIKEATTACK1 + 3, 73, 0}, {10, PIKEATTACK1 + 4, 130, 27}, {10, PIKEATTACK1 + 5, 138, 125},
538: {12, EMPTY, 80, 41}, {1, EMPTY, 107, 52}
539: },
540: {{8, EXCALATTACK1, 98, 133}, {8, EXCALATTACK1 + 1, 123, 130}, {8, EXCALATTACK1 + 2, 125, 128},
541: {8, EXCALATTACK1 + 3, 115, 82}, {8, EXCALATTACK1 + 4, 115, 6}, {8, EXCALATTACK1 + 5, 178, 0},
542: {8, EXCALATTACK1 + 6, 155, 0}, {8, EXCALATTACK1 + 7, 143, 0}, {8, EXCALATTACK1 + 8, 90, 91},
543: {8, EXCALATTACK1 + 9, 30, 159}, {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}
544: },
545: {{12, HALBERDATTACK1, 245, 22}, {12, EMPTY, 107, 52}, {12, EMPTY, 147, 76},
546: {12, HALBERDATTACK1 + 1, 249, 45}, {12, HALBERDATTACK1 + 2, 161, 60}, {12, HALBERDATTACK1 + 3, 45, 88},
547: {12, EMPTY, 80, 41}, {12, HALBERDATTACK1 + 3, 45, 88}, {12, HALBERDATTACK1 + 2, 161, 60},
548: {12, HALBERDATTACK1 + 1, 249, 45}, {12, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
549: }
550: };
551:
552:
553: struct daweapons weaponanimtics2[MAXWEAPONS][MAXFRAMES] =
554: {
555: // FIST
556: {{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129},
557: {10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133},
558: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
559: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
560: },
561: // KNIFE
562: {{8, KNIFEATTACK, 189, 52}, {8, KNIFEATTACK + 1, 254, 68}, {16, EMPTY, 147, 76},
563: {8, KNIFEATTACK2, 206, 114}, {8, KNIFEATTACK2 + 1, 107, 112}, {8, KNIFEATTACK2 + 2, 22, 138},
564: {8, KNIFEATTACK2 + 3, 0, 161}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 0, 161},
565: {8, KNIFEATTACK2 + 2, 22, 138}, {8, KNIFEATTACK2 + 1, 107, 112}, {8, KNIFEATTACK2, 206, 114}
566: },
567: // GOBLINATTACK
568: {{10, GOBSWORDATTACK2, 236, 99}, {10, GOBSWORDATTACK2 + 1, 202, 24}, {10, GOBSWORDATTACK2 + 2, 181, 0},
569: {10, GOBSWORDATTACK2 + 3, 52, 12}, {10, GOBSWORDATTACK2 + 4, 72, 72}, {10, GOBSWORDATTACK2 + 5, 134, 139},
570: {10, GOBSWORDATTACK2 + 6, 297, 169}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
571: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
572: },
573: // MORNINGATTACK2
574: {{12, MORNINGATTACK2, 85, 136}, {12, MORNINGATTACK2 + 1, 34, 110}, {12, MORNINGATTACK2 + 2, 32, 91},
575: {12, MORNINGATTACK2 + 3, 186, 47}, {12, MORNINGATTACK2 + 4, 275, 24}, {1, EMPTY, 275, 24},
576: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
577: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
578: },
579: // SWORD
580: {{8, SWORDATTACK2 + 1, 195, 63}, {8, SWORDATTACK2 + 2, 250, 54}, {8, SWORDATTACK2 + 3, 275, 37},
581: {16, EMPTY, 61, 0}, {8, SWORDATTACK2 + 4, 229, 66}, {8, SWORDATTACK2 + 5, 185, 0},
582: {8, SWORDATTACK2 + 6, 158, 115}, {8, SWORDATTACK2 + 7, 57, 163}, {1, EMPTY, 57, 163},
583: {1, EMPTY, 57, 163}, {1, EMPTY, 57, 163}, {1, EMPTY, 57, 163}
584: },
585: {{12, BIGAXEATTACK2, 200, 111}, {12, BIGAXEATTACK2 + 1, 5, 136}, {12, BIGAXEATTACK2 + 2, 69, 162},
586: {12, BIGAXEATTACK2 + 3, 147, 164}, {12, BIGAXEATTACK2 + 4, 76, 152}, {12, BIGAXEATTACK2 + 5, 33, 95},
587: {12, BIGAXEATTACK2 + 6, 0, 91}, {12, BIGAXEATTACK2 + 7, 0, 98}, {12, EMPTY, 147, 76},
588: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
589: },
590: // BOW
591: {{8, BOWWALK, 75, 13}, {8, BOWWALK + 1, 90, 0}, {8, BOWWALK + 2, 70, 0},
592: {8, BOWWALK + 3, 70, 0}, {6, BOWWALK + 4, 70, 0}, {4, BOWWALK + 5, 70, 0},
593: {1, EMPTY, 126, 131}, {1, EMPTY, 297, 164}, {1, EMPTY, 147, 76},
594: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
595: },
596: {{10, PIKEATTACK2, 266, 147}, {10, PIKEATTACK2 + 1, 182, 117}, {10, PIKEATTACK2 + 2, 123, 84},
597: {10, PIKEATTACK2 + 3, 7, 48}, {10, PIKEATTACK2 + 4, 0, 83}, {10, PIKEATTACK2 + 5, 0, 158},
598: {10, PIKEATTACK2 + 6, 25, 117}, {10, PIKEATTACK2 + 7, 139, 93}, {10, PIKEATTACK2 + 8, 234, 75},
599: {8, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
600: },
601: {{8, EXCALATTACK2, 0, 143}, {8, EXCALATTACK2 + 1, 0, 103}, {8, EXCALATTACK2 + 2, 0, 70},
602: {8, EXCALATTACK2 + 3, 48, 0}, {8, EXCALATTACK2 + 4, 67, 0}, {8, EXCALATTACK2 + 5, 78, 21},
603: {8, EXCALATTACK2 + 6, 165, 107}, {8, EXCALATTACK2 + 7, 260, 168}, {1, EMPTY, 130, 27},
604: {1, EMPTY, 138, 125}, {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}
605: },
606: {{12, HALBERDATTACK1, 245, 22}, {12, HALBERDATTACK2, 114, 35}, {12, HALBERDATTACK2 + 1, 105, 87},
607: {12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 3, 48, 102}, {1, HALBERDATTACK2 + 3, 48, 102},
608: {1, HALBERDATTACK2 + 3, 48, 102}, {12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 1, 105, 87},
609: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
610: }
611: };
612:
613: // THE NEW WEAPONS
614:
615: // SCOTT
616: struct daweapons zlefthandanimtics[5][MAXFRAMES] =
617: {
618: {{10, RFIST, 15, 121}, {10, RFIST + 1, 17, 114}, {10, RFIST + 2, 54, 131},
619: {10, RFIST + 3, 76, 152}, {10, RFIST + 4, 31, 126}, {10, RFIST + 5, 26, 135},
620: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
621: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
622: },
623: // KNIFE
624: {{8, KNIFEATTACK2, 0, 113}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2 + 2, 119, 137},
625: {8, KNIFEATTACK2 + 3, 187, 159}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 187, 159},
626: {8, KNIFEATTACK2 + 2, 119, 137}, {8, KNIFEATTACK2 + 1, 44, 111}, {8, KNIFEATTACK2, 0, 113},
627: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
628: },
629: // ZSHORTATTACK
630: {{10, ZSHORTATTACK, 255, 50}, {10, ZSHORTATTACK + 1, 279, 66}, {10, ZSHORTATTACK + 2, 238, 52},
631: {10, ZSHORTATTACK + 3, 181, 49}, {10, ZSHORTATTACK + 4, 129, 141}, {10, ZSHORTATTACK + 5, 70, 93},
632: {10, EMPTY, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24},
633: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
634: },
635: // ZSTARATTACK2
636: {{12, ZSTARATTACK2, 38, 141}, {12, ZSTARATTACK2 + 1, 0, 111}, {12, ZSTARATTACK2 + 2, 0, 91},
637: {12, ZSTARATTACK2 + 3, 0, 47}, {12, EMPTY, 0, 24}, {1, EMPTY, 0, 24},
638: {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24},
639: {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}, {1, EMPTY, 0, 24}
640: },
641: // ZSHORTATTACK2
642: {{10, ZSHORTATTACK2, 238, 99}, {10, ZSHORTATTACK2 + 1, 202, 11}, {10, ZSHORTATTACK2 + 2, 182, 0},
643: {10, ZSHORTATTACK2 + 3, 79, 13}, {10, ZSHORTATTACK2 + 4, 79, 13}, {10, ZSHORTATTACK2 + 5, 119, 123},
644: {10, ZSHORTATTACK2 + 6, 295, 179}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
645: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
646: }
647:
648: };
649:
650: //SCOTT
651: struct daweapons zcockanimtics[MAXFRAMES + 1] =
652: {
653: {24, EMPTY, 10, 10},
654: {12, BOWREADYEND + 1, 101, 115}, {12, BOWREADYEND + 2, 112, 0},
655: {12, BOWREADYEND + 3, 115, 0}, {12, ZBOWWALK, 75, 13}
656:
657: // {24,EMPTY,10,10},
658: // {12,BOWREADYEND+1,101,115},{12,BOWREADYEND+2,112,0},
659: // {12,BOWREADYEND+3,115,0},{12,BOWREADYEND+4,75,13}
660:
661: };
662:
663: //SCOTT
664: struct daweapons zreadyanimtics[MAXWEAPONS][MAXFRAMES + 1] =
665: {
666: // FIST
667: {{10, RFIST, 216, 180}, {10, RFIST, 216, 170}, {10, RFIST, 216, 160},
668: {10, RFIST, 216, 150}, {10, RFIST, 216, 140}, {10, RFIST, 216, 130},
669: {10, RFIST, 216, 124}, {1, RFIST, 216, 124}, {1, RFIST, 216, 124},
670: {1, RFIST, 216, 122}, {1, RFIST, 216, 122}, {1, RFIST, 216, 122},
671: {1, EMPTY, 147, 76}
672: },
673: // ZKNIFE
674: {{10, ZKNIFEREADY, 69, 171}, {10, ZKNIFEREADY + 1, 11, 146}, {10, ZKNIFEREADY + 2, 25, 146},
675: {10, ZKNIFEREADY + 3, 35, 158}, {10, ZKNIFEREADY + 4, 38, 158}, {10, ZKNIFEREADY + 5, 16, 157},
676: {10, ZKNIFEREADY + 6, 37, 102}, {10, ZKNIFEREADY + 7, 239, 63}, {10, ZKNIFEREADY + 8, 214, 85},
677: {10, ZKNIFEREADY + 9, 206, 110}, {10, ZKNIFEREADY + 10, 217, 108}, {10, ZKNIFEREADY + 11, 204, 95},
678: {1, EMPTY, 147, 76}
679: },
680: // ZSHORTREADY
681: {{12, ZSHORTREADY, 79, 169}, {12, ZSHORTREADY + 1, 95, 115}, {12, ZSHORTREADY + 2, 94, 93},
682: {12, ZSHORTREADY + 3, 156, 77}, {12, ZSHORTREADY + 4, 218, 64}, {12, ZSHORTREADY + 5, 224, 57},
683: {8, ZSHORTREADY + 6, 251, 54}, {1, ZSHORTREADY + 7, 243, 92}, {1, ZSHORTREADY + 7, 243, 92},
684: {1, ZSHORTREADY + 7, 243, 92}, {1, ZSHORTREADY + 7, 243, 92}, {1, ZSHORTREADY + 7, 243, 92},
685: {1, EMPTY, 147, 76}
686: },
687: // ZSTARATTACK
688: {{6, ZSTARATTACK, 194, 195}, {6, ZSTARATTACK, 194, 185}, {6, ZSTARATTACK, 194, 175},
689: {6, ZSTARATTACK, 194, 165}, {6, ZSTARATTACK, 194, 155}, {6, ZSTARATTACK, 194, 145},
690: {6, ZSTARATTACK, 194, 135}, {6, ZSTARATTACK, 194, 125}, {6, ZSTARATTACK, 194, 115},
691: {6, ZSTARATTACK, 194, 105}, {6, ZSTARATTACK, 194, 95}, {1, ZSTARATTACK, 194, 85},
692: {1, EMPTY, 147, 76}
693: },
694: // SWORD
695: {{10, SWORDPULL, 58, 160}, {10, SWORDPULL + 1, 81, 111}, {10, SWORDPULL + 2, 19, 88},
696: {10, SWORDPULL + 3, 0, 93}, {10, SWORDPULL + 4, 104, 0}, {10, SWORDPULL + 5, 169, 0},
697: {10, SWORDPULL + 6, 244, 38}, {6, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121},
698: {1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121}, {1, SWORDPULL + 7, 225, 121},
699: {1, EMPTY, 147, 76}
700: },
701: // ZAXE
702: {{8, ZAXEREADY, 0, 108}, {8, ZAXEREADY + 1, 0, 58}, {8, ZAXEREADY + 2, 0, 57},
703: {8, ZAXEREADY + 3, 0, 69}, {8, ZAXEREADY + 4, 0, 100}, {8, ZAXEREADY + 5, 0, 9},
704: {8, ZAXEREADY + 6, 33, 0}, {8, ZAXEREADY + 7, 61, 0}, {8, ZAXEREADY + 8, 73, 20},
705: {8, ZAXEREADY + 9, 179, 117}, {8, EMPTY, 182, 116}, {1, EMPTY, 200, 122},
706: {1, EMPTY, 147, 76}
707: },
708: // ZBOW
709: {{12, ZBOWREADY, 0, 0}, {12, ZBOWREADY + 1, 0, 20}, {12, ZBOWREADY + 2, 0, 46},
710: {12, ZBOWREADY + 3, 0, 26}, {12, ZBOWREADY + 4, 0, 0}, {12, ZBOWREADY + 5, 71, 0},
711: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13},
712: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13},
713: {1, EMPTY, 147, 76}
714: },
715: // ZPIKE
716: {{8, ZPIKEREADY, 0, 150}, {8, ZPIKEREADY + 1, 0, 94}, {8, ZPIKEREADY + 2, 47, 45},
717: {8, ZPIKEREADY + 3, 138, 62}, {8, ZPIKEREADY + 4, 194, 95}, {8, ZPIKEREADY + 5, 59, 121},
718: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
719: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
720: {1, EMPTY, 147, 76}
721: },
722: {{12, ZTWOHANDREADY, 167, 131}, {12, ZTWOHANDREADY + 1, 71, 117}, {12, ZTWOHANDREADY, 0, 128},
723: {12, ZTWOHANDREADY + 3, 0, 150}, {12, ZTWOHANDREADY + 4, 10, 74}, {12, ZTWOHANDREADY + 5, 44, 81},
724: {12, ZTWOHANDREADY + 6, 0, 53}, {12, ZTWOHANDREADY + 7, 112, 0}, {12, ZTWOHANDREADY + 8, 220, 0},
725: {12, ZTWOHANDREADY + 9, 198, 84}, {12, ZTWOHANDREADY + 10, 186, 120}, {12, ZTWOHANDREADY + 11, 188, 124},
726: {1, EMPTY, 147, 76}
727: },
728: // ZHALBERD
729: // { { 12,ZHALBERDREADY,183,62
730: // },{12,ZHALBERDREADY+1,166,10},{12,ZHALBERDREADY+2,173,29},
731: // { 12,ZHALBERDATTACK,173,29
732: // },{1,ZHALBERDATTACK,245,22},{1,ZHALBERDATTACK,245,22},
733: // { 1,ZHALBERDATTACK,245,22
734: // },{1,ZHALBERDATTACK,245,22},{1,ZHALBERDATTACK,245,22},
735: // { 1,ZHALBERDATTACK,245,22
736: // },{1,ZHALBERDATTACK,245,22},{1,ZHALBERDATTACK,245,22},
737: // { 1,EMPTY,147,76}
738: // }
739: {{12, HALBERDDRAW, 183, 62}, {12, HALBERDDRAW + 1, 166, 10}, {12, HALBERDDRAW + 2, 173, 29},
740: {12, HALBERDDRAW + 3, 114, 35}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22},
741: {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22},
742: {1, HALBERDATTACK1, 245, 22}, {1, HALBERDATTACK1, 245, 22}, {1, ZHALBERDATTACK, 245, 30},
743: {1, EMPTY, 147, 76}
744: }
745:
746: };
747:
748:
749: //SCOTT
750: struct daweapons zweaponanimtics[MAXWEAPONS][MAXFRAMES] =
751: {
752: // FIST
753: {{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129},
754: {10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133},
755: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
756: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
757: },
758: // ZKNIFE
759: {{8, ZKNIFEATTACK, 189, 52}, {8, ZKNIFEATTACK + 1, 254, 68},
760: {16, EMPTY, 147, 76}, {8, ZKNIFEATTACK + 1, 254, 68},
761: {8, ZKNIFEATTACK + 2, 218, 80}, {8, ZKNIFEATTACK + 3, 137, 83},
762: {8, ZKNIFEATTACK + 4, 136, 100}, {8, ZKNIFEATTACK + 5, 126, 140},
763: {8, ZKNIFEATTACK + 4, 136, 100}, {8, ZKNIFEATTACK + 3, 137, 83},
764: {8, ZKNIFEATTACK + 2, 218, 80}, {1, ZKNIFEATTACK, 189, 52}
765: },
766: // ZSHORTATTACK
767: {{10, ZSHORTATTACK, 243, 68}, {10, ZSHORTATTACK + 4, 255, 50},
768: {10, ZSHORTATTACK + 5, 279, 66}, {10, ZSHORTATTACK + 6, 238, 52},
769: {10, ZSHORTATTACK + 7, 181, 49}, {10, ZSHORTATTACK + 8, 129, 141},
770: {1, EMPTY, 90, 184}, {1, EMPTY, 297, 169}, {1, EMPTY, 275, 24},
771: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
772: },
773: // ZSTARATTACK
774: {{12, ZSTARATTACK, 193, 90}, {12, ZSTARATTACK + 3, 102, 128},
775: {12, ZSTARATTACK + 4, 77, 159}, {12, ZSTARATTACK + 5, 239, 79},
776: {12, EMPTY, 299, 86}, {12, EMPTY, 107, 52},
777: {12, ZSTARATTACK + 6, 175, 19}, {12, ZSTARATTACK + 7, 125, 124},
778: {12, ZSTARATTACK + 8, 109, 187},
779: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
780: },
781: // SWORD
782: {{8, SWORDATTACK, 229, 123}, {8, SWORDATTACK + 1, 221, 87}, {8, SWORDATTACK + 2, 193, 21},
783: {8, SWORDATTACK + 3, 173, 0}, {8, SWORDATTACK + 4, 61, 0}, {8, SWORDATTACK + 5, 33, 48},
784: {8, SWORDATTACK + 6, 126, 131}, {8, SWORDATTACK + 7, 297, 164}, {3, EMPTY, 147, 76},
785: {3, EMPTY, 80, 41}, {3, EMPTY, 107, 52}, {3, EMPTY, 147, 76}
786: },
787: // ZAXEATTACK
788: {{6, ZAXEATTACK, 179, 117}, {6, ZAXEATTACK + 6, 217, 107},
789: {6, ZAXEATTACK + 7, 106, 146}, {6, ZAXEATTACK + 8, 94, 128},
790: {6, ZAXEATTACK + 9, 123, 132}, {6, ZAXEATTACK + 10, 102, 134},
791: {6, ZAXEATTACK + 11, 112, 45}, {6, ZAXEATTACK + 12, 102, 0},
792: {6, ZAXEATTACK + 13, 68, 42}, {6, ZAXEATTACK + 14, 42, 138},
793: {6, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
794: },
795: // ZBOW
796: {{8, ZBOWWALK, 75, 13}, {8, ZBOWATTACK, 90, 0}, {8, ZBOWATTACK + 1, 70, 0},
797: {8, ZBOWATTACK + 2, 70, 0}, {6, ZBOWATTACK + 3, 70, 0}, {4, ZBOWATTACK + 4, 70, 0},
798: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13},
799: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, EMPTY, 147, 76}
800: },
801: // ZPIKE
802: {{10, ZPIKEREADY + 5, 210, 127}, {10, EMPTY, 80, 41}, {10, EMPTY, 107, 52}, {10, EMPTY, 147, 76},
803: {10, ZPIKEATTACK, 0, 43}, {10, ZPIKEATTACK + 1, 0, 0}, {10, ZPIKEATTACK + 2, 0, 0},
804: {10, ZPIKEATTACK + 3, 45, 0}, {10, ZPIKEATTACK + 4, 51, 23}, {10, ZPIKEATTACK + 5, 59, 121},
805: {12, EMPTY, 80, 41}, {1, EMPTY, 107, 52}
806: },
807: {{8, ZTWOHANDATTACK, 98, 133}, {8, ZTWOHANDATTACK + 6, 115, 130},
808: {8, ZTWOHANDATTACK + 7, 125, 128}, {8, ZTWOHANDATTACK + 8, 116, 82},
809: {8, ZTWOHANDATTACK + 9, 117, 9}, {8, ZTWOHANDATTACK + 10, 180, 0},
810: {8, ZTWOHANDATTACK + 11, 174, 0}, {8, ZTWOHANDATTACK + 12, 166, 0},
811: {8, ZTWOHANDATTACK + 13, 125, 90}, {8, ZTWOHANDATTACK + 14, 83, 166},
812: {1, EMPTY, 30, 159}, {1, EMPTY, 80, 41}
813: },
814: // { { 12,ZHALBERDATTACK,173,29 },{6,EMPTY,107,52},
815: // { 6,EMPTY,147,76},{ 12,ZHALBERDATTACK+3,117,0 },
816: // { 12,ZHALBERDATTACK+4,245,0},{12,ZHALBERDATTACK+5,237,0},
817: // { 6,EMPTY,80,41 },{12,ZHALBERDATTACK+6,115,0},
818: // { 12,ZHALBERDATTACK+7,9,0 },{ 12,ZHALBERDATTACK+8,0,42 },
819: // { 1,ZHALBERDATTACK,173,29 },{ 1,EMPTY,147,76 }
820: // }
821: {{12, ZHALBERDATTACK, 245, 30}, {12, EMPTY, 107, 52}, {12, EMPTY, 147, 76},
822: {12, HALBERDATTACK1 + 1, 249, 45}, {12, HALBERDATTACK1 + 2, 161, 60}, {12, HALBERDATTACK1 + 3, 45, 88},
823: {12, EMPTY, 80, 41}, {12, HALBERDATTACK1 + 3, 45, 88}, {12, HALBERDATTACK1 + 2, 161, 60},
824: {12, HALBERDATTACK1 + 1, 249, 45}, {12, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
825: }
826:
827:
828: };
829:
830:
831: //SCOTT
832: struct daweapons zweaponanimtics2[MAXWEAPONS][MAXFRAMES] =
833: {
834: // FIST
835: {{10, RFIST, 216, 120}, {10, RFIST + 1, 166, 113}, {10, RFIST + 2, 156, 129},
836: {10, RFIST + 3, 169, 151}, {10, RFIST + 4, 153, 124}, {10, RFIST + 5, 224, 133},
837: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76},
838: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
839: },
840: // ZKNIFE
841: {{8, ZKNIFEATTACK, 189, 52}, {8, ZKNIFEATTACK + 1, 254, 68}, {16, EMPTY, 147, 76},
842: {8, ZKNIFEATTACK2, 206, 114}, {8, ZKNIFEATTACK2 + 1, 107, 112}, {8, ZKNIFEATTACK2 + 2, 22, 138},
843: {8, ZKNIFEATTACK2 + 3, 0, 161}, {16, EMPTY, 136, 100}, {8, KNIFEATTACK2 + 3, 0, 161},
844: {8, ZKNIFEATTACK2 + 2, 22, 138}, {8, ZKNIFEATTACK2 + 1, 107, 112}, {8, KNIFEATTACK2, 206, 114}
845: },
846: // ZSHORTATTACK2
847: {{10, ZSHORTATTACK2, 238, 99}, {10, ZSHORTATTACK2 + 1, 202, 11},
848: {10, ZSHORTATTACK2 + 2, 182, 0}, {10, ZSHORTATTACK2 + 3, 79, 13},
849: {10, ZSHORTATTACK2 + 4, 40, 45}, {10, ZSHORTATTACK2 + 5, 119, 123},
850: {10, ZSHORTATTACK2 + 6, 295, 179}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
851: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
852: },
853: // ZSTARATTACK2
854: {{12, ZSTARATTACK2, 44, 110}, {12, ZSTARATTACK2 + 1, 26, 91}, {12, ZSTARATTACK2 + 2, 177, 38},
855: {12, ZSTARATTACK2 + 3, 262, 11}, {12, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
856: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24},
857: {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}, {1, EMPTY, 275, 24}
858: },
859: // SWORD
860: {{8, SWORDATTACK2 + 1, 195, 63}, {8, SWORDATTACK2 + 2, 250, 54}, {8, SWORDATTACK2 + 3, 275, 37},
861: {16, EMPTY, 61, 0}, {8, SWORDATTACK2 + 4, 229, 66}, {8, SWORDATTACK2 + 5, 185, 0},
862: {8, SWORDATTACK2 + 6, 158, 115}, {8, SWORDATTACK2 + 7, 57, 163}, {1, EMPTY, 57, 163},
863: {1, EMPTY, 57, 163}, {1, EMPTY, 57, 163}, {1, EMPTY, 57, 163}
864: },
865: // ZAXEATTACK2
866: {{6, ZAXEATTACK2, 200, 111}, {6, ZAXEATTACK2 + 1, 5, 136}, {6, ZAXEATTACK2 + 2, 69, 162},
867: {6, ZAXEATTACK2 + 3, 147, 164}, {6, ZAXEATTACK2 + 4, 76, 152}, {6, ZAXEATTACK2 + 5, 33, 95},
868: {6, ZAXEATTACK2 + 6, 0, 91}, {6, ZAXEATTACK2 + 7, 0, 98}, {6, EMPTY, 147, 76},
869: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
870: },
871: // ZBOW
872: // { { 8,ZBOWWALK,75,13},{8,ZBOWWALK+1,90,0},{8,ZBOWWALK+2,70,0},
873: // { 8,ZBOWWALK+3,70,0},{6,ZBOWWALK+4,70,0},{4,ZBOWWALK+5,70,0},
874: // { 1,EMPTY,126,131},{1,EMPTY,297,164},{1,EMPTY,147,76},
875: // { 1,EMPTY,80,41 },{1,EMPTY,107,52},{1,EMPTY,147,76}
876: // },
877: {{8, ZBOWWALK, 75, 13}, {8, ZBOWATTACK, 90, 0}, {8, ZBOWATTACK + 1, 70, 0},
878: {8, ZBOWATTACK + 2, 70, 0}, {6, ZBOWATTACK + 3, 70, 0}, {4, ZBOWATTACK + 4, 70, 0},
879: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13},
880: {1, ZBOWWALK, 75, 13}, {1, ZBOWWALK, 75, 13}, {1, EMPTY, 147, 76}
881: },
882:
883: // ZPIKEATTACK2
884: {{10, ZPIKEATTACK2, 266, 147}, {10, ZPIKEATTACK2 + 1, 182, 117}, {10, ZPIKEATTACK2 + 2, 123, 84},
885: {10, ZPIKEATTACK2 + 3, 7, 48}, {10, ZPIKEATTACK2 + 4, 0, 83}, {10, ZPIKEATTACK2 + 5, 0, 158},
886: {10, ZPIKEATTACK2 + 6, 25, 117}, {10, ZPIKEATTACK2 + 7, 139, 93}, {10, ZPIKEATTACK2 + 8, 234, 75},
887: {8, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
888: },
889: // ZTWOHANDATTACK2
890: {{8, ZTWOHANDATTACK2, 0, 143}, {8, ZTWOHANDATTACK2 + 1, 0, 103}, {8, ZTWOHANDATTACK2 + 2, 0, 70},
891: {8, ZTWOHANDATTACK2 + 3, 41, 0}, {8, ZTWOHANDATTACK2 + 4, 54, 0}, {8, ZTWOHANDATTACK2 + 5, 166, 21},
892: {8, ZTWOHANDATTACK2 + 6, 242, 108}, {8, EMPTY, 260, 168}, {1, EMPTY, 130, 27},
893: {1, EMPTY, 138, 125}, {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}
894: },
895: // ZHALBERDATTACK2
896: // { { 12,ZHALBERDATTACK2,118,0 },{ 12,ZHALBERDATTACK2+1,80,0},
897: // { 12,ZHALBERDATTACK2+2,29,0},{ 12,ZHALBERDATTACK2+3,42,1},
898: // { 12,ZHALBERDATTACK2+1,80,0},{1,ZHALBERDATTACK2,118,0},
899: // { 1,EMPTY,173,29},{1,EMPTY,173,29},
900: // { 1,EMPTY,166,10},{1,EMPTY,80,41 },
901: // { 1,EMPTY,107,52},{1,EMPTY,147,76}
902: // }
903: {{12, HALBERDATTACK1, 245, 22}, {12, HALBERDATTACK2, 114, 35}, {12, HALBERDATTACK2 + 1, 105, 87},
904: {12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 3, 48, 102}, {1, HALBERDATTACK2 + 3, 48, 102},
905: {1, HALBERDATTACK2 + 3, 48, 102}, {12, HALBERDATTACK2 + 2, 54, 107}, {12, HALBERDATTACK2 + 1, 105, 87},
906: {1, EMPTY, 80, 41}, {1, EMPTY, 107, 52}, {1, EMPTY, 147, 76}
907: }
908:
909: };
910:
911: struct daweapons zthrowanimtics[MAXNUMORBS][MAXFRAMES + 1] =
912: {
913: #if 0
914: // MUTWOHANDS - scare
915: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
916: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
917: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
918: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
919: {1, EMPTY, 127, 170}
920: },
921: #endif
922: // MUTWOHANDS - scare
923: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
924: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
925: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
926: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
927: {1, EMPTY, 127, 170}
928: },
929: #if 0
930: // MUMEDUSA - night vis
931: {{10, ZLIGHT, 0, 177}, {10, ZLIGHT + 1, 0, 137}, {10, ZLIGHT + 2, 48, 82},
932: {10, ZLIGHT + 3, 127, 41}, {10, ZLIGHT + 4, 210, 9}, {10, ZLIGHT + 5, 284, 26},
933: {10, ZLIGHT + 6, 213, 63}, {10, ZLIGHT + 7, 147, 99}, {10, ZLIGHT + 8, 91, 136},
934: {10, ZLIGHT + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
935: {1, EMPTY, 127, 170}
936: },
937: #endif
938: // MUTWOHANDS - night vis
939: {{10, ZFIREBALL, 0, 177}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82},
940: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26},
941: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136},
942: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
943: {1, EMPTY, 127, 170}
944: },
945: #if 0
946: // BMUTWOHANDS - freeze
947: {{10, ZFREEZE, 0, 101}, {10, ZFREEZE + 1, 0, 51}, {10, ZFREEZE + 2, 0, 71},
948: {10, ZFREEZE + 3, 4, 85}, {10, ZFREEZE + 4, 32, 78}, {10, ZFREEZE + 5, 51, 80},
949: {10, ZFREEZE + 6, 50, 80}, {10, ZFREEZE + 7, 49, 89}, {10, ZFREEZE + 8, 49, 89},
950: {10, ZFREEZE + 9, 49, 98}, {10, ZFREEZE + 10, 47, 105}, {10, ZFREEZE + 11, 48, 121},
951: {1, EMPTY, 127, 170}
952: },
953: #endif
954: // BMUTWOHANDS - freeze
955: {{1, EMPTY, 127, 170}, {10, ZFREEZE + 1, 0, 51}, {10, ZFREEZE + 2, 0, 71},
956: {10, ZFREEZE + 3, 4, 85}, {10, ZFREEZE + 4, 32, 78}, {10, ZFREEZE + 5, 51, 80},
957: {10, ZFREEZE + 6, 50, 80}, {10, ZFREEZE + 7, 49, 89}, {10, ZFREEZE + 8, 49, 89},
958: {10, ZFREEZE + 9, 49, 98}, {10, ZFREEZE + 10, 47, 105}, {10, ZFREEZE + 11, 48, 121},
959: {1, EMPTY, 127, 170}
960: },
961: #if 0
962: // MUTWOHANDS - magic arrow
963: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
964: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
965: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
966: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
967: {1, EMPTY, 127, 170}
968: },
969: #endif
970: // MUTWOHANDS - magic arrow
971: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
972: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
973: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
974: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
975: {1, EMPTY, 127, 170}
976: },
977: // MUTWOHANDS - open door
978: {{15, MUTWOHANDS, 19, 155}, {15, MUTWOHANDS + 1, 0, 128}, {15, MUTWOHANDS + 2, 0, 93},
979: {15, MUTWOHANDS + 3, 0, 83}, {15, MUTWOHANDS + 4, 0, 72}, {15, MUTWOHANDS + 5, 0, 83},
980: {15, MUTWOHANDS + 6, 10, 96}, {15, MUTWOHANDS + 7, 43, 109}, {15, MUTWOHANDS + 8, 69, 113},
981: {15, MUTWOHANDS + 9, 65, 115}, {15, MUTWOHANDS + 10, 64, 117}, {15, MUTWOHANDS + 11, 63, 117},
982: {1, EMPTY, 127, 170}
983: },
984: #if 0
985: // MUMEDUSA - fly
986: {{10, MUMEDUSA, 0, 177}, {10, MUMEDUSA + 1, 0, 137}, {10, MUMEDUSA + 2, 48, 82},
987: {10, MUMEDUSA + 3, 127, 41}, {10, MUMEDUSA + 4, 210, 9}, {10, MUMEDUSA + 5, 284, 26},
988: {10, MUMEDUSA + 6, 213, 63}, {10, MUMEDUSA + 7, 147, 99}, {10, MUMEDUSA + 8, 91, 136},
989: {10, MUMEDUSA + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
990: {1, EMPTY, 127, 170}
991: },
992: #endif
993: // MUMEDUSA - fly
994: {{10, ZLIGHT, 0, 177}, {10, ZLIGHT + 1, 0, 137}, {10, ZLIGHT + 2, 48, 82},
995: {10, ZLIGHT + 3, 127, 41}, {10, ZLIGHT + 4, 210, 9}, {10, ZLIGHT + 5, 284, 26},
996: {10, ZLIGHT + 6, 213, 63}, {10, ZLIGHT + 7, 147, 99}, {10, ZLIGHT + 8, 91, 136},
997: {10, ZLIGHT + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
998: {1, EMPTY, 127, 170}
999: },
1000: #if 0
1001: // MUTWOHANDS - fireball
1002: {{10, ZFIREBALL, 0, 177}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82},
1003: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26},
1004: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136},
1005: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
1006: {1, EMPTY, 127, 170}
1007: },
1008: #endif
1009: // MUTWOHANDS - fireball
1010: {{1, EMPTY, 127, 170}, {10, ZFIREBALL + 1, 0, 137}, {10, ZFIREBALL + 2, 48, 82},
1011: {10, ZFIREBALL + 3, 127, 41}, {10, ZFIREBALL + 4, 210, 9}, {10, ZFIREBALL + 5, 284, 26},
1012: {10, ZFIREBALL + 6, 213, 63}, {10, ZFIREBALL + 7, 147, 99}, {10, ZFIREBALL + 8, 91, 136},
1013: {10, ZFIREBALL + 9, 46, 183}, {1, EMPTY, 127, 170}, {1, EMPTY, 127, 170},
1014: {1, EMPTY, 127, 170}
1015: },
1016: #if 0
1017: // MUTWOHANDS - nuke
1018: {{10, MUTWOHANDS, 19, 155}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
1019: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
1020: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
1021: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
1022: {1, EMPTY, 127, 170}
1023: }
1024: #endif
1025: // MUTWOHANDS - nuke
1026: {{1, EMPTY, 127, 170}, {10, MUTWOHANDS + 1, 0, 128}, {10, MUTWOHANDS + 2, 0, 93},
1027: {10, MUTWOHANDS + 3, 0, 83}, {10, MUTWOHANDS + 4, 0, 72}, {10, MUTWOHANDS + 5, 0, 83},
1028: {10, MUTWOHANDS + 6, 10, 96}, {10, MUTWOHANDS + 7, 43, 109}, {10, MUTWOHANDS + 8, 69, 113},
1029: {10, MUTWOHANDS + 9, 65, 115}, {10, MUTWOHANDS + 10, 64, 117}, {10, MUTWOHANDS + 11, 63, 117},
1030: {1, EMPTY, 127, 170}
1031: }
1032: };
1033:
1034:
1035: // END OF THE NEW WEAPONS
1036:
1037: #define MAXSTATUSBAR 3
1038:
1039: int heartics = 0;
1040: int heartincr = 0;
1041: int showstatusbar = 0;
1042: int showheart = 0;
1043:
1044: int showmana = 0;
1045:
1046: int showbook = 0;
1047: int showbooktype = 0;
1048: int showbookflip;
1049: int showbookanim;
1050: int currentorb;
1051: int currentpotion;
1052:
1053: void
1054: loadinglevelmsg(void)
1055: {
1056: #if 0
1057: int i,j;
1058:
1059: if (svga) {
1060: rotatesprite(0L << 16, 0L << 16, 65536L, 0, VMAIN, 0,
1061: 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
1062: }
1063: else {
1064: rotatesprite(0L << 16, 0L << 16, 65536L, 0, VMAINBLANK, 0,
1065: 0, 8 + 16, 0L, 0L, xdim - 1L, ydim - 1L);
1066: }
1067: strcpy(tempbuf,"LOADING LEVEL");
1068: for (i=0,j=0 ; i < strlen(tempbuf) ; i++) {
1069: j += tilesizx[DAFONT];
1070: }
1071: fancyfont((xdim>>1)-(j>>1), (ydim>>1), DAFONT, tempbuf, 1);
1072: nextpage();
1073: #endif
1074: }
1075:
1076: extern
1077: int quicksaveflag;
1078:
1079: void
1080: playerdead(struct player * plr)
1081: {
1082:
1083: int i,j,loadlast=0;
1084: int spellbookpage;
1085: long clockgoal,
1086: hiz,hihit,loz,lohit,
1087: goalz;
1088: long goaltime;
1089: int exit = 0;
1090:
1091: if (playerdie == 1) {
1092: return;
1093: }
1094: if (plr->potion[0] > 0 && !spiked) {
1095: i=currentpotion;
1096: currentpotion=0;
1097: usapotion(plr);
1098: currentpotion=i;
1099: updatepics();
1100: return;
1101: }
1102: clockgoal = totalclock + 240;
1103:
1104: playerdie = 1;
1105: currspikeframe = 0;
1106:
1107: if (spiked == 1) {
1108: spiketics = spikeanimtics[0].daweapontics;
1109: playsound_loc(S_GORE1, plr->x, plr->y);
1110: SND_Sound(S_HEARTBEAT);
1111: }
1112:
1113: SND_PlaySound(S_PLRDIE1, 0, 0, 0, 0);
1114:
1115: netsendmove();
1116:
1117: // while (totalclock < clockgoal) {
1118: keystatus[keys[KEYFIRE]] = 0;
1119: keystatus[keys[KEYUSE]] = 0;
1120: keystatus[1] = 0;
1121: startredflash(60);
1122: while (keystatus[keys[KEYFIRE]] == 0 && keystatus[keys[KEYUSE]] == 0
1123: && keystatus[1] == 0 && keystatus[0x43] == 0) {
1124: getzrange(plr->x, plr->y, plr->z, plr->sector,
1125: &hiz, &hihit, &loz, &lohit, 128L, 0);
1126: if (plr->horiz < 100 + (YDIM >> 1)) {
1127: plr->horiz += (synctics << 1);
1128: }
1129: if (plr->z < loz-(4<<8)) {
1130: plr->z += (synctics<<8);
1131: }
1132: if (goreon && ((rand()%10) > 8)) {
1133: startredflash(10);
1134: chunksofmeat(plr,plr->spritenum,plr->x,plr->y,plr->z,
1135: plr->sector,(short)plr->ang);
1136: }
1137: drawscreen(plr);
1138: animateobjs(plr);
1139: animatetags(plr);
1140: doanimations((long) synctics);
1141: dodelayitems((long) synctics);
1142: nextpage();
1143: }
1144: if (keystatus[0x43]) {
1145: loadlast=1;
1146: keystatus[0x43]=0;
1147: }
1148: loadinglevelmsg();
1149:
1150: goaltime = totalclock + 240;
1151:
1152: while (!exit) {
1153: if (totalclock > goaltime)
1154: exit = 1;
1155: if (keystatus[0x39] > 0)
1156: exit = 1;
1157: }
1158:
1159: // check loops wando
1160: SND_CheckLoops();
1161:
1162: keystatus[0x39] = 0;
1163:
1164: attacktheme = 0;
1165: vampiretime = 0;
1166: playertorch = 0;
1167: shieldtype = 0;
1168: shieldpoints = 0;
1169: playerdie = 0;
1170: spiked = 0;
1171: shockme = -1;
1172: poisoned = 0;
1173: poisontime = 0;
1174: currspikeframe = 0;
1175: spellbookflip = 0;
1176: displaytime = 0;
1177:
1178: plr->oldsector = plr->sector;
1179: plr->horiz = 100;
1180: plr->zoom = 256;
1181: plr->dimension = 3;
1182: plr->height = PLAYERHEIGHT;
1183:
1184: /*
1185: for(i=0;i<=9;i++) {
1186: plr->ammo[i]=0;
1187: plr->weapon[i]=0;
1188: if( i < 9 ) {
1189: plr->orb[i]=0;
1190: plr->orbammo[i]=0;
1191: }
1192: }
1193:
1194: plr->weapon[2]=1;
1195: plr->ammo[2]=50;
1196:
1197:
1198: plr->weapon[0]=plr->weapon[1]=1;
1199: plr->ammo[0]=32000;
1200:
1201: for(i=0;i<MAXPOTIONS;i++)
1202: plr->potion[i]=0;
1203:
1204: for(i=0;i<MAXTREASURES;i++)
1205: plr->treasure[i]=0;
1206: */
1207:
1208: selectedgun = 4;
1209:
1210: for (i = 0; i <= 9; i++) {
1211: if (i < 5) {
1212: plr->ammo[i] = 40;
1213: plr->weapon[i] = 1;
1214: }
1215: else {
1216: plr->ammo[i] = 0;
1217: plr->weapon[i] = 0;
1218: }
1219: if (i < 9) {
1220: plr->orb[i] = 0;
1221: plr->orbammo[i] = 0;
1222: }
1223: }
1224:
1225: if (difficulty > 1) {
1226: plr->weapon[0] = plr->weapon[1] = 1;
1227: plr->ammo[0] = 32000;
1228: plr->ammo[1] = 45;
1229: }
1230:
1231: for (i = 0; i < MAXPOTIONS; i++)
1232: plr->potion[i] = 0;
1233:
1234: for (i = 0; i < MAXTREASURES; i++)
1235: plr->treasure[i] = 0;
1236:
1237: plr->potion[0] = 3;
1238: plr->potion[3] = 1;
1239:
1240: hasshot = 0;
1241: orbshot = 0;
1242: oldmousestatus = 0;
1243:
1244: plr->lvl = 1;
1245: plr->score = 0;
1246: plr->health = 100;
1247: plr->maxhealth = 100;
1248: plr->armor = 0;
1249: plr->armortype = 0;
1250: currentorb = 0;
1251: currentpotion = 0;
1252:
1253: for (i = 0; i < MAXNUMORBS; i++)
1254: plr->orbactive[i] = -1;
1255:
1256: lockclock = totalclock;
1257:
1258: currweapon = selectedgun = 4;
1259:
1260: currweaponfired = 3;
1261: currweaponflip = 0;
1262: currweaponanim = 0;
1263:
1264: helmettime = -1;
1265:
1266: if (svga == 0) {
1267: if (plr->screensize <= 320) {
1268: spellbookpage = spellbookanim[currentorb][8].daweaponframe;
1269: itemtoscreen(121L, 161L, spellbookpage, 0, 0);
1270:
1271: }
1272: }
1273: if (svga == 1) {
1274: if (plr->screensize == 320) {
1275: spellbookpage = sspellbookanim[currentorb][8].daweaponframe;
1276: rotatesprite((121L << 1) << 16,
1277: 389L,
1278: 65536L,
1279: 0,
1280: spellbookpage,
1281: 0,
1282: 0,
1283: 8 + 16,
1284: 0L,
1285: 0L,
1286: xdim - 1L,
1287: ydim - 1L);
1288:
1289: }
1290: }
1291:
1292:
1293: justteleported = 1;
1294:
1295: if (netgame == 0) {
1296: startsong(rand() % 2);
1297: if (loadlast) {
1298: quicksaveflag=1;
1299: loadgame(plr);
1300: quicksaveflag=0;
1301: updatestatusbar();
1302: strcpy(displaybuf,"quick save loaded");
1303: displaytime = 360;
1304: }
1305: else {
1306: loadnewlevel(mapon);
1307: }
1308: }
1309: else {
1310: startsong(rand() % 2);
1311: netrestartplayer(plr);
1312: }
1313:
1314: displaytime = -1;
1315: shadowtime = -1;
1316: helmettime = -1;
1317: nightglowtime = -1;
1318: strongtime = -1;
1319: invisibletime = -1;
1320: svgahealth = -1;
1321:
1322: // updatepics();
1323:
1324: }
1325:
1326:
1327: void
1328: spikeheart(struct player * plr)
1329: {
1330: char dabits = 0x02;
1331: char dashade = sector[plr->sector].ceilingshade;
1332: long dax,
1333: day;
1334: static long spikeclock;
1335:
1336: plr = &player[pyrn];
1337: spiketics -= (totalclock-spikeclock);
1338: if (spiketics < 0) {
1339: spikeclock=totalclock;
1340: currspikeframe++;
1341: if (currspikeframe > 4)
1342: currspikeframe = 4;
1343: spiketics = spikeanimtics[currspikeframe].daweapontics;
1344: }
1345: else
1346: currweaponframe = spikeanimtics[currspikeframe].daweaponframe;
1347:
1348: spikeframe = spikeanimtics[currspikeframe].daweaponframe;
1349: dax = spikeanimtics[currspikeframe].currx;
1350: day = spikeanimtics[currspikeframe].curry;
1351: overwritesprite(dax, day, spikeframe, dashade, dabits, 0);
1352: startredflash(10);
1353: }
1354:
1355: void
1356: updateloadedplayer(int i)
1357: {
1358:
1359: struct player *plr;
1360: plr = &player[pyrn];
1361:
1362: playerdie = 0;
1363: spiked = 0;
1364: lives = 0;
1365:
1366: plr->oldsector = plr->sector;
1367: plr->horiz = 100;
1368: plr->zoom = 256;
1369: plr->dimension = 3;
1370: plr->height = PLAYERHEIGHT;
1371: plr->spritenum = i;
1372:
1373: sprite[plr->spritenum].x = plr->x;
1374: sprite[plr->spritenum].y = plr->y;
1375: sprite[plr->spritenum].z = plr->z + (plr->height << 8);
1376: sprite[plr->spritenum].cstat = 1 + 256;
1377: sprite[plr->spritenum].picnum = GRONSW;
1378: sprite[plr->spritenum].shade = 0;
1379: sprite[plr->spritenum].xrepeat = 36;
1380: sprite[plr->spritenum].yrepeat = 36;
1381: sprite[plr->spritenum].ang = plr->ang;
1382: sprite[plr->spritenum].xvel = 0;
1383: sprite[plr->spritenum].yvel = 0;
1384: sprite[plr->spritenum].zvel = 0;
1385: sprite[plr->spritenum].owner = 4096;
1386: sprite[plr->spritenum].lotag = 0;
1387: sprite[plr->spritenum].hitag = 0;
1388: // sprite[plr->spritenum].pal=1;
1389: sprite[plr->spritenum].pal = 10;
1390: sprite[plr->spritenum].sectnum = plr->sector;
1391:
1392: setsprite((short) i, sprite[i].x, sprite[i].y, sprite[i].z);
1393:
1394: }
1395:
1396: void
1397: initplayersprite(void)
1398: {
1399:
1400: struct player *plr;
1401: int i;
1402: int spellbookpage;
1403:
1404: plr = &player[pyrn];
1405:
1406: attacktheme = 0;
1407: spiked = 0;
1408: shockme = -1;
1409: lives = 0;
1410:
1411: plr->oldsector = plr->sector;
1412: plr->horiz = 100;
1413: plr->zoom = 256;
1414: plr->dimension = 3;
1415: plr->height = PLAYERHEIGHT;
1416: plr->z = sector[plr->sector].floorz - (plr->height << 8);
1417:
1418: plr->spritenum = insertsprite(plr->sector, 0);
1419:
1420: plr->onsomething = 1;
1421:
1422: sprite[plr->spritenum].x = plr->x;
1423: sprite[plr->spritenum].y = plr->y;
1424: sprite[plr->spritenum].z = plr->z + (plr->height << 8);
1425: sprite[plr->spritenum].cstat = 1 + 256 + 32768;
1426: sprite[plr->spritenum].picnum = GRONSW;
1427: sprite[plr->spritenum].shade = 0;
1428: sprite[plr->spritenum].xrepeat = 36;
1429: sprite[plr->spritenum].yrepeat = 36;
1430: sprite[plr->spritenum].ang = plr->ang;
1431: sprite[plr->spritenum].xvel = 0;
1432: sprite[plr->spritenum].yvel = 0;
1433: sprite[plr->spritenum].zvel = 0;
1434: sprite[plr->spritenum].owner = 4096;
1435: sprite[plr->spritenum].lotag = 0;
1436: sprite[plr->spritenum].hitag = 0;
1437: sprite[plr->spritenum].pal = 10;
1438: sprite[plr->spritenum].clipdist = 48;
1439:
1440: if (loadedgame == 0 && justteleported == 0) {
1441: vampiretime = 0;
1442: playertorch = 0;
1443: shieldtype = 0;
1444: shieldpoints = 0;
1445: playerdie = 0;
1446: poisoned = 0;
1447: poisontime = -1;
1448:
1449: selectedgun = 4;
1450:
1451: for (i = 0; i <= 9; i++) {
1452: if (i < 5) {
1453: plr->ammo[i] = 40;
1454: plr->weapon[i] = 1;
1455: }
1456: else {
1457: plr->ammo[i] = 0;
1458: plr->weapon[i] = 0;
1459: }
1460: if (i < 9) {
1461: plr->orb[i] = 0;
1462: plr->orbammo[i] = 0;
1463: }
1464: }
1465:
1466: if (difficulty > 1) {
1467: plr->weapon[0] = plr->weapon[1] = 1;
1468: plr->ammo[0] = 32000;
1469: plr->ammo[1] = 45;
1470: }
1471:
1472: for (i = 0; i < MAXPOTIONS; i++)
1473: plr->potion[i] = 0;
1474:
1475: for (i = 0; i < MAXTREASURES; i++)
1476: plr->treasure[i] = 0;
1477:
1478: plr->potion[0] = 3;
1479: plr->potion[3] = 1;
1480:
1481: plr->lvl = 1;
1482: plr->score = 0;
1483: plr->health = 100;
1484: plr->maxhealth = 100;
1485: plr->armor = 0;
1486: plr->armortype = 0;
1487: currentorb = 0;
1488: currentpotion = 0;
1489:
1490: currweapon = selectedgun = 4;
1491:
1492: currweaponfired = 3;
1493: currweaponflip = 0;
1494:
1495:
1496: for (i = 0; i < MAXNUMORBS; i++)
1497: plr->orbactive[i] = -1;
1498:
1499: lockclock = totalclock;
1500:
1501: spellbookflip = 0;
1502:
1503: if (svga == 0) {
1504: if (plr->screensize <= 320) {
1505: spellbookpage = spellbookanim[currentorb][8].daweaponframe;
1506: itemtoscreen(121L, 161L, spellbookpage, 0, 0);
1507: }
1508: }
1509: if (svga == 1) {
1510: if (plr->screensize == 320) {
1511: // spellbookpage=sspellbookanim[currentorb][8].daweaponframe
1512: // ;
1513: // itemtoscreen(121L<<1,389L,spellbookpage,0,0);
1514: spellbookpage = sspellbookanim[currentorb][8].daweaponframe;
1515: rotatesprite((121L << 1) << 16,
1516: 389L << 16,
1517: 65536L,
1518: 0,
1519: spellbookpage,
1520: 0,
1521: 0,
1522: 8 + 16,
1523: 0L,
1524: 0L,
1525: xdim - 1L,
1526: ydim - 1L);
1527:
1528:
1529: }
1530: }
1531:
1532: invincibletime = manatime = -1;
1533: hasshot = 0;
1534: orbshot = 0;
1535: oldmousestatus = 0;
1536:
1537: displaytime = -1;
1538: shadowtime = -1;
1539: helmettime = -1;
1540: nightglowtime = -1;
1541: strongtime = -1;
1542: invisibletime = -1;
1543: svgahealth = -1;
1544: }
1545:
1546: updatepics();
1547:
1548: }
1549:
1550: // JOE - NOTE
1551: // weapon[1] = dagger
1552: // weapon[2] = short sword
1553: // weapon[3] = morning star
1554: // weapon[4] = long sword / broad sword
1555: // weapon[5] = battle axe
1556: // weapon[6] = pike axe
1557: // weapon[7] = pike axe (throwpike)
1558: // weapon[8] = magic sword
1559: // weapon[9] = halberd
1560:
1561: void
1562: autoweaponchange(int dagun)
1563: {
1564: struct player *plr;
1565:
1566: if (currweaponanim > 0)
1567: return;
1568:
1569: plr=&player[pyrn];
1570:
1571: if (dagun > selectedgun) {
1572: selectedgun = dagun;
1573: hasshot = 0;
1574: currweaponfired = 2; // drop weapon
1575: if (enchantedsoundhandle != -1) {
1576: SND_StopLoop(enchantedsoundhandle);
1577: enchantedsoundhandle=-1;
1578: }
1579: switch (selectedgun) {
1580: case 1:
1581: weapondropgoal = 100;
1582: weapondrop = 0;
1583: break;
1584: case 2:
1585: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1586: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,0,0,0,-1);
1587: }
1588: weapondropgoal = 40;
1589: weapondrop = 0;
1590: levelpic();
1591: break;
1592: case 3:
1593: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1594: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1);
1595: }
1596: weapondropgoal = 100;
1597: weapondrop = 0;
1598: levelpic();
1599: break;
1600: case 4:
1601: weapondropgoal = 40;
1602: weapondrop = 0;
1603: levelpic();
1604: break;
1605: case 5:
1606: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1607: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1);
1608: }
1609: weapondropgoal = 40;
1610: weapondrop = 0;
1611: levelpic();
1612: break;
1613: case 6:
1614: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1615: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,0,0,0,-1);
1616: }
1617: weapondropgoal = 40;
1618: weapondrop = 0;
1619: levelpic();
1620: break;
1621: case 7:
1622: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1623: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1);
1624: }
1625: weapondropgoal = 40;
1626: weapondrop = 0;
1627: levelpic();
1628: break;
1629: case 8:
1630: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1631: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,0,0,0,-1);
1632: }
1633: weapondropgoal = 40;
1634: weapondrop = 0;
1635: levelpic();
1636: break;
1637: case 9:
1638: weapondropgoal = 40;
1639: weapondrop = 0;
1640: levelpic();
1641: break;
1642: }
1643: }
1644:
1645: }
1646:
1647: void
1648: weaponchange(void)
1649: {
1650:
1651: long i;
1652: int j;
1653: struct player *plr;
1654: char temp[50];
1655:
1656: plr = &player[pyrn];
1657:
1658: if (currweaponanim == 0 && currweaponflip == 0)
1659: for (i = 0x2; i <= 0xb; i++) {
1660: if (keystatus[i] > 0 && plr->weapon[i - 0x2] > 0) {
1661: selectedgun = i - 0x2;
1662: keystatus[i] = 0;
1663: hasshot = 0;
1664: currweaponfired = 2; // drop weapon
1665: levelpic();
1666: if (enchantedsoundhandle != -1) {
1667: SND_StopLoop(enchantedsoundhandle);
1668: enchantedsoundhandle=-1;
1669: }
1670: switch (selectedgun) {
1671: case 0:
1672: weapondropgoal = 40;
1673: weapondrop = 0;
1674: break;
1675: case 1:
1676: weapondropgoal = 100;
1677: weapondrop = 0;
1678: break;
1679: case 2:
1680: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1681: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,0,0,0,-1);
1682: }
1683: weapondropgoal = 100;
1684: weapondrop = 0;
1685: break;
1686: case 3:
1687: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1688: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1);
1689: }
1690: weapondropgoal = 100;
1691: weapondrop = 0;
1692: break;
1693: case 4:
1694: weapondropgoal = 40;
1695: weapondrop = 0;
1696: break;
1697: case 5:
1698: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1699: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1);
1700: }
1701: weapondropgoal = 40;
1702: weapondrop = 0;
1703: break;
1704: case 6:
1705: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1706: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,0,0,0,-1);
1707: }
1708: weapondropgoal = 40;
1709: weapondrop = 0;
1710: break;
1711: case 7:
1712: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1713: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1);
1714: }
1715: weapondropgoal = 40;
1716: weapondrop = 0;
1717: break;
1718: case 8:
1719: if (enchantedsoundhandle == -1 && plr->weapon[selectedgun] == 3) {
1720: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,0,0,0,-1);
1721: }
1722: weapondropgoal = 40;
1723: weapondrop = 0;
1724: break;
1725: case 9:
1726: weapondropgoal = 40;
1727: weapondrop = 0;
1728: break;
1729: }
1730: }
1731: }
1732:
1733: if (currweaponflip == 0) {
1734: for (i = 0x3b; i <= 0x42; i++) {
1735: if (keystatus[i] > 0) {
1736: #if 0
1737: if (selectedgun > 0) {
1738: if (i != 0x3B+2 && i != 0x3B+3 && i != 0x3B+7) {
1739: hasshot = 0;
1740: currweaponfired = 2; // drop weapon
1741: weapondropgoal = 100;
1742: weapondrop = 0;
1743: selectedgun = 0;
1744: }
1745: // selectedgun=spellcasthands
1746: levelpic();
1747: }
1748: #endif
1749: currentorb = i - 0x3b;
1750: if (spellbookflip == 0) {
1751: spellbook = 0;
1752: spellbooktics = 10;
1753: spellbookflip = 1;
1754: // JSA_NEW
1755: SND_PlaySound(S_PAGE, 0, 0, 0, 0);
1756: displayspelltext();
1757: spelltime = 360;
1758: }
1759: orbshot = 0;
1760: }
1761: keystatus[i] = 0;
1762: }
1763: orbpic(currentorb);
1764: }
1765:
1766:
1767: for (j = 0; j < MAXNUMORBS; j++) {
1768: if (plr->orbactive[j] > -1) {
1769: plr->orbactive[j] -= synctics;
1770: }
1771: }
1772:
1773: if (keystatus[0x1a] > 0) {
1774: currentpotion--;
1775: if (currentpotion < 0)
1776: currentpotion = 4;
1777: keystatus[0x1a] = 0;
1778: // JSA_NEW
1779: SND_PlaySound(S_BOTTLES, 0, 0, 0, 0);
1780: potionpic(currentpotion);
1781: potiontext();
1782: }
1783: if (keystatus[0x1b] > 0) {
1784: currentpotion++;
1785: if (currentpotion > 4) // MAXPOTIONS
1786: currentpotion = 0;
1787: keystatus[0x1B] = 0;
1788: // JSA_NEW
1789: SND_PlaySound(S_BOTTLES, 0, 0, 0, 0);
1790: potionpic(currentpotion);
1791: potiontext();
1792: }
1793:
1794:
1795: }
1796:
1797:
1798: void
1799: potiontext(void)
1800: {
1801:
1802: struct player *plr;
1803:
1804: plr = &player[pyrn];
1805:
1806: if (plr->potion[currentpotion] > 0)
1807: switch (currentpotion) {
1808: case 0:
1809: strcpy(displaybuf, "Health Potion");
1810: displaytime = 240;
1811: break;
1812: case 1:
1813: strcpy(displaybuf, "Strength Potion");
1814: displaytime = 240;
1815: break;
1816: case 2:
1817: strcpy(displaybuf, "Cure Poison Potion");
1818: displaytime = 240;
1819: break;
1820: case 3:
1821: strcpy(displaybuf, "Resist Fire Potion");
1822: displaytime = 240;
1823: break;
1824: case 4:
1825: strcpy(displaybuf, "Invisiblity Potion");
1826: displaytime = 240;
1827: break;
1828: }
1829: }
1830:
1831: void
1832: swingdacrunch(int daweapon)
1833: {
1834:
1835:
1836: struct player *plr;
1837:
1838: plr = &player[pyrn];
1839:
1840: switch (daweapon) {
1841: case 0: // fist
1842: playsound_loc(S_SOCK1 + (rand() % 4), plr->x, plr->y);
1843: break;
1844: case 1: // dagger
1845: if (rand() % 2)
1846: playsound_loc(S_GORE1 + (rand() % 4), plr->x, plr->y);
1847: break;
1848: case 2: // short sword
1849: playsound_loc(S_SWORD2 + (rand() % 3), plr->x, plr->y);
1850: break;
1851: case 3: // morningstar
1852: playsound_loc(S_SOCK1 + (rand() % 4), plr->x, plr->y);
1853: break;
1854: case 4: // broad sword
1855: playsound_loc(S_SWORD1 + (rand() % 3), plr->x, plr->y);
1856: break;
1857: case 5: // battle axe
1858: if (rand() % 2)
1859: playsound_loc(S_SOCK1 + (rand() % 4), plr->x, plr->y);
1860: else
1861: playsound_loc(S_SWORD1 + (rand() % 3), plr->x, plr->y);
1862: break;
1863: case 6: // bow
1864:
1865: break;
1866: case 7: // pike
1867: if (rand() % 2)
1868: playsound_loc(S_SOCK1 + (rand() % 4), plr->x, plr->y);
1869: else
1870: playsound_loc(S_SWORD1 + (rand() % 3), plr->x, plr->y);
1871: break;
1872: case 8: // two handed sword
1873: playsound_loc(S_SWORD1 + (rand() % 2), plr->x, plr->y);
1874: break;
1875: case 9: // halberd
1876: if (rand() % 2)
1877: playsound_loc(S_SOCK1 + (rand() % 4), plr->x, plr->y);
1878: else
1879: playsound_loc(S_SWORD1 + (rand() % 3), plr->x, plr->y);
1880: break;
1881: }
1882:
1883: }
1884:
1885: void
1886: swingdasound(int daweapon)
1887: {
1888:
1889: switch (daweapon) {
1890: case 0: // fist
1891: SND_PlaySound(S_PLRWEAPON0, 0, 0, 0, 0);
1892: break;
1893: case 1: // knife
1894: SND_PlaySound(S_PLRWEAPON1, 0, 0, 0, 0);
1895: break;
1896: case 2: // short sword
1897: if(enchantedsoundhandle!=-1)
1898: SND_PlaySound(S_FIRESWING, 0, 0, 0, 0);
1899: else
1900: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0);
1901: break;
1902: case 3: // mace
1903: if(enchantedsoundhandle!=-1) {
1904: SND_PlaySound(S_FIRESWING, 0, 0, 0, 0);
1905: SND_PlaySound(S_FIREBALL, 0, 0, 0, 0);
1906: }
1907: else
1908: SND_PlaySound(S_PLRWEAPON2, 0, 0, 0, 0);
1909: break;
1910: case 4: //
1911: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0);
1912: break;
1913: case 5: // sword
1914: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0);
1915: break;
1916: case 6: // bow
1917: SND_PlaySound(S_PLRWEAPON3, 0, 0, 0, 0);
1918: break;
1919: case 7: //
1920: if(enchantedsoundhandle!=-1)
1921: SND_PlaySound(S_ENERGYSWING, 0, 0, 0, 0);
1922: else
1923: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0);
1924: break;
1925: case 8: //
1926: if(enchantedsoundhandle!=-1)
1927: SND_PlaySound(S_ENERGYSWING, 0, 0, 0, 0);
1928: else
1929: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0);
1930: break;
1931: case 9: //
1932: SND_PlaySound(S_PLRWEAPON4, 0, 0, 0, 0);
1933: break;
1934: }
1935:
1936:
1937: }
1938:
1939: short monsterangle[MAXSPRITESONSCREEN],
1940: monsterlist[MAXSPRITESONSCREEN];
1941:
1942: long shootgunzvel;
1943:
1944: extern
1945: spritetype tspritelist[];
1946:
1947: extern
1948: int tspritelistcnt;
1949:
1950: void
1951: lockon(struct player *plr,short numshots,short shootguntype)
1952: {
1953: short daang,i,k,n,s;
1954: spritetype *spr;
1955:
1956: spr=&tspritelist[0];
1957: for (i=0,n=0 ; i < tspritelistcnt && n < numshots ; i++,spr++) {
1958: if (cansee(plr->x, plr->y, plr->z, plr->sector,
1959: spr->x, spr->y, spr->z - (tilesizy[spr->picnum] << 7),
1960: spr->sectnum) == 1) {
1961: switch (spr->picnum) {
1962: case KOBOLD:
1963: case KOBOLDATTACK:
1964: case DEVIL:
1965: case DEVILATTACK:
1966: case IMP:
1967: case IMPATTACK:
1968: case MINOTAUR:
1969: case MINOTAURATTACK:
1970: case SKELETON:
1971: case SKELETONATTACK:
1972: case GRONHAL:
1973: case GRONHALATTACK:
1974: case GRONMU:
1975: case GRONMUATTACK:
1976: case GRONSW:
1977: case GRONSWATTACK:
1978: case DEMON:
1979: case GUARDIAN:
1980: case GUARDIANATTACK:
1981: case WILLOW:
1982: case NEWGUYSTAND:
1983: case NEWGUYKNEE:
1984: case NEWGUY:
1985: case NEWGUYCAST:
1986: case NEWGUYBOW:
1987: case NEWGUYMACE:
1988: case NEWGUYPUNCH:
1989: case KURTSTAND:
1990: case KURTKNEE:
1991: case KURTAT:
1992: case KURTPUNCH:
1993: case KURTREADY:
1994: case GONZOCSW:
1995: case GONZOCSWAT:
1996: case GONZOCHMAT:
1997: case GONZOGSW:
1998: case GONZOGSWAT:
1999: case GONZOGHM:
2000: case GONZOGHMAT:
2001: case GONZOGSH:
2002: case GONZOGSHAT:
2003: case KATIE:
2004: case KATIEAT:
2005: monsterangle[n]=getangle(tspritelist[i].x-plr->x,
2006: tspritelist[i].y-plr->y);
2007: monsterlist[n]=i;
2008: n++;
2009: break;
2010: }
2011: }
2012: }
2013: daang=plr->ang-((numshots*(128/numshots))>>1);
2014: for (k=0,s=0 ; k < numshots ; k++) {
2015: if (n > 0) {
2016: spr=&tspritelist[monsterlist[s]];
2017: daang=monsterangle[s];
2018: shootgunzvel=((spr->z-(32<<8)-plr->z)<<8)/
2019: ksqrt((spr->x-plr->x)*(spr->x-plr->x)+
2020: (spr->y-plr->y)*(spr->y-plr->y));
2021: s=(s+1)%n;
2022: }
2023: else {
2024: daang+=(128/numshots);
2025: }
2026: shootgun(plr, daang, shootguntype);
2027: }
2028: }
2029:
2030: void
2031: swingdaweapon(struct player * plr)
2032: {
2033: short daang,k,n,s;
2034:
2035: daang = plr->ang;
2036:
2037: if (currweaponframe == BOWWALK + 5 && plr->ammo[6] > 0) {
2038: currweaponfired = 5;
2039: oldmousestatus = 0; // NEW
2040: currweaponanim = 0;
2041: }
2042: else if (currweaponframe == ZBOWATTACK + 4 && plr->ammo[6] > 0) {
2043: currweaponfired = 5;
2044: oldmousestatus = 0; // NEW
2045: currweaponanim = 0;
2046: }
2047:
2048: if (currweaponframe == BOWWALK + 5 && plr->ammo[6] <= 0) {
2049: currweaponfired = 0;
2050: oldmousestatus = 0;
2051: currweaponanim = 0;
2052: return;
2053: }
2054: else if (currweaponframe == ZBOWATTACK + 4 && plr->ammo[6] <= 0) {
2055: currweaponfired = 0;
2056: oldmousestatus = 0;
2057: currweaponanim = 0;
2058: return;
2059: }
2060:
2061: if (currweaponframe == PIKEATTACK1 + 4
2062: && plr->weapon[7] == 2
2063: && plr->ammo[7] > 0) {
2064: shootgun(plr, daang, 10);
2065: playsound_loc(S_GENTHROW, plr->x, plr->y);
2066: hasshot = 1;
2067: return;
2068: }
2069: else if (currweaponframe == ZPIKEATTACK + 4
2070: && plr->weapon[7] == 3
2071: && plr->ammo[7] > 0) {
2072: lockon(plr,3,10);
2073: playsound_loc(S_GENTHROW, plr->x, plr->y);
2074: hasshot = 1;
2075: return;
2076: }
2077:
2078:
2079: switch (selectedgun) {
2080: case 0: // fist & close combat weapons
2081: shootgun(plr, daang, 0);
2082: hasshot = 1;
2083: break;
2084: case 1: // knife
2085: shootgun(plr, daang, 0);
2086: hasshot = 1;
2087: break;
2088: case 2: // shortsword
2089: shootgun(plr, daang, 0);
2090: hasshot = 1;
2091: break;
2092: case 3: // morningstar
2093: shootgun(plr, daang, 0);
2094: if (plr->weapon[selectedgun] == 3) {
2095: lockon(plr,1,3);
2096: }
2097: hasshot = 1;
2098: break;
2099: case 4: // sword
2100: shootgun(plr, daang, 0);
2101: hasshot = 1;
2102: break;
2103: case 5: // battleaxe
2104: if (enchantedsoundhandle != -1) {
2105: SND_PlaySound(S_ENERGYSWING, 0, 0, 0, 0);
2106: }
2107: shootgun(plr, daang, 0);
2108: hasshot = 1;
2109: break;
2110: case 6: // bow
2111: if(enchantedsoundhandle!=-1) {
2112: SND_PlaySound(S_FIREBALL, 0, 0, 0, 0);
2113: SND_PlaySound(S_PLRWEAPON3, 0, 0, 0, 0);
2114: }
2115: shootgun(plr, daang, 1);
2116: hasshot = 1;
2117: break;
2118: case 7: // pike
2119: shootgun(plr, daang, 0);
2120: hasshot = 1;
2121: break;
2122: case 8: // two handed
2123: shootgun(plr, daang, 0);
2124: hasshot = 1;
2125: break;
2126: case 9: // halberd
2127: shootgun(plr, daang, 0);
2128: hasshot = 1;
2129: break;
2130:
2131: }
2132:
2133: }
2134:
2135: extern
2136: int nobreakflag;
2137:
2138: int weaponuseless = 0;
2139:
2140: void
2141: plrfireweapon(struct player * plr)
2142: {
2143:
2144: char guntype;
2145: long x,
2146: y,
2147: z;
2148: long dasectnum,
2149: daz;
2150: short daang,
2151: dahoriz;
2152: short k;
2153: int i;
2154: int bestweapon;
2155:
2156:
2157: if (currweaponfired == 4) {
2158: #if 0
2159: if (currentorb == 0 || currentorb == 2 || currentorb == 3
2160: || currentorb == 6 || currentorb == 7) {
2161: return; // don't do hands
2162: }
2163: #endif
2164: if (plr->weapon[currweapon] == 1) {
2165: currweapontics = throwanimtics[currentorb][0].daweapontics;
2166: }
2167: else {
2168: currweapontics = zthrowanimtics[currentorb][0].daweapontics;
2169: }
2170: return;
2171: }
2172:
2173: if (plr->ammo[selectedgun] <= 0) {
2174: if (currweapon == 6) {
2175: for (i = 0; i < MAXWEAPONS; i++) {
2176: if (plr->ammo[i] > 0 && plr->weapon[i] == 1) {
2177: selectedgun = i;
2178: hasshot = 0;
2179: currweaponfired = 2; // drop weapon
2180: weapondropgoal = 100;
2181: weapondrop = 0;
2182: levelpic();
2183: }
2184: }
2185: }
2186: return;
2187: }
2188: else {
2189: madeahit = 0;
2190: if (nobreakflag == 0) {
2191: plr->ammo[selectedgun]--;
2192: }
2193: if (plr->weapon[selectedgun] == 3) {
2194: if (plr->ammo[selectedgun] == 0) {
2195: plr->weapon[selectedgun] = plr->preenchantedweapon[selectedgun];
2196: plr->ammo[selectedgun] = plr->preenchantedammo[selectedgun];
2197: if (enchantedsoundhandle != -1) {
2198: SND_StopLoop(enchantedsoundhandle);
2199: enchantedsoundhandle=-1;
2200: }
2201: }
2202: }
2203: if (plr->ammo[selectedgun] <= 0 || plr->ammo[selectedgun] == 10) {
2204: switch (selectedgun) {
2205: case 0: // fist
2206: plr->ammo[0] = 9999;
2207: break;
2208: case 1: // knife
2209: if (plr->ammo[selectedgun] == 10) {
2210: strcpy(displaybuf, "Dagger is damaged");
2211: displaytime = 360;
2212: }
2213: if (plr->ammo[selectedgun] <= 0) {
2214: plr->ammo[1] = 0;
2215: plr->weapon[1] = 0;
2216: strcpy(displaybuf, "Dagger is Useless");
2217: displaytime = 360;
2218: weaponuseless = 1;
2219: }
2220: break;
2221: case 2: // short sword
2222: if (plr->ammo[selectedgun] == 10) {
2223: strcpy(displaybuf, "Short Sword is damaged");
2224: displaytime = 360;
2225: }
2226: if (plr->ammo[selectedgun] <= 0) {
2227: plr->ammo[2] = 0;
2228: plr->weapon[2] = 0;
2229: strcpy(displaybuf, "Short Sword is Useless");
2230: displaytime = 360;
2231: weaponuseless = 1;
2232: }
2233: break;
2234: case 3: // mace
2235: if (plr->ammo[selectedgun] == 10) {
2236: strcpy(displaybuf, "Morning Star is damaged");
2237: displaytime = 360;
2238: }
2239: if (plr->ammo[selectedgun] <= 0) {
2240: plr->ammo[3] = 0;
2241: plr->weapon[3] = 0;
2242: strcpy(displaybuf, "Morning Star is Useless");
2243: displaytime = 360;
2244: weaponuseless = 1;
2245: }
2246: break;
2247:
2248: case 4: // sword
2249: if (plr->ammo[selectedgun] == 10) {
2250: strcpy(displaybuf, "Sword is damaged");
2251: displaytime = 360;
2252: }
2253: if (plr->ammo[selectedgun] <= 0) {
2254: plr->ammo[4] = 0;
2255: plr->weapon[4] = 0;
2256: strcpy(displaybuf, "Sword is Useless");
2257: displaytime = 360;
2258: weaponuseless = 1;
2259: }
2260: break;
2261: case 5: // battle axe
2262: if (plr->ammo[selectedgun] == 10) {
2263: strcpy(displaybuf, "Battle axe is damaged");
2264: displaytime = 360;
2265: }
2266: if (plr->ammo[selectedgun] <= 0) {
2267: plr->ammo[5] = 0;
2268: plr->weapon[5] = 0;
2269: strcpy(displaybuf, "Battle axe is Useless");
2270: displaytime = 360;
2271: weaponuseless = 1;
2272: }
2273: break;
2274: case 6: // bow
2275: break;
2276: case 7: // pike
2277: if (plr->weapon[7] == 1) {
2278: if (plr->ammo[selectedgun] == 10) {
2279: strcpy(displaybuf, "Pike is damaged");
2280: displaytime = 360;
2281: }
2282: if (plr->ammo[selectedgun] <= 0) {
2283: plr->ammo[7] = 0;
2284: plr->weapon[7] = 0;
2285: strcpy(displaybuf, "Pike is Useless");
2286: displaytime = 360;
2287: weaponuseless = 1;
2288: }
2289: }
2290: if (plr->weapon[7] == 2 && plr->ammo[7] <= 0) {
2291: plr->weapon[7] = 1;
2292: plr->ammo[7] = 30;
2293: }
2294: break;
2295: case 8: // two handed sword
2296: if (plr->ammo[selectedgun] == 10) {
2297: strcpy(displaybuf, "Magic Sword is damaged");
2298: displaytime = 360;
2299: }
2300: if (plr->ammo[selectedgun] <= 0) {
2301: plr->ammo[8] = 0;
2302: plr->weapon[8] = 0;
2303: strcpy(displaybuf, "Magic Sword is Useless");
2304: displaytime = 360;
2305: weaponuseless = 1;
2306: }
2307: break;
2308: case 9: // halberd
2309: if (plr->ammo[selectedgun] == 10) {
2310: strcpy(displaybuf, "Halberd is damaged");
2311: displaytime = 360;
2312: }
2313: if (plr->ammo[selectedgun] <= 0) {
2314: plr->ammo[9] = 0;
2315: plr->weapon[9] = 0;
2316: strcpy(displaybuf, "Halberd is Useless");
2317: displaytime = 360;
2318: weaponuseless = 1;
2319: }
2320: break;
2321: }
2322: }
2323: }
2324:
2325: if (weaponuseless == 1)
2326: for (i = 0; i < MAXWEAPONS; i++) {
2327: if (plr->weapon[i] > 0 && plr->ammo[i] > 0) {
2328: currweapon = selectedgun = i;
2329: // hasshot=0;
2330: // currweaponfired=2; // drop weapon
2331: currweaponfired = 3; // ready weapon
2332: // weapondropgoal=100;
2333: // weapondrop=0;
2334: currweaponflip = 0;
2335: weaponuseless = 0;
2336: // autoweaponchange(i);
2337: levelpic();
2338: }
2339: }
2340: else
2341: currweaponfired = 1;
2342:
2343:
2344: if (currweapon == 6 || selectedgun == 6)
2345: levelpic();
2346:
2347: if (currweapon == 7 || selectedgun == 7)
2348: levelpic();
2349:
2350: currweapon = selectedgun;
2351:
2352: // start from the beginning to cycle
2353: // currweaponfired=1;
2354:
2355: currweaponattackstyle = krand() % 2;
2356:
2357: if (plr->weapon[7] == 2 && currweapon == 7) {
2358: currweaponattackstyle = 0;
2359: }
2360: else if (plr->weapon[7] == 3 && currweapon == 7) {
2361: currweaponattackstyle = 0;
2362: }
2363:
2364: if (currweapon == 9) {
2365: if (krand() % 100 > 80)
2366: currweaponattackstyle = 0;
2367: else
2368: currweaponattackstyle = 1;
2369: }
2370:
2371: if (currweaponanim > 11) {
2372: if (plr->weapon[currweapon] == 1)
2373: currweapontics = weaponanimtics[currweapon][0].daweapontics;
2374: else
2375: currweapontics = zweaponanimtics[currweapon][0].daweapontics;
2376: }
2377:
2378:
2379: }
2380:
2381: void
2382: activatedaorb(struct player * plr)
2383: {
2384:
2385:
2386: if (plr->orbammo[currentorb] <= 0)
2387: return;
2388:
2389: switch (currentorb) {
2390: case 0: // SCARE
2391: // shadowtime=1200+(plr->lvl*120);
2392: break;
2393: case 1: // NIGHT VISION
2394: // nightglowtime=2400+(plr->lvl*600);
2395: break;
2396: case 2: // FREEZE
2397: plr->orbactive[currentorb] = -1;
2398: break;
2399: case 3: // MAGIC ARROW
2400: plr->orbactive[currentorb] = -1;
2401: break;
2402: case 4: // OPEN DOORS
2403: plr->orbactive[currentorb] = -1;
2404: break;
2405: case 5: // FLY
2406: // plr->orbactive[currentorb]=3600+(plr->lvl*600);
2407: break;
2408: case 6: // FIREBALL
2409: plr->orbactive[currentorb] = -1;
2410: break;
2411: case 7: // NUKE
2412: plr->orbactive[currentorb] = -1;
2413: break;
2414: }
2415:
2416: if (plr->orbammo[currentorb] <= 0) {
2417: plr->orb[currentorb] = 0;
2418: return;
2419: }
2420: else
2421: plr->orbammo[currentorb]--;
2422:
2423: currweaponfired = 4;
2424: #if 0
2425: if (currentorb == 0 || currentorb == 2 || currentorb == 3
2426: || currentorb == 6 || currentorb == 7) {
2427: return; // no hand animations
2428: }
2429: #endif
2430: if (plr->weapon[currweapon] == 1)
2431: currweapontics = throwanimtics[currentorb][0].daweapontics;
2432: else
2433: currweapontics = zthrowanimtics[currentorb][0].daweapontics;
2434:
2435: }
2436:
2437: void
2438: plruse(struct player * plr)
2439: {
2440:
2441: short hitsect,
2442: hitwall,
2443: hitsprite,
2444: daang2,
2445: daang;
2446: long i,
2447: daz2,
2448: hitx,
2449: hity,
2450: hitz;
2451: long hit,
2452: dax,
2453: day;
2454:
2455: neartag(plr->x, plr->y, plr->z, plr->sector, plr->ang,
2456: &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1024, 3);
2457: if (neartagsector >= 0) {
2458: if (sector[neartagsector].hitag == 0) {
2459: operatesector(neartagsector);
2460: }
2461: else {
2462: daang = plr->ang;
2463: daang2 = daang + 2048;
2464: daz2 = (100 - plr->horiz) * 2000;
2465: hitscan(plr->x, plr->y, plr->z, plr->sector, // Start position
2466: sintable[(daang2 + 2560) & 2047], // X vector of 3D ang
2467: sintable[(daang2 + 2048) & 2047], // Y vector of 3D ang
2468: daz2, // Z vector of 3D ang
2469: &hitsect, &hitwall, &hitsprite, &hitx, &hity, &hitz);
2470: if (hitwall >= 0) {
2471: if ((labs(plr->x - hitx) + labs(plr->y - hity) < 512) && (labs((plr->z >> 8) - ((hitz >> 8) - (64))) <= (512 >> 3))) {
2472: switch (wall[hitwall].picnum) {
2473: case PENTADOOR1:
2474: case PENTADOOR2:
2475: case PENTADOOR3:
2476: case PENTADOOR4:
2477: case PENTADOOR5:
2478: case PENTADOOR6:
2479: case PENTADOOR7:
2480: strcpy(displaybuf, "find door trigger");
2481: displaytime = 360;
2482: break;
2483: }
2484: }
2485: }
2486: playsound_loc(S_PUSH1 + (rand() % 2), plr->x, plr->y);
2487: }
2488:
2489: }
2490: if (neartagsprite >= 0) {
2491: if (sprite[neartagsprite].lotag == 1) {
2492: switch (sprite[neartagsprite].picnum) {
2493: case SKULLPULLCHAIN1:
2494: case PULLCHAIN1:
2495: sprite[neartagsprite].lotag = 0;
2496: newstatus(neartagsprite, PULLTHECHAIN);
2497: break;
2498: case LEVERUP:
2499: sprite[neartagsprite].lotag = 0;
2500: newstatus(neartagsprite, ANIMLEVERUP);
2501: break;
2502: }
2503: for (i = 0; i < numsectors; i++)
2504: if (sector[i].hitag == sprite[neartagsprite].hitag)
2505: operatesector(i);
2506: }
2507: else
2508: operatesprite(neartagsprite);
2509: }
2510:
2511: }
2512:
2513: void
2514: loadnewlevel(int mapon)
2515: {
2516: struct player *plr;
2517: char mapbuf[_MAX_FNAME+_MAX_EXT];
2518:
2519: plr = &player[pyrn];
2520:
2521: strcpy(mapbuf, "level");
2522: itoa(mapon, tempbuf, 10);
2523: strcat(mapbuf, tempbuf);
2524: strcat(mapbuf, ".map");
2525:
2526: //JSA_DEMO2
2527: // SND_SongFlush();
2528: // SND_StartMusic(mapon-1);
2529: //JSA_ENDS
2530: loadinglevelmsg();
2531: setupboard(mapbuf);
2532: initplayersprite();
2533: updatepics();
2534: lockclock = totalclock;
2535: }
2536:
2537: void
2538: victory(int demoflag)
2539: {
2540: long goaltime;
2541: int exit;
2542:
2543: if (!demoflag) {
2544: smkplayseq(1);
2545: smkplayseq(3);
2546: smkplayseq(4);
2547: shutdown();
2548: }
2549: goaltime = totalclock + 360;
2550: victor = 1;
2551:
2552: if (svga == 1) {
2553: keystatus[0x39] = 0;
2554: keystatus[1] = 0;
2555: SND_Sound(S_PICKUPFLAG);
2556: permanentwritesprite(0, 0, STHEORDER, 0, 0, 0, 639, 239, 0);
2557: permanentwritesprite(0, 240, STHEORDER + 1, 0, 0, 240, 639, 479, 0);
2558: nextpage();
2559: exit = 0;
2560: while (!exit) {
2561: if (keystatus[0x39] > 0 || keystatus[1] > 0)
2562: exit = 1;
2563: }
2564: keystatus[0x39] = 0;
2565: keystatus[1] = 0;
2566: }
2567: else {
2568: keystatus[0x39] = 0;
2569: keystatus[1] = 0;
2570: SND_Sound(S_PICKUPFLAG);
2571: itemtoscreen(0L, 0L, THEORDER, 0, 0);
2572: nextpage();
2573: exit = 0;
2574: while (!exit) {
2575: if (keystatus[0x39] > 0 || keystatus[1] > 0)
2576: exit = 1;
2577: }
2578: keystatus[0x39] = 0;
2579: keystatus[1] = 0;
2580: }
2581: shutdown();
2582: }
2583:
2584: extern
2585: unsigned hSOSDriverHandles[];
2586:
2587: void
2588: drawweapons(struct player * plr)
2589: {
2590:
2591: long dax,
2592: day;
2593: long snakex = 0;
2594: long snakey = 0;
2595: char dabits;
2596: char dashade;
2597: char dapalnum;
2598: short startwall,
2599: endwall;
2600: short rotateit;
2601: int j,
2602: k;
2603:
2604:
2605: if (spelltime > 0) {
2606: spelltime -= synctics;
2607: }
2608:
2609: if (spellbook == 8 && spelltime > 0 && plr->screensize > 320) {
2610: if (svga == 1) {
2611: spellbookframe = sspellbookanim[currentorb][8].daweaponframe;
2612: dax = sspellbookanim[currentorb][8].currx;
2613: day = sspellbookanim[currentorb][8].curry;
2614: itemtoscreen(dax << 1, day, spellbookframe, 0, 0);
2615: itoa(plr->orbammo[currentorb], tempbuf, 10);
2616: fancyfont(126L << 1, 439L, SSCOREFONT - 26, tempbuf, 0);
2617: }
2618: else {
2619: spellbookframe = spellbookanim[currentorb][8].daweaponframe;
2620: dax = spellbookanim[currentorb][8].currx;
2621: day = spellbookanim[currentorb][8].curry;
2622: itemtoscreen(dax, day, spellbookframe, 0, 0);
2623: itoa(plr->orbammo[currentorb], tempbuf, 10);
2624: fancyfont(126L, 181L, SCOREFONT - 26, tempbuf, 0);
2625: }
2626: }
2627:
2628:
2629: if (shadowtime > 0) {
2630: dashade = 31, dapalnum = 0;
2631: }
2632: else {
2633: if (plr->weapon[currweapon] == 3) {
2634: if (enchantedsoundhandle == -1) {
2635: switch (currweapon) {
2636: case 2:
2637: if (enchantedsoundhandle == -1
2638: && plr->weapon[selectedgun] == 3) {
2639: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,
2640: 0,0,0,-1);
2641: }
2642: break;
2643: case 3:
2644: case 5:
2645: if (enchantedsoundhandle == -1
2646: && plr->weapon[selectedgun] == 3) {
2647: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,
2648: 0,0,0,-1);
2649: }
2650: break;
2651: case 6:
2652: if (enchantedsoundhandle == -1
2653: && plr->weapon[selectedgun] == 3) {
2654: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,
2655: 0,0,0,-1);
2656: }
2657: break;
2658: case 7:
2659: if (enchantedsoundhandle == -1
2660: && plr->weapon[selectedgun] == 3) {
2661: enchantedsoundhandle=SND_PlaySound(S_ENERGYWEAPONLOOP,
2662: 0,0,0,-1);
2663: }
2664: break;
2665: case 8:
2666: if (enchantedsoundhandle == -1
2667: && plr->weapon[selectedgun] == 3) {
2668: enchantedsoundhandle=SND_PlaySound(S_FIREWEAPONLOOP,
2669: 0,0,0,-1);
2670: }
2671: break;
2672: }
2673: }
2674: dashade = 0;
2675: dapalnum = 0;
2676: }
2677: else {
2678: dashade = sector[plr->sector].ceilingshade;
2679: dapalnum = 0;
2680: }
2681: }
2682:
2683: if (invisibletime > 0)
2684: // dabits=0x06;
2685: dabits = 2 + 4;
2686: else
2687: // dabits=0x02;
2688: dabits = 2;
2689:
2690: if (currweaponflip == 1) {
2691: // dabits+=0x08;
2692: dabits |= 2;
2693: dabits |= 4;
2694: }
2695:
2696: if (currweapon == 0 && dahand == 0)
2697: if (rand() % 2 == 0)
2698: dahand = 1;
2699: else
2700: dahand = 2;
2701:
2702:
2703: switch (currweaponfired) {
2704: case 6:
2705:
2706: switch (currweapon) {
2707: case 1: // knife
2708: if (currweaponframe == KNIFEATTACK2 + 1)
2709: if ((currweaponanim == 2 || currweaponanim == 10) && currweapontics == 8)
2710: swingdasound(currweapon);
2711: break;
2712: case 3: // morning
2713: if (currweaponframe == MORNINGATTACK2 + 3)
2714: if (currweaponanim == 3 && currweapontics == 12)
2715: swingdasound(currweapon);
2716: break;
2717: }
2718: switch (currweaponframe) {
2719: case RFIST + 5:
2720: case KNIFEATTACK + 6:
2721: case ZKNIFEATTACK + 5: // new
2722: case MORNINGSTAR + 5:
2723: case SWORDATTACK + 7:
2724: case BOWWALK + 5:
2725: case ZBOWATTACK + 4:
2726: case KNIFEATTACK2 + 2:
2727: case ZKNIFEATTACK2 + 2:
2728: case SWORDATTACK2 + 6:
2729: case MORNINGATTACK2 + 3:
2730: case HALBERDATTACK1 + 3:
2731: case HALBERDATTACK2 + 3:
2732: case BIGAXEATTACK + 7:
2733: case BIGAXEATTACK2 + 6:
2734: case PIKEATTACK1 + 4:
2735: case PIKEATTACK2 + 4:
2736: case EXCALATTACK1 + 7:
2737: case EXCALATTACK2 + 5:
2738: case GOBSWORDATTACK2 + 4:
2739: case GOBSWORDATTACK + 4:
2740: case ZSHORTATTACK + 7:
2741: case ZSHORTATTACK2 + 4:
2742: case ZSTARATTACK + 7:
2743: case ZSTARATTACK2 + 3:
2744: case ZAXEATTACK + 12:
2745: case ZAXEATTACK2 + 6:
2746: case ZPIKEATTACK + 4:
2747: case ZPIKEATTACK2 + 4:
2748: case ZTWOHANDATTACK + 12:
2749: case ZTWOHANDATTACK2 + 5:
2750: case ZHALBERDATTACK + 4:
2751: case ZHALBERDATTACK2 + 3:
2752: // here
2753: swingdaweapon(plr);
2754: break;
2755: }
2756:
2757: currweapontics -= synctics;
2758:
2759: if (helmettime > 0)
2760: currweapontics--;
2761:
2762: if (currweapontics < 0) {
2763:
2764: currweaponanim++;
2765:
2766: if (currweaponanim > 11) {
2767: currweaponanim = 0;
2768: currweaponfired = 0;
2769: currweaponflip = 0;
2770: currweapon = selectedgun;
2771: oldmousestatus = 0;
2772:
2773: if (dahand > 0)
2774: dahand = 0;
2775:
2776: }
2777:
2778: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
2779: currweapontics = lefthandanimtics[currweapon][currweaponanim].daweapontics;
2780: currweaponframe = lefthandanimtics[currweapon][currweaponanim].daweaponframe;
2781: dax = (long) lefthandanimtics[currweapon][currweaponanim].currx;
2782: day = (long) lefthandanimtics[currweapon][currweaponanim].curry + 8;
2783: }
2784: else {
2785: currweapontics = zlefthandanimtics[currweapon][currweaponanim].daweapontics;
2786: currweaponframe = zlefthandanimtics[currweapon][currweaponanim].daweaponframe;
2787: dax = (long) zlefthandanimtics[currweapon][currweaponanim].currx;
2788: day = (long) zlefthandanimtics[currweapon][currweaponanim].curry + 8;
2789: }
2790: }
2791:
2792: else {
2793: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
2794: currweaponframe = lefthandanimtics[currweapon][currweaponanim].daweaponframe;
2795: dax = (long) lefthandanimtics[currweapon][currweaponanim].currx;
2796: day = (long) lefthandanimtics[currweapon][currweaponanim].curry + 8;
2797: }
2798: else {
2799: currweaponframe = zlefthandanimtics[currweapon][currweaponanim].daweaponframe;
2800: dax = (long) zlefthandanimtics[currweapon][currweaponanim].currx;
2801: day = (long) zlefthandanimtics[currweapon][currweaponanim].curry + 8;
2802: }
2803: }
2804:
2805:
2806:
2807: if (currweapon == 0 && currweaponframe != EMPTY) {
2808: if (dahand == 1)
2809: rotatesprite(dax,
2810: day,
2811: 65536L,
2812: 0,
2813: currweaponframe,
2814: 0,
2815: 0,
2816: dabits,
2817: windowx1,
2818: windowy1,
2819: windowx2,
2820: windowy2);
2821: else if (dahand == 2) {
2822: dax = (long) lefthandanimtics[0][currweaponanim].currx;
2823: day = (long) lefthandanimtics[0][currweaponanim].curry + 8;
2824: overwritesprite(dax, day + 5, currweaponframe + 6, dashade, dabits, dapalnum);
2825: }
2826: }
2827: else {
2828: if (currweaponframe != EMPTY) {
2829:
2830: if (plr->weapon[currweapon] == 1)
2831: dax = lefthandanimtics[currweapon][currweaponanim].currx;
2832: else
2833: dax = zlefthandanimtics[currweapon][currweaponanim].currx;
2834:
2835: rotatesprite((dax + (tilesizx[currweaponframe] >> 1)) << 16,
2836: (day + (tilesizy[currweaponframe] >> 1)) << 16,
2837: 65536L,
2838: 1024,
2839: currweaponframe,
2840: 0,
2841: 0,
2842: dabits,
2843: windowx1, windowy1, windowx2, windowy2);
2844:
2845: }
2846: }
2847:
2848: if (currweapon == 0 && currweaponframe == EMPTY) {
2849: dahand = 0;
2850: oldmousestatus = 0;
2851: currweaponanim = 0;
2852: currweaponfired = 0;
2853: }
2854:
2855: if (selectedgun == 4 && currweaponframe == EMPTY) {
2856: currweaponanim = 0;
2857: currweaponfired = 0;
2858: currweaponflip = 0;
2859: currweapon = selectedgun;
2860: oldmousestatus = 0;
2861: }
2862:
2863: break;
2864:
2865:
2866: case 1: // fire
2867:
2868: switch (currweapon) {
2869: case 0: // fist
2870: if (currweaponframe == RFIST + 5)
2871: if (currweaponanim == 5 && currweapontics == 10)
2872: swingdasound(currweapon);
2873: break;
2874: case 1: // knife
2875: if (currweaponframe == KNIFEATTACK + 6
2876: || currweaponframe == ZKNIFEATTACK + 5)
2877: if (currweaponanim == 8 && currweapontics == 8)
2878: swingdasound(currweapon);
2879: if (currweaponframe == KNIFEATTACK2 + 2
2880: || currweaponframe == ZKNIFEATTACK2 + 2)
2881: if ((currweaponanim == 5 || currweaponanim == 9) && currweapontics == 8)
2882: swingdasound(currweapon);
2883: break;
2884: case 2: // shortsword
2885: if (currweaponframe == GOBSWORDATTACK + 4
2886: || currweaponframe == ZSHORTATTACK + 7)
2887: if (currweaponanim == 4 && currweapontics == 10)
2888: swingdasound(currweapon);
2889: if (currweaponframe == GOBSWORDATTACK2 + 4
2890: || currweaponframe == ZSHORTATTACK2 + 4)
2891: if (currweaponanim == 4 && currweapontics == 10)
2892: swingdasound(currweapon);
2893: break;
2894: case 3: // morning
2895: if (currweaponframe == MORNINGSTAR + 5
2896: || currweaponframe == ZSTARATTACK + 7)
2897: if (currweaponanim == 7 && currweapontics == 12)
2898: swingdasound(currweapon);
2899: if (currweaponframe == MORNINGATTACK2 + 3
2900: || currweaponframe == ZSTARATTACK2 + 3)
2901: if (currweaponanim == 3 && currweapontics == 12)
2902: swingdasound(currweapon);
2903: break;
2904: case 4: // sword
2905: if (currweaponframe == SWORDATTACK + 7)
2906: if (currweaponanim == 7 && currweapontics == 8)
2907: swingdasound(currweapon);
2908: if (currweaponframe == SWORDATTACK2 + 6)
2909: if (currweaponanim == 6 && currweapontics == 8)
2910: swingdasound(currweapon);
2911: break;
2912: case 5: // battleaxe
2913: if (currweaponframe == BIGAXEATTACK + 7
2914: || currweaponframe == ZAXEATTACK + 12)
2915: if (currweaponanim == 7 && currweapontics == 12)
2916: swingdasound(currweapon);
2917: if (currweaponframe == BIGAXEATTACK2 + 6
2918: || currweaponframe == ZAXEATTACK2 + 6)
2919: if (currweaponanim == 6 && currweapontics == 12)
2920: swingdasound(currweapon);
2921: break;
2922: case 6: // bow
2923: if (currweaponframe == BOWWALK + 4)
2924: if (currweaponanim == 4 && currweapontics == 6)
2925: swingdasound(currweapon);
2926: if (currweaponframe == ZBOWATTACK + 4)
2927: if (currweaponanim == 4 && currweapontics == 6)
2928: swingdasound(currweapon);
2929: break;
2930: case 7: // pike
2931: if (currweaponframe == PIKEATTACK1 + 4
2932: || currweaponframe == ZPIKEATTACK + 4)
2933: if (currweaponanim == 8 && currweapontics == 10)
2934: swingdasound(currweapon);
2935: if (currweaponframe == PIKEATTACK2 + 4
2936: || currweaponframe == ZPIKEATTACK2 + 4)
2937: if (currweaponanim == 4 && currweapontics == 10)
2938: swingdasound(currweapon);
2939: break;
2940: case 8: // two handed sword
2941: if (currweaponframe == EXCALATTACK1 + 7
2942: || currweaponframe == ZTWOHANDATTACK + 12)
2943: if (currweaponanim == 7 && currweapontics == 8)
2944: swingdasound(currweapon);
2945: if (currweaponframe == EXCALATTACK2 + 5
2946: || currweaponframe == ZTWOHANDATTACK2 + 5)
2947: if (currweaponanim == 5 && currweapontics == 8)
2948: swingdasound(currweapon);
2949: break;
2950: case 9: // halberd
2951: if (currweaponframe == HALBERDATTACK1 + 3
2952: || currweaponframe == ZHALBERDATTACK + 4)
2953: if (currweaponanim == 7 && currweapontics == 12)
2954: swingdasound(currweapon);
2955: if (currweaponframe == HALBERDATTACK2 + 3
2956: || currweaponframe == ZHALBERDATTACK2 + 3)
2957: if (currweaponanim == 4 && currweapontics == 12)
2958: swingdasound(currweapon);
2959: break;
2960: }
2961:
2962: switch (currweaponframe) {
2963: case RFIST + 5:
2964: case KNIFEATTACK + 6:
2965: case ZKNIFEATTACK + 5: // new
2966: case MORNINGSTAR + 5:
2967: case SWORDATTACK + 7:
2968: case BOWWALK + 5:
2969: case ZBOWATTACK + 4:
2970: case KNIFEATTACK2 + 2:
2971: case ZKNIFEATTACK2 + 2:
2972: case SWORDATTACK2 + 6:
2973: case MORNINGATTACK2 + 3:
2974: case HALBERDATTACK1 + 3:
2975: case HALBERDATTACK2 + 3:
2976: case BIGAXEATTACK + 7:
2977: case BIGAXEATTACK2 + 6:
2978: case PIKEATTACK1 + 4:
2979: case PIKEATTACK2 + 4:
2980: case EXCALATTACK1 + 7:
2981: case EXCALATTACK2 + 5:
2982: case GOBSWORDATTACK2 + 4:
2983: case GOBSWORDATTACK + 4:
2984: case ZSHORTATTACK + 7:
2985: case ZSHORTATTACK2 + 4:
2986: case ZSTARATTACK + 7:
2987: case ZSTARATTACK2 + 3:
2988: case ZAXEATTACK + 12:
2989: case ZAXEATTACK2 + 6:
2990: case ZPIKEATTACK + 4:
2991: case ZPIKEATTACK2 + 4:
2992: case ZTWOHANDATTACK + 12:
2993: case ZTWOHANDATTACK2 + 5:
2994: case ZHALBERDATTACK + 4:
2995: case ZHALBERDATTACK2 + 3:
2996: swingdaweapon(plr);
2997: break;
2998: }
2999:
3000: currweapontics -= ((long) synctics);
3001: if (helmettime > 0)
3002: currweapontics--;
3003:
3004: if (shieldpoints <= 0)
3005: droptheshield = 1;
3006:
3007: if ((currweaponframe == SWORDATTACK + 7
3008: || currweaponframe == SWORDATTACK2 + 7)
3009: && currweapontics < 0 && droptheshield == 1) {
3010:
3011: if (rand() % 100 > 50) {
3012: if (plr->ammo[1] > 0 && plr->weapon[3] == 0) {
3013: currweapon = 1;
3014: currweapontics = 6;
3015: currweaponanim = -1;
3016: currweaponfired = 6;
3017: currweaponflip = 1;
3018: }
3019: if (plr->ammo[3] > 0) {
3020: currweapon = 3;
3021: currweapontics = 6;
3022: currweaponanim = -1;
3023: currweaponfired = 6;
3024: currweaponflip = 1;
3025: }
3026: }
3027: }
3028: if (currweapontics < 0) {
3029: currweaponanim++;
3030: if (currweaponanim > 11) {
3031: // impact=0;
3032: currweaponanim = 0;
3033: currweaponfired = 0;
3034: oldmousestatus = 0; // NEW
3035: if (dahand > 0)
3036: dahand = 0;
3037: }
3038: if (currweaponattackstyle == 0) {
3039: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3040: currweapontics = weaponanimtics[currweapon][currweaponanim].daweapontics;
3041: currweaponframe = weaponanimtics[currweapon][currweaponanim].daweaponframe;
3042: dax = weaponanimtics[currweapon][currweaponanim].currx + 8;
3043: day = weaponanimtics[currweapon][currweaponanim].curry;
3044: }
3045: else {
3046: currweapontics = zweaponanimtics[currweapon][currweaponanim].daweapontics;
3047: currweaponframe = zweaponanimtics[currweapon][currweaponanim].daweaponframe;
3048: dax = zweaponanimtics[currweapon][currweaponanim].currx + 8;
3049: day = zweaponanimtics[currweapon][currweaponanim].curry;
3050: }
3051: }
3052: else {
3053: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3054: currweapontics = weaponanimtics2[currweapon][currweaponanim].daweapontics;
3055: currweaponframe = weaponanimtics2[currweapon][currweaponanim].daweaponframe;
3056: dax = weaponanimtics2[currweapon][currweaponanim].currx + 8;
3057: day = weaponanimtics2[currweapon][currweaponanim].curry;
3058: }
3059: else {
3060: currweapontics = zweaponanimtics2[currweapon][currweaponanim].daweapontics;
3061: currweaponframe = zweaponanimtics2[currweapon][currweaponanim].daweaponframe;
3062: dax = zweaponanimtics2[currweapon][currweaponanim].currx + 8;
3063: day = zweaponanimtics2[currweapon][currweaponanim].curry;
3064: }
3065: }
3066: }
3067: else {
3068: if (currweaponattackstyle == 0) {
3069: // flip
3070: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3071: currweaponframe = weaponanimtics[currweapon][currweaponanim].daweaponframe;
3072: dax = weaponanimtics[currweapon][currweaponanim].currx;
3073: day = weaponanimtics[currweapon][currweaponanim].curry;
3074: }
3075: else {
3076: currweaponframe = zweaponanimtics[currweapon][currweaponanim].daweaponframe;
3077: dax = zweaponanimtics[currweapon][currweaponanim].currx;
3078: day = zweaponanimtics[currweapon][currweaponanim].curry;
3079: }
3080: }
3081: else {
3082: // flip
3083: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3084: currweaponframe = weaponanimtics2[currweapon][currweaponanim].daweaponframe;
3085: dax = weaponanimtics2[currweapon][currweaponanim].currx;
3086: day = weaponanimtics2[currweapon][currweaponanim].curry;
3087: }
3088: else {
3089: currweaponframe = zweaponanimtics2[currweapon][currweaponanim].daweaponframe;
3090: dax = zweaponanimtics2[currweapon][currweaponanim].currx;
3091: day = zweaponanimtics2[currweapon][currweaponanim].curry;
3092: }
3093: }
3094:
3095: }
3096: if (currweapon == 0 && currweaponframe != EMPTY) {
3097: if (dahand == 1)
3098: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3099:
3100: else if (dahand == 2) {
3101: dax = lefthandanimtics[0][currweaponanim].currx;
3102: day = lefthandanimtics[0][currweaponanim].curry + 8;
3103: overwritesprite(dax, day + 5, currweaponframe + 6, dashade, dabits, dapalnum);
3104: }
3105: }
3106: else {
3107: if (currweaponframe != EMPTY) {
3108: if (currweaponattackstyle == 0)
3109: // flip
3110: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2)
3111: dax = weaponanimtics[currweapon][currweaponanim].currx;
3112: else
3113: dax = zweaponanimtics[currweapon][currweaponanim].currx;
3114: else
3115: // flip
3116: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2)
3117: dax = weaponanimtics2[currweapon][currweaponanim].currx;
3118: else
3119: dax = zweaponanimtics2[currweapon][currweaponanim].currx;
3120:
3121: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3122: }
3123: }
3124:
3125: if (currweapon == 0 && currweaponframe == EMPTY) {
3126: dahand = 0;
3127: oldmousestatus = 0; // NEW
3128: currweaponanim = 0;
3129: currweaponfired = 0;
3130: }
3131: break;
3132:
3133:
3134: case 0: // walking
3135:
3136: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2)
3137: currweapontics = weaponanimtics[currweapon][0].daweapontics;
3138: else
3139: currweapontics = zweaponanimtics[currweapon][0].daweapontics;
3140:
3141: if (currweapon == 6 && plr->ammo[6] <= 0) {
3142: // wango
3143: if (plr->weapon[currweapon] == 1)
3144: currweaponframe = BOWREADYEND;
3145: else
3146: currweaponframe = ZBOWWALK;
3147: }
3148: else {
3149: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2)
3150: currweaponframe = weaponanimtics[currweapon][0].daweaponframe;
3151: else
3152: currweaponframe = zweaponanimtics[currweapon][0].daweaponframe;
3153: }
3154:
3155: if (vel != 0) {
3156: snakex = (sintable[(lockclock << 4) & 2047] >> 12);
3157: snakey = (sintable[(totalclock << 4) & 2047] >> 12);
3158:
3159: if (plr->screensize <= 320) {
3160: /* if( currweaponframe == BOWREADYEND ) { if
3161: * (plr->weapon[currweapon] == 1) {
3162: * day=readyanimtics[currweapon][6].curry+snakey+16;
3163: * dax=readyanimtics[currweapon][6].currx+snakex+16; } else
3164: * { day=zreadyanimtics[currweapon][6].curry+snakey+16;
3165: * dax=zreadyanimtics[currweapon][6].currx+snakex+16; } }
3166: * else { if (plr->weapon[currweapon] == 1 ||
3167: * plr->weapon[7] == 2) {
3168: * day=weaponanimtics[currweapon][0].curry+snakey+16;
3169: * dax=weaponanimtics[currweapon][0].currx+snakex+16; }
3170: * else {
3171: * day=zreadyanimtics[currweapon][6].curry+snakey+16;
3172: * dax=zreadyanimtics[currweapon][6].currx+snakex+16; } } */
3173: if (currweaponframe == BOWREADYEND) {
3174: if (plr->weapon[currweapon] == 1) {
3175: day = readyanimtics[currweapon][6].curry + snakey + 8;
3176: dax = readyanimtics[currweapon][6].currx + snakex + 8;
3177: }
3178: else {
3179: day = zreadyanimtics[currweapon][6].curry + snakey + 8;
3180: dax = zreadyanimtics[currweapon][6].currx + snakex + 8;
3181: }
3182: }
3183: else {
3184: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3185: day = weaponanimtics[currweapon][0].curry + snakey + 8;
3186: dax = weaponanimtics[currweapon][0].currx + snakex + 8;
3187: }
3188: else {
3189: day = zweaponanimtics[currweapon][0].curry + snakey + 8;
3190: dax = zweaponanimtics[currweapon][0].currx + snakex + 8;
3191: }
3192: }
3193:
3194: }
3195: else {
3196: if (currweaponframe == BOWREADYEND) {
3197: if (plr->weapon[currweapon] == 1) {
3198: day = readyanimtics[currweapon][6].curry + snakey + 8;
3199: dax = readyanimtics[currweapon][6].currx + snakex + 8;
3200: }
3201: else {
3202: day = zreadyanimtics[currweapon][6].curry + snakey + 8;
3203: dax = zreadyanimtics[currweapon][6].currx + snakex + 8;
3204: }
3205: }
3206: else {
3207: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3208: day = weaponanimtics[currweapon][0].curry + snakey + 8;
3209: dax = weaponanimtics[currweapon][0].currx + snakex + 8;
3210: }
3211: else {
3212: day = zweaponanimtics[currweapon][0].curry + snakey + 8;
3213: dax = zweaponanimtics[currweapon][0].currx + snakex + 8;
3214: }
3215: }
3216: }
3217: }
3218: else {
3219: if (currweaponframe == BOWREADYEND) {
3220: if (plr->weapon[currweapon] == 1) {
3221: day = readyanimtics[currweapon][6].curry + 3;
3222: dax = readyanimtics[currweapon][6].currx + 3;
3223: }
3224: else {
3225: day = zreadyanimtics[currweapon][6].curry + 3;
3226: dax = zreadyanimtics[currweapon][6].currx + 3;
3227: }
3228: }
3229: else {
3230: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3231: dax = weaponanimtics[currweapon][0].currx + 3;
3232: day = weaponanimtics[currweapon][0].curry + 3;
3233: }
3234: else {
3235: dax = zweaponanimtics[currweapon][0].currx + 3;
3236: day = zweaponanimtics[currweapon][0].curry + 3;
3237: }
3238: }
3239: }
3240: if (currweapon == 0 && currweaponframe != EMPTY) {
3241: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3242: overwritesprite(0, day + 8, currweaponframe + 6, dashade, dabits, dapalnum);
3243: }
3244: else {
3245: if (currweaponframe != EMPTY) {
3246: overwritesprite(dax + snakex, day, currweaponframe, dashade, dabits, dapalnum);
3247: }
3248: }
3249: break;
3250: case 2: // unready
3251: if (currweapon == 1)
3252: weapondrop += synctics << 1;
3253: else
3254: weapondrop += synctics;
3255: if (weapondrop > weapondropgoal) {
3256: currweaponfired = 3;
3257: weaponraise = 40;
3258: currweapon = selectedgun;
3259: weaponuseless = 0;
3260: // hasshot=0;//just in case of bugg
3261: // make hasshot=1;
3262: }
3263:
3264: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2)
3265: currweapontics = weaponanimtics[currweapon][0].daweapontics;
3266: else
3267: currweapontics = zweaponanimtics[currweapon][0].daweapontics;
3268:
3269: if (currweapon == 6 && plr->ammo[6] <= 0) {
3270: if (plr->weapon[currweapon] == 1)
3271: currweaponframe = BOWREADYEND;
3272: else
3273: // currweaponframe=ZBOWREADYEND;
3274: currweaponframe = ZBOWWALK;
3275: }
3276: else {
3277: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2)
3278: currweaponframe = weaponanimtics[currweapon][0].daweaponframe;
3279: else
3280: currweaponframe = zweaponanimtics[currweapon][0].daweaponframe;
3281: }
3282:
3283: if (currweaponframe == BOWREADYEND) {
3284: day = readyanimtics[currweapon][6].curry + (weapondrop);
3285: dax = readyanimtics[currweapon][6].currx;
3286: }
3287: // else if (currweaponframe == ZBOWREADYEND) {
3288: else if (currweaponframe == ZBOWWALK) {
3289: day = zreadyanimtics[currweapon][6].curry + (weapondrop);
3290: dax = zreadyanimtics[currweapon][6].currx;
3291: }
3292: else {
3293: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3294: dax = weaponanimtics[currweapon][0].currx;
3295: day = weaponanimtics[currweapon][0].curry + (weapondrop);
3296: }
3297: else {
3298: dax = zweaponanimtics[currweapon][0].currx;
3299: day = zweaponanimtics[currweapon][0].curry + (weapondrop);
3300: }
3301: }
3302:
3303: if (currweapon == 0 && currweaponframe != EMPTY) {
3304: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3305: overwritesprite(0, day, currweaponframe + 6, dashade, dabits, dapalnum);
3306: }
3307:
3308: else {
3309: if (currweaponframe != EMPTY) {
3310: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2)
3311: dax = weaponanimtics[currweapon][0].currx;
3312: else
3313: dax = weaponanimtics[currweapon][0].currx;
3314:
3315: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3316: }
3317: }
3318: break;
3319: case 3: // ready
3320: currweapontics -= ((long) synctics);
3321: if (currweapontics < 0) {
3322: currweaponanim++;
3323: if (currweaponanim == 12) {
3324: currweaponanim = 0;
3325: currweaponfired = 0;
3326:
3327: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3328: currweaponframe = readyanimtics[currweapon][11].daweaponframe;
3329: dax = readyanimtics[currweapon][11].currx;
3330: day = readyanimtics[currweapon][11].curry + 8;
3331: }
3332: else {
3333: currweaponframe = zreadyanimtics[currweapon][11].daweaponframe;
3334: dax = zreadyanimtics[currweapon][11].currx;
3335: day = zreadyanimtics[currweapon][11].curry + 8;
3336: }
3337:
3338: if (currweapon == 0 && currweaponframe != EMPTY) {
3339: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3340: overwritesprite(0, day, currweaponframe + 6, dashade, dabits, dapalnum);
3341: }
3342: else {
3343: if (currweaponframe != EMPTY) {
3344: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3345: }
3346: }
3347: break;
3348: if (dahand > 0)
3349: dahand = 0;
3350: }
3351: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3352: currweapontics = readyanimtics[currweapon][currweaponanim].daweapontics;
3353: currweaponframe = readyanimtics[currweapon][currweaponanim].daweaponframe;
3354: dax = readyanimtics[currweapon][currweaponanim].currx;
3355: day = readyanimtics[currweapon][currweaponanim].curry + 8;
3356: }
3357: else {
3358: currweapontics = zreadyanimtics[currweapon][currweaponanim].daweapontics;
3359: currweaponframe = zreadyanimtics[currweapon][currweaponanim].daweaponframe;
3360: dax = zreadyanimtics[currweapon][currweaponanim].currx;
3361: day = zreadyanimtics[currweapon][currweaponanim].curry + 8;
3362: }
3363: }
3364: else {
3365: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3366: currweaponframe = readyanimtics[currweapon][currweaponanim].daweaponframe;
3367: dax = readyanimtics[currweapon][currweaponanim].currx;
3368: day = readyanimtics[currweapon][currweaponanim].curry + 8;
3369: }
3370: else {
3371: currweaponframe = zreadyanimtics[currweapon][currweaponanim].daweaponframe;
3372: dax = zreadyanimtics[currweapon][currweaponanim].currx;
3373: day = zreadyanimtics[currweapon][currweaponanim].curry + 8;
3374: }
3375:
3376: }
3377: if (currweapon == 0 && currweaponframe != EMPTY) {
3378: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3379: overwritesprite(0, day, currweaponframe + 6, dashade, dabits, dapalnum);
3380: }
3381: else {
3382: if (currweaponframe != EMPTY) {
3383: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3384: }
3385: }
3386: break;
3387:
3388: case 5: // cock
3389: currweapontics -= ((long) synctics);
3390: if (currweapontics < 0) {
3391: currweaponanim++;
3392: if (currweaponanim == 4) {
3393: currweaponanim = 0;
3394: currweaponfired = 0;
3395:
3396: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3397: currweaponframe = cockanimtics[3].daweaponframe;
3398: dax = cockanimtics[3].currx + 3;
3399: day = cockanimtics[3].curry + 3;
3400: }
3401: else {
3402: if (plr->weapon[currweapon] == 3) {
3403: currweaponframe = zcockanimtics[4].daweaponframe;
3404: dax = zcockanimtics[4].currx + 3;
3405: day = zcockanimtics[4].curry + 3;
3406: }
3407: else {
3408: currweaponframe = cockanimtics[4].daweaponframe;
3409: dax = cockanimtics[4].currx + 3;
3410: day = cockanimtics[4].curry + 3;
3411: }
3412: }
3413:
3414: if (currweaponframe != EMPTY)
3415: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3416: break;
3417: }
3418:
3419: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3420: currweapontics = cockanimtics[currweaponanim].daweapontics;
3421: currweaponframe = cockanimtics[currweaponanim].daweaponframe;
3422: dax = cockanimtics[currweaponanim].currx;
3423: day = cockanimtics[currweaponanim].curry + 8;
3424: }
3425: else {
3426: if (plr->weapon[currweapon] == 3) {
3427: currweapontics = zcockanimtics[currweaponanim].daweapontics;
3428: currweaponframe = zcockanimtics[currweaponanim].daweaponframe;
3429: dax = zcockanimtics[currweaponanim].currx;
3430: day = zcockanimtics[currweaponanim].curry + 8;
3431: }
3432: else {
3433: currweapontics = cockanimtics[currweaponanim].daweapontics;
3434: currweaponframe = cockanimtics[currweaponanim].daweaponframe;
3435: dax = cockanimtics[currweaponanim].currx;
3436: day = cockanimtics[currweaponanim].curry + 8;
3437: }
3438: }
3439: }
3440: else {
3441: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3442: currweaponframe = cockanimtics[currweaponanim].daweaponframe;
3443: dax = cockanimtics[currweaponanim].currx;
3444: day = cockanimtics[currweaponanim].curry + 8;
3445: }
3446: else {
3447: if (plr->weapon[currweapon] == 3) {
3448: currweaponframe = zcockanimtics[currweaponanim].daweaponframe;
3449: dax = zcockanimtics[currweaponanim].currx;
3450: day = zcockanimtics[currweaponanim].curry + 8;
3451: }
3452: else {
3453: currweaponframe = zcockanimtics[currweaponanim].daweaponframe;
3454: dax = zcockanimtics[currweaponanim].currx;
3455: day = zcockanimtics[currweaponanim].curry + 8;
3456: }
3457: }
3458: }
3459: if (currweaponframe != EMPTY)
3460: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3461:
3462: break;
3463:
3464: case 4: // throw the orb
3465:
3466: if (currweaponframe == EMPTY || (currentorb == 0 || currentorb == 2
3467: || currentorb == 3
3468: || currentorb == 6
3469: || currentorb == 7)) {
3470: castaorb(plr);
3471: currweaponanim = 13;
3472: currweapontics = -1;
3473: }
3474:
3475: currweapontics -= ((long) synctics);
3476: if (currweapontics < 0) {
3477: currweaponanim++;
3478: if (currweaponanim > 12) {
3479: currweaponanim = 0;
3480: currweaponfired = 0;
3481: orbshot = 0;
3482: //
3483: if (plr->weapon[currweapon] == 1 || plr->weapon[7] == 2) {
3484: currweaponframe = throwanimtics[currentorb][currweaponanim].daweaponframe;
3485: dax = throwanimtics[currentorb][currweaponanim].currx;
3486: day = throwanimtics[currentorb][currweaponanim].curry + 8;
3487: }
3488: else {
3489: currweaponframe = zthrowanimtics[currentorb][currweaponanim].daweaponframe;
3490: dax = zthrowanimtics[currentorb][currweaponanim].currx;
3491: day = zthrowanimtics[currentorb][currweaponanim].curry + 8;
3492: }
3493:
3494: if (currweapon == 0 && currweaponframe != EMPTY) {
3495: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3496: }
3497: else {
3498: if (currweaponframe != EMPTY) {
3499: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3500: }
3501: }
3502: //
3503:
3504: break;
3505: }
3506: if (plr->weapon[currweapon] == 1) {
3507: currweapontics = throwanimtics[currentorb][currweaponanim].daweapontics;
3508: currweaponframe = throwanimtics[currentorb][currweaponanim].daweaponframe;
3509: dax = throwanimtics[currentorb][currweaponanim].currx;
3510: day = throwanimtics[currentorb][currweaponanim].curry + 8;
3511: }
3512: else {
3513: currweapontics = zthrowanimtics[currentorb][currweaponanim].daweapontics;
3514: currweaponframe = zthrowanimtics[currentorb][currweaponanim].daweaponframe;
3515: dax = zthrowanimtics[currentorb][currweaponanim].currx;
3516: day = zthrowanimtics[currentorb][currweaponanim].curry + 8;
3517: }
3518: }
3519: else {
3520: if (plr->weapon[currweapon] == 1) {
3521: currweaponframe = throwanimtics[currentorb][currweaponanim].daweaponframe;
3522: dax = throwanimtics[currentorb][currweaponanim].currx;
3523: day = throwanimtics[currentorb][currweaponanim].curry + 8;
3524: }
3525: else {
3526: currweaponframe = zthrowanimtics[currentorb][currweaponanim].daweaponframe;
3527: dax = zthrowanimtics[currentorb][currweaponanim].currx;
3528: day = zthrowanimtics[currentorb][currweaponanim].curry + 8;
3529: }
3530: }
3531: if (currweaponframe != EMPTY) {
3532: overwritesprite(dax, day, currweaponframe, dashade, dabits, dapalnum);
3533: }
3534: break;
3535: }
3536:
3537: if (shieldpoints > 0
3538: && (currweaponfired == 0
3539: || currweaponfired == 1)
3540: && selectedgun > 0
3541: && selectedgun < 5
3542: && droptheshield == 0) {
3543:
3544: if (currweaponfired == 1) {
3545: snakex = (sintable[(lockclock << 4) & 2047] >> 12);
3546: if (droptheshield == 1) {
3547: dropshieldcnt += synctics << 1;
3548: snakey = (sintable[(totalclock << 4) & 2047] >> 12) + dropshieldcnt;
3549: }
3550: else {
3551: snakey = (sintable[(totalclock << 4) & 2047] >> 12);
3552: }
3553: }
3554: if (dropshieldcnt > 200) {
3555: dropshieldcnt = 0;
3556: droptheshield = 1;
3557: }
3558:
3559: if (shieldtype == 1) {
3560: if (shieldpoints > 75) {
3561: overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD, dashade, dabits, dapalnum);
3562: }
3563: else if (shieldpoints > 50 && shieldpoints < 76) {
3564: overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD + 1, dashade, dabits, dapalnum);
3565: }
3566: else if (shieldpoints > 25 && shieldpoints < 51) {
3567: overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD + 2, dashade, dabits, dapalnum);
3568: }
3569: else {
3570: overwritesprite(-40 + snakex, 100 + snakey, GRONSHIELD + 3, dashade, dabits, dapalnum);
3571: }
3572: }
3573: else {
3574: if (shieldpoints > 150) {
3575: overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD, dashade, dabits, dapalnum);
3576: }
3577: else if (shieldpoints > 100 && shieldpoints < 151) {
3578: overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD + 1, dashade, dabits, dapalnum);
3579: }
3580: else if (shieldpoints > 50 && shieldpoints < 101) {
3581: overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD + 2, dashade, dabits, dapalnum);
3582: }
3583: else {
3584: overwritesprite(-40 + snakex, 100 + snakey, ROUNDSHIELD + 3, dashade, dabits, dapalnum);
3585: }
3586: }
3587:
3588: }
3589:
3590:
3591: //
3592: // spellbook
3593: //
3594:
3595: if (spellbookflip == 1) {
3596: if (svga == 0) {
3597: if (plr->screensize <= 320)
3598: itemtoscreen(122L, 155L, SPELLBOOKBACK, 0, 0);
3599: }
3600: if (svga == 1) {
3601: if (plr->screensize == 320)
3602: itemtoscreen(120L << 1, 372L, SSPELLBACK, 0, 0);
3603: }
3604:
3605: spellbooktics -= synctics;
3606: if (spellbooktics < 0) {
3607: spellbook++;
3608: if (spellbook > 8)
3609: spellbook = 8;
3610: if (spellbook == 8) {
3611: spellbooktics = spellbookanim[currentorb][8].daweapontics;
3612: if (svga == 1) {
3613: spellbookframe = sspellbookanim[currentorb][8].daweaponframe;
3614: dax = sspellbookanim[currentorb][8].currx;
3615: day = sspellbookanim[currentorb][8].curry;
3616: itemtoscreen(dax << 1, day, spellbookframe, 0, 0);
3617: }
3618: else {
3619: spellbookframe = spellbookanim[currentorb][8].daweaponframe;
3620: dax = spellbookanim[currentorb][8].currx;
3621: day = spellbookanim[currentorb][8].curry;
3622: itemtoscreen(dax, day, spellbookframe, 0, 0);
3623: }
3624: spellbookflip = 0;
3625: return;
3626: }
3627: else {
3628: spellbooktics = spellbookanim[currentorb][spellbook].daweapontics;
3629:
3630: if (svga == 1) {
3631: spellbookframe = sspellbookanim[currentorb][spellbook].daweaponframe;
3632: dax = sspellbookanim[currentorb][spellbook].currx;
3633: day = sspellbookanim[currentorb][spellbook].curry;
3634: itemtoscreen(dax << 1, day, spellbookframe, 0, 0);
3635: }
3636: else {
3637: spellbookframe = spellbookanim[currentorb][spellbook].daweaponframe;
3638: dax = spellbookanim[currentorb][spellbook].currx;
3639: day = spellbookanim[currentorb][spellbook].curry;
3640: itemtoscreen(dax, day, spellbookframe, 0, 0);
3641: }
3642: }
3643: }
3644: else {
3645:
3646: if (svga == 1) {
3647: spellbookframe = sspellbookanim[currentorb][spellbook].daweaponframe;
3648: dax = sspellbookanim[currentorb][spellbook].currx;
3649: day = sspellbookanim[currentorb][spellbook].curry;
3650: itemtoscreen(dax << 1, day, spellbookframe, 0, 0);
3651: }
3652: else {
3653: spellbookframe = spellbookanim[currentorb][spellbook].daweaponframe;
3654: dax = spellbookanim[currentorb][spellbook].currx;
3655: day = spellbookanim[currentorb][spellbook].curry;
3656: itemtoscreen(dax, day, spellbookframe, 0, 0);
3657: }
3658:
3659: }
3660: }
3661:
3662:
3663: }
3664:
3665: void
3666: castaorb(struct player * plr)
3667: {
3668:
3669: int i, k, n, s;
3670: short daang;
3671: spritetype *spr;
3672:
3673: switch (currentorb) {
3674: case 0: // SCARE
3675: playsound_loc(S_GENERALMAGIC4,plr->x,plr->y);
3676: shadowtime = ((plr->lvl + 1) * 120) << 4;
3677: break;
3678: case 1: // NIGHTVISION
3679: nightglowtime = 3600 + (plr->lvl * 120);
3680: break;
3681: case 2: // FREEZE
3682: playsound_loc(S_GENERALMAGIC3,plr->x,plr->y);
3683: daang = plr->ang;
3684: shootgun(plr, daang, 6);
3685: // playsound_loc(S_SPELL1,plr->x,plr->y);
3686: break;
3687: case 3: // MAGIC ARROW
3688: lockon(plr,10,2);
3689: playsound_loc(S_GENERALMAGIC2,plr->x,plr->y);
3690: break;
3691: case 4: // OPEN DOORS
3692: playsound_loc(S_DOORSPELL,plr->x,plr->y);
3693: daang = plr->ang;
3694: shootgun(plr, daang, 7);
3695: break;
3696: case 5: // FLY
3697: playsound_loc(S_GENERALMAGIC1,plr->x,plr->y);
3698: plr->orbactive[currentorb] = 3600 + (plr->lvl * 120);
3699: break;
3700: case 6: // FIREBALL
3701: lockon(plr,3,3);
3702: playsound_loc(S_FIRESPELL,plr->x,plr->y);
3703: break;
3704: case 7: // NUKE
3705: playsound_loc(S_NUKESPELL,plr->x,plr->y);
3706: daang = plr->ang;
3707: shootgun(plr, daang, 4);
3708: break;
3709: }
3710:
3711: }
3712:
3713: void
3714: chunksofmeat(struct player * plr, short hitsprite, long hitx, long hity, long hitz, short hitsect, short daang)
3715: {
3716:
3717: short j;
3718: short k;
3719: short zgore;
3720: int chunk = REDCHUNKSTART;
3721: int newchunk;
3722:
3723: if (goreon == 0)
3724: return;
3725:
3726: if (sprite[hitsprite].shade > 30)
3727: return;
3728:
3729: switch (selectedgun) {
3730: case 1:
3731: case 2:
3732: zgore = 1;
3733: break;
3734: case 3:
3735: case 4:
3736: zgore = 2;
3737: break;
3738: case 5:
3739: zgore = 3;
3740: break;
3741: case 6:
3742: zgore = 1;
3743: break;
3744: case 7:
3745: zgore = 2;
3746: break;
3747: case 8:
3748: case 9:
3749: zgore = 3;
3750: break;
3751: }
3752: if (sprite[hitsprite].statnum == NUKED) {
3753: zgore = 32;
3754: }
3755: if (sprite[hitsprite].picnum == RAT)
3756: zgore = 1;
3757:
3758: if (sprite[hitsprite].picnum == WILLOW
3759: || sprite[hitsprite].picnum == WILLOWEXPLO
3760: || sprite[hitsprite].picnum == WILLOWEXPLO + 1
3761: || sprite[hitsprite].picnum == WILLOWEXPLO + 2
3762: || sprite[hitsprite].picnum == GUARDIAN
3763: || sprite[hitsprite].picnum == GUARDIANATTACK
3764: || sprite[hitsprite].picnum == DEMON)
3765: return;
3766:
3767: if (sprite[hitsprite].picnum == SKELETON
3768: || sprite[hitsprite].picnum == SKELETONATTACK
3769: || sprite[hitsprite].picnum == SKELETONDIE) {
3770: playsound_loc(S_SKELHIT1 + (rand() % 2), sprite[hitsprite].x, sprite[hitsprite].y);
3771: }
3772: else {
3773: if (rand() % 100 > 60)
3774: playsound_loc(S_GORE1 + (rand() % 4), sprite[hitsprite].x, sprite[hitsprite].y);
3775: }
3776:
3777: if ((hitsprite >= 0) && (sprite[hitsprite].statnum < MAXSTATUS)) {
3778: for (k = 0; k < zgore; k++) {
3779: newchunk = 0;
3780: j = insertsprite(hitsect, CHUNKOMEAT);
3781: sprite[j].x = hitx;
3782: sprite[j].y = hity;
3783: sprite[j].z = hitz;
3784: sprite[j].cstat = 0;
3785: if (rand() % 100 > 50) {
3786: switch (sprite[hitsprite].picnum) {
3787: case GRONHAL:
3788: case GRONHALATTACK:
3789: case GRONHALPAIN:
3790: case GRONMU:
3791: case GRONMUATTACK:
3792: case GRONMUPAIN:
3793: case GRONSW:
3794: case GRONSWATTACK:
3795: case GRONSWPAIN:
3796: chunk = REDCHUNKSTART + (rand() % 8);
3797: break;
3798:
3799: case KOBOLD:
3800: case KOBOLDATTACK:
3801: if (sprite[hitsprite].pal == 0)
3802: chunk = BROWNCHUNKSTART + (rand() % 8);
3803: if (sprite[hitsprite].pal == 4)
3804: chunk = GREENCHUNKSTART + (rand() % 8);
3805: if (sprite[hitsprite].pal == 7)
3806: chunk = REDCHUNKSTART + (rand() % 8);
3807: break;
3808: case DEVILSTAND:
3809: case DEVIL:
3810: case DEVILATTACK:
3811: chunk = REDCHUNKSTART + (rand() % 8);
3812: break;
3813: case IMP:
3814: case IMPATTACK:
3815: case IMPPAIN:
3816: if (sprite[hitsprite].pal == 0)
3817: chunk = GREENCHUNKSTART + (rand() % 8);
3818: break;
3819: case MINOTAUR:
3820: case MINOTAURATTACK:
3821: case MINOTAURPAIN:
3822: chunk = TANCHUNKSTART + (rand() % 8);
3823: break;
3824: }
3825: }
3826: else {
3827: newchunk = 1;
3828: // chunk = NEWCHUNK + (rand() % 9);
3829: chunk = REDCHUNKSTART + (rand() % 8);
3830: }
3831: if (sprite[hitsprite].picnum == SKELETON ||
3832: sprite[hitsprite].picnum == SKELETONATTACK ||
3833: sprite[hitsprite].picnum == SKELETONDIE) {
3834: chunk = BONECHUNK1 + (rand() % 9);
3835: }
3836: if (plr->weapon[2] == 3 && currweapon == 2) {
3837: sprite[j].picnum = ARROWFLAME;
3838: }
3839: else {
3840: sprite[j].picnum = chunk; // = REDCHUNKSTART + (rand() % 8);
3841: }
3842:
3843: sprite[j].shade = -16;
3844: sprite[j].xrepeat = 64;
3845: sprite[j].yrepeat = 64;
3846: sprite[j].clipdist = 16;
3847: sprite[j].ang = ((rand() & 1023) - 1024) & 2047;
3848: sprite[j].xvel = ((rand() & 1023) - 512);
3849: sprite[j].yvel = ((rand() & 1023) - 512);
3850: sprite[j].zvel = ((rand() & 1023) - 512);
3851: if (newchunk == 1)
3852: sprite[j].zvel <<= 1;
3853: sprite[j].owner = 4096;
3854: sprite[j].lotag = 512;
3855: sprite[j].hitag = 0;
3856: sprite[j].pal = 0;
3857: movesprite((short) j, (((long) sintable[(sprite[j].ang + 512) & 2047]) * synctics) << 3, (((long) sintable[sprite[j].ang]) * synctics) << 3, 0L, 4L << 8, 4L << 8, 0);
3858: }
3859: }
3860:
3861: }
3862:
3863: void
3864: swingdapunch(int daweapon)
3865: {
3866:
3867: switch (daweapon) {
3868: case 0: // hands
3869: //JSA SPOOGE
3870: SND_Sound(S_SOCK4);
3871: SND_Sound(S_PLRPAIN1 + (rand() % 2));
3872: healthpic(-1);
3873: startredflash(10);
3874: break;
3875: case 1: // knife
3876: case 2: // mace
3877: case 4: // sword
3878: SND_PlaySound(S_WALLHIT1, 0, 0, 0, 0);
3879: break;
3880: case 3: // arrow
3881: break;
3882: case 5:
3883: case 6:
3884: case 7:
3885: case 8:
3886: SND_PlaySound(S_WALLHIT1, 0, 0, 0, 0);
3887: break;
3888:
3889: }
3890:
3891:
3892: }
3893:
3894: void
3895: shootgun(struct player * plr, short daang, char guntype)
3896: {
3897:
3898: short hitsect,
3899: hitwall,
3900: hitsprite,
3901: daang2,
3902: daang3,
3903: k;
3904: long i,
3905: j,
3906: daz2,
3907: hitx,
3908: hity,
3909: hitz;
3910: int chunk;
3911: long hit,
3912: dax,
3913: day;
3914: int bolts;
3915: int cnt;
3916:
3917: switch (guntype) {
3918: case 0:
3919: daang2 = daang + 2048;
3920: daz2 = (100 - plr->horiz) * 2000;
3921: hitscan(plr->x, plr->y, plr->z, plr->sector, // Start position
3922: sintable[(daang2 + 2560) & 2047], // X vector of 3D ang
3923: sintable[(daang2 + 2048) & 2047], // Y vector of 3D ang
3924: daz2, // Z vector of 3D ang
3925: &hitsect, &hitwall, &hitsprite, &hitx, &hity, &hitz);
3926:
3927: if (hitsprite >= 0)
3928: madeahit = 1;
3929:
3930: if (hitwall >= 0) {
3931: if ((labs(plr->x - hitx) + labs(plr->y - hity) < 512) && (labs((plr->z >> 8) - ((hitz >> 8) - (64))) <= (512 >> 3))) {
3932: madeahit = 1;
3933: switch (currweapon) {
3934: case 0: // fist
3935: if (currweaponframe == RFIST + 5)
3936: if (currweaponanim == 5 && currweapontics == 10)
3937: swingdapunch(currweapon);
3938: break;
3939: case 1: // knife
3940: if (currweaponframe == KNIFEATTACK + 6)
3941: if (currweaponanim == 8 && currweapontics == 8)
3942: swingdapunch(currweapon);
3943: if (currweaponframe == KNIFEATTACK2 + 2)
3944: if (currweaponanim == 5 || currweaponanim == 9 && currweapontics == 8)
3945: swingdapunch(currweapon);
3946: break;
3947: case 2: // short sword
3948: if (currweaponframe == GOBSWORDATTACK + 4
3949: || currweaponframe == ZSHORTATTACK + 7)
3950: if (currweaponanim == 4 && currweapontics == 10)
3951: swingdapunch(currweapon);
3952: if (currweaponframe == GOBSWORDATTACK + 4
3953: || currweaponframe == ZSHORTATTACK + 4)
3954: if (currweaponanim == 4 && currweapontics == 10)
3955: swingdapunch(currweapon);
3956: break;
3957: case 3: // morning
3958: if (currweaponframe == MORNINGSTAR + 5
3959: || currweaponframe == ZSTARATTACK + 7)
3960: if (currweaponanim == 7 && currweapontics == 12)
3961: swingdapunch(currweapon);
3962: if (currweaponframe == MORNINGATTACK2 + 3
3963: || currweaponframe == ZSTARATTACK + 3)
3964: if (currweaponanim == 3 && currweapontics == 12)
3965: swingdapunch(currweapon);
3966:
3967: if (plr->weapon[currweapon] == 3) {
3968: explosion(hitsprite, hitx, hity, hitz, 4096);
3969: }
3970: break;
3971: case 4: // sword
3972: if (currweaponframe == SWORDATTACK + 7)
3973: if (currweaponanim == 7 && currweapontics == 8) {
3974: swingdapunch(currweapon);
3975: madenoise(2, plr->x, plr->y, plr->z);
3976: }
3977: if (currweaponframe == SWORDATTACK2 + 6)
3978: if (currweaponanim == 6 && currweapontics == 8) {
3979: swingdapunch(currweapon);
3980: madenoise(2, plr->x, plr->y, plr->z);
3981: }
3982: break;
3983: case 5: // battleaxe
3984: if (currweaponframe == BIGAXEATTACK + 7
3985: || currweaponframe == ZAXEATTACK + 12)
3986: if (currweaponanim == 7 && currweapontics == 12)
3987: swingdapunch(currweapon);
3988: if (currweaponframe == BIGAXEATTACK2 + 6
3989: || currweaponframe == ZAXEATTACK2 + 6)
3990: if (currweaponanim == 6 && currweapontics == 12)
3991: swingdapunch(currweapon);
3992: break;
3993: case 6: // bow
3994: if (currweaponframe == BOWWALK + 4)
3995: if (currweaponanim == 4 && currweapontics == 6)
3996: swingdapunch(currweapon);
3997: if (currweaponframe == ZBOWATTACK + 4)
3998: if (currweaponanim == 4 && currweapontics == 6)
3999: swingdapunch(currweapon);
4000: break;
4001: case 7: // pike
4002: if (currweaponframe == PIKEATTACK1 + 4
4003: || currweaponframe == ZPIKEATTACK + 4)
4004: if (currweaponanim == 8 && currweapontics == 10)
4005: swingdapunch(currweapon);
4006: if (currweaponframe == PIKEATTACK2 + 4
4007: || currweaponframe == ZPIKEATTACK2 + 4)
4008: if (currweaponanim == 4 && currweapontics == 10)
4009: swingdapunch(currweapon);
4010: break;
4011: case 8: // two handed sword
4012: if (currweaponframe == EXCALATTACK1 + 7
4013: || currweaponframe == ZTWOHANDATTACK + 12)
4014: if (currweaponanim == 7 && currweapontics == 8)
4015: swingdapunch(currweapon);
4016: if (currweaponframe == EXCALATTACK2 + 5
4017: || currweaponframe == ZTWOHANDATTACK2 + 5)
4018: if (currweaponanim == 5 && currweapontics == 8)
4019: swingdapunch(currweapon);
4020: break;
4021: case 9: // halberd
4022: if (currweaponframe == HALBERDATTACK1 + 3
4023: || currweaponframe == ZHALBERDATTACK + 4)
4024: if (currweaponanim == 6 && currweapontics == 12)
4025: swingdapunch(currweapon);
4026: if (currweaponframe == HALBERDATTACK2 + 3
4027: || currweaponframe == ZHALBERDATTACK2 + 3)
4028: if (currweaponanim == 4 && currweapontics == 12)
4029: swingdapunch(currweapon);
4030: break;
4031: }
4032: }
4033: }
4034: if (checkweapondist(hitsprite, plr->x, plr->y, plr->z, guntype)) {
4035: switch (sprite[hitsprite].picnum) {
4036: case BARREL:
4037: case VASEA:
4038: case VASEB:
4039: case VASEC:
4040: case STAINGLASS1:
4041: case STAINGLASS2:
4042: case STAINGLASS3:
4043: case STAINGLASS4:
4044: case STAINGLASS5:
4045: case STAINGLASS6:
4046: case STAINGLASS7:
4047: case STAINGLASS8:
4048: case STAINGLASS9:
4049: newstatus(hitsprite, BROKENVASE);
4050: break;
4051:
4052: case GRONHAL:
4053: case GRONHALATTACK:
4054: case GRONHALPAIN:
4055: case GRONMU:
4056: case GRONMUATTACK:
4057: case GRONMUPAIN:
4058: case GRONSW:
4059: case GRONSWATTACK:
4060: case GRONSWPAIN:
4061: case KOBOLD:
4062: case KOBOLDATTACK:
4063: case DEVILSTAND:
4064: case DEVIL:
4065: case DEVILATTACK:
4066: case SKELETON:
4067: case SKELETONATTACK:
4068: case IMP:
4069: case IMPATTACK:
4070: // case IMPPAIN:
4071: case MINOTAUR:
4072: case MINOTAURATTACK:
4073: case MINOTAURPAIN:
4074: case FISH:
4075: case RAT:
4076: case DEMON:
4077: case GUARDIAN:
4078: case GUARDIANATTACK:
4079: case WILLOW:
4080:
4081: case NEWGUYSTAND:
4082: case NEWGUYKNEE:
4083: case NEWGUY:
4084: case NEWGUYCAST:
4085: case NEWGUYBOW:
4086: case NEWGUYMACE:
4087: case NEWGUYPUNCH:
4088:
4089: case KURTSTAND:
4090: case KURTKNEE:
4091: case KURTAT:
4092: case KURTPUNCH:
4093: case KURTREADY:
4094:
4095: case GONZOCSW:
4096: case GONZOCSWAT:
4097: // case GONZOCSWPAIN:
4098:
4099: case GONZOGSW:
4100: case GONZOGSWAT:
4101: // case GONZOGSWPAIN:
4102:
4103: case GONZOGHM:
4104: case GONZOGHMAT:
4105: // case GONZOGHMPAIN:
4106:
4107: case GONZOGSH:
4108: case GONZOGSHAT:
4109: // case GONZOGSHPAIN:
4110:
4111: case KATIE:
4112: case KATIEAT:
4113: if (netgame) {
4114: netshootgun(hitsprite, currweapon);
4115: }
4116:
4117: if (currweapon == 3)
4118: if (plr->weapon[currweapon] == 3) {
4119: explosion(hitsprite, hitx, hity, hitz, 4096);
4120: }
4121:
4122:
4123: if (invisibletime > 0)
4124: if (krand() & 32 > 15)
4125: invisibletime = -1;
4126: switch (selectedgun) {
4127: case 0: // fist
4128: k = (krand() % 5) + 1;
4129: break;
4130: case 1: // dagger
4131: k = (krand() % 5) + 5;
4132: break;
4133: case 2: // short sword
4134: k = (krand() % 10) + 5;
4135: break;
4136: case 3: // morning star
4137: k = (krand() % 15) + 5;
4138: break;
4139: case 4: // broad sword
4140: k = (krand() % 20) + 5;
4141: break;
4142: case 5: // battle axe
4143: k = (krand() % 25) + 5;
4144: switch (sprite[hitsprite].picnum) {
4145: case GRONHAL:
4146: case GRONHALATTACK:
4147: case GRONHALPAIN:
4148: case GRONMU:
4149: case GRONMUATTACK:
4150: case GRONMUPAIN:
4151: case GRONSW:
4152: case GRONSWATTACK:
4153: case GRONSWPAIN:
4154:
4155: case NEWGUYSTAND:
4156: case NEWGUYKNEE:
4157: case NEWGUY:
4158: case NEWGUYCAST:
4159: case NEWGUYBOW:
4160: case NEWGUYMACE:
4161: case NEWGUYPUNCH:
4162:
4163: case KURTSTAND:
4164: case KURTKNEE:
4165: case KURTAT:
4166: case KURTPUNCH:
4167: case KURTREADY:
4168:
4169: case GONZOCSW:
4170: case GONZOCSWAT:
4171: case GONZOGSW:
4172: case GONZOGSWAT:
4173: case GONZOGHM:
4174: case GONZOGHMAT:
4175: case GONZOGSH:
4176: case GONZOGSHAT:
4177: k += k >> 1;
4178: }
4179: break;
4180: case 6: // bow
4181: k = (krand() % 30) + 5;
4182: break;
4183: case 7: // pike axe
4184: k = (krand() % 35) + 5;
4185: break;
4186: case 8: // two handed sword
4187: k = (krand() % 40) + 5;
4188: break;
4189: case 9: // halberd
4190: k = (krand() % 45) + 5;
4191: break;
4192: }
4193: k += plr->lvl;
4194: if (plr->weapon[currweapon] == 3) {
4195: k <<= 1;
4196: }
4197: if (vampiretime > 0) {
4198: if (plr->health <= plr->maxhealth)
4199: healthpic((rand() % 10) + 1);
4200: }
4201: if (helmettime > 0)
4202: k <<= 1;
4203: if (strongtime > 0) {
4204: k += k >> 1;
4205:
4206: switch (currweapon) {
4207: case 0: // fist
4208: if (currweaponframe == RFIST + 5)
4209: if (currweaponanim == 5 && currweapontics == 10)
4210: swingdacrunch(currweapon);
4211: break;
4212: case 1: // knife
4213: if (currweaponframe == KNIFEATTACK + 6)
4214: if (currweaponanim == 8 && currweapontics == 8)
4215: swingdacrunch(currweapon);
4216: if (currweaponframe == KNIFEATTACK2 + 2)
4217: if (currweaponanim == 5 || currweaponanim == 9 && currweapontics == 8)
4218: swingdacrunch(currweapon);
4219: break;
4220: case 2: // short sword
4221: if (currweaponframe == GOBSWORDATTACK + 4
4222: || currweaponframe == ZSHORTATTACK + 7)
4223: if (currweaponanim == 4 && currweapontics == 10)
4224: swingdacrunch(currweapon);
4225: if (currweaponframe == GOBSWORDATTACK2 + 4
4226: || currweaponframe == ZSHORTATTACK2 + 4)
4227: if (currweaponanim == 4 && currweapontics == 10)
4228: swingdacrunch(currweapon);
4229: break;
4230: case 3: // morning
4231: if (currweaponframe == MORNINGSTAR + 5
4232: || currweaponframe == ZSTARATTACK + 7)
4233: if (currweaponanim == 7 && currweapontics == 12)
4234: swingdacrunch(currweapon);
4235: if (currweaponframe == MORNINGATTACK2 + 3
4236: || currweaponframe == ZSTARATTACK2 + 3)
4237: if (currweaponanim == 3 && currweapontics == 12)
4238: swingdacrunch(currweapon);
4239: break;
4240: case 4: // sword
4241: if (currweaponframe == SWORDATTACK + 7)
4242: if (currweaponanim == 7 && currweapontics == 8)
4243: swingdacrunch(currweapon);
4244: if (currweaponframe == SWORDATTACK2 + 6)
4245: if (currweaponanim == 6 && currweapontics == 8)
4246: swingdacrunch(currweapon);
4247: break;
4248: case 5: // battleaxe
4249: if (currweaponframe == BIGAXEATTACK + 7
4250: || currweaponframe == ZAXEATTACK + 12)
4251: if (currweaponanim == 7 && currweapontics == 12)
4252: swingdacrunch(currweapon);
4253: if (currweaponframe == BIGAXEATTACK2 + 6
4254: || currweaponframe == ZAXEATTACK2 + 6)
4255: if (currweaponanim == 6 && currweapontics == 12)
4256: swingdacrunch(currweapon);
4257: break;
4258: case 6: // bow
4259: if (currweaponframe == BOWWALK + 4)
4260: if (currweaponanim == 4 && currweapontics == 6)
4261: swingdacrunch(currweapon);
4262: if (currweaponframe == ZBOWATTACK + 4)
4263: if (currweaponanim == 4 && currweapontics == 6)
4264: swingdacrunch(currweapon);
4265: break;
4266: case 7: // pike
4267: if (currweaponframe == PIKEATTACK1 + 4
4268: || currweaponframe == ZPIKEATTACK + 4)
4269: if (currweaponanim == 8 && currweapontics == 10)
4270: swingdacrunch(currweapon);
4271: if (currweaponframe == PIKEATTACK2 + 4
4272: || currweaponframe == ZPIKEATTACK2 + 4)
4273: if (currweaponanim == 4 && currweapontics == 10)
4274: swingdacrunch(currweapon);
4275: break;
4276: case 8: // two handed sword
4277: if (currweaponframe == EXCALATTACK1 + 7
4278: || currweaponframe == ZTWOHANDATTACK + 12)
4279: if (currweaponanim == 7 && currweapontics == 8)
4280: swingdacrunch(currweapon);
4281: if (currweaponframe == EXCALATTACK2 + 5
4282: || currweaponframe == ZTWOHANDATTACK2 + 5)
4283: if (currweaponanim == 5 && currweapontics == 8)
4284: swingdacrunch(currweapon);
4285: break;
4286: case 9: // halberd
4287: if (currweaponframe == HALBERDATTACK1 + 3
4288: || currweaponframe == ZHALBERDATTACK + 4)
4289: if (currweaponanim == 6 && currweapontics == 12)
4290: swingdacrunch(currweapon);
4291: if (currweaponframe == HALBERDATTACK2 + 3
4292: || currweaponframe == ZHALBERDATTACK2 + 3)
4293: if (currweaponanim == 4 && currweapontics == 12)
4294: swingdacrunch(currweapon);
4295: break;
4296: }
4297: sprite[hitsprite].hitag -= (k << 1);
4298: // freeze sword
4299: #if 0
4300: if (plr->weapon[currweapon] == 3 && currweapon == 4) {
4301: if (sprite[hitsprite].picnum == KATIE
4302: || sprite[hitsprite].picnum == KATIEPAIN
4303: || sprite[hitsprite].picnum == KATIEAT
4304: || sprite[hitsprite].shade > 30) {
4305: // do nothing
4306: // a laughing sound
4307: }
4308: else {
4309: turntostone(hitsprite);
4310: break;
4311: }
4312: }
4313: #endif
4314: if (plr->weapon[currweapon] == 3
4315: && currweapon == 8
4316: && sprite[hitsprite].pal != 6) {
4317: if (sprite[hitsprite].hitag <= 0) {
4318: sprite[hitsprite].hitag = 1;
4319: }
4320: if (rand() % 100 > 50)
4321: medusa(hitsprite);
4322: break;
4323: }
4324: else if (currweapon != 0) {
4325: //JSA GORE1 you have strong time
4326: if (rand() % 100 > 50) {
4327: if (sprite[hitsprite].picnum == SKELETON
4328: || sprite[hitsprite].picnum == SKELETONATTACK
4329: || sprite[hitsprite].picnum == SKELETONDIE)
4330: playsound_loc(S_SKELHIT1 + (rand() % 2), sprite[hitsprite].x, sprite[hitsprite].y);
4331: }
4332:
4333: // HERE
4334: switch (currweapon) {
4335: case 0: // fist
4336: break;
4337: case 1: // knife
4338: if (currweaponframe == KNIFEATTACK + 6)
4339: if (currweaponanim == 8 && currweapontics == 8)
4340: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4341: if (currweaponframe == KNIFEATTACK2 + 2)
4342: if (currweaponanim == 5 || currweaponanim == 9 && currweapontics == 8)
4343: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4344: break;
4345: case 2: // short sword
4346: if (currweaponframe == GOBSWORDATTACK + 4
4347: || currweaponframe == ZSHORTATTACK + 7)
4348: if (currweaponanim == 4 && currweapontics == 10)
4349: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4350: if (currweaponframe == GOBSWORDATTACK2 + 4
4351: || currweaponframe == ZSHORTATTACK + 4)
4352: if (currweaponanim == 4 && currweapontics == 10)
4353: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4354: break;
4355: case 3: // morning
4356: if (currweaponframe == MORNINGSTAR + 5
4357: || currweaponframe == ZSTARATTACK + 7)
4358: if (currweaponanim == 7 && currweapontics == 12)
4359: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4360: if (currweaponframe == MORNINGATTACK2 + 3
4361: || currweaponframe == ZSTARATTACK2 + 3)
4362: if (currweaponanim == 3 && currweapontics == 12)
4363: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4364: break;
4365: case 4: // sword
4366: if (currweaponframe == SWORDATTACK + 7)
4367: if (currweaponanim == 7 && currweapontics == 8)
4368: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4369: if (currweaponframe == SWORDATTACK2 + 6)
4370: if (currweaponanim == 6 && currweapontics == 8)
4371: break;
4372: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4373: case 5: // battleaxe
4374: if (currweaponframe == BIGAXEATTACK + 7
4375: || currweaponframe == ZAXEATTACK + 12)
4376: if (currweaponanim == 7 && currweapontics == 12)
4377: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4378: if (currweaponframe == BIGAXEATTACK2 + 6
4379: || currweaponframe == ZAXEATTACK2 + 6)
4380: if (currweaponanim == 6 && currweapontics == 12)
4381: break;
4382: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4383: case 6: // bow
4384: if (currweaponframe == BOWWALK + 4)
4385: if (currweaponanim == 4 && currweapontics == 6)
4386: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4387: if (currweaponframe == ZBOWATTACK + 4)
4388: if (currweaponanim == 4 && currweapontics == 6)
4389: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4390: break;
4391: case 7: // pike
4392: if (currweaponframe == PIKEATTACK1 + 4
4393: || currweaponframe == ZPIKEATTACK + 4)
4394: if (currweaponanim == 8 && currweapontics == 10)
4395: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4396: if (currweaponframe == PIKEATTACK2 + 4
4397: || currweaponframe == ZPIKEATTACK2 + 4)
4398: if (currweaponanim == 4 && currweapontics == 10)
4399: break;
4400: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4401: case 8: // two handed sword
4402: if (currweaponframe == EXCALATTACK1 + 7
4403: || currweaponframe == ZTWOHANDATTACK + 12)
4404: if (currweaponanim == 7 && currweapontics == 8)
4405: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4406: if (currweaponframe == EXCALATTACK2 + 5
4407: || currweaponframe == ZTWOHANDATTACK2 + 5)
4408: if (currweaponanim == 5 && currweapontics == 8)
4409: break;
4410: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4411: case 9: // halberd
4412: if (currweaponframe == HALBERDATTACK1 + 3
4413: || currweaponframe == ZHALBERDATTACK + 4)
4414: if (currweaponanim == 6 && currweapontics == 12)
4415: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4416: if (currweaponframe == HALBERDATTACK2 + 3
4417: || currweaponframe == ZHALBERDATTACK2 + 3)
4418: if (currweaponanim == 4 && currweapontics == 12)
4419: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4420: break;
4421: }
4422: // ENDOFHERE
4423: // chunksofmeat(plr, hitsprite, hitx, hity, hitz,
4424: // hitsect, daang);
4425: }
4426: }
4427: else {
4428: switch (currweapon) {
4429: case 0: // fist
4430: if (currweaponframe == RFIST + 5)
4431: if (currweaponanim == 5 && currweapontics == 10)
4432: swingdacrunch(currweapon);
4433: break;
4434: case 1: // knife
4435: if (currweaponframe == KNIFEATTACK + 6)
4436: if (currweaponanim == 8 && currweapontics == 8)
4437: swingdacrunch(currweapon);
4438: if (currweaponframe == KNIFEATTACK2 + 2)
4439: if (currweaponanim == 5 || currweaponanim == 9 && currweapontics == 8)
4440: swingdacrunch(currweapon);
4441: break;
4442: case 2: // SHORT SWORD
4443: if (currweaponframe == GOBSWORDATTACK + 4
4444: || currweaponframe == ZSHORTATTACK + 7)
4445: if (currweaponanim == 4 && currweapontics == 10)
4446: swingdacrunch(currweapon);
4447: if (currweaponframe == GOBSWORDATTACK2 + 4
4448: || currweaponframe == ZSHORTATTACK2 + 4)
4449: if (currweaponanim == 4 && currweapontics == 10)
4450: swingdacrunch(currweapon);
4451: break;
4452: case 3: // morning
4453: if (currweaponframe == MORNINGSTAR + 5
4454: || currweaponframe == ZSTARATTACK + 7)
4455: if (currweaponanim == 7 && currweapontics == 12)
4456: swingdacrunch(currweapon);
4457: if (currweaponframe == MORNINGATTACK2 + 3
4458: || currweaponframe == ZSTARATTACK2 + 3)
4459: if (currweaponanim == 3 && currweapontics == 12)
4460: swingdacrunch(currweapon);
4461: break;
4462: case 4: // sword
4463: if (currweaponframe == SWORDATTACK + 7)
4464: if (currweaponanim == 7 && currweapontics == 8)
4465: swingdacrunch(currweapon);
4466: if (currweaponframe == SWORDATTACK2 + 6)
4467: if (currweaponanim == 6 && currweapontics == 8)
4468: swingdacrunch(currweapon);
4469: break;
4470: case 5: // battleaxe
4471: if (currweaponframe == BIGAXEATTACK + 7
4472: || currweaponframe == ZAXEATTACK + 12)
4473: if (currweaponanim == 7 && currweapontics == 12)
4474: swingdacrunch(currweapon);
4475: if (currweaponframe == BIGAXEATTACK2 + 6
4476: || currweaponframe == ZAXEATTACK2 + 6)
4477: if (currweaponanim == 6 && currweapontics == 12)
4478: swingdacrunch(currweapon);
4479: break;
4480: case 6: // bow
4481: if (currweaponframe == BOWWALK + 4)
4482: if (currweaponanim == 4 && currweapontics == 6)
4483: swingdacrunch(currweapon);
4484: if (currweaponframe == ZBOWATTACK + 4)
4485: if (currweaponanim == 4 && currweapontics == 6)
4486: swingdacrunch(currweapon);
4487: break;
4488:
4489: case 7: // pike
4490: if (currweaponframe == PIKEATTACK1 + 4
4491: || currweaponframe == ZPIKEATTACK + 4)
4492: if (currweaponanim == 8 && currweapontics == 10)
4493: swingdacrunch(currweapon);
4494: if (currweaponframe == PIKEATTACK2 + 4
4495: || currweaponframe == ZPIKEATTACK2 + 4)
4496: if (currweaponanim == 4 && currweapontics == 10)
4497: swingdacrunch(currweapon);
4498: break;
4499: case 8: // two handed sword
4500: if (currweaponframe == EXCALATTACK1 + 7
4501: || currweaponframe == ZTWOHANDATTACK + 12)
4502: if (currweaponanim == 7 && currweapontics == 8)
4503: swingdacrunch(currweapon);
4504: if (currweaponframe == EXCALATTACK2 + 5
4505: || currweaponframe == ZTWOHANDATTACK2 + 5)
4506: if (currweaponanim == 5 && currweapontics == 8)
4507: swingdacrunch(currweapon);
4508: break;
4509: case 9: // halberd
4510: if (currweaponframe == HALBERDATTACK1 + 3
4511: || currweaponframe == ZHALBERDATTACK + 4)
4512: if (currweaponanim == 6 && currweapontics == 12)
4513: swingdacrunch(currweapon);
4514: if (currweaponframe == HALBERDATTACK2 + 3
4515: || currweaponframe == ZHALBERDATTACK2 + 3)
4516: if (currweaponanim == 4 && currweapontics == 12)
4517: swingdacrunch(currweapon);
4518: break;
4519: }
4520: sprite[hitsprite].hitag -= k;
4521: // freeze sword
4522: #if 0
4523: if (plr->weapon[currweapon] == 3 && currweapon == 4) {
4524: if (sprite[hitsprite].picnum == KATIE
4525: || sprite[hitsprite].picnum == KATIEPAIN
4526: || sprite[hitsprite].picnum == KATIEAT
4527: || sprite[hitsprite].shade > 30) {
4528: // do nothing
4529: // a laughing sound
4530: }
4531: else {
4532: turntostone(hitsprite);
4533: break;
4534: }
4535: }
4536: #endif
4537: if (plr->weapon[currweapon] == 3
4538: && currweapon == 8
4539: && sprite[hitsprite].pal != 6) {
4540: if (sprite[hitsprite].hitag <= 0) {
4541: sprite[hitsprite].hitag = 1;
4542: }
4543: if (rand() % 100 > 75)
4544: medusa(hitsprite);
4545: break;
4546: }
4547:
4548: if (currweapon != 0) {
4549: //JSA GORE normal
4550: if (rand() % 100 > 50) {
4551: if (sprite[hitsprite].picnum == SKELETON
4552: || sprite[hitsprite].picnum == SKELETONATTACK
4553: || sprite[hitsprite].picnum == SKELETONDIE)
4554: playsound_loc(S_SKELHIT1 + (rand() % 2), sprite[hitsprite].x, sprite[hitsprite].y);
4555: }
4556: // HERE
4557: switch (currweapon) {
4558: case 0: // fist
4559: break;
4560: case 1: // knife
4561: if (currweaponframe == KNIFEATTACK + 6)
4562: if (currweaponanim == 8 && currweapontics == 8)
4563: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4564: if (currweaponframe == KNIFEATTACK2 + 2)
4565: if (currweaponanim == 5 || currweaponanim == 9 && currweapontics == 8)
4566: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4567: break;
4568: case 2: // short sword
4569: if (currweaponframe == GOBSWORDATTACK + 4
4570: || currweaponframe == ZSHORTATTACK + 7)
4571: if (currweaponanim == 4 && currweapontics == 10)
4572: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4573: if (currweaponframe == GOBSWORDATTACK2 + 4
4574: || currweaponframe == ZSHORTATTACK2 + 4)
4575: if (currweaponanim == 4 && currweapontics == 10)
4576: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4577: break;
4578: case 3: // morning
4579: if (currweaponframe == MORNINGSTAR + 5
4580: || currweaponframe == ZSTARATTACK + 7)
4581: if (currweaponanim == 7 && currweapontics == 12)
4582: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4583: if (currweaponframe == MORNINGATTACK2 + 3
4584: || currweaponframe == ZSTARATTACK2 + 3)
4585: if (currweaponanim == 3 && currweapontics == 12)
4586: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4587: break;
4588: case 4: // sword
4589: if (currweaponframe == SWORDATTACK + 7)
4590: if (currweaponanim == 7 && currweapontics == 8)
4591: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4592: if (currweaponframe == SWORDATTACK2 + 6)
4593: if (currweaponanim == 6 && currweapontics == 8)
4594: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4595: break;
4596: case 5: // battleaxe
4597: if (currweaponframe == BIGAXEATTACK + 7
4598: || currweaponframe == ZAXEATTACK + 12)
4599: if (currweaponanim == 7 && currweapontics == 12)
4600: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4601: if (currweaponframe == BIGAXEATTACK2 + 6
4602: || currweaponframe == ZAXEATTACK2 + 6)
4603: if (currweaponanim == 6 && currweapontics == 12)
4604: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4605: break;
4606: case 6: // bow
4607: if (currweaponframe == BOWWALK + 4)
4608: if (currweaponanim == 4 && currweapontics == 6)
4609: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4610: if (currweaponframe == ZBOWATTACK + 4)
4611: if (currweaponanim == 4 && currweapontics == 6)
4612: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4613: break;
4614: case 7: // pike
4615: if (currweaponframe == PIKEATTACK1 + 4
4616: || currweaponframe == ZPIKEATTACK + 4)
4617: if (currweaponanim == 8 && currweapontics == 10)
4618: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4619: if (currweaponframe == PIKEATTACK2 + 4
4620: || currweaponframe == ZPIKEATTACK2 + 4)
4621: if (currweaponanim == 4 && currweapontics == 10)
4622: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4623: break;
4624: case 8: // two handed sword
4625: if (currweaponframe == EXCALATTACK1 + 7
4626: || currweaponframe == ZTWOHANDATTACK + 12)
4627: if (currweaponanim == 7 && currweapontics == 8)
4628: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4629: if (currweaponframe == EXCALATTACK2 + 5
4630: || currweaponframe == ZTWOHANDATTACK2 + 5)
4631: if (currweaponanim == 5 && currweapontics == 8)
4632: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4633: break;
4634: case 9: // halberd
4635: if (currweaponframe == HALBERDATTACK1 + 3
4636: || currweaponframe == ZHALBERDATTACK + 4)
4637: if (currweaponanim == 6 && currweapontics == 12)
4638: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4639: if (currweaponframe == HALBERDATTACK2 + 3
4640: || currweaponframe == ZHALBERDATTACK2 + 3)
4641: if (currweaponanim == 4 && currweapontics == 12)
4642: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4643: break;
4644: }
4645: // ENDOFHERE
4646:
4647: // chunksomeat(plr, hitsprite, hitx, hity, hitz,
4648: // hitsect, daang);
4649: }
4650: }
4651:
4652: if (netgame) {
4653: break;
4654: }
4655:
4656: if (sprite[hitsprite].hitag <= 0) {
4657: if (selectedgun > 1) {
4658: //JSA GORE on death ?
4659: //RAF ans:death
4660: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4661: if (sprite[hitsprite].picnum == SKELETON
4662: || sprite[hitsprite].picnum == SKELETONATTACK
4663: || sprite[hitsprite].picnum == SKELETONDIE)
4664: playsound_loc(S_SKELHIT1 + (rand() % 2), sprite[hitsprite].x, sprite[hitsprite].y);
4665: }
4666: newstatus(hitsprite, DIE);
4667: }
4668: sprite[hitsprite].ang = plr->ang + ((krand() & 32) - 64);
4669: if (sprite[hitsprite].hitag > 0)
4670: newstatus(hitsprite, PAIN);
4671: break;
4672: case GONZOBSHPAIN:
4673:
4674: case GONZOCSWPAIN:
4675:
4676: case GONZOGSWPAIN:
4677: case GONZOGHMPAIN:
4678: case GONZOGSHPAIN:
4679:
4680: case GRONHALDIE:
4681: case GRONMUDIE:
4682: case GRONSWDIE:
4683: case KOBOLDDIE:
4684: case DEVILDIE:
4685: case SKELETONDIE:
4686: case IMPDIE:
4687: case MINOTAURDIE:
4688:
4689: case NEWGUYPAIN:
4690: case KATIEPAIN:
4691: if (sprite[hitsprite].pal == 6) {
4692: // JSA_NEW
4693: SND_PlaySound(S_SOCK1 + (rand() % 4), 0, 0, 0, 0);
4694: playsound_loc(S_FREEZEDIE, hitx, hity);
4695: for (k = 0; k < 16; k++) {
4696: icecubes(hitsprite, hitx, hity, hitz, hitsprite);
4697: }
4698: deletesprite((short) hitsprite);
4699: }
4700: } // switch
4701: } // if weapondist
4702: if (madeahit == 0) {
4703: plr->ammo[currweapon]++;
4704: madeahit = 1;
4705: }
4706: break;
4707: case 1:
4708:
4709: daang2 = (daang + 2048) & 2047;
4710: daz2 = (100 - plr->horiz) * 2000;
4711: hitscan(plr->x, plr->y, plr->z, plr->sector, // Start position
4712: sintable[(daang2 + 2560) & 2047], // X vector of 3D ang
4713: sintable[(daang2 + 2048) & 2047], // Y vector of 3D ang
4714: daz2, // Z vector of 3D ang
4715: &hitsect, &hitwall, &hitsprite, &hitx, &hity, &hitz);
4716:
4717:
4718: if (hitwall >= 0) {
4719:
4720: arrowcnt=(arrowcnt+1)%ARROWCOUNTLIMIT;
4721: if (arrowsprite[arrowcnt] != -1) {
4722: deletesprite((short) arrowsprite[arrowcnt]);
4723: arrowsprite[arrowcnt]=-1;
4724: }
4725:
4726: neartag(hitx, hity, hitz, hitsect, daang,
4727: &neartagsector,
4728: &neartagwall,
4729: &neartagsprite,
4730: &neartaghitdist, 1024, 3);
4731:
4732:
4733: if (sector[neartagsector].lotag < 6 ||
4734: sector[neartagsector].lotag > 8) {
4735:
4736: j = insertsprite(hitsect, 0);
4737: arrowsprite[arrowcnt]=j;
4738: sprite[j].x = hitx;
4739: sprite[j].y = hity;
4740: sprite[j].z = hitz + (8 << 8);
4741: sprite[j].cstat = 17; // was16
4742: sprite[j].picnum = WALLARROW;
4743: sprite[j].shade = 0;
4744: sprite[j].pal = 0;
4745: sprite[j].xrepeat = 16;
4746: sprite[j].yrepeat = 48;
4747: sprite[j].ang = ((daang + 2048) - 512 + (rand() & 128 - 64)) & 2047;
4748: sprite[j].xvel = 0;
4749: sprite[j].yvel = 0;
4750: sprite[j].zvel = 0;
4751: sprite[j].owner = 4096;
4752: sprite[j].lotag = 32;
4753: sprite[j].hitag = 0;
4754: playsound_loc(S_ARROWHIT, sprite[j].x, sprite[j].y);
4755:
4756: if (plr->weapon[6] == 3 && currweapon == 6) {
4757: j = insertsprite(hitsect, FIRECHUNK);
4758: sprite[j].x = hitx;
4759: sprite[j].y = hity;
4760: sprite[j].z = hitz + (14 << 8);
4761: sprite[j].cstat = 0;
4762: sprite[j].picnum = ARROWFLAME;
4763: sprite[j].shade = 0;
4764: sprite[j].pal = 0;
4765: sprite[j].xrepeat = 64;
4766: sprite[j].yrepeat = 64;
4767: sprite[j].ang = 0;
4768: sprite[j].xvel = 0;
4769: sprite[j].yvel = 0;
4770: sprite[j].zvel = 0;
4771: sprite[j].owner = 0;
4772: sprite[j].lotag = 1200;
4773: sprite[j].hitag = 0;
4774: }
4775:
4776: }
4777:
4778:
4779:
4780: if (netgame) {
4781: netshootgun(-1, 5);
4782: }
4783:
4784: }
4785:
4786:
4787: if ((hitsprite >= 0) && (sprite[hitsprite].statnum < MAXSTATUS)) {
4788: switch (sprite[hitsprite].picnum) {
4789: case VASEA:
4790: case VASEB:
4791: case VASEC:
4792: case STAINGLASS1:
4793: case STAINGLASS2:
4794: case STAINGLASS3:
4795: case STAINGLASS4:
4796: case STAINGLASS5:
4797: case STAINGLASS6:
4798: case STAINGLASS7:
4799: case STAINGLASS8:
4800: case STAINGLASS9:
4801: newstatus(hitsprite, BROKENVASE);
4802: break;
4803: case GRONHAL:
4804: case GRONHALATTACK:
4805: case GRONHALPAIN:
4806: case GRONMU:
4807: case GRONMUATTACK:
4808: case GRONMUPAIN:
4809: case GRONSW:
4810: case GRONSWATTACK:
4811: case GRONSWPAIN:
4812:
4813:
4814: case KOBOLD:
4815: case KOBOLDATTACK:
4816: case DEVILSTAND:
4817: case DEVIL:
4818: case DEVILATTACK:
4819: case SKELETON:
4820: case SKELETONATTACK:
4821: case IMP:
4822: case IMPATTACK:
4823: // case IMPPAIN:
4824:
4825: case MINOTAUR:
4826: case MINOTAURATTACK:
4827: case MINOTAURPAIN:
4828: case FISH:
4829: case RAT:
4830: case WILLOW:
4831: case DEMON:
4832: case GUARDIAN:
4833: case GUARDIANATTACK:
4834: case KURTSTAND:
4835: case KURTKNEE:
4836: case KURTAT:
4837: case KURTPUNCH:
4838: case KURTREADY:
4839: case NEWGUYSTAND:
4840: case NEWGUYKNEE:
4841: case NEWGUY:
4842: case NEWGUYCAST:
4843: case NEWGUYBOW:
4844: case NEWGUYMACE:
4845: case NEWGUYPUNCH:
4846:
4847: case GONZOCSW:
4848: case GONZOCSWAT:
4849: case GONZOGSW:
4850: case GONZOGSWAT:
4851: case GONZOGHM:
4852: case GONZOGHMAT:
4853: case GONZOGSH:
4854: case GONZOGSHAT:
4855: case KATIE:
4856: case KATIEAT:
4857:
4858: if (netgame) {
4859: netshootgun(hitsprite, currweapon);
4860: break;
4861: }
4862:
4863: sprite[hitsprite].hitag -= (krand() & 30) + 15;
4864: if (sprite[hitsprite].hitag <= 0) {
4865: newstatus(hitsprite, DIE);
4866: if (sprite[hitsprite].picnum == RAT)
4867: chunksofmeat(plr, hitsprite, hitx, hity, hitz, hitsect, daang);
4868: }
4869: else {
4870: sprite[hitsprite].ang = (getangle(plr->x - sprite[hitsprite].x, plr->y - sprite[hitsprite].y) & 2047);
4871: newstatus(hitsprite, PAIN);
4872: }
4873: break;
4874: // SHATTER FROZEN CRITTER
4875: case GRONHALDIE:
4876: case GRONMUDIE:
4877: case GRONSWDIE:
4878: case KOBOLDDIE:
4879: case DEVILDIE:
4880: case SKELETONDIE:
4881: case IMPDIE:
4882: case MINOTAURDIE:
4883: case KATIEPAIN:
4884: if (sprite[hitsprite].pal == 6) {
4885: // JSA_NEW
4886: SND_PlaySound(S_SOCK1 + (rand() % 4), 0, 0, 0, 0);
4887: playsound_loc(S_FREEZEDIE, hitx, hity);
4888: for (k = 0; k < 32; k++)
4889: icecubes(hitsprite, hitx, hity, hitz, hitsprite);
4890: deletesprite((short) hitsprite);
4891: }
4892: } // switch
4893: }
4894: break;
4895:
4896: case 6: // MEDUSA
4897: for (i = 0; i < MAXSPRITES; i++) {
4898: // cansee
4899: if (i != plr->spritenum)
4900: if (sprite[i].picnum == KOBOLD
4901: || sprite[i].picnum == IMP
4902: || sprite[i].picnum == MINOTAUR
4903: || sprite[i].picnum == SKELETON
4904: || sprite[i].picnum == GRONHAL
4905: || sprite[i].picnum == GRONMU
4906: || sprite[i].picnum == GRONSW
4907: || sprite[i].picnum == GONZOCSW
4908: || sprite[i].picnum == GONZOGSW
4909: || sprite[i].picnum == GONZOGHM
4910: || sprite[i].picnum == GONZOGSH
4911: || sprite[i].picnum == KURTSTAND
4912: || sprite[i].picnum == KURTKNEE
4913: || sprite[i].picnum == KURTAT
4914: || sprite[i].picnum == KURTPUNCH
4915: || sprite[i].picnum == KURTREADY
4916: || sprite[i].picnum == NEWGUYSTAND
4917: || sprite[i].picnum == NEWGUYKNEE
4918: || sprite[i].picnum == NEWGUY
4919: || sprite[i].picnum == NEWGUYCAST
4920: || sprite[i].picnum == NEWGUYBOW
4921: || sprite[i].picnum == NEWGUYMACE
4922: || sprite[i].picnum == NEWGUYPUNCH)
4923: if (cansee(plr->x, plr->y, plr->z, plr->sector,
4924: sprite[i].x, sprite[i].y,
4925: sprite[i].z - (tilesizy[sprite[i].picnum] << 7),
4926: sprite[i].sectnum) == 1) {
4927: if (checkmedusadist(i, plr->x, plr->y, plr->z, plr->lvl))
4928: medusa(i);
4929: }
4930: }
4931: break;
4932: case 7: // KNOCKSPELL
4933:
4934: daang2 = (daang + 2048) & 2047;
4935: daz2 = (100 - plr->horiz) * 2000;
4936:
4937: hitscan(plr->x, plr->y, plr->z, plr->sector, // Start position
4938: sintable[(daang2 + 2560) & 2047], // X vector of 3D ang
4939: sintable[(daang2 + 2048) & 2047], // Y vector of 3D ang
4940: daz2, // Z vector of 3D ang
4941: &hitsect, &hitwall, &hitsprite, &hitx, &hity, &hitz);
4942:
4943: if (hitsect < 0 && hitsprite < 0 || hitwall >= 0) {
4944:
4945: neartag(hitx, hity, hitz, hitsect, daang,
4946: &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1024, 3);
4947:
4948: if (neartagsector >= 0) {
4949: if (sector[neartagsector].lotag >= 60 &&
4950: sector[neartagsector].lotag <= 69) {
4951: sector[neartagsector].lotag = 6;
4952: sector[neartagsector].hitag = 0;
4953: }
4954: if (sector[neartagsector].lotag >= 70 &&
4955: sector[neartagsector].lotag <= 79) {
4956: sector[neartagsector].lotag = 7;
4957: sector[neartagsector].hitag = 0;
4958: }
4959: operatesector(neartagsector);
4960: }
4961:
4962: }
4963: break;
4964: case 10: // throw a pike axe
4965: if (currweaponframe == PIKEATTACK1 + 4
4966: || currweaponframe == ZPIKEATTACK + 4) {
4967: if (currweaponanim == 8 && currweapontics == 10) {
4968:
4969: if (netgame) {
4970: netshootgun(-1, 15);
4971: }
4972:
4973: throwpikecnt=(throwpikecnt+1)%THROWPIKELIMIT;
4974: if (throwpikesprite[throwpikecnt] != -1) {
4975: deletesprite((short) throwpikesprite[throwpikecnt]);
4976: throwpikesprite[throwpikecnt]=-1;
4977: }
4978:
4979: if (plr->weapon[currweapon] == 3) {
4980: j = insertsprite(plr->sector, MISSILE);
4981: throwpikesprite[throwpikecnt]=j;
4982: sprite[j].x = plr->x;
4983: sprite[j].y = plr->y;
4984: sprite[j].z = plr->z + (24 << 8);
4985: sprite[j].cstat = 21;
4986: sprite[j].picnum = THROWPIKE;
4987: sprite[j].ang = ((daang + 2048 + 96) - 512) & 2047;
4988: sprite[j].xrepeat = 24;
4989: sprite[j].yrepeat = 24;
4990: sprite[j].clipdist = 32;
4991: sprite[j].extra = daang;
4992: sprite[j].shade = -15;
4993: sprite[j].xvel = ((krand() & 256) - 128);
4994: sprite[j].yvel = ((krand() & 256) - 128);
4995: if (shootgunzvel != 0) {
4996: sprite[j].zvel = shootgunzvel;
4997: shootgunzvel = 0L;
4998: }
4999: else {
5000: sprite[j].zvel = ((100 - plr->horiz) << 4);
5001: }
5002: sprite[j].owner = 4096;
5003: sprite[j].lotag = 1024;
5004: sprite[j].hitag = 0;
5005: sprite[j].pal = 0;
5006: movesprite((short) j, (((long) sintable[(sprite[j].extra + 512) & 2047]) * synctics) << 3, (((long) sintable[sprite[j].extra]) * synctics) << 3, 0L, 4L << 8, 4L << 8, 0);
5007: setsprite((short) j, sprite[j].x, sprite[j].y, sprite[j].z);
5008: }
5009: else {
5010:
5011: throwpikecnt=(throwpikecnt+1)%THROWPIKELIMIT;
5012: if (throwpikesprite[throwpikecnt] != -1) {
5013: deletesprite((short) throwpikesprite[throwpikecnt]);
5014: throwpikesprite[throwpikecnt]=-1;
5015: }
5016:
5017: j = insertsprite(plr->sector, MISSILE);
5018: throwpikesprite[throwpikecnt]=j;
5019: sprite[j].x = plr->x;
5020: sprite[j].y = plr->y;
5021: sprite[j].z = plr->z + (24 << 8);
5022: sprite[j].cstat = 21;
5023: sprite[j].picnum = THROWPIKE;
5024: sprite[j].ang = ((plr->ang + 2048 + 96) - 512) & 2047;
5025: sprite[j].xrepeat = 24;
5026: sprite[j].yrepeat = 24;
5027: sprite[j].clipdist = 32;
5028: sprite[j].extra = plr->ang;
5029: sprite[j].shade = -15;
5030: sprite[j].xvel = ((krand() & 256) - 128);
5031: sprite[j].yvel = ((krand() & 256) - 128);
5032: sprite[j].zvel = ((100 - plr->horiz) << 4);
5033: sprite[j].owner = 4096;
5034: sprite[j].lotag = 1024;
5035: sprite[j].hitag = 0;
5036: sprite[j].pal = 0;
5037: }
5038:
5039: }
5040: }
5041: if (currweaponframe == PIKEATTACK2 + 4) {
5042: if (currweaponanim == 4 && currweapontics == 10) {
5043:
5044: throwpikecnt=(throwpikecnt+1)%THROWPIKELIMIT;
5045: if (throwpikesprite[throwpikecnt] != -1) {
5046: deletesprite((short) throwpikesprite[throwpikecnt]);
5047: throwpikesprite[throwpikecnt]=-1;
5048: }
5049:
5050: if (plr->weapon[currweapon] == 3) {
5051: #if 0
5052: for (i = 0; i < 3; i++) {
5053: #endif
5054: j = insertsprite(plr->sector, MISSILE);
5055: throwpikesprite[throwpikecnt]=j;
5056: sprite[j].x = plr->x;
5057: sprite[j].y = plr->y;
5058: sprite[j].z = plr->z + (24 << 8);
5059: sprite[j].cstat = 21;
5060: sprite[j].picnum = THROWPIKE;
5061: sprite[j].ang = daang;
5062: #if 0
5063: sprite[j].ang = ((plr->ang + 2048 + 96) - 512) & 2047;
5064: #endif
5065: sprite[j].xrepeat = 24;
5066: sprite[j].yrepeat = 24;
5067: sprite[j].clipdist = 32;
5068: sprite[j].extra = daang;
5069: #if 0
5070: switch (i) {
5071: case 0:
5072: sprite[j].extra = plr->ang;
5073: break;
5074: case 1:
5075: sprite[j].extra = (plr->ang - 64) & 2047;
5076: break;
5077: case 2:
5078: sprite[j].extra = (plr->ang + 64) & 2047;
5079: break;
5080: }
5081: #endif
5082: sprite[j].shade = -15;
5083: sprite[j].xvel = ((krand() & 256) - 128);
5084: sprite[j].yvel = ((krand() & 256) - 128);
5085: sprite[j].zvel = ((100 - plr->horiz) << 4);
5086: sprite[j].owner = 4096;
5087: sprite[j].lotag = 1024;
5088: sprite[j].hitag = 0;
5089: sprite[j].pal = 0;
5090: movesprite((short) j, (((long) sintable[(sprite[j].extra + 512) & 2047]) * synctics) << 3, (((long) sintable[sprite[j].extra]) * synctics) << 3, 0L, 4L << 8, 4L << 8, 0);
5091: setsprite((short) j, sprite[j].x, sprite[j].y, sprite[j].z);
5092: #if 0
5093: }
5094: #endif
5095: }
5096: else {
5097: j = insertsprite(plr->sector, MISSILE);
5098: throwpikesprite[throwpikecnt]=j;
5099: sprite[j].x = plr->x;
5100: sprite[j].y = plr->y;
5101: sprite[j].z = plr->z + (24 << 8);
5102: sprite[j].cstat = 21;
5103: sprite[j].picnum = THROWPIKE;
5104: sprite[j].ang = ((plr->ang + 2048 + 96) - 512) & 2047;
5105: sprite[j].xrepeat = 24;
5106: sprite[j].yrepeat = 24;
5107: sprite[j].clipdist = 32;
5108: sprite[j].extra = plr->ang;
5109: sprite[j].shade = -15;
5110: sprite[j].xvel = ((krand() & 256) - 128);
5111: sprite[j].yvel = ((krand() & 256) - 128);
5112: sprite[j].zvel = ((100 - plr->horiz) << 4);
5113: sprite[j].owner = 4096;
5114: sprite[j].lotag = 1024;
5115: sprite[j].hitag = 0;
5116: sprite[j].pal = 0;
5117: }
5118:
5119: }
5120: }
5121: break;
5122: case 2: // parabolic trajectory
5123:
5124: if (netgame) {
5125: netshootgun(-1, 12);
5126: }
5127:
5128: j = insertsprite(plr->sector, MISSILE);
5129: sprite[j].x = plr->x;
5130: sprite[j].y = plr->y;
5131: sprite[j].z = plr->z + (8 << 8) + ((krand() & 10) << 8);
5132: sprite[j].cstat = 0;
5133: sprite[j].picnum = PLASMA;
5134: sprite[j].shade = -32;
5135: sprite[j].pal = 0;
5136: sprite[j].xrepeat = 16;
5137: sprite[j].yrepeat = 16;
5138: sprite[j].ang = daang;
5139: sprite[j].xvel = (sintable[(daang + 2560) & 2047] >> 5);
5140: sprite[j].yvel = (sintable[(daang + 2048) & 2047] >> 5);
5141: if (shootgunzvel != 0) {
5142: sprite[j].zvel = shootgunzvel;
5143: shootgunzvel = 0L;
5144: }
5145: else {
5146: sprite[j].zvel = ((100 - plr->horiz) << 4);
5147: }
5148: sprite[j].owner = 4096;
5149: sprite[j].lotag = 256;
5150: sprite[j].hitag = 0;
5151: sprite[j].clipdist = 48;
5152:
5153: // movesprite
5154: // setsprite
5155: movesprite((short) j, (((long) sintable[(sprite[j].ang + 512) & 2047]) * synctics) << 3, (((long) sintable[sprite[j].ang]) * synctics) << 3, 0L, 4L << 8, 4L << 8, 0);
5156: setsprite((short) j, sprite[j].x, sprite[j].y, sprite[j].z);
5157:
5158: break;
5159: case 3:
5160:
5161: if (netgame) {
5162: netshootgun(-1, 13);
5163: }
5164:
5165: j = insertsprite(plr->sector, MISSILE);
5166: sprite[j].x = plr->x;
5167: sprite[j].y = plr->y;
5168: sprite[j].z = plr->z + (8 << 8);
5169: sprite[j].cstat = 0; // Hitscan does not hit other bullets
5170: sprite[j].picnum = MONSTERBALL;
5171: sprite[j].shade = -32;
5172: sprite[j].pal = 0;
5173: sprite[j].xrepeat = 64;
5174: sprite[j].yrepeat = 64;
5175: // sprite[j].ang=plr->ang;
5176: sprite[j].ang = daang;
5177: sprite[j].xvel = (sintable[(daang + 2560) & 2047] >> 7);
5178: sprite[j].yvel = (sintable[(daang + 2048) & 2047] >> 7);
5179: if (shootgunzvel != 0L) {
5180: sprite[j].zvel = shootgunzvel;
5181: shootgunzvel = 0L;
5182: }
5183: else {
5184: sprite[j].zvel = ((100 - plr->horiz) << 4);
5185: }
5186: sprite[j].owner = 4096;
5187: sprite[j].lotag = 256;
5188: sprite[j].hitag = 0;
5189: sprite[j].clipdist = 64;
5190: movesprite((short) j, (((long) sintable[(sprite[j].ang + 512) & 2047]) * synctics) << 3, (((long) sintable[sprite[j].ang]) * synctics) << 3, 0L, 4L << 8, 4L << 8, 0);
5191: setsprite((short) j, sprite[j].x, sprite[j].y, sprite[j].z);
5192:
5193:
5194: break;
5195: case 4:
5196:
5197: if (netgame) {
5198: netshootgun(-1, 14);
5199: }
5200: for (j=0 ; j < MAXSPRITES ; j++) {
5201: switch (sprite[j].picnum) {
5202: case KOBOLD:
5203: case KOBOLDATTACK:
5204: case DEVIL:
5205: case DEVILATTACK:
5206: case IMP:
5207: case IMPATTACK:
5208: case MINOTAUR:
5209: case MINOTAURATTACK:
5210: case SKELETON:
5211: case SKELETONATTACK:
5212: case GRONHAL:
5213: case GRONHALATTACK:
5214: case GRONMU:
5215: case GRONMUATTACK:
5216: case GRONSW:
5217: case GRONSWATTACK:
5218: case DEMON:
5219: case GUARDIAN:
5220: case GUARDIANATTACK:
5221: case WILLOW:
5222: case NEWGUYSTAND:
5223: case NEWGUYKNEE:
5224: case NEWGUY:
5225: case NEWGUYCAST:
5226: case NEWGUYBOW:
5227: case NEWGUYMACE:
5228: case NEWGUYPUNCH:
5229: case KURTSTAND:
5230: case KURTKNEE:
5231: case KURTAT:
5232: case KURTPUNCH:
5233: case KURTREADY:
5234: case GONZOCSW:
5235: case GONZOCSWAT:
5236: case GONZOCHMAT:
5237: case GONZOGSW:
5238: case GONZOGSWAT:
5239: case GONZOGHM:
5240: case GONZOGHMAT:
5241: case GONZOGSH:
5242: case GONZOGSHAT:
5243: if (cansee(plr->x, plr->y, plr->z, plr->sector,
5244: sprite[j].x, sprite[j].y,
5245: sprite[j].z - (tilesizy[sprite[j].picnum] << 7),
5246: sprite[j].sectnum) == 1) {
5247: if (sprite[j].owner != 4096) {
5248: nukespell(j);
5249: }
5250: }
5251: break;
5252: }
5253: }
5254: /*
5255: j=insertsprite(plr->sector,HEATSEEKER);
5256: sprite[j].x=plr->x;
5257: sprite[j].y=plr->y;
5258: sprite[j].z=plr->z+(8<<8);
5259: sprite[j].cstat=0; //Hitscan does not hit other bullets
5260: sprite[j].picnum=PLASMA;
5261: sprite[j].shade=-32;
5262: sprite[j].pal=0;
5263: sprite[j].xrepeat=16;
5264: sprite[j].yrepeat=16;
5265: sprite[j].ang=plr->ang;
5266: sprite[j].xvel=(sintable[(daang+2560)&2047]>>7);
5267: sprite[j].yvel=(sintable[(daang+2048)&2047]>>7);
5268: sprite[j].zvel=((100-plr->horiz)<<4);
5269: sprite[j].owner=4096;
5270: sprite[j].lotag=1024;
5271: sprite[j].hitag=0;
5272: sprite[j].clipdist=128;
5273:
5274: movesprite((short)j,(((long)sintable[(sprite[j].ang+512)&2047])*synctics)<<3,(((long)sintable[sprite[j].ang])*synctics)<<3,0L,4L<<8,4L<<8,0);
5275: setsprite((short)j,sprite[j].x,sprite[j].y,sprite[j].z);
5276:
5277: */
5278:
5279: break;
5280: }
5281:
5282:
5283: }
5284:
5285:
5286:
5287:
5288: void
5289: singleshot(short bstatus)
5290: {
5291:
5292: hasshot = 0;
5293: return;
5294: if (selectedgun != 1 && oldmousestatus == 0) {
5295: keystatus[keys[KEYFIRE]] = keystatus[0x9d] = 0;
5296: hasshot = 0;
5297: }
5298:
5299: }
5300:
5301: void
5302: potionpic(int currentpotion)
5303: {
5304:
5305: struct player *plr;
5306: int i;
5307: int tilenum;
5308:
5309: if (playerdie == 1) {
5310: return;
5311: }
5312:
5313: plr = &player[pyrn];
5314:
5315: if (netgame)
5316: return;
5317:
5318: if (svga == 1) {
5319: itemtoscreen(260L << 1, 387L, SPOTIONBACKPIC, 0, 0);
5320: itemtoscreen((260L << 1) - 4L, 380L, SPOTIONARROW + currentpotion, 0, 0);
5321: }
5322: else {
5323: itemtoscreen(260L, 161L, POTIONBACKPIC, 0, 0);
5324: itemtoscreen(258L, 157L, POTIONARROW + currentpotion, 0, 0);
5325: }
5326:
5327: for (i = 0; i < MAXPOTIONS; i++) {
5328: if (plr->potion[i] < 0)
5329: plr->potion[i] = 0;
5330: if (plr->potion[i] > 0) {
5331: switch (i) {
5332: case 0:
5333: if (svga == 1)
5334: tilenum = SFLASKBLUE;
5335: else
5336: tilenum = FLASKBLUE;
5337: break;
5338: case 1:
5339: if (svga == 1)
5340: tilenum = SFLASKGREEN;
5341: else
5342: tilenum = FLASKGREEN;
5343: break;
5344: case 2:
5345: if (svga == 1)
5346: tilenum = SFLASKOCHRE;
5347: else
5348: tilenum = FLASKOCHRE;
5349: break;
5350: case 3:
5351: if (svga == 1)
5352: tilenum = SFLASKRED;
5353: else
5354: tilenum = FLASKRED;
5355: break;
5356: case 4:
5357: if (svga == 1)
5358: tilenum = SFLASKTAN;
5359: else
5360: tilenum = FLASKTAN;
5361: break;
5362: }
5363:
5364: potiontilenum = tilenum;
5365:
5366: if (svga == 1)
5367: // overwritesprite((262<<1)+(i*20),406,potiontilenum,0,0,0);
5368: //
5369: itemtoscreen((long) ((262 << 1) + (i * 20)), 406L, potiontilenum, 0, 0);
5370: /* rotatesprite((long)((262<<1)+(i*20))<<16, 406L<<16, 65536L,
5371: * 0, potiontilenum, 0, 0, 8+16, 0L,0L,xdim-1,ydim-1); */
5372: else
5373: // overwritesprite((long)(262+(i*10)),169L,potiontilenum,0,0
5374: // ,0);
5375: itemtoscreen((long) (262 + (i * 10)), 169L, potiontilenum, 0, 0);
5376:
5377: itoa(plr->potion[i], potionbuf, 10);
5378:
5379: if (svga == 1)
5380: fancyfont((long) ((266 << 1) + (i * 20)), 394L, SPOTIONFONT - 26, potionbuf, 0);
5381: else
5382: fancyfont((long) (266 + (i * 10)), 164L, SMFONT - 26, potionbuf, 0);
5383:
5384: }
5385: else {
5386: if (svga == 1)
5387: // overwritesprite((262<<1)+(i*20),406,SFLASKBLACK,0,0,0);
5388: // itemtoscreen((long)((262<<1)+(i*10)),406L,SFLASKBLACK,0,0
5389: // ,0);
5390: rotatesprite((long) ((262 << 1) + (i * 20)) << 16,
5391: 406L << 16,
5392: 65536L,
5393: 0,
5394: SFLASKBLACK,
5395: 0,
5396: 0,
5397: 8 + 16,
5398: 0L, 0L, xdim - 1, ydim - 1);
5399:
5400: else
5401: // overwritesprite((long)(262+(i*10)),169L,FLASKBLACK,0,0,0)
5402: // ;
5403: itemtoscreen((long) (262 + (i * 10)), 169L, FLASKBLACK, 0, 0);
5404: }
5405: }
5406:
5407:
5408: }
5409:
5410:
5411: void
5412: usapotion(struct player * plr)
5413: {
5414: if (playerdie == 1) {
5415: return;
5416: }
5417:
5418: if (currentpotion == 0 && plr->health >= plr->maxhealth)
5419: return;
5420:
5421: if (currentpotion == 2 && poisoned == 0)
5422: return;
5423:
5424: if (plr->potion[currentpotion] <= 0)
5425: return;
5426: else
5427: plr->potion[currentpotion]--;
5428:
5429: switch (currentpotion) {
5430: case 0: // health potion
5431: if (plr->health + 25 > plr->maxhealth) {
5432: plr->health = plr->maxhealth;
5433: SND_PlaySound(S_DRINK, 0, 0, 0, 0);
5434: healthpic(0);
5435: }
5436: else {
5437: SND_PlaySound(S_DRINK, 0, 0, 0, 0);
5438: healthpic(25);
5439: }
5440: startblueflash(10);
5441: break;
5442: case 1: // strength
5443: strongtime = 3200;
5444: SND_PlaySound(S_DRINK, 0, 0, 0, 0);
5445: startblueflash(10);
5446: break;
5447: case 2: // anti venom
5448: SND_PlaySound(S_DRINK, 0, 0, 0, 0);
5449: poisoned = 0;
5450: poisontime = 0;
5451: startwhiteflash(10);
5452: strcpy(displaybuf, "poison cured");
5453: healthpic(0);
5454: displaytime = 360;
5455: break;
5456: case 3: // fire resist
5457: SND_PlaySound(S_DRINK, 0, 0, 0, 0);
5458: manatime = 3200;
5459: startwhiteflash(10);
5460: if (lavasnd != -1) {
5461: SND_StopLoop(lavasnd);
5462: lavasnd = -1;
5463: }
5464: armorpic(0);
5465: break;
5466: case 4: // invisi
5467: SND_PlaySound(S_DRINK, 0, 0, 0, 0);
5468: invisibletime = 3200;
5469: startgreenflash(10);
5470: break;
5471: }
5472:
5473: potionpic(currentpotion);
5474:
5475: }
5476:
5477: void
5478: orbpic(int currentorb)
5479: {
5480:
5481: int tilenum;
5482: int spellbookpage;
5483: struct player *plr;
5484: long dax,
5485: day;
5486:
5487: plr = &player[pyrn];
5488:
5489: if (playerdie == 1) {
5490: return;
5491: }
5492:
5493: if (plr->orbammo[currentorb] < 0)
5494: plr->orbammo[currentorb] = 0;
5495:
5496: itoa(plr->orbammo[currentorb], tempbuf, 10);
5497:
5498: if (svga == 1)
5499: spellbookpage = sspellbookanim[currentorb][8].daweaponframe;
5500: else
5501: spellbookpage = spellbookanim[currentorb][8].daweaponframe;
5502:
5503: if (svga == 1) {
5504: itemtoscreen(120L << 1, 372L, SSPELLBACK, 0, 0);
5505: spellbookframe = sspellbookanim[currentorb][8].daweaponframe;
5506: dax = sspellbookanim[currentorb][8].currx;
5507: day = sspellbookanim[currentorb][8].curry;
5508: itemtoscreen(dax << 1, day, spellbookframe, 0, 0);
5509: itoa(plr->orbammo[currentorb], tempbuf, 10);
5510: fancyfont(126L << 1, 439L, SSCOREFONT - 26, tempbuf, 0);
5511: }
5512: else {
5513: itemtoscreen(122L, 155L, SPELLBOOKBACK, 0, 0);
5514: itemtoscreen(121L, 161L, spellbookpage, 0, 0);
5515: fancyfont(126L, 181L, SCOREFONT - 26, tempbuf, 0);
5516: }
5517:
5518: }
5519:
5520: void
5521: healthpic(int hp)
5522: {
5523:
5524: int i,tilenum;
5525: struct player *plr;
5526:
5527: plr = &player[pyrn];
5528:
5529: if (playerdie == 1) {
5530: return;
5531: }
5532: if (godmode == 1) {
5533: plr->health = 200;
5534: if (svga == 0) {
5535: if (plr->screensize <= 320) {
5536: itemtoscreen(72L, 168L, HEALTHBACKPIC, 0, 0);
5537: fancyfont(74L, 170L, BGZERO - 26, healthbuf, 0);
5538: }
5539: }
5540: else if (svga == 1) {
5541: if (plr->screensize == 320) {
5542: itemtoscreen(74L << 1, 406L, SHEALTHBACK, 0, 0);
5543: fancyfont(76L << 1, 409L, SHEALTHFONT - 26, healthbuf, 0);
5544: }
5545: }
5546: return;
5547: }
5548: switch (difficulty) {
5549: case 1:
5550: hp >>= 1;
5551: break;
5552: case 3:
5553: hp <<= 1;
5554: break;
5555: }
5556: plr->health += hp;
5557:
5558: if (plr->health < 0) {
5559: plr->health = 0;
5560: }
5561:
5562: itoa(plr->health, healthbuf, 10);
5563:
5564: if (svga == 0) {
5565: if (plr->screensize <= 320) {
5566: #if 0
5567: if (poisoned == 1) {
5568: // overwritesprite(72,168,HEALTHBACKPIC,0,0,6);
5569: itemtoscreen(72L, 168L, HEALTHBACKPIC, 0, 6);
5570: fancyfont(74L, 170L, BGZERO - 26, healthbuf, 6);
5571: }
5572: else {
5573: #endif
5574: // overwritesprite(72,168,HEALTHBACKPIC,0,0,0);
5575: itemtoscreen(72L, 168L, HEALTHBACKPIC, 0, 0);
5576: fancyfont(74L, 170L, BGZERO - 26, healthbuf, 0);
5577: #if 0
5578: }
5579: #endif
5580: }
5581: }
5582: else if (svga == 1) {
5583: if (plr->screensize == 320) {
5584: #if 0
5585: if (poisoned == 1) {
5586: // overwritesprite(74<<1,406,SHEALTHBACK,0,0,6);
5587: itemtoscreen(74L << 1, 406L, SHEALTHBACK, 0, 6);
5588: fancyfont(76L << 1, 409L, SHEALTHFONT - 26, healthbuf, 6);
5589: }
5590: else {
5591: #endif
5592: // overwritesprite(74<<1,406,SHEALTHBACK,0,0,0);
5593: itemtoscreen(74L << 1, 406L, SHEALTHBACK, 0, 0);
5594: fancyfont(76L << 1, 409L, SHEALTHFONT - 26, healthbuf, 0);
5595: #if 0
5596: }
5597: #endif
5598: }
5599: }
5600:
5601:
5602: }
5603:
5604:
5605: void
5606: armorpic(int arm)
5607: {
5608:
5609: int tilenum;
5610: struct player *plr;
5611:
5612: plr = &player[pyrn];
5613:
5614: if (playerdie == 1) {
5615: return;
5616: }
5617:
5618: plr->armor += arm;
5619:
5620: if (plr->armor < 0) {
5621: plr->armor = 0;
5622: plr->armortype = 0;
5623: }
5624:
5625: itoa(plr->armor, armorbuf, 10);
5626:
5627: if (svga == 0) {
5628: if (plr->screensize <= 320) {
5629: // if (manatime > 0) {
5630: // itemtoscreen(197L, 168L, HEALTHBACKPIC, 0, 8);
5631: // fancyfont(201L, 170L, BGZERO - 26, armorbuf, 8);
5632: // }
5633: // else {
5634: itemtoscreen(197L, 168L, HEALTHBACKPIC, 0, 0);
5635: fancyfont(201L, 170L, BGZERO - 26, armorbuf, 0);
5636: // }
5637: }
5638: }
5639: else {
5640: if (plr->screensize == 320) {
5641: // if (manatime > 0) {
5642: // itemtoscreen(200L << 1, 406L, SHEALTHBACK, 0, 8);
5643: // fancyfont(204L << 1, 409L, SHEALTHFONT - 26, armorbuf, 8);
5644: // }
5645: // else {
5646: itemtoscreen(200L << 1, 406L, SHEALTHBACK, 0, 0);
5647: fancyfont(204L << 1, 409L, SHEALTHFONT - 26, armorbuf, 0);
5648: // }
5649: }
5650: }
5651:
5652:
5653: }
5654:
5655: void
5656: levelpic(void)
5657: {
5658:
5659: struct player *plr;
5660: int x,
5661: y;
5662: int tilenum;
5663: char temp[20];
5664: char temp2[20];
5665:
5666: plr = &player[pyrn];
5667:
5668: if (playerdie == 1) {
5669: return;
5670: }
5671:
5672: if (selectedgun == 6) {
5673: if (plr->ammo[6] < 0)
5674: plr->ammo[6] = 0;
5675: itoa(plr->ammo[6], temp, 10);
5676: strcpy(temp2, temp);
5677: if (svga == 0) {
5678: // overwritesprite(3,181,ARROWS,0,0,0);
5679: itemtoscreen(3L, 181L, ARROWS, 0, 0);
5680: fancyfont(42, 183, SCOREFONT - 26, temp2, 0);
5681: }
5682: else {
5683: // overwritesprite(3<<1,434,SARROWS,0,0,0);
5684: itemtoscreen(3L << 1, 434L, SARROWS, 0, 0);
5685: fancyfont(42 << 1, 439, SSCOREFONT - 26, temp2, 0);
5686: }
5687: }
5688: else if (selectedgun == 7 && plr->weapon[7] == 2) {
5689: if (plr->ammo[7] < 0)
5690: plr->ammo[7] = 0;
5691: itoa(plr->ammo[7], temp, 10);
5692: strcpy(temp2, temp);
5693: // need pike pic
5694: if (svga == 0) {
5695: // overwritesprite(3,181,PIKES,0,0,0);
5696: itemtoscreen(3L, 181L, PIKES, 0, 0);
5697: fancyfont(42, 183, SCOREFONT - 26, temp2, 0);
5698: }
5699: else {
5700: // overwritesprite(3<<1,434,SPIKES,0,0,0);
5701: itemtoscreen(3L << 1, 434L, SPIKES, 0, 0);
5702: fancyfont(42 << 1, 439, SSCOREFONT - 26, temp2, 0);
5703: }
5704: }
5705: else {
5706:
5707: if (svga == 0)
5708: tilenum = PLAYERLVL + (plr->lvl - 1);
5709: else
5710: tilenum = SPLAYERLVL + (plr->lvl - 1);
5711:
5712: if (svga == 0)
5713: // overwritesprite(3,181,tilenum,0,0,0);
5714: itemtoscreen(3L, 181L, tilenum, 0, 0);
5715: else
5716: // overwritesprite(3<<1,436,tilenum,0,0,0);
5717: itemtoscreen(3L << 1, 436L, tilenum, 0, 0);
5718:
5719: }
5720:
5721: }
5722:
5723:
5724: void
5725: score(int score)
5726: {
5727:
5728: int x,
5729: y;
5730: int tilenum;
5731: struct player *plr;
5732:
5733: plr = &player[pyrn];
5734:
5735: if (playerdie == 1) {
5736: return;
5737: }
5738:
5739: plr->score += score;
5740: expgained += score;
5741:
5742: tilenum = SCOREFONT - 26;
5743:
5744: itoa(plr->score, tempbuf, 10);
5745:
5746: if (svga == 1)
5747: // overwritesprite(6,394,SSCOREBACKPIC,0,0,0);
5748: itemtoscreen(6L, 394L, SSCOREBACKPIC, 0, 0);
5749: // itemtoscreen(6L,163L,SSCOREBACKPIC,0,0,0);
5750: else
5751: // overwritesprite(29,163,SCOREBACKPIC,0,0,0);
5752: itemtoscreen(29L, 163L, SCOREBACKPIC, 0, 0);
5753:
5754: strcpy(scorebuf, tempbuf);
5755:
5756: if (svga == 1) {
5757: if (plr->screensize == 320)
5758: fancyfont(60, 396 + 1, SSCOREFONT - 26, scorebuf, 0);
5759: }
5760: else {
5761: if (plr->screensize <= 320)
5762: fancyfont(30, 165, SCOREFONT - 26, scorebuf, 0);
5763: }
5764:
5765: goesupalevel(plr);
5766:
5767: }
5768:
5769: void
5770: goesupalevel(struct player * plr)
5771: {
5772: switch (plr->lvl) {
5773: case 0:
5774: case 1:
5775: if (plr->score > 9999) {
5776: strcpy(displaybuf, "thou art a warrior");
5777: displaytime = 360;
5778: plr->lvl = 2;
5779: plr->maxhealth = 120;
5780: levelpic();
5781: }
5782: break;
5783: case 2:
5784: if (plr->score > 19999) {
5785: strcpy(displaybuf, "thou art a swordsman");
5786: displaytime = 360;
5787: plr->lvl = 3;
5788: plr->maxhealth = 140;
5789: levelpic();
5790: }
5791: break;
5792: case 3:
5793: if (plr->score > 29999) {
5794: strcpy(displaybuf, "thou art a hero");
5795: displaytime = 360;
5796: plr->lvl = 4;
5797: plr->maxhealth = 160;
5798: levelpic();
5799: }
5800: break;
5801: case 4:
5802: if (plr->score > 39999) {
5803: strcpy(displaybuf, "thou art a champion");
5804: displaytime = 360;
5805: plr->lvl = 5;
5806: plr->maxhealth = 180;
5807: levelpic();
5808: }
5809: break;
5810: case 5:
5811: if (plr->score > 49999) {
5812: strcpy(displaybuf, "thou art a superhero");
5813: displaytime = 360;
5814: plr->lvl = 6;
5815: plr->maxhealth = 200;
5816: levelpic();
5817: }
5818: break;
5819: case 6:
5820: if (plr->score > 59999) {
5821: strcpy(displaybuf, "thou art a lord");
5822: displaytime = 360;
5823: plr->lvl = 7;
5824: levelpic();
5825: }
5826: }
5827: }
5828:
5829:
5830: int
5831: checkweapondist(short i, long x, long y, long z, char guntype)
5832: {
5833:
5834: int length;
5835:
5836: if (selectedgun == 0) {
5837: length = 1024;
5838: }
5839: else {
5840: switch (selectedgun) {
5841: case 1:
5842: length = 1024;
5843: break;
5844: case 2:
5845: case 3:
5846: case 4:
5847: case 5:
5848: length = 1536;
5849: break;
5850: case 6:
5851: length = 2048;
5852: break;
5853: case 7:
5854: length = 1024;
5855: break;
5856: case 8:
5857: case 9:
5858: length = 2048;
5859: break;
5860: }
5861: }
5862: if ((labs(x - sprite[i].x) + labs(y - sprite[i].y) < length) && (labs((z >> 8) - ((sprite[i].z >> 8) - (tilesizy[sprite[i].picnum] >> 1))) <= (length >> 3)))
5863: return (1);
5864: else
5865: return (0);
5866:
5867: }
5868:
5869:
5870: void
5871: updatepics(void)
5872: {
5873:
5874: score(0); // OK
5875: if (netgame != 0) {
5876: if (gametype >= 1)
5877: captureflagpic();
5878: else
5879: fragspic();
5880: }
5881: else {
5882: potionpic(currentpotion);// OK
5883: }
5884: levelpic(); // ok
5885: healthpic(0); // OK
5886: armorpic(0); // OK
5887: orbpic(currentorb);
5888: keyspic(); // OK
5889:
5890: }
5891:
5892: extern short teamscore[];
5893: extern short teaminplay[];
5894:
5895: struct capt {
5896: int x;
5897: int y;
5898: int palnum;
5899: };
5900:
5901: void
5902: captureflagpic(void)
5903: {
5904:
5905: int i;
5906:
5907: struct capt flag[4] = {{260, 161, 0},
5908: {286, 161, 10},
5909: {260, 176, 11},
5910: {286, 176, 12}};
5911:
5912: struct capt sflag[4] = {{260, 387, 0},
5913: {286, 387, 10},
5914: {260, 417, 11},
5915: {286, 417, 12}};
5916:
5917: if (svga == 1) {
5918: // overwritesprite(260<<1,387,SPOTIONBACKPIC,0,0,0);
5919: itemtoscreen(260L << 1, 387L, SPOTIONBACKPIC, 0, 0);
5920: }
5921: else {
5922: // overwritesprite(260,161,POTIONBACKPIC,0,0,0);
5923: itemtoscreen(260L, 161L, POTIONBACKPIC, 0, 0);
5924: }
5925:
5926: for (i = 0; i < 4; i++) {
5927: if (svga == 1) {
5928: if (teaminplay[i]) {
5929: overwritesprite((sflag[i].x << 1) + 6, sflag[i].y + 8, STHEFLAG, 0, 0, sflag[i].palnum);
5930: itoa(teamscore[i], tempbuf, 10);
5931: fancyfont((sflag[i].x << 1) + 16, sflag[i].y + 16, SPOTIONFONT - 26, tempbuf, 0);
5932: }
5933: }
5934: else {
5935: if (teaminplay[i]) {
5936: rotatesprite((flag[i].x+3) << 16, (flag[i].y+3) << 16,
5937: 65536L, 0, THEFLAG, 0, flag[i].palnum, 8 + 16,
5938: 0L, 0L, xdim - 1L, ydim - 1L);
5939: // overwritesprite(flag[i].x + 3, flag[i].y + 3, THEFLAG, 0, 0, flag[i].palnum);
5940: itoa(teamscore[i], tempbuf, 10);
5941: fancyfont(flag[i].x + 6, flag[i].y + 6, SMFONT - 26,
5942: tempbuf, 0);
5943: }
5944: }
5945: }
5946: }
5947:
5948: void
5949: fragspic(void)
5950: {
5951:
5952: struct player *plr;
5953:
5954: plr = &player[pyrn];
5955:
5956: if (svga == 1) {
5957: if (plr->screensize == 320) {
5958: // overwritesprite(260<<1,387,SPOTIONBACKPIC,0,0,0);
5959: itemtoscreen(260L << 1, 387L, SPOTIONBACKPIC, 0, 0);
5960: itoa(teamscore[pyrn], tempbuf, 10);
5961: fancyfont((260 << 1) + 10, 387 + 10, SHEALTHFONT - 26, tempbuf, 0);
5962: }
5963: }
5964: else {
5965: if (plr->screensize <= 320) {
5966: // overwritesprite(260,161,POTIONBACKPIC,0,0,0);
5967: itemtoscreen(260L, 161L, POTIONBACKPIC, 0, 0);
5968: itoa(teamscore[pyrn], tempbuf, 10);
5969: fancyfont(260 + 15, 161 + 5, BGZERO - 26, tempbuf, 0);
5970: }
5971: }
5972:
5973: }
5974:
5975:
5976: void
5977: keyspic(void)
5978: {
5979:
5980: struct player *plr;
5981:
5982: plr = &player[pyrn];
5983:
5984: if (svga == 1) {
5985: if (plr->treasure[14] == 1)
5986: // overwritesprite(242<<1,387,SKEYBRASS,0,0,0);
5987: itemtoscreen(242L << 1, 387L, SKEYBRASS, 0, 0);
5988: else
5989: // overwritesprite(242<<1,387,SKEYBLANK,0,0,0);
5990: itemtoscreen(242L << 1, 387L, SKEYBLANK, 0, 0);
5991:
5992: if (plr->treasure[15] == 1)
5993: // overwritesprite(242<<1,408,SKEYBLACK,0,0,0);
5994: itemtoscreen(242L << 1, 408L, SKEYBLACK, 0, 0);
5995: else
5996: // overwritesprite(242<<1,408,SKEYBLANK,0,0,0);
5997: itemtoscreen(242 << 1, 408, SKEYBLANK, 0, 0);
5998:
5999: if (plr->treasure[16] == 1)
6000: // overwritesprite(242<<1,430,SKEYGLASS,0,0,0);
6001: itemtoscreen(242L << 1, 430L, SKEYGLASS, 0, 0);
6002: else
6003: // overwritesprite(242<<1,430,SKEYBLANK,0,0,0);
6004: itemtoscreen(242L << 1, 430L, SKEYBLANK, 0, 0);
6005:
6006: if (plr->treasure[17] == 1)
6007: // overwritesprite(242<<1,452,SKEYIVORY,0,0,0);
6008: itemtoscreen(242L << 1, 452L, SKEYIVORY, 0, 0);
6009: else
6010: // overwritesprite(242<<1,452,SKEYBLANK,0,0,0);
6011: itemtoscreen(242L << 1, 452L, SKEYBLANK, 0, 0);
6012: }
6013: else {
6014: if (plr->treasure[14] == 1)
6015: // overwritesprite(242,160,KEYBRASS,0,0,0);
6016: itemtoscreen(242L, 160L, KEYBRASS, 0, 0);
6017: else
6018: // overwritesprite(242,160,KEYBLANK,0,0,0);
6019: itemtoscreen(242L, 160L, KEYBLANK, 0, 0);
6020:
6021: if (plr->treasure[15] == 1)
6022: // overwritesprite(242,169,KEYBLACK,0,0,0);
6023: itemtoscreen(242L, 169L, KEYBLACK, 0, 0);
6024: else
6025: // overwritesprite(242,169,KEYBLANK,0,0,0);
6026: itemtoscreen(242L, 169L, KEYBLANK, 0, 0);
6027:
6028: if (plr->treasure[16] == 1)
6029: // overwritesprite(242,178,KEYGLASS,0,0,0);
6030: itemtoscreen(242L, 178L, KEYGLASS, 0, 0);
6031: else
6032: // overwritesprite(242,178,KEYBLANK,0,0,0);
6033: itemtoscreen(242L, 178L, KEYBLANK, 0, 0);
6034:
6035: if (plr->treasure[17] == 1)
6036: // overwritesprite(242,187,KEYIVORY,0,0,0);
6037: itemtoscreen(242L, 187L, KEYIVORY, 0, 0);
6038: else
6039: // overwritesprite(242,187,KEYBLANK,0,0,0);
6040: itemtoscreen(242L, 187L, KEYBLANK, 0, 0);
6041: }
6042:
6043: }
6044:
6045:
6046: int
6047: adjustscore(int score)
6048: {
6049:
6050: float factor;
6051:
6052: factor = (krand() % 20) / 100;
6053:
6054: if (krand() % 100 > 50)
6055: return (score * (factor + 1));
6056: else
6057: return (score - (score * (factor)));
6058:
6059: }
6060:
6061: int
6062: lvlspellcheck(struct player * plr)
6063: {
6064:
6065: int legal = 0;
6066:
6067: legal = 1;
6068: #if 0
6069: switch (currentorb) {
6070: case 0:
6071: legal = 1;
6072: break;
6073: case 1:
6074: legal = 1;
6075: break;
6076: case 2:
6077: if (plr->lvl > 1) {
6078: legal = 1;
6079: }
6080: else {
6081: strcpy(displaybuf, "must attain 2nd level");
6082: displaytime = 360;
6083: }
6084: break;
6085: case 3:
6086: if (plr->lvl > 1) {
6087: legal = 1;
6088: }
6089: else {
6090: strcpy(displaybuf, "must attain 2nd level");
6091: displaytime = 360;
6092: }
6093: break;
6094: case 4:
6095: if (plr->lvl > 2) {
6096: legal = 1;
6097: }
6098: else {
6099: strcpy(displaybuf, "must attain 3rd level");
6100: displaytime = 360;
6101: }
6102: break;
6103: case 5:
6104: if (plr->lvl > 2) {
6105: legal = 1;
6106: }
6107: else {
6108: strcpy(displaybuf, "must attain 3rd level");
6109: displaytime = 360;
6110: }
6111: break;
6112: case 6:
6113: if (plr->lvl > 3) {
6114: legal = 1;
6115: }
6116: else {
6117: strcpy(displaybuf, "must attain 4th level");
6118: displaytime = 360;
6119: }
6120: break;
6121: case 7:
6122: if (plr->lvl > 4) {
6123: legal = 1;
6124: }
6125: else {
6126: strcpy(displaybuf, "must attain 5th level");
6127: displaytime = 360;
6128: }
6129: break;
6130: }
6131: #endif
6132: return (legal);
6133: }
6134:
6135: void
6136: gronmissile(int s)
6137: {
6138:
6139: struct player *plr;
6140: short k,
6141: j,
6142: daang;
6143: long discrim;
6144:
6145: plr = &player[pyrn];
6146:
6147: daang = (sprite[s].ang - 36) & 2047;
6148:
6149: for (k = 0; k < 10; k++) {
6150:
6151: daang = (daang + (k << 1)) & 2047;
6152:
6153: j = insertsprite(sprite[s].sectnum, MISSILE);
6154: sprite[j].x = sprite[s].x;
6155: sprite[j].y = sprite[s].y;
6156: sprite[j].z = sprite[s].z + (8 << 8) + ((krand() & 10) << 8);
6157: sprite[j].cstat = 0;
6158: sprite[j].picnum = PLASMA;
6159: sprite[j].shade = -32;
6160: sprite[j].pal = 0;
6161: sprite[j].xrepeat = 16;
6162: sprite[j].yrepeat = 16;
6163: sprite[j].ang = daang;
6164: sprite[j].xvel = (sintable[(daang + 2560) & 2047] >> 5);
6165: sprite[j].yvel = (sintable[(daang + 2048) & 2047] >> 5);
6166: discrim = ksqrt((plr->x - sprite[s].x) * (plr->x - sprite[s].x)
6167: + (plr->y - sprite[s].y) * (plr->y - sprite[s].y));
6168: if (discrim == 0)
6169: discrim = 1;
6170: sprite[j].zvel = (((plr->z + (8 << 8)) - sprite[s].z) << 7) / discrim;
6171: sprite[j].owner = s;
6172: sprite[j].lotag = 256;
6173: sprite[j].hitag = 0;
6174: sprite[j].clipdist = 48;
6175:
6176: }
6177:
6178: }
6179:
6180:
6181: void
6182: displayspelltext(void)
6183: {
6184: switch (currentorb) {
6185: case 0:
6186: strcpy(displaybuf, "scare spell");
6187: displaytime = 360;
6188: break;
6189: case 1:
6190: strcpy(displaybuf, "night vision spell");
6191: displaytime = 360;
6192: break;
6193: case 2:
6194: strcpy(displaybuf, "freeze spell");
6195: displaytime = 360;
6196: break;
6197: case 3:
6198: strcpy(displaybuf, "magic arrow spell");
6199: displaytime = 360;
6200: break;
6201: case 4:
6202: strcpy(displaybuf, "open door spell");
6203: displaytime = 360;
6204: break;
6205: case 5:
6206: strcpy(displaybuf, "fly spell");
6207: displaytime = 360;
6208: break;
6209: case 6:
6210: strcpy(displaybuf, "fireball spell");
6211: displaytime = 360;
6212: break;
6213: case 7:
6214: strcpy(displaybuf, "nuke spell");
6215: displaytime = 360;
6216: break;
6217: }
6218:
6219: }
6220:
6221:
6222: void
6223: painsound(long xplc, long yplc)
6224: {
6225: playsound_loc(S_BREATH1 + (rand() % 6), xplc, yplc);
6226: }
6227:
6228: #if 0
6229: void
6230: turntostone(short i)
6231: {
6232:
6233: switch (sprite[i].picnum) {
6234:
6235: case KOBOLD:
6236: case KOBOLDATTACK:
6237: case DEVIL:
6238: case DEVILATTACK:
6239: case IMP:
6240: case IMPATTACK:
6241: case MINOTAUR:
6242: case MINOTAURATTACK:
6243: case SKELETON:
6244: case SKELETONATTACK:
6245: case GRONHAL:
6246: case GRONHALATTACK:
6247: case GRONMU:
6248: case GRONMUATTACK:
6249: case GRONSW:
6250: case GRONSWATTACK:
6251: case DEMON:
6252: case GUARDIAN:
6253: case GUARDIANATTACK:
6254: case WILLOW:
6255: case NEWGUYSTAND:
6256: case NEWGUYKNEE:
6257: case NEWGUY:
6258: case NEWGUYCAST:
6259: case NEWGUYBOW:
6260: case NEWGUYMACE:
6261: case NEWGUYPUNCH:
6262:
6263: case KURTSTAND:
6264: case KURTKNEE:
6265: case KURTAT:
6266: case KURTPUNCH:
6267: case KURTREADY:
6268: case GONZOCSW:
6269: case GONZOCSWAT:
6270: case GONZOCHMAT:
6271: case GONZOGSW:
6272: case GONZOGSWAT:
6273: case GONZOGHM:
6274: case GONZOGHMAT:
6275: case GONZOGSH:
6276: case GONZOGSHAT:
6277: sprite[i].picnum++;
6278: sprite[i].pal = 8;
6279: sprite[i].shade = 15;
6280: changespritestat(i, 0);
6281: break;
6282: }
6283:
6284: }
6285: #endif
6286:
6287: int
6288: inView(struct player *plr,int i)
6289: {
6290: short a;
6291:
6292: a = getangle(sprite[i].x - plr->x, sprite[i].y - plr->y);
6293: if ((a < plr->ang && plr->ang - a < 256) ||
6294: (a >= plr->ang && ((plr->ang + a) & 2047) < 256)) {
6295: return(1);
6296: }
6297: return(0);
6298: }
6299:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.