diff options
author | Holger Zickner <[email protected]> | 2004-07-09 08:38:30 +0000 |
---|---|---|
committer | Holger Zickner <[email protected]> | 2004-07-09 08:38:30 +0000 |
commit | 76230d5ab9be20bfc25de6f3e50504a4287575d0 (patch) | |
tree | 8ec5a6485478c7fde8944e6477e466e3adceab36 /src/jake2 | |
parent | 1e132c95409d6a7f3baf499b50f0bc7d22969b07 (diff) |
import of Jake2 version v_0_9_2v_0_9_2
Diffstat (limited to 'src/jake2')
74 files changed, 2819 insertions, 1509 deletions
diff --git a/src/jake2/Jake2.java b/src/jake2/Jake2.java index bebd0f0..217cada 100644 --- a/src/jake2/Jake2.java +++ b/src/jake2/Jake2.java @@ -2,7 +2,7 @@ * Jake2.java * Copyright (C) 2003 * - * $Id: Jake2.java,v 1.2.2.1 2004-07-09 08:09:08 hzi Exp $ + * $Id: Jake2.java,v 1.2.2.2 2004-07-09 08:38:30 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -25,9 +25,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jake2; -import java.io.IOException; - -import jake2.qcommon.*; +import jake2.client.SCR; +import jake2.qcommon.Cvar; +import jake2.qcommon.Qcommon; import jake2.sys.Sys; /** @@ -61,17 +61,16 @@ public final class Jake2 { // find time spending rendering last frame newtime = Sys.Milliseconds(); time = newtime - oldtime; - + + // TODO this is a timer hack for Win2000 + // System.currentTimeMillis() resolution bug + if (time == 0 && (Globals.cl_timedemo.value != 0 || SCR.fps.value != 0)) { + time++; + } + if (time > 0) Qcommon.Frame(time); oldtime = newtime; - - // save cpu resources -// try { -// Thread.sleep(1); -// } -// catch (InterruptedException e) { -// } } } } diff --git a/src/jake2/client/CL.java b/src/jake2/client/CL.java index 5b30e34..c758b18 100644 --- a/src/jake2/client/CL.java +++ b/src/jake2/client/CL.java @@ -2,7 +2,7 @@ * CL.java * Copyright (C) 2004 * - * $Id: CL.java,v 1.4 2004-07-08 20:56:50 hzi Exp $ + * $Id: CL.java,v 1.4.2.1 2004-07-09 08:38:24 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -43,17 +43,6 @@ import java.nio.ByteBuffer; */ public final class CL extends CL_pred { - -// static cvar_t adr0; -// static cvar_t adr1; -// static cvar_t adr2; -// static cvar_t adr3; -// static cvar_t adr4; -// static cvar_t adr5; -// static cvar_t adr6; -// static cvar_t adr7; -// static cvar_t adr8; - /* ==================== CL_WriteDemoMessage @@ -713,7 +702,7 @@ public final class CL extends CL_pred { c = Cmd.Argv(0); - Com.Printf(NET.AdrToString(net_from) + ": " + c + " \n"); + Com.Printf(NET.AdrToString(net_from) + ": " + c + "\n"); // server connection if (c.equals("client_connect")) { @@ -1126,17 +1115,17 @@ public final class CL extends CL_pred { if (precache_check == ENV_CNT) { precache_check = ENV_CNT + 1; - CM.intwrap iw = new CM.intwrap(map_checksum); + int iw[] = {map_checksum}; CM.CM_LoadMap(cl.configstrings[CS_MODELS + 1], true, iw); - map_checksum = iw.i; -// TODO MD4 check abgeklemmt -// if ((map_checksum ^ atoi(cl.configstrings[CS_MAPCHECKSUM])) != 0) { -// Com.Error( -// ERR_DROP, -// "Local map version differs from server: " + map_checksum + " != '" + cl.configstrings[CS_MAPCHECKSUM] + "'\n"); -// return; -// } + map_checksum = iw[0]; + + if ((map_checksum ^ atoi(cl.configstrings[CS_MAPCHECKSUM])) != 0) { + Com.Error( + ERR_DROP, + "Local map version differs from server: " + map_checksum + " != '" + cl.configstrings[CS_MAPCHECKSUM] + "'\n"); + return; + } } if (precache_check > ENV_CNT && precache_check < TEXTURE_CNT) { @@ -1201,10 +1190,11 @@ public final class CL extends CL_pred { if (Cmd.Argc() < 2) { - CM.intwrap iw = new CM.intwrap(0); // for detecting cheater maps + int iw[] ={0};// for detecting cheater maps + CM.CM_LoadMap(cl.configstrings[CS_MODELS + 1], true, iw); -// int mapchecksum = iw.i ; + int mapchecksum = iw[0] ; CL.RegisterSounds(); CL.PrepRefresh(); return; @@ -1540,8 +1530,7 @@ public final class CL extends CL_pred { VID.CheckChanges(); if (!cl.refresh_prepped && cls.state == ca_active) { CL.PrepRefresh(); - // TODO force GC after level loading - System.gc(); + // force GC after level loading System.gc(); } diff --git a/src/jake2/client/CL_ents.java b/src/jake2/client/CL_ents.java index d406ff2..228aec6 100644 --- a/src/jake2/client/CL_ents.java +++ b/src/jake2/client/CL_ents.java @@ -2,7 +2,7 @@ * CL_ents.java * Copyright (C) 2004 * - * $Id: CL_ents.java,v 1.3 2004-07-08 20:56:50 hzi Exp $ + * $Id: CL_ents.java,v 1.3.2.1 2004-07-09 08:38:24 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -53,7 +53,7 @@ public class CL_ents extends CL_inv { ================= */ static int bitcounts[] = new int[32]; /// just for protocol profiling - public static int ParseEntityBits(CM.intwrap bits) { + public static int ParseEntityBits(int bits[]) { int b, total; int i; int number; @@ -82,7 +82,7 @@ public class CL_ents extends CL_inv { else number = MSG.ReadByte(net_message); - bits.i = total; + bits[0] = total; return number; } @@ -253,9 +253,9 @@ public class CL_ents extends CL_inv { } while (true) { - CM.intwrap iw = new CM.intwrap(bits); + int iw[] = {bits}; newnum = ParseEntityBits(iw); - bits = iw.i; + bits = iw[0]; if (newnum >= MAX_EDICTS) Com.Error(ERR_DROP, "CL_ParsePacketEntities: bad number:" + newnum); diff --git a/src/jake2/client/CL_input.java b/src/jake2/client/CL_input.java index b55b866..5035aa3 100644 --- a/src/jake2/client/CL_input.java +++ b/src/jake2/client/CL_input.java @@ -2,7 +2,7 @@ * CL_input.java * Copyright (C) 2004 * - * $Id: CL_input.java,v 1.2 2004-07-08 15:58:43 hzi Exp $ + * $Id: CL_input.java,v 1.2.2.1 2004-07-09 08:38:23 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -549,10 +549,7 @@ public class CL_input extends CL_ents { MSG.WriteDeltaUsercmd(buf, oldcmd, cmd); // calculate a checksum over the move commands - buf.data[checksumIndex] = 0; - /*COM_BlockSequenceCRCByte( - buf.data + checksumIndex + 1, buf.cursize - checksumIndex - 1, - cls.netchan.outgoing_sequence);*/ + buf.data[checksumIndex] = Com.BlockSequenceCRCByte(buf.data, checksumIndex + 1, buf.cursize - checksumIndex - 1, cls.netchan.outgoing_sequence); // // deliver the message diff --git a/src/jake2/client/CL_parse.java b/src/jake2/client/CL_parse.java index ad19960..cbda346 100644 --- a/src/jake2/client/CL_parse.java +++ b/src/jake2/client/CL_parse.java @@ -2,7 +2,7 @@ * CL_parse.java * Copyright (C) 2004 * - * $Id: CL_parse.java,v 1.4 2004-07-08 20:56:49 hzi Exp $ + * $Id: CL_parse.java,v 1.4.2.1 2004-07-09 08:38:23 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -360,10 +360,10 @@ public class CL_parse extends CL_view { entity_state_t nullstate = new entity_state_t(null); //memset(nullstate, 0, sizeof(nullstate)); - CM.intwrap bits = new CM.intwrap(0); + int bits[] = {0}; newnum = CL_ents.ParseEntityBits(bits); es = cl_entities[newnum].baseline; - CL_ents.ParseDelta(nullstate, es, newnum, bits.i); + CL_ents.ParseDelta(nullstate, es, newnum, bits[0]); } /* diff --git a/src/jake2/client/CL_view.java b/src/jake2/client/CL_view.java index 08e55c3..b82b350 100644 --- a/src/jake2/client/CL_view.java +++ b/src/jake2/client/CL_view.java @@ -2,7 +2,7 @@ * CL_view.java * Copyright (C) 2004 * - * $Id: CL_view.java,v 1.2 2004-07-08 20:24:29 hzi Exp $ + * $Id: CL_view.java,v 1.2.2.1 2004-07-09 08:38:24 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -25,17 +25,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jake2.client; -import java.util.StringTokenizer; - import jake2.qcommon.CM; import jake2.qcommon.Com; -import jake2.qcommon.xcommand_t; import jake2.sys.Sys; -import jake2.util.Vargs; - - - +import java.util.StringTokenizer; public class CL_view extends CL_input { @@ -50,18 +44,7 @@ public class CL_view extends CL_input { Call before entering a new level, or after changing dlls ================= */ - - private static xcommand_t prepRefreshCallback = new xcommand_t() { - public void execute() { - PrepRefresh2(); - } - }; - static void PrepRefresh() { - re.updateScreen(prepRefreshCallback); - } - - static void PrepRefresh2() { String mapname; int i; String name; @@ -80,13 +63,13 @@ public class CL_view extends CL_input { // register models, pics, and skins Com.Printf("Map: " + mapname + "\r"); - SCR.UpdateScreen2(); + SCR.UpdateScreen(); re.BeginRegistration(mapname); Com.Printf(" \r"); // precache status bar pics Com.Printf("pics\r"); - SCR.UpdateScreen2(); + SCR.UpdateScreen(); SCR.TouchPics(); Com.Printf(" \r"); @@ -99,11 +82,11 @@ public class CL_view extends CL_input { name = new String(cl.configstrings[CS_MODELS+i]); if (name.length() > 37) name = name.substring(0, 36); - /* + if (name.charAt(0) != '*') - Com.Printf("name" + "\r"); - */ - SCR.UpdateScreen2(); + Com.Printf(name + "\r"); + + SCR.UpdateScreen(); Sys.SendKeyEvents(); // pump message loop if (name.charAt(0) == '#') { // special player weapon model @@ -123,7 +106,7 @@ public class CL_view extends CL_input { } Com.Printf("images\r"); - SCR.UpdateScreen2(); + SCR.UpdateScreen(); for (i=1 ; i<MAX_IMAGES && cl.configstrings[CS_IMAGES+i].length() > 0 ; i++) { cl.image_precache[i] = re.RegisterPic(cl.configstrings[CS_IMAGES+i]); Sys.SendKeyEvents(); // pump message loop @@ -133,8 +116,8 @@ public class CL_view extends CL_input { for (i=0 ; i<MAX_CLIENTS ; i++) { if (cl.configstrings[CS_PLAYERSKINS+i].length() == 0) continue; - Com.Printf("client %i\r", new Vargs(1).add(i)); - SCR.UpdateScreen2(); + Com.Printf("client " + i + '\r'); + SCR.UpdateScreen(); Sys.SendKeyEvents(); // pump message loop CL.ParseClientinfo(i); Com.Printf(" \r"); @@ -144,7 +127,7 @@ public class CL_view extends CL_input { // set sky textures and speed Com.Printf("sky\r"); - SCR.UpdateScreen2(); + SCR.UpdateScreen(); rotate = Float.parseFloat(cl.configstrings[CS_SKYROTATE]); StringTokenizer st = new StringTokenizer(cl.configstrings[CS_SKYAXIS]); axis[0] = Float.parseFloat(st.nextToken()); @@ -159,7 +142,7 @@ public class CL_view extends CL_input { // clear any lines of console text Console.ClearNotify(); - SCR.UpdateScreen2(); + SCR.UpdateScreen(); cl.refresh_prepped = true; cl.force_refdef = true; // make sure we have a valid refdef } diff --git a/src/jake2/client/Key.java b/src/jake2/client/Key.java index 0b3e82a..76f3340 100644 --- a/src/jake2/client/Key.java +++ b/src/jake2/client/Key.java @@ -2,7 +2,7 @@ * Key.java * Copyright (C) 2003 * - * $Id: Key.java,v 1.3 2004-07-08 20:24:29 hzi Exp $ + * $Id: Key.java,v 1.3.2.1 2004-07-09 08:38:24 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -119,7 +119,7 @@ public class Key extends Globals { static int history_line = 0; static boolean shift_down = false; static int[] key_repeats = new int[256]; - static int[] keyshift = new int[256]; + //static int[] keyshift = new int[256]; static boolean[] menubound = new boolean[256]; static boolean[] consolekeys = new boolean[256]; @@ -241,31 +241,31 @@ public class Key extends Globals { consolekeys['`'] = false; consolekeys['~'] = false; - for (int i = 0; i < 256; i++) - keyshift[i] = i; - for (int i = 'a'; i <= 'z'; i++) - keyshift[i] = i - 'a' + 'A'; - keyshift['1'] = '!'; - keyshift['2'] = '@'; - keyshift['3'] = '#'; - keyshift['4'] = '$'; - keyshift['5'] = '%'; - keyshift['6'] = '^'; - keyshift['7'] = '&'; - keyshift['8'] = '*'; - keyshift['9'] = '('; - keyshift['0'] = ')'; - keyshift['-'] = '_'; - keyshift['='] = '+'; - keyshift[','] = '<'; - keyshift['.'] = '>'; - keyshift['/'] = '?'; - keyshift[';'] = ':'; - keyshift['\''] = '"'; - keyshift['['] = '{'; - keyshift[']'] = '}'; - keyshift['`'] = '~'; - keyshift['\\'] = '|'; +// for (int i = 0; i < 256; i++) +// keyshift[i] = i; +// for (int i = 'a'; i <= 'z'; i++) +// keyshift[i] = i - 'a' + 'A'; +// keyshift['1'] = '!'; +// keyshift['2'] = '@'; +// keyshift['3'] = '#'; +// keyshift['4'] = '$'; +// keyshift['5'] = '%'; +// keyshift['6'] = '^'; +// keyshift['7'] = '&'; +// keyshift['8'] = '*'; +// keyshift['9'] = '('; +// keyshift['0'] = ')'; +// keyshift['-'] = '_'; +// keyshift['='] = '+'; +// keyshift[','] = '<'; +// keyshift['.'] = '>'; +// keyshift['/'] = '?'; +// keyshift[';'] = ':'; +// keyshift['\''] = '"'; +// keyshift['['] = '{'; +// keyshift[']'] = '}'; +// keyshift['`'] = '~'; +// keyshift['\\'] = '|'; menubound[K_ESCAPE] = true; for (int i = 0; i < 12; i++) @@ -386,13 +386,13 @@ public class Key extends Globals { cmd = "-" + kb.substring(1) + " " + key + " " + time + "\n"; Cbuf.AddText(cmd); } - if (keyshift[key] != key) { - kb = Globals.keybindings[keyshift[key]]; - if (kb != null && kb.length()>0 && kb.charAt(0) == '+') { - cmd = "-" + kb.substring(1) + " " + key + " " + time + "\n"; - Cbuf.AddText(cmd); - } - } +// if (keyshift[key] != key) { +// kb = Globals.keybindings[keyshift[key]]; +// if (kb != null && kb.length()>0 && kb.charAt(0) == '+') { +// cmd = "-" + kb.substring(1) + " " + key + " " + time + "\n"; +// Cbuf.AddText(cmd); +// } +// } return; } @@ -419,8 +419,8 @@ public class Key extends Globals { if (!down) return; // other systems only care about key down events - if (shift_down) - key = keyshift[key]; +// if (shift_down) +// key = keyshift[key]; switch (Globals.cls.key_dest) { case Defines.key_message : diff --git a/src/jake2/client/Menu.java b/src/jake2/client/Menu.java index 00944ed..ec71ad7 100644 --- a/src/jake2/client/Menu.java +++ b/src/jake2/client/Menu.java @@ -2,7 +2,7 @@ * Menu.java * Copyright (C) 2004 * - * $Id: Menu.java,v 1.3 2004-07-08 20:56:49 hzi Exp $ + * $Id: Menu.java,v 1.3.2.1 2004-07-09 08:38:24 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -1226,7 +1226,7 @@ public final class Menu extends Key { static menulist_s s_options_joystick_box = new menulist_s(); static menulist_s s_options_cdvolume_box = new menulist_s(); static menulist_s s_options_quality_list = new menulist_s(); - static menulist_s s_options_compatibility_list = new menulist_s(); + //static menulist_s s_options_compatibility_list = new menulist_s(); static menuaction_s s_options_console_action = new menuaction_s(); static void CrosshairFunc(Object unused) { @@ -1268,7 +1268,13 @@ public final class Menu extends Key { static void ControlsSetMenuItemValues() { s_options_sfxvolume_slider.curvalue = Cvar.VariableValue("s_volume") * 10; s_options_cdvolume_box.curvalue = 1 - ((int) Cvar.VariableValue("cd_nocd")); - s_options_quality_list.curvalue = 1 - ((int) Cvar.VariableValue("s_loadas8bit")); + //s_options_quality_list.curvalue = 1 - ((int) Cvar.VariableValue("s_loadas8bit")); + if ("joal".equals(Cvar.VariableString("s_impl"))) { + s_options_quality_list.curvalue = 0; + } else { + s_options_quality_list.curvalue = 1; + } + s_options_sensitivity_slider.curvalue = (sensitivity.value) * 2; Cvar.SetValue("cl_run", ClampCvar(0, 1, cl_run.value)); @@ -1339,30 +1345,41 @@ public final class Menu extends Key { } static void UpdateSoundQualityFunc(Object unused) { + boolean driverNotChanged = false; if (s_options_quality_list.curvalue != 0) { - Cvar.SetValue("s_khz", 22); - Cvar.SetValue("s_loadas8bit", 0); +// Cvar.SetValue("s_khz", 22); +// Cvar.SetValue("s_loadas8bit", 0); + driverNotChanged = S.getDriverName().equals("dummy"); + Cvar.Set("s_impl", "dummy"); } else { - Cvar.SetValue("s_khz", 11); - Cvar.SetValue("s_loadas8bit", 1); +// Cvar.SetValue("s_khz", 11); +// Cvar.SetValue("s_loadas8bit", 1); + driverNotChanged = S.getDriverName().equals("joal"); + Cvar.Set("s_impl", "joal"); } - Cvar.SetValue("s_primary", s_options_compatibility_list.curvalue); + //Cvar.SetValue("s_primary", s_options_compatibility_list.curvalue); - DrawTextBox(8, 120 - 48, 36, 3); - Print(16 + 16, 120 - 48 + 8, "Restarting the sound system. This"); - Print(16 + 16, 120 - 48 + 16, "could take up to a minute, so"); - Print(16 + 16, 120 - 48 + 24, "please be patient."); + if (driverNotChanged) { + re.EndFrame(); + return; + } else { - // the text box won't show up unless we do a buffer swap - re.EndFrame(); + DrawTextBox(8, 120 - 48, 36, 3); + Print(16 + 16, 120 - 48 + 8, "Restarting the sound system. This"); + Print(16 + 16, 120 - 48 + 16, "could take up to a minute, so"); + Print(16 + 16, 120 - 48 + 24, "please be patient."); - CL.Snd_Restart_f.execute(); + // the text box won't show up unless we do a buffer swap + re.EndFrame(); + + CL.Snd_Restart_f.execute(); + } } static String cd_music_items[] = { "disabled", "enabled", null }; - static String quality_items[] = { "low", "high", null }; + static String soundstate_items[] = { "on", "off", null }; static String compatibility_items[] = { "max compatibility", "max performance", null }; @@ -1410,26 +1427,27 @@ public final class Menu extends Key { s_options_quality_list.x = 0; s_options_quality_list.y = 20; ; - s_options_quality_list.name = "sound quality"; + s_options_quality_list.name = "sound"; s_options_quality_list.callback = new mcallback() { public void execute(Object o) { UpdateSoundQualityFunc(o); } }; - s_options_quality_list.itemnames = quality_items; - s_options_quality_list.curvalue = 1 - (int) Cvar.VariableValue("s_loadas8bit"); - - s_options_compatibility_list.type = MTYPE_SPINCONTROL; - s_options_compatibility_list.x = 0; - s_options_compatibility_list.y = 30; - s_options_compatibility_list.name = "sound compatibility"; - s_options_compatibility_list.callback = new mcallback() { - public void execute(Object o) { - UpdateSoundQualityFunc(o); - } - }; - s_options_compatibility_list.itemnames = compatibility_items; - s_options_compatibility_list.curvalue = (int) Cvar.VariableValue("s_primary"); + s_options_quality_list.itemnames = soundstate_items; + //s_options_quality_list.curvalue = 1 - (int) Cvar.VariableValue("s_loadas8bit"); + + +// s_options_compatibility_list.type = MTYPE_SPINCONTROL; +// s_options_compatibility_list.x = 0; +// s_options_compatibility_list.y = 30; +// s_options_compatibility_list.name = "sound compatibility"; +// s_options_compatibility_list.callback = new mcallback() { +// public void execute(Object o) { +// UpdateSoundQualityFunc(o); +// } +// }; +// s_options_compatibility_list.itemnames = compatibility_items; +// s_options_compatibility_list.curvalue = (int) Cvar.VariableValue("s_primary"); s_options_sensitivity_slider.type = MTYPE_SLIDER; s_options_sensitivity_slider.x = 0; @@ -1563,7 +1581,7 @@ public final class Menu extends Key { Menu_AddItem(s_options_menu, s_options_cdvolume_box); Menu_AddItem(s_options_menu, s_options_quality_list); - Menu_AddItem(s_options_menu, s_options_compatibility_list); +// Menu_AddItem(s_options_menu, s_options_compatibility_list); Menu_AddItem(s_options_menu, s_options_sensitivity_slider); Menu_AddItem(s_options_menu, s_options_alwaysrun_box); Menu_AddItem(s_options_menu, s_options_invertmouse_box); @@ -1653,7 +1671,7 @@ public final class Menu extends Key { "John Cash", "Brian Hook", "", - "+JAVA PORT BY JTEAM", + "+JAVA PORT BY BYTONIC", "CWEI", "HOZ", "RST", @@ -2945,6 +2963,7 @@ public final class Menu extends Key { s_hostname_field.length = 12; s_hostname_field.visible_length = 12; s_hostname_field.buffer = new StringBuffer(Cvar.VariableString("hostname")); + s_hostname_field.cursor = s_hostname_field.buffer.length(); s_startserver_dmoptions_action.type = MTYPE_ACTION; s_startserver_dmoptions_action.name = " deathmatch flags"; @@ -4464,7 +4483,7 @@ public final class Menu extends Key { } Menu_DrawString(f.x + f.parent.x + 24, f.y + f.parent.y, tempbuffer); - + if (Menu_ItemAtCursor(f.parent) == f) { int offset; diff --git a/src/jake2/client/SCR.java b/src/jake2/client/SCR.java index 66b5c33..425250d 100644 --- a/src/jake2/client/SCR.java +++ b/src/jake2/client/SCR.java @@ -2,7 +2,7 @@ * SCR.java * Copyright (C) 2003 * - * $Id: SCR.java,v 1.4 2004-07-08 20:56:49 hzi Exp $ + * $Id: SCR.java,v 1.4.2.1 2004-07-09 08:38:24 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -84,7 +84,7 @@ public final class SCR extends Globals static cvar_t scr_graphscale; static cvar_t scr_graphshift; static cvar_t scr_drawall; - static cvar_t fps; + public static cvar_t fps; static dirty_t scr_dirty = new dirty_t(); static dirty_t[] scr_old_dirty = { new dirty_t(), new dirty_t()}; @@ -98,6 +98,17 @@ public final class SCR extends Globals int x2; int y1; int y2; + + void set(dirty_t src) { + x1 = src.x1; + x2 = src.x2; + y1 = src.y1; + y2 = src.y2; + } + + void clear() { + x1 = x2 = y1 = y2 = 0; + } } /* @@ -700,11 +711,14 @@ public final class SCR extends Globals Clear any parts of the tiled background that were drawn on last frame ============== */ + + static dirty_t clear = new dirty_t(); + static void TileClear() { int i; int top, bottom, left, right; - dirty_t clear = new dirty_t(); + clear.clear(); if (scr_drawall.value != 0) DirtyScreen(); // for power vr or broken page flippers... @@ -718,7 +732,7 @@ public final class SCR extends Globals // erase rect will be the union of the past three frames // so tripple buffering works properly - clear = scr_dirty; + clear.set(scr_dirty); for (i = 0; i < 2; i++) { if (scr_old_dirty[i].x1 < clear.x1) @@ -731,8 +745,8 @@ public final class SCR extends Globals clear.y2 = scr_old_dirty[i].y2; } - scr_old_dirty[1] = scr_old_dirty[0]; - scr_old_dirty[0] = scr_dirty; + scr_old_dirty[1].set(scr_old_dirty[0]); + scr_old_dirty[0].set(scr_dirty); scr_dirty.x1 = 9999; scr_dirty.x2 = -9999; @@ -1452,10 +1466,16 @@ public final class SCR extends Globals private static int lastframes = 0; private static int lasttime = 0; private static String fpsvalue = ""; + static void DrawFPS() { if (fps.value > 0.0f) { + if (fps.modified) { + fps.modified = false; + Cvar.SetValue("cl_maxfps", 1000); + } + int diff = cls.realtime - lasttime; if (diff > (int) (fps.value * 1000)) { @@ -1469,6 +1489,9 @@ public final class SCR extends Globals re.DrawChar(x, 2, fpsvalue.charAt(i)); x += 8; } + } else if (fps.modified){ + fps.modified = false; + Cvar.SetValue("cl_maxfps", 90); } } diff --git a/src/jake2/client/V.java b/src/jake2/client/V.java index 3b9d139..a522360 100644 --- a/src/jake2/client/V.java +++ b/src/jake2/client/V.java @@ -2,7 +2,7 @@ * V.java * Copyright (C) 2003 * - * $Id: V.java,v 1.1 2004-07-07 19:58:52 hzi Exp $ + * $Id: V.java,v 1.1.1.1.2.1 2004-07-09 08:38:24 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -34,6 +34,7 @@ import jake2.util.Math3D; import jake2.util.Vargs; import java.io.IOException; +import java.nio.FloatBuffer; /** * V @@ -53,7 +54,7 @@ public final class V extends Globals { static entity_t[] r_entities = new entity_t[MAX_ENTITIES]; static int r_numparticles; - static particle_t[] r_particles = new particle_t[MAX_PARTICLES]; + //static particle_t[] r_particles = new particle_t[MAX_PARTICLES]; static lightstyle_t[] r_lightstyles = new lightstyle_t[MAX_LIGHTSTYLES]; static { @@ -61,8 +62,6 @@ public final class V extends Globals { r_dlights[i] = new dlight_t(); for (int i = 0; i < r_entities.length; i++) r_entities[i] = new entity_t(); - for (int i = 0; i < r_particles.length; i++) - r_particles[i] = new particle_t(); for (int i = 0; i < r_lightstyles.length; i++) r_lightstyles[i] = new lightstyle_t(); } @@ -99,16 +98,20 @@ public final class V extends Globals { ===================== */ static void AddParticle(float[] org, int color, float alpha) { - particle_t p; - if (r_numparticles >= MAX_PARTICLES) return; - p = r_particles[r_numparticles++]; + int i = r_numparticles++; - VectorCopy(org, p.origin); - p.color = color; - p.alpha = alpha; + int c = particle_t.colorTable[color]; + c |= (int)(alpha * 255) << 24; + particle_t.colorArray.put(i, c); + + i *= 3; + FloatBuffer vertexBuf = particle_t.vertexArray; + vertexBuf.put(i++, org[0]); + vertexBuf.put(i++, org[1]); + vertexBuf.put(i++, org[2]); } /* @@ -158,26 +161,25 @@ public final class V extends Globals { ================ */ static void TestParticles() { - particle_t p; int i, j; float d, r, u; - r_numparticles = MAX_PARTICLES; - for (i = 0; i < r_numparticles; i++) { + float[] origin = {0,0,0}; + + r_numparticles = 0; + for (i = 0; i < MAX_PARTICLES; i++) { d = i * 0.25f; r = 4 * ((i & 7) - 3.5f); u = 4 * (((i >> 3) & 7) - 3.5f); - p = r_particles[i]; for (j = 0; j < 3; j++) - p.origin[j] = + origin[j] = cl.refdef.vieworg[j] + cl.v_forward[j] * d + cl.v_right[j] * r + cl.v_up[j] * u; - p.color = 8; - p.alpha = cl_testparticles.value; + AddParticle(origin, 8, cl_testparticles.value); } } @@ -356,7 +358,6 @@ public final class V extends Globals { cl.refdef.num_entities = r_numentities; cl.refdef.entities = r_entities; cl.refdef.num_particles = r_numparticles; - cl.refdef.particles = r_particles; cl.refdef.num_dlights = r_numdlights; cl.refdef.dlights = r_dlights; cl.refdef.lightstyles = r_lightstyles; diff --git a/src/jake2/client/VID.java b/src/jake2/client/VID.java index 53a943f..b96ac61 100644 --- a/src/jake2/client/VID.java +++ b/src/jake2/client/VID.java @@ -2,7 +2,7 @@ * VID.java * Copyright (C) 2003 * - * $Id: VID.java,v 1.4 2004-07-08 20:56:50 hzi Exp $ + * $Id: VID.java,v 1.4.2.1 2004-07-09 08:38:24 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -370,7 +370,7 @@ public class VID extends Globals { public static void Init() { /* Create the video variables so we know how to start the graphics drivers */ - vid_ref = Cvar.Get("vid_ref", "jogl", CVAR_ARCHIVE); + vid_ref = Cvar.Get("vid_ref", "fastjogl", CVAR_ARCHIVE); vid_xpos = Cvar.Get("vid_xpos", "3", CVAR_ARCHIVE); vid_ypos = Cvar.Get("vid_ypos", "22", CVAR_ARCHIVE); vid_fullscreen = Cvar.Get("vid_fullscreen", "0", CVAR_ARCHIVE); @@ -419,6 +419,7 @@ public class VID extends Globals { // #define REF_3DFXGL 3 // #define REF_OPENGLX 4 static final int REF_OPENGL_JOGL = 0; + static final int REF_OPENGL_FASTJOGL =1; // #define REF_MESA3DGLX 5 // extern cvar_t *vid_ref; @@ -605,6 +606,12 @@ public class VID extends Globals { if (gl_driver.modified) vid_ref.modified = true; break; + case REF_OPENGL_FASTJOGL : + Cvar.Set( "vid_ref", "fastjogl" ); + Cvar.Set( "gl_driver", "fastjogl" ); + if (gl_driver.modified) + vid_ref.modified = true; + break; } Menu.ForceMenuOff(); @@ -634,6 +641,7 @@ public class VID extends Globals { // "[OpenGL glX ]", // "[Mesa 3-D glX ]", "[OpenGL jogl ]", + "[OpenGL fastjogl]", null }; static final String[] yesno_names = @@ -686,6 +694,11 @@ public class VID extends Globals { s_current_menu_index = OPENGL_MENU; s_ref_list[0].curvalue = s_ref_list[1].curvalue = REF_OPENGL_JOGL; } + else if ( vid_ref.string.equalsIgnoreCase("fastjogl")) + { + s_current_menu_index = OPENGL_MENU; + s_ref_list[0].curvalue = s_ref_list[1].curvalue = REF_OPENGL_FASTJOGL; + } // else if (strcmp( vid_ref->string, "softx" ) == 0 ) // { // s_current_menu_index = SOFTWARE_MENU; diff --git a/src/jake2/client/client_state_t.java b/src/jake2/client/client_state_t.java index ff86070..5421cbe 100644 --- a/src/jake2/client/client_state_t.java +++ b/src/jake2/client/client_state_t.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 27.11.2003 by RST. -//$Id: client_state_t.java,v 1.2 2004-07-08 20:56:51 hzi Exp $ +//$Id: client_state_t.java,v 1.2.2.1 2004-07-09 08:38:24 hzi Exp $ package jake2.client; @@ -57,7 +57,7 @@ public class client_state_t { int timedemo_start; public boolean refresh_prepped; // false if on new level or new ref dll - boolean sound_prepped; // ambient sounds can start + public boolean sound_prepped; // ambient sounds can start boolean force_refdef; // vid has changed, so we can't use a paused refdef int parse_entities; // index (not anded off) into cl_parse_entities[] @@ -129,7 +129,7 @@ public class client_state_t { model_t model_draw[] = new model_t[Defines.MAX_MODELS]; cmodel_t model_clip[] = new cmodel_t[Defines.MAX_MODELS]; - sfx_t sound_precache[] = new sfx_t[Defines.MAX_SOUNDS]; + public sfx_t sound_precache[] = new sfx_t[Defines.MAX_SOUNDS]; image_t image_precache[] = new image_t[Defines.MAX_IMAGES]; clientinfo_t clientinfo[] = new clientinfo_t[Defines.MAX_CLIENTS]; diff --git a/src/jake2/client/frame_t.java b/src/jake2/client/frame_t.java index 1e414dc..35e40a0 100644 --- a/src/jake2/client/frame_t.java +++ b/src/jake2/client/frame_t.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 27.11.2003 by RST. -// $Id: frame_t.java,v 1.2 2004-07-08 20:56:50 hzi Exp $ +// $Id: frame_t.java,v 1.2.2.1 2004-07-09 08:38:24 hzi Exp $ package jake2.client; @@ -27,7 +27,7 @@ import jake2.game.player_state_t; import java.util.Arrays; -public class frame_t implements Cloneable { +public class frame_t { public static final int MAX_MAP_AREAS = 256; @@ -37,8 +37,8 @@ public class frame_t implements Cloneable { int deltaframe; byte areabits[] = new byte [MAX_MAP_AREAS/8]; // portalarea visibility bits public player_state_t playerstate = new player_state_t(); // mem - int num_entities; - int parse_entities; // non-masked index into cl_parse_entities array + public int num_entities; + public int parse_entities; // non-masked index into cl_parse_entities array public void set(frame_t from) { valid = from.valid; diff --git a/src/jake2/client/particle_t.java b/src/jake2/client/particle_t.java index 2127b5d..7de8348 100644 --- a/src/jake2/client/particle_t.java +++ b/src/jake2/client/particle_t.java @@ -19,12 +19,24 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 20.11.2003 by RST. -// $Id: particle_t.java,v 1.1 2004-07-07 19:58:52 hzi Exp $ +// $Id: particle_t.java,v 1.1.1.1.2.1 2004-07-09 08:38:23 hzi Exp $ package jake2.client; +import jake2.Defines; +import jake2.util.Lib; + +import java.nio.*; + public class particle_t { - public float origin[] = { 0, 0, 0 }; - public int color; - public float alpha; + + public static FloatBuffer vertexArray = Lib.newFloatBuffer(Defines.MAX_PARTICLES * 3); + public static IntBuffer colorArray = Lib.newIntBuffer(Defines.MAX_PARTICLES, ByteOrder.LITTLE_ENDIAN); + public static int[] colorTable = new int[256]; + + public static void setColorPalette(int[] palette) { + for (int i=0; i < 256; i++) { + colorTable[i] = palette[i] & 0x00FFFFFF; + } + } } diff --git a/src/jake2/client/refdef_t.java b/src/jake2/client/refdef_t.java index a01ab06..cea75df 100644 --- a/src/jake2/client/refdef_t.java +++ b/src/jake2/client/refdef_t.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 20.11.2003 by RST. -// $Id: refdef_t.java,v 1.1 2004-07-07 19:58:52 hzi Exp $ +// $Id: refdef_t.java,v 1.1.1.1.2.1 2004-07-09 08:38:24 hzi Exp $ package jake2.client; @@ -43,5 +43,5 @@ public class refdef_t { public dlight_t dlights[]; public int num_particles; - public particle_t particles[]; + //public particle_t particles[]; } diff --git a/src/jake2/game/Cmd.java b/src/jake2/game/Cmd.java index bbb6742..0fd0105 100644 --- a/src/jake2/game/Cmd.java +++ b/src/jake2/game/Cmd.java @@ -2,7 +2,7 @@ * Cmd.java * Copyright (C) 2003 * - * $Id: Cmd.java,v 1.2 2004-07-08 15:58:43 hzi Exp $ + * $Id: Cmd.java,v 1.2.2.1 2004-07-09 08:38:28 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -35,32 +35,40 @@ import java.util.Arrays; /** * Cmd */ -public final class Cmd extends PlayerView { +public final class Cmd extends PlayerView +{ - static xcommand_t List_f = new xcommand_t() { - public void execute() { - cmd_function_t cmd = Cmd.cmd_functions; - int i = 0; + static xcommand_t List_f= new xcommand_t() + { + public void execute() + { + cmd_function_t cmd= Cmd.cmd_functions; + int i= 0; - while (cmd != null) { + while (cmd != null) + { Com.Printf(cmd.name + '\n'); i++; - cmd = cmd.next; + cmd= cmd.next; } Com.Printf(i + " commands\n"); } }; - static xcommand_t Exec_f = new xcommand_t() { - public void execute() { - if (Cmd.Argc() != 2) { + static xcommand_t Exec_f= new xcommand_t() + { + public void execute() + { + if (Cmd.Argc() != 2) + { Com.Printf("exec <filename> : execute a script file\n"); return; } - byte[] f = null; - f = FS.LoadFile(Cmd.Argv(1)); - if (f == null) { + byte[] f= null; + f= FS.LoadFile(Cmd.Argv(1)); + if (f == null) + { Com.Printf("couldn't exec " + Cmd.Argv(1) + "\n"); return; } @@ -71,77 +79,93 @@ public final class Cmd extends PlayerView { FS.FreeFile(f); } }; - static xcommand_t Echo_f = new xcommand_t() { - public void execute() { - for (int i = 1; i < Cmd.Argc(); i++) { + + static xcommand_t Echo_f= new xcommand_t() + { + public void execute() + { + for (int i= 1; i < Cmd.Argc(); i++) + { Com.Printf(Cmd.Argv(i) + " "); } Com.Printf("'\n"); } }; - static xcommand_t Alias_f = new xcommand_t() { - public void execute() { - cmdalias_t a = null; - if (Cmd.Argc() == 1) { + static xcommand_t Alias_f= new xcommand_t() + { + public void execute() + { + cmdalias_t a= null; + if (Cmd.Argc() == 1) + { Com.Printf("Current alias commands:\n"); - for (a = Globals.cmd_alias; a != null; a = a.next) { + for (a= Globals.cmd_alias; a != null; a= a.next) + { Com.Printf(a.name + " : " + a.value); } return; } - String s = Cmd.Argv(1); - if (s.length() > Globals.MAX_ALIAS_NAME) { + String s= Cmd.Argv(1); + if (s.length() > Globals.MAX_ALIAS_NAME) + { Com.Printf("Alias name is too long\n"); return; } // if the alias already exists, reuse it - for (a = Globals.cmd_alias; a != null; a = a.next) { - if (s.equalsIgnoreCase(a.name)) { - a.value = null; + for (a= Globals.cmd_alias; a != null; a= a.next) + { + if (s.equalsIgnoreCase(a.name)) + { + a.value= null; break; } } - if (a == null) { - a = new cmdalias_t(); - a.next = Globals.cmd_alias; - Globals.cmd_alias = a; + if (a == null) + { + a= new cmdalias_t(); + a.next= Globals.cmd_alias; + Globals.cmd_alias= a; } - a.name = s; + a.name= s; // copy the rest of the command line - String cmd = ""; - int c = Cmd.Argc(); - for (int i = 2; i < c; i++) { - cmd = cmd + Cmd.Argv(i); + String cmd= ""; + int c= Cmd.Argc(); + for (int i= 2; i < c; i++) + { + cmd= cmd + Cmd.Argv(i); if (i != (c - 1)) - cmd = cmd + " "; + cmd= cmd + " "; } - cmd = cmd + "\n"; + cmd= cmd + "\n"; - a.value = cmd; + a.value= cmd; } }; - public static xcommand_t Wait_f = new xcommand_t() { - public void execute() { - Globals.cmd_wait = true; + public static xcommand_t Wait_f= new xcommand_t() + { + public void execute() + { + Globals.cmd_wait= true; } }; - public static cmd_function_t cmd_functions = null; + public static cmd_function_t cmd_functions= null; public static int cmd_argc; - public static String[] cmd_argv = new String[Globals.MAX_STRING_TOKENS]; + public static String[] cmd_argv= new String[Globals.MAX_STRING_TOKENS]; public static String cmd_args; - public static final int ALIAS_LOOP_COUNT = 16; + public static final int ALIAS_LOOP_COUNT= 16; /** * register our commands */ - public static void Init() { + public static void Init() + { Cmd.AddCommand("exec", Exec_f); Cmd.AddCommand("echo", Echo_f); @@ -150,34 +174,37 @@ public final class Cmd extends PlayerView { Cmd.AddCommand("wait", Wait_f); } - private static char expanded[] = new char[MAX_STRING_CHARS]; - private static char temporary[] = new char[MAX_STRING_CHARS]; + private static char expanded[]= new char[MAX_STRING_CHARS]; + private static char temporary[]= new char[MAX_STRING_CHARS]; /* ====================== Cmd_MacroExpandString ====================== */ - public static char[] MacroExpandString(char text[], int len) { + public static char[] MacroExpandString(char text[], int len) + { int i, j, count; boolean inquote; char scan[]; String token; - inquote = false; + inquote= false; - scan = text; + scan= text; - if (len >= MAX_STRING_CHARS) { + if (len >= MAX_STRING_CHARS) + { Com.Printf("Line exceeded " + MAX_STRING_CHARS + " chars, discarded.\n"); return null; } - count = 0; + count= 0; - for (i = 0; i < len; i++) { + for (i= 0; i < len; i++) + { if (scan[i] == '"') - inquote = !inquote; + inquote= !inquote; if (inquote) continue; // don't expand inside quotes @@ -186,19 +213,20 @@ public final class Cmd extends PlayerView { continue; // scan out the complete macro, without $ - Com.ParseHelp ph = new Com.ParseHelp(text, i + 1); - token = Com.Parse(ph); + Com.ParseHelp ph= new Com.ParseHelp(text, i + 1); + token= Com.Parse(ph); if (ph.data == null) continue; - token = Cvar.VariableString(token); + token= Cvar.VariableString(token); - j = token.length(); + j= token.length(); len += j; - if (len >= MAX_STRING_CHARS) { + if (len >= MAX_STRING_CHARS) + { Com.Printf("Expanded line exceeded " + MAX_STRING_CHARS + " chars, discarded.\n"); return null; } @@ -214,16 +242,18 @@ public final class Cmd extends PlayerView { //strcpy(expanded, temporary); System.arraycopy(temporary, 0, expanded, 0, 0); - scan = expanded; + scan= expanded; i--; - if (++count == 100) { + if (++count == 100) + { Com.Printf("Macro expansion loop, discarded.\n"); return null; } } - if (inquote) { + if (inquote) + { Com.Printf("Line has unmatched quote, discarded.\n"); return null; } @@ -239,31 +269,34 @@ public final class Cmd extends PlayerView { $Cvars will be expanded unless they are in a quoted token ============ */ - public static void TokenizeString(char text[], boolean macroExpand) { + public static void TokenizeString(char text[], boolean macroExpand) + { String com_token; - cmd_argc = 0; + cmd_argc= 0; - int len = strlen(text); + int len= strlen(text); // macro expand the text if (macroExpand) - text = MacroExpandString(text, len); + text= MacroExpandString(text, len); if (text == null) return; - len = strlen(text); + len= strlen(text); - Com.ParseHelp ph = new Com.ParseHelp(text); + Com.ParseHelp ph= new Com.ParseHelp(text); - while (true) { + while (true) + { // skip whitespace up to a /n - char c = ph.skipwhitestoeol(); + char c= ph.skipwhitestoeol(); - if (c == '\n') { // a newline seperates commands in the buffer - c = ph.nextchar(); + if (c == '\n') + { // a newline seperates commands in the buffer + c= ph.nextchar(); break; } @@ -271,46 +304,52 @@ public final class Cmd extends PlayerView { return; // set cmd_args to everything after the first arg - if (cmd_argc == 1) { - cmd_args = new String(text, ph.index, len - ph.index); + if (cmd_argc == 1) + { + cmd_args= new String(text, ph.index, len - ph.index); cmd_args.trim(); } - com_token = Com.Parse(ph); + com_token= Com.Parse(ph); if (com_token.length() == 0) return; - if (cmd_argc < MAX_STRING_TOKENS) { - cmd_argv[cmd_argc] = com_token; + if (cmd_argc < MAX_STRING_TOKENS) + { + cmd_argv[cmd_argc]= com_token; cmd_argc++; } } } - public static void AddCommand(String cmd_name, xcommand_t function) { + public static void AddCommand(String cmd_name, xcommand_t function) + { cmd_function_t cmd; //Com.DPrintf("Cmd_AddCommand: " + cmd_name + "\n"); // fail if the command is a variable name - if ((Cvar.VariableString(cmd_name)).length() > 0) { + if ((Cvar.VariableString(cmd_name)).length() > 0) + { Com.Printf("Cmd_AddCommand: " + cmd_name + " already defined as a var\n"); return; } // fail if the command already exists - for (cmd = cmd_functions; cmd != null; cmd = cmd.next) { - if (cmd_name.equals(cmd.name)) { + for (cmd= cmd_functions; cmd != null; cmd= cmd.next) + { + if (cmd_name.equals(cmd.name)) + { Com.Printf("Cmd_AddCommand: " + cmd_name + " already defined\n"); return; } } - cmd = new cmd_function_t(); - cmd.name = cmd_name; - - cmd.function = function; - cmd.next = cmd_functions; - cmd_functions = cmd; + cmd= new cmd_function_t(); + cmd.name= cmd_name; + + cmd.function= function; + cmd.next= cmd_functions; + cmd_functions= cmd; } /* @@ -318,26 +357,30 @@ public final class Cmd extends PlayerView { Cmd_RemoveCommand ============ */ - public static void RemoveCommand(String cmd_name) { - cmd_function_t cmd, back = null; + public static void RemoveCommand(String cmd_name) + { + cmd_function_t cmd, back= null; - back = cmd = cmd_functions; + back= cmd= cmd_functions; - while (true) { + while (true) + { - if (cmd == null) { + if (cmd == null) + { Com.Printf("Cmd_RemoveCommand: " + cmd_name + " not added\n"); return; } - if (0 == strcmp(cmd_name, cmd.name)) { + if (0 == strcmp(cmd_name, cmd.name)) + { if (cmd == cmd_functions) - cmd_functions = cmd.next; + cmd_functions= cmd.next; else - back.next = cmd.next; + back.next= cmd.next; return; } - back = cmd; - cmd = cmd.next; + back= cmd; + cmd= cmd.next; } } @@ -346,10 +389,12 @@ public final class Cmd extends PlayerView { Cmd_Exists ============ */ - public static boolean Exists(String cmd_name) { + public static boolean Exists(String cmd_name) + { cmd_function_t cmd; - for (cmd = cmd_functions; cmd != null; cmd = cmd.next) { + for (cmd= cmd_functions; cmd != null; cmd= cmd.next) + { if (0 == strcmp(cmd_name, cmd.name)) return true; } @@ -357,17 +402,20 @@ public final class Cmd extends PlayerView { return false; } - public static int Argc() { + public static int Argc() + { return cmd_argc; } - public static String Argv(int i) { + public static String Argv(int i) + { if (i < 0 || i >= cmd_argc) return ""; return cmd_argv[i]; } - public static String Args() { + public static String Args() + { return new String(cmd_args); } @@ -379,48 +427,49 @@ public final class Cmd extends PlayerView { FIXME: lookupnoadd the token to speed search? ============ */ - public static void ExecuteString(String text) { + public static void ExecuteString(String text) + { cmd_function_t cmd; cmdalias_t a; TokenizeString(text.toCharArray(), true); -// if (Argc() > 0) { -// Com.DPrintf("tokenized:"); -// for (int xxx = 0; xxx < Argc(); xxx++) -// Com.DPrintf("[" + Argv(xxx) + "]"); -// -// Com.DPrintf("\n"); -// } + // if (Argc() > 0) { + // Com.DPrintf("tokenized:"); + // for (int xxx = 0; xxx < Argc(); xxx++) + // Com.DPrintf("[" + Argv(xxx) + "]"); + // + // Com.DPrintf("\n"); + // } // execute the command line if (Argc() == 0) return; // no tokens // check functions - for (cmd = cmd_functions; cmd != null; cmd = cmd.next) { - if (cmd_argv[0].equalsIgnoreCase(cmd.name)) { - if (null == cmd.function) { // forward to server command + for (cmd= cmd_functions; cmd != null; cmd= cmd.next) + { + if (cmd_argv[0].equalsIgnoreCase(cmd.name)) + { + if (null == cmd.function) + { // forward to server command Cmd.ExecuteString("cmd " + text); + } else { + cmd.function.execute(); } - else - try { - cmd.function.execute(); - } - catch (Exception e) { - System.err.println("Exception in executing a command " + cmd.name + ":"); - e.printStackTrace(); - } return; } } // check alias - for (a = cmd_alias; a != null; a = a.next) { + for (a= cmd_alias; a != null; a= a.next) + { - if (cmd_argv[0].equalsIgnoreCase(a.name)) { + if (cmd_argv[0].equalsIgnoreCase(a.name)) + { - if (++alias_count == ALIAS_LOOP_COUNT) { + if (++alias_count == ALIAS_LOOP_COUNT) + { Com.Printf("ALIAS_LOOP_COUNT\n"); return; } @@ -444,7 +493,8 @@ public final class Cmd extends PlayerView { Give items to a client ================== */ - public static void Give_f(edict_t ent) { + public static void Give_f(edict_t ent) + { String name; gitem_t it; int index; @@ -452,30 +502,34 @@ public final class Cmd extends PlayerView { boolean give_all; edict_t it_ent; - if (GameBase.deathmatch.value == 0 && GameBase.sv_cheats.value == 0) { + if (GameBase.deathmatch.value == 0 && GameBase.sv_cheats.value == 0) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n"); return; } - name = GameBase.gi.args(); + name= GameBase.gi.args(); if (0 == Lib.Q_stricmp(name, "all")) - give_all = true; + give_all= true; else - give_all = false; + give_all= false; - if (give_all || 0 == Lib.Q_stricmp(GameBase.gi.argv(1), "health")) { + if (give_all || 0 == Lib.Q_stricmp(GameBase.gi.argv(1), "health")) + { if (GameBase.gi.argc() == 3) - ent.health = Lib.atoi(GameBase.gi.argv(2)); + ent.health= Lib.atoi(GameBase.gi.argv(2)); else - ent.health = ent.max_health; + ent.health= ent.max_health; if (!give_all) return; } - if (give_all || 0 == Lib.Q_stricmp(name, "weapons")) { - for (i = 1; i < GameBase.game.num_items; i++) { - it = GameAI.itemlist[i]; + if (give_all || 0 == Lib.Q_stricmp(name, "weapons")) + { + for (i= 1; i < GameBase.game.num_items; i++) + { + it= GameAI.itemlist[i]; if (null == it.pickup) continue; if (0 == (it.flags & Defines.IT_WEAPON)) @@ -486,9 +540,11 @@ public final class Cmd extends PlayerView { return; } - if (give_all || 0 == Lib.Q_stricmp(name, "ammo")) { - for (i = 1; i < GameBase.game.num_items; i++) { - it = GameAI.itemlist[i]; + if (give_all || 0 == Lib.Q_stricmp(name, "ammo")) + { + for (i= 1; i < GameBase.game.num_items; i++) + { + it= GameAI.itemlist[i]; if (null == it.pickup) continue; if (0 == (it.flags & Defines.IT_AMMO)) @@ -499,27 +555,29 @@ public final class Cmd extends PlayerView { return; } - if (give_all || Lib.Q_stricmp(name, "armor") == 0) { + if (give_all || Lib.Q_stricmp(name, "armor") == 0) + { gitem_armor_t info; - it = GameUtil.FindItem("Jacket Armor"); - ent.client.pers.inventory[GameUtil.ITEM_INDEX(it)] = 0; + it= GameUtil.FindItem("Jacket Armor"); + ent.client.pers.inventory[GameUtil.ITEM_INDEX(it)]= 0; - it = GameUtil.FindItem("Combat Armor"); - ent.client.pers.inventory[GameUtil.ITEM_INDEX(it)] = 0; + it= GameUtil.FindItem("Combat Armor"); + ent.client.pers.inventory[GameUtil.ITEM_INDEX(it)]= 0; - it = GameUtil.FindItem("Body Armor"); - info = (gitem_armor_t) it.info; - ent.client.pers.inventory[GameUtil.ITEM_INDEX(it)] = info.max_count; + it= GameUtil.FindItem("Body Armor"); + info= (gitem_armor_t) it.info; + ent.client.pers.inventory[GameUtil.ITEM_INDEX(it)]= info.max_count; if (!give_all) return; } - if (give_all || Lib.Q_stricmp(name, "Power Shield") == 0) { - it = GameUtil.FindItem("Power Shield"); - it_ent = GameUtil.G_Spawn(); - it_ent.classname = it.classname; + if (give_all || Lib.Q_stricmp(name, "Power Shield") == 0) + { + it= GameUtil.FindItem("Power Shield"); + it_ent= GameUtil.G_Spawn(); + it_ent.classname= it.classname; GameAI.SpawnItem(it_ent, it); GameAI.Touch_Item(it_ent, ent, GameBase.dummyplane, null); if (it_ent.inuse) @@ -529,44 +587,51 @@ public final class Cmd extends PlayerView { return; } - if (give_all) { - for (i = 1; i < GameBase.game.num_items; i++) { - it = GameAI.itemlist[i]; + if (give_all) + { + for (i= 1; i < GameBase.game.num_items; i++) + { + it= GameAI.itemlist[i]; if (it.pickup != null) continue; if ((it.flags & (Defines.IT_ARMOR | Defines.IT_WEAPON | Defines.IT_AMMO)) != 0) continue; - ent.client.pers.inventory[i] = 1; + ent.client.pers.inventory[i]= 1; } return; } - it = GameUtil.FindItem(name); - if (it == null) { - name = GameBase.gi.argv(1); - it = GameUtil.FindItem(name); - if (it == null) { + it= GameUtil.FindItem(name); + if (it == null) + { + name= GameBase.gi.argv(1); + it= GameUtil.FindItem(name); + if (it == null) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "unknown item\n"); return; } } - if (it.pickup == null) { + if (it.pickup == null) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "non-pickup item\n"); return; } - index = GameUtil.ITEM_INDEX(it); + index= GameUtil.ITEM_INDEX(it); - if ((it.flags & Defines.IT_AMMO) != 0) { + if ((it.flags & Defines.IT_AMMO) != 0) + { if (GameBase.gi.argc() == 3) - ent.client.pers.inventory[index] = Lib.atoi(GameBase.gi.argv(2)); + ent.client.pers.inventory[index]= Lib.atoi(GameBase.gi.argv(2)); else ent.client.pers.inventory[index] += it.quantity; } - else { - it_ent = GameUtil.G_Spawn(); - it_ent.classname = it.classname; + else + { + it_ent= GameUtil.G_Spawn(); + it_ent.classname= it.classname; GameAI.SpawnItem(it_ent, it); GameAI.Touch_Item(it_ent, ent, GameBase.dummyplane, null); if (it_ent.inuse) @@ -583,19 +648,21 @@ public final class Cmd extends PlayerView { argv(0) god ================== */ - public static void God_f(edict_t ent) { + public static void God_f(edict_t ent) + { String msg; - if (GameBase.deathmatch.value == 0 && GameBase.sv_cheats.value == 0) { + if (GameBase.deathmatch.value == 0 && GameBase.sv_cheats.value == 0) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n"); return; } ent.flags ^= Defines.FL_GODMODE; if (0 == (ent.flags & Defines.FL_GODMODE)) - msg = "godmode OFF\n"; + msg= "godmode OFF\n"; else - msg = "godmode ON\n"; + msg= "godmode ON\n"; GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, msg); } @@ -609,19 +676,21 @@ public final class Cmd extends PlayerView { argv(0) notarget ================== */ - public static void Notarget_f(edict_t ent) { + public static void Notarget_f(edict_t ent) + { String msg; - if (GameBase.deathmatch.value != 0 && GameBase.sv_cheats.value == 0) { + if (GameBase.deathmatch.value != 0 && GameBase.sv_cheats.value == 0) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n"); return; } ent.flags ^= Defines.FL_NOTARGET; if (0 == (ent.flags & Defines.FL_NOTARGET)) - msg = "notarget OFF\n"; + msg= "notarget OFF\n"; else - msg = "notarget ON\n"; + msg= "notarget ON\n"; GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, msg); } @@ -633,21 +702,25 @@ public final class Cmd extends PlayerView { argv(0) noclip ================== */ - public static void Noclip_f(edict_t ent) { + public static void Noclip_f(edict_t ent) + { String msg; - if (GameBase.deathmatch.value != 0 && GameBase.sv_cheats.value == 0) { + if (GameBase.deathmatch.value != 0 && GameBase.sv_cheats.value == 0) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n"); return; } - if (ent.movetype == Defines.MOVETYPE_NOCLIP) { - ent.movetype = Defines.MOVETYPE_WALK; - msg = "noclip OFF\n"; + if (ent.movetype == Defines.MOVETYPE_NOCLIP) + { + ent.movetype= Defines.MOVETYPE_WALK; + msg= "noclip OFF\n"; } - else { - ent.movetype = Defines.MOVETYPE_NOCLIP; - msg = "noclip ON\n"; + else + { + ent.movetype= Defines.MOVETYPE_NOCLIP; + msg= "noclip ON\n"; } GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, msg); @@ -660,23 +733,27 @@ public final class Cmd extends PlayerView { Use an inventory item ================== */ - public static void Use_f(edict_t ent) { + public static void Use_f(edict_t ent) + { int index; gitem_t it; String s; - s = GameBase.gi.args(); - it = GameUtil.FindItem(s); - if (it == null) { + s= GameBase.gi.args(); + it= GameUtil.FindItem(s); + if (it == null) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "unknown item: " + s + "\n"); return; } - if (it.use == null) { + if (it.use == null) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "Item is not usable.\n"); return; } - index = GameUtil.ITEM_INDEX(it); - if (0 == ent.client.pers.inventory[index]) { + index= GameUtil.ITEM_INDEX(it); + if (0 == ent.client.pers.inventory[index]) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "Out of item: " + s + "\n"); return; } @@ -691,23 +768,27 @@ public final class Cmd extends PlayerView { Drop an inventory item ================== */ - public static void Drop_f(edict_t ent) { + public static void Drop_f(edict_t ent) + { int index; gitem_t it; String s; - s = GameBase.gi.args(); - it = GameUtil.FindItem(s); - if (it == null) { + s= GameBase.gi.args(); + it= GameUtil.FindItem(s); + if (it == null) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "unknown item: " + s + "\n"); return; } - if (it.drop == null) { + if (it.drop == null) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "Item is not dropable.\n"); return; } - index = GameUtil.ITEM_INDEX(it); - if (0 == ent.client.pers.inventory[index]) { + index= GameUtil.ITEM_INDEX(it); + if (0 == ent.client.pers.inventory[index]) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "Out of item: " + s + "\n"); return; } @@ -720,24 +801,27 @@ public final class Cmd extends PlayerView { Cmd_Inven_f ================= */ - public static void Inven_f(edict_t ent) { + public static void Inven_f(edict_t ent) + { int i; gclient_t cl; - cl = ent.client; + cl= ent.client; - cl.showscores = false; - cl.showhelp = false; + cl.showscores= false; + cl.showhelp= false; - if (cl.showinventory) { - cl.showinventory = false; + if (cl.showinventory) + { + cl.showinventory= false; return; } - cl.showinventory = true; + cl.showinventory= true; GameBase.gi.WriteByte(Defines.svc_inventory); - for (i = 0; i < Defines.MAX_ITEMS; i++) { + for (i= 0; i < Defines.MAX_ITEMS; i++) + { GameBase.gi.WriteShort(cl.pers.inventory[i]); } GameBase.gi.unicast(ent, true); @@ -748,18 +832,21 @@ public final class Cmd extends PlayerView { Cmd_InvUse_f ================= */ - public static void InvUse_f(edict_t ent) { + public static void InvUse_f(edict_t ent) + { gitem_t it; GameAI.ValidateSelectedItem(ent); - if (ent.client.pers.selected_item == -1) { + if (ent.client.pers.selected_item == -1) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "No item to use.\n"); return; } - it = GameAI.itemlist[ent.client.pers.selected_item]; - if (it.use == null) { + it= GameAI.itemlist[ent.client.pers.selected_item]; + if (it.use == null) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "Item is not usable.\n"); return; } @@ -771,26 +858,28 @@ public final class Cmd extends PlayerView { Cmd_WeapPrev_f ================= */ - public static void WeapPrev_f(edict_t ent) { + public static void WeapPrev_f(edict_t ent) + { gclient_t cl; int i, index; gitem_t it; int selected_weapon; - cl = ent.client; + cl= ent.client; if (cl.pers.weapon == null) return; - selected_weapon = GameUtil.ITEM_INDEX(cl.pers.weapon); + selected_weapon= GameUtil.ITEM_INDEX(cl.pers.weapon); // scan for the next valid one - for (i = 1; i <= Defines.MAX_ITEMS; i++) { - index = (selected_weapon + i) % Defines.MAX_ITEMS; + for (i= 1; i <= Defines.MAX_ITEMS; i++) + { + index= (selected_weapon + i) % Defines.MAX_ITEMS; if (0 == cl.pers.inventory[index]) continue; - it = GameAI.itemlist[index]; + it= GameAI.itemlist[index]; if (it.use == null) continue; @@ -807,27 +896,30 @@ public final class Cmd extends PlayerView { Cmd_WeapNext_f ================= */ - public static void WeapNext_f(edict_t ent) { + public static void WeapNext_f(edict_t ent) + { gclient_t cl; int i, index; gitem_t it; int selected_weapon; - cl = ent.client; + cl= ent.client; if (null == cl.pers.weapon) return; - selected_weapon = GameUtil.ITEM_INDEX(cl.pers.weapon); + selected_weapon= GameUtil.ITEM_INDEX(cl.pers.weapon); // scan for the next valid one - for (i = 1; i <= Defines.MAX_ITEMS; i++) { - index = (selected_weapon + Defines.MAX_ITEMS - i) % Defines.MAX_ITEMS; + for (i= 1; i <= Defines.MAX_ITEMS; i++) + { + index= (selected_weapon + Defines.MAX_ITEMS - i) % Defines.MAX_ITEMS; //bugfix rst - if (index == 0) index++; + if (index == 0) + index++; if (0 == cl.pers.inventory[index]) continue; - it = GameAI.itemlist[index]; + it= GameAI.itemlist[index]; if (null == it.use) continue; if (0 == (it.flags & Defines.IT_WEAPON)) @@ -843,20 +935,21 @@ public final class Cmd extends PlayerView { Cmd_WeapLast_f ================= */ - public static void WeapLast_f(edict_t ent) { + public static void WeapLast_f(edict_t ent) + { gclient_t cl; int index; gitem_t it; - cl = ent.client; + cl= ent.client; if (null == cl.pers.weapon || null == cl.pers.lastweapon) return; - index = GameUtil.ITEM_INDEX(cl.pers.lastweapon); + index= GameUtil.ITEM_INDEX(cl.pers.lastweapon); if (0 == cl.pers.inventory[index]) return; - it = GameAI.itemlist[index]; + it= GameAI.itemlist[index]; if (null == it.use) return; if (0 == (it.flags & Defines.IT_WEAPON)) @@ -869,18 +962,21 @@ public final class Cmd extends PlayerView { Cmd_InvDrop_f ================= */ - public static void InvDrop_f(edict_t ent) { + public static void InvDrop_f(edict_t ent) + { gitem_t it; GameAI.ValidateSelectedItem(ent); - if (ent.client.pers.selected_item == -1) { + if (ent.client.pers.selected_item == -1) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "No item to drop.\n"); return; } - it = GameAI.itemlist[ent.client.pers.selected_item]; - if (it.drop == null) { + it= GameAI.itemlist[ent.client.pers.selected_item]; + if (it.drop == null) + { GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "Item is not dropable.\n"); return; } @@ -894,19 +990,21 @@ public final class Cmd extends PlayerView { Display the scoreboard ================== */ - public static void Score_f(edict_t ent) { - ent.client.showinventory = false; - ent.client.showhelp = false; + public static void Score_f(edict_t ent) + { + ent.client.showinventory= false; + ent.client.showhelp= false; if (0 == GameBase.deathmatch.value && 0 == GameBase.coop.value) return; - if (ent.client.showscores) { - ent.client.showscores = false; + if (ent.client.showscores) + { + ent.client.showscores= false; return; } - ent.client.showscores = true; + ent.client.showscores= true; GameAI.DeathmatchScoreboard(ent); } @@ -917,23 +1015,26 @@ public final class Cmd extends PlayerView { Display the current help message ================== */ - public static void Help_f(edict_t ent) { + public static void Help_f(edict_t ent) + { // this is for backwards compatability - if (GameBase.deathmatch.value != 0) { + if (GameBase.deathmatch.value != 0) + { Score_f(ent); return; } - ent.client.showinventory = false; - ent.client.showscores = false; + ent.client.showinventory= false; + ent.client.showscores= false; - if (ent.client.showhelp && (ent.client.pers.game_helpchanged == GameBase.game.helpchanged)) { - ent.client.showhelp = false; + if (ent.client.showhelp && (ent.client.pers.game_helpchanged == GameBase.game.helpchanged)) + { + ent.client.showhelp= false; return; } - ent.client.showhelp = true; - ent.client.pers.helpchanged = 0; + ent.client.showhelp= true; + ent.client.pers.helpchanged= 0; GameAI.HelpComputer(ent); } @@ -944,12 +1045,13 @@ public final class Cmd extends PlayerView { Cmd_Kill_f ================= */ - public static void Kill_f(edict_t ent) { + public static void Kill_f(edict_t ent) + { if ((GameBase.level.time - ent.client.respawn_time) < 5) return; ent.flags &= ~Defines.FL_GODMODE; - ent.health = 0; - GameBase.meansOfDeath = Defines.MOD_SUICIDE; + ent.health= 0; + GameBase.meansOfDeath= Defines.MOD_SUICIDE; GameAIAdapters.player_die.die(ent, ent, ent, 100000, GameBase.vec3_origin); } @@ -958,10 +1060,11 @@ public final class Cmd extends PlayerView { Cmd_PutAway_f ================= */ - public static void PutAway_f(edict_t ent) { - ent.client.showscores = false; - ent.client.showhelp = false; - ent.client.showinventory = false; + public static void PutAway_f(edict_t ent) + { + ent.client.showscores= false; + ent.client.showhelp= false; + ent.client.showinventory= false; } @@ -970,18 +1073,21 @@ public final class Cmd extends PlayerView { Cmd_Players_f ================= */ - public static void Players_f(edict_t ent) { + public static void Players_f(edict_t ent) + { int i; int count; String small; String large; - Integer index[] = new Integer[256]; + Integer index[]= new Integer[256]; - count = 0; - for (i = 0; i < GameBase.maxclients.value; i++) { - if (GameBase.game.clients[i].pers.connected) { - index[count] = new Integer(i); + count= 0; + for (i= 0; i < GameBase.maxclients.value; i++) + { + if (GameBase.game.clients[i].pers.connected) + { + index[count]= new Integer(i); count++; } } @@ -992,16 +1098,18 @@ public final class Cmd extends PlayerView { Arrays.sort(index, 0, count - 1, GameAIAdapters.PlayerSort); // print information - large = ""; + large= ""; - for (i = 0; i < count; i++) { - small = + for (i= 0; i < count; i++) + { + small= GameBase.game.clients[index[i].intValue()].ps.stats[Defines.STAT_FRAGS] + " " + GameBase.game.clients[index[i].intValue()].pers.netname + "\n"; - if (small.length() + large.length() > 1024 - 100) { + if (small.length() + large.length() > 1024 - 100) + { // can't print all of them in one packet large += "...\n"; break; @@ -1017,10 +1125,11 @@ public final class Cmd extends PlayerView { Cmd_Wave_f ================= */ - public static void Wave_f(edict_t ent) { + public static void Wave_f(edict_t ent) + { int i; - i = Lib.atoi(GameBase.gi.argv(1)); + i= Lib.atoi(GameBase.gi.argv(1)); // can't wave when ducked if ((ent.client.ps.pmove.pm_flags & Defines.PMF_DUCKED) != 0) @@ -1029,34 +1138,35 @@ public final class Cmd extends PlayerView { if (ent.client.anim_priority > Defines.ANIM_WAVE) return; - ent.client.anim_priority = Defines.ANIM_WAVE; + ent.client.anim_priority= Defines.ANIM_WAVE; - switch (i) { + switch (i) + { case 0 : GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "flipoff\n"); - ent.s.frame = M_Player.FRAME_flip01 - 1; - ent.client.anim_end = M_Player.FRAME_flip12; + ent.s.frame= M_Player.FRAME_flip01 - 1; + ent.client.anim_end= M_Player.FRAME_flip12; break; case 1 : GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "salute\n"); - ent.s.frame = M_Player.FRAME_salute01 - 1; - ent.client.anim_end = M_Player.FRAME_salute11; + ent.s.frame= M_Player.FRAME_salute01 - 1; + ent.client.anim_end= M_Player.FRAME_salute11; break; case 2 : GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "taunt\n"); - ent.s.frame = M_Player.FRAME_taunt01 - 1; - ent.client.anim_end = M_Player.FRAME_taunt17; + ent.s.frame= M_Player.FRAME_taunt01 - 1; + ent.client.anim_end= M_Player.FRAME_taunt17; break; case 3 : GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "wave\n"); - ent.s.frame = M_Player.FRAME_wave01 - 1; - ent.client.anim_end = M_Player.FRAME_wave11; + ent.s.frame= M_Player.FRAME_wave01 - 1; + ent.client.anim_end= M_Player.FRAME_wave11; break; case 4 : default : GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "point\n"); - ent.s.frame = M_Player.FRAME_point01 - 1; - ent.client.anim_end = M_Player.FRAME_point12; + ent.s.frame= M_Player.FRAME_point01 - 1; + ent.client.anim_end= M_Player.FRAME_point12; break; } } @@ -1066,7 +1176,8 @@ public final class Cmd extends PlayerView { Cmd_Say_f ================== */ - public static void Say_f(edict_t ent, boolean team, boolean arg0) { + public static void Say_f(edict_t ent, boolean team, boolean arg0) + { int i, j; edict_t other; @@ -1077,19 +1188,21 @@ public final class Cmd extends PlayerView { return; if (0 == ((int) (dmflags.value) & (DF_MODELTEAMS | DF_SKINTEAMS))) - team = false; + team= false; if (team) - text = "(" + ent.client.pers.netname + "): "; + text= "(" + ent.client.pers.netname + "): "; else - text = "" + ent.client.pers.netname + ": "; + text= "" + ent.client.pers.netname + ": "; - if (arg0) { + if (arg0) + { strcat(text, gi.argv(0)); strcat(text, " "); strcat(text, gi.args()); } - else { + else + { if (gi.args().startsWith("\"")) text += gi.args().substring(1, gi.args().length() - 1); else @@ -1109,41 +1222,46 @@ public final class Cmd extends PlayerView { // don't let text be too long for malicious reasons if (text.length() > 150) //text[150] = 0; - text = text.substring(0, 150); + text= text.substring(0, 150); strcat(text, "\n"); - if (flood_msgs.value != 0) { - cl = ent.client; + if (flood_msgs.value != 0) + { + cl= ent.client; - if (level.time < cl.flood_locktill) { + if (level.time < cl.flood_locktill) + { gi.cprintf(ent, PRINT_HIGH, "You can't talk for " + (int) (cl.flood_locktill - level.time) + " more seconds\n"); return; } - i = (int) (cl.flood_whenhead - flood_msgs.value + 1); + i= (int) (cl.flood_whenhead - flood_msgs.value + 1); if (i < 0) //i = (sizeof(cl.flood_when) / sizeof(cl.flood_when[0])) + i; - i = (10) + i; - if (cl.flood_when[i] != 0 && level.time - cl.flood_when[i] < flood_persecond.value) { - cl.flood_locktill = level.time + flood_waitdelay.value; + i= (10) + i; + if (cl.flood_when[i] != 0 && level.time - cl.flood_when[i] < flood_persecond.value) + { + cl.flood_locktill= level.time + flood_waitdelay.value; gi.cprintf(ent, PRINT_CHAT, "Flood protection: You can't talk for " + (int) flood_waitdelay.value + " seconds.\n"); return; } //cl.flood_whenhead = (cl.flood_whenhead + 1) % (sizeof(cl.flood_when) / sizeof(cl.flood_when[0])); - cl.flood_whenhead = (cl.flood_whenhead + 1) % 10; - cl.flood_when[cl.flood_whenhead] = level.time; + cl.flood_whenhead= (cl.flood_whenhead + 1) % 10; + cl.flood_when[cl.flood_whenhead]= level.time; } if (dedicated.value != 0) gi.cprintf(null, PRINT_CHAT, "" + text + ""); - for (j = 1; j <= game.maxclients; j++) { - other = g_edicts[j]; + for (j= 1; j <= game.maxclients; j++) + { + other= g_edicts[j]; if (!other.inuse) continue; if (other.client == null) continue; - if (team) { + if (team) + { if (!OnSameTeam(ent, other)) continue; } @@ -1154,23 +1272,25 @@ public final class Cmd extends PlayerView { /** * Returns the playerlist. - * TODO: The list is badly formatted at the moment, RST. + * TODO: The list is badly formatted at the moment. */ - public static void PlayerList_f(edict_t ent) { + public static void PlayerList_f(edict_t ent) + { int i; String st; String text; edict_t e2; // connect time, ping, score, name - text = ""; + text= ""; - for (i = 0; i < GameBase.maxclients.value; i++) { - e2 = GameBase.g_edicts[1 + i]; + for (i= 0; i < GameBase.maxclients.value; i++) + { + e2= GameBase.g_edicts[1 + i]; if (!e2.inuse) continue; - st = + st= "" + (GameBase.level.framenum - e2.client.resp.enterframe) / 600 + ":" @@ -1185,7 +1305,8 @@ public final class Cmd extends PlayerView { + (e2.client.resp.spectator ? " (spectator)" : "") + "\n"; - if (text.length() + st.length() > 1024 - 50) { + if (text.length() + st.length() > 1024 - 50) + { text += "And more...\n"; GameBase.gi.cprintf(ent, Defines.PRINT_HIGH, "" + text + ""); return; @@ -1196,7 +1317,7 @@ public final class Cmd extends PlayerView { } // ====================================================================== - + /* =================== Cmd_ForwardToServer @@ -1206,18 +1327,21 @@ public final class Cmd extends PlayerView { so when they are typed in at the console, they will need to be forwarded. =================== */ - public static void ForwardToServer() { + public static void ForwardToServer() + { String cmd; - - cmd = Cmd.Argv(0); - if (Globals.cls.state <= Defines.ca_connected || cmd.charAt(0) == '-' || cmd.charAt(0) == '+') { + + cmd= Cmd.Argv(0); + if (Globals.cls.state <= Defines.ca_connected || cmd.charAt(0) == '-' || cmd.charAt(0) == '+') + { Com.Printf("Unknown command \"" + cmd + "\"\n"); return; } - + MSG.WriteByte(Globals.cls.netchan.message, Defines.clc_stringcmd); SZ.Print(Globals.cls.netchan.message, cmd); - if (Cmd.Argc() > 1) { + if (Cmd.Argc() > 1) + { SZ.Print(Globals.cls.netchan.message, " "); SZ.Print(Globals.cls.netchan.message, Cmd.Args()); } diff --git a/src/jake2/game/GameBase.java b/src/jake2/game/GameBase.java index ef1e1c9..d32c23c 100644 --- a/src/jake2/game/GameBase.java +++ b/src/jake2/game/GameBase.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 30.11.2003 by RST. -// $Id: GameBase.java,v 1.2 2004-07-08 15:58:44 hzi Exp $ +// $Id: GameBase.java,v 1.2.2.1 2004-07-09 08:38:28 hzi Exp $ /** Father of all Objects. */ @@ -817,24 +817,8 @@ public class GameBase extends Globals continue; } - //TODO: RST: disabled for debugging; - //if (!ent.classname.startsWith("monster") || ent.index == 312) - G_RunEntity(ent); - - // if (ent == g_edicts[307]) - // G_RunEntity(ent); - // else if (ent == g_edicts[1]) - // G_RunEntity(ent); - // - // else if (true) - // if (ent.classname.startsWith("monster") - // || ent.classname.startsWith("trigger") - // || ent.classname.startsWith("target") - // || ent.classname.startsWith( - // "misc_explo") //ent.classname.startsWith("func_door") - // ) //|| ent.classname.startsWith("monster")) - // G_RunEntity(ent); + G_RunEntity(ent); } // see if it is time to end a deathmatch diff --git a/src/jake2/game/GameFunc.java b/src/jake2/game/GameFunc.java index 8860b00..7056e3d 100644 --- a/src/jake2/game/GameFunc.java +++ b/src/jake2/game/GameFunc.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 18.11.2003 by RST. -// $Id: GameFunc.java,v 1.2 2004-07-08 15:58:44 hzi Exp $ +// $Id: GameFunc.java,v 1.2.2.1 2004-07-09 08:38:29 hzi Exp $ package jake2.game; @@ -38,9 +38,6 @@ public class GameFunc extends PlayerView Math3D.VectorSubtract(dest, ent.s.origin, ent.moveinfo.dir); ent.moveinfo.remaining_distance = Math3D.VectorNormalize(ent.moveinfo.dir); - //TODO: BIG HACK !!! - if (ent.moveinfo.remaining_distance == 2) - ent.moveinfo.remaining_distance = 94; ent.moveinfo.endfunc = func; if (ent.moveinfo.speed == ent.moveinfo.accel && ent.moveinfo.speed == ent.moveinfo.decel) diff --git a/src/jake2/game/GameSVCmds.java b/src/jake2/game/GameSVCmds.java index dc0b4f9..6d8b623 100644 --- a/src/jake2/game/GameSVCmds.java +++ b/src/jake2/game/GameSVCmds.java @@ -19,22 +19,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 01.02.2004 by RST. -// $Id: GameSVCmds.java,v 1.1 2004-07-07 19:59:00 hzi Exp $ +// $Id: GameSVCmds.java,v 1.1.1.1.2.1 2004-07-09 08:38:29 hzi Exp $ package jake2.game; +import jake2.qcommon.Com; + import java.io.IOException; import java.io.RandomAccessFile; import java.util.StringTokenizer; -import com.sun.corba.se.internal.ior.ByteBuffer; - -import jake2.*; -import jake2.client.*; -import jake2.qcommon.*; -import jake2.render.*; -import jake2.server.*; - public class GameSVCmds extends GameSpawn { public static void Svcmd_Test_f() { diff --git a/src/jake2/game/GameSpawn.java b/src/jake2/game/GameSpawn.java index edb8cab..071df2c 100644 --- a/src/jake2/game/GameSpawn.java +++ b/src/jake2/game/GameSpawn.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 18.11.2003 by RST. -// $Id: GameSpawn.java,v 1.2 2004-07-08 15:58:44 hzi Exp $ +// $Id: GameSpawn.java,v 1.2.2.1 2004-07-09 08:38:29 hzi Exp $ package jake2.game; @@ -305,7 +305,7 @@ public class GameSpawn extends GameSave { e.teammaster = e; c++; c2++; - Com.Printf("Team:" + e.team+" entity: " + e.index + "\n"); + //Com.Printf("Team:" + e.team+" entity: " + e.index + "\n"); for (j = i + 1; j < globals.num_edicts; j++) { e2 = g_edicts[j]; if (!e2.inuse) @@ -427,7 +427,7 @@ public class GameSpawn extends GameSave { ED_CallSpawn(ent); } //gi.dprintf("player skill level:" +skill.value + "\n"); - gi.dprintf(inhibit + " entities inhibited\n"); + //gi.dprintf(inhibit + " entities inhibited\n"); i = 1; G_FindTeams(); PlayerTrail.Init(); diff --git a/src/jake2/game/GameUtil.java b/src/jake2/game/GameUtil.java index ee52a89..b74c080 100644 --- a/src/jake2/game/GameUtil.java +++ b/src/jake2/game/GameUtil.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 01.11.2003 by RST. -// $Id: GameUtil.java,v 1.2 2004-07-08 15:58:44 hzi Exp $ +// $Id: GameUtil.java,v 1.2.2.1 2004-07-09 08:38:28 hzi Exp $ package jake2.game; @@ -280,7 +280,6 @@ public class GameUtil extends GameBase return false; } - /** TODO: test, / replaced the string operations. */ static String ClientTeam(edict_t ent) { String value; diff --git a/src/jake2/game/GameUtilAdapters.java b/src/jake2/game/GameUtilAdapters.java index 4a3c320..fed5d2f 100644 --- a/src/jake2/game/GameUtilAdapters.java +++ b/src/jake2/game/GameUtilAdapters.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 26.02.2004 by RST. -// $Id: GameUtilAdapters.java,v 1.1 2004-07-08 15:58:44 hzi Exp $ +// $Id: GameUtilAdapters.java,v 1.1.2.1 2004-07-09 08:38:29 hzi Exp $ package jake2.game; @@ -310,7 +310,7 @@ public class GameUtilAdapters if (!taken) return; - Com.p("Picked up:" + ent.classname); + //Com.p("Picked up:" + ent.classname); if (!((GameBase.coop.value != 0) && (ent.item.flags & Defines.IT_STAY_COOP) != 0) || 0 != (ent.spawnflags & (Defines.DROPPED_ITEM | Defines.DROPPED_PLAYER_ITEM))) @@ -322,6 +322,7 @@ public class GameUtilAdapters } } }; + static EntTouchAdapter drop_temp_touch = new EntTouchAdapter() { public void touch(edict_t ent, edict_t other, cplane_t plane, csurface_t surf) @@ -332,6 +333,7 @@ public class GameUtilAdapters Touch_Item.touch(ent, other, plane, surf); } }; + static EntThinkAdapter drop_make_touchable = new EntThinkAdapter() { public boolean think(edict_t ent) @@ -398,7 +400,7 @@ public class GameUtilAdapters ent.client.pers.inventory[GameUtil.ITEM_INDEX(item)]--; //TODO: remove this line - ent.client.pers.inventory[GameUtil.ITEM_INDEX(item)]=0; + //ent.client.pers.inventory[GameUtil.ITEM_INDEX(item)]=0; GameUtil.ValidateSelectedItem(ent); @@ -407,7 +409,7 @@ public class GameUtilAdapters else ent.client.breather_framenum = GameBase.level.framenum + 300; - // gi.sound(ent, CHAN_ITEM, gi.soundindex("items/damage.wav"), 1, ATTN_NORM, 0); + GameBase.gi.sound(ent, Defines.CHAN_ITEM, GameBase.gi.soundindex("items/damage.wav"), 1, Defines.ATTN_NORM, 0); } }; // ====================================================================== @@ -424,7 +426,7 @@ public class GameUtilAdapters else ent.client.enviro_framenum = GameBase.level.framenum + 300; - // gi.sound(ent, CHAN_ITEM, gi.soundindex("items/damage.wav"), 1, ATTN_NORM, 0); + GameBase.gi.sound(ent, Defines.CHAN_ITEM, GameBase.gi.soundindex("items/damage.wav"), 1, Defines.ATTN_NORM, 0); } }; // ====================================================================== @@ -458,7 +460,7 @@ public class GameUtilAdapters GameUtil.ValidateSelectedItem(ent); ent.client.silencer_shots += 30; - // gi.sound(ent, CHAN_ITEM, gi.soundindex("items/damage.wav"), 1, ATTN_NORM, 0); + GameBase.gi.sound(ent, Defines.CHAN_ITEM, GameBase.gi.soundindex("items/damage.wav"), 1, Defines.ATTN_NORM, 0); } }; // ====================================================================== diff --git a/src/jake2/game/M_Actor.java b/src/jake2/game/M_Actor.java index f48ff77..306204f 100644 --- a/src/jake2/game/M_Actor.java +++ b/src/jake2/game/M_Actor.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 11.11.2003 by RST. -// $Id: M_Actor.java,v 1.2 2004-07-08 15:58:44 hzi Exp $ +// $Id: M_Actor.java,v 1.2.2.1 2004-07-09 08:38:29 hzi Exp $ package jake2.game; @@ -731,7 +731,7 @@ public class M_Actor extends GameAI { return; self.pain_debounce_time= level.time + 3; - // gi.sound (self, CHAN_VOICE, actor.sound_pain, 1, ATTN_NORM, 0); + //GameBase.gi.sound (self, CHAN_VOICE, actor.sound_pain, 1, ATTN_NORM, 0); if ((other.client != null) && (Lib.random() < 0.4)) { float v[]= { 0, 0, 0 }; diff --git a/src/jake2/game/PlayerHud.java b/src/jake2/game/PlayerHud.java index b9622e3..fac4fc4 100644 --- a/src/jake2/game/PlayerHud.java +++ b/src/jake2/game/PlayerHud.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 28.12.2003 by RST. -// $Id: PlayerHud.java,v 1.2 2004-07-08 15:58:44 hzi Exp $ +// $Id: PlayerHud.java,v 1.2.2.1 2004-07-09 08:38:28 hzi Exp $ package jake2.game; @@ -100,13 +100,15 @@ public class PlayerHud extends GameTarget { level.intermissiontime = level.time; // TODO: BIG HACK TO IGNORE CINEMATIC + String xxx = targ.map; int pos = xxx.indexOf(".cin"); if (pos != -1) level.changemap = xxx.substring(pos + 5); // including "+" else level.changemap = xxx; - + // ------------------------ + //level.changemap = targ.map; if (level.changemap.indexOf('*') > -1) { if (coop.value != 0) { for (i = 0; i < maxclients.value; i++) { diff --git a/src/jake2/game/game_export_t.java b/src/jake2/game/game_export_t.java index 792b785..3ebb297 100644 --- a/src/jake2/game/game_export_t.java +++ b/src/jake2/game/game_export_t.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 31.10.2003 by RST. -// $Id: game_export_t.java,v 1.2 2004-07-08 15:58:44 hzi Exp $ +// $Id: game_export_t.java,v 1.2.2.1 2004-07-09 08:38:29 hzi Exp $ package jake2.game; @@ -58,8 +58,8 @@ public class game_export_t // ReadGame is called on a loadgame. public void WriteGame(String filename, boolean autosave) { - // TODO WriteGame not implemnted! - Com.Println("WriteGame not implemnted!"); + // TODO WriteGame not implemented. + Com.Println("WriteGame not implemented."); } public void ReadGame(String filename) @@ -71,14 +71,14 @@ public class game_export_t // loaded with SpawnEntities public void WriteLevel(String filename) { - // TODO WriteLevel not implemented! - Com.Println("WriteLevel not implemented!"); + // TODO WriteLevel not implemented. + Com.Println("WriteLevel not implemented."); } public void ReadLevel(String filename) { - // TODO ReadLevel not implemnted! - Com.Println("ReadLevel not implemnted!"); + // TODO ReadLevel not implemented. + Com.Println("ReadLevel not implemented."); } public boolean ClientConnect(edict_t ent, String userinfo) diff --git a/src/jake2/game/player_state_t.java b/src/jake2/game/player_state_t.java index 3ecc17d..772ca2b 100644 --- a/src/jake2/game/player_state_t.java +++ b/src/jake2/game/player_state_t.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 31.10.2003 by RST. -// $Id: player_state_t.java,v 1.2 2004-07-08 20:24:29 hzi Exp $ +// $Id: player_state_t.java,v 1.2.2.1 2004-07-09 08:38:29 hzi Exp $ package jake2.game; @@ -62,7 +62,6 @@ public class player_state_t { /** * */ - // TODO bugfix cwei private static player_state_t prototype = new player_state_t(); public void clear() { diff --git a/src/jake2/qcommon/CM.java b/src/jake2/qcommon/CM.java index 8c5a203..1de50da 100644 --- a/src/jake2/qcommon/CM.java +++ b/src/jake2/qcommon/CM.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 02.01.2004 by RST. -// $Id: CM.java,v 1.2 2004-07-08 15:58:46 hzi Exp $ +// $Id: CM.java,v 1.2.2.1 2004-07-09 08:38:29 hzi Exp $ package jake2.qcommon; @@ -189,7 +189,7 @@ public class CM extends Game { Loads in the map and all submodels ================== */ - public static cmodel_t CM_LoadMap(String name, boolean clientload, intwrap checksum) { + public static cmodel_t CM_LoadMap(String name, boolean clientload, int checksum[]) { Com.DPrintf("CM_LoadMap...\n"); byte buf[]; int i; @@ -200,7 +200,7 @@ public class CM extends Game { if (0 == strcmp(map_name, name) && (clientload || 0 == Cvar.VariableValue("flushmap"))) { - checksum.i = last_checksum; + checksum[0] = last_checksum; if (!clientload) { Arrays.fill(portalopen, false); @@ -222,7 +222,7 @@ public class CM extends Game { numleafs = 1; numclusters = 1; numareas = 1; - checksum.i = 0; + checksum[0] = 0; return map_cmodels[0]; // cinematic servers won't have anything at all } @@ -240,7 +240,7 @@ public class CM extends Game { ByteBuffer bbuf = ByteBuffer.wrap(buf); last_checksum = MD4.Com_BlockChecksum(buf, length); - checksum.i = last_checksum; + checksum[0] = last_checksum; header = new qfiles.dheader_t(bbuf.slice()); @@ -796,7 +796,6 @@ public class CM extends Game { if (l.filelen > MAX_MAP_VISIBILITY) Com.Error(ERR_DROP, "Map has too large visibility lump"); - //was: memcpy(map_visibility, cmod_base + l.fileofs, l.filelen); System.arraycopy(cmod_base, l.fileofs, map_visibility, 0, l.filelen); ByteBuffer bb = ByteBuffer.wrap(map_visibility, 0, l.filelen); @@ -1074,7 +1073,7 @@ public class CM extends Game { } } - public static int CM_BoxLeafnums_headnode(float[] mins, float[] maxs, int list[], int listsize, int headnode, intwrap topnode) { + public static int CM_BoxLeafnums_headnode(float[] mins, float[] maxs, int list[], int listsize, int headnode, int topnode[]) { leaf_list = list; leaf_count = 0; leaf_maxcount = listsize; @@ -1086,22 +1085,23 @@ public class CM extends Game { CM_BoxLeafnums_r(headnode); if (topnode != null) - topnode.i = leaf_topnode; + topnode[0] = leaf_topnode; return leaf_count; } - public static int CM_BoxLeafnums(float[] mins, float[] maxs, int list[], int listsize, intwrap topnode) { + public static int CM_BoxLeafnums(float[] mins, float[] maxs, int list[], int listsize, int topnode[]) { return CM_BoxLeafnums_headnode(mins, maxs, list, listsize, map_cmodels[0].headnode, topnode); } - public static class intwrap { + /* + public static class intwrap1 { public intwrap(int i) { this.i = i; } public int i; } - + */ /* ================== CM_PointContents @@ -1539,10 +1539,10 @@ public class CM extends Game { c2[i] += 1; } - intwrap tn = new intwrap(topnode); + int tn[] = {topnode}; numleafs = CM_BoxLeafnums_headnode(c1, c2, leafs, 1024, headnode, tn); - topnode = tn.i; + topnode = tn[0]; for (i = 0; i < numleafs; i++) { CM_TestInLeaf(leafs[i]); if (trace_trace.allsolid) diff --git a/src/jake2/qcommon/CRC.java b/src/jake2/qcommon/CRC.java index ca22d9b..fd2ca20 100644 --- a/src/jake2/qcommon/CRC.java +++ b/src/jake2/qcommon/CRC.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 25.01.2004 by RST. -// $Id: CRC.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ +// $Id: CRC.java,v 1.1.2.1 2004-07-09 08:38:29 hzi Exp $ package jake2.qcommon; import jake2.util.Vargs; diff --git a/src/jake2/qcommon/Com.java b/src/jake2/qcommon/Com.java index c938fdb..ca9b4ec 100644 --- a/src/jake2/qcommon/Com.java +++ b/src/jake2/qcommon/Com.java @@ -2,7 +2,7 @@ * Com.java * Copyright (C) 2003 * - * $Id: Com.java,v 1.2 2004-07-08 15:58:46 hzi Exp $ + * $Id: Com.java,v 1.2.2.1 2004-07-09 08:38:29 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -38,15 +38,17 @@ import java.io.*; /** * Com - * TODO complete Com interface + * */ -public final class Com { - +public final class Com +{ + static int com_argc; - static String[] com_argv = new String[Defines.MAX_NUM_ARGVS]; - - public abstract static class RD_Flusher { - public abstract void rd_flush(int target, byte [] buffer); + static String[] com_argv= new String[Defines.MAX_NUM_ARGVS]; + + public abstract static class RD_Flusher + { + public abstract void rd_flush(int target, byte[] buffer); } static int rd_target; @@ -54,80 +56,95 @@ public final class Com { static int rd_buffersize; static RD_Flusher rd_flusher; - public static void BeginRedirect(int target, byte [] buffer, int buffersize, RD_Flusher flush) { + public static void BeginRedirect(int target, byte[] buffer, int buffersize, RD_Flusher flush) + { if (0 == target || null == buffer || 0 == buffersize || null == flush) return; - rd_target = target; - rd_buffer = buffer; - rd_buffersize = buffersize; - rd_flusher = flush; + rd_target= target; + rd_buffer= buffer; + rd_buffersize= buffersize; + rd_flusher= flush; - rd_buffer = null; + rd_buffer= null; } - public static void EndRedirect() { + public static void EndRedirect() + { rd_flusher.rd_flush(rd_target, rd_buffer); - rd_target = 0; - rd_buffer = null; - rd_buffersize = 0; - rd_flusher = null; + rd_target= 0; + rd_buffer= null; + rd_buffersize= 0; + rd_flusher= null; } - static boolean recursive = false; + static boolean recursive= false; - static String msg = ""; + static String msg= ""; // helper class to replace the pointer-pointer - public static class ParseHelp { + public static class ParseHelp + { - public ParseHelp(String in, int offset) { + public ParseHelp(String in, int offset) + { this(in.toCharArray(), offset); } - public ParseHelp(String in) { - if (in == null) { - data = null; + public ParseHelp(String in) + { + if (in == null) + { + data= null; } - else { - data = in.toCharArray(); + else + { + data= in.toCharArray(); } - index = 0; + index= 0; } - public ParseHelp(char in[]) { + public ParseHelp(char in[]) + { this(in, 0); } - public ParseHelp(char in[], int offset) { + public ParseHelp(char in[], int offset) + { if (in == null || in.length == 0) - data = null; + data= null; else - data = in; - index = offset; + data= in; + index= offset; } - public char getchar() { + public char getchar() + { // faster than if - try { + try + { return data[index]; } - catch (Exception e) { - data = null; + catch (Exception e) + { + data= null; // last char return 0; } } - public char nextchar() { + public char nextchar() + { // faster than if - try { + try + { index++; return data[index]; } - catch (Exception e) { - data = null; + catch (Exception e) + { + data= null; // avoid int wraps; index--; // last char @@ -135,144 +152,170 @@ public final class Com { } } - public boolean isEof() { + public boolean isEof() + { return data == null; } public int index; public char data[]; - public char skipwhites() { + public char skipwhites() + { char c; - while (((c = getchar()) <= ' ') && c != 0) + while (((c= getchar()) <= ' ') && c != 0) index++; return c; } - public char skipwhitestoeol() { + public char skipwhitestoeol() + { char c; - while (((c = getchar()) <= ' ') && c != '\n' && c != 0) + while (((c= getchar()) <= ' ') && c != '\n' && c != 0) index++; return c; } - public char skiptoeol() { + public char skiptoeol() + { char c; - while ((c = getchar()) != '\n' && c != 0) + while ((c= getchar()) != '\n' && c != 0) index++; return c; } } - public static char com_token[] = new char[Defines.MAX_TOKEN_CHARS]; + public static char com_token[]= new char[Defines.MAX_TOKEN_CHARS]; // See GameSpanw.ED_ParseEdict() to see how to use it now. // works perfect ! - public static String Parse(ParseHelp hlp) { + public static String Parse(ParseHelp hlp) + { int c; - int len = 0; - len = 0; + int len= 0; + len= 0; - com_token[0] = 0; + com_token[0]= 0; - if (hlp.data == null) { + if (hlp.data == null) + { return ""; } // skip whitespace hlp.skipwhites(); - if (hlp.isEof()) { + if (hlp.isEof()) + { return ""; } // skip // comments - if (hlp.getchar() == '/') { - if (hlp.nextchar() == '/') { - if ((hlp.skiptoeol() == 0) || (hlp.skipwhites() == 0)) { + if (hlp.getchar() == '/') + { + if (hlp.nextchar() == '/') + { + if ((hlp.skiptoeol() == 0) || (hlp.skipwhites() == 0)) + { return ""; } } - else { - com_token[len] = '/'; + else + { + com_token[len]= '/'; len++; } } // handle quoted strings specially - if (hlp.getchar() == '\"') { - while (true) { - c = hlp.nextchar(); - if (c == '\"' || c == 0) { + if (hlp.getchar() == '\"') + { + while (true) + { + c= hlp.nextchar(); + if (c == '\"' || c == 0) + { hlp.nextchar(); - com_token[len] = '?'; + com_token[len]= '?'; return new String(com_token, 0, len); } - if (len < Defines.MAX_TOKEN_CHARS) { - com_token[len] = hlp.getchar(); + if (len < Defines.MAX_TOKEN_CHARS) + { + com_token[len]= hlp.getchar(); len++; } } } // parse a regular word - do { - if (len < Defines.MAX_TOKEN_CHARS) { - com_token[len] = hlp.getchar(); + do + { + if (len < Defines.MAX_TOKEN_CHARS) + { + com_token[len]= hlp.getchar(); len++; } - c = hlp.nextchar(); + c= hlp.nextchar(); } while (c > 32); - if (len == Defines.MAX_TOKEN_CHARS) { + if (len == Defines.MAX_TOKEN_CHARS) + { Printf("Token exceeded " + Defines.MAX_TOKEN_CHARS + " chars, discarded.\n"); - len = 0; + len= 0; } // trigger the eof hlp.skipwhites(); - com_token[len] = 0; + com_token[len]= 0; return new String(com_token, 0, len); } - public static xcommand_t Error_f = new xcommand_t() { - public void execute() throws longjmpException { + public static xcommand_t Error_f= new xcommand_t() + { + public void execute() throws longjmpException + { Error(Globals.ERR_FATAL, Cmd.Argv(1)); } }; - public static void Error(int code, String fmt) throws longjmpException { + public static void Error(int code, String fmt) throws longjmpException + { Error(code, fmt, null); } - public static void Error(int code, String fmt, Vargs vargs) throws longjmpException { + public static void Error(int code, String fmt, Vargs vargs) throws longjmpException + { // va_list argptr; // static char msg[MAXPRINTMSG]; - if (recursive) { + if (recursive) + { Sys.Error("recursive error after: " + msg); } - recursive = true; + recursive= true; - msg = sprintf(fmt, vargs); + msg= sprintf(fmt, vargs); - if (code == Defines.ERR_DISCONNECT) { + if (code == Defines.ERR_DISCONNECT) + { CL.Drop(); - recursive = false; + recursive= false; throw new longjmpException(); } - else if (code == Defines.ERR_DROP) { + else if (code == Defines.ERR_DROP) + { Com.Printf("********************\nERROR: " + msg + "\n********************\n"); SV_MAIN.SV_Shutdown("Server crashed: " + msg + "\n", false); CL.Drop(); - recursive = false; + recursive= false; throw new longjmpException(); } - else { + else + { SV_MAIN.SV_Shutdown("Server fatal crashed: %s" + msg + "\n", false); CL.Shutdown(); } @@ -284,43 +327,51 @@ public final class Com { * Com_InitArgv checks the number of command line arguments * and copies all arguments with valid length into com_argv. */ - static void InitArgv(String[] args) throws longjmpException { + static void InitArgv(String[] args) throws longjmpException + { - if (args.length > Globals.MAX_NUM_ARGVS) { + if (args.length > Globals.MAX_NUM_ARGVS) + { Com.Error(Globals.ERR_FATAL, "argc > MAX_NUM_ARGVS"); } - Com.com_argc = args.length; - for (int i = 0; i < Com.com_argc; i++) { + Com.com_argc= args.length; + for (int i= 0; i < Com.com_argc; i++) + { if (args[i].length() >= Globals.MAX_TOKEN_CHARS) - Com.com_argv[i] = ""; + Com.com_argv[i]= ""; else - Com.com_argv[i] = args[i]; + Com.com_argv[i]= args[i]; } } - public static void DPrintf(String fmt) { + public static void DPrintf(String fmt) + { DPrintf(fmt, null); } - - public static void d(String fmt) { + + public static void d(String fmt) + { DPrintf(fmt + "\n", null); } - - public static void Printf(String fmt) { + + public static void Printf(String fmt) + { Printf(fmt, null); } - public static void DPrintf(String fmt, Vargs vargs) { + public static void DPrintf(String fmt, Vargs vargs) + { if (Globals.developer == null || Globals.developer.value == 0) return; // don't confuse non-developers with techie stuff... Printf(fmt, vargs); } - public static void Printf(String fmt, Vargs vargs) { + public static void Printf(String fmt, Vargs vargs) + { // TODO Com.Printf ist nur zum testen - String msg = sprintf(fmt, vargs); + String msg= sprintf(fmt, vargs); if (rd_target != 0) { @@ -328,7 +379,7 @@ public final class Com { { rd_flusher.rd_flush(rd_target, rd_buffer); // *rd_buffer = 0; - rd_buffer[rd_buffersize] = '\0'; + rd_buffer[rd_buffersize]= '\0'; } // TODO handle rd_buffer // strcat(rd_buffer, msg); @@ -336,7 +387,7 @@ public final class Com { } Console.Print(msg); - + // also echo to debugging console Sys.ConsoleOutput(msg); @@ -344,14 +395,14 @@ public final class Com { if (Globals.logfile_active != null && Globals.logfile_active.value != 0) { String name; - + if (Globals.logfile == null) { - name = FS.Gamedir() + "/qconsole.log"; + name= FS.Gamedir() + "/qconsole.log"; if (Globals.logfile_active.value > 2) try { - Globals.logfile = new RandomAccessFile(name, "a"); + Globals.logfile= new RandomAccessFile(name, "a"); } catch (FileNotFoundException e) { @@ -361,7 +412,7 @@ public final class Com { else try { - Globals.logfile = new RandomAccessFile(name, "rw"); + Globals.logfile= new RandomAccessFile(name, "rw"); } catch (FileNotFoundException e1) { @@ -379,58 +430,68 @@ public final class Com { // TODO: do quake2 error handling! e.printStackTrace(); } - if (Globals.logfile_active.value > 1) - ; // do nothing - // fflush (logfile); // force it to save every time + if (Globals.logfile_active.value > 1); // do nothing + // fflush (logfile); // force it to save every time } } - public static void Println(String fmt) { + public static void Println(String fmt) + { Printf(fmt); Printf("\n"); } - - public static void p(String fmt) { + + public static void p(String fmt) + { Printf(fmt); Printf("\n"); } - public static String sprintf(String fmt, Vargs vargs) { - String msg = ""; - if (vargs == null || vargs.size() == 0) { - msg = fmt; + public static String sprintf(String fmt, Vargs vargs) + { + String msg= ""; + if (vargs == null || vargs.size() == 0) + { + msg= fmt; } - else { - msg = new PrintfFormat(fmt).sprintf(vargs.toArray()); + else + { + msg= new PrintfFormat(fmt).sprintf(vargs.toArray()); } return msg; } - public static int ServerState() { + public static int ServerState() + { return Globals.server_state; } - public static int Argc() { + public static int Argc() + { return Com.com_argc; } - public static String Argv(int arg) { + public static String Argv(int arg) + { if (arg < 0 || arg >= Com.com_argc || Com.com_argv[arg].length() < 1) return ""; return Com.com_argv[arg]; } - public static void ClearArgv(int arg) { + public static void ClearArgv(int arg) + { if (arg < 0 || arg >= Com.com_argc || Com.com_argv[arg].length() < 1) return; - Com.com_argv[arg] = ""; + Com.com_argv[arg]= ""; } - public static void Quit() { + public static void Quit() + { SV_MAIN.SV_Shutdown("Server quit\n", false); CL.Shutdown(); - if (Globals.logfile != null) { + if (Globals.logfile != null) + { try { Globals.logfile.close(); @@ -438,25 +499,1036 @@ public final class Com { catch (IOException e) { } - Globals.logfile = null; + Globals.logfile= null; } Sys.Quit(); } - public static void SetServerState(int i) { - Globals.server_state = i; + Globals.server_state= i; } - public static int BlockChecksum(byte[] buf, int length) { return MD4.Com_BlockChecksum(buf, length); } - public static void StripExtension(String string, String string2) { - // TODO implement! + public static void StripExtension(String string, String string2) + { + // TODO implement StripExtension } + + /** + * CRC table. + */ + + static int chktbl[]= + { + 0x84, + 0x47, + 0x51, + 0xc1, + 0x93, + 0x22, + 0x21, + 0x24, + 0x2f, + 0x66, + 0x60, + 0x4d, + 0xb0, + 0x7c, + 0xda, + 0x88, + 0x54, + 0x15, + 0x2b, + 0xc6, + 0x6c, + 0x89, + 0xc5, + 0x9d, + 0x48, + 0xee, + 0xe6, + 0x8a, + 0xb5, + 0xf4, + 0xcb, + 0xfb, + 0xf1, + 0x0c, + 0x2e, + 0xa0, + 0xd7, + 0xc9, + 0x1f, + 0xd6, + 0x06, + 0x9a, + 0x09, + 0x41, + 0x54, + 0x67, + 0x46, + 0xc7, + 0x74, + 0xe3, + 0xc8, + 0xb6, + 0x5d, + 0xa6, + 0x36, + 0xc4, + 0xab, + 0x2c, + 0x7e, + 0x85, + 0xa8, + 0xa4, + 0xa6, + 0x4d, + 0x96, + 0x19, + 0x19, + 0x9a, + 0xcc, + 0xd8, + 0xac, + 0x39, + 0x5e, + 0x3c, + 0xf2, + 0xf5, + 0x5a, + 0x72, + 0xe5, + 0xa9, + 0xd1, + 0xb3, + 0x23, + 0x82, + 0x6f, + 0x29, + 0xcb, + 0xd1, + 0xcc, + 0x71, + 0xfb, + 0xea, + 0x92, + 0xeb, + 0x1c, + 0xca, + 0x4c, + 0x70, + 0xfe, + 0x4d, + 0xc9, + 0x67, + 0x43, + 0x47, + 0x94, + 0xb9, + 0x47, + 0xbc, + 0x3f, + 0x01, + 0xab, + 0x7b, + 0xa6, + 0xe2, + 0x76, + 0xef, + 0x5a, + 0x7a, + 0x29, + 0x0b, + 0x51, + 0x54, + 0x67, + 0xd8, + 0x1c, + 0x14, + 0x3e, + 0x29, + 0xec, + 0xe9, + 0x2d, + 0x48, + 0x67, + 0xff, + 0xed, + 0x54, + 0x4f, + 0x48, + 0xc0, + 0xaa, + 0x61, + 0xf7, + 0x78, + 0x12, + 0x03, + 0x7a, + 0x9e, + 0x8b, + 0xcf, + 0x83, + 0x7b, + 0xae, + 0xca, + 0x7b, + 0xd9, + 0xe9, + 0x53, + 0x2a, + 0xeb, + 0xd2, + 0xd8, + 0xcd, + 0xa3, + 0x10, + 0x25, + 0x78, + 0x5a, + 0xb5, + 0x23, + 0x06, + 0x93, + 0xb7, + 0x84, + 0xd2, + 0xbd, + 0x96, + 0x75, + 0xa5, + 0x5e, + 0xcf, + 0x4e, + 0xe9, + 0x50, + 0xa1, + 0xe6, + 0x9d, + 0xb1, + 0xe3, + 0x85, + 0x66, + 0x28, + 0x4e, + 0x43, + 0xdc, + 0x6e, + 0xbb, + 0x33, + 0x9e, + 0xf3, + 0x0d, + 0x00, + 0xc1, + 0xcf, + 0x67, + 0x34, + 0x06, + 0x7c, + 0x71, + 0xe3, + 0x63, + 0xb7, + 0xb7, + 0xdf, + 0x92, + 0xc4, + 0xc2, + 0x25, + 0x5c, + 0xff, + 0xc3, + 0x6e, + 0xfc, + 0xaa, + 0x1e, + 0x2a, + 0x48, + 0x11, + 0x1c, + 0x36, + 0x68, + 0x78, + 0x86, + 0x79, + 0x30, + 0xc3, + 0xd6, + 0xde, + 0xbc, + 0x3a, + 0x2a, + 0x6d, + 0x1e, + 0x46, + 0xdd, + 0xe0, + 0x80, + 0x1e, + 0x44, + 0x3b, + 0x6f, + 0xaf, + 0x31, + 0xda, + 0xa2, + 0xbd, + 0x77, + 0x06, + 0x56, + 0xc0, + 0xb7, + 0x92, + 0x4b, + 0x37, + 0xc0, + 0xfc, + 0xc2, + 0xd5, + 0xfb, + 0xa8, + 0xda, + 0xf5, + 0x57, + 0xa8, + 0x18, + 0xc0, + 0xdf, + 0xe7, + 0xaa, + 0x2a, + 0xe0, + 0x7c, + 0x6f, + 0x77, + 0xb1, + 0x26, + 0xba, + 0xf9, + 0x2e, + 0x1d, + 0x16, + 0xcb, + 0xb8, + 0xa2, + 0x44, + 0xd5, + 0x2f, + 0x1a, + 0x79, + 0x74, + 0x87, + 0x4b, + 0x00, + 0xc9, + 0x4a, + 0x3a, + 0x65, + 0x8f, + 0xe6, + 0x5d, + 0xe5, + 0x0a, + 0x77, + 0xd8, + 0x1a, + 0x14, + 0x41, + 0x75, + 0xb1, + 0xe2, + 0x50, + 0x2c, + 0x93, + 0x38, + 0x2b, + 0x6d, + 0xf3, + 0xf6, + 0xdb, + 0x1f, + 0xcd, + 0xff, + 0x14, + 0x70, + 0xe7, + 0x16, + 0xe8, + 0x3d, + 0xf0, + 0xe3, + 0xbc, + 0x5e, + 0xb6, + 0x3f, + 0xcc, + 0x81, + 0x24, + 0x67, + 0xf3, + 0x97, + 0x3b, + 0xfe, + 0x3a, + 0x96, + 0x85, + 0xdf, + 0xe4, + 0x6e, + 0x3c, + 0x85, + 0x05, + 0x0e, + 0xa3, + 0x2b, + 0x07, + 0xc8, + 0xbf, + 0xe5, + 0x13, + 0x82, + 0x62, + 0x08, + 0x61, + 0x69, + 0x4b, + 0x47, + 0x62, + 0x73, + 0x44, + 0x64, + 0x8e, + 0xe2, + 0x91, + 0xa6, + 0x9a, + 0xb7, + 0xe9, + 0x04, + 0xb6, + 0x54, + 0x0c, + 0xc5, + 0xa9, + 0x47, + 0xa6, + 0xc9, + 0x08, + 0xfe, + 0x4e, + 0xa6, + 0xcc, + 0x8a, + 0x5b, + 0x90, + 0x6f, + 0x2b, + 0x3f, + 0xb6, + 0x0a, + 0x96, + 0xc0, + 0x78, + 0x58, + 0x3c, + 0x76, + 0x6d, + 0x94, + 0x1a, + 0xe4, + 0x4e, + 0xb8, + 0x38, + 0xbb, + 0xf5, + 0xeb, + 0x29, + 0xd8, + 0xb0, + 0xf3, + 0x15, + 0x1e, + 0x99, + 0x96, + 0x3c, + 0x5d, + 0x63, + 0xd5, + 0xb1, + 0xad, + 0x52, + 0xb8, + 0x55, + 0x70, + 0x75, + 0x3e, + 0x1a, + 0xd5, + 0xda, + 0xf6, + 0x7a, + 0x48, + 0x7d, + 0x44, + 0x41, + 0xf9, + 0x11, + 0xce, + 0xd7, + 0xca, + 0xa5, + 0x3d, + 0x7a, + 0x79, + 0x7e, + 0x7d, + 0x25, + 0x1b, + 0x77, + 0xbc, + 0xf7, + 0xc7, + 0x0f, + 0x84, + 0x95, + 0x10, + 0x92, + 0x67, + 0x15, + 0x11, + 0x5a, + 0x5e, + 0x41, + 0x66, + 0x0f, + 0x38, + 0x03, + 0xb2, + 0xf1, + 0x5d, + 0xf8, + 0xab, + 0xc0, + 0x02, + 0x76, + 0x84, + 0x28, + 0xf4, + 0x9d, + 0x56, + 0x46, + 0x60, + 0x20, + 0xdb, + 0x68, + 0xa7, + 0xbb, + 0xee, + 0xac, + 0x15, + 0x01, + 0x2f, + 0x20, + 0x09, + 0xdb, + 0xc0, + 0x16, + 0xa1, + 0x89, + 0xf9, + 0x94, + 0x59, + 0x00, + 0xc1, + 0x76, + 0xbf, + 0xc1, + 0x4d, + 0x5d, + 0x2d, + 0xa9, + 0x85, + 0x2c, + 0xd6, + 0xd3, + 0x14, + 0xcc, + 0x02, + 0xc3, + 0xc2, + 0xfa, + 0x6b, + 0xb7, + 0xa6, + 0xef, + 0xdd, + 0x12, + 0x26, + 0xa4, + 0x63, + 0xe3, + 0x62, + 0xbd, + 0x56, + 0x8a, + 0x52, + 0x2b, + 0xb9, + 0xdf, + 0x09, + 0xbc, + 0x0e, + 0x97, + 0xa9, + 0xb0, + 0x82, + 0x46, + 0x08, + 0xd5, + 0x1a, + 0x8e, + 0x1b, + 0xa7, + 0x90, + 0x98, + 0xb9, + 0xbb, + 0x3c, + 0x17, + 0x9a, + 0xf2, + 0x82, + 0xba, + 0x64, + 0x0a, + 0x7f, + 0xca, + 0x5a, + 0x8c, + 0x7c, + 0xd3, + 0x79, + 0x09, + 0x5b, + 0x26, + 0xbb, + 0xbd, + 0x25, + 0xdf, + 0x3d, + 0x6f, + 0x9a, + 0x8f, + 0xee, + 0x21, + 0x66, + 0xb0, + 0x8d, + 0x84, + 0x4c, + 0x91, + 0x45, + 0xd4, + 0x77, + 0x4f, + 0xb3, + 0x8c, + 0xbc, + 0xa8, + 0x99, + 0xaa, + 0x19, + 0x53, + 0x7c, + 0x02, + 0x87, + 0xbb, + 0x0b, + 0x7c, + 0x1a, + 0x2d, + 0xdf, + 0x48, + 0x44, + 0x06, + 0xd6, + 0x7d, + 0x0c, + 0x2d, + 0x35, + 0x76, + 0xae, + 0xc4, + 0x5f, + 0x71, + 0x85, + 0x97, + 0xc4, + 0x3d, + 0xef, + 0x52, + 0xbe, + 0x00, + 0xe4, + 0xcd, + 0x49, + 0xd1, + 0xd1, + 0x1c, + 0x3c, + 0xd0, + 0x1c, + 0x42, + 0xaf, + 0xd4, + 0xbd, + 0x58, + 0x34, + 0x07, + 0x32, + 0xee, + 0xb9, + 0xb5, + 0xea, + 0xff, + 0xd7, + 0x8c, + 0x0d, + 0x2e, + 0x2f, + 0xaf, + 0x87, + 0xbb, + 0xe6, + 0x52, + 0x71, + 0x22, + 0xf5, + 0x25, + 0x17, + 0xa1, + 0x82, + 0x04, + 0xc2, + 0x4a, + 0xbd, + 0x57, + 0xc6, + 0xab, + 0xc8, + 0x35, + 0x0c, + 0x3c, + 0xd9, + 0xc2, + 0x43, + 0xdb, + 0x27, + 0x92, + 0xcf, + 0xb8, + 0x25, + 0x60, + 0xfa, + 0x21, + 0x3b, + 0x04, + 0x52, + 0xc8, + 0x96, + 0xba, + 0x74, + 0xe3, + 0x67, + 0x3e, + 0x8e, + 0x8d, + 0x61, + 0x90, + 0x92, + 0x59, + 0xb6, + 0x1a, + 0x1c, + 0x5e, + 0x21, + 0xc1, + 0x65, + 0xe5, + 0xa6, + 0x34, + 0x05, + 0x6f, + 0xc5, + 0x60, + 0xb1, + 0x83, + 0xc1, + 0xd5, + 0xd5, + 0xed, + 0xd9, + 0xc7, + 0x11, + 0x7b, + 0x49, + 0x7a, + 0xf9, + 0xf9, + 0x84, + 0x47, + 0x9b, + 0xe2, + 0xa5, + 0x82, + 0xe0, + 0xc2, + 0x88, + 0xd0, + 0xb2, + 0x58, + 0x88, + 0x7f, + 0x45, + 0x09, + 0x67, + 0x74, + 0x61, + 0xbf, + 0xe6, + 0x40, + 0xe2, + 0x9d, + 0xc2, + 0x47, + 0x05, + 0x89, + 0xed, + 0xcb, + 0xbb, + 0xb7, + 0x27, + 0xe7, + 0xdc, + 0x7a, + 0xfd, + 0xbf, + 0xa8, + 0xd0, + 0xaa, + 0x10, + 0x39, + 0x3c, + 0x20, + 0xf0, + 0xd3, + 0x6e, + 0xb1, + 0x72, + 0xf8, + 0xe6, + 0x0f, + 0xef, + 0x37, + 0xe5, + 0x09, + 0x33, + 0x5a, + 0x83, + 0x43, + 0x80, + 0x4f, + 0x65, + 0x2f, + 0x7c, + 0x8c, + 0x6a, + 0xa0, + 0x82, + 0x0c, + 0xd4, + 0xd4, + 0xfa, + 0x81, + 0x60, + 0x3d, + 0xdf, + 0x06, + 0xf1, + 0x5f, + 0x08, + 0x0d, + 0x6d, + 0x43, + 0xf2, + 0xe3, + 0x11, + 0x7d, + 0x80, + 0x32, + 0xc5, + 0xfb, + 0xc5, + 0xd9, + 0x27, + 0xec, + 0xc6, + 0x4e, + 0x65, + 0x27, + 0x76, + 0x87, + 0xa6, + 0xee, + 0xee, + 0xd7, + 0x8b, + 0xd1, + 0xa0, + 0x5c, + 0xb0, + 0x42, + 0x13, + 0x0e, + 0x95, + 0x4a, + 0xf2, + 0x06, + 0xc6, + 0x43, + 0x33, + 0xf4, + 0xc7, + 0xf8, + 0xe7, + 0x1f, + 0xdd, + 0xe4, + 0x46, + 0x4a, + 0x70, + 0x39, + 0x6c, + 0xd0, + 0xed, + 0xca, + 0xbe, + 0x60, + 0x3b, + 0xd1, + 0x7b, + 0x57, + 0x48, + 0xe5, + 0x3a, + 0x79, + 0xc1, + 0x69, + 0x33, + 0x53, + 0x1b, + 0x80, + 0xb8, + 0x91, + 0x7d, + 0xb4, + 0xf6, + 0x17, + 0x1a, + 0x1d, + 0x5a, + 0x32, + 0xd6, + 0xcc, + 0x71, + 0x29, + 0x3f, + 0x28, + 0xbb, + 0xf3, + 0x5e, + 0x71, + 0xb8, + 0x43, + 0xaf, + 0xf8, + 0xb9, + 0x64, + 0xef, + 0xc4, + 0xa5, + 0x6c, + 0x08, + 0x53, + 0xc7, + 0x00, + 0x10, + 0x39, + 0x4f, + 0xdd, + 0xe4, + 0xb6, + 0x19, + 0x27, + 0xfb, + 0xb8, + 0xf5, + 0x32, + 0x73, + 0xe5, + 0xcb, + 0x32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + + static byte chkb[] = new byte [60 + 4]; + + /** + * Calculates a crc checksum-sequence over an array. + */ + public static byte BlockSequenceCRCByte(byte base[], int offset, int length, int sequence) + { + int n; + int p_ndx; + short x; + + short crc; + + if (sequence < 0) + Sys.Error("sequence < 0, this shouldn't happen\n"); + + //p_ndx = (sequence % (sizeof(chktbl) - 4)); + p_ndx = (sequence % (1024 - 4)); + + //memcpy(chkb, base, length); + System.arraycopy(base, offset , chkb, 0, Math.max(60, length)); + + chkb[length]= (byte) chktbl[p_ndx + 0]; + chkb[length + 1]= (byte) chktbl[p_ndx + 1]; + chkb[length + 2]= (byte) chktbl[p_ndx + 2]; + chkb[length + 3]= (byte) chktbl[p_ndx + 3]; + + + length += 4; + + crc = CRC.CRC_Block(chkb, length); + + for (x= 0, n= 0; n < length; n++) + x += chkb[n]; + + crc ^= x; + + return (byte)(crc & 0xFF); + } + }
\ No newline at end of file diff --git a/src/jake2/qcommon/FS.java b/src/jake2/qcommon/FS.java index 6a505d0..0babfe4 100644 --- a/src/jake2/qcommon/FS.java +++ b/src/jake2/qcommon/FS.java @@ -2,7 +2,7 @@ * FS.java * Copyright (C) 2003 * - * $Id: FS.java,v 1.2.2.1 2004-07-09 08:09:08 hzi Exp $ + * $Id: FS.java,v 1.2.2.2 2004-07-09 08:38:29 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -116,7 +116,7 @@ public final class FS extends Globals { if (index > 0) { File f = new File(path.substring(0, index)); if (!f.mkdirs()) { - Com.Printf("can't create path \"" + path + '"'); + Com.Printf("can't create path \"" + path + '"' + "\n" ); } } } diff --git a/src/jake2/qcommon/MD4.java b/src/jake2/qcommon/MD4.java index 45fdf7c..e6a2add 100644 --- a/src/jake2/qcommon/MD4.java +++ b/src/jake2/qcommon/MD4.java @@ -19,11 +19,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 02.02.2004 by RST. -// $Id: MD4.java,v 1.1 2004-07-07 19:59:31 hzi Exp $ +// $Id: MD4.java,v 1.1.1.1.2.1 2004-07-09 08:38:29 hzi Exp $ package jake2.qcommon; import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.security.MessageDigest; import jake2.*; @@ -295,17 +296,18 @@ public class MD4 extends MessageDigest implements Cloneable { return t << s | t >>> (32 - s); } + /** + * Bugfixed, now works prima (RST). + */ public static int Com_BlockChecksum(byte[] buffer, int length) { - byte digest[] = new byte[16]; + int val; MD4 md4 = new MD4(); md4.engineUpdate(buffer, 0, length); - byte data[] = md4.engineDigest(); - Com.Printf("md4: " + Lib.hexDump(data, 16, false)); - + byte data[] = md4.engineDigest(); ByteBuffer bb = ByteBuffer.wrap(data); - //val = digest[0] ^ digest[1] ^ digest[2] ^ digest[3]; + bb.order(ByteOrder.LITTLE_ENDIAN); val = bb.getInt() ^ bb.getInt() ^ bb.getInt() ^ bb.getInt(); return val; } diff --git a/src/jake2/qcommon/Qcommon.java b/src/jake2/qcommon/Qcommon.java index 02da212..c8d8624 100644 --- a/src/jake2/qcommon/Qcommon.java +++ b/src/jake2/qcommon/Qcommon.java @@ -2,7 +2,7 @@ * Qcommon.java * Copyright 2003 * - * $Id: Qcommon.java,v 1.3.2.1 2004-07-09 08:09:08 hzi Exp $ + * $Id: Qcommon.java,v 1.3.2.2 2004-07-09 08:38:29 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/qcommon/qfiles.java b/src/jake2/qcommon/qfiles.java index ae7fdf6..2d9cfdc 100644 --- a/src/jake2/qcommon/qfiles.java +++ b/src/jake2/qcommon/qfiles.java @@ -2,7 +2,7 @@ * qfiles.java * Copyright (C) 2003 * - * $Id: qfiles.java,v 1.3 2004-07-08 20:24:48 hzi Exp $ + * $Id: qfiles.java,v 1.3.2.1 2004-07-09 08:38:29 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -25,14 +25,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jake2.qcommon; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; +import jake2.Defines; -import jake2.*; -import jake2.client.*; -import jake2.game.*; -import jake2.render.*; -import jake2.server.*; +import java.nio.*; /** * qfiles @@ -292,6 +287,14 @@ public class qfiles { ofs_glcmds = b.getInt(); ofs_end = b.getInt(); // end of file } + + /* + * new members for vertex array handling + */ + public FloatBuffer textureCoordBuf = null; + public IntBuffer vertexIndexBuf = null; + public int[] counts = null; + public IntBuffer[] indexElements = null; } /* diff --git a/src/jake2/render/FastJoglRenderer.java b/src/jake2/render/FastJoglRenderer.java index da20bfd..fb9a5f5 100644 --- a/src/jake2/render/FastJoglRenderer.java +++ b/src/jake2/render/FastJoglRenderer.java @@ -2,7 +2,7 @@ * FastJoglRenderer.java * Copyright (C) 2003 * - * $Id: FastJoglRenderer.java,v 1.1 2004-07-09 06:50:47 hzi Exp $ + * $Id: FastJoglRenderer.java,v 1.1.2.1 2004-07-09 08:38:23 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/JoglRenderer.java b/src/jake2/render/JoglRenderer.java index 2829a96..c5834a1 100644 --- a/src/jake2/render/JoglRenderer.java +++ b/src/jake2/render/JoglRenderer.java @@ -2,7 +2,7 @@ * JoglRenderer.java * Copyright (C) 2003 * - * $Id: JoglRenderer.java,v 1.2 2004-07-08 15:58:48 hzi Exp $ + * $Id: JoglRenderer.java,v 1.2.2.1 2004-07-09 08:38:23 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -25,15 +25,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jake2.render; -import java.awt.Dimension; - import jake2.Defines; +import jake2.client.*; import jake2.qcommon.xcommand_t; -import jake2.render.jogl.*; +import jake2.render.jogl.Impl; -import jake2.client.refdef_t; -import jake2.client.refexport_t; -import jake2.client.refimport_t; +import java.awt.Dimension; /** * JoglRenderer @@ -59,11 +56,10 @@ final class JoglRenderer extends Impl implements refexport_t, Ref { * @see jake2.client.refexport_t#Init() */ public boolean Init(int vid_xpos, int vid_ypos) { - // pre init if (!R_Init(vid_xpos, vid_ypos)) return false; // calls the R_Init2() internally - updateScreen(null); + updateScreen(); // the result from R_Init2() return post_init; } @@ -79,7 +75,18 @@ final class JoglRenderer extends Impl implements refexport_t, Ref { * @see jake2.client.refexport_t#BeginRegistration(java.lang.String) */ public void BeginRegistration(String map) { - R_BeginRegistration(map); + if (contextInUse) { + R_BeginRegistration(map); + return; + } + + this.name = map; + + updateScreen(new xcommand_t() { + public void execute() { + R_BeginRegistration(JoglRenderer.this.name); + } + }); } @@ -143,18 +150,43 @@ final class JoglRenderer extends Impl implements refexport_t, Ref { return image; } + private float[] axis; + private float rotate; + /** * @see jake2.client.refexport_t#SetSky(java.lang.String, float, float[]) */ public void SetSky(String name, float rotate, float[] axis) { - R_SetSky(name, rotate, axis); + if (contextInUse) { + R_SetSky(name, rotate, axis); + return; + } + + this.name = name; + this.rotate = rotate; + this.axis = axis; + + updateScreen(new xcommand_t() { + public void execute() { + R_SetSky(JoglRenderer.this.name, JoglRenderer.this.rotate, JoglRenderer.this.axis); + } + }); } /** * @see jake2.client.refexport_t#EndRegistration() */ public void EndRegistration() { - R_EndRegistration(); + if (contextInUse) { + R_EndRegistration(); + return; + } + + updateScreen(new xcommand_t() { + public void execute() { + R_EndRegistration(); + } + }); } /** @@ -268,5 +300,4 @@ final class JoglRenderer extends Impl implements refexport_t, Ref { this.ri = rimp; return this; } - }
\ No newline at end of file diff --git a/src/jake2/render/Renderer.java b/src/jake2/render/Renderer.java index 4dfe99b..5ceecf6 100644 --- a/src/jake2/render/Renderer.java +++ b/src/jake2/render/Renderer.java @@ -2,7 +2,7 @@ * Renderer.java * Copyright (C) 2003 * - * $Id: Renderer.java,v 1.1.1.1.2.1 2004-07-09 08:08:44 hzi Exp $ + * $Id: Renderer.java,v 1.1.1.1.2.2 2004-07-09 08:38:11 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -46,8 +46,8 @@ public class Renderer { static { try { Class.forName("jake2.render.JoglRenderer"); + Class.forName("jake2.render.FastJoglRenderer"); } catch (ClassNotFoundException e) { - //logger.log(Level.SEVERE, "can't found " + DEFAULT_CLASS); e.printStackTrace(); } }; @@ -71,13 +71,12 @@ public class Renderer { // find a driver Ref driver = null; int count = drivers.size(); - for (int i = 0; i < count && driver == null; i++) { + for (int i = 0; i < count; i++) { driver = (Ref) drivers.get(i); if (driver.getName().equals(driverName)) { return driver.GetRefAPI(rimp); } } - //logger.log(Level.INFO, "Refresh driver \"" + driverName + "\"not found"); // null if driver not found return null; } diff --git a/src/jake2/render/fastjogl/Anorms.java b/src/jake2/render/fastjogl/Anorms.java index 552b305..fa0a8fe 100644 --- a/src/jake2/render/fastjogl/Anorms.java +++ b/src/jake2/render/fastjogl/Anorms.java @@ -2,7 +2,7 @@ * Anorms.java * Copyright (C) 2003 * - * $Id: Anorms.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Anorms.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/fastjogl/Base.java b/src/jake2/render/fastjogl/Base.java index c5cc690..6472634 100644 --- a/src/jake2/render/fastjogl/Base.java +++ b/src/jake2/render/fastjogl/Base.java @@ -2,7 +2,7 @@ * Base.java * Copyright (C) 2003 * - * $Id: Base.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Base.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/fastjogl/Draw.java b/src/jake2/render/fastjogl/Draw.java index fcb48b6..d088d69 100644 --- a/src/jake2/render/fastjogl/Draw.java +++ b/src/jake2/render/fastjogl/Draw.java @@ -2,7 +2,7 @@ * Draw.java * Copyright (C) 2003 * - * $Id: Draw.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Draw.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/fastjogl/Image.java b/src/jake2/render/fastjogl/Image.java index de364c3..d470fc3 100644 --- a/src/jake2/render/fastjogl/Image.java +++ b/src/jake2/render/fastjogl/Image.java @@ -2,7 +2,7 @@ * Image.java * Copyright (C) 2003 * - * $Id: Image.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Image.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/fastjogl/Impl.java b/src/jake2/render/fastjogl/Impl.java index 03af496..7e8698f 100644 --- a/src/jake2/render/fastjogl/Impl.java +++ b/src/jake2/render/fastjogl/Impl.java @@ -2,7 +2,7 @@ * Impl.java * Copyright (C) 2003 * - * $Id: Impl.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Impl.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/fastjogl/Light.java b/src/jake2/render/fastjogl/Light.java index b963b21..d72accb 100644 --- a/src/jake2/render/fastjogl/Light.java +++ b/src/jake2/render/fastjogl/Light.java @@ -2,7 +2,7 @@ * Light.java * Copyright (C) 2003 * - * $Id: Light.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Light.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/fastjogl/Main.java b/src/jake2/render/fastjogl/Main.java index 2363db4..05a4110 100644 --- a/src/jake2/render/fastjogl/Main.java +++ b/src/jake2/render/fastjogl/Main.java @@ -2,7 +2,7 @@ * Main.java * Copyright (C) 2003 * - * $Id: Main.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Main.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/fastjogl/Mesh.java b/src/jake2/render/fastjogl/Mesh.java index e7da997..ad0d131 100644 --- a/src/jake2/render/fastjogl/Mesh.java +++ b/src/jake2/render/fastjogl/Mesh.java @@ -2,7 +2,7 @@ * Mesh.java * Copyright (C) 2003 * - * $Id: Mesh.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Mesh.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/fastjogl/Misc.java b/src/jake2/render/fastjogl/Misc.java index bcd2a5f..31568c2 100644 --- a/src/jake2/render/fastjogl/Misc.java +++ b/src/jake2/render/fastjogl/Misc.java @@ -2,7 +2,7 @@ * Misc.java * Copyright (C) 2003 * - * $Id: Misc.java,v 1.1 2004-07-09 06:50:48 hzi Exp $ + * $Id: Misc.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/fastjogl/Model.java b/src/jake2/render/fastjogl/Model.java index 4b781be..fed6f81 100644 --- a/src/jake2/render/fastjogl/Model.java +++ b/src/jake2/render/fastjogl/Model.java @@ -2,7 +2,7 @@ * Model.java * Copyright (C) 2003 * - * $Id: Model.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Model.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -509,9 +509,6 @@ public abstract class Model extends Surf { count = l.filelen / texinfo_t.SIZE; // out = Hunk_Alloc ( count*sizeof(*out)); out = new mtexinfo_t[count]; - for ( i=0 ; i<count ; i++) { - out[i] = new mtexinfo_t(); - } loadmodel.texinfo = out; loadmodel.numtexinfo = count; @@ -519,10 +516,13 @@ public abstract class Model extends Surf { ByteBuffer bb = ByteBuffer.wrap(mod_base, l.fileofs, l.filelen); bb.order(ByteOrder.LITTLE_ENDIAN); - for ( i=0 ; i<count ; i++) { - + for ( i=0 ; i<count ; i++) + { in = new texinfo_t(bb); - out[i].vecs = in.vecs; + out[i] = new mtexinfo_t(); + //for (j=0 ; j<8 ; j++) + out[i].vecs = in.vecs; + out[i].flags = in.flags; next = in.nexttexinfo; if (next > 0) @@ -533,14 +533,17 @@ public abstract class Model extends Surf { name = "textures/" + in.texture + ".wal"; out[i].image = GL_FindImage(name, it_wall); - if (out[i].image == null) { + if (out[i].image == null) + { ri.Con_Printf(Defines.PRINT_ALL, "Couldn't load " + name + '\n'); out[i].image = r_notexture; } } // count animation frames - for (i=0 ; i<count ; i++) { + for (i=0 ; i<count ; i++) + { + // out = &loadmodel.texinfo[i]; out[i].numframes = 1; for (step = out[i].next ; (step != null) && (step != out[i]) ; step=step.next) out[i].numframes++; diff --git a/src/jake2/render/fastjogl/Surf.java b/src/jake2/render/fastjogl/Surf.java index c7e7bc0..de0f61e 100644 --- a/src/jake2/render/fastjogl/Surf.java +++ b/src/jake2/render/fastjogl/Surf.java @@ -2,7 +2,7 @@ * Surf.java * Copyright (C) 2003 * - * $Id: Surf.java,v 1.1 2004-07-09 06:50:48 hzi Exp $ + * $Id: Surf.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/fastjogl/Warp.java b/src/jake2/render/fastjogl/Warp.java index f9a5b07..44ed55e 100644 --- a/src/jake2/render/fastjogl/Warp.java +++ b/src/jake2/render/fastjogl/Warp.java @@ -2,7 +2,7 @@ * Warp.java * Copyright (C) 2003 * - * $Id: Warp.java,v 1.1 2004-07-09 06:50:49 hzi Exp $ + * $Id: Warp.java,v 1.1.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/render/glpoly_t.java b/src/jake2/render/glpoly_t.java index 25cff9c..194c404 100644 --- a/src/jake2/render/glpoly_t.java +++ b/src/jake2/render/glpoly_t.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 20.11.2003 by RST. -// $Id: glpoly_t.java,v 1.1 2004-07-07 19:59:35 hzi Exp $ +// $Id: glpoly_t.java,v 1.1.1.1.2.1 2004-07-09 08:38:23 hzi Exp $ package jake2.render; @@ -35,4 +35,12 @@ public class glpoly_t { public glpoly_t(int numverts) { this.verts = new float[numverts][VERTEXSIZE]; } + + /* + * vertex array extension + */ + + // the array position (glDrawArrays) + public int pos = 0; + } diff --git a/src/jake2/render/jogl/Draw.java b/src/jake2/render/jogl/Draw.java index eac0a1e..644164f 100644 --- a/src/jake2/render/jogl/Draw.java +++ b/src/jake2/render/jogl/Draw.java @@ -2,7 +2,7 @@ * Draw.java * Copyright (C) 2003 * - * $Id: Draw.java,v 1.2 2004-07-08 15:58:45 hzi Exp $ + * $Id: Draw.java,v 1.2.2.1 2004-07-09 08:38:26 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -257,10 +257,10 @@ public abstract class Draw extends Image { int color = d_8to24table[colorIndex]; - gl.glColor3f( - ((color >> 0) & 0xff)/255.0f, // r - ((color >> 8) & 0xff)/255.0f, // g - ((color >> 16) & 0xff)/255.0f // b + gl.glColor3ub( + (byte)((color >> 0) & 0xff), // r + (byte)((color >> 8) & 0xff), // g + (byte)((color >> 16) & 0xff) // b ); gl.glBegin (GL.GL_QUADS); diff --git a/src/jake2/render/jogl/Image.java b/src/jake2/render/jogl/Image.java index 4e65481..9dc86bf 100644 --- a/src/jake2/render/jogl/Image.java +++ b/src/jake2/render/jogl/Image.java @@ -2,7 +2,7 @@ * Image.java * Copyright (C) 2003 * - * $Id: Image.java,v 1.2 2004-07-08 20:24:30 hzi Exp $ + * $Id: Image.java,v 1.2.2.1 2004-07-09 08:38:26 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -26,27 +26,20 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. package jake2.render.jogl; import jake2.Defines; +import jake2.client.particle_t; import jake2.game.cvar_t; import jake2.qcommon.longjmpException; import jake2.qcommon.qfiles; import jake2.render.image_t; +import jake2.util.Lib; import jake2.util.Vargs; import java.awt.Dimension; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; -import java.awt.image.BufferedImageOp; -import java.awt.image.Raster; -import java.awt.image.SampleModel; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.IntBuffer; +import java.nio.*; import java.util.Arrays; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; -import java.util.TreeMap; import net.java.games.jogl.GL; @@ -128,8 +121,7 @@ public abstract class Image extends Main { GL_TexEnv(GL.GL_REPLACE); } - void GL_SelectTexture(int texture /* GLenum */ - ) { + void GL_SelectTexture(int texture /* GLenum */) { int tmu; if (!qglSelectTextureSGIS && !qglActiveTextureARB) @@ -787,9 +779,9 @@ public abstract class Image extends Main { filledcolor = 0; // attempt to find opaque black for (i = 0; i < 256; ++i) - if (d_8to24table[i] == (255 << 0)) // alpha 1.0 - // TODO check this: if ((d_8to24table[i] & 0xFF000000) == 0xFF000000) // alpha 1.0 - { + // TODO check this + if (d_8to24table[i] == 0xFF000000) { // alpha 1.0 + //if (d_8to24table[i] == (255 << 0)) // alpha 1.0 filledcolor = i; break; } @@ -1068,6 +1060,7 @@ public abstract class Image extends Main { */ int[] scaled = new int[256 * 256]; byte[] paletted_texture = new byte[256 * 256]; + IntBuffer tex = Lib.newIntBuffer(512 * 256, ByteOrder.LITTLE_ENDIAN); boolean GL_Upload32(int[] data, int width, int height, boolean mipmap) { int samples; @@ -1149,6 +1142,7 @@ public abstract class Image extends Main { paletted_texture); } else { + tex.rewind(); tex.put(data); gl.glTexImage2D( GL.GL_TEXTURE_2D, 0, @@ -1158,13 +1152,13 @@ public abstract class Image extends Main { 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, - data); + tex); } //goto done; throw new longjmpException(); } //memcpy (scaled, data, width*height*4); were bytes - IntBuffer.wrap(data).get(scaled, 0, width * height); + System.arraycopy(data, 0, scaled, 0, width * height); } else @@ -1187,7 +1181,8 @@ public abstract class Image extends Main { paletted_texture); } else { - gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, comp, scaled_width, scaled_height, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, scaled); + tex.rewind(); tex.put(scaled); + gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, comp, scaled_width, scaled_height, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, tex); } if (mipmap) { @@ -1218,6 +1213,7 @@ public abstract class Image extends Main { paletted_texture); } else { + tex.rewind(); tex.put(scaled); gl.glTexImage2D( GL.GL_TEXTURE_2D, miplevel, @@ -1227,14 +1223,14 @@ public abstract class Image extends Main { 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, - scaled); + tex); } } } // label done: } catch (longjmpException e) { - ; // replaces labe done + ; // replaces label done } if (mipmap) { @@ -1578,7 +1574,7 @@ public abstract class Image extends Main { // free it // TODO jogl bug - //gl.glDeleteTextures(1, new int[] {image.texnum}); + gl.glDeleteTextures(1, new int[] {image.texnum}); image.clear(); } } @@ -1590,7 +1586,6 @@ public abstract class Image extends Main { */ protected void Draw_GetPalette() { int r, g, b; - int v; Dimension dim; byte[] pic; byte[][] palette = new byte[1][]; //new byte[768]; @@ -1604,15 +1599,18 @@ public abstract class Image extends Main { byte[] pal = palette[0]; + int j = 0; for (int i = 0; i < 256; i++) { - r = pal[i * 3 + 0]; - g = pal[i * 3 + 1]; - b = pal[i * 3 + 2]; + r = pal[j++] & 0xFF; + g = pal[j++] & 0xFF; + b = pal[j++] & 0xFF; - d_8to24table[i] = (255 << 24) + (r << 0) + (g << 8) + (b << 16); + d_8to24table[i] = (255 << 24) | (b << 16) | (g << 8) | (r << 0); } - d_8to24table[255] &= 0x00ffffff; // 255 is transparent + d_8to24table[255] &= 0x00FFFFFF; // 255 is transparent + + particle_t.setColorPalette(d_8to24table); } /* @@ -1686,7 +1684,7 @@ public abstract class Image extends Main { continue; // free image_t slot // free it // TODO jogl bug - //gl.glDeleteTextures(1, new int[] {image.texnum}); + gl.glDeleteTextures(1, new int[] {image.texnum}); image.clear(); } } diff --git a/src/jake2/render/jogl/Impl.java b/src/jake2/render/jogl/Impl.java index 991c349..cac482f 100644 --- a/src/jake2/render/jogl/Impl.java +++ b/src/jake2/render/jogl/Impl.java @@ -2,7 +2,7 @@ * Impl.java * Copyright (C) 2003 * - * $Id: Impl.java,v 1.4 2004-07-08 20:56:55 hzi Exp $ + * $Id: Impl.java,v 1.4.2.1 2004-07-09 08:38:27 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -27,13 +27,11 @@ package jake2.render.jogl; import jake2.Defines; import jake2.Globals; -import jake2.client.CL; import jake2.qcommon.Com; import jake2.qcommon.xcommand_t; -import jake2.server.SV; import jake2.sys.KBD; -import java.awt.Dimension; +import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -48,17 +46,34 @@ import net.java.games.jogl.*; */ public class Impl extends Misc implements GLEventListener { - - public static final String DRIVER_NAME = "jogl"; // handles the post initialization with JoglRenderer protected boolean post_init = false; - // switch to updateScreen callback - private boolean switchToCallback = false; - private xcommand_t callback = null; + private final xcommand_t INIT_CALLBACK = new xcommand_t() { + public void execute() { + // only used for the first run (initialization) + // clear the screen + gl.glClearColor(0, 0, 0, 0); + gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + + // + // check the post init process + // + if (!post_init) { + ri.Con_Printf(Defines.PRINT_ALL, "Missing multi-texturing for FastJOGL renderer\n"); + } + + GLimp_EndFrame(); + } + }; + + private xcommand_t callback = INIT_CALLBACK; protected boolean contextInUse = false; + + private GraphicsDevice device; + private DisplayMode oldDisplayMode; GLCanvas canvas; JFrame window; @@ -88,13 +103,9 @@ public class Impl extends Misc implements GLEventListener { ri.Cvar_Get("r_fakeFullscreen", "0", Globals.CVAR_ARCHIVE); - ri.Con_Printf(Defines.PRINT_ALL, "Initializing OpenGL display\n", null); + ri.Con_Printf(Defines.PRINT_ALL, "Initializing OpenGL display\n"); - if (fullscreen) { - ri.Con_Printf(Defines.PRINT_ALL, "...setting fullscreen mode " + mode + ":"); - } - else - ri.Con_Printf(Defines.PRINT_ALL, "...setting mode " + mode + ":"); + ri.Con_Printf(Defines.PRINT_ALL, "...setting mode " + mode + ":"); if (!ri.Vid_GetModeInfo(newDim, mode)) { ri.Con_Printf(Defines.PRINT_ALL, " invalid mode\n"); @@ -113,18 +124,12 @@ public class Impl extends Misc implements GLEventListener { // TODO Use debug pipeline //canvas.setGL(new DebugGL(canvas.getGL())); - //canvas.setRenderingThread(Thread.currentThread()); - canvas.setNoAutoRedrawMode(true); canvas.addGLEventListener(this); - window.getContentPane().add(canvas); - + window.getContentPane().add(canvas); canvas.setSize(newDim.width, newDim.height); - window.setLocation(window_xpos, window_ypos); - //window.setUndecorated(true); - window.setResizable(false); // register event listener window.addWindowListener(new WindowAdapter() { @@ -134,14 +139,57 @@ public class Impl extends Misc implements GLEventListener { }); // D I F F E R E N T J A K E 2 E V E N T P R O C E S S I N G + window.addComponentListener(KBD.listener); canvas.addKeyListener(KBD.listener); canvas.addMouseListener(KBD.listener); canvas.addMouseMotionListener(KBD.listener); - window.addComponentListener(KBD.listener); - canvas.requestFocus(); - window.pack(); - window.show(); + /* + * fullscreen handling + */ + GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); + device = env.getDefaultScreenDevice(); + + if (fullscreen && !device.isFullScreenSupported()) { + ri.Con_Printf(Defines.PRINT_ALL, "...fullscreen not supported\n"); + vid_fullscreen.value = 0; + vid_fullscreen.modified = false; + } + + fullscreen = fullscreen && device.isFullScreenSupported(); + + if (oldDisplayMode == null) { + oldDisplayMode = device.getDisplayMode(); + } + + if (fullscreen) { + + DisplayMode displayMode = findDisplayMode(newDim, oldDisplayMode.getBitDepth(), oldDisplayMode.getRefreshRate()); + + if (displayMode != null) { + newDim.width = displayMode.getWidth(); + newDim.height = displayMode.getHeight(); + window.setUndecorated(true); + window.setResizable(false); + device.setFullScreenWindow(window); + device.setDisplayMode(displayMode); + window.setLocation(0, 0); + window.setSize(displayMode.getWidth(), displayMode.getHeight()); + canvas.setSize(displayMode.getWidth(), displayMode.getHeight()); + ri.Con_Printf(Defines.PRINT_ALL, "...setting fullscreen " + getModeString(displayMode) + '\n'); + } + } else { + window.setLocation(window_xpos, window_ypos); + window.pack(); + window.setResizable(false); + window.setVisible(true); + } + + while (!canvas.isDisplayable()) { + try { + Thread.sleep(50); + } catch (InterruptedException e) {} + } canvas.requestFocus(); this.canvas = canvas; @@ -154,6 +202,38 @@ public class Impl extends Misc implements GLEventListener { return rserr_ok; } + + DisplayMode findDisplayMode(Dimension dim, int depth, int rate) { + DisplayMode mode = null; + DisplayMode m = null; + DisplayMode[] modes = device.getDisplayModes(); + int w = dim.width; + int h = dim.height; + + for (int i = 0; i < modes.length; i++) { + m = modes[i]; + if (m.getWidth() == w && m.getHeight() == h && m.getBitDepth() == depth && m.getRefreshRate() == rate) { + mode = m; + break; + } + } + if (mode == null) mode = oldDisplayMode; + Com.Printf(getModeString(mode) + '\n'); + return mode; + } + + String getModeString(DisplayMode m) { + StringBuffer sb = new StringBuffer(); + sb.append(m.getWidth()); + sb.append('x'); + sb.append(m.getHeight()); + sb.append('x'); + sb.append(m.getBitDepth()); + sb.append('@'); + sb.append(m.getRefreshRate()); + sb.append("Hz"); + return sb.toString(); + } void GLimp_BeginFrame(float camera_separation) { // do nothing @@ -180,11 +260,19 @@ public class Impl extends Misc implements GLEventListener { } void GLimp_Shutdown() { + if (oldDisplayMode != null && device.getFullScreenWindow() != null) { + try { + device.setDisplayMode(oldDisplayMode); + device.setFullScreenWindow(null); + } catch (Exception e) { + e.printStackTrace(); + } + } if (this.window != null) { window.dispose(); } post_init = false; - switchToCallback = false; + callback = INIT_CALLBACK; } void GLimp_EnableLogging(boolean enable) { @@ -221,31 +309,8 @@ public class Impl extends Misc implements GLEventListener { this.gl = drawable.getGL(); this.glu = drawable.getGLU(); - this.contextInUse = true; - - if (switchToCallback) { - callback.execute(); - } - else - { - - // after the first run (initialization) switch to callback - switchToCallback = true; - - // clear the screen - gl.glClearColor(0, 0, 0, 0); - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - - // - // check the post init process - // - if (!post_init) { - ri.Sys_Error(Defines.ERR_FATAL, "Error: can't init JOGL renderer"); - } - - GLimp_EndFrame(); - } - + contextInUse = true; + callback.execute(); contextInUse = false; } @@ -260,20 +325,18 @@ public class Impl extends Misc implements GLEventListener { * @see net.java.games.jogl.GLEventListener#reshape(net.java.games.jogl.GLDrawable, int, int, int, int) */ public void reshape(GLDrawable drawable, int x, int y, int width, int height) { - - vid.height = height; - vid.width = width; - - ri.Vid_NewWindow(width, height); + // do nothing } /* * @see jake2.client.refexport_t#updateScreen() */ + public void updateScreen() { + this.callback = INIT_CALLBACK; + canvas.display(); + } + public void updateScreen(xcommand_t callback) { -// if (canvas == null) { -// throw new IllegalStateException("Refresh modul \"" + DRIVER_NAME + "\" have to be initialized."); -// } this.callback = callback; canvas.display(); } diff --git a/src/jake2/render/jogl/Light.java b/src/jake2/render/jogl/Light.java index 686884a..4e1fa49 100644 --- a/src/jake2/render/jogl/Light.java +++ b/src/jake2/render/jogl/Light.java @@ -2,7 +2,7 @@ * Light.java * Copyright (C) 2003 * - * $Id: Light.java,v 1.3 2004-07-08 20:56:55 hzi Exp $ + * $Id: Light.java,v 1.3.2.1 2004-07-09 08:38:26 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -25,12 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jake2.render.jogl; -import java.nio.ByteBuffer; -import java.nio.FloatBuffer; -import java.util.Arrays; - -import net.java.games.jogl.GL; - import jake2.Defines; import jake2.Globals; import jake2.client.dlight_t; @@ -38,12 +32,15 @@ import jake2.client.lightstyle_t; import jake2.game.GameBase; import jake2.game.cplane_t; import jake2.qcommon.longjmpException; -import jake2.render.mnode_t; -import jake2.render.msurface_t; -import jake2.render.mtexinfo_t; -import jake2.util.Lib; +import jake2.render.*; import jake2.util.Math3D; +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.util.Arrays; + +import net.java.games.jogl.GL; + /** * Light * @@ -79,7 +76,7 @@ public abstract class Light extends Warp { gl.glColor3f (light.color[0]*0.2f, light.color[1]*0.2f, light.color[2]*0.2f); for (i=0 ; i<3 ; i++) v[i] = light.origin[i] - vpn[i]*rad; - gl.glVertex3fv (v); + gl.glVertex3f(v[0], v[1], v[2]); gl.glColor3f (0,0,0); for (i=16 ; i>=0 ; i--) { @@ -87,7 +84,7 @@ public abstract class Light extends Warp { for (j=0 ; j<3 ; j++) v[j] = (float)(light.origin[j] + vright[j]*Math.cos(a)*rad + vup[j]*Math.sin(a)*rad); - gl.glVertex3fv (v); + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd (); } @@ -306,16 +303,13 @@ public abstract class Light extends Warp { ds >>= 4; dt >>= 4; - //surf.samples.reset(); - lightmap = surf.samples.slice(); - + lightmap = surf.samples; int lightmapIndex = 0; + Math3D.VectorCopy (Globals.vec3_origin, pointcolor); if (lightmap != null) { float[] scale = {0, 0, 0}; - -// lightmap += 3*(dt * ((surf.extents[0]>>4)+1) + ds); lightmapIndex += 3 * (dt * ((surf.extents[0] >> 4) + 1) + ds); for (maps = 0 ; maps < Defines.MAXLIGHTMAPS && surf.styles[maps] != (byte)255; maps++) @@ -326,15 +320,11 @@ public abstract class Light extends Warp { pointcolor[0] += (lightmap.get(lightmapIndex + 0) & 0xFF) * scale[0] * (1.0f/255); pointcolor[1] += (lightmap.get(lightmapIndex + 1) & 0xFF) * scale[1] * (1.0f/255); pointcolor[2] += (lightmap.get(lightmapIndex + 2) & 0xFF) * scale[2] * (1.0f/255); -// lightmap += 3*((surf.extents[0]>>4)+1) * -// ((surf.extents[1]>>4)+1); lightmapIndex += 3 * ((surf.extents[0] >> 4) + 1) * ((surf.extents[1] >> 4) + 1); } } - return 1; } - // go down back side return RecursiveLightPoint (node.children[1 - sideIndex], mid, end); } @@ -506,7 +496,7 @@ public abstract class Light extends Warp { Combine and scale multiple lightmaps into the floating format in blocklights =============== */ - void R_BuildLightMap(msurface_t surf, ByteBuffer dest, int stride) + void R_BuildLightMap(msurface_t surf, IntBuffer dest, int stride) { int smax, tmax; int r, g, b, a, max; @@ -549,8 +539,8 @@ public abstract class Light extends Warp { nummaps++) ; - //surf.samples.reset(); - lightmap = surf.samples.slice(); + lightmap = surf.samples; + int lightmapIndex = 0; // add all the lightmaps if ( nummaps == 1 ) @@ -572,18 +562,18 @@ public abstract class Light extends Warp { { for (i=0 ; i<size ; i++) { - bl[blp++] = lightmap.get() & 0xFF; - bl[blp++] = lightmap.get() & 0xFF; - bl[blp++] = lightmap.get() & 0xFF; + bl[blp++] = lightmap.get(lightmapIndex++) & 0xFF; + bl[blp++] = lightmap.get(lightmapIndex++) & 0xFF; + bl[blp++] = lightmap.get(lightmapIndex++) & 0xFF; } } else { for (i=0 ; i<size ; i++) { - bl[blp++] = (lightmap.get() & 0xFF) * scale[0]; - bl[blp++] = (lightmap.get() & 0xFF) * scale[1]; - bl[blp++] = (lightmap.get() & 0xFF) * scale[2]; + bl[blp++] = (lightmap.get(lightmapIndex++) & 0xFF) * scale[0]; + bl[blp++] = (lightmap.get(lightmapIndex++) & 0xFF) * scale[1]; + bl[blp++] = (lightmap.get(lightmapIndex++) & 0xFF) * scale[2]; } } //lightmap += size*3; // skip to next lightmap @@ -612,18 +602,18 @@ public abstract class Light extends Warp { { for (i=0 ; i<size ; i++) { - bl[blp++] += lightmap.get() & 0xFF; - bl[blp++] += lightmap.get() & 0xFF; - bl[blp++] += lightmap.get() & 0xFF; + bl[blp++] += lightmap.get(lightmapIndex++) & 0xFF; + bl[blp++] += lightmap.get(lightmapIndex++) & 0xFF; + bl[blp++] += lightmap.get(lightmapIndex++) & 0xFF; } } else { for (i=0 ; i<size ; i++) { - bl[blp++] += (lightmap.get() & 0xFF) * scale[0]; - bl[blp++] += (lightmap.get() & 0xFF) * scale[1]; - bl[blp++] += (lightmap.get() & 0xFF) * scale[2]; + bl[blp++] += (lightmap.get(lightmapIndex++) & 0xFF) * scale[0]; + bl[blp++] += (lightmap.get(lightmapIndex++) & 0xFF) * scale[1]; + bl[blp++] += (lightmap.get(lightmapIndex++) & 0xFF) * scale[2]; } } //lightmap += size*3; // skip to next lightmap @@ -638,7 +628,7 @@ public abstract class Light extends Warp { } catch (longjmpException store) {} // put into texture format - stride -= (smax<<2); + stride -= smax; bl = s_blocklights; int blp = 0; @@ -697,8 +687,8 @@ public abstract class Light extends Warp { b = (int)(b*t); a = (int)(a*t); } - dest.put((byte)r).put((byte)g).put((byte)b).put((byte)a); - destp += 4; + r &= 0xFF; g &= 0xFF; b &= 0xFF; a &= 0xFF; + dest.put(destp++, (a << 24) | (b << 16) | (g << 8) | (r << 0)); } } } @@ -778,9 +768,8 @@ public abstract class Light extends Warp { a = 255 - a; break; } - - dest.put((byte)r).put((byte)g).put((byte)b).put((byte)a); - destp += 4; + r &= 0xFF; g &= 0xFF; b &= 0xFF; a &= 0xFF; + dest.put(destp++, (a << 24) | (b << 16) | (g << 8) | (r << 0)); } } } diff --git a/src/jake2/render/jogl/Main.java b/src/jake2/render/jogl/Main.java index 32442ba..8ba3faf 100644 --- a/src/jake2/render/jogl/Main.java +++ b/src/jake2/render/jogl/Main.java @@ -2,7 +2,7 @@ * Main.java * Copyright (C) 2003 * - * $Id: Main.java,v 1.2 2004-07-08 15:58:44 hzi Exp $ + * $Id: Main.java,v 1.2.2.1 2004-07-09 08:38:26 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -29,6 +29,7 @@ import jake2.*; import jake2.client.*; import jake2.game.cplane_t; import jake2.game.cvar_t; +import jake2.qcommon.Cvar; import jake2.qcommon.qfiles; import jake2.qcommon.xcommand_t; import jake2.render.*; @@ -36,9 +37,12 @@ import jake2.util.Math3D; import jake2.util.Vargs; import java.awt.Dimension; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; import net.java.games.jogl.GL; import net.java.games.jogl.GLU; +import net.java.games.jogl.util.BufferUtils; import net.java.games.jogl.util.GLUT; /** @@ -52,7 +56,7 @@ public abstract class Main extends Base { GLU glu; GLUT glut = new GLUT(); - int[] d_8to24table = new int[256]; + public static int[] d_8to24table = new int[256]; int c_visible_lightmaps; int c_visible_textures; @@ -66,8 +70,8 @@ public abstract class Main extends Base { boolean qglActiveTextureARB = false; boolean qglPointParameterfEXT = false; boolean qglLockArraysEXT = false; - boolean qglUnlockArraysEXT = false; boolean qglMTexCoord2fSGIS = false; + boolean qwglSwapIntervalEXT = false; // ================= // abstract methods @@ -323,22 +327,22 @@ public abstract class Main extends Base { gl.glTexCoord2f(0, 1); Math3D.VectorMA(e.origin, -frame.origin_y, vup, point); Math3D.VectorMA(point, -frame.origin_x, vright, point); - gl.glVertex3fv(point); + gl.glVertex3f(point[0], point[1], point[2]); gl.glTexCoord2f(0, 0); Math3D.VectorMA(e.origin, frame.height - frame.origin_y, vup, point); Math3D.VectorMA(point, -frame.origin_x, vright, point); - gl.glVertex3fv(point); + gl.glVertex3f(point[0], point[1], point[2]); gl.glTexCoord2f(1, 0); Math3D.VectorMA(e.origin, frame.height - frame.origin_y, vup, point); Math3D.VectorMA(point, frame.width - frame.origin_x, vright, point); - gl.glVertex3fv(point); + gl.glVertex3f(point[0], point[1], point[2]); gl.glTexCoord2f(1, 1); Math3D.VectorMA(e.origin, -frame.origin_y, vup, point); Math3D.VectorMA(point, frame.width - frame.origin_x, vright, point); - gl.glVertex3fv(point); + gl.glVertex3f(point[0], point[1], point[2]); gl.glEnd(); @@ -375,7 +379,7 @@ public abstract class Main extends Base { R_RotateForEntity(currententity); gl.glDisable(GL.GL_TEXTURE_2D); - gl.glColor3fv(shadelight); + gl.glColor3f(shadelight[0], shadelight[1], shadelight[2]); // this replaces the TRIANGLE_FAN glut.glutWireCube(gl, 20); @@ -479,63 +483,63 @@ public abstract class Main extends Base { } gl.glDepthMask(true); // back to writing } - + /* ** GL_DrawParticles ** */ - void GL_DrawParticles(int num_particles, particle_t[] particles) { - particle_t p; - int i; + void GL_DrawParticles(int num_particles) { float[] up = { 0, 0, 0 }; float[] right = { 0, 0, 0 }; float scale; int color; + float origin_x, origin_y, origin_z; + + Math3D.VectorScale(vup, 1.5f, up); + Math3D.VectorScale(vright, 1.5f, right); + GL_Bind(r_particletexture.texnum); gl.glDepthMask(false); // no z buffering gl.glEnable(GL.GL_BLEND); GL_TexEnv(GL.GL_MODULATE); + gl.glBegin(GL.GL_TRIANGLES); - Math3D.VectorScale(vup, 1.5f, up); - Math3D.VectorScale(vright, 1.5f, right); + FloatBuffer sourceVertices = particle_t.vertexArray; + IntBuffer sourceColors = particle_t.colorArray; + for (int j = 0, i = 0; i < num_particles; i++) { + origin_x = sourceVertices.get(j++); + origin_y = sourceVertices.get(j++); + origin_z = sourceVertices.get(j++); - for (i = 0; i < num_particles; i++) { - p = particles[i]; // hack a scale up to keep particles from disapearing scale = - (p.origin[0] - r_origin[0]) * vpn[0] - + (p.origin[1] - r_origin[1]) * vpn[1] - + (p.origin[2] - r_origin[2]) * vpn[2]; + (origin_x - r_origin[0]) * vpn[0] + + (origin_y - r_origin[1]) * vpn[1] + + (origin_z - r_origin[2]) * vpn[2]; - if (scale < 20) - scale = 1; - else - scale = 1 + scale * 0.004f; - - color = d_8to24table[p.color]; + scale = (scale < 20) ? 1 : 1 + scale * 0.004f; + color = sourceColors.get(i); gl.glColor4ub( - (byte) ((color >> 0) & 0xff), - (byte) ((color >> 8) & 0xff), - (byte) ((color >> 16) & 0xff), - (byte) (p.alpha * 255)); - + (byte)((color >> 0) & 0xFF), + (byte)((color >> 8) & 0xFF), + (byte)((color >> 16) & 0xFF), + (byte)((color >> 24) & 0xFF) + ); + // first vertex gl.glTexCoord2f(0.0625f, 0.0625f); - gl.glVertex3fv(p.origin); - + gl.glVertex3f(origin_x, origin_y, origin_z); + // second vertex gl.glTexCoord2f(1.0625f, 0.0625f); - gl.glVertex3f(p.origin[0] + up[0] * scale, p.origin[1] + up[1] * scale, p.origin[2] + up[2] * scale); - + gl.glVertex3f(origin_x + up[0] * scale, origin_y + up[1] * scale, origin_z + up[2] * scale); + // third vertex gl.glTexCoord2f(0.0625f, 1.0625f); - gl.glVertex3f( - p.origin[0] + right[0] * scale, - p.origin[1] + right[1] * scale, - p.origin[2] + right[2] * scale); + gl.glVertex3f(origin_x + right[0] * scale, origin_y + right[1] * scale, origin_z + right[2] * scale); } - gl.glEnd(); + gl.glDisable(GL.GL_BLEND); gl.glColor4f(1, 1, 1, 1); gl.glDepthMask(true); // back to normal Z buffering @@ -550,29 +554,21 @@ public abstract class Main extends Base { void R_DrawParticles() { if (gl_ext_pointparameters.value != 0.0f && qglPointParameterfEXT) { - int color; - particle_t p; + gl.glEnableClientState(GL.GL_VERTEX_ARRAY); + gl.glVertexPointer(3, GL.GL_FLOAT, 0, particle_t.vertexArray); + gl.glEnableClientState(GL.GL_COLOR_ARRAY); + gl.glColorPointer(4, GL.GL_UNSIGNED_BYTE, 0, particle_t.colorArray); + gl.glDepthMask(false); gl.glEnable(GL.GL_BLEND); gl.glDisable(GL.GL_TEXTURE_2D); - gl.glPointSize(gl_particle_size.value); - - gl.glBegin(GL.GL_POINTS); - for (int i = 0; i < r_newrefdef.num_particles; i++) { - p = r_newrefdef.particles[i]; - color = d_8to24table[p.color]; - - gl.glColor4ub( - (byte) ((color >> 0) & 0xff), - (byte) ((color >> 8) & 0xff), - (byte) ((color >> 16) & 0xff), - (byte) (p.alpha * 255)); - - gl.glVertex3fv(p.origin); - } - gl.glEnd(); + + gl.glDrawArrays(GL.GL_POINTS, 0, r_newrefdef.num_particles); + + gl.glDisableClientState(GL.GL_COLOR_ARRAY); + gl.glDisableClientState(GL.GL_VERTEX_ARRAY); gl.glDisable(GL.GL_BLEND); gl.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); @@ -581,7 +577,7 @@ public abstract class Main extends Base { } else { - GL_DrawParticles(r_newrefdef.num_particles, r_newrefdef.particles); + GL_DrawParticles(r_newrefdef.num_particles); } } @@ -608,7 +604,7 @@ public abstract class Main extends Base { gl.glRotatef(-90, 1, 0, 0); // put Z going up gl.glRotatef(90, 0, 0, 1); // put Z going up - gl.glColor4fv(v_blend); + gl.glColor4f(v_blend[0], v_blend[1], v_blend[2], v_blend[3]); gl.glBegin(GL.GL_QUADS); @@ -958,7 +954,7 @@ public abstract class Main extends Base { protected void R_Register() { r_lefthand = ri.Cvar_Get("hand", "0", Globals.CVAR_USERINFO | Globals.CVAR_ARCHIVE); r_norefresh = ri.Cvar_Get("r_norefresh", "0", 0); - r_fullbright = ri.Cvar_Get("r_fullbright", "1", 0); + r_fullbright = ri.Cvar_Get("r_fullbright", "0", 0); r_drawentities = ri.Cvar_Get("r_drawentities", "1", 0); r_drawworld = ri.Cvar_Get("r_drawworld", "1", 0); r_novis = ri.Cvar_Get("r_novis", "0", 0); @@ -1007,7 +1003,7 @@ public abstract class Main extends Base { gl_vertex_arrays = ri.Cvar_Get("gl_vertex_arrays", "0", Globals.CVAR_ARCHIVE); gl_ext_swapinterval = ri.Cvar_Get("gl_ext_swapinterval", "1", Globals.CVAR_ARCHIVE); - gl_ext_palettedtexture = ri.Cvar_Get("gl_ext_palettedtexture", "1", Globals.CVAR_ARCHIVE); + gl_ext_palettedtexture = ri.Cvar_Get("gl_ext_palettedtexture", "0", Globals.CVAR_ARCHIVE); gl_ext_multitexture = ri.Cvar_Get("gl_ext_multitexture", "1", Globals.CVAR_ARCHIVE); gl_ext_pointparameters = ri.Cvar_Get("gl_ext_pointparameters", "1", Globals.CVAR_ARCHIVE); gl_ext_compiled_vertex_array = ri.Cvar_Get("gl_ext_compiled_vertex_array", "1", Globals.CVAR_ARCHIVE); @@ -1056,11 +1052,11 @@ public abstract class Main extends Base { int err; // enum rserr_t boolean fullscreen; - if (vid_fullscreen.modified && !gl_config.allow_cds) { - ri.Con_Printf(Defines.PRINT_ALL, "R_SetMode() - CDS not allowed with this driver\n"); - ri.Cvar_SetValue("vid_fullscreen", (vid_fullscreen.value > 0.0f) ? 0.0f : 1.0f); - vid_fullscreen.modified = false; - } +// if (vid_fullscreen.modified && !gl_config.allow_cds) { +// ri.Con_Printf(Defines.PRINT_ALL, "R_SetMode() - CDS not allowed with this driver\n"); +// ri.Cvar_SetValue("vid_fullscreen", (vid_fullscreen.value > 0.0f) ? 0.0f : 1.0f); +// vid_fullscreen.modified = false; +// } fullscreen = (vid_fullscreen.value > 0.0f); @@ -1237,25 +1233,24 @@ public abstract class Main extends Base { || gl_config.extensions_string.indexOf("GL_SGI_compiled_vertex_array") >= 0) { ri.Con_Printf(Defines.PRINT_ALL, "...enabling GL_EXT_compiled_vertex_array\n"); // qglLockArraysEXT = ( void * ) qwglGetProcAddress( "glLockArraysEXT" ); - qglLockArraysEXT = true; + if (gl_ext_compiled_vertex_array.value != 0.0f) + qglLockArraysEXT = true; + else + qglLockArraysEXT = false; // qglUnlockArraysEXT = ( void * ) qwglGetProcAddress( "glUnlockArraysEXT" ); - qglUnlockArraysEXT = true; + //qglUnlockArraysEXT = true; } else { ri.Con_Printf(Defines.PRINT_ALL, "...GL_EXT_compiled_vertex_array not found\n"); } - // #ifdef _WIN32 - // if ( strstr( gl_config.extensions_string, "WGL_EXT_swap_control" ) ) - // { - // qwglSwapIntervalEXT = ( BOOL (WINAPI *)(int)) qwglGetProcAddress( "wglSwapIntervalEXT" ); - // ri.Con_Printf( Defines.PRINT_ALL, "...enabling WGL_EXT_swap_control\n" ); - // } - // else - // { - // ri.Con_Printf( Defines.PRINT_ALL, "...WGL_EXT_swap_control not found\n" ); - // } - // #endif + if (gl_config.extensions_string.indexOf("WGL_EXT_swap_control") >= 0) { + qwglSwapIntervalEXT = true; + ri.Con_Printf(Defines.PRINT_ALL, "...enabling WGL_EXT_swap_control\n"); + } else { + qwglSwapIntervalEXT = false; + ri.Con_Printf(Defines.PRINT_ALL, "...WGL_EXT_swap_control not found\n"); + } if (gl_config.extensions_string.indexOf("GL_EXT_point_parameters") >= 0) { if (gl_ext_pointparameters.value != 0.0f) { @@ -1301,6 +1296,7 @@ public abstract class Main extends Base { } else { ri.Con_Printf(Defines.PRINT_ALL, "...ignoring GL_EXT_shared_texture_palette\n"); + qglColorTableEXT = false; } } else { @@ -1317,34 +1313,40 @@ public abstract class Main extends Base { qglMTexCoord2fSGIS = true; GL_TEXTURE0 = GL.GL_TEXTURE0_ARB; GL_TEXTURE1 = GL.GL_TEXTURE1_ARB; + Cvar.SetValue("r_fullbright", 1); } else { ri.Con_Printf(Defines.PRINT_ALL, "...ignoring GL_ARB_multitexture\n"); + Cvar.SetValue("r_fullbright", 0); } } else { ri.Con_Printf(Defines.PRINT_ALL, "...GL_ARB_multitexture not found\n"); + Cvar.SetValue("r_fullbright", 0); } if (gl_config.extensions_string.indexOf("GL_SGIS_multitexture") >= 0) { if (qglActiveTextureARB) { ri.Con_Printf(Defines.PRINT_ALL, "...GL_SGIS_multitexture deprecated in favor of ARB_multitexture\n"); - } - else if (gl_ext_multitexture.value != 0.0f) { + Cvar.SetValue("r_fullbright", 1); + } else if (gl_ext_multitexture.value != 0.0f) { ri.Con_Printf(Defines.PRINT_ALL, "...using GL_SGIS_multitexture\n"); // qglMTexCoord2fSGIS = ( void * ) qwglGetProcAddress( "glMTexCoord2fSGIS" ); // qglSelectTextureSGIS = ( void * ) qwglGetProcAddress( "glSelectTextureSGIS" ); qglSelectTextureSGIS = true; qglMTexCoord2fSGIS = true; + Cvar.SetValue("r_fullbright", 1); // //GL_TEXTURE0 = GL.GL_TEXTURE0_SGIS; // //GL_TEXTURE1 = GL.GL_TEXTURE1_SGIS; - } - else { + } else { ri.Con_Printf(Defines.PRINT_ALL, "...ignoring GL_SGIS_multitexture\n"); + Cvar.SetValue("r_fullbright", 0); } } else { ri.Con_Printf(Defines.PRINT_ALL, "...GL_SGIS_multitexture not found\n"); + if (!qglActiveTextureARB) + Cvar.SetValue("r_fullbright", 0); } GL_SetDefaultState(); @@ -1359,7 +1361,7 @@ public abstract class Main extends Base { ri.Con_Printf( Defines.PRINT_ALL, "glGetError() = 0x%x\n\t%s\n", - new Vargs(2).add(err).add(gl.glGetString(err))); + new Vargs(2).add(err).add("" + gl.glGetString(err))); return true; } @@ -1406,7 +1408,7 @@ public abstract class Main extends Base { // FIXME: only restart if CDS is required cvar_t ref; - ref = ri.Cvar_Get("vid_ref", "gl", 0); + ref = ri.Cvar_Get("vid_ref", "jogl", 0); ref.modified = true; } @@ -1511,26 +1513,22 @@ public abstract class Main extends Base { ============= */ protected void R_SetPalette(byte[] palette) { - - //assert(palette != null && palette.length == 768) : "byte palette[768] bug"; - // es darf auch null sein - + // 256 RGB values (768 bytes) + // or null int i; int color = 0; if (palette != null) { - + int j =0; for (i = 0; i < 256; i++) { - color = (palette[i * 3 + 0] << 0) & 0x000000FF; - color |= (palette[i * 3 + 1] << 8) & 0x0000FF00; - color |= (palette[i * 3 + 2] << 8) & 0x00FF0000; + color = (palette[j++] & 0xFF) << 0; + color |= (palette[j++] & 0xFF) << 8; + color |= (palette[j++] & 0xFF) << 16; color |= 0xFF000000; r_rawpalette[i] = color; } - } else { - for (i = 0; i < 256; i++) { r_rawpalette[i] = d_8to24table[i] | 0xff000000; } @@ -1543,6 +1541,9 @@ public abstract class Main extends Base { } static final int NUM_BEAM_SEGS = 6; + float[][] start_points = new float[NUM_BEAM_SEGS][3]; + // array of vec3_t + float[][] end_points = new float[NUM_BEAM_SEGS][3]; // array of vec3_t /* ** R_DrawBeam @@ -1556,10 +1557,6 @@ public abstract class Main extends Base { float[] direction = { 0, 0, 0 }; // vec3_t float[] normalized_direction = { 0, 0, 0 }; // vec3_t - float[][] start_points = new float[NUM_BEAM_SEGS][3]; - // array of vec3_t - float[][] end_points = new float[NUM_BEAM_SEGS][3]; // array of vec3_t - float[] oldorigin = { 0, 0, 0 }; // vec3_t float[] origin = { 0, 0, 0 }; // vec3_t @@ -1607,11 +1604,18 @@ public abstract class Main extends Base { gl.glColor4f(r, g, b, e.alpha); gl.glBegin(GL.GL_TRIANGLE_STRIP); + + float[] v; + for (i = 0; i < NUM_BEAM_SEGS; i++) { - gl.glVertex3fv(start_points[i]); - gl.glVertex3fv(end_points[i]); - gl.glVertex3fv(start_points[(i + 1) % NUM_BEAM_SEGS]); - gl.glVertex3fv(end_points[(i + 1) % NUM_BEAM_SEGS]); + v = start_points[i]; + gl.glVertex3f(v[0], v[1], v[2]); + v = end_points[i]; + gl.glVertex3f(v[0], v[1], v[2]); + v = start_points[(i + 1) % NUM_BEAM_SEGS]; + gl.glVertex3f(v[0], v[1], v[2]); + v = end_points[(i + 1) % NUM_BEAM_SEGS]; + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd(); diff --git a/src/jake2/render/jogl/Mesh.java b/src/jake2/render/jogl/Mesh.java index 37e4445..ac881ee 100644 --- a/src/jake2/render/jogl/Mesh.java +++ b/src/jake2/render/jogl/Mesh.java @@ -2,7 +2,7 @@ * Mesh.java * Copyright (C) 2003 * - * $Id: Mesh.java,v 1.3 2004-07-08 20:24:30 hzi Exp $ + * $Id: Mesh.java,v 1.3.2.1 2004-07-09 08:38:26 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -104,36 +104,36 @@ public abstract class Mesh extends Light { { int i; int lerpIndex = 0; - lerp.position(0); //PMM -- added RF_SHELL_DOUBLE, RF_SHELL_HALF_DAM if ( (currententity.flags & ( Defines.RF_SHELL_RED | Defines.RF_SHELL_GREEN | Defines.RF_SHELL_BLUE | Defines.RF_SHELL_DOUBLE | Defines.RF_SHELL_HALF_DAM)) != 0 ) { float[] normal; + int j = 0; for (i=0 ; i < nverts; i++/* , v++, ov++, lerp+=4 */) { normal = r_avertexnormals[verts[i].lightnormalindex]; - lerp.put(move[0] + ov[i].v[0]*backv[0] + v[i].v[0]*frontv[0] + normal[0] * Defines.POWERSUIT_SCALE); - lerp.put(move[1] + ov[i].v[1]*backv[1] + v[i].v[1]*frontv[1] + normal[1] * Defines.POWERSUIT_SCALE); - lerp.put(move[2] + ov[i].v[2]*backv[2] + v[i].v[2]*frontv[2] + normal[2] * Defines.POWERSUIT_SCALE); - lerp.get(); + lerp.put(j++, move[0] + ov[i].v[0]*backv[0] + v[i].v[0]*frontv[0] + normal[0] * Defines.POWERSUIT_SCALE); + lerp.put(j++, move[1] + ov[i].v[1]*backv[1] + v[i].v[1]*frontv[1] + normal[1] * Defines.POWERSUIT_SCALE); + lerp.put(j++, move[2] + ov[i].v[2]*backv[2] + v[i].v[2]*frontv[2] + normal[2] * Defines.POWERSUIT_SCALE); } } else { + int j = 0; for (i=0 ; i < nverts; i++ /* , v++, ov++, lerp+=4 */) { - lerp.put(move[0] + ov[i].v[0]*backv[0] + v[i].v[0]*frontv[0]); - lerp.put(move[1] + ov[i].v[1]*backv[1] + v[i].v[1]*frontv[1]); - lerp.put(move[2] + ov[i].v[2]*backv[2] + v[i].v[2]*frontv[2]); - lerp.get(); + + lerp.put(j++, move[0] + ov[i].v[0]*backv[0] + v[i].v[0]*frontv[0]); + lerp.put(j++, move[1] + ov[i].v[1]*backv[1] + v[i].v[1]*frontv[1]); + lerp.put(j++, move[2] + ov[i].v[2]*backv[2] + v[i].v[2]*frontv[2]); } } } FloatBuffer colorArrayBuf = BufferUtils.newFloatBuffer(qfiles.MAX_VERTS * 4); - FloatBuffer vertexArrayBuf = BufferUtils.newFloatBuffer(qfiles.MAX_VERTS * 4); + FloatBuffer vertexArrayBuf = BufferUtils.newFloatBuffer(qfiles.MAX_VERTS * 3); boolean isFilled = false; float[] tmpVec = {0, 0, 0}; @@ -218,7 +218,7 @@ public abstract class Mesh extends Light { GL_LerpVerts( paliashdr.num_xyz, v, ov, verts, vertexArrayBuf, move, frontv, backv ); gl.glEnableClientState( GL.GL_VERTEX_ARRAY ); - gl.glVertexPointer( 3, GL.GL_FLOAT, 16, vertexArrayBuf ); // padded for SIMD + gl.glVertexPointer( 3, GL.GL_FLOAT, 0, vertexArrayBuf ); // PMM - added double damage shell if ( (currententity.flags & ( Defines.RF_SHELL_RED | Defines.RF_SHELL_GREEN | Defines.RF_SHELL_BLUE | Defines.RF_SHELL_DOUBLE | Defines.RF_SHELL_HALF_DAM)) != 0) @@ -233,11 +233,15 @@ public abstract class Mesh extends Light { // // pre light everything // - colorArrayBuf.position(0); + FloatBuffer color = colorArrayBuf; + int j = 0; for ( i = 0; i < paliashdr.num_xyz; i++ ) { l = shadedots[verts[i].lightnormalindex]; - colorArrayBuf.put(l * shadelight[0]).put(l * shadelight[1]).put(l * shadelight[2]).put(alpha); + color.put(j++, l * shadelight[0]); + color.put(j++, l * shadelight[1]); + color.put(j++, l * shadelight[2]); + color.put(j++, alpha); } } @@ -294,13 +298,15 @@ public abstract class Mesh extends Light { gl.glEnd (); } - if ( qglUnlockArraysEXT ) + if ( qglLockArraysEXT ) gl.glUnlockArraysEXT(); } else { GL_LerpVerts( paliashdr.num_xyz, v, ov, verts, s_lerped, move, frontv, backv ); + float[] tmp; + while (true) { // get the vertex count and primitive type @@ -325,7 +331,8 @@ public abstract class Mesh extends Light { orderIndex += 3; gl.glColor4f( shadelight[0], shadelight[1], shadelight[2], alpha); - gl.glVertex3fv (s_lerped[index_xyz]); + tmp = s_lerped[index_xyz]; + gl.glVertex3f(tmp[0], tmp[1], tmp[2]); } while (--count != 0); } @@ -344,7 +351,8 @@ public abstract class Mesh extends Light { l = shadedots[verts[index_xyz].lightnormalindex]; gl.glColor4f (l* shadelight[0], l*shadelight[1], l*shadelight[2], alpha); - gl.glVertex3fv (s_lerped[index_xyz]); + tmp = s_lerped[index_xyz]; + gl.glVertex3f(tmp[0], tmp[1], tmp[2]); } while (--count != 0); } gl.glEnd (); @@ -384,6 +392,7 @@ public abstract class Mesh extends Light { height = -lheight + 1.0f; int orderIndex = 0; + int index = 0; while (true) { @@ -410,18 +419,20 @@ public abstract class Mesh extends Light { if ( gl_vertex_arrays.value != 0.0f ) { - vertexArrayBuf.position(order[orderIndex + 2] * 4); - vertexArrayBuf.get(point); + index = order[orderIndex + 2] * 3; + point[0] = vertexArrayBuf.get(index); + point[1] = vertexArrayBuf.get(index + 1); + point[2] = vertexArrayBuf.get(index + 2); } else { - System.arraycopy(s_lerped[order[orderIndex + 2]], 0, point, 0, 3); + Math3D.VectorCopy(s_lerped[order[orderIndex + 2]], point); } point[0] -= shadevector[0]*(point[2]+lheight); point[1] -= shadevector[1]*(point[2]+lheight); point[2] = height; - gl.glVertex3fv (point); + gl.glVertex3f(point[0], point[1], point[2]); orderIndex += 3; diff --git a/src/jake2/render/jogl/Misc.java b/src/jake2/render/jogl/Misc.java index 8f04a84..8197fdd 100644 --- a/src/jake2/render/jogl/Misc.java +++ b/src/jake2/render/jogl/Misc.java @@ -2,7 +2,7 @@ * Misc.java * Copyright (C) 2003 * - * $Id: Misc.java,v 1.1 2004-07-07 19:59:41 hzi Exp $ + * $Id: Misc.java,v 1.1.1.1.2.1 2004-07-09 08:38:26 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -25,9 +25,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jake2.render.jogl; -import net.java.games.jogl.GL; - import jake2.Defines; +import net.java.games.jogl.GL; +import net.java.games.jogl.WGL; /** * Misc @@ -249,13 +249,11 @@ public abstract class Misc extends Mesh { if ( gl_swapinterval.modified ) { gl_swapinterval.modified = false; - if ( !gl_state.stereo_enabled ) { -// #ifdef _WIN32 -// if ( qwglSwapIntervalEXT ) -// qwglSwapIntervalEXT( gl_swapinterval->value ); -// #endif + if (qwglSwapIntervalEXT) { + ((WGL)gl).wglSwapIntervalEXT((int)gl_swapinterval.value); + } } } } diff --git a/src/jake2/render/jogl/Surf.java b/src/jake2/render/jogl/Surf.java index 926d431..79caefa 100644 --- a/src/jake2/render/jogl/Surf.java +++ b/src/jake2/render/jogl/Surf.java @@ -2,7 +2,7 @@ * Surf.java * Copyright (C) 2003 * - * $Id: Surf.java,v 1.2.2.1 2004-07-09 08:09:07 hzi Exp $ + * $Id: Surf.java,v 1.2.2.2 2004-07-09 08:38:26 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -25,34 +25,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jake2.render.jogl; -import java.awt.geom.AffineTransform; -import java.awt.image.AffineTransformOp; -import java.awt.image.BufferedImage; -import java.nio.ByteBuffer; +import jake2.Defines; +import jake2.client.*; +import jake2.game.cplane_t; +import jake2.render.*; +import jake2.util.Lib; +import jake2.util.Math3D; + import java.nio.ByteOrder; import java.nio.IntBuffer; import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; import net.java.games.jogl.GL; -import net.java.games.jogl.util.BufferUtils; - -import jake2.Defines; -import jake2.client.dlight_t; -import jake2.client.entity_t; -import jake2.client.lightstyle_t; -import jake2.game.cplane_t; -import jake2.render.glpoly_t; -import jake2.render.image_t; -import jake2.render.medge_t; -import jake2.render.mleaf_t; -import jake2.render.mnode_t; -import jake2.render.model_t; -import jake2.render.msurface_t; -import jake2.render.mtexinfo_t; -import jake2.util.Lib; -import jake2.util.Math3D; /** * Surf @@ -91,7 +75,7 @@ public abstract class Surf extends Draw { // the lightmap texture data needs to be kept in // main memory so texsubimage can update properly - byte[] lightmap_buffer = new byte[4 * BLOCK_WIDTH * BLOCK_HEIGHT]; + IntBuffer lightmap_buffer = Lib.newIntBuffer(BLOCK_WIDTH * BLOCK_HEIGHT, ByteOrder.LITTLE_ENDIAN); public gllightmapstate_t() { @@ -128,7 +112,7 @@ public abstract class Surf extends Draw { // Light.java abstract void R_MarkLights (dlight_t light, int bit, mnode_t node); abstract void R_SetCacheState( msurface_t surf ); - abstract void R_BuildLightMap(msurface_t surf, ByteBuffer dest, int stride); + abstract void R_BuildLightMap(msurface_t surf, IntBuffer dest, int stride); /* ============================================================= @@ -177,7 +161,7 @@ public abstract class Surf extends Draw { { v = p.verts[i]; gl.glTexCoord2f(v[3], v[4]); - gl.glVertex3fv(v); + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd(); } @@ -207,7 +191,7 @@ public abstract class Surf extends Draw { { v = p.verts[i]; gl.glTexCoord2f ((v[3] + scroll), v[4]); - gl.glVertex3fv( v ); + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd (); } @@ -272,7 +256,7 @@ public abstract class Surf extends Draw { { v = p.verts[j]; gl.glTexCoord2f (v[5], v[6] ); - gl.glVertex3fv( v ); + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd(); } @@ -289,7 +273,7 @@ public abstract class Surf extends Draw { { v = p.verts[j]; gl.glTexCoord2f (v[5] - soffset, v[6] - toffset ); - gl.glVertex3fv( v ); + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd(); } @@ -398,7 +382,7 @@ public abstract class Surf extends Draw { for ( surf = gl_lms.lightmap_surfaces[0]; surf != null; surf = surf.lightmapchain ) { int smax, tmax; - ByteBuffer base; + IntBuffer base; smax = (surf.extents[0]>>4)+1; tmax = (surf.extents[1]>>4)+1; @@ -411,10 +395,10 @@ public abstract class Surf extends Draw { surf.dlight_s = lightPos.x; surf.dlight_t = lightPos.y; - base = ByteBuffer.wrap(gl_lms.lightmap_buffer); - base.position( ( surf.dlight_t * BLOCK_WIDTH + surf.dlight_s ) * LIGHTMAP_BYTES); + base = gl_lms.lightmap_buffer; + base.position(surf.dlight_t * BLOCK_WIDTH + surf.dlight_s ); - R_BuildLightMap (surf, base, BLOCK_WIDTH*LIGHTMAP_BYTES); + R_BuildLightMap (surf, base.slice(), BLOCK_WIDTH); } else { @@ -447,10 +431,10 @@ public abstract class Surf extends Draw { surf.dlight_s = lightPos.x; surf.dlight_t = lightPos.y; - base = ByteBuffer.wrap(gl_lms.lightmap_buffer); - base.position( ( surf.dlight_t * BLOCK_WIDTH + surf.dlight_s ) * LIGHTMAP_BYTES); + base = gl_lms.lightmap_buffer; + base.position(surf.dlight_t * BLOCK_WIDTH + surf.dlight_s ); - R_BuildLightMap (surf, base, BLOCK_WIDTH*LIGHTMAP_BYTES); + R_BuildLightMap (surf, base.slice(), BLOCK_WIDTH); } } @@ -475,7 +459,7 @@ public abstract class Surf extends Draw { gl.glDepthMask( true ); } - private ByteBuffer temp2 = BufferUtils.newByteBuffer(34 * 34 * 4); + private IntBuffer temp2 = Lib.newIntBuffer(34 * 34, ByteOrder.LITTLE_ENDIAN); /* ================ @@ -561,7 +545,7 @@ public abstract class Surf extends Draw { smax = (fa.extents[0]>>4)+1; tmax = (fa.extents[1]>>4)+1; - R_BuildLightMap( fa, temp2, smax*4 ); + R_BuildLightMap( fa, temp2, smax); R_SetCacheState( fa ); GL_Bind( gl_state.lightmap_textures + fa.lightmaptexturenum ); @@ -716,7 +700,7 @@ public abstract class Surf extends Draw { } // direct buffer - ByteBuffer temp = BufferUtils.newByteBuffer(128 * 128 * 4); + private IntBuffer temp = Lib.newIntBuffer(128 * 128, ByteOrder.LITTLE_ENDIAN); void GL_RenderLightmappedPoly( msurface_t surf ) { @@ -765,7 +749,7 @@ public abstract class Surf extends Draw { smax = (surf.extents[0]>>4)+1; tmax = (surf.extents[1]>>4)+1; - R_BuildLightMap( surf, temp, smax*4 ); + R_BuildLightMap( surf, temp, smax); R_SetCacheState( surf ); GL_MBind( GL_TEXTURE1, gl_state.lightmap_textures + surf.lightmaptexturenum ); @@ -784,7 +768,7 @@ public abstract class Surf extends Draw { smax = (surf.extents[0]>>4)+1; tmax = (surf.extents[1]>>4)+1; - R_BuildLightMap( surf, temp, smax*4 ); + R_BuildLightMap( surf, temp, smax); GL_MBind( GL_TEXTURE1, gl_state.lightmap_textures + 0 ); @@ -824,7 +808,7 @@ public abstract class Surf extends Draw { gl.glMultiTexCoord2fARB(GL_TEXTURE1, v[5], v[6]); //gglMTexCoord2fSGIS( GL_TEXTURE0, v[3], v[4]); //gglMTexCoord2fSGIS( GL_TEXTURE1, v[5], v[6]); - gl.glVertex3fv(v); + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd (); } @@ -842,7 +826,7 @@ public abstract class Surf extends Draw { gl.glMultiTexCoord2fARB(GL_TEXTURE1, v[5], v[6]); //gglMTexCoord2fSGIS( GL_TEXTURE0, v[3], v[4]); //gglMTexCoord2fSGIS( GL_TEXTURE1, v[5], v[6]); - gl.glVertex3fv(v); + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd (); } @@ -878,7 +862,7 @@ public abstract class Surf extends Draw { gl.glMultiTexCoord2fARB(GL_TEXTURE1, v[5], v[6]); // qglMTexCoord2fSGIS( GL_TEXTURE0, (v[3]+scroll), v[4]); // qglMTexCoord2fSGIS( GL_TEXTURE1, v[5], v[6]); - gl.glVertex3fv(v); + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd(); } @@ -898,7 +882,7 @@ public abstract class Surf extends Draw { gl.glMultiTexCoord2fARB(GL_TEXTURE1, v[5], v[6]); //gglMTexCoord2fSGIS( GL_TEXTURE0, v[3], v[4]); //gglMTexCoord2fSGIS( GL_TEXTURE1, v[5], v[6]); - gl.glVertex3fv(v); + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd (); } @@ -1557,7 +1541,7 @@ public abstract class Surf extends Draw { void GL_CreateSurfaceLightmap(msurface_t surf) { int smax, tmax; - ByteBuffer base; + IntBuffer base; if ( (surf.flags & (Defines.SURF_DRAWSKY | Defines.SURF_DRAWTURB)) != 0) return; @@ -1584,13 +1568,12 @@ public abstract class Surf extends Draw { surf.lightmaptexturenum = gl_lms.current_lightmap_texture; - // base = gl_lms.lightmap_buffer; - base = ByteBuffer.wrap(gl_lms.lightmap_buffer); - int basep = (surf.light_t * BLOCK_WIDTH + surf.light_s) * LIGHTMAP_BYTES; + int basep = (surf.light_t * BLOCK_WIDTH + surf.light_s);// * LIGHTMAP_BYTES; + base = gl_lms.lightmap_buffer; base.position(basep); R_SetCacheState( surf ); - R_BuildLightMap(surf, base.slice(), BLOCK_WIDTH * LIGHTMAP_BYTES); + R_BuildLightMap(surf, base.slice(), BLOCK_WIDTH); } lightstyle_t[] lightstyles; diff --git a/src/jake2/render/jogl/Warp.java b/src/jake2/render/jogl/Warp.java index 8ccb93a..d48358a 100644 --- a/src/jake2/render/jogl/Warp.java +++ b/src/jake2/render/jogl/Warp.java @@ -2,7 +2,7 @@ * Warp.java * Copyright (C) 2003 * - * $Id: Warp.java,v 1.3 2004-07-08 20:24:30 hzi Exp $ + * $Id: Warp.java,v 1.3.2.1 2004-07-09 08:38:26 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -313,7 +313,7 @@ public abstract class Warp extends Model { t *= (1.0f/64); gl.glTexCoord2f (s, t); - gl.glVertex3fv( v ); + gl.glVertex3f(v[0], v[1], v[2]); } gl.glEnd (); } @@ -612,7 +612,7 @@ public abstract class Warp extends Model { t = 1.0f - t; gl.glTexCoord2f (s, t); - gl.glVertex3fv( v ); + gl.glVertex3f(v[0], v[1], v[2]); } /* diff --git a/src/jake2/render/model_t.java b/src/jake2/render/model_t.java index 5807568..541d3bd 100644 --- a/src/jake2/render/model_t.java +++ b/src/jake2/render/model_t.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 20.11.2003 by RST. -// $Id: model_t.java,v 1.2 2004-07-08 15:58:48 hzi Exp $ +// $Id: model_t.java,v 1.2.2.1 2004-07-09 08:38:23 hzi Exp $ package jake2.render; @@ -119,7 +119,7 @@ public class model_t implements Cloneable { // Math3D.VectorClear(mins); Math3D.VectorClear(maxs); - radius = 0;; + radius = 0; // // solid volume for clipping diff --git a/src/jake2/render/msurface_t.java b/src/jake2/render/msurface_t.java index c6247d9..798ca74 100644 --- a/src/jake2/render/msurface_t.java +++ b/src/jake2/render/msurface_t.java @@ -19,11 +19,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 20.11.2003 by RST. -// $Id: msurface_t.java,v 1.2 2004-07-08 20:24:29 hzi Exp $ +// $Id: msurface_t.java,v 1.2.2.1 2004-07-09 08:38:23 hzi Exp $ package jake2.render; import java.nio.ByteBuffer; +import java.util.Arrays; import jake2.game.*; import jake2.qcommon.texinfo_t; @@ -67,23 +68,25 @@ public class msurface_t public void clear() { visframe = 0; - //plane = null; + plane = null; + plane = new cplane_t(); flags = 0; firstedge = 0; numedges = 0; - texturemins[0] = texturemins[1] = 0; + texturemins[0] = texturemins[1] = -1; extents[0] = extents[1] = 0; light_s = light_t = 0; dlight_s = dlight_t = 0; - //polys = null; + polys = null; texturechain = null; lightmapchain = null; - //texinfo = null; + //texinfo = new mtexinfo_t(); + texinfo.clear(); dlightframe = 0; dlightbits = 0; @@ -98,6 +101,6 @@ public class msurface_t { cached_light[i] = 0; } - //samples = null; + if (samples != null) samples.clear(); } } diff --git a/src/jake2/render/mtexinfo_t.java b/src/jake2/render/mtexinfo_t.java index a78af9f..551f7da 100644 --- a/src/jake2/render/mtexinfo_t.java +++ b/src/jake2/render/mtexinfo_t.java @@ -19,10 +19,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 20.11.2003 by RST. -// $Id: mtexinfo_t.java,v 1.1 2004-07-07 19:59:35 hzi Exp $ +// $Id: mtexinfo_t.java,v 1.1.1.1.2.1 2004-07-09 08:38:23 hzi Exp $ package jake2.render; +import java.util.Arrays; + public class mtexinfo_t { // [s/t][xyz offset] public float vecs[][] = { @@ -33,4 +35,15 @@ public class mtexinfo_t { public int numframes; public mtexinfo_t next; // animation chain public image_t image; + + public void clear() { + Arrays.fill(vecs[0], 0); + Arrays.fill(vecs[1], 0); + + flags = 0; + numframes = 0; + next = null; + image = null; + } + } diff --git a/src/jake2/server/SV_CCMDS.java b/src/jake2/server/SV_CCMDS.java index 6c71224..f9cbe2c 100644 --- a/src/jake2/server/SV_CCMDS.java +++ b/src/jake2/server/SV_CCMDS.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 18.01.2004 by RST. -// $Id: SV_CCMDS.java,v 1.2 2004-07-08 15:58:45 hzi Exp $ +// $Id: SV_CCMDS.java,v 1.2.2.1 2004-07-09 08:38:25 hzi Exp $ package jake2.server; @@ -228,7 +228,6 @@ public class SV_CCMDS extends SV_ENTS { f1.close(); } catch (IOException e1) { - // TODO Auto-generated catch block e1.printStackTrace(); } return; @@ -627,7 +626,7 @@ public class SV_CCMDS extends SV_ENTS { // copy off the level to the autosave slot if (0 == dedicated.value) { - //TODO: SV_WriteServerFile! + //TODO: SV_WriteServerFile. //SV_WriteServerFile(true); //SV_CopySaveGame("current", "save0"); @@ -658,7 +657,7 @@ public class SV_CCMDS extends SV_ENTS { } sv.state = ss_dead; // don't save current level when changing - //TODO: RST: disabled for debugging + //TODO: savegame //SV_WipeSavegame("current"); SV_GameMap_f(); } diff --git a/src/jake2/server/SV_GAME.java b/src/jake2/server/SV_GAME.java index 8f6eec4..8a6e0ac 100644 --- a/src/jake2/server/SV_GAME.java +++ b/src/jake2/server/SV_GAME.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 14.01.2004 by RST. -// $Id: SV_GAME.java,v 1.4 2004-07-08 20:56:54 hzi Exp $ +// $Id: SV_GAME.java,v 1.4.2.1 2004-07-09 08:38:25 hzi Exp $ package jake2.server; @@ -308,11 +308,11 @@ public class SV_GAME extends SV_INIT { } public static void PF_StartSound(edict_t entity, int channel, int sound_num, float volume, float attenuation, float timeofs) { + if (null == entity) return; - - //TODO: impl SV_StartSound SV_SEND.SV_StartSound (null, entity, channel, sound_num, volume, attenuation, timeofs); + } //============================================== diff --git a/src/jake2/server/SV_INIT.java b/src/jake2/server/SV_INIT.java index b4b4ee6..533fe8b 100644 --- a/src/jake2/server/SV_INIT.java +++ b/src/jake2/server/SV_INIT.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 14.01.2004 by RST. -// $Id: SV_INIT.java,v 1.3 2004-07-08 20:24:30 hzi Exp $ +// $Id: SV_INIT.java,v 1.3.2.1 2004-07-09 08:38:24 hzi Exp $ package jake2.server; @@ -250,16 +250,16 @@ public class SV_INIT extends Globals { sv.name=server; sv.configstrings[CS_NAME] = server; - CM.intwrap checksum_iw = new CM.intwrap(checksum); + int iw[] = {checksum}; if (serverstate != ss_game) { - sv.models[1] = CM.CM_LoadMap("", false, checksum_iw); // no real map + sv.models[1] = CM.CM_LoadMap("", false, iw); // no real map } else { - sv.configstrings[CS_MODELS + 1] = "maps/" + server + ".bsp"; - sv.models[1] = CM.CM_LoadMap(sv.configstrings[CS_MODELS + 1], false, checksum_iw); + sv.configstrings[CS_MODELS + 1] = "maps/" + server + ".bsp"; + sv.models[1] = CM.CM_LoadMap(sv.configstrings[CS_MODELS + 1], false, iw); } - checksum = checksum_iw.i; + checksum = iw[0]; sv.configstrings[CS_MAPCHECKSUM] = "" + checksum; // @@ -302,7 +302,7 @@ public class SV_INIT extends Globals { // set serverinfo variable Cvar.FullSet("mapname", sv.name, CVAR_SERVERINFO | CVAR_NOSET); - Com.Printf("-------------------------------------\n"); + //Com.Printf("-------------------------------------\n"); } /* diff --git a/src/jake2/server/SV_MAIN.java b/src/jake2/server/SV_MAIN.java index 464b056..15d190e 100644 --- a/src/jake2/server/SV_MAIN.java +++ b/src/jake2/server/SV_MAIN.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 13.01.2004 by RST. -// $Id: SV_MAIN.java,v 1.2 2004-07-08 15:58:45 hzi Exp $ +// $Id: SV_MAIN.java,v 1.2.2.1 2004-07-09 08:38:25 hzi Exp $ package jake2.server; @@ -476,7 +476,7 @@ public class SV_MAIN extends SV_GAME { Cmd.TokenizeString(s.toCharArray(), false); c = Cmd.Argv(0); - Com.Printf("Packet " + NET.AdrToString(Netchan.net_from) + " : " + c + "\n"); + //Com.Printf("Packet " + NET.AdrToString(Netchan.net_from) + " : " + c + "\n"); //Com.Printf(Lib.hexDump(net_message.data, 64, false) + "\n"); if (0 == strcmp(c, "ping")) diff --git a/src/jake2/server/SV_USER.java b/src/jake2/server/SV_USER.java index c6e355e..d05c2fb 100644 --- a/src/jake2/server/SV_USER.java +++ b/src/jake2/server/SV_USER.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 17.01.2004 by RST. -// $Id: SV_USER.java,v 1.3 2004-07-08 20:24:30 hzi Exp $ +// $Id: SV_USER.java,v 1.3.2.1 2004-07-09 08:38:25 hzi Exp $ package jake2.server; @@ -29,7 +29,8 @@ import jake2.util.Lib; import java.io.IOException; -public class SV_USER extends SV_SEND { +public class SV_USER extends SV_SEND +{ static edict_t sv_player; @@ -47,14 +48,17 @@ public class SV_USER extends SV_SEND { SV_BeginDemoServer ================== */ - public static void SV_BeginDemoserver() { + public static void SV_BeginDemoserver() + { String name; - name = "demos/" + sv.name; - try { - sv.demofile = FS.FOpenFile(name); + name= "demos/" + sv.name; + try + { + sv.demofile= FS.FOpenFile(name); } - catch (IOException e) { + catch (IOException e) + { Com.Error(ERR_DROP, "Couldn't open " + name + "\n"); } if (sv.demofile == null) @@ -69,20 +73,23 @@ public class SV_USER extends SV_SEND { This will be sent on the initial connection and upon each server load. ================ */ - public static void SV_New_f() { + public static void SV_New_f() + { String gamedir; int playernum; edict_t ent; Com.DPrintf("New() from " + sv_client.name + "\n"); - if (sv_client.state != cs_connected) { + if (sv_client.state != cs_connected) + { Com.Printf("New not valid -- already spawned\n"); return; } // demo servers just dump the file message - if (sv.state == ss_demo) { + if (sv.state == ss_demo) + { SV_BeginDemoserver(); return; } @@ -91,7 +98,7 @@ public class SV_USER extends SV_SEND { // serverdata needs to go over for all types of servers // to make sure the protocol is right, and to set the gamedir // - gamedir = Cvar.VariableString("gamedir"); + gamedir= Cvar.VariableString("gamedir"); // send the serverdata MSG.WriteByte(sv_client.netchan.message, svc_serverdata); @@ -101,10 +108,10 @@ public class SV_USER extends SV_SEND { MSG.WriteString(sv_client.netchan.message, gamedir); if (sv.state == ss_cinematic || sv.state == ss_pic) - playernum = -1; + playernum= -1; else //playernum = sv_client - svs.clients; - playernum = sv_client.serverindex; + playernum= sv_client.serverindex; MSG.WriteShort(sv_client.netchan.message, playernum); @@ -114,12 +121,13 @@ public class SV_USER extends SV_SEND { // // game server // - if (sv.state == ss_game) { + if (sv.state == ss_game) + { // set up the entity for the client - ent = SV_GAME.ge.edicts[playernum + 1]; - ent.s.number = playernum + 1; - sv_client.edict = ent; - sv_client.lastcmd = new usercmd_t(); + ent= SV_GAME.ge.edicts[playernum + 1]; + ent.s.number= playernum + 1; + sv_client.edict= ent; + sv_client.lastcmd= new usercmd_t(); // begin fetching configstrings MSG.WriteByte(sv_client.netchan.message, svc_stufftext); @@ -133,29 +141,34 @@ public class SV_USER extends SV_SEND { SV_Configstrings_f ================== */ - public static void SV_Configstrings_f() { + public static void SV_Configstrings_f() + { int start; Com.DPrintf("Configstrings() from " + sv_client.name + "\n"); - if (sv_client.state != cs_connected) { + if (sv_client.state != cs_connected) + { Com.Printf("configstrings not valid -- already spawned\n"); return; } // handle the case of a level changing while a client was connecting - if (atoi(Cmd.Argv(1)) != svs.spawncount) { + if (atoi(Cmd.Argv(1)) != svs.spawncount) + { Com.Printf("SV_Configstrings_f from different level\n"); SV_New_f(); return; } - start = atoi(Cmd.Argv(2)); + start= atoi(Cmd.Argv(2)); // write a packet full of data - while (sv_client.netchan.message.cursize < MAX_MSGLEN / 2 && start < MAX_CONFIGSTRINGS) { - if (sv.configstrings[start] != null && sv.configstrings[start].length() != 0) { + while (sv_client.netchan.message.cursize < MAX_MSGLEN / 2 && start < MAX_CONFIGSTRINGS) + { + if (sv.configstrings[start] != null && sv.configstrings[start].length() != 0) + { MSG.WriteByte(sv_client.netchan.message, svc_configstring); MSG.WriteShort(sv_client.netchan.message, start); MSG.WriteString(sv_client.netchan.message, sv.configstrings[start]); @@ -165,11 +178,13 @@ public class SV_USER extends SV_SEND { // send next command - if (start == MAX_CONFIGSTRINGS) { + if (start == MAX_CONFIGSTRINGS) + { MSG.WriteByte(sv_client.netchan.message, svc_stufftext); MSG.WriteString(sv_client.netchan.message, "cmd baselines " + svs.spawncount + " 0\n"); } - else { + else + { MSG.WriteByte(sv_client.netchan.message, svc_stufftext); MSG.WriteString(sv_client.netchan.message, "cmd configstrings " + svs.spawncount + " " + start + "\n"); } @@ -180,35 +195,40 @@ public class SV_USER extends SV_SEND { SV_Baselines_f ================== */ - public static void SV_Baselines_f() { + public static void SV_Baselines_f() + { int start; entity_state_t nullstate; entity_state_t base; Com.DPrintf("Baselines() from " + sv_client.name + "\n"); - if (sv_client.state != cs_connected) { + if (sv_client.state != cs_connected) + { Com.Printf("baselines not valid -- already spawned\n"); return; } // handle the case of a level changing while a client was connecting - if (atoi(Cmd.Argv(1)) != svs.spawncount) { + if (atoi(Cmd.Argv(1)) != svs.spawncount) + { Com.Printf("SV_Baselines_f from different level\n"); SV_New_f(); return; } - start = atoi(Cmd.Argv(2)); + start= atoi(Cmd.Argv(2)); //memset (&nullstate, 0, sizeof(nullstate)); - nullstate = new entity_state_t(null); + nullstate= new entity_state_t(null); // write a packet full of data - while (sv_client.netchan.message.cursize < MAX_MSGLEN / 2 && start < MAX_EDICTS) { - base = sv.baselines[start]; - if (base.modelindex != 0 || base.sound != 0 || base.effects != 0) { + while (sv_client.netchan.message.cursize < MAX_MSGLEN / 2 && start < MAX_EDICTS) + { + base= sv.baselines[start]; + if (base.modelindex != 0 || base.sound != 0 || base.effects != 0) + { MSG.WriteByte(sv_client.netchan.message, svc_spawnbaseline); MSG.WriteDeltaEntity(nullstate, base, sv_client.netchan.message, true, true); } @@ -217,11 +237,13 @@ public class SV_USER extends SV_SEND { // send next command - if (start == MAX_EDICTS) { + if (start == MAX_EDICTS) + { MSG.WriteByte(sv_client.netchan.message, svc_stufftext); MSG.WriteString(sv_client.netchan.message, "precache " + svs.spawncount + "\n"); } - else { + else + { MSG.WriteByte(sv_client.netchan.message, svc_stufftext); MSG.WriteString(sv_client.netchan.message, "cmd baselines " + svs.spawncount + " " + start + "\n"); } @@ -232,17 +254,19 @@ public class SV_USER extends SV_SEND { SV_Begin_f ================== */ - public static void SV_Begin_f() { + public static void SV_Begin_f() + { Com.DPrintf("Begin() from " + sv_client.name + "\n"); // handle the case of a level changing while a client was connecting - if (atoi(Cmd.Argv(1)) != svs.spawncount) { + if (atoi(Cmd.Argv(1)) != svs.spawncount) + { Com.Printf("SV_Begin_f from different level\n"); SV_New_f(); return; } - sv_client.state = cs_spawned; + sv_client.state= cs_spawned; // call the game begin function SV_GAME.ge.ClientBegin(sv_player); @@ -257,7 +281,8 @@ public class SV_USER extends SV_SEND { SV_NextDownload_f ================== */ - public static void SV_NextDownload_f() { + public static void SV_NextDownload_f() + { int r; int percent; int size; @@ -265,18 +290,18 @@ public class SV_USER extends SV_SEND { if (sv_client.download == null) return; - r = sv_client.downloadsize - sv_client.downloadcount; + r= sv_client.downloadsize - sv_client.downloadcount; if (r > 1024) - r = 1024; + r= 1024; MSG.WriteByte(sv_client.netchan.message, svc_download); MSG.WriteShort(sv_client.netchan.message, r); sv_client.downloadcount += r; - size = sv_client.downloadsize; + size= sv_client.downloadsize; if (size == 0) - size = 1; - percent = sv_client.downloadcount * 100 / size; + size= 1; + percent= sv_client.downloadcount * 100 / size; MSG.WriteByte(sv_client.netchan.message, percent); SZ.Write(sv_client.netchan.message, sv_client.download, sv_client.downloadcount - r, r); @@ -284,7 +309,7 @@ public class SV_USER extends SV_SEND { return; FS.FreeFile(sv_client.download); - sv_client.download = null; + sv_client.download= null; } /* @@ -292,14 +317,15 @@ public class SV_USER extends SV_SEND { SV_BeginDownload_f ================== */ - public static void SV_BeginDownload_f() { + public static void SV_BeginDownload_f() + { String name; - int offset = 0; + int offset= 0; - name = Cmd.Argv(1); + name= Cmd.Argv(1); if (Cmd.Argc() > 2) - offset = atoi(Cmd.Argv(2)); // downloaded offset + offset= atoi(Cmd.Argv(2)); // downloaded offset // hacked by zoid to allow more conrol over download // first off, no .. or global allow check @@ -310,9 +336,11 @@ public class SV_USER extends SV_SEND { || name.charAt(0) == '/' // next up, skin check || (name.startsWith("players/") && 0 == allow_download_players.value) // now models || (name.startsWith("models/") && 0 == allow_download_models.value) // now sounds - || (name.startsWith("sound/") && 0 == allow_download_sounds.value) // now maps (note special case for maps, must not be in pak) + || (name.startsWith("sound/") + && 0 == allow_download_sounds.value) // now maps (note special case for maps, must not be in pak) || (name.startsWith("maps/") && 0 == allow_download_maps.value) // MUST be in a subdirectory - || name.indexOf('/') == -1) { // don't allow anything with .. path + || name.indexOf('/') == -1) + { // don't allow anything with .. path MSG.WriteByte(sv_client.netchan.message, svc_download); MSG.WriteShort(sv_client.netchan.message, -1); MSG.WriteByte(sv_client.netchan.message, 0); @@ -322,20 +350,22 @@ public class SV_USER extends SV_SEND { if (sv_client.download != null) FS.FreeFile(sv_client.download); - sv_client.download = FS.LoadFile(name); - sv_client.downloadsize = sv_client.download.length; - sv_client.downloadcount = offset; + sv_client.download= FS.LoadFile(name); + sv_client.downloadsize= sv_client.download.length; + sv_client.downloadcount= offset; if (offset > sv_client.downloadsize) - sv_client.downloadcount = sv_client.downloadsize; + sv_client.downloadcount= sv_client.downloadsize; if (sv_client.download == null // special check for maps, if it came from a pak file, don't allow // download ZOID - || (name.startsWith("maps/") && FS.file_from_pak != 0)) { + || (name.startsWith("maps/") && FS.file_from_pak != 0)) + { Com.DPrintf("Couldn't download " + name + " to " + sv_client.name + "\n"); - if (sv_client.download != null) { + if (sv_client.download != null) + { FS.FreeFile(sv_client.download); - sv_client.download = null; + sv_client.download= null; } MSG.WriteByte(sv_client.netchan.message, svc_download); @@ -357,7 +387,8 @@ public class SV_USER extends SV_SEND { The client is going to disconnect, so remove the connection immediately ================= */ - public static void SV_Disconnect_f() { + public static void SV_Disconnect_f() + { // SV_EndRedirect (); SV_DropClient(sv_client); } @@ -369,11 +400,13 @@ public class SV_USER extends SV_SEND { Dumps the serverinfo info string ================== */ - public static void SV_ShowServerinfo_f() { + public static void SV_ShowServerinfo_f() + { Info.Print(Cvar.Serverinfo()); } - public static void SV_Nextserver() { + public static void SV_Nextserver() + { String v; //ZOID, ss_pic can be nextserver'd in coop mode @@ -381,11 +414,12 @@ public class SV_USER extends SV_SEND { return; // can't nextserver while playing a normal game svs.spawncount++; // make sure another doesn't sneak in - v = Cvar.VariableString("nextserver"); + v= Cvar.VariableString("nextserver"); //if (!v[0]) if (v.length() == 0) Cbuf.AddText("killserver\n"); - else { + else + { Cbuf.AddText(v); Cbuf.AddText("\n"); } @@ -400,8 +434,10 @@ public class SV_USER extends SV_SEND { to the next server, ================== */ - public static void SV_Nextserver_f() { - if (Lib.atoi(Cmd.Argv(1)) != svs.spawncount) { + public static void SV_Nextserver_f() + { + if (Lib.atoi(Cmd.Argv(1)) != svs.spawncount) + { Com.DPrintf("Nextserver() from wrong level, from " + sv_client.name + "\n"); return; // leftover from last server } @@ -411,58 +447,80 @@ public class SV_USER extends SV_SEND { SV_Nextserver(); } - public static class ucmd_t { - public ucmd_t(String n, Runnable r) { - name = n; - this.r = r; + public static class ucmd_t + { + public ucmd_t(String n, Runnable r) + { + name= n; + this.r= r; } String name; Runnable r; } - static ucmd_t u1 = new ucmd_t("new", new Runnable() { - public void run() { + static ucmd_t u1= new ucmd_t("new", new Runnable() + { + public void run() + { SV_New_f(); } }); - static ucmd_t ucmds[] = { + static ucmd_t ucmds[]= { // auto issued - new ucmd_t("new", new Runnable() { public void run() { SV_New_f(); + new ucmd_t("new", new Runnable() + { public void run() + { SV_New_f(); } - }), new ucmd_t("configstrings", new Runnable() { - public void run() { + }), new ucmd_t("configstrings", new Runnable() + { + public void run() + { SV_Configstrings_f(); } - }), new ucmd_t("baselines", new Runnable() { - public void run() { + }), new ucmd_t("baselines", new Runnable() + { + public void run() + { SV_Baselines_f(); } - }), new ucmd_t("begin", new Runnable() { - public void run() { + }), new ucmd_t("begin", new Runnable() + { + public void run() + { SV_Begin_f(); } - }), new ucmd_t("nextserver", new Runnable() { - public void run() { + }), new ucmd_t("nextserver", new Runnable() + { + public void run() + { SV_Nextserver_f(); } - }), new ucmd_t("disconnect", new Runnable() { - public void run() { + }), new ucmd_t("disconnect", new Runnable() + { + public void run() + { SV_Disconnect_f(); } }), // issued by hand at client consoles - new ucmd_t("info", new Runnable() { - public void run() { + new ucmd_t("info", new Runnable() + { + public void run() + { SV_ShowServerinfo_f(); } - }), new ucmd_t("download", new Runnable() { - public void run() { + }), new ucmd_t("download", new Runnable() + { + public void run() + { SV_BeginDownload_f(); } - }), new ucmd_t("nextdl", new Runnable() { - public void run() { + }), new ucmd_t("nextdl", new Runnable() + { + public void run() + { SV_NextDownload_f(); } }) @@ -473,23 +531,26 @@ public class SV_USER extends SV_SEND { SV_ExecuteUserCommand ================== */ - public static void SV_ExecuteUserCommand(String s) { - ucmd_t u = null; + public static void SV_ExecuteUserCommand(String s) + { + ucmd_t u= null; Cmd.TokenizeString(s.toCharArray(), true); - sv_player = sv_client.edict; + sv_player= sv_client.edict; // SV_BeginRedirect (RD_CLIENT); - int i=0; - for (; i < ucmds.length; i++) { - u = ucmds[i]; - if (0 == strcmp(Cmd.Argv(0), u.name)) { + int i= 0; + for (; i < ucmds.length; i++) + { + u= ucmds[i]; + if (0 == strcmp(Cmd.Argv(0), u.name)) + { u.r.run(); break; } } - + if (i == ucmds.length && sv.state == ss_game) SV_GAME.ge.ClientCommand(sv_player); @@ -504,10 +565,12 @@ public class SV_USER extends SV_SEND { =========================================================================== */ - public static void SV_ClientThink(client_t cl, usercmd_t cmd) { + public static void SV_ClientThink(client_t cl, usercmd_t cmd) + { cl.commandMsec -= cmd.msec & 0xFF; - if (cl.commandMsec < 0 && sv_enforcetime.value != 0) { + if (cl.commandMsec < 0 && sv_enforcetime.value != 0) + { Com.DPrintf("commandMsec underflow from " + cl.name + "\n"); return; } @@ -515,7 +578,7 @@ public class SV_USER extends SV_SEND { SV_GAME.ge.ClientThink(cl.edict, cmd); } - public static final int MAX_STRINGCMDS = 8; + public static final int MAX_STRINGCMDS= 8; /* =================== SV_ExecuteClientMessage @@ -523,12 +586,13 @@ public class SV_USER extends SV_SEND { The current net_message is parsed for the given client =================== */ - public static void SV_ExecuteClientMessage(client_t cl) { + public static void SV_ExecuteClientMessage(client_t cl) + { int c; String s; - usercmd_t nullcmd = new usercmd_t(); - usercmd_t oldest = new usercmd_t(), oldcmd = new usercmd_t(), newcmd = new usercmd_t(); + usercmd_t nullcmd= new usercmd_t(); + usercmd_t oldest= new usercmd_t(), oldcmd= new usercmd_t(), newcmd= new usercmd_t(); int net_drop; int stringCmdCount; int checksum, calculatedChecksum; @@ -536,26 +600,29 @@ public class SV_USER extends SV_SEND { boolean move_issued; int lastframe; - sv_client = cl; - sv_player = sv_client.edict; + sv_client= cl; + sv_player= sv_client.edict; // only allow one move command - move_issued = false; - stringCmdCount = 0; + move_issued= false; + stringCmdCount= 0; - while (true) { - if (net_message.readcount > net_message.cursize) { + while (true) + { + if (net_message.readcount > net_message.cursize) + { Com.Printf("SV_ReadClientMessage: bad read:\n"); Com.Printf(Lib.hexDump(net_message.data, 32, false)); SV_DropClient(cl); return; } - c = MSG.ReadByte(net_message); + c= MSG.ReadByte(net_message); if (c == -1) break; - switch (c) { + switch (c) + { default : Com.Printf("SV_ReadClientMessage: unknown command char\n"); SV_DropClient(cl); @@ -565,7 +632,7 @@ public class SV_USER extends SV_SEND { break; case clc_userinfo : - cl.userinfo = MSG.ReadString(net_message); + cl.userinfo= MSG.ReadString(net_message); SV_MAIN.SV_UserinfoChanged(cl); break; @@ -573,41 +640,43 @@ public class SV_USER extends SV_SEND { if (move_issued) return; // someone is trying to cheat... - move_issued = true; - checksumIndex = net_message.readcount; - checksum = MSG.ReadByte(net_message); - lastframe = MSG.ReadLong(net_message); - - if (lastframe != cl.lastframe) { - cl.lastframe = lastframe; - if (cl.lastframe > 0) { - cl.frame_latency[cl.lastframe & (LATENCY_COUNTS - 1)] = + move_issued= true; + checksumIndex= net_message.readcount; + checksum= MSG.ReadByte(net_message); + lastframe= MSG.ReadLong(net_message); + + if (lastframe != cl.lastframe) + { + cl.lastframe= lastframe; + if (cl.lastframe > 0) + { + cl.frame_latency[cl.lastframe & (LATENCY_COUNTS - 1)]= svs.realtime - cl.frames[cl.lastframe & UPDATE_MASK].senttime; } } //memset (nullcmd, 0, sizeof(nullcmd)); - nullcmd = new usercmd_t(); + nullcmd= new usercmd_t(); MSG.ReadDeltaUsercmd(net_message, nullcmd, oldest); MSG.ReadDeltaUsercmd(net_message, oldest, oldcmd); MSG.ReadDeltaUsercmd(net_message, oldcmd, newcmd); - if (cl.state != cs_spawned) { - cl.lastframe = -1; + if (cl.state != cs_spawned) + { + cl.lastframe= -1; break; } // if the checksum fails, ignore the rest of the packet - calculatedChecksum = 0; - /* - = Com.BlockSequenceCRCByte( - net_message.data + checksumIndex + 1, + calculatedChecksum= + Com.BlockSequenceCRCByte( + net_message.data, checksumIndex + 1, net_message.readcount - checksumIndex - 1, cl.netchan.incoming_sequence); - */ - if (calculatedChecksum != checksum) { + if ((calculatedChecksum &0xff) != checksum) + { Com.DPrintf( "Failed command checksum for " + cl.name @@ -621,14 +690,17 @@ public class SV_USER extends SV_SEND { return; } - if (0 == sv_paused.value) { - net_drop = cl.netchan.dropped; - if (net_drop < 20) { + if (0 == sv_paused.value) + { + net_drop= cl.netchan.dropped; + if (net_drop < 20) + { //if (net_drop > 2) // Com.Printf ("drop %i\n", net_drop); - while (net_drop > 2) { + while (net_drop > 2) + { SV_ClientThink(cl, cl.lastcmd); net_drop--; @@ -648,7 +720,7 @@ public class SV_USER extends SV_SEND { break; case clc_stringcmd : - s = MSG.ReadString(net_message); + s= MSG.ReadString(net_message); // malicious users may try using too many string commands if (++stringCmdCount < MAX_STRINGCMDS) diff --git a/src/jake2/server/SV_WORLD.java b/src/jake2/server/SV_WORLD.java index 4e78084..2015a44 100644 --- a/src/jake2/server/SV_WORLD.java +++ b/src/jake2/server/SV_WORLD.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 07.01.2000 by RST. -// $Id: SV_WORLD.java,v 1.3 2004-07-08 20:24:30 hzi Exp $ +// $Id: SV_WORLD.java,v 1.3.2.1 2004-07-09 08:38:25 hzi Exp $ package jake2.server; @@ -48,14 +48,13 @@ public class SV_WORLD extends SV_CCMDS //=============================================================================== // - public static void initNodes() { - for (int n = 0; n < AREA_NODES; n++) - sv_areanodes[n] = new areanode_t(); + for (int n= 0; n < AREA_NODES; n++) + sv_areanodes[n]= new areanode_t(); } - public static areanode_t sv_areanodes[] = new areanode_t[AREA_NODES]; + public static areanode_t sv_areanodes[]= new areanode_t[AREA_NODES]; static { initNodes(); @@ -70,21 +69,21 @@ public class SV_WORLD extends SV_CCMDS // ClearLink is used for new headnodes public static void ClearLink(link_t l) { - l.prev = l.next = l; + l.prev= l.next= l; } public static void RemoveLink(link_t l) { - l.next.prev = l.prev; - l.prev.next = l.next; + l.next.prev= l.prev; + l.prev.next= l.next; } public static void InsertLinkBefore(link_t l, link_t before) { - l.next = before; - l.prev = before.prev; - l.prev.next = l; - l.next.prev = l; + l.next= before; + l.prev= before.prev; + l.prev.next= l; + l.next.prev= l; } /* @@ -97,10 +96,10 @@ public class SV_WORLD extends SV_CCMDS public static areanode_t SV_CreateAreaNode(int depth, float[] mins, float[] maxs) { areanode_t anode; - float[] size = { 0, 0, 0 }; - float[] mins1 = { 0, 0, 0 }, maxs1 = { 0, 0, 0 }, mins2 = { 0, 0, 0 }, maxs2 = { 0, 0, 0 }; + float[] size= { 0, 0, 0 }; + float[] mins1= { 0, 0, 0 }, maxs1= { 0, 0, 0 }, mins2= { 0, 0, 0 }, maxs2= { 0, 0, 0 }; - anode = sv_areanodes[sv_numareanodes]; + anode= sv_areanodes[sv_numareanodes]; // just for debugging (rst) VectorCopy(mins, anode.mins_rst); @@ -113,27 +112,27 @@ public class SV_WORLD extends SV_CCMDS if (depth == AREA_DEPTH) { - anode.axis = -1; - anode.children[0] = anode.children[1] = null; + anode.axis= -1; + anode.children[0]= anode.children[1]= null; return anode; } VectorSubtract(maxs, mins, size); if (size[0] > size[1]) - anode.axis = 0; + anode.axis= 0; else - anode.axis = 1; + anode.axis= 1; - anode.dist = 0.5f * (maxs[anode.axis] + mins[anode.axis]); + anode.dist= 0.5f * (maxs[anode.axis] + mins[anode.axis]); VectorCopy(mins, mins1); VectorCopy(mins, mins2); VectorCopy(maxs, maxs1); VectorCopy(maxs, maxs2); - maxs1[anode.axis] = mins2[anode.axis] = anode.dist; + maxs1[anode.axis]= mins2[anode.axis]= anode.dist; - anode.children[0] = SV_CreateAreaNode(depth + 1, mins2, maxs2); - anode.children[1] = SV_CreateAreaNode(depth + 1, mins1, maxs1); + anode.children[0]= SV_CreateAreaNode(depth + 1, mins2, maxs2); + anode.children[1]= SV_CreateAreaNode(depth + 1, mins1, maxs1); return anode; } @@ -147,7 +146,7 @@ public class SV_WORLD extends SV_CCMDS public static void SV_ClearWorld() { initNodes(); - sv_numareanodes = 0; + sv_numareanodes= 0; SV_CreateAreaNode(0, sv.models[1].mins, sv.models[1].maxs); /* @@ -178,7 +177,7 @@ public class SV_WORLD extends SV_CCMDS if (null == ent.area.prev) return; // not linked in anywhere RemoveLink(ent.area); - ent.area.prev = ent.area.next = null; + ent.area.prev= ent.area.next= null; } /* @@ -186,18 +185,18 @@ public class SV_WORLD extends SV_CCMDS SV_LinkEdict =============== */ - public static final int MAX_TOTAL_ENT_LEAFS = 128; - + public static final int MAX_TOTAL_ENT_LEAFS= 128; + private static int leafs[]= new int[MAX_TOTAL_ENT_LEAFS]; + private static int clusters[]= new int[MAX_TOTAL_ENT_LEAFS]; + public static void SV_LinkEdict(edict_t ent) { areanode_t node; - // TODO: make static instead of new - int leafs[] = new int[MAX_TOTAL_ENT_LEAFS]; - int clusters[] = new int[MAX_TOTAL_ENT_LEAFS]; + int num_leafs; int j, k; int area; - int topnode = 0; + int topnode= 0; if (ent.area.prev != null) SV_UnlinkEdict(ent); // unlink from old position @@ -214,54 +213,54 @@ public class SV_WORLD extends SV_CCMDS // encode the size into the entity_state for client prediction if (ent.solid == SOLID_BBOX && 0 == (ent.svflags & SVF_DEADMONSTER)) { // assume that x/y are equal and symetric - int i = (int) (ent.maxs[0] / 8); + int i= (int) (ent.maxs[0] / 8); if (i < 1) - i = 1; + i= 1; if (i > 31) - i = 31; + i= 31; // z is not symetric - j = (int) ((-ent.mins[2]) / 8); + j= (int) ((-ent.mins[2]) / 8); if (j < 1) - j = 1; + j= 1; if (j > 31) - j = 31; + j= 31; // and z maxs can be negative... - k = (int) ((ent.maxs[2] + 32) / 8); + k= (int) ((ent.maxs[2] + 32) / 8); if (k < 1) - k = 1; + k= 1; if (k > 63) - k = 63; + k= 63; - ent.s.solid = (k << 10) | (j << 5) | i; + ent.s.solid= (k << 10) | (j << 5) | i; } else if (ent.solid == SOLID_BSP) { - ent.s.solid = 31; // a solid_bbox will never create this value + ent.s.solid= 31; // a solid_bbox will never create this value } else - ent.s.solid = 0; + ent.s.solid= 0; // set the abs box if (ent.solid == SOLID_BSP && (ent.s.angles[0] != 0 || ent.s.angles[1] != 0 || ent.s.angles[2] != 0)) { // expand for rotation float max, v; - max = 0; - for (int i = 0; i < 3; i++) + max= 0; + for (int i= 0; i < 3; i++) { - v = Math.abs(ent.mins[i]); + v= Math.abs(ent.mins[i]); if (v > max) - max = v; - v = Math.abs(ent.maxs[i]); + max= v; + v= Math.abs(ent.maxs[i]); if (v > max) - max = v; + max= v; } - for (int i = 0; i < 3; i++) + for (int i= 0; i < 3; i++) { - ent.absmin[i] = ent.s.origin[i] - max; - ent.absmax[i] = ent.s.origin[i] + max; + ent.absmin[i]= ent.s.origin[i] - max; + ent.absmax[i]= ent.s.origin[i] + max; } } else @@ -281,62 +280,65 @@ public class SV_WORLD extends SV_CCMDS ent.absmax[2]++; // link to PVS leafs - ent.num_clusters = 0; - ent.areanum = 0; - ent.areanum2 = 0; + ent.num_clusters= 0; + ent.areanum= 0; + ent.areanum2= 0; //get all leafs, including solids - CM.intwrap iw = new CM.intwrap(topnode); + int iw[] = {topnode}; - num_leafs = CM.CM_BoxLeafnums(ent.absmin, ent.absmax, leafs, MAX_TOTAL_ENT_LEAFS, iw); + num_leafs= CM.CM_BoxLeafnums(ent.absmin, ent.absmax, leafs, MAX_TOTAL_ENT_LEAFS, iw); - topnode = iw.i; + topnode= iw[0]; // set areas - for (int i = 0; i < num_leafs; i++) + for (int i= 0; i < num_leafs; i++) { - clusters[i] = CM.CM_LeafCluster(leafs[i]); - area = CM.CM_LeafArea(leafs[i]); + clusters[i]= CM.CM_LeafCluster(leafs[i]); + area= CM.CM_LeafArea(leafs[i]); if (area != 0) - { // doors may legally straggle two areas, + { + // doors may legally straggle two areas, // but nothing should evern need more than that if (ent.areanum != 0 && ent.areanum != area) { if (ent.areanum2 != 0 && ent.areanum2 != area && sv.state == ss_loading) Com.DPrintf("Object touching 3 areas at " + ent.absmin[0] + " " + ent.absmin[1] + " " + ent.absmin[2] + "\n"); - ent.areanum2 = area; + ent.areanum2= area; } else - ent.areanum = area; + ent.areanum= area; } } if (num_leafs >= MAX_TOTAL_ENT_LEAFS) - { // assume we missed some leafs, and mark by headnode - ent.num_clusters = -1; - ent.headnode = topnode; + { + // assume we missed some leafs, and mark by headnode + ent.num_clusters= -1; + ent.headnode= topnode; } else { - ent.num_clusters = 0; - for (int i = 0; i < num_leafs; i++) + ent.num_clusters= 0; + for (int i= 0; i < num_leafs; i++) { if (clusters[i] == -1) continue; // not a visible leaf - for (j = 0; j < i; j++) + for (j= 0; j < i; j++) if (clusters[j] == clusters[i]) break; if (j == i) { if (ent.num_clusters == MAX_ENT_CLUSTERS) - { // assume we missed some leafs, and mark by headnode - ent.num_clusters = -1; - ent.headnode = topnode; + { + // assume we missed some leafs, and mark by headnode + ent.num_clusters= -1; + ent.headnode= topnode; break; } - ent.clusternums[ent.num_clusters++] = clusters[i]; + ent.clusternums[ent.num_clusters++]= clusters[i]; } } } @@ -352,16 +354,16 @@ public class SV_WORLD extends SV_CCMDS return; // find the first node that the ent's box crosses - node = sv_areanodes[0]; + node= sv_areanodes[0]; while (true) { if (node.axis == -1) break; if (ent.absmin[node.axis] > node.dist) - node = node.children[0]; + node= node.children[0]; else if (ent.absmax[node.axis] < node.dist) - node = node.children[1]; + node= node.children[1]; else break; // crosses the node } @@ -386,19 +388,18 @@ public class SV_WORLD extends SV_CCMDS edict_t check; int count; - count = 0; + count= 0; // touch linked edicts if (area_type == AREA_SOLID) - start = node.solid_edicts; + start= node.solid_edicts; else - start = node.trigger_edicts; + start= node.trigger_edicts; - for (l = start.next; l != start; l = next) + for (l= start.next; l != start; l= next) { - next = l.next; - check = //EDICT_FROM_AREA(l); - (edict_t) l.o; + next= l.next; + check= (edict_t) l.o; if (check.solid == SOLID_NOT) continue; // deactivated @@ -416,7 +417,7 @@ public class SV_WORLD extends SV_CCMDS return; } - area_list[area_count] = check; + area_list[area_count]= check; area_count++; } @@ -438,57 +439,53 @@ public class SV_WORLD extends SV_CCMDS */ public static int SV_AreaEdicts(float[] mins, float[] maxs, edict_t list[], int maxcount, int areatype) { - area_mins = mins; - area_maxs = maxs; - area_list = list; - area_count = 0; - area_maxcount = maxcount; - area_type = areatype; + area_mins= mins; + area_maxs= maxs; + area_list= list; + area_count= 0; + area_maxcount= maxcount; + area_type= areatype; SV_AreaEdicts_r(sv_areanodes[0]); - /* - Com.Printf("found edicts in area:" + area_count + "\n"); - for (int n = 0; n < area_count; n++) { - Com.Printf("%4i : %25s", new Vargs().add(n).add(list[n].classname)); - } - */ return area_count; } //=========================================================================== + private static edict_t touch[]= new edict_t[MAX_EDICTS]; /* ============= SV_PointContents ============= */ + public static int SV_PointContents(float[] p) { - // TODO: make static instead new - edict_t touch[] = new edict_t[MAX_EDICTS], hit; + edict_t hit; + int i, num; int contents, c2; int headnode; float angles[]; // get base contents from world - contents = CM.PointContents(p, sv.models[1].headnode); + contents= CM.PointContents(p, sv.models[1].headnode); // or in contents from all the other entities - num = SV_AreaEdicts(p, p, touch, MAX_EDICTS, AREA_SOLID); + num= SV_AreaEdicts(p, p, touch, MAX_EDICTS, AREA_SOLID); - for (i = 0; i < num; i++) + for (i= 0; i < num; i++) { - hit = touch[i]; + hit= touch[i]; // might intersect, so do an exact clip - headnode = SV_HullForEntity(hit); - angles = hit.s.angles; + headnode= SV_HullForEntity(hit); + angles= hit.s.angles; if (hit.solid != SOLID_BSP) - angles = vec3_origin; // boxes don't rotate + angles= vec3_origin; // boxes don't rotate - c2 = CM.TransformedPointContents(p, headnode, hit.s.origin, hit.s.angles); + c2= CM.TransformedPointContents(p, headnode, hit.s.origin, hit.s.angles); contents |= c2; } @@ -514,7 +511,7 @@ public class SV_WORLD extends SV_CCMDS // decide which clipping hull to use, based on the size if (ent.solid == SOLID_BSP) { // explicit hulls in the BSP model - model = sv.models[ent.s.modelindex]; + model= sv.models[ent.s.modelindex]; if (null == model) Com.Error(ERR_FATAL, "MOVETYPE_PUSH with a non bsp model"); @@ -535,23 +532,23 @@ public class SV_WORLD extends SV_CCMDS ==================== */ + private static edict_t touchlist[]= new edict_t[MAX_EDICTS]; public static void SV_ClipMoveToEntities(moveclip_t clip) { int i, num; - // TODO: make static instead of new - edict_t touchlist[] = new edict_t[MAX_EDICTS]; + edict_t touch; trace_t trace; int headnode; float angles[]; - num = SV_AreaEdicts(clip.boxmins, clip.boxmaxs, touchlist, MAX_EDICTS, AREA_SOLID); + num= SV_AreaEdicts(clip.boxmins, clip.boxmaxs, touchlist, MAX_EDICTS, AREA_SOLID); // be careful, it is possible to have an entity in this // list removed before we get to it (killtriggered) - for (i = 0; i < num; i++) + for (i= 0; i < num; i++) { - touch = touchlist[i]; + touch= touchlist[i]; if (touch.solid == SOLID_NOT) continue; if (touch == clip.passedict) @@ -570,13 +567,13 @@ public class SV_WORLD extends SV_CCMDS continue; // might intersect, so do an exact clip - headnode = SV_HullForEntity(touch); - angles = touch.s.angles; + headnode= SV_HullForEntity(touch); + angles= touch.s.angles; if (touch.solid != SOLID_BSP) - angles = vec3_origin; // boxes don't rotate + angles= vec3_origin; // boxes don't rotate if ((touch.svflags & SVF_MONSTER) != 0) - trace = + trace= CM.TransformedBoxTrace( clip.start, clip.end, @@ -587,7 +584,7 @@ public class SV_WORLD extends SV_CCMDS touch.s.origin, angles); else - trace = + trace= CM.TransformedBoxTrace( clip.start, clip.end, @@ -600,17 +597,17 @@ public class SV_WORLD extends SV_CCMDS if (trace.allsolid || trace.startsolid || trace.fraction < clip.trace.fraction) { - trace.ent = touch; + trace.ent= touch; if (clip.trace.startsolid) { - clip.trace = trace; - clip.trace.startsolid = true; + clip.trace= trace; + clip.trace.startsolid= true; } else clip.trace.set(trace); } else if (trace.startsolid) - clip.trace.startsolid = true; + clip.trace.startsolid= true; } } @@ -623,17 +620,17 @@ public class SV_WORLD extends SV_CCMDS { int i; - for (i = 0; i < 3; i++) + for (i= 0; i < 3; i++) { if (end[i] > start[i]) { - boxmins[i] = start[i] + mins[i] - 1; - boxmaxs[i] = end[i] + maxs[i] + 1; + boxmins[i]= start[i] + mins[i] - 1; + boxmaxs[i]= end[i] + maxs[i] + 1; } else { - boxmins[i] = end[i] + mins[i] - 1; - boxmaxs[i] = start[i] + maxs[i] + 1; + boxmins[i]= end[i] + mins[i] - 1; + boxmaxs[i]= start[i] + maxs[i] + 1; } } @@ -651,27 +648,27 @@ public class SV_WORLD extends SV_CCMDS */ public static trace_t SV_Trace(float[] start, float[] mins, float[] maxs, float[] end, edict_t passedict, int contentmask) { - moveclip_t clip = new moveclip_t(); + moveclip_t clip= new moveclip_t(); if (mins == null) - mins = vec3_origin; + mins= vec3_origin; if (maxs == null) - maxs = vec3_origin; + maxs= vec3_origin; //memset ( clip, 0, sizeof ( moveclip_t ) ); // clip to world - clip.trace = CM.BoxTrace(start, end, mins, maxs, 0, contentmask); - clip.trace.ent = ge.edicts[0]; + clip.trace= CM.BoxTrace(start, end, mins, maxs, 0, contentmask); + clip.trace.ent= ge.edicts[0]; if (clip.trace.fraction == 0) return clip.trace; // blocked by the world - clip.contentmask = contentmask; - clip.start = start; - clip.end = end; - clip.mins = mins; - clip.maxs = maxs; - clip.passedict = passedict; + clip.contentmask= contentmask; + clip.start= start; + clip.end= end; + clip.mins= mins; + clip.maxs= maxs; + clip.passedict= passedict; VectorCopy(mins, clip.mins2); VectorCopy(maxs, clip.maxs2); diff --git a/src/jake2/sound/S.java b/src/jake2/sound/S.java index c696501..72fdb48 100644 --- a/src/jake2/sound/S.java +++ b/src/jake2/sound/S.java @@ -2,7 +2,7 @@ * S.java * Copyright (C) 2003 * - * $Id: S.java,v 1.1 2004-07-08 20:56:49 hzi Exp $ + * $Id: S.java,v 1.1.2.1 2004-07-09 08:38:26 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -184,4 +184,8 @@ public class S { public static void StopAllSounds() { impl.StopAllSounds(); } + + public static String getDriverName() { + return impl.getName(); + } } diff --git a/src/jake2/sound/WaveLoader.java b/src/jake2/sound/WaveLoader.java index 020ab52..865d1b9 100644 --- a/src/jake2/sound/WaveLoader.java +++ b/src/jake2/sound/WaveLoader.java @@ -2,7 +2,7 @@ * SND_MEM.java * Copyright (C) 2004 * - * $Id: WaveLoader.java,v 1.1 2004-07-09 06:50:48 hzi Exp $ + * $Id: WaveLoader.java,v 1.1.2.1 2004-07-09 08:38:26 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/sound/joal/Channel.java b/src/jake2/sound/joal/Channel.java index ced496f..5438a8a 100644 --- a/src/jake2/sound/joal/Channel.java +++ b/src/jake2/sound/joal/Channel.java @@ -3,7 +3,7 @@ * * Copyright (C) 2003 * - * $Id: Channel.java,v 1.1 2004-07-09 06:50:52 hzi Exp $ + * $Id: Channel.java,v 1.1.2.1 2004-07-09 08:38:28 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. diff --git a/src/jake2/sound/joal/JOALSoundImpl.java b/src/jake2/sound/joal/JOALSoundImpl.java index 8a005ce..3047484 100644 --- a/src/jake2/sound/joal/JOALSoundImpl.java +++ b/src/jake2/sound/joal/JOALSoundImpl.java @@ -2,7 +2,7 @@ * JOALSoundImpl.java * Copyright (C) 2004 * - * $Id: JOALSoundImpl.java,v 1.1 2004-07-09 06:50:52 hzi Exp $ + * $Id: JOALSoundImpl.java,v 1.1.2.1 2004-07-09 08:38:28 hzi Exp $ */ package jake2.sound.joal; diff --git a/src/jake2/sys/NET.java b/src/jake2/sys/NET.java index 19a3a59..56e3c0d 100644 --- a/src/jake2/sys/NET.java +++ b/src/jake2/sys/NET.java @@ -2,7 +2,7 @@ * NET.java * Copyright (C) 2003 * - * $Id: NET.java,v 1.1 2004-07-07 19:59:51 hzi Exp $ + * $Id: NET.java,v 1.1.1.1.2.1 2004-07-09 08:38:25 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -686,8 +686,8 @@ public final class NET extends Defines { ==================== */ public static String NET_ErrorString() { + int code; - //code = errno; //return strerror (code); return "errno can not yet resolved in java"; @@ -700,7 +700,7 @@ public final class NET extends Defines { return; // we're not a server, just run full speed try { - //TODO: check for + //TODO: check for timeout Thread.sleep(msec); } catch (InterruptedException e) { diff --git a/src/jake2/sys/Sys.java b/src/jake2/sys/Sys.java index 8a08956..7cbfd80 100644 --- a/src/jake2/sys/Sys.java +++ b/src/jake2/sys/Sys.java @@ -2,7 +2,7 @@ * Sys.java * Copyright (C) 2003 * - * $Id: Sys.java,v 1.3 2004-07-08 20:24:30 hzi Exp $ + * $Id: Sys.java,v 1.3.2.1 2004-07-09 08:38:25 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -44,14 +44,6 @@ import jake2.util.Lib; */ public final class Sys extends Defines { - public static void StackTrace() { - - StackTraceElement trace[] = new Throwable().getStackTrace(); - Com.Println("StackTrace:"); - for (int i = 0; i < trace.length; i++) - Com.Println("" + trace[i]); - } - public static void Error(String error) { CL.Shutdown(); @@ -259,11 +251,6 @@ public final class Sys extends Defines { Globals.sys_frame_time = Sys.Milliseconds(); } - public static game_export_t GetGameAPI(game_import_t gimport) - { - return Game.GetGameApi(gimport); - } - public static String GetClipboardData() { // TODO: implement GetClipboardData return null; diff --git a/src/jake2/util/Lib.java b/src/jake2/util/Lib.java index bab5ff0..a79cc1a 100644 --- a/src/jake2/util/Lib.java +++ b/src/jake2/util/Lib.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 09.12.2003 by RST. -// $Id: Lib.java,v 1.2 2004-07-08 15:58:48 hzi Exp $ +// $Id: Lib.java,v 1.2.2.1 2004-07-09 08:38:23 hzi Exp $ package jake2.util; @@ -28,37 +28,17 @@ import jake2.qcommon.Com; import jake2.qcommon.FS; import java.io.*; +import java.nio.*; import java.nio.ByteBuffer; +import java.nio.FloatBuffer; import java.util.Arrays; import java.util.StringTokenizer; -public class Lib { - - /* - ============= - TempVector - - This is just a convenience function - for making temporary vectors for function calls - ============= - */ - public static float tv_vecs[][] = new float[8][3]; - public static int tv_index; - public static float[] tv(float x, float y, float z) { +import net.java.games.jogl.util.BufferUtils; - float[] v; - - // use an array so that multiple tempvectors won't collide - // for a while - v = tv_vecs[tv_index]; - tv_index = (tv_index++) & 7; +public class Lib { - v[0] = x; - v[1] = y; - v[2] = z; - return v; - } /* ============= VectorToString @@ -92,9 +72,6 @@ public class Lib { public static float crand() { return (Globals.rnd.nextFloat() - 0.5f) * 2.0f; } - public static float frand() { - return Globals.rnd.nextFloat(); - } public static int strcmp(String in1, String in2) { return in1.compareTo(in2); @@ -108,25 +85,6 @@ public class Lib { return (i1.indexOf(i2) != -1); } - public static int strncmp(String in1, String in2, int len) { - int i1 = Math.min(len, in1.length()); - int i2 = Math.min(len, in2.length()); - - if (i1 < i2) - return -1; - if (i1 > i2) - return 1; - - for (int n = 0; n < i1; n++) { - char c1 = in1.charAt(n); - char c2 = in2.charAt(n); - if (c1 < c2) - return -1; - if (c1 > c2) - return 1; - } - return 0; - } public static float atof(String in) { float res = 0; @@ -189,17 +147,6 @@ public class Lib { in += i; } - public static void strcpy(char dest[], char src[]) { - for (int i = 0; i < dest.length && i < src.length; i++) - if (src[i] == 0) { - dest[i] = 0; - return; - } - else - dest[i] = src[i]; - - } - public static void strcpy(byte dest[], byte src[]) { for (int i = 0; i < dest.length && i < src.length; i++) if (src[i] == 0) { @@ -385,33 +332,6 @@ public class Lib { return result; } - public static void main(String[] args) { - System.out.println("testing Lib..."); - - String linetest = "line 1\r\n line zwo\nline drei\n\r line4\n.line5"; - - String line[] = linesplit(linetest); - - for (int n = 0; n < line.length; n++) { - System.out.println("[" + line[n] + "]"); - } - - String v = "0.234 1.23423 7.23423"; - - int i1 = v.indexOf(" "); - int i2 = v.indexOf(" ", i1 + 1); - - System.out.println("testing substring..."); - - System.out.println("[" + v.substring(0, i1) + "]"); - System.out.println("[" + v.substring(i1 + 1, i2) + "]"); - System.out.println("[" + v.substring(i2 + 1, v.length()) + "]"); - - System.out.println("rightfrom[" + rightFrom("abcdefg#hijklm", '#') + "]"); - System.out.println("leftfrom[" + leftFrom("abcdefghijk#12", '#') + "]"); - System.out.println("leftfrom[" + leftFrom("abcdefghi", '#') + "]"); - } - public static int rename(String oldn, String newn) { try { File f1 = new File(oldn); @@ -436,23 +356,6 @@ public class Lib { public static int getInt(byte b[]) { return (b[0] & 0xff) | ((b[1] & 0xff) << 8) | ((b[2] & 0xff) << 16) | ((b[3] & 0xff) << 24); } - - public static void sleep(int sec) { - try { - Thread.sleep(sec * 1000); - } - catch (InterruptedException e) { - } - } - - public static byte[] clone(byte in[]) { - byte out[] = new byte[in.length]; - - if (in.length != 0) - System.arraycopy(in, 0, out, 0, in.length); - - return out; - } public static float[] clone(float in[]) { float out[] = new float[in.length]; @@ -463,15 +366,6 @@ public class Lib { return out; } - public static short[] clone(short in[]) { - short out[] = new short[in.length]; - - if (in.length != 0) - System.arraycopy(in, 0, out, 0, in.length); - - return out; - } - public static long[] clone(long in[]) { long out[] = new long[in.length]; @@ -516,4 +410,44 @@ public class Lib { return out; } + + /* + * java.nio.* Buffer util functions + */ + + public static final int SIZEOF_FLOAT = BufferUtils.SIZEOF_FLOAT; + public static final int SIZEOF_INT = BufferUtils.SIZEOF_INT; + + public static FloatBuffer newFloatBuffer(int numElements) { + ByteBuffer bb = newByteBuffer(numElements * SIZEOF_FLOAT); + return bb.asFloatBuffer(); + } + + public static FloatBuffer newFloatBuffer(int numElements, ByteOrder order) { + ByteBuffer bb = newByteBuffer(numElements * SIZEOF_FLOAT, order); + return bb.asFloatBuffer(); + } + + public static IntBuffer newIntBuffer(int numElements) { + ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT); + return bb.asIntBuffer(); + } + + public static IntBuffer newIntBuffer(int numElements, ByteOrder order) { + ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT, order); + return bb.asIntBuffer(); + } + + public static ByteBuffer newByteBuffer(int numElements) { + ByteBuffer bb = ByteBuffer.allocateDirect(numElements); + bb.order(ByteOrder.nativeOrder()); + return bb; + } + + public static ByteBuffer newByteBuffer(int numElements, ByteOrder order) { + ByteBuffer bb = ByteBuffer.allocateDirect(numElements); + bb.order(order); + return bb; + } + } |