|
|
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.