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