⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m_boss32.java

📁 Jake2是一个Java 3D游戏引擎.
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    };    static EntPainAdapter makron_pain = new EntPainAdapter() {    	public String getID() { return "makron_pain"; }        public void pain(edict_t self, edict_t other, float kick, int damage) {            if (self.health < (self.max_health / 2))                self.s.skinnum = 1;            if (GameBase.level.time < self.pain_debounce_time)                return;            // Lessen the chance of him going into his pain frames            if (damage <= 25)                if (Lib.random() < 0.2)                    return;            self.pain_debounce_time = GameBase.level.time + 3;            if (GameBase.skill.value == 3)                return; // no pain anims in nightmare            if (damage <= 40) {                GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_pain4, 1,                        Defines.ATTN_NONE, 0);                self.monsterinfo.currentmove = makron_move_pain4;            } else if (damage <= 110) {                GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_pain5, 1,                        Defines.ATTN_NONE, 0);                self.monsterinfo.currentmove = makron_move_pain5;            } else {                if (damage <= 150)                    if (Lib.random() <= 0.45) {                        GameBase.gi.sound(self, Defines.CHAN_VOICE,                                sound_pain6, 1, Defines.ATTN_NONE, 0);                        self.monsterinfo.currentmove = makron_move_pain6;                    } else if (Lib.random() <= 0.35) {                        GameBase.gi.sound(self, Defines.CHAN_VOICE,                                sound_pain6, 1, Defines.ATTN_NONE, 0);                        self.monsterinfo.currentmove = makron_move_pain6;                    }            }        }    };    static EntInteractAdapter makron_sight = new EntInteractAdapter() {    	public String getID() { return "makron_sight"; }        public boolean interact(edict_t self, edict_t other) {            self.monsterinfo.currentmove = makron_move_sight;            return true;        }    };    static EntThinkAdapter makron_attack = new EntThinkAdapter() {    	public String getID() { return "makron_attack"; }        public boolean think(edict_t self) {            float[] vec = { 0, 0, 0 };            float range;            float r;            r = Lib.random();            Math3D.VectorSubtract(self.enemy.s.origin, self.s.origin, vec);            range = Math3D.VectorLength(vec);            if (r <= 0.3)                self.monsterinfo.currentmove = makron_move_attack3;            else if (r <= 0.6)                self.monsterinfo.currentmove = makron_move_attack4;            else                self.monsterinfo.currentmove = makron_move_attack5;            return true;        }    };    /*     * --- Makron Torso. This needs to be spawned in ---     */    static EntThinkAdapter makron_torso_think = new EntThinkAdapter() {    	public String getID() { return "makron_torso_think"; }        public boolean think(edict_t self) {            if (++self.s.frame < 365)                self.nextthink = GameBase.level.time + Defines.FRAMETIME;            else {                self.s.frame = 346;                self.nextthink = GameBase.level.time + Defines.FRAMETIME;            }            return true;        }    };    static EntThinkAdapter makron_torso = new EntThinkAdapter() {    	public String getID() { return "makron_torso"; }        public boolean think(edict_t ent) {            ent.movetype = Defines.MOVETYPE_NONE;            ent.solid = Defines.SOLID_NOT;            Math3D.VectorSet(ent.mins, -8, -8, 0);            Math3D.VectorSet(ent.maxs, 8, 8, 8);            ent.s.frame = 346;            ent.s.modelindex = GameBase.gi                    .modelindex("models/monsters/boss3/rider/tris.md2");            ent.think = makron_torso_think;            ent.nextthink = GameBase.level.time + 2 * Defines.FRAMETIME;            ent.s.sound = GameBase.gi.soundindex("makron/spine.wav");            GameBase.gi.linkentity(ent);            return true;        }    };    static EntDieAdapter makron_die = new EntDieAdapter() {    	public String getID() { return "makron_die"; }        public void die(edict_t self, edict_t inflictor, edict_t attacker,                int damage, float[] point) {            edict_t tempent;            int n;            self.s.sound = 0;            // 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 < 1 /* 4 */; n++)                    GameMisc.ThrowGib(self,                            "models/objects/gibs/sm_meat/tris.md2", damage,                            Defines.GIB_ORGANIC);                for (n = 0; n < 4; n++)                    GameMisc.ThrowGib(self,                            "models/objects/gibs/sm_metal/tris.md2", damage,                            Defines.GIB_METALLIC);                GameMisc.ThrowHead(self, "models/objects/gibs/gear/tris.md2",                        damage, Defines.GIB_METALLIC);                self.deadflag = Defines.DEAD_DEAD;                return;            }            if (self.deadflag == Defines.DEAD_DEAD)                return;            //	   regular death            GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_death, 1,                    Defines.ATTN_NONE, 0);            self.deadflag = Defines.DEAD_DEAD;            self.takedamage = Defines.DAMAGE_YES;            tempent = GameUtil.G_Spawn();            Math3D.VectorCopy(self.s.origin, tempent.s.origin);            Math3D.VectorCopy(self.s.angles, tempent.s.angles);            tempent.s.origin[1] -= 84;            makron_torso.think(tempent);            self.monsterinfo.currentmove = makron_move_death2;        }    };    static EntThinkAdapter Makron_CheckAttack = new EntThinkAdapter() {    	public String getID() { return "Makron_CheckAttack"; }        public boolean think(edict_t self) {            float[] spot1 = { 0, 0, 0 }, spot2 = { 0, 0, 0 };            float[] temp = { 0, 0, 0 };            float chance;            trace_t tr;            boolean enemy_infront;            int enemy_range;            float enemy_yaw;            if (self.enemy.health > 0) {                // see if any entities are in the way of the shot                Math3D.VectorCopy(self.s.origin, spot1);                spot1[2] += self.viewheight;                Math3D.VectorCopy(self.enemy.s.origin, spot2);                spot2[2] += self.enemy.viewheight;                tr = GameBase.gi.trace(spot1, null, null, spot2, self,                        Defines.CONTENTS_SOLID | Defines.CONTENTS_MONSTER                                | Defines.CONTENTS_SLIME                                | Defines.CONTENTS_LAVA);                // do we have a clear shot?                if (tr.ent != self.enemy)                    return false;            }            enemy_infront = GameUtil.infront(self, self.enemy);            enemy_range = GameUtil.range(self, self.enemy);            Math3D.VectorSubtract(self.enemy.s.origin, self.s.origin, temp);            enemy_yaw = Math3D.vectoyaw(temp);            self.ideal_yaw = enemy_yaw;            // melee attack            if (enemy_range == Defines.RANGE_MELEE) {                if (self.monsterinfo.melee != null)                    self.monsterinfo.attack_state = Defines.AS_MELEE;                else                    self.monsterinfo.attack_state = Defines.AS_MISSILE;                return true;            }            //	   missile attack            if (null != self.monsterinfo.attack)                return false;            if (GameBase.level.time < self.monsterinfo.attack_finished)                return false;            if (enemy_range == Defines.RANGE_FAR)                return false;            if ((self.monsterinfo.aiflags & Defines.AI_STAND_GROUND) != 0) {                chance = 0.4f;            } else if (enemy_range == Defines.RANGE_MELEE) {                chance = 0.8f;            } else if (enemy_range == Defines.RANGE_NEAR) {                chance = 0.4f;            } else if (enemy_range == Defines.RANGE_MID) {                chance = 0.2f;            } else {                return false;            }            if (Lib.random() < chance) {                self.monsterinfo.attack_state = Defines.AS_MISSILE;                self.monsterinfo.attack_finished = GameBase.level.time + 2                        * Lib.random();                return true;            }            if ((self.flags & Defines.FL_FLY) != 0) {                if (Lib.random() < 0.3)                    self.monsterinfo.attack_state = Defines.AS_SLIDING;                else                    self.monsterinfo.attack_state = Defines.AS_STRAIGHT;            }            return false;        }    };    static mframe_t makron_frames_attack3[] = new mframe_t[] {            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, makronBFG),            // FIXME: BFG Attack here            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, 0, null) };    static mmove_t makron_move_attack3 = new mmove_t(FRAME_attak301,            FRAME_attak308, makron_frames_attack3, makron_run);    static mframe_t makron_frames_attack4[] = new mframe_t[] {            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster),            // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            new mframe_t(GameAI.ai_move, 0, MakronHyperblaster), // fire            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, 0, null),            new mframe_t(GameAI.ai_move, 0, null) };    static mmove_t makron_move_attack4 = new mmove_t(FRAME_attak401,            FRAME_attak426, makron_frames_attack4, makron_run);    static mframe_t makron_frames_attack5[] = new mframe_t[] {            new mframe_t(GameAI.ai_charge, 0, makron_prerailgun),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, null),            new mframe_t(GameAI.ai_charge, 0, MakronSaveloc),            new mframe_t(GameAI.ai_move, 0, MakronRailgun),            // Fire railgun            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, 0, 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) };    static mmove_t makron_move_attack5 = new mmove_t(FRAME_attak501,            FRAME_attak516, makron_frames_attack5, makron_run);    /*     * ================= MakronSpawn     *      * =================     */    static EntThinkAdapter MakronSpawn = new EntThinkAdapter() {    	public String getID() { return "MakronSpawn"; }        public boolean think(edict_t self) {            float[] vec = { 0, 0, 0 };            edict_t player;            SP_monster_makron(self);            // jump at player            player = GameBase.level.sight_client;            if (player == null)                return true;            Math3D.VectorSubtract(player.s.origin, self.s.origin, vec);            self.s.angles[Defines.YAW] = Math3D.vectoyaw(vec);            Math3D.VectorNormalize(vec);            Math3D.VectorMA(Globals.vec3_origin, 400, vec, self.velocity);            self.velocity[2] = 200;            self.groundentity = null;            return true;        }    };    static EntThinkAdapter MakronToss = new EntThinkAdapter() {    	public String getID() { return "MakronToss"; }        public boolean think(edict_t self) {            edict_t ent;            ent = GameUtil.G_Spawn();            ent.nextthink = GameBase.level.time + 0.8f;            ent.think = MakronSpawn;            ent.target = self.target;            Math3D.VectorCopy(self.s.origin, ent.s.origin);            return true;        }    };    //    //	   monster_makron    //    static void MakronPrecache() {        sound_pain4 = GameBase.gi.soundindex("makron/pain3.wav");        sound_pain5 = GameBase.gi.soundindex("makron/pain2.wav");        sound_pain6 = GameBase.gi.soundindex("makron/pain1.wav");        sound_death = GameBase.gi.soundindex("makron/death.wav");        sound_step_left = GameBase.gi.soundindex("makron/step1.wav");        sound_step_right = GameBase.gi.soundindex("makron/step2.wav");        sound_attack_bfg = GameBase.gi.soundindex("makron/bfg_fire.wav");        sound_brainsplorch = GameBase.gi.soundindex("makron/brain1.wav");        sound_prerailgun = GameBase.gi.soundindex("makron/rail_up.wav");        sound_popup = GameBase.gi.soundindex("makron/popup.wav");        sound_taunt1 = GameBase.gi.soundindex("makron/voice4.wav");        sound_taunt2 = GameBase.gi.soundindex("makron/voice3.wav");        sound_taunt3 = GameBase.gi.soundindex("makron/voice.wav");        sound_hit = GameBase.gi.soundindex("makron/bhit.wav");        GameBase.gi.modelindex("models/monsters/boss3/rider/tris.md2");    }    /*     * QUAKED monster_makron (1 .5 0) (-30 -30 0) (30 30 90) Ambush     * Trigger_Spawn Sight     */    static void SP_monster_makron(edict_t self) {        if (GameBase.deathmatch.value != 0) {            GameUtil.G_FreeEdict(self);            return;        }        MakronPrecache();        self.movetype = Defines.MOVETYPE_STEP;        self.solid = Defines.SOLID_BBOX;        self.s.modelindex = GameBase.gi                .modelindex("models/monsters/boss3/rider/tris.md2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -