📄 m_infantry.java
字号:
Math3D.VectorSubtract(self.s.angles, aimangles[flash_number - Defines.MZ2_INFANTRY_MACHINEGUN_2], vec); Math3D.AngleVectors(vec, forward, null, null); } Monster.monster_fire_bullet(self, start, forward, 3, 4, Defines.DEFAULT_BULLET_HSPREAD, Defines.DEFAULT_BULLET_VSPREAD, flash_number); return true; } }; static EntInteractAdapter infantry_sight = new EntInteractAdapter() { public String getID() { return "infantry_sight"; } public boolean interact(edict_t self, edict_t other) { GameBase.gi.sound(self, Defines.CHAN_BODY, sound_sight, 1, Defines.ATTN_NORM, 0); return true; } }; /// static EntThinkAdapter infantry_dead = new EntThinkAdapter() { public String getID() { return "infantry_dead"; } public boolean think(edict_t self) { Math3D.VectorSet(self.mins, -16, -16, -24); Math3D.VectorSet(self.maxs, 16, 16, -8); self.movetype = Defines.MOVETYPE_TOSS; self.svflags |= Defines.SVF_DEADMONSTER; GameBase.gi.linkentity(self); M.M_FlyCheck.think(self); return true; } }; static mframe_t infantry_frames_death1[] = new mframe_t[] { new mframe_t(GameAI.ai_move, -4, null), new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, -1, null), new mframe_t(GameAI.ai_move, -4, null), new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, -1, null), new mframe_t(GameAI.ai_move, 3, null), new mframe_t(GameAI.ai_move, 1, null), new mframe_t(GameAI.ai_move, 1, null), new mframe_t(GameAI.ai_move, -2, null), new mframe_t(GameAI.ai_move, 2, null), new mframe_t(GameAI.ai_move, 2, null), new mframe_t(GameAI.ai_move, 9, null), new mframe_t(GameAI.ai_move, 9, null), new mframe_t(GameAI.ai_move, 5, null), new mframe_t(GameAI.ai_move, -3, null), new mframe_t(GameAI.ai_move, -3, null) }; static mmove_t infantry_move_death1 = new mmove_t(FRAME_death101, FRAME_death120, infantry_frames_death1, infantry_dead); // Off with his head static mframe_t infantry_frames_death2[] = new mframe_t[] { new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, 1, null), new mframe_t(GameAI.ai_move, 5, null), new mframe_t(GameAI.ai_move, -1, null), new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, 1, null), new mframe_t(GameAI.ai_move, 1, null), new mframe_t(GameAI.ai_move, 4, null), new mframe_t(GameAI.ai_move, 3, null), new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, -2, InfantryMachineGun), new mframe_t(GameAI.ai_move, -2, InfantryMachineGun), new mframe_t(GameAI.ai_move, -3, InfantryMachineGun), new mframe_t(GameAI.ai_move, -1, InfantryMachineGun), new mframe_t(GameAI.ai_move, -2, InfantryMachineGun), new mframe_t(GameAI.ai_move, 0, InfantryMachineGun), new mframe_t(GameAI.ai_move, 2, InfantryMachineGun), new mframe_t(GameAI.ai_move, 2, InfantryMachineGun), new mframe_t(GameAI.ai_move, 3, InfantryMachineGun), new mframe_t(GameAI.ai_move, -10, InfantryMachineGun), new mframe_t(GameAI.ai_move, -7, InfantryMachineGun), new mframe_t(GameAI.ai_move, -8, InfantryMachineGun), new mframe_t(GameAI.ai_move, -6, null), new mframe_t(GameAI.ai_move, 4, null), new mframe_t(GameAI.ai_move, 0, null) }; static mmove_t infantry_move_death2 = new mmove_t(FRAME_death201, FRAME_death225, infantry_frames_death2, infantry_dead); static mframe_t infantry_frames_death3[] = new mframe_t[] { new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, -6, null), new mframe_t(GameAI.ai_move, -11, null), new mframe_t(GameAI.ai_move, -3, null), new mframe_t(GameAI.ai_move, -11, null), new mframe_t(GameAI.ai_move, 0, null), new mframe_t(GameAI.ai_move, 0, null) }; static mmove_t infantry_move_death3 = new mmove_t(FRAME_death301, FRAME_death309, infantry_frames_death3, infantry_dead); public static EntDieAdapter infantry_die = new EntDieAdapter() { public String getID() { return "infantry_die"; } public void die(edict_t self, edict_t inflictor, edict_t attacker, int damage, float[] point) { int n; // check for gib if (self.health <= self.gib_health) { GameBase.gi .sound(self, Defines.CHAN_VOICE, GameBase.gi .soundindex("misc/udeath.wav"), 1, Defines.ATTN_NORM, 0); for (n = 0; n < 2; n++) GameMisc.ThrowGib(self, "models/objects/gibs/bone/tris.md2", damage, Defines.GIB_ORGANIC); for (n = 0; n < 4; n++) GameMisc.ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, Defines.GIB_ORGANIC); GameMisc.ThrowHead(self, "models/objects/gibs/head2/tris.md2", damage, Defines.GIB_ORGANIC); self.deadflag = Defines.DEAD_DEAD; return; } if (self.deadflag == Defines.DEAD_DEAD) return; // regular death self.deadflag = Defines.DEAD_DEAD; self.takedamage = Defines.DAMAGE_YES; n = Lib.rand() % 3; if (n == 0) { self.monsterinfo.currentmove = infantry_move_death1; GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_die2, 1, Defines.ATTN_NORM, 0); } else if (n == 1) { self.monsterinfo.currentmove = infantry_move_death2; GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_die1, 1, Defines.ATTN_NORM, 0); } else { self.monsterinfo.currentmove = infantry_move_death3; GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_die2, 1, Defines.ATTN_NORM, 0); } } }; static EntThinkAdapter infantry_duck_down = new EntThinkAdapter() { public String getID() { return "infantry_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 infantry_duck_hold = new EntThinkAdapter() { public String getID() { return "infantry_duck_hold"; } public boolean think(edict_t self) { if (GameBase.level.time >= self.monsterinfo.pausetime) self.monsterinfo.aiflags &= ~Defines.AI_HOLD_FRAME; else self.monsterinfo.aiflags |= Defines.AI_HOLD_FRAME; return true; } }; static EntThinkAdapter infantry_duck_up = new EntThinkAdapter() { public String getID() { return "infantry_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 mframe_t infantry_frames_duck[] = new mframe_t[] { new mframe_t(GameAI.ai_move, -2, infantry_duck_down), new mframe_t(GameAI.ai_move, -5, infantry_duck_hold), new mframe_t(GameAI.ai_move, 3, null), new mframe_t(GameAI.ai_move, 4, infantry_duck_up), new mframe_t(GameAI.ai_move, 0, null) }; static mmove_t infantry_move_duck = new mmove_t(FRAME_duck01, FRAME_duck05, infantry_frames_duck, infantry_run); static EntDodgeAdapter infantry_dodge = new EntDodgeAdapter() { public String getID() { return "infantry_dodge"; } public void dodge(edict_t self, edict_t attacker, float eta) { if (Lib.random() > 0.25) return; if (null == self.enemy) self.enemy = attacker; self.monsterinfo.currentmove = infantry_move_duck; } }; static EntThinkAdapter infantry_cock_gun = new EntThinkAdapter() { public String getID() { return "infantry_cock_gun"; } public boolean think(edict_t self) { int n; GameBase.gi.sound(self, Defines.CHAN_WEAPON, sound_weapon_cock, 1, Defines.ATTN_NORM, 0); n = (Lib.rand() & 15) + 3 + 7; self.monsterinfo.pausetime = GameBase.level.time + n * Defines.FRAMETIME; return true; } }; static EntThinkAdapter infantry_fire = new EntThinkAdapter() { public String getID() { return "infantry_fire"; } public boolean think(edict_t self) { InfantryMachineGun.think(self); if (GameBase.level.time >= self.monsterinfo.pausetime) self.monsterinfo.aiflags &= ~Defines.AI_HOLD_FRAME; else self.monsterinfo.aiflags |= Defines.AI_HOLD_FRAME; return true; } }; static mframe_t infantry_frames_attack1[] = new mframe_t[] { new mframe_t(GameAI.ai_charge, 4, null), new mframe_t(GameAI.ai_charge, -1, null), new mframe_t(GameAI.ai_charge, -1, null), new mframe_t(GameAI.ai_charge, 0, infantry_cock_gun), new mframe_t(GameAI.ai_charge, -1, null), new mframe_t(GameAI.ai_charge, 1, null), new mframe_t(GameAI.ai_charge, 1, null), new mframe_t(GameAI.ai_charge, 2, null), new mframe_t(GameAI.ai_charge, -2, null), new mframe_t(GameAI.ai_charge, -3, null), new mframe_t(GameAI.ai_charge, 1, infantry_fire), new mframe_t(GameAI.ai_charge, 5, null), new mframe_t(GameAI.ai_charge, -1, null), new mframe_t(GameAI.ai_charge, -2, null), new mframe_t(GameAI.ai_charge, -3, null) }; static mmove_t infantry_move_attack1 = new mmove_t(FRAME_attak101, FRAME_attak115, infantry_frames_attack1, infantry_run); static EntThinkAdapter infantry_swing = new EntThinkAdapter() { public String getID() { return "infantry_swing"; } public boolean think(edict_t self) { GameBase.gi.sound(self, Defines.CHAN_WEAPON, sound_punch_swing, 1, Defines.ATTN_NORM, 0); return true; } }; static EntThinkAdapter infantry_smack = new EntThinkAdapter() { public String getID() { return "infantry_smack"; } public boolean think(edict_t self) { float[] aim = { 0, 0, 0 }; Math3D.VectorSet(aim, Defines.MELEE_DISTANCE, 0, 0); if (GameWeapon.fire_hit(self, aim, (5 + (Lib.rand() % 5)), 50)) GameBase.gi.sound(self, Defines.CHAN_WEAPON, sound_punch_hit, 1, Defines.ATTN_NORM, 0); return true; } }; static mframe_t infantry_frames_attack2[] = new mframe_t[] { new mframe_t(GameAI.ai_charge, 3, null), new mframe_t(GameAI.ai_charge, 6, null), new mframe_t(GameAI.ai_charge, 0, infantry_swing), new mframe_t(GameAI.ai_charge, 8, null), new mframe_t(GameAI.ai_charge, 5, null), new mframe_t(GameAI.ai_charge, 8, infantry_smack), new mframe_t(GameAI.ai_charge, 6, null), new mframe_t(GameAI.ai_charge, 3, null), }; static mmove_t infantry_move_attack2 = new mmove_t(FRAME_attak201, FRAME_attak208, infantry_frames_attack2, infantry_run); static EntThinkAdapter infantry_attack = new EntThinkAdapter() { public String getID() { return "infantry_attack"; } public boolean think(edict_t self) { if (GameUtil.range(self, self.enemy) == Defines.RANGE_MELEE) self.monsterinfo.currentmove = infantry_move_attack2; else self.monsterinfo.currentmove = infantry_move_attack1; return true; } }; /* * QUAKED monster_infantry (1 .5 0) (-16 -16 -24) (16 16 32) Ambush * Trigger_Spawn Sight */ public static void SP_monster_infantry(edict_t self) { if (GameBase.deathmatch.value != 0) { GameUtil.G_FreeEdict(self); return; } sound_pain1 = GameBase.gi.soundindex("infantry/infpain1.wav"); sound_pain2 = GameBase.gi.soundindex("infantry/infpain2.wav"); sound_die1 = GameBase.gi.soundindex("infantry/infdeth1.wav"); sound_die2 = GameBase.gi.soundindex("infantry/infdeth2.wav"); sound_gunshot = GameBase.gi.soundindex("infantry/infatck1.wav"); sound_weapon_cock = GameBase.gi.soundindex("infantry/infatck3.wav"); sound_punch_swing = GameBase.gi.soundindex("infantry/infatck2.wav"); sound_punch_hit = GameBase.gi.soundindex("infantry/melee2.wav"); sound_sight = GameBase.gi.soundindex("infantry/infsght1.wav"); sound_search = GameBase.gi.soundindex("infantry/infsrch1.wav"); sound_idle = GameBase.gi.soundindex("infantry/infidle1.wav"); self.movetype = Defines.MOVETYPE_STEP; self.solid = Defines.SOLID_BBOX; self.s.modelindex = GameBase.gi .modelindex("models/monsters/infantry/tris.md2"); Math3D.VectorSet(self.mins, -16, -16, -24); Math3D.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; GameBase.gi.linkentity(self); self.monsterinfo.currentmove = infantry_move_stand; self.monsterinfo.scale = MODEL_SCALE; GameAI.walkmonster_start.think(self); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -