rpg-x2-rpgxef/stvoyVM-bugfixes-beta1.diff
Walter Julius Hennecke 27269ee319 initial commit
2012-05-05 13:49:28 +02:00

830 lines
24 KiB
Diff

Index: ChangeLog
===================================================================
--- ChangeLog (revision 0)
+++ ChangeLog (revision 10)
@@ -0,0 +1,17 @@
+2006-04-08 Thilo Schulz <arny@ats.s.bawue.de>
+ - Added a bit of verboseness to the init_tonextint() function.
+
+2006-04-04 Thilo Schulz <arny@ats.s.bawue.de>
+ - Fixed a bug where the renderer shows certain weapon fire to go
+ through the upper half of a forcefield.
+
+2006-03-17 Thilo Schulz <arny@ats.s.bawue.de>
+ - Added Makefile based build system for UNIXoid environments.
+ - New function for rounding floats to the next integer introduced
+ that yields the same behaviour on all platforms.
+ - SnapVector macro changed to use the new rounding method. It will
+ make the movement work similarly on all platforms.
+ - Fixed 64bit safety when compiling to shared objects.
+ - Modified the random number generators to discard the first 17 bits
+ to emulate the behaviour of the VM generators.
+ - Fixed a few compiler warnings/errors.
Index: game/g_syscalls.c
===================================================================
--- game/g_syscalls.c (revision 1)
+++ game/g_syscalls.c (revision 10)
@@ -5,10 +5,10 @@
// this file is only included when building a dll
// g_syscalls.asm is included instead when building a qvm
-static int (QDECL *syscall)( int arg, ... ) = (int (QDECL *)( int, ...))-1;
+static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
-void dllEntry( int (QDECL *syscallptr)( int arg,... ) ) {
+void dllEntry( intptr_t (QDECL *syscallptr)( intptr_t arg,... ) ) {
syscall = syscallptr;
}
Index: game/q_math.c
===================================================================
--- game/q_math.c (revision 1)
+++ game/q_math.c (revision 10)
@@ -3,6 +3,7 @@
// q_math.c -- stateless support routines that are included in each code module
#include "q_shared.h"
+int nonansicast = 0;
vec3_t vec3_origin = {0,0,0};
vec3_t axisDefault[3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } };
@@ -1340,7 +1341,7 @@
*/
float flrandom(float min, float max)
{
- return ((rand() * (max - min)) / 32768.0F) + min;
+ return (((rand() & 0x7FFF) * (max - min)) / 32768.0F) + min;
}
/*
@@ -1350,7 +1351,7 @@
int irandom(int min, int max)
{
max++; //so it can round down
- return ((rand() * (max - min)) >> 15) + min;
+ return (((rand() & 0x7FFF) * (max - min)) >> 15) + min;
}
@@ -1372,3 +1373,38 @@
vect[1] /= 8191.0;
vect[2] /= 8191.0;
}
+
+// Rounds the argument to the next integer. Used by SnapVector.
+void init_tonextint(qboolean verbose)
+{
+ float decimal = 0.9;
+
+ nonansicast = (int) decimal;
+
+ if(verbose)
+ {
+ if(nonansicast)
+ Com_Printf("Float to int casting behaviour: round to next int\n");
+ else
+ Com_Printf("Float to int casting behaviour: ISO compliant\n");
+ }
+}
+
+float tonextint(float x)
+{
+ int casted;
+ float rest;
+
+ if(nonansicast)
+ return (int) x;
+
+ casted = (int) x;
+ rest = x - (float) casted;
+
+ if(rest >= 0.5f)
+ return casted+1;
+ else if(rest <= -0.5f)
+ return casted - 1;
+ else
+ return casted;
+}
Index: game/g_active.c
===================================================================
--- game/g_active.c (revision 1)
+++ game/g_active.c (revision 10)
@@ -1159,7 +1159,7 @@
if (xaxis)
{
VectorSet(ent->r.mins, -halfWidth, -SHIELD_HALFTHICKNESS, -(height>>1));
- VectorSet(ent->r.maxs, halfWidth, SHIELD_HALFTHICKNESS, height>>1);
+ VectorSet(ent->r.maxs, halfWidth, SHIELD_HALFTHICKNESS, height);
}
else
{
Index: game/g_main.c
===================================================================
--- game/g_main.c (revision 1)
+++ game/g_main.c (revision 10)
@@ -192,7 +192,7 @@
This MUST be the very first function compiled into the .q3vm file
================
*/
-int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
+intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
switch ( command ) {
case GAME_INIT:
G_InitGame( arg0, arg1, arg2 );
@@ -201,7 +201,7 @@
G_ShutdownGame( arg0 );
return 0;
case GAME_CLIENT_CONNECT:
- return (int)ClientConnect( arg0, arg1, arg2 );
+ return (intptr_t)ClientConnect( arg0, arg1, arg2 );
case GAME_CLIENT_THINK:
ClientThink( arg0 );
return 0;
@@ -493,6 +493,7 @@
G_Printf ("gamename: %s\n", GAMEVERSION);
G_Printf ("gamedate: %s\n", __DATE__);
+ init_tonextint(qtrue);
srand( randomSeed );
noJoinLimit = 0;//allow players to join the game still
Index: game/Makefile
===================================================================
--- game/Makefile (revision 0)
+++ game/Makefile (revision 10)
@@ -0,0 +1,119 @@
+default: qvm
+qvm: build_qvm
+so: build_so
+
+# bins for building VMs (you need all q3lcc, q3rcc, q3cpp and q3asm in the same dir.)
+Q3LCC = ../../bin/q3lcc
+Q3ASM = ../../bin/q3asm
+
+# compiler to use for building shared objects
+CC = gcc
+
+# cflags for the VM compiler
+VMCFLAGS = $(CFLAGS) -DQ3_VM
+# cflags for the compiler
+SOCFLAGS = $(CFLAGS) -g3 -ggdb3 -fPIC
+
+ARCH=$(shell uname -m | sed -e s/i.86/i386/)
+
+OBJ = \
+ g_main.o \
+ ai_chat.o \
+ ai_cmd.o \
+ ai_dmnet.o \
+ ai_dmq3.o \
+ ai_main.o \
+ ai_team.o \
+ bg_misc.o \
+ bg_pmove.o \
+ bg_slidemove.o \
+ g_active.o \
+ g_arenas.o \
+ g_bot.o \
+ g_breakable.o \
+ g_client.o \
+ g_cmds.o \
+ g_combat.o \
+ g_fx.o \
+ g_items.o \
+ g_log.o \
+ g_mem.o \
+ g_misc.o \
+ g_missile.o \
+ g_mover.o \
+ g_session.o \
+ g_spawn.o \
+ g_svcmds.o \
+ g_target.o \
+ g_team.o \
+ g_trigger.o \
+ g_turrets.o \
+ g_usable.o \
+ g_utils.o \
+ g_weapon.o \
+ q_math.o \
+ q_shared.o \
+
+SOOBJ = \
+ g_syscalls.o \
+
+QVMOBJ = \
+ bg_lib.o \
+
+DO_VMCC = $(Q3LCC) $(VMCFLAGS) -o $@ -c $<
+DO_SOCC = $(CC) $(SOCFLAGS) -o $@ -c $<
+
+build_qvm: DO_CC=$(DO_VMCC)
+build_so: DO_CC=$(DO_SOCC)
+
+ai_chat.o : ai_chat.c; $(DO_CC)
+ai_cmd.o : ai_cmd.c; $(DO_CC)
+ai_dmnet.o : ai_dmnet.c; $(DO_CC)
+ai_dmq3.o : ai_dmq3.c; $(DO_CC)
+ai_main.o : ai_main.c; $(DO_CC)
+ai_team.o : ai_team.c; $(DO_CC)
+bg_misc.o : bg_misc.c; $(DO_CC)
+bg_pmove.o : bg_pmove.c; $(DO_CC)
+bg_slidemove.o : bg_slidemove.c; $(DO_CC)
+g_active.o : g_active.c; $(DO_CC)
+g_arenas.o : g_arenas.c; $(DO_CC)
+g_bot.o : g_bot.c; $(DO_CC)
+g_breakable.o : g_breakable.c; $(DO_CC)
+g_client.o : g_client.c; $(DO_CC)
+g_cmds.o : g_cmds.c; $(DO_CC)
+g_combat.o : g_combat.c; $(DO_CC)
+g_fx.o : g_fx.c; $(DO_CC)
+g_items.o : g_items.c; $(DO_CC)
+g_log.o : g_log.c; $(DO_CC)
+g_main.o : g_main.c; $(DO_CC)
+g_mem.o : g_mem.c; $(DO_CC)
+g_misc.o : g_misc.c; $(DO_CC)
+g_missile.o : g_missile.c; $(DO_CC)
+g_mover.o : g_mover.c; $(DO_CC)
+g_session.o : g_session.c; $(DO_CC)
+g_spawn.o : g_spawn.c; $(DO_CC)
+g_svcmds.o : g_svcmds.c; $(DO_CC)
+g_target.o : g_target.c; $(DO_CC)
+g_team.o : g_team.c; $(DO_CC)
+g_trigger.o : g_trigger.c; $(DO_CC)
+g_turrets.o : g_turrets.c; $(DO_CC)
+g_usable.o : g_usable.c; $(DO_CC)
+g_utils.o : g_utils.c; $(DO_CC)
+g_weapon.o : g_weapon.c; $(DO_CC)
+q_math.o : q_math.c; $(DO_CC)
+q_shared.o : q_shared.c; $(DO_CC)
+
+g_syscalls.o : g_syscalls.c; $(DO_CC)
+
+bg_lib.o : bg_lib.c; $(DO_CC)
+
+build_qvm: $(OBJ) $(QVMOBJ)
+ $(Q3ASM) -vq3 -o qagame.qvm $(OBJ) $(QVMOBJ) g_syscalls.asm
+ cp *.qvm ../../baseef/vm/
+
+build_so: $(OBJ) $(SOOBJ)
+ $(CC) -shared -Wl,--export-dynamic,-soname,qagame$(ARCH).so -o qagame$(ARCH).so $(OBJ) $(SOOBJ)
+ cp *.so ../../baseef/
+
+clean:
+ rm -f *.o *.qvm *.so
Index: game/ai_dmq3.c
===================================================================
--- game/ai_dmq3.c (revision 1)
+++ game/ai_dmq3.c (revision 10)
@@ -2285,7 +2285,7 @@
#ifdef OBSTACLEDEBUG
ClientName(bs->client, netname, sizeof(netname));
BotAI_Print(PRT_MESSAGE, "%s: I'm blocked by model %d\n", netname, entinfo.modelindex);
-#endif OBSTACLEDEBUG
+#endif
//if blocked by a bsp model and the bot wants to activate it if possible
if (entinfo.modelindex > 0 && entinfo.modelindex <= max_bspmodelindex && activate) {
//find the bsp entity which should be activated in order to remove
@@ -2295,14 +2295,14 @@
strcpy(classname, "");
#ifdef OBSTACLEDEBUG
BotAI_Print(PRT_MESSAGE, "%s: can't find activator for blocking entity\n", ClientName(bs->client, netname, sizeof(netname)));
-#endif //OBSTACLEDEBUG
+#endif
}
else {
trap_AAS_ValueForBSPEpairKey(ent, "classname", classname, sizeof(classname));
#ifdef OBSTACLEDEBUG
ClientName(bs->client, netname, sizeof(netname));
BotAI_Print(PRT_MESSAGE, "%s: I should activate %s\n", netname, classname);
-#endif OBSTACLEDEBUG
+#endif
}
if (!strcmp(classname, "func_button")) {
//create a bot goal towards the button
Index: game/q_shared.h
===================================================================
--- game/q_shared.h (revision 1)
+++ game/q_shared.h (revision 10)
@@ -74,6 +74,16 @@
#endif
+// Needed for mods compiled in 64 bit shared objects.
+#ifdef Q3_VM
+ typedef int intptr_t;
+#else
+ #ifdef _MSC_VER
+ #include <stddef.h>
+ #else
+ #include <stdint.h>
+ #endif
+#endif
// this is the define for determining if we have an asm version of a C function
#if (defined _M_IX86 || defined __i386__) && !defined __sun__ && !defined __LCC__
@@ -526,8 +536,11 @@
#define VectorSet(v, x, y, z) ((v)[0]=(x), (v)[1]=(y), (v)[2]=(z))
#define Vector4Copy(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2],(b)[3]=(a)[3])
-#define SnapVector(v) {v[0]=(int)v[0];v[1]=(int)v[1];v[2]=(int)v[2];}
+extern void init_tonextint(qboolean verbose);
+extern float tonextint(float x);
+#define SnapVector(v) {v[0] = tonextint(v[0]); v[1] = tonextint(v[1]); v[2]= tonextint(v[2]);}
+
// just in case you do't want to use the macros
vec_t _DotProduct( const vec3_t v1, const vec3_t v2 );
void _VectorSubtract( const vec3_t veca, const vec3_t vecb, vec3_t out );
Index: game/bg_lib.h
===================================================================
--- game/bg_lib.h (revision 1)
+++ game/bg_lib.h (revision 10)
@@ -3,6 +3,8 @@
// This file is NOT included on native builds
+#ifdef Q3_VM
+
typedef int size_t;
typedef char * va_list;
@@ -67,3 +69,4 @@
int abs( int n );
double fabs( double x );
+#endif // Q3_VM
Index: cgame/Makefile
===================================================================
--- cgame/Makefile (revision 0)
+++ cgame/Makefile (revision 10)
@@ -0,0 +1,122 @@
+default: qvm
+qvm: build_qvm
+so: build_so
+
+# bins for building VMs (you need all q3lcc, q3rcc, q3cpp and q3asm in the same dir.)
+Q3LCC = ../../bin/q3lcc
+Q3ASM = ../../bin/q3asm
+
+# compiler to use for building shared objects
+CC = gcc
+
+# cflags for the VM compiler
+VMCFLAGS = $(CFLAGS) -DQ3_VM
+# cflags for the compiler
+SOCFLAGS = $(CFLAGS) -g3 -ggdb3 -fPIC
+
+ARCH=$(shell uname -m | sed -e s/i.86/i386/)
+
+OBJ = \
+ cg_main.o \
+ cg_consolecmds.o \
+ cg_draw.o \
+ cg_drawtools.o \
+ cg_effects.o \
+ cg_ents.o \
+ cg_env.o \
+ cg_event.o \
+ cg_info.o \
+ cg_localents.o \
+ cg_marks.o \
+ cg_players.o \
+ cg_playerstate.o \
+ cg_predict.o \
+ cg_scoreboard.o \
+ cg_screenfx.o \
+ cg_servercmds.o \
+ cg_snapshot.o \
+ cg_view.o \
+ cg_weapons.o \
+ fx_borg.o \
+ fx_compression.o \
+ fx_dreadnought.o \
+ fx_grenade.o \
+ fx_imod.o \
+ fx_item.o \
+ fx_lib.o \
+ fx_misc.o \
+ fx_phaser.o \
+ fx_quantum.o \
+ fx_scavenger.o \
+ fx_stasis.o \
+ fx_tetrion.o \
+ fx_transporter.o \
+
+
+OBJDEP = \
+ ../game/q_shared.o \
+ ../game/q_math.o \
+ ../game/bg_misc.o \
+ ../game/bg_pmove.o \
+ ../game/bg_slidemove.o \
+
+SOOBJ = \
+ cg_syscalls.o \
+
+QVMOBJ = \
+ ../game/bg_lib.o \
+
+DO_VMCC = $(Q3LCC) $(VMCFLAGS) -o $@ -c $<
+DO_SOCC = $(CC) $(SOCFLAGS) -o $@ -c $<
+
+build_qvm: DO_CC=$(DO_VMCC)
+build_so: DO_CC=$(DO_SOCC)
+
+cg_consolecmds.o : cg_consolecmds.c; $(DO_CC)
+cg_draw.o : cg_draw.c; $(DO_CC)
+cg_drawtools.o : cg_drawtools.c; $(DO_CC)
+cg_effects.o : cg_effects.c; $(DO_CC)
+cg_ents.o : cg_ents.c; $(DO_CC)
+cg_env.o : cg_env.c; $(DO_CC)
+cg_event.o : cg_event.c; $(DO_CC)
+cg_info.o : cg_info.c; $(DO_CC)
+cg_localents.o : cg_localents.c; $(DO_CC)
+cg_main.o : cg_main.c; $(DO_CC)
+cg_marks.o : cg_marks.c; $(DO_CC)
+cg_players.o : cg_players.c; $(DO_CC)
+cg_playerstate.o : cg_playerstate.c; $(DO_CC)
+cg_predict.o : cg_predict.c; $(DO_CC)
+cg_scoreboard.o : cg_scoreboard.c; $(DO_CC)
+cg_screenfx.o : cg_screenfx.c; $(DO_CC)
+cg_servercmds.o : cg_servercmds.c; $(DO_CC)
+cg_snapshot.o : cg_snapshot.c; $(DO_CC)
+cg_view.o : cg_view.c; $(DO_CC)
+cg_weapons.o : cg_weapons.c; $(DO_CC)
+fx_borg.o : fx_borg.c; $(DO_CC)
+fx_compression.o : fx_compression.c; $(DO_CC)
+fx_dreadnought.o : fx_dreadnought.c; $(DO_CC)
+fx_grenade.o : fx_grenade.c; $(DO_CC)
+fx_imod.o : fx_imod.c; $(DO_CC)
+fx_item.o : fx_item.c; $(DO_CC)
+fx_lib.o : fx_lib.c; $(DO_CC)
+fx_misc.o : fx_misc.c; $(DO_CC)
+fx_phaser.o : fx_phaser.c; $(DO_CC)
+fx_quantum.o : fx_quantum.c; $(DO_CC)
+fx_scavenger.o : fx_scavenger.c; $(DO_CC)
+fx_stasis.o : fx_stasis.c; $(DO_CC)
+fx_tetrion.o : fx_tetrion.c; $(DO_CC)
+fx_transporter.o : fx_transporter.c; $(DO_CC)
+
+cg_syscalls.o : cg_syscalls.c; $(DO_CC)
+
+
+build_qvm: $(OBJ) $(QVMOBJ)
+ $(Q3ASM) -vq3 -o cgame.qvm $(OBJ) $(OBJDEP) $(QVMOBJ) cg_syscalls.asm
+ cp *.qvm ../../baseef/vm/
+
+build_so: $(OBJ) $(SOOBJ)
+ $(CC) -shared -Wl,--export-dynamic,-soname,cgame$(ARCH).so -o cgame$(ARCH).so $(OBJ) $(OBJDEP) $(SOOBJ)
+ cp *.so ../../baseef/
+
+clean:
+ rm -f *.o *.qvm *.so
Index: cgame/cg_syscalls.c
===================================================================
--- cgame/cg_syscalls.c (revision 1)
+++ cgame/cg_syscalls.c (revision 10)
@@ -4,10 +4,10 @@
// cg_syscalls.asm is included instead when building a qvm
#include "cg_local.h"
-static int (QDECL *syscall)( int arg, ... ) = (int (QDECL *)( int, ...))-1;
+static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
-void dllEntry( int (QDECL *syscallptr)( int arg,... ) ) {
+void dllEntry( intptr_t (QDECL *syscallptr)( intptr_t arg,... ) ) {
syscall = syscallptr;
}
Index: cgame/cg_main.c
===================================================================
--- cgame/cg_main.c (revision 1)
+++ cgame/cg_main.c (revision 10)
@@ -20,7 +20,7 @@
This must be the very first function compiled into the .q3vm file
================
*/
-int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
+intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
switch ( command ) {
case CG_INIT:
CG_Init( arg0, arg1 );
@@ -1088,6 +1088,8 @@
memset( cg_weapons, 0, sizeof(cg_weapons) );
memset( cg_items, 0, sizeof(cg_items) );
+ init_tonextint(qfalse);
+
cgs.processedSnapshotNum = serverMessageNum;
cgs.serverCommandSequence = serverCommandSequence;
Index: Makefile
===================================================================
--- Makefile (revision 0)
+++ Makefile (revision 10)
@@ -0,0 +1,16 @@
+default: build
+
+build_qvm:
+ $(MAKE) -C game build_qvm
+ $(MAKE) -C cgame build_qvm
+ $(MAKE) -C ui build_qvm
+
+build_so:
+ $(MAKE) -C game build_so
+ $(MAKE) -C cgame build_so
+ $(MAKE) -C ui build_so
+
+clean:
+ $(MAKE) -C game clean
+ $(MAKE) -C cgame clean
+ $(MAKE) -C ui clean
Index: ui/ui_atoms.c
===================================================================
--- ui/ui_atoms.c (revision 1)
+++ ui/ui_atoms.c (revision 10)
@@ -1276,6 +1276,8 @@
*/
void UI_Init( void ) {
+ init_tonextint(qfalse);
+
UI_RegisterCvars();
UI_LoadMenuText();
Index: ui/ui_main.c
===================================================================
--- ui/ui_main.c (revision 1)
+++ ui/ui_main.c (revision 10)
@@ -20,7 +20,7 @@
This must be the very first function compiled into the .qvm file
================
*/
-int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
+intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6 ) {
switch ( command ) {
case UI_GETAPIVERSION:
return UI_API_VERSION;
Index: ui/ui_spreset.c
===================================================================
--- ui/ui_spreset.c (revision 1)
+++ ui/ui_spreset.c (revision 10)
@@ -121,9 +121,9 @@
Reset_Cache();
- n1 = UI_ProportionalStringWidth( "YES/NO" );
- n2 = UI_ProportionalStringWidth( "YES" ) + PROP_GAP_WIDTH;
- n3 = UI_ProportionalStringWidth( "/" ) + PROP_GAP_WIDTH;
+ n1 = UI_ProportionalStringWidth( "YES/NO", UI_BIGFONT);
+ n2 = UI_ProportionalStringWidth( "YES", UI_BIGFONT) + PROP_GAP_WIDTH;
+ n3 = UI_ProportionalStringWidth( "/", UI_BIGFONT) + PROP_GAP_WIDTH;
l1 = 320 - ( n1 / 2 );
l2 = l1 + n2;
l3 = l2 + n3;
Index: ui/Makefile
===================================================================
--- ui/Makefile (revision 0)
+++ ui/Makefile (revision 10)
@@ -0,0 +1,124 @@
+default: qvm
+qvm: build_qvm
+so: build_so
+
+# bins for building VMs (you need all q3lcc, q3rcc, q3cpp and q3asm in the same dir.)
+Q3LCC = ../../bin/q3lcc
+Q3ASM = ../../bin/q3asm
+
+# compiler to use for building shared objects
+CC = gcc
+
+# cflags for the VM compiler
+VMCFLAGS = $(CFLAGS) -DQ3_VM
+# cflags for the compiler
+SOCFLAGS = $(CFLAGS) -g3 -ggdb3 -fPIC
+
+ARCH=$(shell uname -m | sed -e s/i.86/i386/)
+
+OBJ = \
+ ui_main.o \
+ ui_addbots.o \
+ ui_atoms.o \
+ ui_cdkey.o \
+ ui_confirm.o \
+ ui_connect.o \
+ ui_controls2.o \
+ ui_cvars.o \
+ ui_demo2.o \
+ ui_fonts.o \
+ ui_gameinfo.o \
+ ui_ingame.o \
+ ui_menu.o \
+ ui_mfield.o \
+ ui_mods.o \
+ ui_network.o \
+ ui_playermodel.o \
+ ui_players.o \
+ ui_playersettings.o \
+ ui_preferences.o \
+ ui_qmenu.o \
+ ui_removebots.o \
+ ui_serverinfo.o \
+ ui_servers2.o \
+ ui_sound.o \
+ ui_sparena.o \
+ ui_specifyserver.o \
+ ui_splevel.o \
+ ui_sppostgame.o \
+ ui_spreset.o \
+ ui_spskill.o \
+ ui_startserver.o \
+ ui_team.o \
+ ui_teamorders.o \
+ ui_video.o \
+
+
+OBJDEP = \
+ ../game/q_shared.o \
+ ../game/q_math.o \
+ ../game/bg_misc.o \
+
+SOOBJ = \
+ ui_syscalls.o \
+
+QVMOBJ = \
+ ../game/bg_lib.o \
+
+DO_VMCC = $(Q3LCC) $(VMCFLAGS) -o $@ -c $<
+DO_SOCC = $(CC) $(SOCFLAGS) -o $@ -c $<
+
+build_qvm: DO_CC=$(DO_VMCC)
+build_so: DO_CC=$(DO_SOCC)
+
+cg_consolecmds.o : cg_consolecmds.c; $(DO_CC)
+
+ui_addbots.o : ui_addbots.c; $(DO_CC)
+ui_atoms.o : ui_atoms.c; $(DO_CC)
+ui_cdkey.o : ui_cdkey.c; $(DO_CC)
+ui_confirm.o : ui_confirm.c; $(DO_CC)
+ui_connect.o : ui_connect.c; $(DO_CC)
+ui_controls2.o : ui_controls2.c; $(DO_CC)
+ui_cvars.o : ui_cvars.c; $(DO_CC)
+ui_demo2.o : ui_demo2.c; $(DO_CC)
+ui_fonts.o : ui_fonts.c; $(DO_CC)
+ui_gameinfo.o : ui_gameinfo.c; $(DO_CC)
+ui_ingame.o : ui_ingame.c; $(DO_CC)
+ui_main.o : ui_main.c; $(DO_CC)
+ui_menu.o : ui_menu.c; $(DO_CC)
+ui_mfield.o : ui_mfield.c; $(DO_CC)
+ui_mods.o : ui_mods.c; $(DO_CC)
+ui_network.o : ui_network.c; $(DO_CC)
+ui_playermodel.o : ui_playermodel.c; $(DO_CC)
+ui_players.o : ui_players.c; $(DO_CC)
+ui_playersettings.o : ui_playersettings.c; $(DO_CC)
+ui_preferences.o : ui_preferences.c; $(DO_CC)
+ui_qmenu.o : ui_qmenu.c; $(DO_CC)
+ui_removebots.o : ui_removebots.c; $(DO_CC)
+ui_serverinfo.o : ui_serverinfo.c; $(DO_CC)
+ui_servers2.o : ui_servers2.c; $(DO_CC)
+ui_sound.o : ui_sound.c; $(DO_CC)
+ui_sparena.o : ui_sparena.c; $(DO_CC)
+ui_specifyserver.o : ui_specifyserver.c; $(DO_CC)
+ui_splevel.o : ui_splevel.c; $(DO_CC)
+ui_sppostgame.o : ui_sppostgame.c; $(DO_CC)
+ui_spreset.o : ui_spreset.c; $(DO_CC)
+ui_spskill.o : ui_spskill.c; $(DO_CC)
+ui_startserver.o : ui_startserver.c; $(DO_CC)
+ui_team.o : ui_team.c; $(DO_CC)
+ui_teamorders.o : ui_teamorders.c; $(DO_CC)
+ui_video.o : ui_video.c; $(DO_CC)
+
+ui_syscalls.o : ui_syscalls.c; $(DO_CC)
+
+
+build_qvm: $(OBJ) $(QVMOBJ)
+ $(Q3ASM) -vq3 -o ui.qvm $(OBJ) $(OBJDEP) $(QVMOBJ) ui_syscalls.asm
+ cp *.qvm ../../baseef/vm/
+
+build_so: $(OBJ) $(SOOBJ)
+ $(CC) -shared -Wl,--export-dynamic,-soname,ui$(ARCH).so -o ui$(ARCH).so $(OBJ) $(OBJDEP) $(SOOBJ)
+ cp *.so ../../baseef/
+
+clean:
+ rm -f *.o *.qvm *.so
Index: ui/ui_syscalls.c
===================================================================
--- ui/ui_syscalls.c (revision 1)
+++ ui/ui_syscalls.c (revision 10)
@@ -5,9 +5,9 @@
// this file is only included when building a dll
// syscalls.asm is included instead when building a qvm
-static int (QDECL *syscall)( int arg, ... ) = (int (QDECL *)( int, ...))-1;
+static intptr_t (QDECL *syscall)( intptr_t arg, ... ) = (intptr_t (QDECL *)( intptr_t, ...))-1;
-void dllEntry( int (QDECL *syscallptr)( int arg,... ) ) {
+void dllEntry( intptr_t (QDECL *syscallptr)( intptr_t arg,... ) ) {
syscall = syscallptr;
}
Index: README.txt
===================================================================
--- README.txt (revision 0)
+++ README.txt (revision 10)
@@ -0,0 +1,71 @@
+The Star Trek Voyager: Elite Force codebase project
+
+This project is meant to be a stable codebase with obvious bugs that
+Ravensoft left in there removed and a few new features added.
+
+This project was originally started because my modification of the Quake3
+engine to run EF turned out to be a bit problematic. The SnapVector macro
+yields slightly different results in the virtual machine interpreter of the
+newer quake3 compared to the older quake3 eliteforce is based off.
+As a result, you cannot jump as high as you could if you set com_maxfps to
+some magic values like 74, 85, 125 etc..
+To get the same movement as with the original EliteForce in these new engine
+releases the multiplayer VM code must be modified to emulate the old
+behaviour.
+So my goal is that every active player and every server will install these
+modifications to allow for smooth movement on both, servers using the new
+engine release and for good motion prediction on the client side. I realize
+it may well be that this never happens as getting people to install new pak
+files would be a major undertaking. I thought, if I attempt to do so in the
+first place, I can as well try to get in a few improvements as long as they
+don't change gameplay. I am not trying to insert new weapons, models,
+gametypes etc...
+
+A few todos:
+ - Ignoring text messages from players that are a nuisance
+ - Unlagged code (can be switched on/off with a cvar)
+
+If you have made changes that do *not* change gameplay as mentioned above
+and you think it really improves EliteForce, feel free to send the patches
+to: arny@ats.s.bawue.de
+If your code is reasonably clean, I will definitely add it to the
+repository!
+
+Now for the using of this code:
+I have left all non-C files from Ravensoft intact. This means, you should
+probably be able to build this release under windows like you build the
+original EF source released by raven.
+For users on unixoid environments, I have included a few Makefiles that make
+the job of building easier. The Makefiles are designed to work under Linux
+so if you use another OS you may need to edit the three Makefiles included
+in the game, cgame and ui directories to make this build properly.
+
+There are two different types of builds, namely the shared library and the
+building of QVMs.
+Building the shared objects only requires typing in "make so"
+in the main directory where this README resides. If you have a working gcc
+installation, this is all you need to do. The rest is being handled by the
+Makefiles and in the end you should have three resulting files in the baseef
+directory.
+Building QVMs is easy, too. You need a few special bins, though, namely
+q3lcc, q3rcc, q3cpp and q3asm. They can be found when building Quake3 from
+icculus.org: http://icculus.org/quake3/
+Get the source code, compile it (you may want to only build the dedicated
+server if you have no OpenGL support... consult the README in their project
+on how this works). When compilation is done, the four required binaries can
+be found in code/tools/. Copy the files to the bin/ directory that is in the
+same dir with this README.
+Now just do: "make qvm" in this dir and all QVMs should be in baseef/vm/.
+
+Careful when compiling both, QVMs and shared objects. gcc and the q3lcc
+compiler produce incompatible output.
+Make sure to run "make clean" before you change from QVM to shared objects
+and vice versa.
+
+And last but not least: I already installed a mechanism to produce a pak
+file that only works if you have zip installed.
+make pak
+will result in all three QVMs being packed into pak4.pk3 in baseef :)
+Rename it as you see fit.
+
+ - Thilo Schulz, 16.03.2006
Index: Makefile
===================================================================
--- Makefile (revision 0)
+++ Makefile (revision 10)
@@ -0,0 +1,17 @@
+default: qvm
+qvm: build_qvm
+so: build_so
+
+ZIP = zip
+
+build_qvm:
+ $(MAKE) -C Code-DM build_qvm
+build_so:
+ $(MAKE) -C Code-DM build_so
+
+clean:
+ $(MAKE) -C Code-DM clean
+ rm -f baseef/*.so baseef/*.pk3 baseef/vm/*.qvm
+
+pak: qvm
+ cd baseef && rm -f pak4.pk3 && $(ZIP) -r pak4.pk3 vm/*