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

📄 m_boss2.java

📁 JAKE2用JAVA写的queck2的3D游戏开发引擎
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    public final static int FRAME_death31 = 161;    public final static int FRAME_death32 = 162;    public final static int FRAME_death33 = 163;    public final static int FRAME_death34 = 164;    public final static int FRAME_death35 = 165;    public final static int FRAME_death36 = 166;    public final static int FRAME_death37 = 167;    public final static int FRAME_death38 = 168;    public final static int FRAME_death39 = 169;    public final static int FRAME_death40 = 170;    public final static int FRAME_death41 = 171;    public final static int FRAME_death42 = 172;    public final static int FRAME_death43 = 173;    public final static int FRAME_death44 = 174;    public final static int FRAME_death45 = 175;    public final static int FRAME_death46 = 176;    public final static int FRAME_death47 = 177;    public final static int FRAME_death48 = 178;    public final static int FRAME_death49 = 179;    public final static int FRAME_death50 = 180;    public final static float MODEL_SCALE = 1.000000f;    static int sound_pain1;    static int sound_pain2;    static int sound_pain3;    static int sound_death;    static int sound_search1;    static EntThinkAdapter boss2_stand = new EntThinkAdapter() {    	public String getID() { return "boss2_stand"; }        public boolean think(edict_t self) {            self.monsterinfo.currentmove = boss2_move_stand;            return true;        }    };    static EntThinkAdapter boss2_run = new EntThinkAdapter() {    	public String getID() { return "boss2_run"; }        public boolean think(edict_t self) {            if ((self.monsterinfo.aiflags & Defines.AI_STAND_GROUND) != 0)                self.monsterinfo.currentmove = boss2_move_stand;            else                self.monsterinfo.currentmove = boss2_move_run;            return true;        }    };    static EntThinkAdapter boss2_walk = new EntThinkAdapter() {    	public String getID() { return "boss2_walk"; }        public boolean think(edict_t self) {            self.monsterinfo.currentmove = boss2_move_stand;            self.monsterinfo.currentmove = boss2_move_walk;            return true;        }    };    static EntThinkAdapter boss2_attack = new EntThinkAdapter() {    	public String getID() { return "boss2_attack"; }        public boolean think(edict_t self) {            float[] vec = { 0, 0, 0 };            float range;            Math3D.VectorSubtract(self.enemy.s.origin, self.s.origin, vec);            range = Math3D.VectorLength(vec);            if (range <= 125) {                self.monsterinfo.currentmove = boss2_move_attack_pre_mg;            } else {                if (Lib.random() <= 0.6)                    self.monsterinfo.currentmove = boss2_move_attack_pre_mg;                else                    self.monsterinfo.currentmove = boss2_move_attack_rocket;            }            return true;        }    };    static EntThinkAdapter boss2_attack_mg = new EntThinkAdapter() {    	public String getID() { return "boss2_attack_mg"; }        public boolean think(edict_t self) {            self.monsterinfo.currentmove = boss2_move_attack_mg;            return true;        }    };    static EntThinkAdapter boss2_reattack_mg = new EntThinkAdapter() {    	public String getID() { return "boss2_reattack_mg"; }        public boolean think(edict_t self) {            if (GameUtil.infront(self, self.enemy))                if (Lib.random() <= 0.7)                    self.monsterinfo.currentmove = boss2_move_attack_mg;                else                    self.monsterinfo.currentmove = boss2_move_attack_post_mg;            else                self.monsterinfo.currentmove = boss2_move_attack_post_mg;            return true;        }    };    static EntPainAdapter boss2_pain = new EntPainAdapter() {    	public String getID() { return "boss2_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;            self.pain_debounce_time = GameBase.level.time + 3;            //	   American wanted these at no attenuation            if (damage < 10) {                GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_pain3, 1,                        Defines.ATTN_NONE, 0);                self.monsterinfo.currentmove = boss2_move_pain_light;            } else if (damage < 30) {                GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_pain1, 1,                        Defines.ATTN_NONE, 0);                self.monsterinfo.currentmove = boss2_move_pain_light;            } else {                GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_pain2, 1,                        Defines.ATTN_NONE, 0);                self.monsterinfo.currentmove = boss2_move_pain_heavy;            }        }    };    static EntThinkAdapter boss2_dead = new EntThinkAdapter() {    	public String getID() { return "boss2_dead"; }        public boolean think(edict_t self) {            Math3D.VectorSet(self.mins, -56, -56, 0);            Math3D.VectorSet(self.maxs, 56, 56, 80);            self.movetype = Defines.MOVETYPE_TOSS;            self.svflags |= Defines.SVF_DEADMONSTER;            self.nextthink = 0;            GameBase.gi.linkentity(self);            return true;        }    };    static EntDieAdapter boss2_die = new EntDieAdapter() {    	public String getID() { return "boss2_die"; }        public void die(edict_t self, edict_t inflictor, edict_t attacker,                int damage, float[] point) {            GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_death, 1,                    Defines.ATTN_NONE, 0);            self.deadflag = Defines.DEAD_DEAD;            self.takedamage = Defines.DAMAGE_NO;            self.count = 0;            self.monsterinfo.currentmove = boss2_move_death;        }    };    static EntThinkAdapter Boss2_CheckAttack = new EntThinkAdapter() {    	public String getID() { return "Boss2_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 (self.monsterinfo.attack == null)                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.8f;            } else if (enemy_range == Defines.RANGE_MID) {                chance = 0.8f;            } 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 EntThinkAdapter boss2_search = new EntThinkAdapter() {    	public String getID() { return "boss2_search"; }        public boolean think(edict_t self) {            if (Lib.random() < 0.5)                GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_search1, 1,                        Defines.ATTN_NONE, 0);            return true;        }    };    static EntThinkAdapter Boss2Rocket = new EntThinkAdapter() {    	public String getID() { return "Boss2Rocket"; }        public boolean think(edict_t self) {            float[] forward = { 0, 0, 0 }, right = { 0, 0, 0 };            float[] start = { 0, 0, 0 };            float[] dir = { 0, 0, 0 };            float[] vec = { 0, 0, 0 };            Math3D.AngleVectors(self.s.angles, forward, right, null);            //	  1            Math3D.G_ProjectSource(self.s.origin,                    M_Flash.monster_flash_offset[Defines.MZ2_BOSS2_ROCKET_1],                    forward, right, start);            Math3D.VectorCopy(self.enemy.s.origin, vec);            vec[2] += self.enemy.viewheight;            Math3D.VectorSubtract(vec, start, dir);            Math3D.VectorNormalize(dir);            Monster.monster_fire_rocket(self, start, dir, 50, 500,                    Defines.MZ2_BOSS2_ROCKET_1);            //	  2            Math3D.G_ProjectSource(self.s.origin,                    M_Flash.monster_flash_offset[Defines.MZ2_BOSS2_ROCKET_2],                    forward, right, start);            Math3D.VectorCopy(self.enemy.s.origin, vec);            vec[2] += self.enemy.viewheight;            Math3D.VectorSubtract(vec, start, dir);            Math3D.VectorNormalize(dir);            Monster.monster_fire_rocket(self, start, dir, 50, 500,                    Defines.MZ2_BOSS2_ROCKET_2);            //	  3            Math3D.G_ProjectSource(self.s.origin,                    M_Flash.monster_flash_offset[Defines.MZ2_BOSS2_ROCKET_3],                    forward, right, start);            Math3D.VectorCopy(self.enemy.s.origin, vec);            vec[2] += self.enemy.viewheight;            Math3D.VectorSubtract(vec, start, dir);            Math3D.VectorNormalize(dir);            Monster.monster_fire_rocket(self, start, dir, 50, 500,                    Defines.MZ2_BOSS2_ROCKET_3);            //	  4            Math3D.G_ProjectSource(self.s.origin,                    M_Flash.monster_flash_offset[Defines.MZ2_BOSS2_ROCKET_4],                    forward, right, start);            Math3D.VectorCopy(self.enemy.s.origin, vec);            vec[2] += self.enemy.viewheight;            Math3D.VectorSubtract(vec, start, dir);            Math3D.VectorNormalize(dir);            Monster.monster_fire_rocket(self, start, dir, 50, 500,                    Defines.MZ2_BOSS2_ROCKET_4);            return true;        }    };    static EntThinkAdapter boss2_firebullet_right = new EntThinkAdapter() {    	public String getID() { return "boss2_firebullet_right"; }        public boolean think(edict_t self) {            float[] forward = { 0, 0, 0 }, right = { 0, 0, 0 }, target = { 0,                    0, 0 };            float[] start = { 0, 0, 0 };            Math3D.AngleVectors(self.s.angles, forward, right, null);            Math3D                    .G_ProjectSource(                            self.s.origin,                            M_Flash.monster_flash_offset[Defines.MZ2_BOSS2_MACHINEGUN_R1],                            forward, right, start);            Math3D.VectorMA(self.enemy.s.origin, -0.2f, self.enemy.velocity,                    target);            target[2] += self.enemy.viewheight;            Math3D.VectorSubtract(target, start, forward);            Math3D.VectorNormalize(forward);            Monster.monster_fire_bullet(self, start, forward, 6, 4,                    Defines.DEFAULT_BULLET_HSPREAD,                    Defines.DEFAULT_BULLET_VSPREAD,                    Defines.MZ2_BOSS2_MACHINEGUN_R1);            return true;        }    };    static EntThinkAdapter boss2_firebullet_left = new EntThinkAdapter() {    	public String getID() { return "boss2_firebullet_left"; }        public boolean think(edict_t self) {            float[] forward = { 0, 0, 0 }, right = { 0, 0, 0 }, target = { 0,

⌨️ 快捷键说明

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