|
|
1.1 root 1: /*
2: ==============================================================================
3:
4: insane
5:
6: ==============================================================================
7: */
8:
9: #include "g_local.h"
10: #include "m_insane.h"
11:
12:
13: static int sound_fist;
14: static int sound_shake;
15: static int sound_moan;
16: static int sound_scream[8];
17:
18: void insane_fist (edict_t *self)
19: {
20: gi.sound (self, CHAN_VOICE, sound_fist, 1, ATTN_IDLE, 0);
21: }
22:
23: void insane_shake (edict_t *self)
24: {
25: gi.sound (self, CHAN_VOICE, sound_shake, 1, ATTN_IDLE, 0);
26: }
27:
28: void insane_moan (edict_t *self)
29: {
30: gi.sound (self, CHAN_VOICE, sound_moan, 1, ATTN_IDLE, 0);
31: }
32:
33: void insane_scream (edict_t *self)
34: {
35: gi.sound (self, CHAN_VOICE, sound_scream[rand()%8], 1, ATTN_IDLE, 0);
36: }
37:
38:
39: void insane_stand (edict_t *self);
40: void insane_dead (edict_t *self);
41: void insane_cross (edict_t *self);
42: void insane_walk (edict_t *self);
43: void insane_run (edict_t *self);
44: void insane_checkdown (edict_t *self);
45: void insane_checkup (edict_t *self);
46: void insane_onground (edict_t *self);
47:
48:
49: mframe_t insane_frames_stand_normal [] =
50: {
51: ai_stand, 0, NULL,
52: ai_stand, 0, NULL,
53: ai_stand, 0, NULL,
54: ai_stand, 0, NULL,
55: ai_stand, 0, NULL,
56: ai_stand, 0, insane_checkdown
57: };
58: mmove_t insane_move_stand_normal = {FRAME_stand60, FRAME_stand65, insane_frames_stand_normal, insane_stand};
59:
60: mframe_t insane_frames_stand_insane [] =
61: {
62: ai_stand, 0, insane_shake,
63: ai_stand, 0, NULL,
64: ai_stand, 0, NULL,
65: ai_stand, 0, NULL,
66: ai_stand, 0, NULL,
67: ai_stand, 0, NULL,
68: ai_stand, 0, NULL,
69: ai_stand, 0, NULL,
70: ai_stand, 0, NULL,
71: ai_stand, 0, NULL,
72: ai_stand, 0, NULL,
73: ai_stand, 0, NULL,
74: ai_stand, 0, NULL,
75: ai_stand, 0, NULL,
76: ai_stand, 0, NULL,
77: ai_stand, 0, NULL,
78: ai_stand, 0, NULL,
79: ai_stand, 0, NULL,
80: ai_stand, 0, NULL,
81: ai_stand, 0, NULL,
82: ai_stand, 0, NULL,
83: ai_stand, 0, NULL,
84: ai_stand, 0, NULL,
85: ai_stand, 0, NULL,
86: ai_stand, 0, NULL,
87: ai_stand, 0, NULL,
88: ai_stand, 0, NULL,
89: ai_stand, 0, NULL,
90: ai_stand, 0, NULL,
91: ai_stand, 0, insane_checkdown
92: };
93: mmove_t insane_move_stand_insane = {FRAME_stand65, FRAME_stand94, insane_frames_stand_insane, insane_stand};
94:
95: mframe_t insane_frames_uptodown [] =
96: {
97: ai_move, 0, NULL,
98: ai_move, 0, NULL,
99: ai_move, 0, NULL,
100: ai_move, 0, NULL,
101: ai_move, 0, NULL,
102: ai_move, 0, NULL,
103: ai_move, 0, NULL,
104: ai_move, 0, insane_moan,
105: ai_move, 0, NULL,
106: ai_move, 0, NULL,
107:
108: ai_move, 0, NULL,
109: ai_move, 0, NULL,
110: ai_move, 0, NULL,
111: ai_move, 0, NULL,
112: ai_move, 0, NULL,
113: ai_move, 0, NULL,
114: ai_move, 0, NULL,
115: ai_move, 0, NULL,
116: ai_move, 0, NULL,
117: ai_move, 0, NULL,
118:
119: ai_move, 2.7, NULL,
120: ai_move, 4.1, NULL,
121: ai_move, 6, NULL,
122: ai_move, 7.6, NULL,
123: ai_move, 3.6, NULL,
124: ai_move, 0, NULL,
125: ai_move, 0, NULL,
126: ai_move, 0, insane_fist,
127: ai_move, 0, NULL,
128: ai_move, 0, NULL,
129:
130: ai_move, 0, NULL,
131: ai_move, 0, NULL,
132: ai_move, 0, NULL,
133: ai_move, 0, insane_fist,
134: ai_move, 0, NULL,
135: ai_move, 0, NULL,
136: ai_move, 0, NULL,
137: ai_move, 0, NULL,
138: ai_move, 0, NULL,
139: ai_move, 0, NULL
140: };
141: mmove_t insane_move_uptodown = {FRAME_stand1, FRAME_stand40, insane_frames_uptodown, insane_onground};
142:
143:
144: mframe_t insane_frames_downtoup [] =
145: {
146: ai_move, -0.7, NULL, // 41
147: ai_move, -1.2, NULL, // 42
148: ai_move, -1.5, NULL, // 43
149: ai_move, -4.5, NULL, // 44
150: ai_move, -3.5, NULL, // 45
151: ai_move, -0.2, NULL, // 46
152: ai_move, 0, NULL, // 47
153: ai_move, -1.3, NULL, // 48
154: ai_move, -3, NULL, // 49
155: ai_move, -2, NULL, // 50
156: ai_move, 0, NULL, // 51
157: ai_move, 0, NULL, // 52
158: ai_move, 0, NULL, // 53
159: ai_move, -3.3, NULL, // 54
160: ai_move, -1.6, NULL, // 55
161: ai_move, -0.3, NULL, // 56
162: ai_move, 0, NULL, // 57
163: ai_move, 0, NULL, // 58
164: ai_move, 0, NULL // 59
165: };
166: mmove_t insane_move_downtoup = {FRAME_stand41, FRAME_stand59, insane_frames_downtoup, insane_stand};
167:
168: mframe_t insane_frames_jumpdown [] =
169: {
170: ai_move, 0.2, NULL,
171: ai_move, 11.5, NULL,
172: ai_move, 5.1, NULL,
173: ai_move, 7.1, NULL,
174: ai_move, 0, NULL
175: };
176: mmove_t insane_move_jumpdown = {FRAME_stand96, FRAME_stand100, insane_frames_jumpdown, insane_onground};
177:
178:
179: mframe_t insane_frames_down [] =
180: {
181: ai_move, 0, NULL, // 100
182: ai_move, 0, NULL,
183: ai_move, 0, NULL,
184: ai_move, 0, NULL,
185: ai_move, 0, NULL,
186: ai_move, 0, NULL,
187: ai_move, 0, NULL,
188: ai_move, 0, NULL,
189: ai_move, 0, NULL,
190: ai_move, 0, NULL,
191: ai_move, 0, NULL, // 110
192: ai_move, -1.7, NULL,
193: ai_move, -1.6, NULL,
194: ai_move, 0, NULL,
195: ai_move, 0, NULL,
196: ai_move, 0, NULL,
197: ai_move, 0, insane_fist,
198: ai_move, 0, NULL,
199: ai_move, 0, NULL,
200: ai_move, 0, NULL,
201: ai_move, 0, NULL, // 120
202: ai_move, 0, NULL,
203: ai_move, 0, NULL,
204: ai_move, 0, NULL,
205: ai_move, 0, NULL,
206: ai_move, 0, NULL,
207: ai_move, 0, NULL,
208: ai_move, 0, NULL,
209: ai_move, 0, NULL,
210: ai_move, 0, NULL,
211: ai_move, 0, NULL, // 130
212: ai_move, 0, NULL,
213: ai_move, 0, NULL,
214: ai_move, 0, insane_moan,
215: ai_move, 0, NULL,
216: ai_move, 0, NULL,
217: ai_move, 0, NULL,
218: ai_move, 0, NULL,
219: ai_move, 0, NULL,
220: ai_move, 0, NULL,
221: ai_move, 0, NULL, // 140
222: ai_move, 0, NULL,
223: ai_move, 0, NULL,
224: ai_move, 0, NULL,
225: ai_move, 0, NULL,
226: ai_move, 0, NULL,
227: ai_move, 0, NULL,
228: ai_move, 0, NULL,
229: ai_move, 0, NULL,
230: ai_move, 0, NULL,
231: ai_move, 0, NULL, // 150
232: ai_move, 0.5, NULL,
233: ai_move, 0, NULL,
234: ai_move, -0.2, insane_scream,
235: ai_move, 0, NULL,
236: ai_move, 0.2, NULL,
237: ai_move, 0.4, NULL,
238: ai_move, 0.6, NULL,
239: ai_move, 0.8, NULL,
240: ai_move, 0.7, NULL,
241: ai_move, 0, insane_checkup // 160
242: };
243: mmove_t insane_move_down = {FRAME_stand100, FRAME_stand160, insane_frames_down, insane_onground};
244:
245: mframe_t insane_frames_walk_normal [] =
246: {
247: ai_walk, 0, insane_scream,
248: ai_walk, 2.5, NULL,
249: ai_walk, 3.5, NULL,
250: ai_walk, 1.7, NULL,
251: ai_walk, 2.3, NULL,
252: ai_walk, 2.4, NULL,
253: ai_walk, 2.2, NULL,
254: ai_walk, 4.2, NULL,
255: ai_walk, 5.6, NULL,
256: ai_walk, 3.3, NULL,
257: ai_walk, 2.4, NULL,
258: ai_walk, 0.9, NULL,
259: ai_walk, 0, NULL
260: };
261: mmove_t insane_move_walk_normal = {FRAME_walk27, FRAME_walk39, insane_frames_walk_normal, insane_walk};
262: mmove_t insane_move_run_normal = {FRAME_walk27, FRAME_walk39, insane_frames_walk_normal, insane_run};
263:
264: mframe_t insane_frames_walk_insane [] =
265: {
266: ai_walk, 0, insane_scream, // walk 1
267: ai_walk, 3.4, NULL, // walk 2
268: ai_walk, 3.6, NULL, // 3
269: ai_walk, 2.9, NULL, // 4
270: ai_walk, 2.2, NULL, // 5
271: ai_walk, 2.6, NULL, // 6
272: ai_walk, 0, NULL, // 7
273: ai_walk, 0.7, NULL, // 8
274: ai_walk, 4.8, NULL, // 9
275: ai_walk, 5.3, NULL, // 10
276: ai_walk, 1.1, NULL, // 11
277: ai_walk, 2, NULL, // 12
278: ai_walk, 0.5, NULL, // 13
279: ai_walk, 0, NULL, // 14
280: ai_walk, 0, NULL, // 15
281: ai_walk, 4.9, NULL, // 16
282: ai_walk, 6.7, NULL, // 17
283: ai_walk, 3.8, NULL, // 18
284: ai_walk, 2, NULL, // 19
285: ai_walk, 0.2, NULL, // 20
286: ai_walk, 0, NULL, // 21
287: ai_walk, 3.4, NULL, // 22
288: ai_walk, 6.4, NULL, // 23
289: ai_walk, 5, NULL, // 24
290: ai_walk, 1.8, NULL, // 25
291: ai_walk, 0, NULL // 26
292: };
293: mmove_t insane_move_walk_insane = {FRAME_walk1, FRAME_walk26, insane_frames_walk_insane, insane_walk};
294: mmove_t insane_move_run_insane = {FRAME_walk1, FRAME_walk26, insane_frames_walk_insane, insane_run};
295:
296: mframe_t insane_frames_stand_pain [] =
297: {
298: ai_move, 0, NULL,
299: ai_move, 0, NULL,
300: ai_move, 0, NULL,
301: ai_move, 0, NULL,
302: ai_move, 0, NULL,
303: ai_move, 0, NULL,
304: ai_move, 0, NULL,
305: ai_move, 0, NULL,
306: ai_move, 0, NULL,
307: ai_move, 0, NULL,
308: ai_move, 0, NULL
309: };
310: mmove_t insane_move_stand_pain = {FRAME_st_pain2, FRAME_st_pain12, insane_frames_stand_pain, insane_run};
311:
312: mframe_t insane_frames_stand_death [] =
313: {
314: ai_move, 0, NULL,
315: ai_move, 0, NULL,
316: ai_move, 0, NULL,
317: ai_move, 0, NULL,
318: ai_move, 0, NULL,
319: ai_move, 0, NULL,
320: ai_move, 0, NULL,
321: ai_move, 0, NULL,
322: ai_move, 0, NULL,
323: ai_move, 0, NULL,
324: ai_move, 0, NULL,
325: ai_move, 0, NULL,
326: ai_move, 0, NULL,
327: ai_move, 0, NULL,
328: ai_move, 0, NULL,
329: ai_move, 0, NULL,
330: ai_move, 0, NULL
331: };
332: mmove_t insane_move_stand_death = {FRAME_st_death2, FRAME_st_death18, insane_frames_stand_death, insane_dead};
333:
334: mframe_t insane_frames_crawl [] =
335: {
336: ai_walk, 0, insane_scream,
337: ai_walk, 1.5, NULL,
338: ai_walk, 2.1, NULL,
339: ai_walk, 3.6, NULL,
340: ai_walk, 2, NULL,
341: ai_walk, 0.9, NULL,
342: ai_walk, 3, NULL,
343: ai_walk, 3.4, NULL,
344: ai_walk, 2.4, NULL
345: };
346: mmove_t insane_move_crawl = {FRAME_crawl1, FRAME_crawl9, insane_frames_crawl, NULL};
347: mmove_t insane_move_runcrawl = {FRAME_crawl1, FRAME_crawl9, insane_frames_crawl, NULL};
348:
349: mframe_t insane_frames_crawl_pain [] =
350: {
351: ai_move, 0, NULL,
352: ai_move, 0, NULL,
353: ai_move, 0, NULL,
354: ai_move, 0, NULL,
355: ai_move, 0, NULL,
356: ai_move, 0, NULL,
357: ai_move, 0, NULL,
358: ai_move, 0, NULL,
359: ai_move, 0, NULL
360: };
361: mmove_t insane_move_crawl_pain = {FRAME_cr_pain2, FRAME_cr_pain10, insane_frames_crawl_pain, insane_run};
362:
363: mframe_t insane_frames_crawl_death [] =
364: {
365: ai_move, 0, NULL,
366: ai_move, 0, NULL,
367: ai_move, 0, NULL,
368: ai_move, 0, NULL,
369: ai_move, 0, NULL,
370: ai_move, 0, NULL,
371: ai_move, 0, NULL
372: };
373: mmove_t insane_move_crawl_death = {FRAME_cr_death10, FRAME_cr_death16, insane_frames_crawl_death, insane_dead};
374:
375: mframe_t insane_frames_cross [] =
376: {
377: ai_move, 0, insane_moan,
378: ai_move, 0, NULL,
379: ai_move, 0, NULL,
380: ai_move, 0, NULL,
381: ai_move, 0, NULL,
382: ai_move, 0, NULL,
383: ai_move, 0, NULL,
384: ai_move, 0, NULL,
385: ai_move, 0, NULL,
386: ai_move, 0, NULL,
387: ai_move, 0, NULL,
388: ai_move, 0, NULL,
389: ai_move, 0, NULL,
390: ai_move, 0, NULL,
391: ai_move, 0, NULL
392: };
393: mmove_t insane_move_cross = {FRAME_cross1, FRAME_cross15, insane_frames_cross, insane_cross};
394:
395: mframe_t insane_frames_struggle_cross [] =
396: {
397: ai_move, 0, insane_scream,
398: ai_move, 0, NULL,
399: ai_move, 0, NULL,
400: ai_move, 0, NULL,
401: ai_move, 0, NULL,
402: ai_move, 0, NULL,
403: ai_move, 0, NULL,
404: ai_move, 0, NULL,
405: ai_move, 0, NULL,
406: ai_move, 0, NULL,
407: ai_move, 0, NULL,
408: ai_move, 0, NULL,
409: ai_move, 0, NULL,
410: ai_move, 0, NULL,
411: ai_move, 0, NULL
412: };
413: mmove_t insane_move_struggle_cross = {FRAME_cross16, FRAME_cross30, insane_frames_struggle_cross, insane_cross};
414:
415: void insane_cross (edict_t *self)
416: {
417: if (random() < 0.8)
418: self->monsterinfo.currentmove = &insane_move_cross;
419: else
420: self->monsterinfo.currentmove = &insane_move_struggle_cross;
421: }
422:
423: void insane_walk (edict_t *self)
424: {
425: if ( self->spawnflags & 16 ) // Hold Ground?
426: if (self->s.frame == FRAME_cr_pain10)
427: {
428: self->monsterinfo.currentmove = &insane_move_down;
429: return;
430: }
431: if (self->spawnflags & 4)
432: self->monsterinfo.currentmove = &insane_move_crawl;
433: else
434: if (random() <= 0.5)
435: self->monsterinfo.currentmove = &insane_move_walk_normal;
436: else
437: self->monsterinfo.currentmove = &insane_move_walk_insane;
438: }
439:
440: void insane_run (edict_t *self)
441: {
442: if ( self->spawnflags & 16 ) // Hold Ground?
443: if (self->s.frame == FRAME_cr_pain10)
444: {
445: self->monsterinfo.currentmove = &insane_move_down;
446: return;
447: }
448: if (self->spawnflags & 4) // Crawling?
449: self->monsterinfo.currentmove = &insane_move_runcrawl;
450: else
451: if (random() <= 0.5) // Else, mix it up
452: self->monsterinfo.currentmove = &insane_move_run_normal;
453: else
454: self->monsterinfo.currentmove = &insane_move_run_insane;
455: }
456:
457:
458: void insane_pain (edict_t *self, edict_t *other, float kick, int damage)
459: {
460: int l,r;
461:
462: // if (self->health < (self->max_health / 2))
463: // self->s.skinnum = 1;
464:
465: if (level.time < self->pain_debounce_time)
466: return;
467:
468: self->pain_debounce_time = level.time + 3;
469:
470: r = 1 + (rand()&1);
471: if (self->health < 25)
472: l = 25;
473: else if (self->health < 50)
474: l = 50;
475: else if (self->health < 75)
476: l = 75;
477: else
478: l = 100;
479: gi.sound (self, CHAN_VOICE, gi.soundindex (va("player/male/pain%i_%i.wav", l, r)), 1, ATTN_IDLE, 0);
480:
481: if (skill->value == 3)
482: return; // no pain anims in nightmare
483:
484: // Don't go into pain frames if crucified.
485: if (self->spawnflags & 8)
486: {
487: self->monsterinfo.currentmove = &insane_move_struggle_cross;
488: return;
489: }
490:
491: if ( ((self->s.frame >= FRAME_crawl1) && (self->s.frame <= FRAME_crawl9)) || ((self->s.frame >= FRAME_stand99) && (self->s.frame <= FRAME_stand160)) )
492: {
493: self->monsterinfo.currentmove = &insane_move_crawl_pain;
494: }
495: else
496: self->monsterinfo.currentmove = &insane_move_stand_pain;
497:
498: }
499:
500: void insane_onground (edict_t *self)
501: {
502: self->monsterinfo.currentmove = &insane_move_down;
503: }
504:
505: void insane_checkdown (edict_t *self)
506: {
507: // if ( (self->s.frame == FRAME_stand94) || (self->s.frame == FRAME_stand65) )
508: if (self->spawnflags & 32) // Always stand
509: return;
510: if (random() < 0.3)
511: if (random() < 0.5)
512: self->monsterinfo.currentmove = &insane_move_uptodown;
513: else
514: self->monsterinfo.currentmove = &insane_move_jumpdown;
515: }
516:
517: void insane_checkup (edict_t *self)
518: {
519: // If Hold_Ground and Crawl are set
520: if ( (self->spawnflags & 4) && (self->spawnflags & 16) )
521: return;
522: if (random() < 0.5)
523: self->monsterinfo.currentmove = &insane_move_downtoup;
524:
525: }
526:
527: void insane_stand (edict_t *self)
528: {
529: if (self->spawnflags & 8) // If crucified
530: {
531: self->monsterinfo.currentmove = &insane_move_cross;
532: self->monsterinfo.aiflags |= AI_STAND_GROUND;
533: }
534: // If Hold_Ground and Crawl are set
535: else if ( (self->spawnflags & 4) && (self->spawnflags & 16) )
536: self->monsterinfo.currentmove = &insane_move_down;
537: else
538: if (random() < 0.5)
539: self->monsterinfo.currentmove = &insane_move_stand_normal;
540: else
541: self->monsterinfo.currentmove = &insane_move_stand_insane;
542: }
543:
544: void insane_dead (edict_t *self)
545: {
546: if (self->spawnflags & 8)
547: {
548: self->flags |= FL_FLY;
549: }
550: else
551: {
552: VectorSet (self->mins, -16, -16, -24);
553: VectorSet (self->maxs, 16, 16, -8);
554: self->movetype = MOVETYPE_TOSS;
555: }
556: self->svflags |= SVF_DEADMONSTER;
557: self->nextthink = 0;
558: gi.linkentity (self);
559: }
560:
561:
562: void insane_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
563: {
564: int n;
565:
566: if (self->health <= self->gib_health)
567: {
568: gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_IDLE, 0);
569: for (n= 0; n < 2; n++)
570: ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
571: for (n= 0; n < 4; n++)
572: ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
573: ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
574: self->deadflag = DEAD_DEAD;
575: return;
576: }
577:
578: if (self->deadflag == DEAD_DEAD)
579: return;
580:
581: gi.sound (self, CHAN_VOICE, gi.soundindex(va("player/male/death%i.wav", (rand()%4)+1)), 1, ATTN_IDLE, 0);
582:
583: self->deadflag = DEAD_DEAD;
584: self->takedamage = DAMAGE_YES;
585:
586: if (self->spawnflags & 8)
587: {
588: insane_dead (self);
589: }
590: else
591: {
592: if ( ((self->s.frame >= FRAME_crawl1) && (self->s.frame <= FRAME_crawl9)) || ((self->s.frame >= FRAME_stand99) && (self->s.frame <= FRAME_stand160)) )
593: self->monsterinfo.currentmove = &insane_move_crawl_death;
594: else
595: self->monsterinfo.currentmove = &insane_move_stand_death;
596: }
597: }
598:
599:
600: /*QUAKED misc_insane (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn CRAWL CRUCIFIED STAND_GROUND ALWAYS_STAND
601: */
602: void SP_misc_insane (edict_t *self)
603: {
604: // static int skin = 0; //@@
605:
606: if (deathmatch->value)
607: {
608: G_FreeEdict (self);
609: return;
610: }
611:
612: sound_fist = gi.soundindex ("insane/insane11.wav");
613: sound_shake = gi.soundindex ("insane/insane5.wav");
614: sound_moan = gi.soundindex ("insane/insane7.wav");
615: sound_scream[0] = gi.soundindex ("insane/insane1.wav");
616: sound_scream[1] = gi.soundindex ("insane/insane2.wav");
617: sound_scream[2] = gi.soundindex ("insane/insane3.wav");
618: sound_scream[3] = gi.soundindex ("insane/insane4.wav");
619: sound_scream[4] = gi.soundindex ("insane/insane6.wav");
620: sound_scream[5] = gi.soundindex ("insane/insane8.wav");
621: sound_scream[6] = gi.soundindex ("insane/insane9.wav");
622: sound_scream[7] = gi.soundindex ("insane/insane10.wav");
623:
624: self->movetype = MOVETYPE_STEP;
625: self->solid = SOLID_BBOX;
626: self->s.modelindex = gi.modelindex("models/monsters/insane/tris.md2");
627:
628: VectorSet (self->mins, -16, -16, -24);
629: VectorSet (self->maxs, 16, 16, 32);
630:
631: self->health = 100;
632: self->gib_health = -50;
633: self->mass = 300;
634:
635: self->pain = insane_pain;
636: self->die = insane_die;
637:
638: self->monsterinfo.stand = insane_stand;
639: self->monsterinfo.walk = insane_walk;
640: self->monsterinfo.run = insane_run;
641: self->monsterinfo.dodge = NULL;
642: self->monsterinfo.attack = NULL;
643: self->monsterinfo.melee = NULL;
644: self->monsterinfo.sight = NULL;
645: self->monsterinfo.aiflags |= AI_GOOD_GUY;
646:
647: //@@
648: // self->s.skinnum = skin;
649: // skin++;
650: // if (skin > 12)
651: // skin = 0;
652:
653: gi.linkentity (self);
654:
655: if (self->spawnflags & 16) // Stand Ground
656: self->monsterinfo.aiflags |= AI_STAND_GROUND;
657:
658: self->monsterinfo.currentmove = &insane_move_stand_normal;
659:
660: self->monsterinfo.scale = MODEL_SCALE;
661:
662: if (self->spawnflags & 8) // Crucified ?
663: {
664: VectorSet (self->mins, -16, 0, 0);
665: VectorSet (self->maxs, 16, 8, 32);
666: self->flags |= FL_NO_KNOCKBACK;
667: flymonster_start (self);
668: }
669: else
670: {
671: walkmonster_start (self);
672: self->s.skinnum = rand()%3;
673: }
674: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.