diff options
Diffstat (limited to 'src/jake2/game/edict_t.java')
-rw-r--r-- | src/jake2/game/edict_t.java | 469 |
1 files changed, 469 insertions, 0 deletions
diff --git a/src/jake2/game/edict_t.java b/src/jake2/game/edict_t.java new file mode 100644 index 0000000..0c89c87 --- /dev/null +++ b/src/jake2/game/edict_t.java @@ -0,0 +1,469 @@ +/* +Copyright (C) 1997-2001 Id Software, Inc. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +package jake2.game; + +import jake2.*; +import jake2.util.*; + +public class edict_t { + + public edict_t(int i) { + + s.number = i; + index = i; + } + + public void clear() { + } + + // integrated entity state + public entity_state_t s = new entity_state_t(this); + public boolean inuse; + public int linkcount; + + // FIXME: move these fields to a server private sv_entity_t + public link_t area = new link_t(this); // linked to a division node or leaf + + public int num_clusters; // if -1, use headnode instead + public int clusternums[] = new int[Defines.MAX_ENT_CLUSTERS]; + public int headnode; // unused if num_clusters != -1 + public int areanum, areanum2; + + //================================ + + public int svflags; // SVF_NOCLIENT, SVF_DEADMONSTER, SVF_MONSTER, etc + public float[] mins = { 0, 0, 0 }; + public float[] maxs = { 0, 0, 0 }; + public float[] absmin = { 0, 0, 0 }; + public float[] absmax = { 0, 0, 0 }; + public float[] size = { 0, 0, 0 }; + public int solid; + public int clipmask; + + // the game dll can add anything it wants after + // this point in the structure + // DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER + // EXPECTS THE FIELDS IN THAT ORDER! + + //================================ + public int movetype; + public int flags; + + public String model = ""; + public float freetime; // sv.time when the object was freed + + // + // only used locally in game, not by server + // + public String message = ""; + public String classname = ""; + public int spawnflags; + + public float timestamp; + + // set in qe3, -1 = up, -2 = down + public float angle; + + public String target = null; + public String targetname = null; + public String killtarget = null; + public String team = null; + public String pathtarget = null; + public String deathtarget = null; + public String combattarget = null; + + public edict_t target_ent = null; + + public float speed, accel, decel; + public float[] movedir = { 0, 0, 0 }; + + public float[] pos1 = { 0, 0, 0 }; + public float[] pos2 = { 0, 0, 0 }; + + public float[] velocity = { 0, 0, 0 }; + public float[] avelocity = { 0, 0, 0 }; + public int mass; + public float air_finished; + public float gravity; // per entity gravity multiplier (1.0 is normal) + // use for lowgrav artifact, flares + + public edict_t goalentity = null; + public edict_t movetarget = null; + public float yaw_speed; + public float ideal_yaw; + + public float nextthink; + + public EntThinkAdapter prethink = null; + public EntThinkAdapter think = null; + public EntBlockedAdapter blocked = null; + public EntTouchAdapter touch = null; + public EntUseAdapter use = null; + public EntPainAdapter pain = null; + public EntDieAdapter die = null; + + public float touch_debounce_time; // are all these legit? do we need more/less of them? + public float pain_debounce_time; + public float damage_debounce_time; + public float fly_sound_debounce_time; //move to clientinfo + public float last_move_time; + + public int health; + public int max_health; + public int gib_health; + public int deadflag; + public int show_hostile; + + public float powerarmor_time; + + public String map = null; + ; // target_changelevel + + public int viewheight; // height above origin where eyesight is determined + public int takedamage; + public int dmg; + public int radius_dmg; + public float dmg_radius; + public int sounds; //make this a spawntemp var? + public int count; + + public edict_t chain = null; + public edict_t enemy = null; + public edict_t oldenemy = null; + public edict_t activator = null; + public edict_t groundentity = null; + public int groundentity_linkcount; + public edict_t teamchain = null; + public edict_t teammaster = null; + + public edict_t mynoise = null; // can go in client only + public edict_t mynoise2 = null; + + public int noise_index; + public int noise_index2; + public float volume; + public float attenuation; + + // timing variables + public float wait; + public float delay; // before firing targets + public float random; + + public float teleport_time; + + public int watertype; + public int waterlevel; + + public float[] move_origin = { 0, 0, 0 }; + + public float[] move_angles = { 0, 0, 0 }; + + // move this to clientinfo? + public int light_level; + + public int style; // also used as areaportal number + + public gitem_t item; // for bonus items + + // common integrated data blocks + public moveinfo_t moveinfo = new moveinfo_t(); + public monsterinfo_t monsterinfo = new monsterinfo_t(); + + public gclient_t client; + public edict_t owner; + + public int index; //introduced by rst + + + ///////////////////////////////////////////////// + + public boolean set(String key, String value) { + + if (key.equals("classname")) { + classname = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + + if (key.equals("model")) { + model = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + + if (key.equals("spawnflags")) { + spawnflags = Lib.atoi(value); + return true; + } // F_INT), + + if (key.equals("speed")) { + speed = Lib.atof(value); + return true; + } // F_FLOAT), + + if (key.equals("accel")) { + accel = Lib.atof(value); + return true; + } // F_FLOAT), + + if (key.equals("decel")) { + decel = Lib.atof(value); + return true; + } // F_FLOAT), + + if (key.equals("target")) { + target = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + + if (key.equals("targetname")) { + targetname = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + + if (key.equals("pathtarget")) { + pathtarget = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + + if (key.equals("deathtarget")) { + deathtarget = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + if (key.equals("killtarget")) { + killtarget = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + + if (key.equals("combattarget")) { + combattarget = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + + if (key.equals("message")) { + message = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + + if (key.equals("team")) { + team = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + + if (key.equals("wait")) { + wait = Lib.atof(value); + return true; + } // F_FLOAT), + + if (key.equals("delay")) { + delay = Lib.atof(value); + return true; + } // F_FLOAT), + + if (key.equals("random")) { + random = Lib.atof(value); + return true; + } // F_FLOAT), + + if (key.equals("move_origin")) { + move_origin = Lib.atov(value); + return true; + } // F_VECTOR), + + if (key.equals("move_angles")) { + move_angles = Lib.atov(value); + return true; + } // F_VECTOR), + + if (key.equals("style")) { + style = Lib.atoi(value); + return true; + } // F_INT), + + if (key.equals("count")) { + count = Lib.atoi(value); + return true; + } // F_INT), + + if (key.equals("health")) { + health = Lib.atoi(value); + return true; + } // F_INT), + + if (key.equals("sounds")) { + sounds = Lib.atoi(value); + return true; + } // F_INT), + + if (key.equals("light")) { + return true; + } // F_IGNORE), + + if (key.equals("dmg")) { + dmg = Lib.atoi(value); + return true; + } // F_INT), + + if (key.equals("mass")) { + mass = Lib.atoi(value); + return true; + } // F_INT), + + if (key.equals("volume")) { + volume = Lib.atof(value); + return true; + } // F_FLOAT), + + if (key.equals("attenuation")) { + attenuation = Lib.atof(value); + return true; + } // F_FLOAT), + + if (key.equals("map")) { + map = GameSpawn.ED_NewString(value); + return true; + } // F_LSTRING), + + if (key.equals("origin")) { + s.origin = Lib.atov(value); + return true; + } // F_VECTOR), + + if (key.equals("angles")) { + s.angles = Lib.atov(value); + return true; + } // F_VECTOR), + + if (key.equals("angle")) { + s.angles = new float[] { 0, Lib.atof(value), 0 }; + return true; + } // F_ANGLEHACK), + + /* --- NOSPAWN --- + if (key.equals("goalentity")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + + if (key.equals("movetarget")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + + if (key.equals("enemy")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + + if (key.equals("oldenemy")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + + if (key.equals("activator")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + + if (key.equals("groundentity")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + if (key.equals("teamchain")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + if (key.equals("teammaster")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + if (key.equals("owner")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + if (key.equals("mynoise")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + if (key.equals("mynoise2")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + if (key.equals("target_ent")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + if (key.equals("chain")) { + return true; + } // F_EDICT, FFL_NOSPAWN), + if (key.equals("prethink")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("think")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("blocked")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("touch")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("use")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("pain")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("die")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("stand")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("idle")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("search")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("walk")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("run")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("dodge")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("attack")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("melee")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("sight")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("checkattack")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + if (key.equals("currentmove")) { + return true; + } // F_MMOVE, FFL_NOSPAWN), + if (key.equals("endfunc")) { + return true; + } // F_FUNCTION, FFL_NOSPAWN), + + */ + if (key.equals("item")) { + Game.gi.error("ent.set(\"item\") called."); + return true; + } // F_ITEM) + + return false; + } +} |