Update of /cvsroot/jake2/jake2/src/jake2/game In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1597/src/jake2/game Modified Files: GameUtil.java gitem_t.java client_respawn_t.java level_locals_t.java GameSave.java mmove_t.java edict_t.java moveinfo_t.java mframe_t.java game_export_t.java SuperAdapter.java PlayerClient.java game_locals_t.java GameBase.java entity_state_t.java PlayerClientAdapters.java player_state_t.java pmove_state_t.java monsterinfo_t.java client_persistant_t.java gclient_t.java Log Message: savegames now seem to work. Index: PlayerClientAdapters.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/PlayerClientAdapters.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** PlayerClientAdapters.java 8 Jul 2004 15:58:43 -0000 1.1 --- PlayerClientAdapters.java 20 Aug 2004 21:29:58 -0000 1.2 *************** *** 35,39 **** // Gross, ugly, disgustuing hack section // ! // this function is an ugly as hell hack to fix some map flaws // --- 35,39 ---- // Gross, ugly, disgustuing hack section // ! // this function is an ugly as hell hack to fix some map flaws // *************** *** 43,59 **** // we use carnal knowledge of the maps to fix the coop spot targetnames to match // that of the nearest named single player spot ! ! static EntThinkAdapter SP_FixCoopSpots = new EntThinkAdapter() { public boolean think(edict_t self) { ! edict_t spot; ! float[] d = { 0, 0, 0 }; ! ! spot = null; ! EdictIterator es = null; ! while (true) { ! es = GameBase.G_Find(es, GameBase.findByClass, "info_player_start"); ! spot = es.o; if (spot == null) return true; --- 43,59 ---- // we use carnal knowledge of the maps to fix the coop spot targetnames to match // that of the nearest named single player spot ! ! static EntThinkAdapter SP_FixCoopSpots= new EntThinkAdapter() { public boolean think(edict_t self) { ! edict_t spot; ! float[] d= { 0, 0, 0 }; ! ! spot= null; ! EdictIterator es= null; ! while (true) { ! es= GameBase.G_Find(es, GameBase.findByClass, "info_player_start"); ! spot= es.o; if (spot == null) return true; *************** *** 64,68 **** if ((self.targetname == null) || Lib.Q_stricmp(self.targetname, spot.targetname) != 0) { // gi.dprintf("FixCoopSpots changed %s at %s targetname from %s to %s\n", self.classname, vtos(self.s.origin), self.targetname, spot.targetname); ! self.targetname = spot.targetname; } return true; --- 64,68 ---- if ((self.targetname == null) || Lib.Q_stricmp(self.targetname, spot.targetname) != 0) { // gi.dprintf("FixCoopSpots changed %s at %s targetname from %s to %s\n", self.classname, vtos(self.s.origin), self.targetname, spot.targetname); ! self.targetname= spot.targetname; } return true; *************** *** 74,107 **** // some maps don't have any coop spots at all, so we need to create them // where they should have been ! ! static EntThinkAdapter SP_CreateCoopSpots = new EntThinkAdapter() { public boolean think(edict_t self) { ! edict_t spot; ! if (Lib.Q_stricmp(GameBase.level.mapname, "security") == 0) { ! spot = GameUtil.G_Spawn(); ! spot.classname = "info_player_coop"; ! spot.s.origin[0] = 188 - 64; ! spot.s.origin[1] = -164; ! spot.s.origin[2] = 80; ! spot.targetname = "jail3"; ! spot.s.angles[1] = 90; ! ! spot = GameUtil.G_Spawn(); ! spot.classname = "info_player_coop"; ! spot.s.origin[0] = 188 + 64; ! spot.s.origin[1] = -164; ! spot.s.origin[2] = 80; ! spot.targetname = "jail3"; ! spot.s.angles[1] = 90; ! ! spot = GameUtil.G_Spawn(); ! spot.classname = "info_player_coop"; ! spot.s.origin[0] = 188 + 128; ! spot.s.origin[1] = -164; ! spot.s.origin[2] = 80; ! spot.targetname = "jail3"; ! spot.s.angles[1] = 90; } return true; --- 74,107 ---- // some maps don't have any coop spots at all, so we need to create them // where they should have been ! ! static EntThinkAdapter SP_CreateCoopSpots= new EntThinkAdapter() { public boolean think(edict_t self) { ! edict_t spot; ! if (Lib.Q_stricmp(GameBase.level.mapname, "security") == 0) { ! spot= GameUtil.G_Spawn(); ! spot.classname= "info_player_coop"; ! spot.s.origin[0]= 188 - 64; ! spot.s.origin[1]= -164; ! spot.s.origin[2]= 80; ! spot.targetname= "jail3"; ! spot.s.angles[1]= 90; ! ! spot= GameUtil.G_Spawn(); ! spot.classname= "info_player_coop"; ! spot.s.origin[0]= 188 + 64; ! spot.s.origin[1]= -164; ! spot.s.origin[2]= 80; ! spot.targetname= "jail3"; ! spot.s.angles[1]= 90; ! ! spot= GameUtil.G_Spawn(); ! spot.classname= "info_player_coop"; ! spot.s.origin[0]= 188 + 128; ! spot.s.origin[1]= -164; ! spot.s.origin[2]= 80; ! spot.targetname= "jail3"; ! spot.s.angles[1]= 90; } return true; *************** *** 109,139 **** }; //======================================================================= ! ! static EntPainAdapter player_pain = new EntPainAdapter() { public void pain(edict_t self, edict_t other, float kick, int damage) { ! // player pain is handled at the end of the frame in P_DamageFeedback ! } }; ! static EntDieAdapter body_die = new EntDieAdapter() { public void die(edict_t self, edict_t inflictor, edict_t attacker, int damage, float[] point) { ! int n; ! if (self.health < -40) { GameBase.gi.sound(self, Defines.CHAN_BODY, GameBase.gi.soundindex("misc/udeath.wav"), 1, Defines.ATTN_NORM, 0); ! for (n = 0; n < 4; n++) GameAI.ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, Defines.GIB_ORGANIC); self.s.origin[2] -= 48; GameAI.ThrowClientHead(self, damage); ! self.takedamage = Defines.DAMAGE_NO; } } }; //============================================================== ! static edict_t pm_passent; // pmove doesn't need to know about passent and contentmask ! public static pmove_t.TraceAdapter PM_trace = new pmove_t.TraceAdapter() { ! public trace_t trace(float[] start, float[] mins, float[] maxs, float[] end) { if (pm_passent.health > 0) --- 109,139 ---- }; //======================================================================= ! ! // player pain is handled at the end of the frame in P_DamageFeedback ! static EntPainAdapter player_pain= new EntPainAdapter() { public void pain(edict_t self, edict_t other, float kick, int damage) { ! } }; ! static EntDieAdapter body_die= new EntDieAdapter() { public void die(edict_t self, edict_t inflictor, edict_t attacker, int damage, float[] point) { ! int n; ! if (self.health < -40) { GameBase.gi.sound(self, Defines.CHAN_BODY, GameBase.gi.soundindex("misc/udeath.wav"), 1, Defines.ATTN_NORM, 0); ! for (n= 0; n < 4; n++) GameAI.ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", damage, Defines.GIB_ORGANIC); self.s.origin[2] -= 48; GameAI.ThrowClientHead(self, damage); ! self.takedamage= Defines.DAMAGE_NO; } } }; //============================================================== ! static edict_t pm_passent; // pmove doesn't need to know about passent and contentmask ! public static pmove_t.TraceAdapter PM_trace= new pmove_t.TraceAdapter() { ! public trace_t trace(float[] start, float[] mins, float[] maxs, float[] end) { if (pm_passent.health > 0) *************** *** 142,146 **** return GameBase.gi.trace(start, mins, maxs, end, pm_passent, Defines.MASK_DEADSOLID); } ! }; } --- 142,146 ---- return GameBase.gi.trace(start, mins, maxs, end, pm_passent, Defines.MASK_DEADSOLID); } ! }; } Index: game_export_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/game_export_t.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** game_export_t.java 9 Jul 2004 06:50:49 -0000 1.3 --- game_export_t.java 20 Aug 2004 21:29:58 -0000 1.4 *************** *** 24,28 **** --- 24,33 ---- package jake2.game; + import java.io.FileNotFoundException; + import java.io.IOException; + import java.io.RandomAccessFile; + import jake2.qcommon.Com; + import jake2.util.QuakeFile; // *************** *** 59,64 **** public void WriteGame(String filename, boolean autosave) { ! // TODO WriteGame not implemented. ! Com.Println("WriteGame not implemented."); } --- 64,68 ---- public void WriteGame(String filename, boolean autosave) { ! GameSave.WriteGame(filename, autosave); } *************** *** 72,83 **** public void WriteLevel(String filename) { ! // TODO WriteLevel not implemented. ! Com.Println("WriteLevel not implemented."); } public void ReadLevel(String filename) { ! // TODO ReadLevel not implemented. ! Com.Println("ReadLevel not implemented."); } --- 76,99 ---- public void WriteLevel(String filename) { ! try ! { ! GameSave.WriteLevel(filename); ! } ! catch (IOException e) ! { ! e.printStackTrace(); ! } } public void ReadLevel(String filename) { ! try ! { ! GameSave.ReadLevel(filename); ! } ! catch (IOException e) ! { ! e.printStackTrace(); ! } } *************** *** 86,97 **** --- 102,116 ---- return PlayerClient.ClientConnect(ent, userinfo); } + public void ClientBegin(edict_t ent) { PlayerClient.ClientBegin(ent); } + public void ClientUserinfoChanged(edict_t ent, String userinfo) { PlayerClient.ClientUserinfoChanged(ent, userinfo); } + public void ClientDisconnect(edict_t ent) { *************** *** 133,135 **** public int num_edicts; // current number, <= max_edicts public int max_edicts; ! } --- 152,154 ---- public int num_edicts; // current number, <= max_edicts public int max_edicts; ! } \ No newline at end of file Index: SuperAdapter.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/SuperAdapter.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** SuperAdapter.java 7 Jul 2004 19:59:24 -0000 1.1.1.1 --- SuperAdapter.java 20 Aug 2004 21:29:58 -0000 1.2 *************** *** 26,69 **** import jake2.qcommon.Com; import java.util.Vector; ! // import jake2.*; ! // import jake2.client.*; ! // import jake2.game.*; ! // import jake2.qcommon.*; ! // import jake2.render.*; ! // import jake2.server.*; ! ! public class SuperAdapter { ! ! // registration ! private static void register(SuperAdapter sa) { ! adapters.add(sa); ! //Com.Println("registering adapter " + sa.getID() + " (" + sa.getClass().getSuperclass() + ")"); } ! ! private static int id=0; ! private static Vector adapters = new Vector(); ! ! ! private static SuperAdapter find(int num) { ! return (SuperAdapter) adapters.elementAt(num); } ! ! // constructor public SuperAdapter() ! { ! adapterid = id++; ! register(this); } ! ! public int getID() { return adapterid; } ! private int adapterid; } --- 26,98 ---- import jake2.qcommon.Com; + import java.util.Hashtable; import java.util.Vector; + public class SuperAdapter + { ! /** Adapter registration. */ ! private static void register(SuperAdapter sa, String id) { ! adapters.put(id, sa); } ! ! /** Adapter repository. */ ! private static Hashtable adapters= new Hashtable(); ! ! /** Returns the adapter from the repository given by its ID. */ ! public static SuperAdapter getFromID(String key) { ! System.out.println("SuperAdapter.getFromID(\"" + key + "\")"); ! SuperAdapter sa = (SuperAdapter) adapters.get(key); ! ! // try to create the adapter ! if (sa == null) ! { ! System.out.println("adapter not found:" + key); ! int pos = key.indexOf('$'); ! String classname = key; ! if (pos != -1) ! classname = key.substring(0, pos); ! ! // load class and instantiate ! try ! { ! System.err.println("loading class " + classname); ! Class.forName(classname).newInstance(); ! } ! catch(Exception e) ! { ! System.err.println("jake2: class not found:" + classname); ! } ! ! // try it again... ! sa = (SuperAdapter) adapters.get(key); ! ! if (sa == null) ! System.err.println("jake2: could not load adapter:" + key); ! } ! ! return sa; } ! ! /** Constructor, does the adapter registration. */ public SuperAdapter() ! { ! StackTraceElement tr[] = new Throwable().getStackTrace(); ! adapterid= tr[2].getClassName(); ! if (adapterid == "") ! new Throwable("error in creating an adapter id!").printStackTrace(); ! else ! register(this, adapterid); } ! ! /** Returns the Adapter-ID. */ ! public String getID() { return adapterid; } ! /** Adapter id. */ ! private String adapterid; } Index: pmove_state_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/pmove_state_t.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** pmove_state_t.java 7 Jul 2004 19:59:26 -0000 1.1.1.1 --- pmove_state_t.java 20 Aug 2004 21:29:58 -0000 1.2 *************** *** 27,30 **** --- 27,31 ---- import java.io.IOException; + import java.io.RandomAccessFile; import java.nio.ByteBuffer; *************** *** 40,49 **** public short origin[] = { 0, 0, 0 }; // 12.3 public short velocity[] = { 0, 0, 0 }; // 12.3 ! public byte pm_flags; // ducked, jump_held, etc ! public byte pm_time; // each unit = 8 ms public short gravity; ! public short delta_angles[] = { 0, 0, 0 }; // add to command angles to get view direction ! // changed by spawns, rotating objects, and teleporters ! private static pmove_state_t prototype = new pmove_state_t(); --- 41,53 ---- public short origin[] = { 0, 0, 0 }; // 12.3 public short velocity[] = { 0, 0, 0 }; // 12.3 ! /** ducked, jump_held, etc. */ ! public byte pm_flags; ! /** each unit = 8 ms. */ ! public byte pm_time; public short gravity; ! /** add to command angles to get view direction. */ ! public short delta_angles[] = { 0, 0, 0 }; ! /** changed by spawns, rotating objects, and teleporters.*/ ! private static pmove_state_t prototype = new pmove_state_t(); *************** *** 82,107 **** } ! public void load(ByteBuffer bb) throws IOException { ! pm_type = bb.getInt(); ! origin[0] = bb.getShort(); ! origin[1] = bb.getShort(); ! origin[2] = bb.getShort(); ! velocity[0] = bb.getShort(); ! velocity[1] = bb.getShort(); ! velocity[2] = bb.getShort(); ! pm_flags = bb.get(); ! pm_time = bb.get(); ! gravity = bb.getShort(); ! bb.getShort(); ! delta_angles[0] = bb.getShort(); ! delta_angles[1] = bb.getShort(); ! delta_angles[2] = bb.getShort(); } --- 86,136 ---- } ! /** Reads the playermove from the file.*/ ! public void load(RandomAccessFile f) throws IOException { ! pm_type = f.readInt(); ! origin[0] = f.readShort(); ! origin[1] = f.readShort(); ! origin[2] = f.readShort(); ! velocity[0] = f.readShort(); ! velocity[1] = f.readShort(); ! velocity[2] = f.readShort(); ! pm_flags = f.readByte(); ! pm_time = f.readByte(); ! gravity = f.readShort(); ! f.readShort(); ! delta_angles[0] = f.readShort(); ! delta_angles[1] = f.readShort(); ! delta_angles[2] = f.readShort(); ! ! } ! ! /** Writes the playermove to the file. */ ! public void write (RandomAccessFile f) throws IOException { ! ! f.writeInt(pm_type); ! ! f.writeShort(origin[0]); ! f.writeShort(origin[1]); ! f.writeShort(origin[2]); ! ! f.writeShort(velocity[0]); ! f.writeShort(velocity[1]); ! f.writeShort(velocity[2]); ! ! f.writeByte(pm_flags); ! f.writeByte(pm_time); ! f.writeShort(gravity); ! ! f.writeShort(0); + f.writeShort(delta_angles[0]); + f.writeShort(delta_angles[1]); + f.writeShort(delta_angles[2]); } *************** *** 125,130 **** Com.Println("delta-angle[2]: " + delta_angles[0]); } - - - } \ No newline at end of file --- 154,156 ---- Index: client_persistant_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/client_persistant_t.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** client_persistant_t.java 12 Jul 2004 20:47:01 -0000 1.4 --- client_persistant_t.java 20 Aug 2004 21:29:58 -0000 1.5 *************** *** 26,30 **** --- 26,33 ---- import jake2.Defines; import jake2.util.Lib; + import jake2.util.QuakeFile; + import java.io.IOException; + import java.io.RandomAccessFile; import java.nio.ByteBuffer; *************** *** 90,129 **** boolean spectator; // client is a spectator - public void load(ByteBuffer bb) { - // client persistant_t ! userinfo = Lib.readString(bb, Defines.MAX_INFO_STRING); ! netname = Lib.readString(bb, 16); ! hand = bb.getInt(); ! connected = bb.getInt() != 0; ! health = bb.getInt(); ! max_health = bb.getInt(); ! savedFlags = bb.getInt(); ! selected_item = bb.getInt(); for (int n = 0; n < Defines.MAX_ITEMS; n++) ! inventory[n] = bb.getInt(); ! max_bullets = bb.getInt(); ! max_shells = bb.getInt(); ! max_rockets = bb.getInt(); ! max_grenades = bb.getInt(); ! max_cells = bb.getInt(); ! max_slugs = bb.getInt(); ! weapon = GameAI.itemlist[bb.getInt()]; ! lastweapon = GameAI.itemlist[bb.getInt()]; ! power_cubes = bb.getInt(); ! score = bb.getInt(); ! game_helpchanged = bb.getInt(); ! helpchanged = bb.getInt(); ! spectator = bb.getInt() != 0; } public void dump() { // client persistant_t --- 93,168 ---- boolean spectator; // client is a spectator ! /** Reads a client_persistant structure from a file. */ ! public void read(QuakeFile f) throws IOException { ! userinfo = f.readString(); ! netname = f.readString(); ! hand = f.readInt(); ! connected = f.readInt() != 0; ! health = f.readInt(); ! ! max_health = f.readInt(); ! savedFlags = f.readInt(); ! selected_item = f.readInt(); for (int n = 0; n < Defines.MAX_ITEMS; n++) ! inventory[n] = f.readInt(); ! max_bullets = f.readInt(); ! max_shells = f.readInt(); ! max_rockets = f.readInt(); ! max_grenades = f.readInt(); ! max_cells = f.readInt(); ! max_slugs = f.readInt(); ! weapon = f.readItem(); ! lastweapon = f.readItem(); ! power_cubes = f.readInt(); ! score = f.readInt(); ! game_helpchanged = f.readInt(); ! helpchanged = f.readInt(); ! spectator = f.readInt() != 0; ! } ! ! /** Writes a client_persistant structure to a file. */ ! public void write(QuakeFile f) throws IOException { ! // client persistant_t ! f.writeString(userinfo); ! f.writeString(netname); ! ! f.writeInt(hand); + f.writeInt(connected ? 1:0); + f.writeInt(health); + + f.writeInt(max_health); + f.writeInt(savedFlags); + f.writeInt(selected_item); + + for (int n = 0; n < Defines.MAX_ITEMS; n++) + f.writeInt(inventory[n]); + + f.writeInt(max_bullets); + f.writeInt(max_shells); + f.writeInt(max_rockets); + f.writeInt(max_grenades); + f.writeInt(max_cells); + f.writeInt(max_slugs); + + f.writeItem(weapon); + f.writeItem(lastweapon); + f.writeInt(power_cubes); + f.writeInt(score); + + f.writeInt(game_helpchanged); + f.writeInt(helpchanged); + f.writeInt(spectator?1:0); } + public void dump() { // client persistant_t Index: edict_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/edict_t.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** edict_t.java 8 Jul 2004 15:58:44 -0000 1.2 --- edict_t.java 20 Aug 2004 21:29:57 -0000 1.3 *************** *** 19,110 **** */ package jake2.game; import jake2.*; import jake2.util.*; ! public class edict_t { ! ! public edict_t(int i) { [...1138 lines suppressed...] + style= f.readInt(); + + item= f.readItem(); + + moveinfo.read(f); + monsterinfo.read(f); + + int ndx= f.readInt(); + if (ndx == -1) + client= null; + else + client= Game.game.clients[ndx]; + + owner= f.readEdictRef(); + + // rst's checker :-) + if (f.readInt() != 9876) + System.err.println("ent load check failed for num " + index); + } } Index: monsterinfo_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/monsterinfo_t.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** monsterinfo_t.java 7 Jul 2004 19:59:26 -0000 1.1.1.1 --- monsterinfo_t.java 20 Aug 2004 21:29:58 -0000 1.2 *************** *** 24,27 **** --- 24,32 ---- package jake2.game; + import jake2.util.QuakeFile; + + import java.io.IOException; + import java.io.RandomAccessFile; + public class monsterinfo_t { *************** *** 61,63 **** --- 66,162 ---- public int power_armor_power; + /** Writes the monsterinfo to the file.*/ + public void write(QuakeFile f) throws IOException + { + f.writeBoolean(currentmove != null); + if (currentmove != null) + currentmove.write(f); + f.writeInt(aiflags); + f.writeInt(nextframe); + f.writeFloat(scale); + f.writeAdapter(stand); + f.writeAdapter(idle); + f.writeAdapter(search); + f.writeAdapter(walk); + f.writeAdapter(run); + + f.writeAdapter(dodge); + + f.writeAdapter(attack); + f.writeAdapter(melee); + + f.writeAdapter(sight); + + f.writeAdapter(checkattack); + + f.writeFloat(pausetime); + f.writeFloat(attack_finished); + + f.writeVector(saved_goal); + + f.writeFloat(search_time); + f.writeFloat(trail_time); + + f.writeVector(last_sighting); + + f.writeInt(attack_state); + f.writeInt(lefty); + + f.writeFloat(idle_time); + f.writeInt(linkcount); + + f.writeInt(power_armor_power); + f.writeInt(power_armor_type); + } + + /** Writes the monsterinfo to the file.*/ + public void read(QuakeFile f) throws IOException + { + if (f.readBoolean()) + { + currentmove= new mmove_t(); + currentmove.read(f); + } + else + currentmove= null; + aiflags = f.readInt(); + nextframe = f.readInt(); + scale = f.readFloat(); + stand = (EntThinkAdapter) f.readAdapter(); + idle = (EntThinkAdapter) f.readAdapter(); + search = (EntThinkAdapter) f.readAdapter(); + walk = (EntThinkAdapter) f.readAdapter(); + run = (EntThinkAdapter) f.readAdapter(); + + dodge = (EntDodgeAdapter) f.readAdapter(); + + attack = (EntThinkAdapter) f.readAdapter(); + melee = (EntThinkAdapter) f.readAdapter(); + + sight = (EntInteractAdapter) f.readAdapter(); + + checkattack = (EntThinkAdapter) f.readAdapter(); + + pausetime = f.readFloat(); + attack_finished = f.readFloat(); + + saved_goal = f.readVector(); + + search_time = f.readFloat(); + trail_time = f.readFloat(); + + last_sighting = f.readVector(); + + attack_state = f.readInt(); + lefty = f.readInt(); + + idle_time = f.readFloat(); + linkcount = f.readInt(); + + power_armor_power = f.readInt(); + power_armor_type = f.readInt(); + + } + + } Index: client_respawn_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/client_respawn_t.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** client_respawn_t.java 12 Jul 2004 20:47:01 -0000 1.4 --- client_respawn_t.java 20 Aug 2004 21:29:57 -0000 1.5 *************** *** 26,42 **** import jake2.util.Lib; import jake2.util.Math3D; import java.io.IOException; import java.nio.ByteBuffer; public class client_respawn_t ! // client data that stays across deathmatch respawns { ! client_persistant_t coop_respawn = new client_persistant_t(); // what to set client->pers to on a respawn ! int enterframe; // level.framenum the client entered the game ! int score; // frags, etc ! float cmd_angles[] = { 0, 0, 0 }; // angles sent over in the last command ! boolean spectator; // client is a spectator public void set(client_respawn_t from) { --- 26,56 ---- import jake2.util.Lib; import jake2.util.Math3D; + import jake2.util.QuakeFile; import java.io.IOException; + import java.io.RandomAccessFile; import java.nio.ByteBuffer; + /** Client data that stays across deathmatch respawns.*/ public class client_respawn_t ! { ! /** What to set client->pers to on a respawn */ ! protected client_persistant_t coop_respawn = new client_persistant_t(); ! ! /** Level.framenum the client entered the game. */ ! protected int enterframe; ! ! /** frags, etc. */ ! protected int score; ! ! /** angles sent over in the last command. */ ! protected float cmd_angles[] = { 0, 0, 0 }; ! ! /** client is a spectator. */ ! protected boolean spectator; + + /** Copies the client respawn data. */ public void set(client_respawn_t from) { *************** *** 48,52 **** } ! //ok public void clear() { --- 62,66 ---- } ! /** Clears the client reaspawn informations. */ public void clear() { *************** *** 58,72 **** } ! public void load(ByteBuffer bb) throws IOException { ! coop_respawn.load(bb); ! enterframe = bb.getInt(); ! score = bb.getInt(); ! cmd_angles[0] = bb.getFloat(); ! cmd_angles[1] = bb.getFloat(); ! cmd_angles[2] = bb.getFloat(); ! spectator = bb.getInt() != 0; } public void dump() { --- 72,102 ---- } ! /** Reads a client_respawn from a file. */ ! public void read(QuakeFile f) throws IOException { ! coop_respawn.read(f); ! enterframe = f.readInt(); ! score = f.readInt(); ! cmd_angles[0] = f.readFloat(); ! cmd_angles[1] = f.readFloat(); ! cmd_angles[2] = f.readFloat(); ! spectator = f.readInt() != 0; ! } ! ! /** Writes a client_respawn to a file. */ ! public void write(QuakeFile f) throws IOException ! { ! coop_respawn.write(f); ! f.writeInt(enterframe); ! f.writeInt(score); ! f.writeFloat(cmd_angles[0]); ! f.writeFloat(cmd_angles[1]); ! f.writeFloat(cmd_angles[2]); ! f.writeInt(spectator?1:0); } + + + /** Prints out a client_respawn_t to the quake console.*/ public void dump() { Index: gitem_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/gitem_t.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** gitem_t.java 8 Jul 2004 15:58:44 -0000 1.2 --- gitem_t.java 20 Aug 2004 21:29:57 -0000 1.3 *************** *** 142,145 **** } ! int index; } --- 142,145 ---- } ! public int index; } Index: gclient_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/gclient_t.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** gclient_t.java 8 Jul 2004 15:58:44 -0000 1.2 --- gclient_t.java 20 Aug 2004 21:29:58 -0000 1.3 *************** *** 26,32 **** --- 26,34 ---- import jake2.qcommon.Com; import jake2.util.Lib; + import jake2.util.QuakeFile; import java.awt.event.ItemListener; import java.io.IOException; + import java.io.RandomAccessFile; import java.nio.ByteBuffer; *************** *** 124,127 **** --- 126,132 ---- public int index; + + + public void clear() { *************** *** 164,277 **** } ! public void load(ByteBuffer bb) throws IOException { ! ps.load(bb); ! ping = bb.getInt(); ! pers.load(bb); ! resp.load(bb); ! old_pmove.load(bb); ! showscores = bb.getInt() != 0; ! showinventory = bb.getInt() != 0; ! showhelp = bb.getInt() != 0; ! showhelpicon = bb.getInt() != 0; ! ammo_index = bb.getInt(); ! buttons = bb.getInt(); ! oldbuttons = bb.getInt(); ! latched_buttons = bb.getInt(); ! //weapon_thunk=bb.getInt()!=0; ! bb.getInt(); ! //newweapon=GameTarget.itemlist[bb.getInt()]; ! bb.getInt(); ! damage_armor = bb.getInt(); ! damage_parmor = bb.getInt(); ! damage_blood = bb.getInt(); ! damage_knockback = bb.getInt(); ! damage_from[0] = bb.getFloat(); ! damage_from[1] = bb.getFloat(); ! damage_from[2] = bb.getFloat(); ! killer_yaw = bb.getFloat(); ! weaponstate = bb.getInt(); ! kick_angles[0] = bb.getFloat(); ! kick_angles[1] = bb.getFloat(); ! kick_angles[2] = bb.getFloat(); ! kick_origin[0] = bb.getFloat(); ! kick_origin[1] = bb.getFloat(); ! kick_origin[2] = bb.getFloat(); ! v_dmg_roll = bb.getFloat(); ! v_dmg_pitch = bb.getFloat(); ! v_dmg_time = bb.getFloat(); ! fall_time = bb.getFloat(); ! fall_value = bb.getFloat(); ! damage_alpha = bb.getFloat(); ! bonus_alpha = bb.getFloat(); ! damage_blend[0] = bb.getFloat(); ! damage_blend[1] = bb.getFloat(); ! damage_blend[2] = bb.getFloat(); ! v_angle[0] = bb.getFloat(); ! v_angle[1] = bb.getFloat(); ! v_angle[2] = bb.getFloat(); ! bobtime = bb.getFloat(); ! oldviewangles[0] = bb.getFloat(); ! oldviewangles[1] = bb.getFloat(); ! oldviewangles[2] = bb.getFloat(); ! oldvelocity[0] = bb.getFloat(); ! oldvelocity[1] = bb.getFloat(); ! oldvelocity[2] = bb.getFloat(); ! next_drown_time = bb.getFloat(); ! old_waterlevel = bb.getInt(); ! breather_sound = bb.getInt(); ! machinegun_shots = bb.getInt(); ! anim_end = bb.getInt(); ! anim_priority = bb.getInt(); ! anim_duck = bb.getInt() != 0; ! anim_run = bb.getInt() != 0; ! quad_framenum = bb.getFloat(); ! invincible_framenum = bb.getFloat(); ! breather_framenum = bb.getFloat(); ! enviro_framenum = bb.getFloat(); ! grenade_blew_up = bb.getInt() != 0; ! grenade_time = bb.getFloat(); ! silencer_shots = bb.getInt(); ! weapon_sound = bb.getInt(); ! pickup_msg_time = bb.getFloat(); ! flood_locktill = bb.getFloat(); ! flood_when[0] = bb.getFloat(); ! flood_when[1] = bb.getFloat(); ! flood_when[2] = bb.getFloat(); ! flood_when[3] = bb.getFloat(); ! flood_when[4] = bb.getFloat(); ! flood_when[5] = bb.getFloat(); ! flood_when[6] = bb.getFloat(); ! flood_when[7] = bb.getFloat(); ! flood_when[8] = bb.getFloat(); ! flood_when[9] = bb.getFloat(); ! flood_whenhead = bb.getInt(); ! respawn_time = bb.getFloat(); ! chase_target = GameUtil.g_edicts[bb.getInt()]; ! update_chase = bb.getInt() != 0; } public void dump() { --- 169,399 ---- } ! /** Reads a game client from the file. */ ! public void read(QuakeFile f) throws IOException { ! ps.load(f); ! ping = f.readInt(); ! pers.read(f); ! resp.read(f); ! old_pmove.load(f); ! showscores = f.readInt() != 0; ! showinventory = f.readInt() != 0; ! showhelp = f.readInt() != 0; ! showhelpicon = f.readInt() != 0; ! ammo_index = f.readInt(); ! buttons = f.readInt(); ! oldbuttons = f.readInt(); ! latched_buttons = f.readInt(); ! weapon_thunk=f.readInt()!=0; ! ! newweapon=f.readItem(); ! ! damage_armor = f.readInt(); ! damage_parmor = f.readInt(); ! damage_blood = f.readInt(); ! damage_knockback = f.readInt(); ! damage_from[0] = f.readFloat(); ! damage_from[1] = f.readFloat(); ! damage_from[2] = f.readFloat(); ! killer_yaw = f.readFloat(); ! weaponstate = f.readInt(); ! kick_angles[0] = f.readFloat(); ! kick_angles[1] = f.readFloat(); ! kick_angles[2] = f.readFloat(); ! kick_origin[0] = f.readFloat(); ! kick_origin[1] = f.readFloat(); ! kick_origin[2] = f.readFloat(); ! v_dmg_roll = f.readFloat(); ! v_dmg_pitch = f.readFloat(); ! v_dmg_time = f.readFloat(); ! fall_time = f.readFloat(); ! fall_value = f.readFloat(); ! damage_alpha = f.readFloat(); ! bonus_alpha = f.readFloat(); ! damage_blend[0] = f.readFloat(); ! damage_blend[1] = f.readFloat(); ! damage_blend[2] = f.readFloat(); ! v_angle[0] = f.readFloat(); ! v_angle[1] = f.readFloat(); ! v_angle[2] = f.readFloat(); ! bobtime = f.readFloat(); ! oldviewangles[0] = f.readFloat(); ! oldviewangles[1] = f.readFloat(); ! oldviewangles[2] = f.readFloat(); ! oldvelocity[0] = f.readFloat(); ! oldvelocity[1] = f.readFloat(); ! oldvelocity[2] = f.readFloat(); ! next_drown_time = f.readFloat(); ! old_waterlevel = f.readInt(); ! breather_sound = f.readInt(); ! machinegun_shots = f.readInt(); ! anim_end = f.readInt(); ! anim_priority = f.readInt(); ! anim_duck = f.readInt() != 0; ! anim_run = f.readInt() != 0; ! quad_framenum = f.readFloat(); ! invincible_framenum = f.readFloat(); ! breather_framenum = f.readFloat(); ! enviro_framenum = f.readFloat(); ! grenade_blew_up = f.readInt() != 0; ! grenade_time = f.readFloat(); ! silencer_shots = f.readInt(); ! weapon_sound = f.readInt(); ! pickup_msg_time = f.readFloat(); ! flood_locktill = f.readFloat(); ! flood_when[0] = f.readFloat(); ! flood_when[1] = f.readFloat(); ! flood_when[2] = f.readFloat(); ! flood_when[3] = f.readFloat(); ! flood_when[4] = f.readFloat(); ! flood_when[5] = f.readFloat(); ! flood_when[6] = f.readFloat(); ! flood_when[7] = f.readFloat(); ! flood_when[8] = f.readFloat(); ! flood_when[9] = f.readFloat(); ! flood_whenhead = f.readInt(); ! respawn_time = f.readFloat(); ! chase_target = f.readEdictRef(); ! update_chase = f.readInt() != 0; ! ! if (f.readInt() != 8765) ! System.err.println("game client load failed for num=" + index); } + + /** Writes a game_client_t (a player) to a file. */ + public void write(QuakeFile f) throws IOException + { + ps.write(f); + + f.writeInt(ping); + + pers.write(f); + resp.write(f); + + old_pmove.write(f); + + f.writeInt(showscores?1:0); + f.writeInt(showinventory?1:0); + f.writeInt(showhelp?1:0); + f.writeInt(showhelpicon?1:0); + f.writeInt(ammo_index); + + f.writeInt(buttons); + f.writeInt(oldbuttons); + f.writeInt(latched_buttons); + + f.writeInt(weapon_thunk?1:0); + f.writeItem(newweapon); + + + f.writeInt(damage_armor); + f.writeInt(damage_parmor); + f.writeInt(damage_blood); + f.writeInt(damage_knockback); + + f.writeFloat(damage_from[0]); + f.writeFloat(damage_from[1]); + f.writeFloat(damage_from[2]); + + f.writeFloat(killer_yaw); + + f.writeInt(weaponstate); + + f.writeFloat(kick_angles[0]); + f.writeFloat(kick_angles[1]); + f.writeFloat(kick_angles[2]); + + f.writeFloat(kick_origin[0]); + f.writeFloat(kick_origin[1]); + f.writeFloat(kick_origin[2]); + + f.writeFloat(v_dmg_roll); + f.writeFloat(v_dmg_pitch); + f.writeFloat(v_dmg_time); + f.writeFloat(fall_time); + f.writeFloat(fall_value); + f.writeFloat(damage_alpha); + f.writeFloat(bonus_alpha); + + f.writeFloat(damage_blend[0]); + f.writeFloat(damage_blend[1]); + f.writeFloat(damage_blend[2]); + + f.writeFloat(v_angle[0]); + f.writeFloat(v_angle[1]); + f.writeFloat(v_angle[2]); + + f.writeFloat(bobtime); + + f.writeFloat(oldviewangles[0]); + f.writeFloat(oldviewangles[1]); + f.writeFloat(oldviewangles[2]); + + f.writeFloat(oldvelocity[0]); + f.writeFloat(oldvelocity[1]); + f.writeFloat(oldvelocity[2]); + + f.writeFloat(next_drown_time); + + f.writeInt(old_waterlevel); + f.writeInt(breather_sound); + f.writeInt(machinegun_shots); + f.writeInt(anim_end); + f.writeInt(anim_priority); + f.writeInt(anim_duck?1:0); + f.writeInt(anim_run?1:0); + + f.writeFloat(quad_framenum); + f.writeFloat(invincible_framenum); + f.writeFloat(breather_framenum); + f.writeFloat(enviro_framenum); + + f.writeInt(grenade_blew_up?1:0); + f.writeFloat(grenade_time); + f.writeInt(silencer_shots); + f.writeInt(weapon_sound); + f.writeFloat(pickup_msg_time); + f.writeFloat(flood_locktill); + f.writeFloat(flood_when[0]); + f.writeFloat(flood_when[1]); + f.writeFloat(flood_when[2]); + f.writeFloat(flood_when[3]); + f.writeFloat(flood_when[4]); + f.writeFloat(flood_when[5]); + f.writeFloat(flood_when[6]); + f.writeFloat(flood_when[7]); + f.writeFloat(flood_when[8]); + f.writeFloat(flood_when[9]); + f.writeInt(flood_whenhead); + f.writeFloat(respawn_time); + f.writeEdictRef(chase_target); + f.writeInt(update_chase?1:0); + + f.writeInt(8765); + } + public void dump() { *************** *** 358,363 **** Com.Println("chase_target: " + chase_target); Com.Println("update_chase: " + update_chase); - } - } --- 480,483 ---- Index: player_state_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/player_state_t.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** player_state_t.java 9 Jul 2004 06:50:49 -0000 1.3 --- player_state_t.java 20 Aug 2004 21:29:58 -0000 1.4 *************** *** 25,28 **** --- 25,29 ---- import java.io.IOException; + import java.io.RandomAccessFile; import java.nio.ByteBuffer; *************** *** 33,56 **** import jake2.util.Math3D; public class player_state_t { - // player_state_t is the information needed in addition to pmove_state_t - // to rendered a view. There will only be 10 player_state_t sent each second, - // but the number of pmove_state_t changes will be reletive to client - // frame rates ! public pmove_state_t pmove = new pmove_state_t(); // for prediction // these fields do not need to be communicated bit-precise ! public float[] viewangles = { 0, 0, 0 }; // for fixed views ! public float[] viewoffset = { 0, 0, 0 }; // add to pmovestate->origin ! public float[] kick_angles = { 0, 0, 0 }; // add to view direction to get render angles // set by weapon kicks, pain effects, etc ! public float[] gunangles = { 0, 0, 0 }; ! public float[] gunoffset = { 0, 0, 0 }; public int gunindex; public int gunframe; ! public float blend[] = new float[4]; // rgba full screen effect public float fov; // horizontal field of view --- 34,60 ---- import jake2.util.Math3D; + /** + Player_state_t is the information needed in addition to pmove_state_t + to rendered a view. There will only be 10 player_state_t sent each second, + but the number of pmove_state_t changes will be relative to client + frame rates. + */ + public class player_state_t { ! public pmove_state_t pmove= new pmove_state_t(); // for prediction // these fields do not need to be communicated bit-precise ! public float[] viewangles= { 0, 0, 0 }; // for fixed views ! public float[] viewoffset= { 0, 0, 0 }; // add to pmovestate->origin ! public float[] kick_angles= { 0, 0, 0 }; // add to view direction to get render angles // set by weapon kicks, pain effects, etc ! public float[] gunangles= { 0, 0, 0 }; ! public float[] gunoffset= { 0, 0, 0 }; public int gunindex; public int gunframe; ! public float blend[]= new float[4]; // rgba full screen effect public float fov; // horizontal field of view *************** *** 58,144 **** public int rdflags; // refdef flags ! public short stats[] = new short[Defines.MAX_STATS]; ! /** ! * ! */ ! private static player_state_t prototype = new player_state_t(); ! public void clear() { this.set(prototype); } ! ! public player_state_t getClone() ! { return new player_state_t().set(this); } ! ! public player_state_t set(player_state_t from) ! { pmove.set(from.pmove); Math3D.VectorCopy(from.viewangles, viewangles); ! Math3D.VectorCopy(from.viewoffset,viewoffset); Math3D.VectorCopy(from.kick_angles, kick_angles); ! Math3D.VectorCopy(from.gunangles,gunangles); Math3D.VectorCopy(from.gunoffset, gunoffset); ! gunindex = from.gunindex; ! gunframe = from.gunframe; - blend[0] = from.blend[0]; - blend[1] = from.blend[1]; - blend[2] = from.blend[2]; - blend[3] = from.blend[3]; - - fov = from.fov; - rdflags = from.rdflags; - - //stats = new short[Defines.MAX_STATS]; - System.arraycopy(from.stats, 0, stats,0, Defines.MAX_STATS); - return this; } ! public void load(ByteBuffer bb) throws IOException { ! pmove.load(bb); ! viewangles[0] = bb.getFloat(); ! viewangles[1] = bb.getFloat(); ! viewangles[2] = bb.getFloat(); ! viewoffset[0] = bb.getFloat(); ! viewoffset[1] = bb.getFloat(); ! viewoffset[2] = bb.getFloat(); ! kick_angles[0] = bb.getFloat(); ! kick_angles[1] = bb.getFloat(); ! kick_angles[2] = bb.getFloat(); ! gunangles[0] = bb.getFloat(); ! gunangles[1] = bb.getFloat(); ! gunangles[2] = bb.getFloat(); ! gunoffset[0] = bb.getFloat(); ! gunoffset[1] = bb.getFloat(); ! gunoffset[2] = bb.getFloat(); ! gunindex = bb.getInt(); ! gunframe = bb.getInt(); ! blend[0] = bb.getFloat(); ! blend[1] = bb.getFloat(); ! blend[2] = bb.getFloat(); ! blend[3] = bb.getFloat(); ! fov = bb.getFloat(); ! rdflags = bb.getInt(); ! for (int n = 0; n < Defines.MAX_STATS; n++) ! stats[n] = bb.getShort(); } public void dump() { pmove.dump(); --- 62,187 ---- public int rdflags; // refdef flags ! public short stats[]= new short[Defines.MAX_STATS]; ! /** Lets cleverly reset the structure. */ ! private static player_state_t prototype= new player_state_t(); ! ! /** Clears the player_state.*/ public void clear() { this.set(prototype); } ! ! /** Clones the object.*/ ! public player_state_t getClone() { return new player_state_t().set(this); } ! ! /** Copies the player state data. */ ! public player_state_t set(player_state_t from) { pmove.set(from.pmove); Math3D.VectorCopy(from.viewangles, viewangles); ! Math3D.VectorCopy(from.viewoffset, viewoffset); Math3D.VectorCopy(from.kick_angles, kick_angles); ! Math3D.VectorCopy(from.gunangles, gunangles); Math3D.VectorCopy(from.gunoffset, gunoffset); ! gunindex= from.gunindex; ! gunframe= from.gunframe; ! ! blend[0]= from.blend[0]; ! blend[1]= from.blend[1]; ! blend[2]= from.blend[2]; ! blend[3]= from.blend[3]; ! ! fov= from.fov; ! rdflags= from.rdflags; ! ! System.arraycopy(from.stats, 0, stats, 0, Defines.MAX_STATS); return this; } ! /** Reads a player_state from a file.*/ ! public void load(RandomAccessFile f) throws IOException { ! pmove.load(f); ! viewangles[0]= f.readFloat(); ! viewangles[1]= f.readFloat(); ! viewangles[2]= f.readFloat(); ! viewoffset[0]= f.readFloat(); ! viewoffset[1]= f.readFloat(); ! viewoffset[2]= f.readFloat(); ! kick_angles[0]= f.readFloat(); ! kick_angles[1]= f.readFloat(); ! kick_angles[2]= f.readFloat(); ! gunangles[0]= f.readFloat(); ! gunangles[1]= f.readFloat(); ! gunangles[2]= f.readFloat(); ! gunoffset[0]= f.readFloat(); ! gunoffset[1]= f.readFloat(); ! gunoffset[2]= f.readFloat(); ! gunindex= f.readInt(); ! gunframe= f.readInt(); ! blend[0]= f.readFloat(); ! blend[1]= f.readFloat(); ! blend[2]= f.readFloat(); ! blend[3]= f.readFloat(); ! fov= f.readFloat(); ! rdflags= f.readInt(); ! for (int n= 0; n < Defines.MAX_STATS; n++) ! stats[n]= f.readShort(); ! } ! ! /** Writes a player_state to a file.*/ ! public void write(RandomAccessFile f) throws IOException { ! pmove.write(f); ! ! f.writeFloat(viewangles[0]); ! f.writeFloat(viewangles[1]); ! f.writeFloat(viewangles[2]); ! ! f.writeFloat(viewoffset[0]); ! f.writeFloat(viewoffset[1]); ! f.writeFloat(viewoffset[2]); ! ! f.writeFloat(kick_angles[0]); ! f.writeFloat(kick_angles[1]); ! f.writeFloat(kick_angles[2]); ! ! f.writeFloat(gunangles[0]); ! f.writeFloat(gunangles[1]); ! f.writeFloat(gunangles[2]); + f.writeFloat(gunoffset[0]); + f.writeFloat(gunoffset[1]); + f.writeFloat(gunoffset[2]); + + f.writeInt(gunindex); + f.writeInt(gunframe); + + f.writeFloat(blend[0]); + f.writeFloat(blend[1]); + f.writeFloat(blend[2]); + f.writeFloat(blend[3]); + + f.writeFloat(fov); + + f.writeInt(rdflags); + + for (int n= 0; n < Defines.MAX_STATS; n++) + f.writeShort(stats[n]); } + /** Prints the player state. */ public void dump() { pmove.dump(); *************** *** 159,163 **** Com.Println("rdflags: " + rdflags); ! for (int n = 0; n < Defines.MAX_STATS; n++) System.out.println("stats[" + n + "]: " + stats[n]); } --- 202,206 ---- Com.Println("rdflags: " + rdflags); ! for (int n= 0; n < Defines.MAX_STATS; n++) System.out.println("stats[" + n + "]: " + stats[n]); } Index: PlayerClient.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/PlayerClient.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** PlayerClient.java 8 Jul 2004 20:24:29 -0000 1.3 --- PlayerClient.java 20 Aug 2004 21:29:58 -0000 1.4 *************** *** 356,362 **** --- 356,364 ---- if (!ent.inuse) continue; + game.clients[i].pers.health = ent.health; game.clients[i].pers.max_health = ent.max_health; game.clients[i].pers.savedFlags = (ent.flags & (FL_GODMODE | FL_NOTARGET | FL_POWER_ARMOR)); + if (coop.value != 0) game.clients[i].pers.score = ent.client.resp.score; *************** *** 372,382 **** } - /* - ======================================================================= - - SelectSpawnPoint - - ======================================================================= - */ /* --- 374,377 ---- Index: GameUtil.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/GameUtil.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** GameUtil.java 9 Jul 2004 06:50:49 -0000 1.3 --- GameUtil.java 20 Aug 2004 21:29:57 -0000 1.4 *************** *** 888,892 **** static gitem_t FindItem(String pickup_name) { - //Com.Printf("FindItem:" + pickup_name + "\n"); for (int i = 1; i < game.num_items; i++) { --- 888,891 ---- Index: GameBase.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/GameBase.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** GameBase.java 9 Jul 2004 06:50:49 -0000 1.3 --- GameBase.java 20 Aug 2004 21:29:58 -0000 1.4 *************** *** 22,26 **** // $Id$ ! /** Father of all Objects. */ package jake2.game; --- 22,26 ---- // $Id$ ! /** Father of all GameObjects. */ package jake2.game; *************** *** 442,445 **** --- 442,446 ---- public static void G_RunEntity(edict_t ent) { + if (ent.prethink != null) ent.prethink.think(ent); Index: level_locals_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/level_locals_t.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** level_locals_t.java 7 Jul 2004 19:59:25 -0000 1.1.1.1 --- level_locals_t.java 20 Aug 2004 21:29:57 -0000 1.2 *************** *** 24,29 **** package jake2.game; ! public class level_locals_t { ! // // this structure is cleared as each map is entered // it is read/written to the level.sav file for savegames --- 24,36 ---- package jake2.game; ! import jake2.util.Lib; ! import jake2.util.QuakeFile; ! ! import java.io.IOException; ! import java.io.RandomAccessFile; ! ! public class level_locals_t ! { ! // this structure is cleared as each map is entered // it is read/written to the level.sav file for savegames *************** *** 47,52 **** --- 54,61 ---- public edict_t sight_entity; public int sight_entity_framenum; + public edict_t sound_entity; public int sound_entity_framenum; + public edict_t sound2_entity; public int sound2_entity_framenum; *************** *** 67,69 **** --- 76,161 ---- public int power_cubes; // ugly necessity for coop + + /** Writes the levellocales to the file.*/ + public void write(QuakeFile f) throws IOException + { + f.writeInt(framenum); + f.writeFloat(time); + f.writeString(level_name); + f.writeString(mapname); + f.writeString(nextmap); + f.writeFloat(intermissiontime); + f.writeString(changemap); + f.writeBoolean(exitintermission); + f.writeVector(intermission_origin); + f.writeVector(intermission_angle); + f.writeEdictRef(sight_client); + + f.writeEdictRef(sight_entity); + f.writeInt(sight_entity_framenum); + + f.writeEdictRef(sound_entity); + f.writeInt(sound_entity_framenum); + f.writeEdictRef(sound2_entity); + f.writeInt(sound2_entity_framenum); + + f.writeInt(pic_health); + + f.writeInt(total_secrets); + f.writeInt(found_secrets); + + f.writeInt(total_goals); + f.writeInt(found_goals); + f.writeInt(total_monsters); + f.writeInt(killed_monsters); + + f.writeEdictRef(current_entity); + f.writeInt(body_que); // dead bodies + f.writeInt(power_cubes); // ugly necessity for coop + + // rst's checker :-) + f.writeInt(4711); + } + + /** Reads the level locals from the file. */ + public void read(QuakeFile f) throws IOException + { + framenum = f.readInt(); + time = f.readFloat(); + level_name = f.readString(); + mapname = f.readString(); + nextmap = f.readString(); + intermissiontime = f.readFloat(); + changemap = f.readString(); + exitintermission = f.readBoolean(); + intermission_origin = f.readVector(); + intermission_angle = f.readVector(); + sight_client = f.readEdictRef(); + + sight_entity = f.readEdictRef(); + sight_entity_framenum = f.readInt(); + + sound_entity = f.readEdictRef(); + sound_entity_framenum = f.readInt(); + sound2_entity = f.readEdictRef(); + sound2_entity_framenum = f.readInt(); + + pic_health = f.readInt(); + + total_secrets = f.readInt(); + found_secrets = f.readInt(); + + total_goals = f.readInt(); + found_goals = f.readInt(); + total_monsters = f.readInt(); + killed_monsters = f.readInt(); + + current_entity = f.readEdictRef(); + body_que = f.readInt(); // dead bodies + power_cubes = f.readInt(); // ugly necessity for coop + + // rst's checker :-) + if (f.readInt()!= 4711) + System.out.println("error in reading level_locals."); + } } Index: moveinfo_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/moveinfo_t.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** moveinfo_t.java 7 Jul 2004 19:59:26 -0000 1.1.1.1 --- moveinfo_t.java 20 Aug 2004 21:29:58 -0000 1.2 *************** *** 24,27 **** --- 24,31 ---- package jake2.game; + import java.io.IOException; + + import jake2.util.QuakeFile; + public class moveinfo_t { // fixed data *************** *** 52,54 **** --- 56,116 ---- float decel_distance; EntThinkAdapter endfunc; + + /** saves the moveinfo to the file.*/ + public void write(QuakeFile f) throws IOException { + f.writeVector(start_origin); + f.writeVector(start_angles); + f.writeVector(end_origin); + f.writeVector(end_angles); + + f.writeInt(sound_start); + f.writeInt(sound_middle); + f.writeInt(sound_end); + + f.writeFloat(accel); + f.writeFloat(speed); + f.writeFloat(decel); + f.writeFloat(distance); + + f.writeFloat(wait); + + f.writeInt(state); + f.writeVector(dir); + + f.writeFloat(current_speed); + f.writeFloat(move_speed); + f.writeFloat(next_speed); + f.writeFloat(remaining_distance); + f.writeFloat(decel_distance); + f.writeAdapter(endfunc); + } + + /** Reads the moveinfo from a file. */ + public void read(QuakeFile f) throws IOException { + start_origin= f.readVector(); + start_angles= f.readVector(); + end_origin= f.readVector(); + end_angles= f.readVector(); + + sound_start= f.readInt(); + sound_middle= f.readInt(); + sound_end= f.readInt(); + + accel= f.readFloat(); + speed= f.readFloat(); + decel= f.readFloat(); + distance= f.readFloat(); + + wait= f.readFloat(); + + state= f.readInt(); + dir= f.readVector(); + + current_speed= f.readFloat(); + move_speed= f.readFloat(); + next_speed= f.readFloat(); + remaining_distance= f.readFloat(); + decel_distance= f.readFloat(); + endfunc= (EntThinkAdapter) f.readAdapter(); + } } Index: game_locals_t.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/game_locals_t.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** game_locals_t.java 12 Jul 2004 20:47:01 -0000 1.3 --- game_locals_t.java 20 Aug 2004 21:29:58 -0000 1.4 *************** *** 27,32 **** --- 27,36 ---- import jake2.qcommon.Com; import jake2.util.Lib; + import jake2.util.QuakeFile; + import java.io.IOException; + import java.io.RandomAccessFile; import java.nio.ByteBuffer; + import java.util.Date; public class game_locals_t extends Defines *************** *** 60,85 **** public boolean autosaved; ! public void load(ByteBuffer bb) { ! String date = Lib.readString(bb, 16); ! helpmessage1 = Lib.readString(bb, 512); ! helpmessage2 = Lib.readString(bb, 512); ! helpchanged = bb.getInt(); // gclient_t* ! bb.getInt(); ! spawnpoint = Lib.readString(bb, 512); ! maxclients = bb.getInt(); ! maxentities = bb.getInt(); ! serverflags = bb.getInt(); ! num_items = bb.getInt(); ! autosaved = bb.getInt() != 0; } public void dump() { - Com.Println("String helpmessage1: " + helpmessage1); Com.Println("String helpmessage2: " + helpmessage2); --- 64,115 ---- public boolean autosaved; ! /** Reads the game locals from a file. */ ! public void load(QuakeFile f) throws IOException { ! String date = f.readString(); ! helpmessage1 = f.readString(); ! helpmessage2 = f.readString(); ! helpchanged = f.readInt(); // gclient_t* ! ! spawnpoint = f.readString(); ! maxclients = f.readInt(); ! maxentities = f.readInt(); ! serverflags = f.readInt(); ! num_items = f.readInt(); ! autosaved = f.readInt() != 0; ! ! // rst's checker :-) ! if (f.readInt()!=1928) ! System.err.println("error in loading game_locals."); ! ! } ! ! /** Writes the game locals to a file. */ ! public void write(QuakeFile f) throws IOException ! { ! f.writeString(new Date().toString()); ! ! f.writeString(helpmessage1); ! f.writeString(helpmessage2); + f.writeInt(helpchanged); + // gclient_t* + + f.writeString(spawnpoint); + f.writeInt(maxclients); + f.writeInt(maxentities); + f.writeInt(serverflags); + f.writeInt(num_items); + f.writeInt(autosaved?1:0); + // rst's checker :-) + f.writeInt(1928); } + /** Prints the game locals.*/ public void dump() { Com.Println("String helpmessage1: " + helpmessage1); Com.Println("String helpmessage2: " + helpmessage2); Index: GameSave.java =================================================================== RCS file: /cvsroot/jake2/jake2/src/jake2/game/GameSave.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** GameSave.java 7 Jul 2004 19:59:01 -0000 1.1.1.1 --- GameSave.java 20 Aug 2004 21:29:57 -0000 1.2 *************** *** 58,61 **** --- 58,62 ---- for (int i = 0; i < game.maxentities; i++) g_edicts[i] = new edict_t(i); + SV_GAME.ge.edicts = g_edicts; } *************** *** 132,145 **** InitItems(); - //Com_sprintf (game.helpmessage1, sizeof(game.helpmessage1), ""); game.helpmessage1 = ""; - - //Com_sprintf (game.helpmessage2, sizeof(game.helpmessage2), ""); game.helpmessage2 = ""; // initialize all entities for this game game.maxentities = (int) maxentities.value; - - //g_edicts = gi.TagMalloc(game.maxentities * sizeof(g_edicts[0]), TAG_GAME); CreateEdicts(); --- 133,141 ---- *************** *** 150,733 **** game.maxclients = (int) maxclients.value; - //game.clients = gi.TagMalloc(game.maxclients * sizeof(game.clients[0]), TAG_GAME); CreateClients(); ! globals.num_edicts = game.maxclients + 1; } - ////========================================================= - // - //public static void WriteField1 (FILE *f, field_t field, byte base) - //{ - // void *p; - // int len; - // int index; - // - // if (field.flags & FFL_SPAWNTEMP) - // return; - // - // p = (void *)(base + field.ofs); - // switch (field.type) - // { - // case F_INT: - // case F_FLOAT: - // case F_ANGLEHACK: - // case F_VECTOR: - // case F_IGNORE: - // break; - // - // case F_LSTRING: - // case F_GSTRING: - // if ( *(char **)p ) - // len = strlen(*(char **)p) + 1; - // else - // len = 0; - // *(int *)p = len; - // break; - // case F_EDICT: - // if ( *(edict_t **)p == NULL) - // index = -1; - // else - // index = *(edict_t **)p - g_edicts; - // *(int *)p = index; - // break; - // case F_CLIENT: - // if ( *(gclient_t **)p == NULL) - // index = -1; - // else - // index = *(gclient_t **)p - game.clients; - // *(int *)p = index; - // break; - // case F_ITEM: - // if ( *(edict_t **)p == NULL) - // index = -1; - // else - // index = *(gitem_t **)p - itemlist; - // *(int *)p = index; - // break; - // - // //relative to code segment - // case F_FUNCTION: - // if (*(byte **)p == NULL) - // index = 0; - // else - // index = *(byte **)p - ((byte *)InitGame); - // *(int *)p = index; - // break; - // - // //relative to data segment - // case F_MMOVE: - // if (*(byte **)p == NULL) - // index = 0; - // else - // index = *(byte **)p - (byte *)&mmove_reloc; - // *(int *)p = index; - // break; - // - // default: - // gi.error ("WriteEdict: unknown field type"); - // } - //} - // - // - //void WriteField2 (FILE *f, field_t *field, byte *base) - //{ - // int len; - // void *p; - // - // if (field.flags & FFL_SPAWNTEMP) - // return; - // - // p = (void *)(base + field.ofs); - // switch (field.type) - // { - // case F_LSTRING: - // if ( *(char **)p ) - // { - // len = strlen(*(char **)p) + 1; - // fwrite (*(char **)p, len, 1, f); - // } - // break; - // } - //} - // - //void ReadField (FILE *f, field_t *field, byte *base) - //{ - // void *p; - // int len; - // int index; - // - // if (field.flags & FFL_SPAWNTEMP) - // return; - // - // p = (void *)(base + field.ofs); - // switch (field.type) - // { - // case F_INT: - // case F_FLOAT: - // case F_ANGLEHACK: - // case F_VECTOR: - // case F_IGNORE: - // break; - // - // case F_LSTRING: - // len = *(int *)p; - // if (!len) - // *(char **)p = NULL; - // else - // { - // *(char **)p = gi.TagMalloc (len, TAG_LEVEL); - // fread (*(char **)p, len, 1, f); - // } - // break; - // case F_EDICT: - // index = *(int *)p; - // if ( index == -1 ) - // *(edict_t **)p = NULL; - // else - // *(edict_t **)p = &g_edicts[index]; - // break; - // case F_CLIENT: - // index = *(int *)p; - // if ( index == -1 ) - // *(gclient_t **)p = NULL; - // else - // *(gclient_t **)p = &game.clients[index]; - // break; - // case F_ITEM: - // index = *(int *)p; - // if ( index == -1 ) - // *(gitem_t **)p = NULL; - // else - // *(gitem_t **)p = &itemlist[index]; - // break; - // - // //relative to code segment - // case F_FUNCTION: - // index = *(int *)p; - // if ( index == 0 ) - // *(byte **)p = NULL; - // else - // *(byte **)p = ((byte *)InitGame) + index; - // break; - // - // //relative to data segment - // case F_MMOVE: - // index = *(int *)p; - // if (index == 0) - // *(byte **)p = NULL; - // else - // *(byte **)p = (byte *)&mmove_reloc + index; - // break; - // - // default: - // gi.error ("ReadEdict: unknown field type"); - // } - //} - // - ////========================================================= - // - /... [truncated message content] |