Annotation of quake2/game/m_flipper.c, revision 1.1

1.1     ! root        1: /*
        !             2: ==============================================================================
        !             3: 
        !             4: FLIPPER
        !             5: 
        !             6: ==============================================================================
        !             7: */
        !             8: 
        !             9: #include "g_local.h"
        !            10: #include "m_flipper.h"
        !            11: 
        !            12: 
        !            13: static int     sound_chomp;
        !            14: static int     sound_attack;
        !            15: static int     sound_pain1;
        !            16: static int     sound_pain2;
        !            17: static int     sound_death;
        !            18: static int     sound_idle;
        !            19: static int     sound_search;
        !            20: static int     sound_sight;
        !            21: 
        !            22: 
        !            23: void flipper_stand (edict_t *self);
        !            24: 
        !            25: mframe_t flipper_frames_stand [] =
        !            26: {
        !            27:        ai_stand, 0, NULL
        !            28: };
        !            29:        
        !            30: mmove_t        flipper_move_stand = {FRAME_flphor01, FRAME_flphor01, flipper_frames_stand, NULL};
        !            31: 
        !            32: void flipper_stand (edict_t *self)
        !            33: {
        !            34:                self->monsterinfo.currentmove = &flipper_move_stand;
        !            35: }
        !            36: 
        !            37: #define FLIPPER_RUN_SPEED      24
        !            38: 
        !            39: mframe_t flipper_frames_run [] =
        !            40: {
        !            41:        ai_run, FLIPPER_RUN_SPEED, NULL,        // 6
        !            42:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            43:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            44:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            45:        ai_run, FLIPPER_RUN_SPEED, NULL,        // 10
        !            46: 
        !            47:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            48:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            49:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            50:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            51:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            52:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            53:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            54:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            55:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            56:        ai_run, FLIPPER_RUN_SPEED, NULL,        // 20
        !            57: 
        !            58:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            59:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            60:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            61:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            62:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            63:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            64:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            65:        ai_run, FLIPPER_RUN_SPEED, NULL,
        !            66:        ai_run, FLIPPER_RUN_SPEED, NULL         // 29
        !            67: };
        !            68: mmove_t flipper_move_run_loop = {FRAME_flpver06, FRAME_flpver29, flipper_frames_run, NULL};
        !            69: 
        !            70: void flipper_run_loop (edict_t *self)
        !            71: {
        !            72:        self->monsterinfo.currentmove = &flipper_move_run_loop;
        !            73: }
        !            74: 
        !            75: mframe_t flipper_frames_run_start [] =
        !            76: {
        !            77:        ai_run, 8, NULL,
        !            78:        ai_run, 8, NULL,
        !            79:        ai_run, 8, NULL,
        !            80:        ai_run, 8, NULL,
        !            81:        ai_run, 8, NULL,
        !            82:        ai_run, 8, NULL
        !            83: };
        !            84: mmove_t flipper_move_run_start = {FRAME_flpver01, FRAME_flpver06, flipper_frames_run_start, flipper_run_loop};
        !            85: 
        !            86: void flipper_run (edict_t *self)
        !            87: {
        !            88:        self->monsterinfo.currentmove = &flipper_move_run_start;
        !            89: }
        !            90: 
        !            91: /* Standard Swimming */ 
        !            92: mframe_t flipper_frames_walk [] =
        !            93: {
        !            94:        ai_walk, 4, NULL,
        !            95:        ai_walk, 4, NULL,
        !            96:        ai_walk, 4, NULL,
        !            97:        ai_walk, 4, NULL,
        !            98:        ai_walk, 4, NULL,
        !            99:        ai_walk, 4, NULL,
        !           100:        ai_walk, 4, NULL,
        !           101:        ai_walk, 4, NULL,
        !           102:        ai_walk, 4, NULL,
        !           103:        ai_walk, 4, NULL,
        !           104:        ai_walk, 4, NULL,
        !           105:        ai_walk, 4, NULL,
        !           106:        ai_walk, 4, NULL,
        !           107:        ai_walk, 4, NULL,
        !           108:        ai_walk, 4, NULL,
        !           109:        ai_walk, 4, NULL,
        !           110:        ai_walk, 4, NULL,
        !           111:        ai_walk, 4, NULL,
        !           112:        ai_walk, 4, NULL,
        !           113:        ai_walk, 4, NULL,
        !           114:        ai_walk, 4, NULL,
        !           115:        ai_walk, 4, NULL,
        !           116:        ai_walk, 4, NULL,
        !           117:        ai_walk, 4, NULL
        !           118: };
        !           119: mmove_t flipper_move_walk = {FRAME_flphor01, FRAME_flphor24, flipper_frames_walk, NULL};
        !           120: 
        !           121: void flipper_walk (edict_t *self)
        !           122: {
        !           123:        self->monsterinfo.currentmove = &flipper_move_walk;
        !           124: }
        !           125: 
        !           126: mframe_t flipper_frames_start_run [] =
        !           127: {
        !           128:        ai_run, 8, NULL,
        !           129:        ai_run, 8, NULL,
        !           130:        ai_run, 8, NULL,
        !           131:        ai_run, 8, NULL,
        !           132:        ai_run, 8, flipper_run
        !           133: };
        !           134: mmove_t flipper_move_start_run = {FRAME_flphor01, FRAME_flphor05, flipper_frames_start_run, NULL};
        !           135: 
        !           136: void flipper_start_run (edict_t *self)
        !           137: {
        !           138:        self->monsterinfo.currentmove = &flipper_move_start_run;
        !           139: }
        !           140: 
        !           141: mframe_t flipper_frames_pain2 [] =
        !           142: {
        !           143:        ai_move, 0, NULL,
        !           144:        ai_move, 0, NULL,
        !           145:        ai_move, 0,     NULL,
        !           146:        ai_move, 0,     NULL,
        !           147:        ai_move, 0, NULL
        !           148: };
        !           149: mmove_t flipper_move_pain2 = {FRAME_flppn101, FRAME_flppn105, flipper_frames_pain2, flipper_run};
        !           150: 
        !           151: mframe_t flipper_frames_pain1 [] =
        !           152: {
        !           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: };
        !           159: mmove_t flipper_move_pain1 = {FRAME_flppn201, FRAME_flppn205, flipper_frames_pain1, flipper_run};
        !           160: 
        !           161: void flipper_bite (edict_t *self)
        !           162: {
        !           163:        vec3_t  aim;
        !           164: 
        !           165:        VectorSet (aim, MELEE_DISTANCE, 0, 0);
        !           166:        fire_hit (self, aim, 5, 0);
        !           167: }
        !           168: 
        !           169: void flipper_preattack (edict_t *self)
        !           170: {
        !           171:        gi.sound (self, CHAN_WEAPON, sound_chomp, 1, ATTN_NORM, 0);
        !           172: }
        !           173: 
        !           174: mframe_t flipper_frames_attack [] =
        !           175: {
        !           176:        ai_charge, 0,   flipper_preattack,
        !           177:        ai_charge, 0,   NULL,
        !           178:        ai_charge, 0,   NULL,
        !           179:        ai_charge, 0,   NULL,
        !           180:        ai_charge, 0,   NULL,
        !           181:        ai_charge, 0,   NULL,
        !           182:        ai_charge, 0,   NULL,
        !           183:        ai_charge, 0,   NULL,
        !           184:        ai_charge, 0,   NULL,
        !           185:        ai_charge, 0,   NULL,
        !           186:        ai_charge, 0,   NULL,
        !           187:        ai_charge, 0,   NULL,
        !           188:        ai_charge, 0,   NULL,
        !           189:        ai_charge, 0,   flipper_bite,
        !           190:        ai_charge, 0,   NULL,
        !           191:        ai_charge, 0,   NULL,
        !           192:        ai_charge, 0,   NULL,
        !           193:        ai_charge, 0,   NULL,
        !           194:        ai_charge, 0,   flipper_bite,
        !           195:        ai_charge, 0,   NULL
        !           196: };
        !           197: mmove_t flipper_move_attack = {FRAME_flpbit01, FRAME_flpbit20, flipper_frames_attack, flipper_run};
        !           198: 
        !           199: void flipper_melee(edict_t *self)
        !           200: {
        !           201:        self->monsterinfo.currentmove = &flipper_move_attack;
        !           202: }
        !           203: 
        !           204: void flipper_pain (edict_t *self, edict_t *other, float kick, int damage)
        !           205: {
        !           206:        int             n;
        !           207: 
        !           208:        if (self->health < (self->max_health / 2))
        !           209:                self->s.skinnum = 1;
        !           210: 
        !           211:        if (level.time < self->pain_debounce_time)
        !           212:                return;
        !           213: 
        !           214:        self->pain_debounce_time = level.time + 3;
        !           215:        
        !           216:        if (skill->value == 3)
        !           217:                return;         // no pain anims in nightmare
        !           218: 
        !           219:        n = (rand() + 1) % 2;
        !           220:        if (n == 0)
        !           221:        {
        !           222:                gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
        !           223:                self->monsterinfo.currentmove = &flipper_move_pain1;
        !           224:        }
        !           225:        else
        !           226:        {
        !           227:                gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
        !           228:                self->monsterinfo.currentmove = &flipper_move_pain2;
        !           229:        }
        !           230: }
        !           231: 
        !           232: void flipper_dead (edict_t *self)
        !           233: {
        !           234:        VectorSet (self->mins, -16, -16, -24);
        !           235:        VectorSet (self->maxs, 16, 16, -8);
        !           236:        self->movetype = MOVETYPE_TOSS;
        !           237:        self->svflags |= SVF_DEADMONSTER;
        !           238:        self->nextthink = 0;
        !           239:        gi.linkentity (self);
        !           240: }
        !           241: 
        !           242: mframe_t flipper_frames_death [] =
        !           243: {
        !           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,
        !           251:        ai_move, 0,      NULL,
        !           252:        ai_move, 0,      NULL,
        !           253:        ai_move, 0,      NULL,
        !           254: 
        !           255:        ai_move, 0,      NULL,
        !           256:        ai_move, 0,      NULL,
        !           257:        ai_move, 0,      NULL,
        !           258:        ai_move, 0,      NULL,
        !           259:        ai_move, 0,      NULL,
        !           260:        ai_move, 0,      NULL,
        !           261:        ai_move, 0,      NULL,
        !           262:        ai_move, 0,      NULL,
        !           263:        ai_move, 0,      NULL,
        !           264:        ai_move, 0,      NULL,
        !           265: 
        !           266:        ai_move, 0,      NULL,
        !           267:        ai_move, 0,      NULL,
        !           268:        ai_move, 0,      NULL,
        !           269:        ai_move, 0,      NULL,
        !           270:        ai_move, 0,      NULL,
        !           271:        ai_move, 0,      NULL,
        !           272:        ai_move, 0,      NULL,
        !           273:        ai_move, 0,      NULL,
        !           274:        ai_move, 0,      NULL,
        !           275:        ai_move, 0,      NULL,
        !           276: 
        !           277:        ai_move, 0,      NULL,
        !           278:        ai_move, 0,      NULL,
        !           279:        ai_move, 0,      NULL,
        !           280:        ai_move, 0,      NULL,
        !           281:        ai_move, 0,      NULL,
        !           282:        ai_move, 0,      NULL,
        !           283:        ai_move, 0,      NULL,
        !           284:        ai_move, 0,      NULL,
        !           285:        ai_move, 0,      NULL,
        !           286:        ai_move, 0,      NULL,
        !           287: 
        !           288:        ai_move, 0,      NULL,
        !           289:        ai_move, 0,      NULL,
        !           290:        ai_move, 0,      NULL,
        !           291:        ai_move, 0,      NULL,
        !           292:        ai_move, 0,      NULL,
        !           293:        ai_move, 0,      NULL,
        !           294:        ai_move, 0,      NULL,
        !           295:        ai_move, 0,      NULL,
        !           296:        ai_move, 0,      NULL,
        !           297:        ai_move, 0,      NULL,
        !           298: 
        !           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: };
        !           306: mmove_t flipper_move_death = {FRAME_flpdth01, FRAME_flpdth56, flipper_frames_death, flipper_dead};
        !           307: 
        !           308: void flipper_sight (edict_t *self, edict_t *other)
        !           309: {
        !           310:        gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
        !           311: }
        !           312: 
        !           313: void flipper_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
        !           314: {
        !           315:        int             n;
        !           316: 
        !           317: // check for gib
        !           318:        if (self->health <= self->gib_health)
        !           319:        {
        !           320:                gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
        !           321:                for (n= 0; n < 2; n++)
        !           322:                        ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
        !           323:                for (n= 0; n < 2; n++)
        !           324:                        ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
        !           325:                ThrowHead (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
        !           326:                self->deadflag = DEAD_DEAD;
        !           327:                return;
        !           328:        }
        !           329: 
        !           330:        if (self->deadflag == DEAD_DEAD)
        !           331:                return;
        !           332: 
        !           333: // regular death
        !           334:        gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
        !           335:        self->deadflag = DEAD_DEAD;
        !           336:        self->takedamage = DAMAGE_YES;
        !           337:        self->monsterinfo.currentmove = &flipper_move_death;
        !           338: }
        !           339: 
        !           340: /*QUAKED monster_flipper (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
        !           341: */
        !           342: void SP_monster_flipper (edict_t *self)
        !           343: {
        !           344:        if (deathmatch->value)
        !           345:        {
        !           346:                G_FreeEdict (self);
        !           347:                return;
        !           348:        }
        !           349: 
        !           350:        sound_pain1             = gi.soundindex ("flipper/flppain1.wav");       
        !           351:        sound_pain2             = gi.soundindex ("flipper/flppain2.wav");       
        !           352:        sound_death             = gi.soundindex ("flipper/flpdeth1.wav");       
        !           353:        sound_chomp             = gi.soundindex ("flipper/flpatck1.wav");
        !           354:        sound_attack    = gi.soundindex ("flipper/flpatck2.wav");
        !           355:        sound_idle              = gi.soundindex ("flipper/flpidle1.wav");
        !           356:        sound_search    = gi.soundindex ("flipper/flpsrch1.wav");
        !           357:        sound_sight             = gi.soundindex ("flipper/flpsght1.wav");
        !           358: 
        !           359:        self->movetype = MOVETYPE_STEP;
        !           360:        self->solid = SOLID_BBOX;
        !           361:        self->s.modelindex = gi.modelindex ("models/monsters/flipper/tris.md2");
        !           362:        VectorSet (self->mins, -16, -16, 0);
        !           363:        VectorSet (self->maxs, 16, 16, 32);
        !           364: 
        !           365:        self->health = 50;
        !           366:        self->gib_health = -30;
        !           367:        self->mass = 100;
        !           368: 
        !           369:        self->pain = flipper_pain;
        !           370:        self->die = flipper_die;
        !           371: 
        !           372:        self->monsterinfo.stand = flipper_stand;
        !           373:        self->monsterinfo.walk = flipper_walk;
        !           374:        self->monsterinfo.run = flipper_start_run;
        !           375:        self->monsterinfo.melee = flipper_melee;
        !           376:        self->monsterinfo.sight = flipper_sight;
        !           377: 
        !           378:        gi.linkentity (self);
        !           379: 
        !           380:        self->monsterinfo.currentmove = &flipper_move_stand;    
        !           381:        self->monsterinfo.scale = MODEL_SCALE;
        !           382: 
        !           383:        swimmonster_start (self);
        !           384: }

unix.superglobalmegacorp.com

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