📄 m_soldier.java
字号:
public boolean think(edict_t self) { soldier_fire(self, 0); return true; } }; // ATTACK2 (blaster/shotgun) static EntThinkAdapter soldier_fire2 = new EntThinkAdapter() { public String getID(){ return "soldier_fire2"; } public boolean think(edict_t self) { soldier_fire(self, 1); return true; } }; static EntThinkAdapter soldier_duck_down = new EntThinkAdapter() { public String getID(){ return "soldier_duck_down"; } public boolean think(edict_t self) { if ((self.monsterinfo.aiflags & Defines.AI_DUCKED) != 0) return true; self.monsterinfo.aiflags |= Defines.AI_DUCKED; self.maxs[2] -= 32; self.takedamage = Defines.DAMAGE_YES; self.monsterinfo.pausetime = GameBase.level.time + 1; GameBase.gi.linkentity(self); return true; } }; static EntThinkAdapter soldier_fire3 = new EntThinkAdapter() { public String getID(){ return "soldier_fire3"; } public boolean think(edict_t self) { soldier_duck_down.think(self); soldier_fire(self, 2); return true; } }; // ATTACK4 (machinegun) static EntThinkAdapter soldier_fire4 = new EntThinkAdapter() { public String getID(){ return "soldier_fire4"; } public boolean think(edict_t self) { soldier_fire(self, 3); // // if (self.enemy.health <= 0) // return; // // if ( ((skill.value == 3) && (random() < 0.5)) || (range(self, // self.enemy) == RANGE_MELEE) ) // self.monsterinfo.nextframe = FRAME_attak402; return true; } }; // // DEATH // static EntThinkAdapter soldier_fire6 = new EntThinkAdapter() { public String getID(){ return "soldier_fire6"; } public boolean think(edict_t self) { soldier_fire(self, 5); return true; } }; static EntThinkAdapter soldier_fire7 = new EntThinkAdapter() { public String getID(){ return "soldier_fire7"; } public boolean think(edict_t self) { soldier_fire(self, 6); return true; } }; static EntThinkAdapter soldier_idle = new EntThinkAdapter() { public String getID(){ return "soldier_idle"; } public boolean think(edict_t self) { if (Lib.random() > 0.8) GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_idle, 1, Defines.ATTN_IDLE, 0); return true; } }; static EntThinkAdapter soldier_stand = new EntThinkAdapter() { public String getID(){ return "soldier_stand"; } public boolean think(edict_t self) { if ((self.monsterinfo.currentmove == soldier_move_stand3) || (Lib.random() < 0.8)) self.monsterinfo.currentmove = soldier_move_stand1; else self.monsterinfo.currentmove = soldier_move_stand3; return true; } }; // // WALK // static EntThinkAdapter soldier_walk1_random = new EntThinkAdapter() { public String getID(){ return "soldier_walk1_random"; } public boolean think(edict_t self) { if (Lib.random() > 0.1) self.monsterinfo.nextframe = FRAME_walk101; return true; } }; static EntThinkAdapter soldier_walk = new EntThinkAdapter() { public String getID(){ return "soldier_walk"; } public boolean think(edict_t self) { if (Lib.random() < 0.5) self.monsterinfo.currentmove = soldier_move_walk1; else self.monsterinfo.currentmove = soldier_move_walk2; return true; } }; static EntThinkAdapter soldier_run = new EntThinkAdapter() { public String getID(){ return "soldier_run"; } public boolean think(edict_t self) { if ((self.monsterinfo.aiflags & Defines.AI_STAND_GROUND) != 0) { self.monsterinfo.currentmove = soldier_move_stand1; return true; } if (self.monsterinfo.currentmove == soldier_move_walk1 || self.monsterinfo.currentmove == soldier_move_walk2 || self.monsterinfo.currentmove == soldier_move_start_run) { self.monsterinfo.currentmove = soldier_move_run; int a = 2; } else { self.monsterinfo.currentmove = soldier_move_start_run; } return true; } }; static EntPainAdapter soldier_pain = new EntPainAdapter() { public String getID(){ return "soldier_pain"; } public void pain(edict_t self, edict_t other, float kick, int damage) { float r; int n; if (self.health < (self.max_health / 2)) self.s.skinnum |= 1; if (GameBase.level.time < self.pain_debounce_time) { if ((self.velocity[2] > 100) && ((self.monsterinfo.currentmove == soldier_move_pain1) || (self.monsterinfo.currentmove == soldier_move_pain2) || (self.monsterinfo.currentmove == soldier_move_pain3))) self.monsterinfo.currentmove = soldier_move_pain4; return; } self.pain_debounce_time = GameBase.level.time + 3; n = self.s.skinnum | 1; if (n == 1) GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_pain_light, 1, Defines.ATTN_NORM, 0); else if (n == 3) GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_pain, 1, Defines.ATTN_NORM, 0); else GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_pain_ss, 1, Defines.ATTN_NORM, 0); if (self.velocity[2] > 100) { self.monsterinfo.currentmove = soldier_move_pain4; return; } if (GameBase.skill.value == 3) return; // no pain anims in nightmare r = Lib.random(); if (r < 0.33) self.monsterinfo.currentmove = soldier_move_pain1; else if (r < 0.66) self.monsterinfo.currentmove = soldier_move_pain2; else self.monsterinfo.currentmove = soldier_move_pain3; } }; // // SIGHT // static EntThinkAdapter soldier_duck_up = new EntThinkAdapter() { public String getID(){ return "soldier_duck_up"; } public boolean think(edict_t self) { self.monsterinfo.aiflags &= ~Defines.AI_DUCKED; self.maxs[2] += 32; self.takedamage = Defines.DAMAGE_AIM; GameBase.gi.linkentity(self); return true; } }; static EntInteractAdapter soldier_sight = new EntInteractAdapter() { public String getID(){ return "soldier_sight"; } public boolean interact(edict_t self, edict_t other) { if (Lib.random() < 0.5) GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_sight1, 1, Defines.ATTN_NORM, 0); else GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_sight2, 1, Defines.ATTN_NORM, 0); if ((GameBase.skill.value > 0) && (GameUtil.range(self, self.enemy) >= Defines.RANGE_MID)) { if (Lib.random() > 0.5) self.monsterinfo.currentmove = soldier_move_attack6; } return true; } }; // // SPAWN // static EntThinkAdapter SP_monster_soldier_x = new EntThinkAdapter() { public String getID(){ return "SP_monster_soldier_x"; } public boolean think(edict_t self) { self.s.modelindex = GameBase.gi .modelindex("models/monsters/soldier/tris.md2"); self.monsterinfo.scale = MODEL_SCALE; Math3D.VectorSet(self.mins, -16, -16, -24); Math3D.VectorSet(self.maxs, 16, 16, 32); self.movetype = Defines.MOVETYPE_STEP; self.solid = Defines.SOLID_BBOX; sound_idle = GameBase.gi.soundindex("soldier/solidle1.wav"); sound_sight1 = GameBase.gi.soundindex("soldier/solsght1.wav"); sound_sight2 = GameBase.gi.soundindex("soldier/solsrch1.wav"); sound_cock = GameBase.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; GameBase.gi.linkentity(self); self.monsterinfo.stand.think(self); GameAI.walkmonster_start.think(self); return true; } }; /* * QUAKED monster_soldier_light (1 .5 0) (-16 -16 -24) (16 16 32) Ambush * Trigger_Spawn Sight */ public static EntThinkAdapter SP_monster_soldier_light = new EntThinkAdapter() { public String getID(){ return "SP_monster_soldier_light"; } public boolean think(edict_t self) { if (GameBase.deathmatch.value != 0) { GameUtil.G_FreeEdict(self); return true; } SP_monster_soldier_x.think(self); sound_pain_light = GameBase.gi.soundindex("soldier/solpain2.wav"); sound_death_light = GameBase.gi.soundindex("soldier/soldeth2.wav"); GameBase.gi.modelindex("models/objects/laser/tris.md2"); GameBase.gi.soundindex("misc/lasfly.wav"); GameBase.gi.soundindex("soldier/solatck2.wav"); self.s.skinnum = 0; self.health = 20; self.gib_health = -30; return true; } }; /* * QUAKED monster_soldier (1 .5 0) (-16 -16 -24) (16 16 32) Ambush * Trigger_Spawn Sight */ public static EntThinkAdapter SP_monster_soldier = new EntThinkAdapter() { public String getID(){ return "SP_monster_soldier"; } public boolean think(edict_t self) { Com.DPrintf("Spawning a soldier at " + self.s.origin[0] + " " + self.s.origin[1] + " " + self.s.origin[2] + " " + "\n"); if (GameBase.deathmatch.value != 0) { GameUtil.G_FreeEdict(self); return true; } SP_monster_soldier_x.think(self); sound_pain = GameBase.gi.soundindex("soldier/solpain1.wav"); sound_death = GameBase.gi.soundindex("soldier/soldeth1.wav"); GameBase.gi.soundindex("soldier/solatck1.wav"); self.s.skinnum = 2; self.health = 30; self.gib_health = -30; return true; } }; /** * QUAKED monster_soldier_ss (1 .5 0) (-16 -16 -24) (16 16 32) Ambush * Trigger_Spawn Sight */ public static EntThinkAdapter SP_monster_soldier_ss = new EntThinkAdapter() { public String getID(){ return "SP_monster_soldier_ss"; } public boolean think(edict_t self) { if (GameBase.deathmatch.value != 0) { GameUtil.G_FreeEdict(self); return true; } SP_monster_soldier_x.think(self); sound_pain_ss = GameBase.gi.soundindex("soldier/solpain3.wav"); sound_death_ss = GameBase.gi.soundindex("soldier/soldeth3.wav"); GameBase.gi.soundindex("soldier/solatck3.wav"); self.s.skinnum = 4; self.health = 40; self.gib_health = -30; return true; } }; static void soldier_fire(edict_t self, int flash_number) { float[] start = { 0, 0, 0 }; float[] forward = { 0, 0, 0 }, right = { 0, 0, 0 }, up = { 0, 0, 0 }; float[] aim = { 0, 0, 0 }; float[] dir = { 0, 0, 0 }; float[] end = { 0, 0, 0 }; float r, u; int flash_index; if (self.s.skinnum < 2) flash_index = blaster_flash[flash_number]; else if (self.s.skinnum < 4) flash_index = shotgun_flash[flash_number]; else flash_index = machinegun_flash[flash_number]; Math3D.AngleVectors(self.s.angles, forward, right, null); Math3D.G_ProjectSource(self.s.origin, M_Flash.monster_flash_offset[flash_index], forward, right, start); if (flash_number == 5 || flash_number == 6) { Math3D.VectorCopy(forward, aim); } else { Math3D.VectorCopy(self.enemy.s.origin, end); end[2] += self.enemy.viewheight; Math3D.VectorSubtract(end, start, aim); Math3D.vectoangles(aim, dir); Math3D.AngleVectors(dir, forward, right, up); r = Lib.crandom() * 1000; u = Lib.crandom() * 500; Math3D.VectorMA(start, 8192, forward, end); Math3D.VectorMA(end, r, right, end); Math3D.VectorMA(end, u, up, end); Math3D.VectorSubtract(end, start, aim); Math3D.VectorNormalize(aim); } if (self.s.skinnum <= 1) { Monster.monster_fire_blaster(self, start, aim, 5, 600, flash_index, Defines.EF_BLASTER); } else if (self.s.skinnum <= 3) { Monster.monster_fire_shotgun(self, start, aim, 2, 1, Defines.DEFAULT_SHOTGUN_HSPREAD, Defines.DEFAULT_SHOTGUN_VSPREAD, Defines.DEFAULT_SHOTGUN_COUNT, flash_index); } else { if (0 == (self.monsterinfo.aiflags & Defines.AI_HOLD_FRAME))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -