diff options
author | /dev/humancontroller <devhc@example.com> | 2015-06-18 14:21:05 +0200 |
---|---|---|
committer | /dev/humancontroller <devhc@example.com> | 2017-03-09 13:51:17 +0100 |
commit | 65bcf419d4b612b7d626447924fa0fe2079c18c2 (patch) | |
tree | 087353aa52c9816209ca983de5ae5cd87d21e82b | |
parent | b6e36560b0c06db62fbe6040a657d3f8dcab3dcd (diff) |
implement support for creating cgame&ui modules using the 1.1 interfaces
-rw-r--r-- | GNUmakefile | 91 | ||||
-rw-r--r-- | src/cgame/cg_local.h | 135 | ||||
-rw-r--r-- | src/cgame/cg_main.c | 24 | ||||
-rw-r--r-- | src/cgame/cg_public.h | 11 | ||||
-rw-r--r-- | src/cgame/cg_servercmds.c | 28 | ||||
-rw-r--r-- | src/cgame/cg_snapshot.c | 53 | ||||
-rw-r--r-- | src/cgame/cg_syscalls.c | 10 | ||||
-rw-r--r-- | src/cgame/cg_syscalls_11.asm | 114 | ||||
-rw-r--r-- | src/ui/ui_main.c | 29 | ||||
-rw-r--r-- | src/ui/ui_public.h | 13 | ||||
-rw-r--r-- | src/ui/ui_syscalls.c | 4 | ||||
-rw-r--r-- | src/ui/ui_syscalls_11.asm | 97 |
12 files changed, 607 insertions, 2 deletions
diff --git a/GNUmakefile b/GNUmakefile index 0b3b5886..62f421d3 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -29,6 +29,9 @@ endif ifndef BUILD_GAME_QVM BUILD_GAME_QVM = endif +ifndef BUILD_GAME_QVM_11 + BUILD_GAME_QVM_11= +endif ifndef BUILD_ONLY_GAME BUILD_ONLY_GAME = endif @@ -951,6 +954,14 @@ ifneq ($(BUILD_GAME_QVM),0) endif endif +ifneq ($(BUILD_GAME_QVM_11),0) + ifneq ($(BUILD_ONLY_GAME),1) + TARGETS += \ + $(B)/$(OUT)/$(BASEGAME)_11/vm/cgame.qvm \ + $(B)/$(OUT)/$(BASEGAME)_11/vm/ui.qvm + endif +endif + ifeq ($(USE_OPENAL),1) CLIENT_CFLAGS += -DUSE_OPENAL ifeq ($(USE_OPENAL_DLOPEN),1) @@ -1279,9 +1290,14 @@ makedirs: @if [ ! -d $(B)/game ];then $(MKDIR) $(B)/game;fi @if [ ! -d $(B)/ui ];then $(MKDIR) $(B)/ui;fi @if [ ! -d $(B)/qcommon ];then $(MKDIR) $(B)/qcommon;fi + @if [ ! -d $(B)/11 ];then $(MKDIR) $(B)/11;fi + @if [ ! -d $(B)/11/cgame ];then $(MKDIR) $(B)/11/cgame;fi + @if [ ! -d $(B)/11/ui ];then $(MKDIR) $(B)/11/ui;fi @if [ ! -d $(B)/$(OUT) ];then $(MKDIR) $(B)/$(OUT);fi @if [ ! -d $(B)/$(OUT)/$(BASEGAME) ];then $(MKDIR) $(B)/$(OUT)/$(BASEGAME);fi @if [ ! -d $(B)/$(OUT)/$(BASEGAME)/vm ];then $(MKDIR) $(B)/$(OUT)/$(BASEGAME)/vm;fi + @if [ ! -d $(B)/$(OUT)/$(BASEGAME)_11 ];then $(MKDIR) $(B)/$(OUT)/$(BASEGAME)_11;fi + @if [ ! -d $(B)/$(OUT)/$(BASEGAME)_11/vm ];then $(MKDIR) $(B)/$(OUT)/$(BASEGAME)_11/vm;fi @if [ ! -d $(B)/tools ];then $(MKDIR) $(B)/tools;fi @if [ ! -d $(B)/tools/asm ];then $(MKDIR) $(B)/tools/asm;fi @if [ ! -d $(B)/tools/etc ];then $(MKDIR) $(B)/tools/etc;fi @@ -1423,6 +1439,11 @@ $(echo_cmd) "CGAME_Q3LCC $<" $(Q)$(Q3LCC) $(BASEGAME_CFLAGS) -DCGAME -o $@ $< endef +define DO_CGAME_Q3LCC_11 +$(echo_cmd) "CGAME_Q3LCC_11 $<" +$(Q)$(Q3LCC) $(BASEGAME_CFLAGS) -DCGAME -DMODULE_INTERFACE_11 -o $@ $< +endef + define DO_GAME_Q3LCC $(echo_cmd) "GAME_Q3LCC $<" $(Q)$(Q3LCC) $(BASEGAME_CFLAGS) -DGAME -o $@ $< @@ -1433,6 +1454,11 @@ $(echo_cmd) "UI_Q3LCC $<" $(Q)$(Q3LCC) $(BASEGAME_CFLAGS) -DUI -o $@ $< endef +define DO_UI_Q3LCC_11 +$(echo_cmd) "UI_Q3LCC_11 $<" +$(Q)$(Q3LCC) $(BASEGAME_CFLAGS) -DUI -DMODULE_INTERFACE_11 -o $@ $< +endef + Q3ASMOBJ = \ $(B)/tools/asm/q3asm.o \ @@ -2130,8 +2156,43 @@ CGOBJ_ = \ $(B)/qcommon/q_math.o \ $(B)/qcommon/q_shared.o +CGOBJ11_ = \ + $(B)/11/cgame/cg_main.o \ + $(B)/cgame/bg_misc.o \ + $(B)/cgame/bg_pmove.o \ + $(B)/cgame/bg_slidemove.o \ + $(B)/cgame/bg_lib.o \ + $(B)/cgame/bg_alloc.o \ + $(B)/cgame/bg_voice.o \ + $(B)/cgame/cg_consolecmds.o \ + $(B)/cgame/cg_buildable.o \ + $(B)/cgame/cg_animation.o \ + $(B)/cgame/cg_animmapobj.o \ + $(B)/cgame/cg_draw.o \ + $(B)/cgame/cg_drawtools.o \ + $(B)/cgame/cg_ents.o \ + $(B)/cgame/cg_event.o \ + $(B)/cgame/cg_marks.o \ + $(B)/cgame/cg_players.o \ + $(B)/cgame/cg_playerstate.o \ + $(B)/cgame/cg_predict.o \ + $(B)/11/cgame/cg_servercmds.o \ + $(B)/11/cgame/cg_snapshot.o \ + $(B)/cgame/cg_view.o \ + $(B)/cgame/cg_weapons.o \ + $(B)/cgame/cg_scanner.o \ + $(B)/cgame/cg_attachment.o \ + $(B)/cgame/cg_trails.o \ + $(B)/cgame/cg_particles.o \ + $(B)/cgame/cg_tutorial.o \ + $(B)/cgame/ui_shared.o \ + \ + $(B)/qcommon/q_math.o \ + $(B)/qcommon/q_shared.o + CGOBJ = $(CGOBJ_) $(B)/cgame/cg_syscalls.o CGVMOBJ = $(CGOBJ_:%.o=%.asm) +CGVMOBJ11 = $(CGOBJ11_:%.o=%.asm) $(B)/$(OUT)/$(BASEGAME)/cgame$(SHLIBNAME): $(CGOBJ) $(echo_cmd) "LD $@" @@ -2141,6 +2202,10 @@ $(B)/$(OUT)/$(BASEGAME)/vm/cgame.qvm: $(CGVMOBJ) $(CGDIR)/cg_syscalls.asm $(Q3AS $(echo_cmd) "Q3ASM $@" $(Q)$(Q3ASM) -o $@ $(CGVMOBJ) $(CGDIR)/cg_syscalls.asm +$(B)/$(OUT)/$(BASEGAME)_11/vm/cgame.qvm: $(CGVMOBJ11) $(CGDIR)/cg_syscalls_11.asm $(Q3ASM) + $(echo_cmd) "Q3ASM $@" + $(Q)$(Q3ASM) -o $@ $(CGVMOBJ11) $(CGDIR)/cg_syscalls_11.asm + ############################################################################# @@ -2207,8 +2272,20 @@ UIOBJ_ = \ $(B)/qcommon/q_math.o \ $(B)/qcommon/q_shared.o +UIOBJ11_ = \ + $(B)/11/ui/ui_main.o \ + $(B)/ui/ui_atoms.o \ + $(B)/ui/ui_shared.o \ + $(B)/ui/ui_gameinfo.o \ + \ + $(B)/ui/bg_misc.o \ + $(B)/ui/bg_lib.o \ + $(B)/qcommon/q_math.o \ + $(B)/qcommon/q_shared.o + UIOBJ = $(UIOBJ_) $(B)/ui/ui_syscalls.o UIVMOBJ = $(UIOBJ_:%.o=%.asm) +UIVMOBJ11 = $(UIOBJ11_:%.o=%.asm) $(B)/$(OUT)/$(BASEGAME)/ui$(SHLIBNAME): $(UIOBJ) $(echo_cmd) "LD $@" @@ -2218,6 +2295,10 @@ $(B)/$(OUT)/$(BASEGAME)/vm/ui.qvm: $(UIVMOBJ) $(UIDIR)/ui_syscalls.asm $(Q3ASM) $(echo_cmd) "Q3ASM $@" $(Q)$(Q3ASM) -o $@ $(UIVMOBJ) $(UIDIR)/ui_syscalls.asm +$(B)/$(OUT)/$(BASEGAME)_11/vm/ui.qvm: $(UIVMOBJ11) $(UIDIR)/ui_syscalls_11.asm $(Q3ASM) + $(echo_cmd) "Q3ASM $@" + $(Q)$(Q3ASM) -o $@ $(UIVMOBJ11) $(UIDIR)/ui_syscalls_11.asm + ############################################################################# @@ -2372,6 +2453,9 @@ $(B)/cgame/ui_%.asm: $(UIDIR)/ui_%.c $(Q3LCC) $(B)/cgame/%.asm: $(CGDIR)/%.c $(Q3LCC) $(DO_CGAME_Q3LCC) +$(B)/11/cgame/%.asm: $(CGDIR)/%.c $(Q3LCC) + $(DO_CGAME_Q3LCC_11) + $(B)/game/%.o: $(GDIR)/%.c $(DO_GAME_CC) @@ -2392,6 +2476,9 @@ $(B)/ui/bg_%.asm: $(GDIR)/bg_%.c $(Q3LCC) $(B)/ui/%.asm: $(UIDIR)/%.c $(Q3LCC) $(DO_UI_Q3LCC) +$(B)/11/ui/%.asm: $(UIDIR)/%.c $(Q3LCC) + $(DO_UI_Q3LCC_11) + $(B)/qcommon/%.o: $(CMDIR)/%.c $(DO_SHLIB_CC) @@ -2405,8 +2492,8 @@ $(B)/qcommon/%.asm: $(CMDIR)/%.c $(Q3LCC) ############################################################################# OBJ = $(Q3OBJ) $(Q3ROBJ) $(Q3R2OBJ) $(Q3DOBJ) $(JPGOBJ) \ - $(GOBJ) $(CGOBJ) $(UIOBJ) \ - $(GVMOBJ) $(CGVMOBJ) $(UIVMOBJ) + $(GOBJ) $(CGOBJ) $(UIOBJ) $(CGOBJ11) $(UIOBJ11) \ + $(GVMOBJ) $(CGVMOBJ) $(UIVMOBJ) $(CGVMOBJ11) $(UIVMOBJ11) TOOLSOBJ = $(LBURGOBJ) $(Q3CPPOBJ) $(Q3RCCOBJ) $(Q3LCCOBJ) $(Q3ASMOBJ) STRINGOBJ = $(Q3R2STRINGOBJ) diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h index 0d73474a..f7568a3d 100644 --- a/src/cgame/cg_local.h +++ b/src/cgame/cg_local.h @@ -2089,9 +2089,144 @@ void trap_GetGameState( gameState_t *gamestate ); // snapshot latency can be calculated. void trap_GetCurrentSnapshotNumber( int *snapshotNumber, int *serverTime ); +#ifdef MODULE_INTERFACE_11 +typedef struct { + int commandTime; // cmd->serverTime of last executed command + int pm_type; + int bobCycle; // for view bobbing and footstep generation + int pm_flags; // ducked, jump_held, etc + int pm_time; + + vec3_t origin; + vec3_t velocity; + int weaponTime; + int gravity; + int speed; + int delta_angles[3]; // add to command angles to get view direction + // changed by spawns, rotating objects, and teleporters + + int groundEntityNum;// ENTITYNUM_NONE = in air + + int legsTimer; // don't change low priority animations until this runs out + int legsAnim; // mask off ANIM_TOGGLEBIT + + int torsoTimer; // don't change low priority animations until this runs out + int torsoAnim; // mask off ANIM_TOGGLEBIT + + int movementDir; // a number 0 to 7 that represents the reletive angle + // of movement to the view angle (axial and diagonals) + // when at rest, the value will remain unchanged + // used to twist the legs during strafing + + vec3_t grapplePoint; // location of grapple to pull towards if PMF_GRAPPLE_PULL + + int eFlags; // copied to entityState_t->eFlags + + int eventSequence; // pmove generated events + int events[MAX_PS_EVENTS]; + int eventParms[MAX_PS_EVENTS]; + + int externalEvent; // events set on player from another source + int externalEventParm; + int externalEventTime; + + int clientNum; // ranges from 0 to MAX_CLIENTS-1 + int weapon; // copied to entityState_t->weapon + int weaponstate; + + vec3_t viewangles; // for fixed views + int viewheight; + + // damage feedback + int damageEvent; // when it changes, latch the other parms + int damageYaw; + int damagePitch; + int damageCount; + + int stats[MAX_STATS]; + int persistant[MAX_PERSISTANT]; // stats that aren't cleared on death + int misc[MAX_MISC]; // misc data + int ammo[16]; + + int generic1; + int loopSound; + int otherEntityNum; + + // not communicated over the net at all + int ping; // server to game info for scoreboard + int pmove_framecount; // FIXME: don't transmit over the network + int jumppad_frame; + int entityEventSequence; +} moduleAlternatePlayerState_t; + +typedef struct { + int number; // entity index + int eType; // entityType_t + int eFlags; + + trajectory_t pos; // for calculating position + trajectory_t apos; // for calculating angles + + int time; + int time2; + + vec3_t origin; + vec3_t origin2; + + vec3_t angles; + vec3_t angles2; + + int otherEntityNum; // shotgun sources, etc + int otherEntityNum2; + + int groundEntityNum; // ENTITYNUM_NONE = in air + + int constantLight; // r + (g<<8) + (b<<16) + (intensity<<24) + int loopSound; // constantly loop this sound + + int modelindex; + int modelindex2; + int clientNum; // 0 to (MAX_CLIENTS - 1), for players and corpses + int frame; + + int solid; // for client side prediction, trap_linkentity sets this properly + + int event; // impulse events -- muzzle flashes, footsteps, etc + int eventParm; + + // for players + int misc; // bit flags + int weapon; // determines weapon and flash model, etc + int legsAnim; // mask off ANIM_TOGGLEBIT + int torsoAnim; // mask off ANIM_TOGGLEBIT + + int generic1; +} moduleAlternateEntityState_t; + +typedef struct +{ + int snapFlags; // SNAPFLAG_RATE_DELAYED, etc + int ping; + + int serverTime; // server time the message is valid for (in msec) + + byte areamask[ MAX_MAP_AREA_BYTES ]; // portalarea visibility bits + + moduleAlternatePlayerState_t ps; // complete information about the current player at this time + + int numEntities; // all of the entities that need to be presented + moduleAlternateEntityState_t entities[ MAX_ENTITIES_IN_SNAPSHOT ]; // at the time of this snapshot + + int numServerCommands; // text based server commands to execute when this + int serverCommandSequence; // snapshot becomes current +} moduleAlternateSnapshot_t; + +qboolean trap_GetSnapshot( int snapshotNumber, moduleAlternateSnapshot_t *snapshot ); +#else // a snapshot get can fail if the snapshot (or the entties it holds) is so // old that it has fallen out of the client system queue qboolean trap_GetSnapshot( int snapshotNumber, snapshot_t *snapshot ); +#endif // retrieve a text command from the server stream // the current snapshot will hold the number of the most recent command diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c index 0adcb549..01df3af7 100644 --- a/src/cgame/cg_main.c +++ b/src/cgame/cg_main.c @@ -85,8 +85,10 @@ Q_EXPORT intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, CG_EventHandling( arg0 ); return 0; +#ifndef MODULE_INTERFACE_11 case CG_VOIP_STRING: return (intptr_t)CG_VoIPString( ); +#endif default: CG_Error( "vmMain: unknown command %i", command ); @@ -2099,3 +2101,25 @@ qboolean CG_GetRangeMarkerPreferences( qboolean *drawSurface, qboolean *drawInte return qfalse; } +#ifdef MODULE_INTERFACE_11 +int trap_S_SoundDuration( sfxHandle_t handle ) +{ + return 1; +} + +void trap_R_SetClipRegion( const float *region ) +{ +} + +static qboolean keyOverstrikeMode = qfalse; + +void trap_Key_SetOverstrikeMode( qboolean state ) +{ + keyOverstrikeMode = state; +} + +qboolean trap_Key_GetOverstrikeMode( void ) +{ + return keyOverstrikeMode; +} +#endif diff --git a/src/cgame/cg_public.h b/src/cgame/cg_public.h index c7b1931b..1d1c34b9 100644 --- a/src/cgame/cg_public.h +++ b/src/cgame/cg_public.h @@ -120,7 +120,9 @@ typedef enum CG_R_ADDLIGHTTOSCENE, CG_R_RENDERSCENE, CG_R_SETCOLOR, +#ifndef MODULE_INTERFACE_11 CG_R_SETCLIPREGION, +#endif CG_R_DRAWSTRETCHPIC, CG_R_MODELBOUNDS, CG_R_LERPTAG, @@ -139,6 +141,13 @@ typedef enum CG_KEY_GETCATCHER, CG_KEY_SETCATCHER, CG_KEY_GETKEY, +#ifdef MODULE_INTERFACE_11 + CG_PARSE_ADD_GLOBAL_DEFINE, + CG_PARSE_LOAD_SOURCE, + CG_PARSE_FREE_SOURCE, + CG_PARSE_READ_TOKEN, + CG_PARSE_SOURCE_FILE_AND_LINE, +#endif CG_S_STOPBACKGROUNDTRACK, CG_REAL_TIME, CG_SNAPVECTOR, @@ -173,6 +182,7 @@ typedef enum CG_KEY_GETBINDINGBUF, CG_KEY_SETBINDING, +#ifndef MODULE_INTERFACE_11 CG_PARSE_ADD_GLOBAL_DEFINE, CG_PARSE_LOAD_SOURCE, CG_PARSE_FREE_SOURCE, @@ -183,6 +193,7 @@ typedef enum CG_KEY_GETOVERSTRIKEMODE, CG_S_SOUNDDURATION, +#endif CG_MEMSET = 200, CG_MEMCPY, diff --git a/src/cgame/cg_servercmds.c b/src/cgame/cg_servercmds.c index f4fb1d54..c05a9705 100644 --- a/src/cgame/cg_servercmds.c +++ b/src/cgame/cg_servercmds.c @@ -943,30 +943,58 @@ static void CG_Say( int clientNum, saymode_t mode, const char *text ) if( cg_teamChatsOnly.integer ) ignore = "[skipnotify]"; +#ifdef MODULE_INTERFACE_11 + CG_Printf( "%s%s%s" S_COLOR_WHITE "%s " S_COLOR_GREEN "%s\n", + ignore, prefix, name, maybeColon, text ); +#else CG_Printf( "%s%s%s" S_COLOR_WHITE "%s %c" S_COLOR_GREEN "%s\n", ignore, prefix, name, maybeColon, INDENT_MARKER, text ); +#endif break; case SAY_TEAM: +#ifdef MODULE_INTERFACE_11 + CG_Printf( "%s%s(%s" S_COLOR_WHITE ")%s%s " S_COLOR_CYAN "%s\n", + ignore, prefix, name, location, maybeColon, text ); +#else CG_Printf( "%s%s(%s" S_COLOR_WHITE ")%s%s %c" S_COLOR_CYAN "%s\n", ignore, prefix, name, location, maybeColon, INDENT_MARKER, text ); +#endif break; case SAY_ADMINS: case SAY_ADMINS_PUBLIC: +#ifdef MODULE_INTERFACE_11 + CG_Printf( "%s%s%s%s" S_COLOR_WHITE "%s " S_COLOR_MAGENTA "%s\n", + ignore, prefix, + ( mode == SAY_ADMINS ) ? "[ADMIN]" : "[PLAYER]", + name, maybeColon, text ); +#else CG_Printf( "%s%s%s%s" S_COLOR_WHITE "%s %c" S_COLOR_MAGENTA "%s\n", ignore, prefix, ( mode == SAY_ADMINS ) ? "[ADMIN]" : "[PLAYER]", name, maybeColon, INDENT_MARKER, text ); +#endif break; case SAY_AREA: +#ifdef MODULE_INTERFACE_11 + CG_Printf( "%s%s<%s" S_COLOR_WHITE ">%s%s " S_COLOR_BLUE "%s\n", + ignore, prefix, name, location, maybeColon, text ); +#else CG_Printf( "%s%s<%s" S_COLOR_WHITE ">%s%s %c" S_COLOR_BLUE "%s\n", ignore, prefix, name, location, maybeColon, INDENT_MARKER, text ); +#endif break; case SAY_PRIVMSG: case SAY_TPRIVMSG: color = ( mode == SAY_TPRIVMSG ) ? S_COLOR_CYAN : S_COLOR_GREEN; +#ifdef MODULE_INTERFACE_11 + CG_Printf( "%s%s[%s" S_COLOR_WHITE " -> %s" S_COLOR_WHITE "]%s %s%s\n", + ignore, prefix, name, cgs.clientinfo[ cg.clientNum ].name, + maybeColon, color, text ); +#else CG_Printf( "%s%s[%s" S_COLOR_WHITE " -> %s" S_COLOR_WHITE "]%s %c%s%s\n", ignore, prefix, name, cgs.clientinfo[ cg.clientNum ].name, maybeColon, INDENT_MARKER, color, text ); +#endif if( !ignore[0] ) { CG_CenterPrint( va( "%sPrivate message from: " S_COLOR_WHITE "%s", diff --git a/src/cgame/cg_snapshot.c b/src/cgame/cg_snapshot.c index 5567884b..1fba0003 100644 --- a/src/cgame/cg_snapshot.c +++ b/src/cgame/cg_snapshot.c @@ -242,6 +242,55 @@ static void CG_SetNextSnap( snapshot_t *snap ) } +#ifdef MODULE_INTERFACE_11 +static moduleAlternateSnapshot_t moduleAlternateSnapshot; + +static qboolean CG_GetModuleAlternateSnapshot( int snapshotNumber, snapshot_t *snap ) +{ + moduleAlternateSnapshot_t *alt = &moduleAlternateSnapshot; + int r = trap_GetSnapshot( snapshotNumber, alt ); + + if( r ) + { + int i; + + snap->snapFlags = alt->snapFlags; + snap->ping = alt->ping; + snap->serverTime = alt->serverTime; + snap->numEntities = alt->numEntities; + snap->numServerCommands = alt->numServerCommands; + snap->serverCommandSequence = alt->serverCommandSequence; + memcpy( &snap->areamask, &alt->areamask, sizeof( snap->areamask ) ); + +#define PSFO(x) ((size_t)&(((playerState_t*)0)->x)) + memcpy( &snap->ps.commandTime, &alt->ps.commandTime, PSFO(tauntTimer) - PSFO(commandTime) ); + memcpy( &snap->ps.movementDir, &alt->ps.movementDir, PSFO(ammo) - PSFO(movementDir) ); + memcpy( &snap->ps.generic1, &alt->ps.generic1, PSFO(entityEventSequence) - PSFO(generic1) ); + + snap->ps.weaponAnim = alt->ps.ammo[0] & 0xFF; + snap->ps.pm_flags |= ( alt->ps.ammo[0] & 0xFF00 ) << 8; + snap->ps.ammo = alt->ps.ammo[1] & 0xFFF; + snap->ps.clips = ( alt->ps.ammo[1] & 0xF000 ) >> 12; + snap->ps.tauntTimer = alt->ps.ammo[2] & 0xFFF; + snap->ps.generic1 |= ( alt->ps.ammo[2] & 0x3000 ) >> 4; + + for( i = 0; i < alt->numEntities; ++i ) + { + entityState_t *s = &snap->entities[ i ]; + const moduleAlternateEntityState_t *a = &alt->entities[ i ]; + +#define ESFO(x) ((size_t)&(((entityState_t*)0)->x)) + memcpy( &s->number, &a->number, ESFO(weaponAnim) - ESFO(number) ); + + s->weaponAnim = 0; + s->generic1 = a->generic1; + } + } + + return r; +} +#endif + /* ======================== CG_ReadNextSnapshot @@ -273,7 +322,11 @@ static snapshot_t *CG_ReadNextSnapshot( void ) // try to read the snapshot from the client system cgs.processedSnapshotNum++; +#ifdef MODULE_INTERFACE_11 + r = CG_GetModuleAlternateSnapshot( cgs.processedSnapshotNum, dest ); +#else r = trap_GetSnapshot( cgs.processedSnapshotNum, dest ); +#endif // FIXME: why would trap_GetSnapshot return a snapshot with the same server time if( cg.snap && r && dest->serverTime == cg.snap->serverTime ) diff --git a/src/cgame/cg_syscalls.c b/src/cgame/cg_syscalls.c index 16e01b8f..023fc3d9 100644 --- a/src/cgame/cg_syscalls.c +++ b/src/cgame/cg_syscalls.c @@ -292,10 +292,12 @@ sfxHandle_t trap_S_RegisterSound( const char *sample, qboolean compressed ) return syscall( CG_S_REGISTERSOUND, sample, compressed ); } +#ifndef MODULE_INTERFACE_11 int trap_S_SoundDuration( sfxHandle_t handle ) { return syscall( CG_S_SOUNDDURATION, handle ); } +#endif void trap_S_StartBackgroundTrack( const char *intro, const char *loop ) { @@ -382,10 +384,12 @@ void trap_R_SetColor( const float *rgba ) syscall( CG_R_SETCOLOR, rgba ); } +#ifndef MODULE_INTERFACE_11 void trap_R_SetClipRegion( const float *region ) { syscall( CG_R_SETCLIPREGION, region ); } +#endif void trap_R_DrawStretchPic( float x, float y, float w, float h, float s1, float t1, float s2, float t2, qhandle_t hShader ) @@ -424,7 +428,11 @@ void trap_GetCurrentSnapshotNumber( int *snapshotNumber, int *serverTime ) syscall( CG_GETCURRENTSNAPSHOTNUMBER, snapshotNumber, serverTime ); } +#ifdef MODULE_INTERFACE_11 +qboolean trap_GetSnapshot( int snapshotNumber, moduleAlternateSnapshot_t *snapshot ) +#else qboolean trap_GetSnapshot( int snapshotNumber, snapshot_t *snapshot ) +#endif { return syscall( CG_GETSNAPSHOT, snapshotNumber, snapshot ); } @@ -585,6 +593,7 @@ void trap_Key_SetBinding( int keynum, const char *binding ) { syscall( CG_KEY_SETBINDING, keynum, binding ); } +#ifndef MODULE_INTERFACE_11 void trap_Key_SetOverstrikeMode( qboolean state ) { syscall( CG_KEY_SETOVERSTRIKEMODE, state ); } @@ -592,3 +601,4 @@ void trap_Key_SetOverstrikeMode( qboolean state ) { qboolean trap_Key_GetOverstrikeMode( void ) { return syscall( CG_KEY_GETOVERSTRIKEMODE ); } +#endif diff --git a/src/cgame/cg_syscalls_11.asm b/src/cgame/cg_syscalls_11.asm new file mode 100644 index 00000000..13c262cb --- /dev/null +++ b/src/cgame/cg_syscalls_11.asm @@ -0,0 +1,114 @@ +code + +equ trap_Print -1 +equ trap_Error -2 +equ trap_Milliseconds -3 +equ trap_Cvar_Register -4 +equ trap_Cvar_Update -5 +equ trap_Cvar_Set -6 +equ trap_Cvar_VariableStringBuffer -7 +equ trap_Argc -8 +equ trap_Argv -9 +equ trap_Args -10 +equ trap_FS_FOpenFile -11 +equ trap_FS_Read -12 +equ trap_FS_Write -13 +equ trap_FS_FCloseFile -14 +equ trap_SendConsoleCommand -15 +equ trap_AddCommand -16 +equ trap_SendClientCommand -17 +equ trap_UpdateScreen -18 +equ trap_CM_LoadMap -19 +equ trap_CM_NumInlineModels -20 +equ trap_CM_InlineModel -21 +equ trap_CM_LoadModel -22 +equ trap_CM_TempBoxModel -23 +equ trap_CM_PointContents -24 +equ trap_CM_TransformedPointContents -25 +equ trap_CM_BoxTrace -26 +equ trap_CM_TransformedBoxTrace -27 +equ trap_CM_MarkFragments -28 +equ trap_S_StartSound -29 +equ trap_S_StartLocalSound -30 +equ trap_S_ClearLoopingSounds -31 +equ trap_S_AddLoopingSound -32 +equ trap_S_UpdateEntityPosition -33 +equ trap_S_Respatialize -34 +equ trap_S_RegisterSound -35 +equ trap_S_StartBackgroundTrack -36 +equ trap_R_LoadWorldMap -37 +equ trap_R_RegisterModel -38 +equ trap_R_RegisterSkin -39 +equ trap_R_RegisterShader -40 +equ trap_R_ClearScene -41 +equ trap_R_AddRefEntityToScene -42 +equ trap_R_AddPolyToScene -43 +equ trap_R_AddLightToScene -44 +equ trap_R_RenderScene -45 +equ trap_R_SetColor -46 +equ trap_R_DrawStretchPic -47 +equ trap_R_ModelBounds -48 +equ trap_R_LerpTag -49 +equ trap_GetGlconfig -50 +equ trap_GetGameState -51 +equ trap_GetCurrentSnapshotNumber -52 +equ trap_GetSnapshot -53 +equ trap_GetServerCommand -54 +equ trap_GetCurrentCmdNumber -55 +equ trap_GetUserCmd -56 +equ trap_SetUserCmdValue -57 +equ trap_R_RegisterShaderNoMip -58 +equ trap_MemoryRemaining -59 +equ trap_R_RegisterFont -60 +equ trap_Key_IsDown -61 +equ trap_Key_GetCatcher -62 +equ trap_Key_SetCatcher -63 +equ trap_Key_GetKey -64 +equ trap_Parse_AddGlobalDefine -65 +equ trap_Parse_LoadSource -66 +equ trap_Parse_FreeSource -67 +equ trap_Parse_ReadToken -68 +equ trap_Parse_SourceFileAndLine -69 +equ trap_S_StopBackgroundTrack -70 +equ trap_RealTime -71 +equ trap_SnapVector -72 +equ trap_RemoveCommand -73 +equ trap_R_LightForPoint -74 +equ trap_CIN_PlayCinematic -75 +equ trap_CIN_StopCinematic -76 +equ trap_CIN_RunCinematic -77 +equ trap_CIN_DrawCinematic -78 +equ trap_CIN_SetExtents -79 +equ trap_R_RemapShader -80 +equ trap_S_AddRealLoopingSound -81 +equ trap_S_StopLoopingSound -82 +equ trap_CM_TempCapsuleModel -83 +equ trap_CM_CapsuleTrace -84 +equ trap_CM_TransformedCapsuleTrace -85 +equ trap_R_AddAdditiveLightToScene -86 +equ trap_GetEntityToken -87 +equ trap_R_AddPolysToScene -88 +equ trap_R_inPVS -89 +equ trap_FS_Seek -90 +equ trap_FS_GetFileList -91 +equ trap_LiteralArgs -92 +equ trap_CM_BiSphereTrace -93 +equ trap_CM_TransformedBiSphereTrace -94 +equ trap_GetDemoState -95 +equ trap_GetDemoPos -96 +equ trap_GetDemoName -97 +equ trap_Key_KeynumToStringBuf -98 +equ trap_Key_GetBindingBuf -99 +equ trap_Key_SetBinding -100 + +equ memset -201 +equ memcpy -202 +equ strncpy -203 +equ sin -204 +equ cos -205 +equ atan2 -206 +equ sqrt -207 +equ floor -208 +equ ceil -209 +equ testPrintInt -210 +equ testPrintFloat -211 diff --git a/src/ui/ui_main.c b/src/ui/ui_main.c index a542e642..a5b9879e 100644 --- a/src/ui/ui_main.c +++ b/src/ui/ui_main.c @@ -33,11 +33,24 @@ USER INTERFACE MAIN uiInfo_t uiInfo; +#ifdef MODULE_INTERFACE_11 +#undef AS_GLOBAL +#undef AS_LOCAL +#define AS_GLOBAL 2 +#define AS_LOCAL 0 +#endif + static const char *netSources[ ] = { +#ifdef MODULE_INTERFACE_11 + "LAN", + "Mplayer", + "Internet", +#else "Internet", "Mplayer", "LAN", +#endif "Favorites" }; @@ -163,12 +176,14 @@ Q_EXPORT intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, UI_MouseEvent( arg0, arg1 ); return 0; +#ifndef MODULE_INTERFACE_11 case UI_MOUSE_POSITION: return UI_MousePosition( ); case UI_SET_MOUSE_POSITION: UI_SetMousePosition( arg0, arg1 ); return 0; +#endif case UI_REFRESH: UI_Refresh( arg0 ); @@ -1113,7 +1128,11 @@ static void UI_StartServerRefresh( qboolean full ) { qboolean global = ui_netSource.integer == AS_GLOBAL; +#ifdef MODULE_INTERFACE_11 + trap_Cmd_ExecuteText( EXEC_APPEND, va( "globalservers %d 69 full empty\n", +#else trap_Cmd_ExecuteText( EXEC_APPEND, va( "globalservers %d 70 full empty\n", +#endif global ? 0 : 1 ) ); } } @@ -4630,3 +4649,13 @@ void UI_UpdateNews( qboolean begin ) uiInfo.newsInfo.refreshActive = qfalse; } +#ifdef MODULE_INTERFACE_11 +void trap_R_SetClipRegion( const float *region ) +{ +} + +qboolean trap_GetNews( qboolean force ) +{ + return qtrue; +} +#endif diff --git a/src/ui/ui_public.h b/src/ui/ui_public.h index f1f55c2f..489b2b08 100644 --- a/src/ui/ui_public.h +++ b/src/ui/ui_public.h @@ -66,7 +66,9 @@ typedef enum UI_R_ADDLIGHTTOSCENE, UI_R_RENDERSCENE, UI_R_SETCOLOR, +#ifndef MODULE_INTERFACE_11 UI_R_SETCLIPREGION, +#endif UI_R_DRAWSTRETCHPIC, UI_UPDATESCREEN, UI_CM_LERPTAG, @@ -95,6 +97,13 @@ typedef enum UI_MEMORY_REMAINING, UI_R_REGISTERFONT, UI_R_MODELBOUNDS, +#ifdef MODULE_INTERFACE_11 + UI_PARSE_ADD_GLOBAL_DEFINE, + UI_PARSE_LOAD_SOURCE, + UI_PARSE_FREE_SOURCE, + UI_PARSE_READ_TOKEN, + UI_PARSE_SOURCE_FILE_AND_LINE, +#endif UI_S_STOPBACKGROUNDTRACK, UI_S_STARTBACKGROUNDTRACK, UI_REAL_TIME, @@ -122,12 +131,14 @@ typedef enum UI_FS_SEEK, UI_SET_PBCLSTATUS, +#ifndef MODULE_INTERFACE_11 UI_PARSE_ADD_GLOBAL_DEFINE, UI_PARSE_LOAD_SOURCE, UI_PARSE_FREE_SOURCE, UI_PARSE_READ_TOKEN, UI_PARSE_SOURCE_FILE_AND_LINE, UI_GETNEWS, +#endif UI_MEMSET = 100, UI_MEMCPY, @@ -175,11 +186,13 @@ typedef enum UI_MOUSE_EVENT, // void UI_MouseEvent( int dx, int dy ); +#ifndef MODULE_INTERFACE_11 UI_MOUSE_POSITION, // int UI_MousePosition( void ); UI_SET_MOUSE_POSITION, // void UI_SetMousePosition( int x, int y ); +#endif UI_REFRESH, // void UI_Refresh( int time ); diff --git a/src/ui/ui_syscalls.c b/src/ui/ui_syscalls.c index 3163322c..b3967867 100644 --- a/src/ui/ui_syscalls.c +++ b/src/ui/ui_syscalls.c @@ -199,10 +199,12 @@ void trap_R_SetColor( const float *rgba ) syscall( UI_R_SETCOLOR, rgba ); } +#ifndef MODULE_INTERFACE_11 void trap_R_SetClipRegion( const float *region ) { syscall( UI_R_SETCLIPREGION, region ); } +#endif void trap_R_DrawStretchPic( float x, float y, float w, float h, float s1, float t1, float s2, float t2, qhandle_t hShader ) { @@ -329,10 +331,12 @@ int trap_LAN_ServerStatus( const char *serverAddress, char *serverStatus, int ma return syscall( UI_LAN_SERVERSTATUS, serverAddress, serverStatus, maxLen ); } +#ifndef MODULE_INTERFACE_11 qboolean trap_GetNews( qboolean force ) { return syscall( UI_GETNEWS, force ); } +#endif void trap_LAN_SaveCachedServers( void ) { diff --git a/src/ui/ui_syscalls_11.asm b/src/ui/ui_syscalls_11.asm new file mode 100644 index 00000000..cb80264b --- /dev/null +++ b/src/ui/ui_syscalls_11.asm @@ -0,0 +1,97 @@ +code + +equ trap_Error -1 +equ trap_Print -2 +equ trap_Milliseconds -3 +equ trap_Cvar_Set -4 +equ trap_Cvar_VariableValue -5 +equ trap_Cvar_VariableStringBuffer -6 +equ trap_Cvar_SetValue -7 +equ trap_Cvar_Reset -8 +equ trap_Cvar_Create -9 +equ trap_Cvar_InfoStringBuffer -10 +equ trap_Argc -11 +equ trap_Argv -12 +equ trap_Cmd_ExecuteText -13 +equ trap_FS_FOpenFile -14 +equ trap_FS_Read -15 +equ trap_FS_Write -16 +equ trap_FS_FCloseFile -17 +equ trap_FS_GetFileList -18 +equ trap_R_RegisterModel -19 +equ trap_R_RegisterSkin -20 +equ trap_R_RegisterShaderNoMip -21 +equ trap_R_ClearScene -22 +equ trap_R_AddRefEntityToScene -23 +equ trap_R_AddPolyToScene -24 +equ trap_R_AddLightToScene -25 +equ trap_R_RenderScene -26 +equ trap_R_SetColor -27 +equ trap_R_DrawStretchPic -28 +equ trap_UpdateScreen -29 +equ trap_CM_LerpTag -30 +equ trap_CM_LoadModel -31 +equ trap_S_RegisterSound -32 +equ trap_S_StartLocalSound -33 +equ trap_Key_KeynumToStringBuf -34 +equ trap_Key_GetBindingBuf -35 +equ trap_Key_SetBinding -36 +equ trap_Key_IsDown -37 +equ trap_Key_GetOverstrikeMode -38 +equ trap_Key_SetOverstrikeMode -39 +equ trap_Key_ClearStates -40 +equ trap_Key_GetCatcher -41 +equ trap_Key_SetCatcher -42 +equ trap_GetClipboardData -43 +equ trap_GetGlconfig -44 +equ trap_GetClientState -45 +equ trap_GetConfigString -46 +equ trap_LAN_GetPingQueueCount -47 +equ trap_LAN_ClearPing -48 +equ trap_LAN_GetPing -49 +equ trap_LAN_GetPingInfo -50 +equ trap_Cvar_Register -51 +equ trap_Cvar_Update -52 +equ trap_MemoryRemaining -53 +equ trap_R_RegisterFont -54 +equ trap_R_ModelBounds -55 +equ trap_Parse_AddGlobalDefine -56 +equ trap_Parse_LoadSource -57 +equ trap_Parse_FreeSource -58 +equ trap_Parse_ReadToken -59 +equ trap_Parse_SourceFileAndLine -60 +equ trap_S_StopBackgroundTrack -61 +equ trap_S_StartBackgroundTrack -62 +equ trap_RealTime -63 +equ trap_LAN_GetServerCount -64 +equ trap_LAN_GetServerAddressString -65 +equ trap_LAN_GetServerInfo -66 +equ trap_LAN_MarkServerVisible -67 +equ trap_LAN_UpdateVisiblePings -68 +equ trap_LAN_ResetPings -69 +equ trap_LAN_LoadCachedServers -70 +equ trap_LAN_SaveCachedServers -71 +equ trap_LAN_AddServer -72 +equ trap_LAN_RemoveServer -73 +equ trap_CIN_PlayCinematic -74 +equ trap_CIN_StopCinematic -75 +equ trap_CIN_RunCinematic -76 +equ trap_CIN_DrawCinematic -77 +equ trap_CIN_SetExtents -78 +equ trap_R_RemapShader -79 +equ trap_LAN_ServerStatus -80 +equ trap_LAN_GetServerPing -81 +equ trap_LAN_ServerIsVisible -82 +equ trap_LAN_CompareServers -83 +equ trap_FS_Seek -84 +equ trap_SetPbClStatus -85 + +equ memset -101 +equ memcpy -102 +equ strncpy -103 +equ sin -104 +equ cos -105 +equ atan2 -106 +equ sqrt -107 +equ floor -108 +equ ceil -109 |