/* * QUAKED monster_jorg (1 .5 0) (-80 -80 0) (90 90 140) Ambush Trigger_Spawn Sight */ void SP_monster_jorg(edict_t *self) { if (!self) { return; } 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); }
/*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_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_makron (1 .5 0) (-30 -30 0) (30 30 90) Ambush Trigger_Spawn Sight */ void init_drone_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->health = self->max_health = 5000 * self->monsterinfo.level; self->monsterinfo.power_armor_power = 5000 * self->monsterinfo.level; self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.max_armor = self->monsterinfo.power_armor_power; self->gib_health = -2000; self->mass = 500; self->mtype = M_MAKRON; self->monsterinfo.control_cost = 101; self->monsterinfo.cost = 300; self->monsterinfo.jumpup = 64; self->monsterinfo.jumpdn = 512; //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_stand; self->monsterinfo.currentmove = &makron_move_sight; self->monsterinfo.scale = MODEL_SCALE; self->nextthink = level.time + FRAMETIME; //walkmonster_start(self); }
void SP_monster_jorg_precache(void) { 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 (); }
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_makron (1 .5 0) (-30 -30 0) (30 30 90) Ambush Trigger_Spawn Sight */ void SP_monster_makron (edict_t *self) { 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); // Lazarus: mapper-configurable health if(!self->health) self->health = 3000; // Lazarus: get around Killed's prevention of health dropping below -999 // if(!self->gib_health) // self->gib_health = -2000; self->gib_health = -900; 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; self->monsterinfo.sight = makron_sight; self->monsterinfo.checkattack = Makron_CheckAttack; // Knightmare- added sparks and blood type if (!self->blood_type) self->blood_type = 2; //sparks else self->fogclip |= 2; //custom bloodtype flag // Lazarus if(self->powerarmor) { self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD; self->monsterinfo.power_armor_power = self->powerarmor; } gi.linkentity (self); self->monsterinfo.currentmove = &makron_move_sight; if(self->health < 0) { mmove_t *deathmoves[] = {&makron_move_death2, &makron_move_death3, NULL}; M_SetDeath(self,(mmove_t **)&deathmoves); } 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) { 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_search = 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->mass = 1000; if (deathmatch->value) self->health = 1800 + 525 * skill->value; else self->health = 2250 + 350 * skill->value; self->max_health = self->health; self->monsterinfo.level = 3730 + 2450 * skill->value; self->monsterinfo.skill = skill->value; self->gib_health = -2000; strcpy(self->monsterinfo.name, "Jorg"); 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; self->monsterinfo.aggressive = false; self->monsterinfo.prefered_range = 280; gi.linkentity (self); if (deathmatch->value) { self->monsterinfo.cts_any = 1; self->monsterinfo.cts_class1 = 0.18; self->monsterinfo.cts_class2 = 0.35; self->monsterinfo.cts_class3 = 0.65; self->monsterinfo.item_any = 0.9; self->monsterinfo.itemmult_class1 = 2.0; self->monsterinfo.itemmult_class2 = 0.9; self->monsterinfo.itemmult_class3 = 0.7; self->monsterinfo.itemmult_class4 = 0.5; } else { self->monsterinfo.cts_any = -10; self->monsterinfo.cts_class1 = 0; self->monsterinfo.cts_class2 = 0; self->monsterinfo.cts_class3 = 0; } self->monsterinfo.currentmove = &jorg_move_stand; self->monsterinfo.scale = MODEL_SCALE; walkmonster_start(self); }