Annotation of quake2/xatrix/m_chick.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.