public boolean think(edict_t self) { float range; float[] v = {0, 0, 0}; // a small safe zone Math3D.VectorSubtract(self.s.origin, self.enemy.s.origin, v); range = Math3D.VectorLength(v); if (range <= (Defines.MELEE_DISTANCE + 32)) return true; // charge up the railgun GameBase.gi.sound(self, Defines.CHAN_WEAPON, sound_gun, 1, Defines.ATTN_NORM, 0); Math3D.VectorCopy(self.enemy.s.origin, self.pos1); // save for aiming the shot self.pos1[2] += self.enemy.viewheight; self.monsterinfo.currentmove = gladiator_move_attack_gun; return true; }