/*QUAKED monster_makron (1 .5 0) (-30 -30 0) (30 30 90) Ambush Trigger_Spawn Sight */ void SP_monster_makron (edict_t *self) { MakronPrecache (); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/boss3/rider/tris.md2"); VectorSet (self->mins, -30, -30, 0); VectorSet (self->maxs, 30, 30, 90); self->mass = 500; if (deathmatch->value) self->health = 1700 + 490 * skill->value; else self->health = 2500 + 360 * skill->value; self->max_health = self->health; self->monsterinfo.level = 3450 + 2670 * skill->value; self->monsterinfo.skill = skill->value; self->gib_health = -300 - 30 * skill->value; strcpy(self->monsterinfo.name, "Makron"); self->pain = makron_pain; self->die = makron_die; self->monsterinfo.stand = makron_stand; self->monsterinfo.walk = makron_walk; self->monsterinfo.run = makron_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = makron_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = makron_sight; self->monsterinfo.checkattack = Makron_CheckAttack; self->monsterinfo.cts_any = 1; self->monsterinfo.cts_class1 = 0.20; self->monsterinfo.cts_class2 = 0.40; self->monsterinfo.cts_class3 = 0.70; self->monsterinfo.item_any = 0.95; self->monsterinfo.itemmult_class1 = 2.0; self->monsterinfo.itemmult_class2 = 0.9; self->monsterinfo.itemmult_class3 = 0.7; self->monsterinfo.itemmult_class4 = 0.5; self->monsterinfo.aggressive = false; self->monsterinfo.prefered_range = 250; gi.linkentity (self); // self->monsterinfo.currentmove = &makron_move_stand; self->monsterinfo.currentmove = &makron_move_sight; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); }
/*QUAKED monster_jorg (1 .5 0) (-80 -80 0) (90 90 140) Ambush Trigger_Spawn Sight */ void SP_monster_jorg (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_pain1 = gi.soundindex ("boss3/bs3pain1.wav"); sound_pain2 = gi.soundindex ("boss3/bs3pain2.wav"); sound_pain3 = gi.soundindex ("boss3/bs3pain3.wav"); sound_death = gi.soundindex ("boss3/bs3deth1.wav"); sound_attack1 = gi.soundindex ("boss3/bs3atck1.wav"); sound_attack2 = gi.soundindex ("boss3/bs3atck2.wav"); sound_search1 = gi.soundindex ("boss3/bs3srch1.wav"); sound_search2 = gi.soundindex ("boss3/bs3srch2.wav"); sound_search3 = gi.soundindex ("boss3/bs3srch3.wav"); sound_idle = gi.soundindex ("boss3/bs3idle1.wav"); sound_step_left = gi.soundindex ("boss3/step1.wav"); sound_step_right = gi.soundindex ("boss3/step2.wav"); sound_firegun = gi.soundindex ("boss3/xfire.wav"); sound_death_hit = gi.soundindex ("boss3/d_hit.wav"); MakronPrecache (); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/boss3/rider/tris.md2"); self->s.modelindex2 = gi.modelindex ("models/monsters/boss3/jorg/tris.md2"); VectorSet (self->mins, -80, -80, 0); VectorSet (self->maxs, 80, 80, 140); self->health = 3000; self->gib_health = -2000; self->mass = 1000; self->pain = jorg_pain; self->die = jorg_die; self->monsterinfo.stand = jorg_stand; self->monsterinfo.walk = jorg_walk; self->monsterinfo.run = jorg_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = jorg_attack; self->monsterinfo.search = jorg_search; self->monsterinfo.melee = NULL; self->monsterinfo.sight = NULL; self->monsterinfo.checkattack = Jorg_CheckAttack; gi.linkentity (self); self->monsterinfo.currentmove = &jorg_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); }
void SP_misc_actor (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } if (!self->targetname) { gi.dprintf(DEVELOPER_MSG_GAME, "untargeted %s at %s\n", self->classname, vtos(self->s.origin)); G_FreeEdict (self); return; } if (!self->target) { gi.dprintf(DEVELOPER_MSG_GAME, "%s with no target at %s\n", self->classname, vtos(self->s.origin)); G_FreeEdict (self); return; } self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex("players/male/tris.md2"); VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 32); if (!self->health) self->health = 100; self->mass = 200; self->pain = actor_pain; self->die = actor_die; self->monsterinfo.stand = actor_stand; self->monsterinfo.walk = actor_walk; self->monsterinfo.run = actor_run; self->monsterinfo.attack = actor_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = NULL; self->monsterinfo.aiflags |= AI_GOOD_GUY; gi.linkentity (self); self->monsterinfo.currentmove = &actor_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); // actors always start in a dormant state, they *must* be used to get going self->use = actor_use; }
/*QUAKED monster_brain(1 .5 0)(-16 -16 -24)(16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_brain(edict_t *self){ if(deathmatch->value){ G_FreeEdict(self); return; } sound_chest_open = gi.soundindex("brain/brnatck1.wav"); sound_tentacles_extend = gi.soundindex("brain/brnatck2.wav"); sound_tentacles_retract = gi.soundindex("brain/brnatck3.wav"); sound_death = gi.soundindex("brain/brndeth1.wav"); sound_idle1 = gi.soundindex("brain/brnidle1.wav"); sound_idle2 = gi.soundindex("brain/brnidle2.wav"); sound_idle3 = gi.soundindex("brain/brnlens1.wav"); sound_pain1 = gi.soundindex("brain/brnpain1.wav"); sound_pain2 = gi.soundindex("brain/brnpain2.wav"); sound_sight = gi.soundindex("brain/brnsght1.wav"); sound_search = gi.soundindex("brain/brnsrch1.wav"); sound_melee1 = gi.soundindex("brain/melee1.wav"); sound_melee2 = gi.soundindex("brain/melee2.wav"); sound_melee3 = gi.soundindex("brain/melee3.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex("models/monsters/brain/tris.md2"); VectorSet(self->mins, -16, -16, -24); VectorSet(self->maxs, 16, 16, 32); self->health = 300; self->gib_health = -150; self->mass = 400; self->pain = brain_pain; self->die = brain_die; self->monsterinfo.stand = brain_stand; self->monsterinfo.walk = brain_walk; self->monsterinfo.run = brain_run; self->monsterinfo.dodge = brain_dodge; // self->monsterinfo.attack = brain_attack; self->monsterinfo.melee = brain_melee; self->monsterinfo.sight = brain_sight; self->monsterinfo.search = brain_search; self->monsterinfo.idle = brain_idle; self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN; self->monsterinfo.power_armor_power = 100; gi.linkentity(self); self->monsterinfo.currentmove = &brain_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); }
/* * QUAKED monster_gladb (1 .5 0) (-32 -32 -24) (32 32 64) Ambush Trigger_Spawn Sight */ void SP_monster_gladb(edict_t *self) { if (deathmatch->value) { G_FreeEdict(self); return; } sound_pain1 = gi.soundindex("gladiator/pain.wav"); sound_pain2 = gi.soundindex("gladiator/gldpain2.wav"); sound_die = gi.soundindex("gladiator/glddeth2.wav"); sound_gun = gi.soundindex("weapons/plasshot.wav"); sound_cleaver_swing = gi.soundindex("gladiator/melee1.wav"); sound_cleaver_hit = gi.soundindex("gladiator/melee2.wav"); sound_cleaver_miss = gi.soundindex("gladiator/melee3.wav"); sound_idle = gi.soundindex("gladiator/gldidle1.wav"); sound_search = gi.soundindex("gladiator/gldsrch1.wav"); sound_sight = gi.soundindex("gladiator/sight.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex("models/monsters/gladb/tris.md2"); VectorSet(self->mins, -32, -32, -24); VectorSet(self->maxs, 32, 32, 64); self->health = 800; self->gib_health = -175; self->mass = 350; self->pain = gladb_pain; self->die = gladb_die; self->monsterinfo.stand = gladb_stand; self->monsterinfo.walk = gladb_walk; self->monsterinfo.run = gladb_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = gladb_attack; self->monsterinfo.melee = gladb_melee; self->monsterinfo.sight = gladb_sight; self->monsterinfo.idle = gladb_idle; self->monsterinfo.search = gladb_search; gi.linkentity(self); self->monsterinfo.currentmove = &gladb_move_stand; self->monsterinfo.scale = MODEL_SCALE; self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.power_armor_power = 400; walkmonster_start(self); }
/*QUAKED monster_mutant (1 .5 0) (-32 -32 -24) (32 32 32) Ambush Trigger_Spawn Sight */ void SP_monster_mutant (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_swing = gi.soundindex ("mutant/mutatck1.wav"); sound_hit = gi.soundindex ("mutant/mutatck2.wav"); sound_hit2 = gi.soundindex ("mutant/mutatck3.wav"); sound_death = gi.soundindex ("mutant/mutdeth1.wav"); sound_idle = gi.soundindex ("mutant/mutidle1.wav"); sound_pain1 = gi.soundindex ("mutant/mutpain1.wav"); sound_pain2 = gi.soundindex ("mutant/mutpain2.wav"); sound_sight = gi.soundindex ("mutant/mutsght1.wav"); sound_search = gi.soundindex ("mutant/mutsrch1.wav"); sound_step1 = gi.soundindex ("mutant/step1.wav"); sound_step2 = gi.soundindex ("mutant/step2.wav"); sound_step3 = gi.soundindex ("mutant/step3.wav"); sound_thud = gi.soundindex ("mutant/thud1.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/mutant/tris.md2"); VectorSet (self->mins, -32, -32, -24); VectorSet (self->maxs, 32, 32, 48); self->health = 300; self->gib_health = -120; self->mass = 300; self->pain = mutant_pain; self->die = mutant_die; self->monsterinfo.stand = mutant_stand; self->monsterinfo.walk = mutant_walk; self->monsterinfo.run = mutant_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = mutant_jump; self->monsterinfo.melee = mutant_melee; self->monsterinfo.sight = mutant_sight; self->monsterinfo.search = mutant_search; self->monsterinfo.idle = mutant_idle; self->monsterinfo.checkattack = mutant_checkattack; gi.linkentity (self); self->monsterinfo.currentmove = &mutant_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); }
/* * QUAKED monster_parasite (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_parasite(edict_t *self) { if (!self) { return; } if (deathmatch->value) { G_FreeEdict(self); return; } sound_pain1 = gi.soundindex("parasite/parpain1.wav"); sound_pain2 = gi.soundindex("parasite/parpain2.wav"); sound_die = gi.soundindex("parasite/pardeth1.wav"); sound_launch = gi.soundindex("parasite/paratck1.wav"); sound_impact = gi.soundindex("parasite/paratck2.wav"); sound_suck = gi.soundindex("parasite/paratck3.wav"); sound_reelin = gi.soundindex("parasite/paratck4.wav"); sound_sight = gi.soundindex("parasite/parsght1.wav"); sound_tap = gi.soundindex("parasite/paridle1.wav"); sound_scratch = gi.soundindex("parasite/paridle2.wav"); sound_search = gi.soundindex("parasite/parsrch1.wav"); self->s.modelindex = gi.modelindex("models/monsters/parasite/tris.md2"); VectorSet(self->mins, -16, -16, -24); VectorSet(self->maxs, 16, 16, 24); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->health = 175; self->gib_health = -50; self->mass = 250; self->pain = parasite_pain; self->die = parasite_die; self->monsterinfo.stand = parasite_stand; self->monsterinfo.walk = parasite_start_walk; self->monsterinfo.run = parasite_start_run; self->monsterinfo.attack = parasite_attack; self->monsterinfo.sight = parasite_sight; self->monsterinfo.idle = parasite_idle; gi.linkentity(self); self->monsterinfo.currentmove = ¶site_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); }
/*QUAKED monster_medic (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_medic (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_idle1 = gi.soundindex ("medic/idle.wav"); sound_pain1 = gi.soundindex ("medic/medpain1.wav"); sound_pain2 = gi.soundindex ("medic/medpain2.wav"); sound_die = gi.soundindex ("medic/meddeth1.wav"); sound_sight = gi.soundindex ("medic/medsght1.wav"); sound_search = gi.soundindex ("medic/medsrch1.wav"); sound_hook_launch = gi.soundindex ("medic/medatck2.wav"); sound_hook_hit = gi.soundindex ("medic/medatck3.wav"); sound_hook_heal = gi.soundindex ("medic/medatck4.wav"); sound_hook_retract = gi.soundindex ("medic/medatck5.wav"); gi.soundindex ("medic/medatck1.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/medic/tris.md2"); VectorSet (self->mins, -24, -24, -24); VectorSet (self->maxs, 24, 24, 32); self->health = 300; self->gib_health = -130; self->mass = 400; self->pain = medic_pain; self->die = medic_die; self->monsterinfo.stand = medic_stand; self->monsterinfo.walk = medic_walk; self->monsterinfo.run = medic_run; self->monsterinfo.dodge = medic_dodge; self->monsterinfo.attack = medic_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = medic_sight; self->monsterinfo.idle = medic_idle; self->monsterinfo.search = medic_search; self->monsterinfo.checkattack = medic_checkattack; gi.linkentity (self); self->monsterinfo.currentmove = &medic_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); }
/*QUAKED monster_infantry (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_infantry (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_pain1 = gi.soundindex ("infantry/infpain1.wav"); sound_pain2 = gi.soundindex ("infantry/infpain2.wav"); sound_die1 = gi.soundindex ("infantry/infdeth1.wav"); sound_die2 = gi.soundindex ("infantry/infdeth2.wav"); sound_gunshot = gi.soundindex ("infantry/infatck1.wav"); sound_weapon_cock = gi.soundindex ("infantry/infatck3.wav"); sound_punch_swing = gi.soundindex ("infantry/infatck2.wav"); sound_punch_hit = gi.soundindex ("infantry/melee2.wav"); sound_sight = gi.soundindex ("infantry/infsght1.wav"); sound_search = gi.soundindex ("infantry/infsrch1.wav"); sound_idle = gi.soundindex ("infantry/infidle1.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex("models/monsters/infantry/tris.md2"); VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 32); self->health = 100; self->gib_health = -40; self->mass = 200; self->pain = infantry_pain; self->die = infantry_die; self->monsterinfo.stand = infantry_stand; self->monsterinfo.walk = infantry_walk; self->monsterinfo.run = infantry_run; self->monsterinfo.dodge = infantry_dodge; self->monsterinfo.attack = infantry_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = infantry_sight; self->monsterinfo.idle = infantry_fidget; gi.linkentity (self); self->monsterinfo.currentmove = &infantry_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); }
/*QUAKED monster_chick (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_chick (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_missile_prelaunch = gi.soundindex ("chick/chkatck1.wav"); sound_missile_launch = gi.soundindex ("chick/chkatck2.wav"); sound_melee_swing = gi.soundindex ("chick/chkatck3.wav"); sound_melee_hit = gi.soundindex ("chick/chkatck4.wav"); sound_missile_reload = gi.soundindex ("chick/chkatck5.wav"); sound_death1 = gi.soundindex ("chick/chkdeth1.wav"); sound_death2 = gi.soundindex ("chick/chkdeth2.wav"); sound_fall_down = gi.soundindex ("chick/chkfall1.wav"); sound_idle1 = gi.soundindex ("chick/chkidle1.wav"); sound_idle2 = gi.soundindex ("chick/chkidle2.wav"); sound_pain1 = gi.soundindex ("chick/chkpain1.wav"); sound_pain2 = gi.soundindex ("chick/chkpain2.wav"); sound_pain3 = gi.soundindex ("chick/chkpain3.wav"); sound_sight = gi.soundindex ("chick/chksght1.wav"); sound_search = gi.soundindex ("chick/chksrch1.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/bitch/tris.md2"); VectorSet (self->mins, -16, -16, 0); VectorSet (self->maxs, 16, 16, 56); self->health = 175; self->gib_health = -70; self->mass = 200; self->pain = chick_pain; self->die = chick_die; self->monsterinfo.stand = chick_stand; self->monsterinfo.walk = chick_walk; self->monsterinfo.run = chick_run; self->monsterinfo.dodge = chick_dodge; self->monsterinfo.attack = chick_attack; self->monsterinfo.melee = chick_melee; self->monsterinfo.sight = chick_sight; gi.linkentity (self); self->monsterinfo.currentmove = &chick_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); }
/*QUAKED monster_supertank (1 .5 0) (-64 -64 0) (64 64 72) Ambush Trigger_Spawn Sight */ void SP_monster_supertank (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_pain1 = gi.soundindex ("bosstank/btkpain1.wav"); sound_pain2 = gi.soundindex ("bosstank/btkpain2.wav"); sound_pain3 = gi.soundindex ("bosstank/btkpain3.wav"); sound_death = gi.soundindex ("bosstank/btkdeth1.wav"); sound_search1 = gi.soundindex ("bosstank/btkunqv1.wav"); sound_search2 = gi.soundindex ("bosstank/btkunqv2.wav"); // self->s.sound = gi.soundindex ("bosstank/btkengn1.wav"); tread_sound = gi.soundindex ("bosstank/btkengn1.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/boss1/tris.md2"); VectorSet (self->mins, -64, -64, 0); VectorSet (self->maxs, 64, 64, 112); self->health = 1500; self->gib_health = -500; self->mass = 800; self->pain = supertank_pain; self->die = supertank_die; self->monsterinfo.stand = supertank_stand; self->monsterinfo.walk = supertank_walk; self->monsterinfo.run = supertank_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = supertank_attack; self->monsterinfo.search = supertank_search; self->monsterinfo.melee = NULL; self->monsterinfo.sight = NULL; self->monsterinfo.blocked = supertank_blocked; //PGM gi.linkentity (self); self->monsterinfo.currentmove = &supertank_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); //PMM self->monsterinfo.aiflags |= AI_IGNORE_SHOTS; //pmm }
/*QUAKED monster_berserk (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_berserk (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } // pre-caches sound_pain = gi.soundindex ("berserk/berpain2.wav"); sound_die = gi.soundindex ("berserk/berdeth2.wav"); sound_idle = gi.soundindex ("berserk/beridle1.wav"); sound_punch = gi.soundindex ("berserk/attack.wav"); sound_search = gi.soundindex ("berserk/bersrch1.wav"); sound_sight = gi.soundindex ("berserk/sight.wav"); self->s.modelindex = gi.modelindex("models/monsters/berserk/tris.md2"); VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 32); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->health = 240; self->gib_health = -60; self->mass = 250; self->pain = berserk_pain; self->die = berserk_die; self->monsterinfo.stand = berserk_stand; self->monsterinfo.walk = berserk_walk; self->monsterinfo.run = berserk_run; // pmm // self->monsterinfo.dodge = NULL; self->monsterinfo.dodge = M_MonsterDodge; self->monsterinfo.sidestep = berserk_sidestep; // pmm self->monsterinfo.attack = NULL; self->monsterinfo.melee = berserk_melee; self->monsterinfo.sight = berserk_sight; self->monsterinfo.search = berserk_search; self->monsterinfo.blocked = berserk_blocked; //PGM self->monsterinfo.currentmove = &berserk_move_stand; self->monsterinfo.scale = MODEL_SCALE; gi.linkentity (self); walkmonster_start (self); }
void SP_monster_soldier_x (edict_t *self) { self->s.modelindex = gi.modelindex ("models/monsters/soldier/tris.md2"); //PMM // self->s.effects |= EF_SPLATTER; //PMM self->monsterinfo.scale = MODEL_SCALE; VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 32); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; sound_idle = gi.soundindex ("soldier/solidle1.wav"); sound_sight1 = gi.soundindex ("soldier/solsght1.wav"); sound_sight2 = gi.soundindex ("soldier/solsrch1.wav"); sound_cock = gi.soundindex ("infantry/infatck3.wav"); self->mass = 100; self->pain = soldier_pain; self->die = soldier_die; self->monsterinfo.stand = soldier_stand; self->monsterinfo.walk = soldier_walk; self->monsterinfo.run = soldier_run; self->monsterinfo.dodge = M_MonsterDodge; self->monsterinfo.attack = soldier_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = soldier_sight; //===== //ROGUE self->monsterinfo.blocked = soldier_blocked; self->monsterinfo.duck = soldier_duck; self->monsterinfo.unduck = monster_duck_up; self->monsterinfo.sidestep = soldier_sidestep; if(self->spawnflags & 8) // blind self->monsterinfo.stand = soldier_blind; //ROGUE //===== gi.linkentity (self); self->monsterinfo.stand (self); walkmonster_start (self); }
/*QUAKED monster_gunner (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_gunner (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_death = gi.soundindex ("gunner/death1.wav"); sound_pain = gi.soundindex ("gunner/gunpain2.wav"); sound_pain2 = gi.soundindex ("gunner/gunpain1.wav"); sound_idle = gi.soundindex ("gunner/gunidle1.wav"); sound_open = gi.soundindex ("gunner/gunatck1.wav"); sound_search = gi.soundindex ("gunner/gunsrch1.wav"); sound_sight = gi.soundindex ("gunner/sight1.wav"); gi.soundindex ("gunner/gunatck2.wav"); gi.soundindex ("gunner/gunatck3.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/gunner/tris.md2"); VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 32); self->health = 175; self->gib_health = -70; self->mass = 200; self->pain = gunner_pain; self->die = gunner_die; self->monsterinfo.stand = gunner_stand; self->monsterinfo.walk = gunner_walk; self->monsterinfo.run = gunner_run; self->monsterinfo.dodge = gunner_dodge; self->monsterinfo.attack = gunner_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = gunner_sight; self->monsterinfo.search = gunner_search; gi.linkentity (self); self->monsterinfo.currentmove = &gunner_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); }
/* * QUAKED monster_makron (1 .5 0) (-30 -30 0) (30 30 90) Ambush Trigger_Spawn Sight */ void SP_monster_makron(edict_t *self) { if (!self) { return; } if (deathmatch->value) { G_FreeEdict(self); return; } MakronPrecache(); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex("models/monsters/boss3/rider/tris.md2"); VectorSet(self->mins, -30, -30, 0); VectorSet(self->maxs, 30, 30, 90); self->health = 3000; self->gib_health = -2000; self->mass = 500; self->pain = makron_pain; self->die = makron_die; self->monsterinfo.stand = makron_stand; self->monsterinfo.walk = makron_walk; self->monsterinfo.run = makron_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = makron_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = makron_sight; self->monsterinfo.checkattack = Makron_CheckAttack; gi.linkentity(self); self->monsterinfo.currentmove = &makron_move_sight; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); }
/*QUAKED monster_gladiator (1 .5 0) (-32 -32 -24) (32 32 64) Ambush Trigger_Spawn Sight */ void SP_monster_gladiator (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } SP_monster_gladiator_precache(); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/gladiatr/tris.md2"); VectorSet (self->mins, -32, -32, -24); VectorSet (self->maxs, 32, 32, 64); self->health = 400; self->gib_health = -175; self->mass = 400; self->pain = gladiator_pain; self->die = gladiator_die; self->monsterinfo.stand = gladiator_stand; self->monsterinfo.walk = gladiator_walk; self->monsterinfo.run = gladiator_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = gladiator_attack; self->monsterinfo.melee = gladiator_melee; self->monsterinfo.sight = gladiator_sight; self->monsterinfo.idle = gladiator_idle; self->monsterinfo.search = gladiator_search; gi.linkentity (self); self->monsterinfo.currentmove = &gladiator_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); }
/*QUAKED monster_jorg (1 .5 0) (-80 -80 0) (90 90 140) Ambush Trigger_Spawn Sight */ void SP_monster_jorg (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } SP_monster_jorg_precache(); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/boss3/rider/tris.md2"); self->s.modelindex2 = gi.modelindex ("models/monsters/boss3/jorg/tris.md2"); VectorSet (self->mins, -80, -80, 0); VectorSet (self->maxs, 80, 80, 140); self->health = 3000; self->gib_health = -2000; self->mass = 1000; self->pain = jorg_pain; self->die = jorg_die; self->monsterinfo.stand = jorg_stand; self->monsterinfo.walk = jorg_walk; self->monsterinfo.run = jorg_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = jorg_attack; self->monsterinfo.search = jorg_search; self->monsterinfo.melee = NULL; self->monsterinfo.sight = NULL; self->monsterinfo.checkattack = Jorg_CheckAttack; gi.linkentity (self); self->monsterinfo.currentmove = &jorg_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); }
void SP_monster_soldier_x (edict_t *self) { if (!self) { return; } self->s.modelindex = gi.modelindex ("models/monsters/soldier/tris.md2"); self->monsterinfo.scale = MODEL_SCALE; Vector3Set (self->mins, -16, -16, -24); Vector3Set (self->maxs, 16, 16, 32); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; sound_idle = gi.soundindex ("soldier/solidle1.wav"); sound_sight1 = gi.soundindex ("soldier/solsght1.wav"); sound_sight2 = gi.soundindex ("soldier/solsrch1.wav"); sound_cock = gi.soundindex ("infantry/infatck3.wav"); self->mass = 100; self->pain = soldier_pain; self->die = soldier_die; self->monsterinfo.stand = soldier_stand; self->monsterinfo.walk = soldier_walk; self->monsterinfo.run = soldier_run; self->monsterinfo.dodge = soldier_dodge; self->monsterinfo.attack = soldier_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = soldier_sight; gi.linkentity (self); self->monsterinfo.stand (self); walkmonster_start (self); }
/*QUAKED monster_parasite (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_parasite (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } SP_monster_parasite_precache(); self->s.modelindex = gi.modelindex ("models/monsters/parasite/tris.md2"); VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 24); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->health = 175; self->gib_health = -50; self->mass = 250; self->pain = parasite_pain; self->die = parasite_die; self->monsterinfo.stand = parasite_stand; self->monsterinfo.walk = parasite_start_walk; self->monsterinfo.run = parasite_start_run; self->monsterinfo.attack = parasite_attack; self->monsterinfo.sight = parasite_sight; self->monsterinfo.idle = parasite_idle; gi.linkentity (self); self->monsterinfo.currentmove = ¶site_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); }
/*QUAKED misc_insane (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn CRAWL CRUCIFIED STAND_GROUND ALWAYS_STAND */ void SP_misc_insane (edict_t *self) { // static int skin = 0; //@@ if (deathmatch->value) { G_FreeEdict (self); return; } sound_fist = gi.soundindex ("insane/insane11.wav"); sound_shake = gi.soundindex ("insane/insane5.wav"); sound_moan = gi.soundindex ("insane/insane7.wav"); sound_scream[0] = gi.soundindex ("insane/insane1.wav"); sound_scream[1] = gi.soundindex ("insane/insane2.wav"); sound_scream[2] = gi.soundindex ("insane/insane3.wav"); sound_scream[3] = gi.soundindex ("insane/insane4.wav"); sound_scream[4] = gi.soundindex ("insane/insane6.wav"); sound_scream[5] = gi.soundindex ("insane/insane8.wav"); sound_scream[6] = gi.soundindex ("insane/insane9.wav"); sound_scream[7] = gi.soundindex ("insane/insane10.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex("models/monsters/insane/tris.md2"); VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 32); if(!self->health) self->health = 100; if(!self->gib_health) self->gib_health = -50; if(!self->mass) self->mass = 300; self->pain = insane_pain; self->die = insane_die; self->monsterinfo.stand = insane_stand; self->monsterinfo.walk = insane_walk; self->monsterinfo.run = insane_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = NULL; self->monsterinfo.melee = NULL; self->monsterinfo.sight = NULL; self->monsterinfo.aiflags |= AI_GOOD_GUY; //@@ // self->s.skinnum = skin; // skin++; // if (skin > 12) // skin = 0; gi.linkentity (self); if (self->spawnflags & 16) // Stand Ground self->monsterinfo.aiflags |= AI_STAND_GROUND; self->monsterinfo.currentmove = &insane_move_stand_normal; if(!self->monsterinfo.flies) self->monsterinfo.flies = 0.30; self->common_name = "Insane Marine"; self->monsterinfo.scale = MODEL_SCALE; if (self->spawnflags & 8) // Crucified ? { VectorSet (self->mins, -16, 0, 0); VectorSet (self->maxs, 16, 8, 32); self->flags |= FL_NO_KNOCKBACK; flymonster_start (self); } else { walkmonster_start (self); self->s.skinnum = rand()%3; } }
/*QUAKED monster_gunner (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_gunner (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_death = gi.soundindex ("gunner/death1.wav"); sound_pain = gi.soundindex ("gunner/gunpain2.wav"); sound_pain2 = gi.soundindex ("gunner/gunpain1.wav"); sound_idle = gi.soundindex ("gunner/gunidle1.wav"); sound_open = gi.soundindex ("gunner/gunatck1.wav"); sound_search = gi.soundindex ("gunner/gunsrch1.wav"); sound_sight = gi.soundindex ("gunner/sight1.wav"); if(monsterjump->value) { self->monsterinfo.jump = gunner_jump; self->monsterinfo.jumpup = 48; self->monsterinfo.jumpdn = 64; } gi.soundindex ("gunner/gunatck2.wav"); gi.soundindex ("gunner/gunatck3.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; // Lazarus: special purpose skins if ( self->style ) { PatchMonsterModel("models/monsters/gunner/tris.md2"); self->s.skinnum = self->style * 2; } self->s.modelindex = gi.modelindex ("models/monsters/gunner/tris.md2"); VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 32); // Lazarus: mapper-configurable health if(!self->health) self->health = 175; if(!self->gib_health) self->gib_health = -70; if(!self->mass) self->mass = 200; self->pain = gunner_pain; self->die = gunner_die; self->monsterinfo.stand = gunner_stand; self->monsterinfo.walk = gunner_walk; self->monsterinfo.run = gunner_run; self->monsterinfo.dodge = gunner_dodge; self->monsterinfo.attack = gunner_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = gunner_sight; self->monsterinfo.search = gunner_search; // Knightmare- added sparks and blood type if (!self->blood_type) self->blood_type = 3; //sparks and blood // Lazarus if(self->powerarmor) { self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.power_armor_power = self->powerarmor; } if(!self->monsterinfo.flies) self->monsterinfo.flies = 0.30; // Lazarus - use move_origin for grenade aiming VectorCopy(monster_flash_offset[MZ2_GUNNER_GRENADE_1],self->move_origin); gi.linkentity (self); self->monsterinfo.currentmove = &gunner_move_stand; if(self->health < 0) { mmove_t *deathmoves[] = {&gunner_move_death, NULL}; M_SetDeath(self,(mmove_t **)&deathmoves); } self->common_name = "Gunner"; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); }
/*QUAKED monster_infantry (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_infantry (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_pain1 = gi.soundindex ("infantry/infpain1.wav"); sound_pain2 = gi.soundindex ("infantry/infpain2.wav"); sound_die1 = gi.soundindex ("infantry/infdeth1.wav"); sound_die2 = gi.soundindex ("infantry/infdeth2.wav"); sound_gunshot = gi.soundindex ("infantry/infatck1.wav"); sound_weapon_cock = gi.soundindex ("infantry/infatck3.wav"); sound_punch_swing = gi.soundindex ("infantry/infatck2.wav"); sound_punch_hit = gi.soundindex ("infantry/melee2.wav"); sound_sight = gi.soundindex ("infantry/infsght1.wav"); sound_search = gi.soundindex ("infantry/infsrch1.wav"); sound_idle = gi.soundindex ("infantry/infidle1.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; // Lazarus: special purpose skins if ( self->style ) { PatchMonsterModel("models/monsters/infantry/tris.md2"); self->s.skinnum = self->style * 2; } self->s.modelindex = gi.modelindex("models/monsters/infantry/tris.md2"); VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 32); // Lazarus: mapper-configurable health if(!self->health) self->health = 100; if(!self->gib_health) self->gib_health = -40; if(!self->mass) self->mass = 200; self->pain = infantry_pain; self->die = infantry_die; self->monsterinfo.stand = infantry_stand; self->monsterinfo.walk = infantry_walk; self->monsterinfo.run = infantry_run; self->monsterinfo.dodge = infantry_dodge; self->monsterinfo.attack = infantry_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = infantry_sight; self->monsterinfo.idle = infantry_fidget; if(monsterjump->value) { self->monsterinfo.jump = infantry_jump; self->monsterinfo.jumpup = 48; self->monsterinfo.jumpdn = 160; } // Lazarus if(self->powerarmor) { self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.power_armor_power = self->powerarmor; } if(!self->monsterinfo.flies) self->monsterinfo.flies = 0.40; gi.linkentity (self); self->monsterinfo.currentmove = &infantry_move_stand; if(self->health < 0) { mmove_t *deathmoves[] = {&infantry_move_death1, &infantry_move_death2, &infantry_move_death3, NULL}; M_SetDeath(self,(mmove_t **)&deathmoves); } self->common_name = "Enforcer"; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); }
/*QUAKED monster_widow (1 .5 0) (-40 -40 0) (40 40 144) Ambush Trigger_Spawn Sight */ void SP_monster_widow (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_pain1 = gi.soundindex ("widow/bw1pain1.wav"); sound_pain2 = gi.soundindex ("widow/bw1pain2.wav"); sound_pain3 = gi.soundindex ("widow/bw1pain3.wav"); sound_search1 = gi.soundindex ("bosshovr/bhvunqv1.wav"); sound_rail = gi.soundindex ("gladiator/railgun.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/blackwidow/tris.md2"); VectorSet (self->mins, -40, -40, 0); VectorSet (self->maxs, 40, 40, 144); self->health = 2000 + 1000*(skill->value); if (coop->value) self->health += 500*(skill->value); self->gib_health = -5000; self->mass = 1500; if (skill->value == 3) { self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.power_armor_power = 500; } self->yaw_speed = 30; self->flags |= FL_IMMUNE_LASER; self->monsterinfo.aiflags |= AI_IGNORE_SHOTS; self->pain = widow_pain; self->die = widow_die; self->monsterinfo.melee = widow_melee; self->monsterinfo.stand = widow_stand; self->monsterinfo.walk = widow_walk; self->monsterinfo.run = widow_run; self->monsterinfo.attack = widow_attack; self->monsterinfo.search = widow_search; self->monsterinfo.checkattack = Widow_CheckAttack; self->monsterinfo.sight = widow_sight; self->monsterinfo.blocked = widow_blocked; gi.linkentity (self); self->monsterinfo.currentmove = &widow_move_stand; self->monsterinfo.scale = MODEL_SCALE; WidowPrecache(); WidowCalcSlots(self); widow_damage_multiplier = 1; walkmonster_start (self); }
/*QUAKED monster_tank_commander (1 .5 0) (-32 -32 -16) (32 32 72) Ambush Trigger_Spawn Sight */ void SP_monster_tank (edict_t *self) { // debut mod : pet if (self->monsterinfo.PetOwner && !using_pets->value) { G_FreeEdict (self); return; } else if (deathmatch->value && !dm_monsters->value) { G_FreeEdict (self); return; } // fin mod : pet self->s.modelindex = gi.modelindex ("models/monsters/tank/tris.md2"); VectorSet (self->mins, -32, -32, -16); VectorSet (self->maxs, 32, 32, 72); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; sound_pain = gi.soundindex ("tank/tnkpain2.wav"); sound_thud = gi.soundindex ("tank/tnkdeth2.wav"); sound_idle = gi.soundindex ("tank/tnkidle1.wav"); sound_die = gi.soundindex ("tank/death.wav"); sound_step = gi.soundindex ("tank/step.wav"); sound_windup = gi.soundindex ("tank/tnkatck4.wav"); sound_strike = gi.soundindex ("tank/tnkatck5.wav"); sound_sight = gi.soundindex ("tank/sight1.wav"); gi.soundindex ("tank/tnkatck1.wav"); gi.soundindex ("tank/tnkatk2a.wav"); gi.soundindex ("tank/tnkatk2b.wav"); gi.soundindex ("tank/tnkatk2c.wav"); gi.soundindex ("tank/tnkatk2d.wav"); gi.soundindex ("tank/tnkatk2e.wav"); gi.soundindex ("tank/tnkatck3.wav"); if (strcmp(self->classname, "monster_tank_commander") == 0) { self->health = 1000; self->gib_health = -225; } else { self->health = 750; self->gib_health = -200; } self->mass = 500; self->pain = tank_pain; self->die = tank_die; self->monsterinfo.stand = tank_stand; self->monsterinfo.walk = tank_walk; self->monsterinfo.run = tank_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = tank_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = tank_sight; self->monsterinfo.idle = tank_idle; gi.linkentity (self); self->monsterinfo.currentmove = &tank_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); if (strcmp(self->classname, "monster_tank_commander") == 0) self->s.skinnum = 2; }
void SP_monster_soldier_x (edict_t *self) { // Lazarus: special purpose skins if ( self->style ) PatchMonsterModel("models/monsters/soldier/tris.md2"); self->s.modelindex = gi.modelindex ("models/monsters/soldier/tris.md2"); self->monsterinfo.scale = MODEL_SCALE; VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 32); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; sound_idle = gi.soundindex ("soldier/solidle1.wav"); sound_sight1 = gi.soundindex ("soldier/solsght1.wav"); sound_sight2 = gi.soundindex ("soldier/solsrch1.wav"); sound_cock = gi.soundindex ("infantry/infatck3.wav"); if(!self->mass) self->mass = 100; self->pain = soldier_pain; self->die = soldier_die; self->monsterinfo.stand = soldier_stand; self->monsterinfo.walk = soldier_walk; self->monsterinfo.run = soldier_run; self->monsterinfo.dodge = soldier_dodge; self->monsterinfo.attack = soldier_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = soldier_sight; if(monsterjump->value) { self->monsterinfo.jump = soldier_jump; self->monsterinfo.jumpup = 48; self->monsterinfo.jumpdn = 160; } // DWH if(self->powerarmor) { self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.power_armor_power = self->powerarmor; } // end DWH gi.linkentity (self); if(!self->monsterinfo.flies) self->monsterinfo.flies = 0.40; if(self->health < 0) { mmove_t *deathmoves[] = {&soldier_move_death1, &soldier_move_death2, &soldier_move_death3, &soldier_move_death4, &soldier_move_death5, &soldier_move_death6, NULL}; M_SetDeath(self,(mmove_t **)&deathmoves); } walkmonster_start (self); }
/*QUAKED monster_tank_commander (1 .5 0) (-32 -32 -16) (32 32 72) Ambush Trigger_Spawn Sight */ void SP_monster_tank (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } // Lazarus: special purpose skins if (strcmp(self->classname, "monster_tank_commander") == 0) self->s.skinnum = 2; if ( self->style ) { PatchMonsterModel("models/monsters/tank/tris.md2"); self->s.skinnum += self->style * 4; } self->s.modelindex = gi.modelindex ("models/monsters/tank/tris.md2"); VectorSet (self->mins, -32, -32, -16); VectorSet (self->maxs, 32, 32, 72); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; sound_pain = gi.soundindex ("tank/tnkpain2.wav"); sound_thud = gi.soundindex ("tank/tnkdeth2.wav"); sound_idle = gi.soundindex ("tank/tnkidle1.wav"); sound_die = gi.soundindex ("tank/death.wav"); sound_step = gi.soundindex ("tank/step.wav"); sound_windup = gi.soundindex ("tank/tnkatck4.wav"); sound_strike = gi.soundindex ("tank/tnkatck5.wav"); sound_sight = gi.soundindex ("tank/sight1.wav"); gi.soundindex ("tank/tnkatck1.wav"); gi.soundindex ("tank/tnkatk2a.wav"); gi.soundindex ("tank/tnkatk2b.wav"); gi.soundindex ("tank/tnkatk2c.wav"); gi.soundindex ("tank/tnkatk2d.wav"); gi.soundindex ("tank/tnkatk2e.wav"); gi.soundindex ("tank/tnkatck3.wav"); if (strcmp(self->classname, "monster_tank_commander") == 0) { // Lazarus: mapper-configurable health if(!self->health) self->health = 1000; if(!self->gib_health) self->gib_health = -225; self->common_name = "Tank Commander"; } else { // Lazarus: mapper-configurable health if(!self->health) self->health = 750; if(!self->gib_health) self->gib_health = -200; self->common_name = "Tank"; } if(!self->mass) self->mass = 500; self->pain = tank_pain; self->die = tank_die; self->monsterinfo.stand = tank_stand; self->monsterinfo.walk = tank_walk; self->monsterinfo.run = tank_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = tank_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = tank_sight; self->monsterinfo.idle = tank_idle; // Knightmare- added sparks and blood type if (!self->blood_type) self->blood_type = 2; //sparks else self->fogclip |= 2; //custom bloodtype flag // Lazarus power armor if(self->powerarmor) { self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.power_armor_power = self->powerarmor; } if(!self->monsterinfo.flies) self->monsterinfo.flies = 0.05; gi.linkentity (self); self->monsterinfo.currentmove = &tank_move_stand; if(self->health < 0) { mmove_t *deathmoves[] = {&tank_move_death, NULL}; M_SetDeath(self,(mmove_t **)&deathmoves); } self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); }
void SP_monster_makron_put (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } MakronPrecache (); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; // Lazarus: special purpose skins if ( self->style ) { PatchMonsterModel("models/monsters/boss3/rider/tris.md2"); self->s.skinnum = self->style * 2; // self->style = 0; //clear for custom bloodtype flag } self->s.modelindex = gi.modelindex ("models/monsters/boss3/rider/tris.md2"); VectorSet (self->mins, -30, -30, 0); VectorSet (self->maxs, 30, 30, 90); if(!self->health) self->health = 3000 + 1000 * (skill->value); if (coop->value) self->health += 500 * (skill->value); if(!self->gib_health) self->gib_health = -800; if(!self->mass) self->mass = 500; self->pain = makron_pain; self->die = makron_die; self->monsterinfo.stand = makron_stand; self->monsterinfo.walk = makron_walk; self->monsterinfo.run = makron_run; self->monsterinfo.dodge = NULL; self->monsterinfo.attack = makron_attack; self->monsterinfo.melee = NULL; //Knightmare- don't jump flag if (self->fogclip & 1) self->monsterinfo.sight = NULL; else self->monsterinfo.sight = makron_sight; self->monsterinfo.checkattack = Makron_CheckAttack; self->monsterinfo.blocked = Makron_blocked; //PGM if (!self->blood_type) self->blood_type = 2; //sparks else self->fogclip |= 2; //custom bloodtype flag // Lazarus if(self->powerarmor) { if (self->powerarmortype == 1) self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN; else self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.power_armor_power = self->powerarmor; } self->common_name = "Makron"; gi.linkentity (self); //Knightmare- nojump flag if (self->fogclip & 1) self->monsterinfo.currentmove = &makron_move_stand; else self->monsterinfo.currentmove = &makron_move_sight; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); //PMM //self->monsterinfo.aiflags |= AI_IGNORE_SHOTS; //PMM }
/*QUAKED monster_parasite (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_parasite (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } sound_pain1 = gi.soundindex ("parasite/parpain1.wav"); sound_pain2 = gi.soundindex ("parasite/parpain2.wav"); sound_die = gi.soundindex ("parasite/pardeth1.wav"); sound_launch = gi.soundindex("parasite/paratck1.wav"); sound_impact = gi.soundindex("parasite/paratck2.wav"); sound_suck = gi.soundindex("parasite/paratck3.wav"); sound_reelin = gi.soundindex("parasite/paratck4.wav"); sound_sight = gi.soundindex("parasite/parsght1.wav"); sound_tap = gi.soundindex("parasite/paridle1.wav"); sound_scratch = gi.soundindex("parasite/paridle2.wav"); sound_search = gi.soundindex("parasite/parsrch1.wav"); // Lazarus: special purpose skins if ( self->style ) { PatchMonsterModel("models/monsters/parasite/tris.md2"); self->s.skinnum = self->style * 2; } self->s.modelindex = gi.modelindex ("models/monsters/parasite/tris.md2"); VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 24); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; // Lazarus: mapper-configurable health if(!self->health) self->health = 175; if(!self->gib_health) self->gib_health = -50; if(!self->mass) self->mass = 250; self->pain = parasite_pain; self->die = parasite_die; self->monsterinfo.stand = parasite_stand; self->monsterinfo.walk = parasite_start_walk; self->monsterinfo.run = parasite_start_run; self->monsterinfo.attack = parasite_attack; self->monsterinfo.sight = parasite_sight; self->monsterinfo.idle = parasite_idle; self->monsterinfo.blocked = parasite_blocked; // Knightmare- added sparks and blood type if (!self->blood_type) self->blood_type = 3; //sparks and blood // Lazarus if (self->powerarmor) { self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.power_armor_power = self->powerarmor; } if (!self->monsterinfo.flies) self->monsterinfo.flies = 0.35; if (monsterjump->value) { self->monsterinfo.jump = parasite_jump; self->monsterinfo.jumpup = 32; self->monsterinfo.jumpdn = 160; } gi.linkentity (self); self->monsterinfo.currentmove = ¶site_move_stand; if (self->health < 0) { mmove_t *deathmoves[] = {¶site_move_death, NULL}; M_SetDeath(self,(mmove_t **)&deathmoves); } self->common_name = "Parasite"; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); }
/* * QUAKED monster_widow (1 .5 0) (-40 -40 0) (40 40 144) Ambush Trigger_Spawn Sight */ void SP_monster_widow(edict_t *self) { if (!self) { return; } /* ace - monsters spawned with FL_RMONSTER will get converted * * to a random spawn spot for the randomizer system. Class * * and tier will be tallied, origin, angles, spawnflags, etc.. * * will also be recorded. This entity will be freed after. */ /* if (self->flags & FL_RMONSTER) { SP_monster_rspawnspot (self); return; } */ if (deathmatch->value) { G_FreeEdict(self); return; } sound_pain1 = gi.soundindex("widow/bw1pain1.wav"); sound_pain2 = gi.soundindex("widow/bw1pain2.wav"); sound_pain3 = gi.soundindex("widow/bw1pain3.wav"); sound_search1 = gi.soundindex("bosshovr/bhvunqv1.wav"); sound_rail = gi.soundindex("gladiator/railgun.wav"); self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex("models/monsters/blackwidow/tris.md2"); VectorSet(self->mins, -40, -40, 0); VectorSet(self->maxs, 40, 40, 144); self->health = 2000 + 1000 * (skill->value); if (coop->value) { self->health += 500 * (skill->value); } self->gib_health = -5000; self->mass = 1500; if (skill->value == 3) { self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.power_armor_power = 500; } self->yaw_speed = 30; self->flags |= FL_IMMUNE_LASER; self->monsterinfo.aiflags |= AI_IGNORE_SHOTS; self->pain = widow_pain; self->die = widow_die; self->monsterinfo.melee = widow_melee; self->monsterinfo.stand = widow_stand; self->monsterinfo.walk = widow_walk; self->monsterinfo.run = widow_run; self->monsterinfo.attack = widow_attack; self->monsterinfo.search = widow_search; self->monsterinfo.checkattack = Widow_CheckAttack; self->monsterinfo.sight = widow_sight; self->monsterinfo.blocked = widow_blocked; gi.linkentity(self); self->monsterinfo.currentmove = &widow_move_stand; self->monsterinfo.scale = MODEL_SCALE; WidowPrecache(); WidowCalcSlots(self); widow_damage_multiplier = 1; walkmonster_start(self); }
/*QUAKED monster_medic (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void SP_monster_medic (edict_t *self) { if (deathmatch->value) { G_FreeEdict (self); return; } self->movetype = MOVETYPE_STEP; self->solid = SOLID_BBOX; self->s.modelindex = gi.modelindex ("models/monsters/medic/tris.md2"); VectorSet (self->mins, -24, -24, -24); VectorSet (self->maxs, 24, 24, 32); //PMM if (strcmp(self->classname, "monster_medic_commander") == 0) { self->health = 600; // fixme self->gib_health = -130; self->mass = 600; self->yaw_speed = 40; // default is 20 MedicCommanderCache(); // self->s.skinnum = 2; } else { //PMM self->health = 300; self->gib_health = -130; self->mass = 400; // self->s.skinnum = 0; } self->pain = medic_pain; self->die = medic_die; self->monsterinfo.stand = medic_stand; self->monsterinfo.walk = medic_walk; self->monsterinfo.run = medic_run; // pmm self->monsterinfo.dodge = M_MonsterDodge; self->monsterinfo.duck = medic_duck; self->monsterinfo.unduck = monster_duck_up; self->monsterinfo.sidestep = medic_sidestep; // self->monsterinfo.dodge = medic_dodge; // pmm self->monsterinfo.attack = medic_attack; self->monsterinfo.melee = NULL; self->monsterinfo.sight = medic_sight; self->monsterinfo.idle = medic_idle; self->monsterinfo.search = medic_search; self->monsterinfo.checkattack = medic_checkattack; self->monsterinfo.blocked = medic_blocked; gi.linkentity (self); self->monsterinfo.currentmove = &medic_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start (self); //PMM self->monsterinfo.aiflags |= AI_IGNORE_SHOTS; if (self->mass > 400) { self->s.skinnum = 2; if (skill->value == 0) self->monsterinfo.monster_slots = 3; else if (skill->value == 1) self->monsterinfo.monster_slots = 4; else if (skill->value == 2) self->monsterinfo.monster_slots = 6; else if (skill->value == 3) self->monsterinfo.monster_slots = 6; // commander sounds commander_sound_idle1 = gi.soundindex ("medic_commander/medidle.wav"); commander_sound_pain1 = gi.soundindex ("medic_commander/medpain1.wav"); commander_sound_pain2 = gi.soundindex ("medic_commander/medpain2.wav"); commander_sound_die = gi.soundindex ("medic_commander/meddeth.wav"); commander_sound_sight = gi.soundindex ("medic_commander/medsght.wav"); commander_sound_search = gi.soundindex ("medic_commander/medsrch.wav"); commander_sound_hook_launch = gi.soundindex ("medic_commander/medatck2c.wav"); commander_sound_hook_hit = gi.soundindex ("medic_commander/medatck3a.wav"); commander_sound_hook_heal = gi.soundindex ("medic_commander/medatck4a.wav"); commander_sound_hook_retract = gi.soundindex ("medic_commander/medatck5a.wav"); commander_sound_spawn = gi.soundindex ("medic_commander/monsterspawn1.wav"); gi.soundindex ("tank/tnkatck3.wav"); } else { sound_idle1 = gi.soundindex ("medic/idle.wav"); sound_pain1 = gi.soundindex ("medic/medpain1.wav"); sound_pain2 = gi.soundindex ("medic/medpain2.wav"); sound_die = gi.soundindex ("medic/meddeth1.wav"); sound_sight = gi.soundindex ("medic/medsght1.wav"); sound_search = gi.soundindex ("medic/medsrch1.wav"); sound_hook_launch = gi.soundindex ("medic/medatck2.wav"); sound_hook_hit = gi.soundindex ("medic/medatck3.wav"); sound_hook_heal = gi.soundindex ("medic/medatck4.wav"); sound_hook_retract = gi.soundindex ("medic/medatck5.wav"); gi.soundindex ("medic/medatck1.wav"); self->s.skinnum = 0; } //pmm }