|
|
1.1 ! root 1: /* ! 2: ============================================================================== ! 3: ! 4: chick ! 5: ! 6: ============================================================================== ! 7: */ ! 8: ! 9: #include "g_local.h" ! 10: #include "m_chick.h" ! 11: ! 12: qboolean visible (edict_t *self, edict_t *other); ! 13: ! 14: void chick_stand (edict_t *self); ! 15: void chick_run (edict_t *self); ! 16: void chick_reslash(edict_t *self); ! 17: void chick_rerocket(edict_t *self); ! 18: void chick_attack1(edict_t *self); ! 19: ! 20: static int sound_missile_prelaunch; ! 21: static int sound_missile_launch; ! 22: static int sound_melee_swing; ! 23: static int sound_melee_hit; ! 24: static int sound_missile_reload; ! 25: static int sound_death1; ! 26: static int sound_death2; ! 27: static int sound_fall_down; ! 28: static int sound_idle1; ! 29: static int sound_idle2; ! 30: static int sound_pain1; ! 31: static int sound_pain2; ! 32: static int sound_pain3; ! 33: static int sound_sight; ! 34: static int sound_search; ! 35: ! 36: ! 37: void ChickMoan (edict_t *self) ! 38: { ! 39: if (random() < 0.5) ! 40: gi.sound (self, CHAN_VOICE, sound_idle1, 1, ATTN_IDLE, 0); ! 41: else ! 42: gi.sound (self, CHAN_VOICE, sound_idle2, 1, ATTN_IDLE, 0); ! 43: } ! 44: ! 45: mframe_t chick_frames_fidget [] = ! 46: { ! 47: ai_stand, 0, NULL, ! 48: ai_stand, 0, NULL, ! 49: ai_stand, 0, NULL, ! 50: ai_stand, 0, NULL, ! 51: ai_stand, 0, NULL, ! 52: ai_stand, 0, NULL, ! 53: ai_stand, 0, NULL, ! 54: ai_stand, 0, NULL, ! 55: ai_stand, 0, ChickMoan, ! 56: ai_stand, 0, NULL, ! 57: ai_stand, 0, NULL, ! 58: ai_stand, 0, NULL, ! 59: ai_stand, 0, NULL, ! 60: ai_stand, 0, NULL, ! 61: ai_stand, 0, NULL, ! 62: ai_stand, 0, NULL, ! 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: }; ! 78: mmove_t chick_move_fidget = {FRAME_stand201, FRAME_stand230, chick_frames_fidget, chick_stand}; ! 79: ! 80: void chick_fidget (edict_t *self) ! 81: { ! 82: if (self->monsterinfo.aiflags & AI_STAND_GROUND) ! 83: return; ! 84: if (random() <= 0.3) ! 85: self->monsterinfo.currentmove = &chick_move_fidget; ! 86: } ! 87: ! 88: mframe_t chick_frames_stand [] = ! 89: { ! 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, NULL, ! 111: ai_stand, 0, NULL, ! 112: ai_stand, 0, NULL, ! 113: ai_stand, 0, NULL, ! 114: ai_stand, 0, NULL, ! 115: ai_stand, 0, NULL, ! 116: ai_stand, 0, NULL, ! 117: ai_stand, 0, NULL, ! 118: ai_stand, 0, NULL, ! 119: ai_stand, 0, chick_fidget, ! 120: ! 121: }; ! 122: mmove_t chick_move_stand = {FRAME_stand101, FRAME_stand130, chick_frames_stand, NULL}; ! 123: ! 124: void chick_stand (edict_t *self) ! 125: { ! 126: self->monsterinfo.currentmove = &chick_move_stand; ! 127: } ! 128: ! 129: mframe_t chick_frames_start_run [] = ! 130: { ! 131: ai_run, 1, NULL, ! 132: ai_run, 0, NULL, ! 133: ai_run, 0, NULL, ! 134: ai_run, -1, NULL, ! 135: ai_run, -1, NULL, ! 136: ai_run, 0, NULL, ! 137: ai_run, 1, NULL, ! 138: ai_run, 3, NULL, ! 139: ai_run, 6, NULL, ! 140: ai_run, 3, NULL ! 141: }; ! 142: mmove_t chick_move_start_run = {FRAME_walk01, FRAME_walk10, chick_frames_start_run, chick_run}; ! 143: ! 144: mframe_t chick_frames_run [] = ! 145: { ! 146: ai_run, 6, NULL, ! 147: ai_run, 8, NULL, ! 148: ai_run, 13, NULL, ! 149: ai_run, 5, NULL, ! 150: ai_run, 7, NULL, ! 151: ai_run, 4, NULL, ! 152: ai_run, 11, NULL, ! 153: ai_run, 5, NULL, ! 154: ai_run, 9, NULL, ! 155: ai_run, 7, NULL ! 156: ! 157: }; ! 158: ! 159: mmove_t chick_move_run = {FRAME_walk11, FRAME_walk20, chick_frames_run, NULL}; ! 160: ! 161: mframe_t chick_frames_walk [] = ! 162: { ! 163: ai_walk, 6, NULL, ! 164: ai_walk, 8, NULL, ! 165: ai_walk, 13, NULL, ! 166: ai_walk, 5, NULL, ! 167: ai_walk, 7, NULL, ! 168: ai_walk, 4, NULL, ! 169: ai_walk, 11, NULL, ! 170: ai_walk, 5, NULL, ! 171: ai_walk, 9, NULL, ! 172: ai_walk, 7, NULL ! 173: }; ! 174: ! 175: mmove_t chick_move_walk = {FRAME_walk11, FRAME_walk20, chick_frames_walk, NULL}; ! 176: ! 177: void chick_walk (edict_t *self) ! 178: { ! 179: self->monsterinfo.currentmove = &chick_move_walk; ! 180: } ! 181: ! 182: void chick_run (edict_t *self) ! 183: { ! 184: if (self->monsterinfo.aiflags & AI_STAND_GROUND) ! 185: { ! 186: self->monsterinfo.currentmove = &chick_move_stand; ! 187: return; ! 188: } ! 189: ! 190: if (self->monsterinfo.currentmove == &chick_move_walk || ! 191: self->monsterinfo.currentmove == &chick_move_start_run) ! 192: { ! 193: self->monsterinfo.currentmove = &chick_move_run; ! 194: } ! 195: else ! 196: { ! 197: self->monsterinfo.currentmove = &chick_move_start_run; ! 198: } ! 199: } ! 200: ! 201: mframe_t chick_frames_pain1 [] = ! 202: { ! 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: }; ! 209: mmove_t chick_move_pain1 = {FRAME_pain101, FRAME_pain105, chick_frames_pain1, chick_run}; ! 210: ! 211: mframe_t chick_frames_pain2 [] = ! 212: { ! 213: ai_move, 0, NULL, ! 214: ai_move, 0, NULL, ! 215: ai_move, 0, NULL, ! 216: ai_move, 0, NULL, ! 217: ai_move, 0, NULL ! 218: }; ! 219: mmove_t chick_move_pain2 = {FRAME_pain201, FRAME_pain205, chick_frames_pain2, chick_run}; ! 220: ! 221: mframe_t chick_frames_pain3 [] = ! 222: { ! 223: ai_move, 0, NULL, ! 224: ai_move, 0, NULL, ! 225: ai_move, -6, NULL, ! 226: ai_move, 3, NULL, ! 227: ai_move, 11, NULL, ! 228: ai_move, 3, NULL, ! 229: ai_move, 0, NULL, ! 230: ai_move, 0, NULL, ! 231: ai_move, 4, NULL, ! 232: ai_move, 1, NULL, ! 233: ai_move, 0, NULL, ! 234: ai_move, -3, NULL, ! 235: ai_move, -4, NULL, ! 236: ai_move, 5, NULL, ! 237: ai_move, 7, NULL, ! 238: ai_move, -2, NULL, ! 239: ai_move, 3, NULL, ! 240: ai_move, -5, NULL, ! 241: ai_move, -2, NULL, ! 242: ai_move, -8, NULL, ! 243: ai_move, 2, NULL ! 244: }; ! 245: mmove_t chick_move_pain3 = {FRAME_pain301, FRAME_pain321, chick_frames_pain3, chick_run}; ! 246: ! 247: void chick_pain (edict_t *self, edict_t *other, float kick, int damage) ! 248: { ! 249: float r; ! 250: ! 251: if (self->health < (self->max_health / 2)) ! 252: self->s.skinnum = 1; ! 253: ! 254: if (level.time < self->pain_debounce_time) ! 255: return; ! 256: ! 257: self->pain_debounce_time = level.time + 3; ! 258: ! 259: r = random(); ! 260: if (r < 0.33) ! 261: gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0); ! 262: else if (r < 0.66) ! 263: gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0); ! 264: else ! 265: gi.sound (self, CHAN_VOICE, sound_pain3, 1, ATTN_NORM, 0); ! 266: ! 267: if (damage <= 10) ! 268: self->monsterinfo.currentmove = &chick_move_pain1; ! 269: else if (damage <= 25) ! 270: self->monsterinfo.currentmove = &chick_move_pain2; ! 271: else ! 272: self->monsterinfo.currentmove = &chick_move_pain3; ! 273: } ! 274: ! 275: void chick_dead (edict_t *self) ! 276: { ! 277: VectorSet (self->mins, -16, -16, 0); ! 278: VectorSet (self->maxs, 16, 16, 16); ! 279: self->movetype = MOVETYPE_TOSS; ! 280: self->svflags |= SVF_DEADMONSTER; ! 281: self->nextthink = 0; ! 282: gi.linkentity (self); ! 283: } ! 284: ! 285: mframe_t chick_frames_death2 [] = ! 286: { ! 287: ai_move, -6, NULL, ! 288: ai_move, 0, NULL, ! 289: ai_move, -1, NULL, ! 290: ai_move, -5, NULL, ! 291: ai_move, 0, NULL, ! 292: ai_move, -1, NULL, ! 293: ai_move, -2, NULL, ! 294: ai_move, 1, NULL, ! 295: ai_move, 10, NULL, ! 296: ai_move, 2, NULL, ! 297: ai_move, 3, NULL, ! 298: ai_move, 1, NULL, ! 299: ai_move, 2, NULL, ! 300: ai_move, 0, NULL, ! 301: ai_move, 3, NULL, ! 302: ai_move, 3, NULL, ! 303: ai_move, 1, NULL, ! 304: ai_move, -3, NULL, ! 305: ai_move, -5, NULL, ! 306: ai_move, 4, NULL, ! 307: ai_move, 15, NULL, ! 308: ai_move, 14, NULL, ! 309: ai_move, 1, NULL ! 310: }; ! 311: mmove_t chick_move_death2 = {FRAME_death201, FRAME_death223, chick_frames_death2, chick_dead}; ! 312: ! 313: mframe_t chick_frames_death1 [] = ! 314: { ! 315: ai_move, 0, NULL, ! 316: ai_move, 0, NULL, ! 317: ai_move, -7, NULL, ! 318: ai_move, 4, NULL, ! 319: ai_move, 11, 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: ! 328: }; ! 329: mmove_t chick_move_death1 = {FRAME_death101, FRAME_death112, chick_frames_death1, chick_dead}; ! 330: ! 331: void chick_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point) ! 332: { ! 333: int n; ! 334: ! 335: // check for gib ! 336: if (self->health <= self->gib_health) ! 337: { ! 338: gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0); ! 339: for (n= 0; n < 2; n++) ! 340: ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC); ! 341: for (n= 0; n < 4; n++) ! 342: ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC); ! 343: ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC); ! 344: self->deadflag = DEAD_DEAD; ! 345: return; ! 346: } ! 347: ! 348: if (self->deadflag == DEAD_DEAD) ! 349: return; ! 350: ! 351: // regular death ! 352: self->deadflag = DEAD_DEAD; ! 353: self->takedamage = DAMAGE_YES; ! 354: ! 355: n = rand() % 2; ! 356: if (n == 0) ! 357: { ! 358: self->monsterinfo.currentmove = &chick_move_death1; ! 359: gi.sound (self, CHAN_VOICE, sound_death1, 1, ATTN_NORM, 0); ! 360: } ! 361: else ! 362: { ! 363: self->monsterinfo.currentmove = &chick_move_death2; ! 364: gi.sound (self, CHAN_VOICE, sound_death2, 1, ATTN_NORM, 0); ! 365: } ! 366: } ! 367: ! 368: ! 369: void chick_duck_down (edict_t *self) ! 370: { ! 371: if (self->monsterinfo.aiflags & AI_DUCKED) ! 372: return; ! 373: self->monsterinfo.aiflags |= AI_DUCKED; ! 374: self->maxs[2] -= 32; ! 375: self->takedamage = DAMAGE_YES; ! 376: self->monsterinfo.pausetime = level.time + 1; ! 377: gi.linkentity (self); ! 378: } ! 379: ! 380: void chick_duck_hold (edict_t *self) ! 381: { ! 382: if (level.time >= self->monsterinfo.pausetime) ! 383: self->monsterinfo.aiflags &= ~AI_HOLD_FRAME; ! 384: else ! 385: self->monsterinfo.aiflags |= AI_HOLD_FRAME; ! 386: } ! 387: ! 388: void chick_duck_up (edict_t *self) ! 389: { ! 390: self->monsterinfo.aiflags &= ~AI_DUCKED; ! 391: self->maxs[2] += 32; ! 392: self->takedamage = DAMAGE_AIM; ! 393: gi.linkentity (self); ! 394: } ! 395: ! 396: mframe_t chick_frames_duck [] = ! 397: { ! 398: ai_move, 0, chick_duck_down, ! 399: ai_move, 1, NULL, ! 400: ai_move, 4, chick_duck_hold, ! 401: ai_move, -4, NULL, ! 402: ai_move, -5, chick_duck_up, ! 403: ai_move, 3, NULL, ! 404: ai_move, 1, NULL ! 405: }; ! 406: mmove_t chick_move_duck = {FRAME_duck01, FRAME_duck07, chick_frames_duck, chick_run}; ! 407: ! 408: void chick_dodge (edict_t *self, edict_t *attacker, float eta) ! 409: { ! 410: if (random() > 0.25) ! 411: return; ! 412: ! 413: if (!self->enemy) ! 414: self->enemy = attacker; ! 415: ! 416: self->monsterinfo.currentmove = &chick_move_duck; ! 417: } ! 418: ! 419: void ChickSlash (edict_t *self) ! 420: { ! 421: vec3_t aim; ! 422: ! 423: VectorSet (aim, MELEE_DISTANCE, self->mins[0], 10); ! 424: gi.sound (self, CHAN_WEAPON, sound_melee_swing, 1, ATTN_NORM, 0); ! 425: fire_hit (self, aim, (10 + (rand() %6)), 100); ! 426: } ! 427: ! 428: ! 429: void ChickRocket (edict_t *self) ! 430: { ! 431: vec3_t forward, right; ! 432: vec3_t start; ! 433: vec3_t dir; ! 434: vec3_t vec; ! 435: qboolean tone = true; ! 436: ! 437: AngleVectors (self->s.angles, forward, right, NULL); ! 438: G_ProjectSource (self->s.origin, monster_flash_offset[MZ2_CHICK_ROCKET_1], forward, right, start); ! 439: ! 440: VectorCopy (self->enemy->s.origin, vec); ! 441: vec[2] += self->enemy->viewheight; ! 442: VectorSubtract (vec, start, dir); ! 443: VectorNormalize (dir); ! 444: ! 445: if (self->s.skinnum > 1) ! 446: monster_fire_heat (self, start, dir, 50, 500, MZ2_CHICK_ROCKET_1); ! 447: else ! 448: monster_fire_rocket (self, start, dir, 50, 500, MZ2_CHICK_ROCKET_1); ! 449: ! 450: } ! 451: ! 452: void Chick_PreAttack1 (edict_t *self) ! 453: { ! 454: gi.sound (self, CHAN_VOICE, sound_missile_prelaunch, 1, ATTN_NORM, 0); ! 455: } ! 456: ! 457: void ChickReload (edict_t *self) ! 458: { ! 459: gi.sound (self, CHAN_VOICE, sound_missile_reload, 1, ATTN_NORM, 0); ! 460: } ! 461: ! 462: ! 463: mframe_t chick_frames_start_attack1 [] = ! 464: { ! 465: ai_charge, 0, Chick_PreAttack1, ! 466: ai_charge, 0, NULL, ! 467: ai_charge, 0, NULL, ! 468: ai_charge, 4, NULL, ! 469: ai_charge, 0, NULL, ! 470: ai_charge, -3, NULL, ! 471: ai_charge, 3, NULL, ! 472: ai_charge, 5, NULL, ! 473: ai_charge, 7, NULL, ! 474: ai_charge, 0, NULL, ! 475: ai_charge, 0, NULL, ! 476: ai_charge, 0, NULL, ! 477: ai_charge, 0, chick_attack1 ! 478: }; ! 479: mmove_t chick_move_start_attack1 = {FRAME_attak101, FRAME_attak113, chick_frames_start_attack1, NULL}; ! 480: ! 481: ! 482: mframe_t chick_frames_attack1 [] = ! 483: { ! 484: ai_charge, 19, ChickRocket, ! 485: ai_charge, -6, NULL, ! 486: ai_charge, -5, NULL, ! 487: ai_charge, -2, NULL, ! 488: ai_charge, -7, NULL, ! 489: ai_charge, 0, NULL, ! 490: ai_charge, 1, NULL, ! 491: ai_charge, 10, ChickReload, ! 492: ai_charge, 4, NULL, ! 493: ai_charge, 5, NULL, ! 494: ai_charge, 6, NULL, ! 495: ai_charge, 6, NULL, ! 496: ai_charge, 4, NULL, ! 497: ai_charge, 3, chick_rerocket ! 498: ! 499: }; ! 500: mmove_t chick_move_attack1 = {FRAME_attak114, FRAME_attak127, chick_frames_attack1, NULL}; ! 501: ! 502: mframe_t chick_frames_end_attack1 [] = ! 503: { ! 504: ai_charge, -3, NULL, ! 505: ai_charge, 0, NULL, ! 506: ai_charge, -6, NULL, ! 507: ai_charge, -4, NULL, ! 508: ai_charge, -2, NULL ! 509: }; ! 510: mmove_t chick_move_end_attack1 = {FRAME_attak128, FRAME_attak132, chick_frames_end_attack1, chick_run}; ! 511: ! 512: void chick_rerocket(edict_t *self) ! 513: { ! 514: if (self->enemy->health > 0) ! 515: { ! 516: if (range (self, self->enemy) > RANGE_MELEE) ! 517: if ( visible (self, self->enemy) ) ! 518: if (random() <= 0.6) ! 519: { ! 520: self->monsterinfo.currentmove = &chick_move_attack1; ! 521: return; ! 522: } ! 523: } ! 524: self->monsterinfo.currentmove = &chick_move_end_attack1; ! 525: } ! 526: ! 527: void chick_attack1(edict_t *self) ! 528: { ! 529: self->monsterinfo.currentmove = &chick_move_attack1; ! 530: } ! 531: ! 532: mframe_t chick_frames_slash [] = ! 533: { ! 534: ai_charge, 1, NULL, ! 535: ai_charge, 7, ChickSlash, ! 536: ai_charge, -7, NULL, ! 537: ai_charge, 1, NULL, ! 538: ai_charge, -1, NULL, ! 539: ai_charge, 1, NULL, ! 540: ai_charge, 0, NULL, ! 541: ai_charge, 1, NULL, ! 542: ai_charge, -2, chick_reslash ! 543: }; ! 544: mmove_t chick_move_slash = {FRAME_attak204, FRAME_attak212, chick_frames_slash, NULL}; ! 545: ! 546: mframe_t chick_frames_end_slash [] = ! 547: { ! 548: ai_charge, -6, NULL, ! 549: ai_charge, -1, NULL, ! 550: ai_charge, -6, NULL, ! 551: ai_charge, 0, NULL ! 552: }; ! 553: mmove_t chick_move_end_slash = {FRAME_attak213, FRAME_attak216, chick_frames_end_slash, chick_run}; ! 554: ! 555: ! 556: void chick_reslash(edict_t *self) ! 557: { ! 558: if (self->enemy->health > 0) ! 559: { ! 560: if (range (self, self->enemy) == RANGE_MELEE) ! 561: if (random() <= 0.9) ! 562: { ! 563: self->monsterinfo.currentmove = &chick_move_slash; ! 564: return; ! 565: } ! 566: else ! 567: { ! 568: self->monsterinfo.currentmove = &chick_move_end_slash; ! 569: return; ! 570: } ! 571: } ! 572: self->monsterinfo.currentmove = &chick_move_end_slash; ! 573: } ! 574: ! 575: void chick_slash(edict_t *self) ! 576: { ! 577: self->monsterinfo.currentmove = &chick_move_slash; ! 578: } ! 579: ! 580: ! 581: mframe_t chick_frames_start_slash [] = ! 582: { ! 583: ai_charge, 1, NULL, ! 584: ai_charge, 8, NULL, ! 585: ai_charge, 3, NULL ! 586: }; ! 587: mmove_t chick_move_start_slash = {FRAME_attak201, FRAME_attak203, chick_frames_start_slash, chick_slash}; ! 588: ! 589: ! 590: ! 591: void chick_melee(edict_t *self) ! 592: { ! 593: self->monsterinfo.currentmove = &chick_move_start_slash; ! 594: } ! 595: ! 596: ! 597: void chick_attack(edict_t *self) ! 598: { ! 599: self->monsterinfo.currentmove = &chick_move_start_attack1; ! 600: } ! 601: ! 602: void chick_sight(edict_t *self, edict_t *other) ! 603: { ! 604: gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0); ! 605: } ! 606: ! 607: ! 608: /*QUAKED monster_chick (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight ! 609: */ ! 610: void SP_monster_chick (edict_t *self) ! 611: { ! 612: if (deathmatch->value) ! 613: { ! 614: G_FreeEdict (self); ! 615: return; ! 616: } ! 617: ! 618: sound_missile_prelaunch = gi.soundindex ("chick/chkatck1.wav"); ! 619: sound_missile_launch = gi.soundindex ("chick/chkatck2.wav"); ! 620: sound_melee_swing = gi.soundindex ("chick/chkatck3.wav"); ! 621: sound_melee_hit = gi.soundindex ("chick/chkatck4.wav"); ! 622: sound_missile_reload = gi.soundindex ("chick/chkatck5.wav"); ! 623: sound_death1 = gi.soundindex ("chick/chkdeth1.wav"); ! 624: sound_death2 = gi.soundindex ("chick/chkdeth2.wav"); ! 625: sound_fall_down = gi.soundindex ("chick/chkfall1.wav"); ! 626: sound_idle1 = gi.soundindex ("chick/chkidle1.wav"); ! 627: sound_idle2 = gi.soundindex ("chick/chkidle2.wav"); ! 628: sound_pain1 = gi.soundindex ("chick/chkpain1.wav"); ! 629: sound_pain2 = gi.soundindex ("chick/chkpain2.wav"); ! 630: sound_pain3 = gi.soundindex ("chick/chkpain3.wav"); ! 631: sound_sight = gi.soundindex ("chick/chksght1.wav"); ! 632: sound_search = gi.soundindex ("chick/chksrch1.wav"); ! 633: ! 634: self->movetype = MOVETYPE_STEP; ! 635: self->solid = SOLID_BBOX; ! 636: self->s.modelindex = gi.modelindex ("models/monsters/bitch/tris.md2"); ! 637: VectorSet (self->mins, -16, -16, 0); ! 638: VectorSet (self->maxs, 16, 16, 56); ! 639: ! 640: self->health = 175; ! 641: self->gib_health = -70; ! 642: self->mass = 200; ! 643: ! 644: self->pain = chick_pain; ! 645: self->die = chick_die; ! 646: ! 647: self->monsterinfo.stand = chick_stand; ! 648: self->monsterinfo.walk = chick_walk; ! 649: self->monsterinfo.run = chick_run; ! 650: self->monsterinfo.dodge = chick_dodge; ! 651: self->monsterinfo.attack = chick_attack; ! 652: self->monsterinfo.melee = chick_melee; ! 653: self->monsterinfo.sight = chick_sight; ! 654: ! 655: gi.linkentity (self); ! 656: ! 657: self->monsterinfo.currentmove = &chick_move_stand; ! 658: self->monsterinfo.scale = MODEL_SCALE; ! 659: ! 660: walkmonster_start (self); ! 661: } ! 662: ! 663: ! 664: /*QUAKED monster_chick_heat (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight ! 665: */ ! 666: void SP_monster_chick_heat (edict_t *self) ! 667: { ! 668: SP_monster_chick (self); ! 669: self->s.skinnum = 3; ! 670: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.