// cl.refdef must be set before the first call static void VQH_RenderScene() { R_ClearScene(); if ( GGameType & GAME_QuakeWorld ) { CLQW_EmitEntities(); } else if ( GGameType & GAME_Quake ) { CLQ1_EmitEntities(); } else if ( GGameType & GAME_HexenWorld ) { CLHW_EmitEntities(); } else { CLH2_EmitEntities(); } VQH_AddViewModel(); if ( GGameType & GAME_Hexen2 ) { CLH2_UpdateEffects(); } CL_AddDLights(); CL_AddLightStyles(); CL_AddParticles(); cl.refdef.time = cl.serverTime; R_RenderScene( &cl.refdef ); VQH_DrawColourBlend(); }
/* ================= UI_PlayerSetup_Ownerdraw ================= */ static void UI_PlayerSetup_Ownerdraw( void *self ) { menuCommon_s *item = (menuCommon_s *)self; // draw the background UI_FillRect( item->x, item->y, item->width, item->height, uiPromptBgColor ); // draw the rectangle UI_DrawRectangle( item->x, item->y, item->width, item->height, uiInputFgColor ); if( !ui_showmodels->value && playerImage != 0 ) { PIC_Set( playerImage, 255, 255, 255, 255 ); PIC_Draw( item->x, item->y, item->width, item->height ); } else { R_ClearScene (); // update renderer timings uiPlayerSetup.refdef.time = gpGlobals->time; uiPlayerSetup.refdef.frametime = gpGlobals->frametime; uiPlayerSetup.ent->curstate.body = 0; // clearing body each frame // draw the player model R_AddEntity( ET_NORMAL, uiPlayerSetup.ent ); R_RenderFrame( &uiPlayerSetup.refdef ); } }
// CSQC_UpdateView - Called every rendered frame on the client. Useful for HUD drawing operations. void CSQC_UpdateView(float vwidth, float vheight) { R_ClearScene();// ALWAYS Clear Current Scene First // Assign Standard Viewflags R_SetView(VF_DRAWWORLD, 1);// Draw the World (and sky) - this MUST be set to 1! R_SetView(VF_DRAWCROSSHAIR, 1);// Draw the Crosshair R_SetView(VF_DRAWENGINESBAR, 0);//Don't draw Quake status bar // Setup Entities to be Rendered (include all base types; normal, engine and viewmodels) View_UpdateEveryFrame(); R_SetView(VF_ORIGIN, CSQC_VIEW); R_AddEntities(MASK_ENGINE | MASK_ENGINEVIEWMODELS | MASK_NORMAL ); // Render the Scene R_RenderScene(); GUI_HudDraw(); }
/* ================== V_RenderView ================== */ void V_RenderView( void ) { if( !cl.video_prepped || ( UI_IsVisible() && !cl.background )) return; // still loading if( cl.frame.valid && ( cl.force_refdef || !cl.refdef.paused )) { cl.force_refdef = false; R_ClearScene (); CL_AddEntities (); V_SetupRefDef (); } V_CalcRefDef (); }
/** * @sa R_RenderFrame * @sa R_BeginFrame */ void R_EndFrame (void) { R_EnableBlend(true); R_DrawChars(); /* draw all chars accumulated above */ /* restore draw color */ R_Color(NULL); R_EnableBlend(false); if (vid_gamma->modified) { if (!vid_ignoregamma->integer) { const float g = vid_gamma->value; SDL_SetGamma(g, g, g); } vid_gamma->modified = false; } R_ClearScene(); SDL_GL_SwapBuffers(); }
// The cgame module is making a system call qintptr CLWS_CgameSystemCalls( qintptr* args ) { switch ( args[ 0 ] ) { case WSCG_PRINT: common->Printf( "%s", ( char* )VMA( 1 ) ); return 0; case WSCG_ERROR: common->Error( "%s", ( char* )VMA( 1 ) ); return 0; case WSCG_MILLISECONDS: return Sys_Milliseconds(); case WSCG_CVAR_REGISTER: Cvar_Register( ( vmCvar_t* )VMA( 1 ), ( char* )VMA( 2 ), ( char* )VMA( 3 ), args[ 4 ] ); return 0; case WSCG_CVAR_UPDATE: Cvar_Update( ( vmCvar_t* )VMA( 1 ) ); return 0; case WSCG_CVAR_SET: Cvar_Set( ( char* )VMA( 1 ), ( char* )VMA( 2 ) ); return 0; case WSCG_CVAR_VARIABLESTRINGBUFFER: Cvar_VariableStringBuffer( ( char* )VMA( 1 ), ( char* )VMA( 2 ), args[ 3 ] ); return 0; case WSCG_ARGC: return Cmd_Argc(); case WSCG_ARGV: Cmd_ArgvBuffer( args[ 1 ], ( char* )VMA( 2 ), args[ 3 ] ); return 0; case WSCG_ARGS: Cmd_ArgsBuffer( ( char* )VMA( 1 ), args[ 2 ] ); return 0; case WSCG_FS_FOPENFILE: return FS_FOpenFileByMode( ( char* )VMA( 1 ), ( fileHandle_t* )VMA( 2 ), ( fsMode_t )args[ 3 ] ); case WSCG_FS_READ: FS_Read( VMA( 1 ), args[ 2 ], args[ 3 ] ); return 0; case WSCG_FS_WRITE: return FS_Write( VMA( 1 ), args[ 2 ], args[ 3 ] ); case WSCG_FS_FCLOSEFILE: FS_FCloseFile( args[ 1 ] ); return 0; case WSCG_SENDCONSOLECOMMAND: Cbuf_AddText( ( char* )VMA( 1 ) ); return 0; case WSCG_ADDCOMMAND: CLT3_AddCgameCommand( ( char* )VMA( 1 ) ); return 0; case WSCG_REMOVECOMMAND: Cmd_RemoveCommand( ( char* )VMA( 1 ) ); return 0; case WSCG_SENDCLIENTCOMMAND: CL_AddReliableCommand( ( char* )VMA( 1 ) ); return 0; case WSCG_UPDATESCREEN: SCR_UpdateScreen(); return 0; case WSCG_CM_LOADMAP: CLT3_CM_LoadMap( ( char* )VMA( 1 ) ); return 0; case WSCG_CM_NUMINLINEMODELS: return CM_NumInlineModels(); case WSCG_CM_INLINEMODEL: return CM_InlineModel( args[ 1 ] ); case WSCG_CM_TEMPBOXMODEL: return CM_TempBoxModel( ( float* )VMA( 1 ), ( float* )VMA( 2 ), false ); case WSCG_CM_TEMPCAPSULEMODEL: return CM_TempBoxModel( ( float* )VMA( 1 ), ( float* )VMA( 2 ), true ); case WSCG_CM_POINTCONTENTS: return CM_PointContentsQ3( ( float* )VMA( 1 ), args[ 2 ] ); case WSCG_CM_TRANSFORMEDPOINTCONTENTS: return CM_TransformedPointContentsQ3( ( float* )VMA( 1 ), args[ 2 ], ( float* )VMA( 3 ), ( float* )VMA( 4 ) ); case WSCG_CM_BOXTRACE: CM_BoxTraceQ3( ( q3trace_t* )VMA( 1 ), ( float* )VMA( 2 ), ( float* )VMA( 3 ), ( float* )VMA( 4 ), ( float* )VMA( 5 ), args[ 6 ], args[ 7 ], false ); return 0; case WSCG_CM_TRANSFORMEDBOXTRACE: CM_TransformedBoxTraceQ3( ( q3trace_t* )VMA( 1 ), ( float* )VMA( 2 ), ( float* )VMA( 3 ), ( float* )VMA( 4 ), ( float* )VMA( 5 ), args[ 6 ], args[ 7 ], ( float* )VMA( 8 ), ( float* )VMA( 9 ), false ); return 0; case WSCG_CM_CAPSULETRACE: CM_BoxTraceQ3( ( q3trace_t* )VMA( 1 ), ( float* )VMA( 2 ), ( float* )VMA( 3 ), ( float* )VMA( 4 ), ( float* )VMA( 5 ), args[ 6 ], args[ 7 ], true ); return 0; case WSCG_CM_TRANSFORMEDCAPSULETRACE: CM_TransformedBoxTraceQ3( ( q3trace_t* )VMA( 1 ), ( float* )VMA( 2 ), ( float* )VMA( 3 ), ( float* )VMA( 4 ), ( float* )VMA( 5 ), args[ 6 ], args[ 7 ], ( float* )VMA( 8 ), ( float* )VMA( 9 ), true ); return 0; case WSCG_CM_MARKFRAGMENTS: return R_MarkFragmentsWolf( args[ 1 ], ( const vec3_t* )VMA( 2 ), ( float* )VMA( 3 ), args[ 4 ], ( float* )VMA( 5 ), args[ 6 ], ( markFragment_t* )VMA( 7 ) ); case WSCG_S_STARTSOUND: S_StartSound( ( float* )VMA( 1 ), args[ 2 ], args[ 3 ], args[ 4 ], 0.5 ); return 0; case WSCG_S_STARTSOUNDEX: S_StartSoundEx( ( float* )VMA( 1 ), args[ 2 ], args[ 3 ], args[ 4 ], args[ 5 ], 127 ); return 0; case WSCG_S_STARTLOCALSOUND: S_StartLocalSound( args[ 1 ], args[ 2 ], 127 ); return 0; case WSCG_S_CLEARLOOPINGSOUNDS: CLWS_ClearLoopingSounds( args[ 1 ] ); return 0; case WSCG_S_ADDLOOPINGSOUND: // FIXME MrE: handling of looping sounds changed S_AddLoopingSound( args[ 1 ], ( float* )VMA( 2 ), ( float* )VMA( 3 ), args[ 4 ], args[ 5 ], args[ 6 ], 0 ); return 0; case WSCG_S_STOPSTREAMINGSOUND: S_StopEntStreamingSound( args[ 1 ] ); return 0; case WSCG_S_STOPLOOPINGSOUND: // RF, not functional anymore, since we reverted to old looping code return 0; case WSCG_S_UPDATEENTITYPOSITION: S_UpdateEntityPosition( args[ 1 ], ( float* )VMA( 2 ) ); return 0; case WSCG_S_GETVOICEAMPLITUDE: return S_GetVoiceAmplitude( args[ 1 ] ); case WSCG_S_RESPATIALIZE: S_Respatialize( args[ 1 ], ( float* )VMA( 2 ), ( vec3_t* )VMA( 3 ), args[ 4 ] ); return 0; case WSCG_S_REGISTERSOUND: return S_RegisterSound( ( char* )VMA( 1 ) ); case WSCG_S_STARTBACKGROUNDTRACK: S_StartBackgroundTrack( ( char* )VMA( 1 ), ( char* )VMA( 2 ), args[ 3 ] ); //----(SA) added fadeup time return 0; case WSCG_S_FADESTREAMINGSOUND: S_FadeStreamingSound( VMF( 1 ), args[ 2 ], args[ 3 ] ); //----(SA) added music/all-streaming options return 0; case WSCG_S_STARTSTREAMINGSOUND: S_StartStreamingSound( ( char* )VMA( 1 ), ( char* )VMA( 2 ), args[ 3 ], args[ 4 ], args[ 5 ] ); return 0; case WSCG_S_FADEALLSOUNDS: S_FadeAllSounds( VMF( 1 ), args[ 2 ], false ); //----(SA) added return 0; case WSCG_R_LOADWORLDMAP: R_LoadWorld( ( char* )VMA( 1 ) ); return 0; case WSCG_R_REGISTERMODEL: return R_RegisterModel( ( char* )VMA( 1 ) ); case WSCG_R_REGISTERSKIN: return R_RegisterSkin( ( char* )VMA( 1 ) ); case WSCG_R_GETSKINMODEL: return R_GetSkinModel( args[ 1 ], ( char* )VMA( 2 ), ( char* )VMA( 3 ) ); case WSCG_R_GETMODELSHADER: return R_GetShaderFromModel( args[ 1 ], args[ 2 ], args[ 3 ] ); case WSCG_R_REGISTERSHADER: return R_RegisterShader( ( char* )VMA( 1 ) ); case WSCG_R_REGISTERFONT: R_RegisterFont( ( char* )VMA( 1 ), args[ 2 ], ( fontInfo_t* )VMA( 3 ) ); case WSCG_R_REGISTERSHADERNOMIP: return R_RegisterShaderNoMip( ( char* )VMA( 1 ) ); case WSCG_R_CLEARSCENE: R_ClearScene(); return 0; case WSCG_R_ADDREFENTITYTOSCENE: CLWS_AddRefEntityToScene( ( wsrefEntity_t* )VMA( 1 ) ); return 0; case WSCG_R_ADDPOLYTOSCENE: R_AddPolyToScene( args[ 1 ], args[ 2 ], ( polyVert_t* )VMA( 3 ), 1 ); return 0; case WSCG_R_ADDPOLYSTOSCENE: R_AddPolyToScene( args[ 1 ], args[ 2 ], ( polyVert_t* )VMA( 3 ), args[ 4 ] ); return 0; case WSCG_RB_ZOMBIEFXADDNEWHIT: return 0; case WSCG_R_ADDLIGHTTOSCENE: R_AddLightToScene( ( float* )VMA( 1 ), VMF( 2 ), VMF( 3 ), VMF( 4 ), VMF( 5 ), args[ 6 ] ); return 0; case WSCG_R_ADDCORONATOSCENE: R_AddCoronaToScene( ( float* )VMA( 1 ), VMF( 2 ), VMF( 3 ), VMF( 4 ), VMF( 5 ), args[ 6 ], args[ 7 ] ); return 0; case WSCG_R_SETFOG: R_SetFog( args[ 1 ], args[ 2 ], args[ 3 ], VMF( 4 ), VMF( 5 ), VMF( 6 ), VMF( 7 ) ); return 0; case WSCG_R_RENDERSCENE: CLWS_RenderScene( ( wsrefdef_t* )VMA( 1 ) ); return 0; case WSCG_R_SETCOLOR: R_SetColor( ( float* )VMA( 1 ) ); return 0; case WSCG_R_DRAWSTRETCHPIC: R_StretchPic( VMF( 1 ), VMF( 2 ), VMF( 3 ), VMF( 4 ), VMF( 5 ), VMF( 6 ), VMF( 7 ), VMF( 8 ), args[ 9 ] ); return 0; case WSCG_R_DRAWSTRETCHPIC_GRADIENT: R_StretchPicGradient( VMF( 1 ), VMF( 2 ), VMF( 3 ), VMF( 4 ), VMF( 5 ), VMF( 6 ), VMF( 7 ), VMF( 8 ), args[ 9 ], ( float* )VMA( 10 ), args[ 11 ] ); return 0; case WSCG_R_MODELBOUNDS: R_ModelBounds( args[ 1 ], ( float* )VMA( 2 ), ( float* )VMA( 3 ) ); return 0; case WSCG_R_LERPTAG: return CLWS_LerpTag( ( orientation_t* )VMA( 1 ), ( wsrefEntity_t* )VMA( 2 ), ( char* )VMA( 3 ), args[ 4 ] ); case WSCG_GETGLCONFIG: CLWS_GetGlconfig( ( wsglconfig_t* )VMA( 1 ) ); return 0; case WSCG_GETGAMESTATE: CLWS_GetGameState( ( wsgameState_t* )VMA( 1 ) ); return 0; case WSCG_GETCURRENTSNAPSHOTNUMBER: CLWS_GetCurrentSnapshotNumber( ( int* )VMA( 1 ), ( int* )VMA( 2 ) ); return 0; case WSCG_GETSNAPSHOT: return CLWS_GetSnapshot( args[ 1 ], ( wssnapshot_t* )VMA( 2 ) ); case WSCG_GETSERVERCOMMAND: return CLT3_GetServerCommand( args[ 1 ] ); case WSCG_GETCURRENTCMDNUMBER: return CLT3_GetCurrentCmdNumber(); case WSCG_GETUSERCMD: return CLWS_GetUserCmd( args[ 1 ], ( wsusercmd_t* )VMA( 2 ) ); case WSCG_SETUSERCMDVALUE: CLWS_SetUserCmdValue( args[ 1 ], args[ 2 ], VMF( 3 ), args[ 4 ] ); //----(SA) modified // NERVE - SMF - added fourth arg [cld] return 0; case WSCG_MEMORY_REMAINING: return 0x4000000; case WSCG_KEY_ISDOWN: return Key_IsDown( args[ 1 ] ); case WSCG_KEY_GETCATCHER: return Key_GetCatcher(); case WSCG_KEY_SETCATCHER: KeyQ3_SetCatcher( args[ 1 ] ); return 0; case WSCG_KEY_GETKEY: return Key_GetKey( ( char* )VMA( 1 ) ); case WSCG_MEMSET: return ( qintptr )memset( VMA( 1 ), args[ 2 ], args[ 3 ] ); case WSCG_MEMCPY: return ( qintptr )memcpy( VMA( 1 ), VMA( 2 ), args[ 3 ] ); case WSCG_STRNCPY: String::NCpy( ( char* )VMA( 1 ), ( char* )VMA( 2 ), args[ 3 ] ); return args[ 1 ]; case WSCG_SIN: return FloatAsInt( sin( VMF( 1 ) ) ); case WSCG_COS: return FloatAsInt( cos( VMF( 1 ) ) ); case WSCG_ATAN2: return FloatAsInt( atan2( VMF( 1 ), VMF( 2 ) ) ); case WSCG_SQRT: return FloatAsInt( sqrt( VMF( 1 ) ) ); case WSCG_FLOOR: return FloatAsInt( floor( VMF( 1 ) ) ); case WSCG_CEIL: return FloatAsInt( ceil( VMF( 1 ) ) ); case WSCG_ACOS: return FloatAsInt( idMath::ACos( VMF( 1 ) ) ); case WSCG_PC_ADD_GLOBAL_DEFINE: return PC_AddGlobalDefine( ( char* )VMA( 1 ) ); case WSCG_PC_LOAD_SOURCE: return PC_LoadSourceHandle( ( char* )VMA( 1 ) ); case WSCG_PC_FREE_SOURCE: return PC_FreeSourceHandle( args[ 1 ] ); case WSCG_PC_READ_TOKEN: return PC_ReadTokenHandleQ3( args[ 1 ], ( q3pc_token_t* )VMA( 2 ) ); case WSCG_PC_SOURCE_FILE_AND_LINE: return PC_SourceFileAndLine( args[ 1 ], ( char* )VMA( 2 ), ( int* )VMA( 3 ) ); case WSCG_S_STOPBACKGROUNDTRACK: S_StopBackgroundTrack(); return 0; case WSCG_REAL_TIME: return Com_RealTime( ( qtime_t* )VMA( 1 ) ); case WSCG_SNAPVECTOR: Sys_SnapVector( ( float* )VMA( 1 ) ); return 0; case WSCG_SENDMOVESPEEDSTOGAME: SVWS_SendMoveSpeedsToGame( args[ 1 ], ( char* )VMA( 2 ) ); return 0; case WSCG_CIN_PLAYCINEMATIC: return CIN_PlayCinematicStretched( ( char* )VMA( 1 ), args[ 2 ], args[ 3 ], args[ 4 ], args[ 5 ], args[ 6 ] ); case WSCG_CIN_STOPCINEMATIC: return CIN_StopCinematic( args[ 1 ] ); case WSCG_CIN_RUNCINEMATIC: return CIN_RunCinematic( args[ 1 ] ); case WSCG_CIN_DRAWCINEMATIC: CIN_DrawCinematic( args[ 1 ] ); return 0; case WSCG_CIN_SETEXTENTS: CIN_SetExtents( args[ 1 ], args[ 2 ], args[ 3 ], args[ 4 ], args[ 5 ] ); return 0; case WSCG_R_REMAP_SHADER: R_RemapShader( ( char* )VMA( 1 ), ( char* )VMA( 2 ), ( char* )VMA( 3 ) ); return 0; case WSCG_TESTPRINTINT: common->Printf( "%s%i\n", ( char* )VMA( 1 ), static_cast<int>( args[ 2 ] ) ); return 0; case WSCG_TESTPRINTFLOAT: common->Printf( "%s%f\n", ( char* )VMA( 1 ), VMF( 2 ) ); return 0; case WSCG_LOADCAMERA: return loadCamera( args[ 1 ], ( char* )VMA( 2 ) ); case WSCG_STARTCAMERA: CLWS_StartCamera( args[ 1 ], args[ 2 ] ); return 0; case WSCG_STOPCAMERA: CLWS_StopCamera( args[ 1 ] ); return 0; case WSCG_GETCAMERAINFO: return getCameraInfo( args[ 1 ], args[ 2 ], ( float* )VMA( 3 ), ( float* )VMA( 4 ), ( float* )VMA( 5 ) ); case WSCG_GET_ENTITY_TOKEN: return R_GetEntityToken( ( char* )VMA( 1 ), args[ 2 ] ); case WSCG_INGAME_POPUP: CLWS_InGamePopup( ( char* )VMA( 1 ) ); return 0; case WSCG_INGAME_CLOSEPOPUP: UIT3_KeyEvent( K_ESCAPE, true ); return 0; case WSCG_LIMBOCHAT: CLT3_AddToLimboChat( ( char* )VMA( 1 ) ); return 0; case WSCG_GETMODELINFO: return SVWS_GetModelInfo( args[ 1 ], ( char* )VMA( 2 ), ( animModelInfo_t** )VMA( 3 ) ); default: common->Error( "Bad cgame system trap: %i", static_cast<int>( args[ 0 ] ) ); } return 0; }
// The ui module is making a system call qintptr CLWM_UISystemCalls( qintptr* args ) { switch ( args[ 0 ] ) { case WMUI_ERROR: common->Error( "%s", ( char* )VMA( 1 ) ); return 0; case WMUI_PRINT: common->Printf( "%s", ( char* )VMA( 1 ) ); return 0; case WMUI_MILLISECONDS: return Sys_Milliseconds(); case WMUI_CVAR_REGISTER: Cvar_Register( ( vmCvar_t* )VMA( 1 ), ( char* )VMA( 2 ), ( char* )VMA( 3 ), args[ 4 ] ); return 0; case WMUI_CVAR_UPDATE: Cvar_Update( ( vmCvar_t* )VMA( 1 ) ); return 0; case WMUI_CVAR_SET: Cvar_Set( ( char* )VMA( 1 ), ( char* )VMA( 2 ) ); return 0; case WMUI_CVAR_VARIABLEVALUE: return FloatAsInt( Cvar_VariableValue( ( char* )VMA( 1 ) ) ); case WMUI_CVAR_VARIABLESTRINGBUFFER: Cvar_VariableStringBuffer( ( char* )VMA( 1 ), ( char* )VMA( 2 ), args[ 3 ] ); return 0; case WMUI_CVAR_SETVALUE: Cvar_SetValue( ( char* )VMA( 1 ), VMF( 2 ) ); return 0; case WMUI_CVAR_RESET: Cvar_Reset( ( char* )VMA( 1 ) ); return 0; case WMUI_CVAR_CREATE: Cvar_Get( ( char* )VMA( 1 ), ( char* )VMA( 2 ), args[ 3 ] ); return 0; case WMUI_CVAR_INFOSTRINGBUFFER: Cvar_InfoStringBuffer( args[ 1 ], MAX_INFO_STRING_Q3, ( char* )VMA( 2 ), args[ 3 ] ); return 0; case WMUI_ARGC: return Cmd_Argc(); case WMUI_ARGV: Cmd_ArgvBuffer( args[ 1 ], ( char* )VMA( 2 ), args[ 3 ] ); return 0; case WMUI_CMD_EXECUTETEXT: Cbuf_ExecuteText( args[ 1 ], ( char* )VMA( 2 ) ); return 0; case WMUI_FS_FOPENFILE: return FS_FOpenFileByMode( ( char* )VMA( 1 ), ( fileHandle_t* )VMA( 2 ), ( fsMode_t )args[ 3 ] ); case WMUI_FS_READ: FS_Read( VMA( 1 ), args[ 2 ], args[ 3 ] ); return 0; case WMUI_FS_WRITE: FS_Write( VMA( 1 ), args[ 2 ], args[ 3 ] ); return 0; case WMUI_FS_FCLOSEFILE: FS_FCloseFile( args[ 1 ] ); return 0; case WMUI_FS_DELETEFILE: return FS_Delete( ( char* )VMA( 1 ) ); case WMUI_FS_GETFILELIST: return FS_GetFileList( ( char* )VMA( 1 ), ( char* )VMA( 2 ), ( char* )VMA( 3 ), args[ 4 ] ); case WMUI_R_REGISTERMODEL: return R_RegisterModel( ( char* )VMA( 1 ) ); case WMUI_R_REGISTERSKIN: return R_RegisterSkin( ( char* )VMA( 1 ) ); case WMUI_R_REGISTERSHADERNOMIP: return R_RegisterShaderNoMip( ( char* )VMA( 1 ) ); case WMUI_R_CLEARSCENE: R_ClearScene(); return 0; case WMUI_R_ADDREFENTITYTOSCENE: CLWM_AddRefEntityToScene( ( wmrefEntity_t* )VMA( 1 ) ); return 0; case WMUI_R_ADDPOLYTOSCENE: R_AddPolyToScene( args[ 1 ], args[ 2 ], ( polyVert_t* )VMA( 3 ), 1 ); return 0; case WMUI_R_ADDPOLYSTOSCENE: R_AddPolyToScene( args[ 1 ], args[ 2 ], ( polyVert_t* )VMA( 3 ), args[ 4 ] ); return 0; case WMUI_R_ADDLIGHTTOSCENE: R_AddLightToScene( ( float* )VMA( 1 ), VMF( 2 ), VMF( 3 ), VMF( 4 ), VMF( 5 ), args[ 6 ] ); return 0; case WMUI_R_ADDCORONATOSCENE: R_AddCoronaToScene( ( float* )VMA( 1 ), VMF( 2 ), VMF( 3 ), VMF( 4 ), VMF( 5 ), args[ 6 ], args[ 7 ] ); return 0; case WMUI_R_RENDERSCENE: CLWM_RenderScene( ( wmrefdef_t* )VMA( 1 ) ); return 0; case WMUI_R_SETCOLOR: R_SetColor( ( float* )VMA( 1 ) ); return 0; case WMUI_R_DRAWSTRETCHPIC: R_StretchPic( VMF( 1 ), VMF( 2 ), VMF( 3 ), VMF( 4 ), VMF( 5 ), VMF( 6 ), VMF( 7 ), VMF( 8 ), args[ 9 ] ); return 0; case WMUI_R_MODELBOUNDS: R_ModelBounds( args[ 1 ], ( float* )VMA( 2 ), ( float* )VMA( 3 ) ); return 0; case WMUI_UPDATESCREEN: SCR_UpdateScreen(); return 0; case WMUI_CM_LERPTAG: return CLWM_LerpTag( ( orientation_t* )VMA( 1 ), ( wmrefEntity_t* )VMA( 2 ), ( char* )VMA( 3 ), args[ 4 ] ); case WMUI_S_REGISTERSOUND: return S_RegisterSound( ( char* )VMA( 1 ) ); case WMUI_S_STARTLOCALSOUND: S_StartLocalSound( args[ 1 ], args[ 2 ], 127 ); return 0; case WMUI_KEY_KEYNUMTOSTRINGBUF: Key_KeynumToStringBuf( args[ 1 ], ( char* )VMA( 2 ), args[ 3 ] ); return 0; case WMUI_KEY_GETBINDINGBUF: Key_GetBindingBuf( args[ 1 ], ( char* )VMA( 2 ), args[ 3 ] ); return 0; case WMUI_KEY_SETBINDING: Key_SetBinding( args[ 1 ], ( char* )VMA( 2 ) ); return 0; case WMUI_KEY_ISDOWN: return Key_IsDown( args[ 1 ] ); case WMUI_KEY_GETOVERSTRIKEMODE: return Key_GetOverstrikeMode(); case WMUI_KEY_SETOVERSTRIKEMODE: Key_SetOverstrikeMode( args[ 1 ] ); return 0; case WMUI_KEY_CLEARSTATES: Key_ClearStates(); return 0; case WMUI_KEY_GETCATCHER: return Key_GetCatcher(); case WMUI_KEY_SETCATCHER: KeyWM_SetCatcher( args[ 1 ] ); return 0; case WMUI_GETCLIPBOARDDATA: CLT3_GetClipboardData( ( char* )VMA( 1 ), args[ 2 ] ); return 0; case WMUI_GETCLIENTSTATE: UIT3_GetClientState( ( uiClientState_t* )VMA( 1 ) ); return 0; case WMUI_GETGLCONFIG: CLWM_GetGlconfig( ( wmglconfig_t* )VMA( 1 ) ); return 0; case WMUI_GETCONFIGSTRING: return CLWM_GetConfigString( args[ 1 ], ( char* )VMA( 2 ), args[ 3 ] ); case WMUI_LAN_LOADCACHEDSERVERS: LAN_LoadCachedServers(); return 0; case WMUI_LAN_SAVECACHEDSERVERS: LAN_SaveServersToCache(); return 0; case WMUI_LAN_ADDSERVER: return LAN_AddServer( args[ 1 ], ( char* )VMA( 2 ), ( char* )VMA( 3 ) ); case WMUI_LAN_REMOVESERVER: LAN_RemoveServer( args[ 1 ], ( char* )VMA( 2 ) ); return 0; case WMUI_LAN_GETPINGQUEUECOUNT: return CLT3_GetPingQueueCount(); case WMUI_LAN_CLEARPING: CLT3_ClearPing( args[ 1 ] ); return 0; case WMUI_LAN_GETPING: CLT3_GetPing( args[ 1 ], ( char* )VMA( 2 ), args[ 3 ], ( int* )VMA( 4 ) ); return 0; case WMUI_LAN_GETPINGINFO: CLT3_GetPingInfo( args[ 1 ], ( char* )VMA( 2 ), args[ 3 ] ); return 0; case WMUI_LAN_GETSERVERCOUNT: return LAN_GetServerCount( args[ 1 ] ); case WMUI_LAN_GETSERVERADDRESSSTRING: LAN_GetServerAddressString( args[ 1 ], args[ 2 ], ( char* )VMA( 3 ), args[ 4 ] ); return 0; case WMUI_LAN_GETSERVERINFO: LAN_GetServerInfo( args[ 1 ], args[ 2 ], ( char* )VMA( 3 ), args[ 4 ] ); return 0; case WMUI_LAN_GETSERVERPING: return LAN_GetServerPing( args[ 1 ], args[ 2 ] ); case WMUI_LAN_MARKSERVERVISIBLE: LAN_MarkServerVisible( args[ 1 ], args[ 2 ], args[ 3 ] ); return 0; case WMUI_LAN_SERVERISVISIBLE: return LAN_ServerIsVisible( args[ 1 ], args[ 2 ] ); case WMUI_LAN_UPDATEVISIBLEPINGS: return CLT3_UpdateVisiblePings( args[ 1 ] ); case WMUI_LAN_RESETPINGS: LAN_ResetPings( args[ 1 ] ); return 0; case WMUI_LAN_SERVERSTATUS: return CLT3_ServerStatus( ( char* )VMA( 1 ), ( char* )VMA( 2 ), args[ 3 ] ); case WMUI_SET_PBCLSTATUS: return 0; case WMUI_SET_PBSVSTATUS: return 0; case WMUI_LAN_COMPARESERVERS: return LAN_CompareServers( args[ 1 ], args[ 2 ], args[ 3 ], args[ 4 ], args[ 5 ] ); case WMUI_MEMORY_REMAINING: return 0x4000000; case WMUI_GET_CDKEY: CLT3UI_GetCDKey( ( char* )VMA( 1 ), args[ 2 ] ); return 0; case WMUI_SET_CDKEY: CLT3UI_SetCDKey( ( char* )VMA( 1 ) ); return 0; case WMUI_R_REGISTERFONT: R_RegisterFont( ( char* )VMA( 1 ), args[ 2 ], ( fontInfo_t* )VMA( 3 ) ); return 0; case WMUI_MEMSET: return ( qintptr )memset( VMA( 1 ), args[ 2 ], args[ 3 ] ); case WMUI_MEMCPY: return ( qintptr )memcpy( VMA( 1 ), VMA( 2 ), args[ 3 ] ); case WMUI_STRNCPY: String::NCpy( ( char* )VMA( 1 ), ( char* )VMA( 2 ), args[ 3 ] ); return args[ 1 ]; case WMUI_SIN: return FloatAsInt( sin( VMF( 1 ) ) ); case WMUI_COS: return FloatAsInt( cos( VMF( 1 ) ) ); case WMUI_ATAN2: return FloatAsInt( atan2( VMF( 1 ), VMF( 2 ) ) ); case WMUI_SQRT: return FloatAsInt( sqrt( VMF( 1 ) ) ); case WMUI_FLOOR: return FloatAsInt( floor( VMF( 1 ) ) ); case WMUI_CEIL: return FloatAsInt( ceil( VMF( 1 ) ) ); case WMUI_PC_ADD_GLOBAL_DEFINE: return PC_AddGlobalDefine( ( char* )VMA( 1 ) ); case WMUI_PC_LOAD_SOURCE: return PC_LoadSourceHandle( ( char* )VMA( 1 ) ); case WMUI_PC_FREE_SOURCE: return PC_FreeSourceHandle( args[ 1 ] ); case WMUI_PC_READ_TOKEN: return PC_ReadTokenHandleQ3( args[ 1 ], ( q3pc_token_t* )VMA( 2 ) ); case WMUI_PC_SOURCE_FILE_AND_LINE: return PC_SourceFileAndLine( args[ 1 ], ( char* )VMA( 2 ), ( int* )VMA( 3 ) ); case WMUI_S_STOPBACKGROUNDTRACK: S_StopBackgroundTrack(); return 0; case WMUI_S_STARTBACKGROUNDTRACK: S_StartBackgroundTrack( ( char* )VMA( 1 ), ( char* )VMA( 2 ), 0 ); return 0; case WMUI_REAL_TIME: return Com_RealTime( ( qtime_t* )VMA( 1 ) ); case WMUI_CIN_PLAYCINEMATIC: return CIN_PlayCinematicStretched( ( char* )VMA( 1 ), args[ 2 ], args[ 3 ], args[ 4 ], args[ 5 ], args[ 6 ] ); case WMUI_CIN_STOPCINEMATIC: return CIN_StopCinematic( args[ 1 ] ); case WMUI_CIN_RUNCINEMATIC: return CIN_RunCinematic( args[ 1 ] ); case WMUI_CIN_DRAWCINEMATIC: CIN_DrawCinematic( args[ 1 ] ); return 0; case WMUI_CIN_SETEXTENTS: CIN_SetExtents( args[ 1 ], args[ 2 ], args[ 3 ], args[ 4 ], args[ 5 ] ); return 0; case WMUI_R_REMAP_SHADER: R_RemapShader( ( char* )VMA( 1 ), ( char* )VMA( 2 ), ( char* )VMA( 3 ) ); return 0; case WMUI_VERIFY_CDKEY: return CLT3_CDKeyValidate( ( char* )VMA( 1 ), ( char* )VMA( 2 ) ); case WMUI_CL_GETLIMBOSTRING: return CLT3_GetLimboString( args[ 1 ], ( char* )VMA( 2 ) ); case WMUI_CL_TRANSLATE_STRING: CL_TranslateString( ( char* )VMA( 1 ), ( char* )VMA( 2 ) ); return 0; case WMUI_CHECKAUTOUPDATE: return 0; case WMUI_GET_AUTOUPDATE: return 0; case WMUI_OPENURL: CLT3_OpenURL( ( const char* )VMA( 1 ) ); return 0; default: common->Error( "Bad UI system trap: %i", static_cast<int>( args[ 0 ] ) ); } return 0; }
// thirdperson camera void CAM_Think( void ) { R_ClearScene(); }
void __cdecl R_GenerateReflectionRawData(DiskGfxReflectionProbe* probeRawData) { if (!*g_ffDir) { sprintf_s(g_ffDir, "%s/%s/", Dvar_GetString("fs_basepath"), Dvar_GetString("fs_game")); } refdef_s refdef; char* ptr = *((char**)0x02FF5354); refdef_s* refsrc = (refdef_s*)(ptr + 0x8C100); memcpy(&refdef, refsrc, sizeof(refdef_s)); refdef.vieworg[1] = probeRawData->origin[0]; refdef.vieworg[2] = probeRawData->origin[1]; refdef.yaw = probeRawData->origin[2]; R_InitPrimaryLights(refdef.primaryLights[0].dir); for (int cubemapShot = 1; cubemapShot < 7; cubemapShot++) { R_BeginCubemapShot(256, 0); R_BeginFrame(); GfxCmdArray* s_cmdList = *(GfxCmdArray**)0x03B370C0; GfxBackEndData* frontEndDataOut = *(GfxBackEndData**)0x03B3708C; frontEndDataOut->cmds = &s_cmdList->cmds[s_cmdList->usedTotal]; frontEndDataOut->viewInfo[frontEndDataOut->viewInfoCount].cmds = NULL; R_ClearScene(0); FX_BeginUpdate(0); R_CalcCubeMapViewValues(&refdef, cubemapShot, 256); float* vec = (float*)0x3AC3060; vec[0] = refdef.vieworg[0]; vec[1] = refdef.vieworg[1]; vec[2] = refdef.vieworg[2]; int* unk1 = (int*)0x3AC3058; *unk1 = refdef.time; float* unk2 = (float*)0x3AC305C; *unk2 = refdef.time * 0.001f; R_UpdateFrameFog(refdef.localClientNum); R_UpdateFrameSun(); float zFar = R_GetFarPlaneDist(); FxCameraUpdate fxUpdateCmd; memset(&fxUpdateCmd, 0, sizeof(FxCameraUpdate)); FxCmd cmd; memset(&cmd, 0, sizeof(FxCmd)); FX_GetCameraUpdateFromRefdefAndZFar(&fxUpdateCmd, &refdef, zFar); FX_SetNextUpdateCamera(0, &fxUpdateCmd); FX_FillUpdateCmd(0, &cmd); Sys_ResetUpdateSpotLightEffectEvent(); Sys_AddWorkerCmdInternal((void*)0x00BA5420, &cmd, 0); Sys_ResetUpdateNonDependentEffectsEvent(); Sys_AddWorkerCmdInternal((void*)0x00BA52E0, &cmd, 0); Sys_AddWorkerCmdInternal((void*)0x00BA5300, &cmd, 0); Sys_AddWorkerCmdInternal((void*)0x00BA5330, &cmd, 0); R_RenderScene(&refdef, 0); R_EndFrame(); R_IssueRenderCommands(3); R_EndCubemapShot(cubemapShot); } R_CreateReflectionRawDataFromCubemapShot(probeRawData); }