static void ModelCallback (void *unused) { char scratch[MAX_QPATH]; s_player_skin_box.itemnames = s_pmi[s_player_model_box.curvalue].skindisplaynames; s_player_skin_box.curvalue = 0; // only register model and skin on starup or when changed Com_sprintf( scratch, sizeof(scratch), "players/%s/tris.md2", s_pmi[s_player_model_box.curvalue].directory ); playermodel = R_RegisterModel (scratch); Com_sprintf( scratch, sizeof(scratch), "players/%s/%s.pcx", s_pmi[s_player_model_box.curvalue].directory, s_pmi[s_player_model_box.curvalue].skindisplaynames[s_player_skin_box.curvalue] ); playerskin = R_RegisterSkin (scratch); // show current weapon model (if any) if (currentweaponmodel && strlen(currentweaponmodel)) { Com_sprintf (scratch, sizeof(scratch), "players/%s/%s", s_pmi[s_player_model_box.curvalue].directory, currentweaponmodel); weaponmodel = R_RegisterModel(scratch); if (!weaponmodel) { Com_sprintf (scratch, sizeof(scratch), "players/%s/weapon.md2", s_pmi[s_player_model_box.curvalue].directory); weaponmodel = R_RegisterModel (scratch); } } else { Com_sprintf (scratch, sizeof(scratch), "players/%s/weapon.md2", s_pmi[s_player_model_box.curvalue].directory); weaponmodel = R_RegisterModel (scratch); } }
void CLH2_CreateStreamSunstaff1( int ent, int tag, int flags, int skin, int duration, const vec3_t source, const vec3_t dest ) { qhandle_t models[ 4 ]; models[ 0 ] = R_RegisterModel( "models/stsunsf1.mdl" ); models[ 1 ] = R_RegisterModel( "models/stsunsf2.mdl" ); models[ 2 ] = R_RegisterModel( "models/stsunsf3.mdl" ); models[ 3 ] = R_RegisterModel( "models/stsunsf4.mdl" ); CLH2_CreateStream( H2TE_STREAM_SUNSTAFF1, ent, tag, flags, skin, duration, source, dest, models ); }
void CLH2_CreateStreamSunstaffPower( int ent, const vec3_t source, const vec3_t dest ) { qhandle_t models[ 4 ]; models[ 0 ] = R_RegisterModel( "models/stsunsf2.mdl" ); models[ 1 ] = R_RegisterModel( "models/stsunsf1.mdl" ); models[ 2 ] = R_RegisterModel( "models/stsunsf3.mdl" ); models[ 3 ] = R_RegisterModel( "models/stsunsf4.mdl" ); CLH2_CreateStream( H2TE_STREAM_SUNSTAFF2, ent, 0, 0, 0, 800, source, dest, models ); }
void UI_CheckQuadModel (void) { quadModel = R_RegisterModel (QUAD_CURSOR_MODEL); quadModel_loaded = (quadModel != NULL); }
static qhandle_t CLQ1_RegisterModel( const char* name ) { idSkinTranslation* skinTranslation = NULL; if ( !String::Cmp( name,"progs/player.mdl" ) ) { skinTranslation = &clq1_translation_info; } return R_RegisterModel( name, skinTranslation ); }
/* @@@@@@@@@@@@@@@@@@@@@ R_BeginRegistration Specifies the model that will be used as the world @@@@@@@@@@@@@@@@@@@@@ */ void R_BeginRegistration (char *model) { char fullname[MAX_QPATH]; cvar_t *flushmap; registration_sequence++; r_oldviewcluster = -1; // force markleafs Com_sprintf (fullname, sizeof(fullname), "maps/%s.bsp", model); D_FlushCaches (); // explicitly free the old map if different // this guarantees that mod_known[0] is the world map flushmap = ri.Cvar_Get ("flushmap", "0", 0); if ( strcmp(mod_known[0].name, fullname) || flushmap->value) Mod_Free (&mod_known[0]); r_worldmodel = R_RegisterModel (fullname); R_NewMap (); }
/* ============= UI_DrawMainCursor3D Draws a rotating quad damage model. ============= */ void UI_DrawMainCursor3D (int32_t x, int32_t y) { refdef_t refdef; entity_t quadEnt, *ent; float rx, ry, rw, rh; int32_t yaw; yaw = anglemod(cls.realtime/10); memset(&refdef, 0, sizeof(refdef)); memset (&quadEnt, 0, sizeof(quadEnt)); // size 24x34 rx = x; ry = y; rw = 24; rh = 34; SCR_AdjustFrom640 (&rx, &ry, &rw, &rh, ALIGN_CENTER); refdef.x = rx; refdef.y = ry; refdef.width = rw; refdef.height = rh; refdef.fov_x = 40; refdef.fov_y = CalcFov (refdef.fov_x, refdef.width, refdef.height); refdef.time = cls.realtime*0.001; refdef.areabits = 0; refdef.lightstyles = 0; refdef.rdflags = RDF_NOWORLDMODEL; refdef.num_entities = 0; refdef.entities = &quadEnt; ent = &quadEnt; ent->model = R_RegisterModel(QUAD_CURSOR_MODEL); ent->flags = RF_FULLBRIGHT|RF_NOSHADOW|RF_DEPTHHACK; VectorSet (ent->origin, 40, 0, -18); VectorCopy( ent->origin, ent->oldorigin ); ent->frame = 0; ent->oldframe = 0; ent->backlerp = 0.0; ent->angles[1] = yaw; refdef.num_entities++; R_RenderFrame( &refdef ); }
/* ================= CL_RegisterTEntModels ================= */ void CL_RegisterTEntModels (void) { clMedia.mod_explode = R_RegisterModel ("models/objects/explode/tris.md2"); clMedia.mod_smoke = R_RegisterModel ("models/objects/smoke/tris.md2"); clMedia.mod_flash = R_RegisterModel ("models/objects/flash/tris.md2"); clMedia.mod_parasite_segment = R_RegisterModel ("models/monsters/parasite/segment/tris.md2"); clMedia.mod_grapple_cable = R_RegisterModel ("models/ctf/segment/tris.md2"); clMedia.mod_parasite_tip = R_RegisterModel ("models/monsters/parasite/tip/tris.md2"); clMedia.mod_explo = R_RegisterModel ("models/objects/r_explode/tris.md2"); clMedia.mod_bfg_explo = R_RegisterModel ("sprites/s_bfg2.sp2"); clMedia.mod_powerscreen = R_RegisterModel ("models/items/armor/effect/tris.md2"); // Rogue clMedia.mod_explo_big = R_RegisterModel ("models/objects/r_explode2/tris.md2"); clMedia.mod_lightning = R_RegisterModel ("models/proj/lightning/tris.md2"); clMedia.mod_heatbeam = R_RegisterModel ("models/proj/beam/tris.md2"); clMedia.mod_monster_heatbeam = R_RegisterModel ("models/proj/widowbeam/tris.md2"); // new effect models clMedia.mod_shocksplash = R_RegisterModel ("models/objects/shocksplash/tris.md2"); R_RegisterModel ("models/objects/laser/tris.md2"); R_RegisterModel ("models/objects/grenade2/tris.md2"); R_RegisterModel ("models/weapons/v_machn/tris.md2"); R_RegisterModel ("models/weapons/v_handgr/tris.md2"); R_RegisterModel ("models/weapons/v_shotg2/tris.md2"); R_RegisterModel ("models/objects/gibs/bone/tris.md2"); R_RegisterModel ("models/objects/gibs/sm_meat/tris.md2"); R_RegisterModel ("models/objects/gibs/bone2/tris.md2"); // Xatrix // R_RegisterModel ("models/objects/blaser/tris.md2"); R_DrawFindPic ("w_machinegun"); R_DrawFindPic ("a_bullets"); R_DrawFindPic ("i_health"); R_DrawFindPic ("a_grenades"); }
// 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; }
/* ================= UI_Precache ================= */ void UI_Precache (void) { int i; char scratch[80]; // general images R_DrawFindPic (LOADSCREEN_NAME); R_DrawFindPic (UI_BACKGROUND_NAME); R_DrawFindPic (UI_NOSCREEN_NAME); // loadscreen images R_DrawFindPic ("/pics/loading.pcx"); R_DrawFindPic ("/pics/loading_bar.pcx"); R_DrawFindPic ("/pics/downloading.pcx"); R_DrawFindPic ("/pics/downloading_bar.pcx"); R_DrawFindPic ("/pics/loading_led1.pcx"); // cursors // R_DrawFindPic (UI_MOUSECURSOR_MAIN_PIC); // R_DrawFindPic (UI_MOUSECURSOR_HOVER_PIC); // R_DrawFindPic (UI_MOUSECURSOR_CLICK_PIC); // R_DrawFindPic (UI_MOUSECURSOR_OVER_PIC); // R_DrawFindPic (UI_MOUSECURSOR_TEXT_PIC); R_DrawFindPic (UI_MOUSECURSOR_PIC); for (i = 0; i < NUM_MAINMENU_CURSOR_FRAMES; i++) { Com_sprintf (scratch, sizeof(scratch), "/pics/m_cursor%d.pcx", i); R_DrawFindPic (scratch); } // main menu items R_DrawFindPic ("/pics/m_main_game.pcx"); R_DrawFindPic ("/pics/m_main_game_sel.pcx"); R_DrawFindPic ("/pics/m_main_multiplayer.pcx"); R_DrawFindPic ("/pics/m_main_multiplayer_sel.pcx"); R_DrawFindPic ("/pics/m_main_options.pcx"); R_DrawFindPic ("/pics/m_main_options_sel.pcx"); R_DrawFindPic ("/pics/m_main_video.pcx"); R_DrawFindPic ("/pics/m_main_video_sel.pcx"); // R_DrawFindPic ("/pics/m_main_mods.pcx"); // R_DrawFindPic ("/pics/m_main_mods_sel.pcx"); R_DrawFindPic ("/pics/m_main_quit.pcx"); R_DrawFindPic ("/pics/m_main_quit_sel.pcx"); R_DrawFindPic ("/pics/m_main_plaque.pcx"); R_DrawFindPic ("/pics/m_main_logo.pcx"); R_RegisterModel ("models/ui/quad_cursor.md2"); // menu banners R_DrawFindPic ("/pics/m_banner_game.pcx"); R_DrawFindPic ("/pics/m_banner_load_game.pcx"); R_DrawFindPic ("/pics/m_banner_save_game.pcx"); R_DrawFindPic ("/pics/m_banner_multiplayer.pcx"); R_DrawFindPic ("/pics/m_banner_join_server.pcx"); R_DrawFindPic ("/pics/m_banner_addressbook.pcx"); R_DrawFindPic ("/pics/m_banner_start_server.pcx"); R_DrawFindPic ("/pics/m_banner_plauer_setup.pcx"); // typo for image name is id's fault R_DrawFindPic ("/pics/m_banner_options.pcx"); R_DrawFindPic ("/pics/m_banner_customize.pcx"); R_DrawFindPic ("/pics/m_banner_video.pcx"); // R_DrawFindPic ("/pics/m_banner_mods.pcx"); R_DrawFindPic ("/pics/quit.pcx"); // R_DrawFindPic ("/pics/areyousure.pcx"); // R_DrawFindPic ("/pics/yn.pcx"); // GUI elements R_DrawFindPic ("/gfx/ui/listbox_background.pcx"); R_DrawFindPic ("/gfx/ui/arrows/arrow_left.pcx"); R_DrawFindPic ("/gfx/ui/arrows/arrow_left_d.pcx"); R_DrawFindPic ("/gfx/ui/arrows/arrow_right.pcx"); R_DrawFindPic ("/gfx/ui/arrows/arrow_right_d.pcx"); }
/* ================= CL_RegisterTEntModels ================= */ void CL_RegisterTEntModels(void) { cl_mod_explode = R_RegisterModel("models/objects/explode/tris.md2"); cl_mod_smoke = R_RegisterModel("models/objects/smoke/tris.md2"); cl_mod_flash = R_RegisterModel("models/objects/flash/tris.md2"); cl_mod_parasite_segment = R_RegisterModel("models/monsters/parasite/segment/tris.md2"); cl_mod_grapple_cable = R_RegisterModel("models/ctf/segment/tris.md2"); cl_mod_explo4 = R_RegisterModel("models/objects/r_explode/tris.md2"); cl_mod_bfg_explo = R_RegisterModel("sprites/s_bfg2.sp2"); cl_mod_powerscreen = R_RegisterModel("models/items/armor/effect/tris.md2"); cl_mod_laser = R_RegisterModel("models/objects/laser/tris.md2"); cl_mod_dmspot = R_RegisterModel("models/objects/dmspot/tris.md2"); cl_mod_lightning = R_RegisterModel("models/proj/lightning/tris.md2"); cl_mod_heatbeam = R_RegisterModel("models/proj/beam/tris.md2"); cl_mod_explo4_big = R_RegisterModel("models/objects/r_explode2/tris.md2"); }
void CL_ParseConfigString(void) { int i, length; char *s; char olds[MAX_QPATH]; i = MSG_ReadShort(&net_message); if ((i < 0) || (i >= MAX_CONFIGSTRINGS)) { Com_Error(ERR_DROP, "configstring > MAX_CONFIGSTRINGS"); } s = MSG_ReadString(&net_message); Q_strlcpy(olds, cl.configstrings[i], sizeof(olds)); length = strlen(s); if (length > sizeof(cl.configstrings) - sizeof(cl.configstrings[0])*i - 1) { Com_Error(ERR_DROP, "CL_ParseConfigString: oversize configstring"); } strcpy(cl.configstrings[i], s); /* do something apropriate */ if ((i >= CS_LIGHTS) && (i < CS_LIGHTS + MAX_LIGHTSTYLES)) { CL_SetLightstyle(i - CS_LIGHTS); } else if (i == CS_CDTRACK) { if (cl.refresh_prepped) { #ifdef CDA CDAudio_Play((int)strtol(cl.configstrings[CS_CDTRACK], (char **)NULL, 10), true); #endif #ifdef OGG /* OGG/Vorbis */ if ((int)strtol(cl.configstrings[CS_CDTRACK], (char **)NULL, 10) < 10) { char tmp[3] = "0"; OGG_ParseCmd(strcat(tmp, cl.configstrings[CS_CDTRACK])); } else { OGG_ParseCmd(cl.configstrings[CS_CDTRACK]); } #endif } } else if ((i >= CS_MODELS) && (i < CS_MODELS + MAX_MODELS)) { if (cl.refresh_prepped) { cl.model_draw[i - CS_MODELS] = R_RegisterModel(cl.configstrings[i]); if (cl.configstrings[i][0] == '*') { cl.model_clip[i - CS_MODELS] = CM_InlineModel(cl.configstrings[i]); } else { cl.model_clip[i - CS_MODELS] = NULL; } } } else if ((i >= CS_SOUNDS) && (i < CS_SOUNDS + MAX_MODELS)) { if (cl.refresh_prepped) { cl.sound_precache[i - CS_SOUNDS] = S_RegisterSound(cl.configstrings[i]); } } else if ((i >= CS_IMAGES) && (i < CS_IMAGES + MAX_MODELS)) { if (cl.refresh_prepped) { cl.image_precache[i - CS_IMAGES] = Draw_FindPic(cl.configstrings[i]); } } else if ((i >= CS_PLAYERSKINS) && (i < CS_PLAYERSKINS + MAX_CLIENTS)) { if (cl.refresh_prepped && strcmp(olds, s)) { CL_ParseClientinfo(i - CS_PLAYERSKINS); } } }
void CLH2_CreateStreamIceChunks( int ent, int tag, int flags, int skin, int duration, const vec3_t source, const vec3_t dest ) { qhandle_t models[ 4 ]; models[ 0 ] = R_RegisterModel( "models/stice.mdl" ); models[ 1 ] = models[ 2 ] = models[ 3 ] = 0; CLH2_CreateStream( H2TE_STREAM_ICECHUNKS, ent, tag, flags, skin, duration, source, dest, models ); }
static void CLHW_CreateStreamLightningSmall( int ent, int tag, int flags, int skin, int duration, const vec3_t source, const vec3_t dest ) { qhandle_t models[ 4 ]; models[ 0 ] = R_RegisterModel( "models/stltng2.mdl" ); models[ 1 ] = models[ 2 ] = models[ 3 ] = 0; CLH2_CreateStream( HWTE_STREAM_LIGHTNING_SMALL, ent, tag, flags, skin, duration, source, dest, models ); }
static void CLH2_CreateStreamGaze( int ent, int tag, int flags, int skin, int duration, const vec3_t source, const vec3_t dest ) { qhandle_t models[ 4 ]; models[ 0 ] = R_RegisterModel( "models/stmedgaz.mdl" ); models[ 1 ] = models[ 2 ] = models[ 3 ] = 0; CLH2_CreateStream( H2TE_STREAM_GAZE, ent, tag, flags, skin, duration, source, dest, models ); }
// 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; }
/* ================ CL_ParseConfigString ================ */ void CL_ParseConfigString (void) { int32_t i; char *s; char olds[MAX_QPATH]; char scratch[1024]; i = MSG_ReadShort (&net_message); if (i < 0 || i >= MAX_CONFIGSTRINGS) Com_Error (ERR_DROP, "configstring > MAX_CONFIGSTRINGS"); s = MSG_ReadString(&net_message); strncpy (olds, cl.configstrings[i], sizeof(olds)); olds[sizeof(olds) - 1] = 0; strcpy (cl.configstrings[i], s); // do something apropriate // Knightmare- 1/2/2002- BIG UGLY HACK for old demos or // connected to server using old protocol // Changed config strings require different parsing if ( LegacyProtocol()) { if (i >= OLD_CS_LIGHTS && i < OLD_CS_LIGHTS+MAX_LIGHTSTYLES) CL_SetLightstyle (i - OLD_CS_LIGHTS); else if (i == CS_CDTRACK) { if (cl.refresh_prepped) CL_PlayBackgroundTrack (); } else if (i >= CS_MODELS && i < CS_MODELS+OLD_MAX_MODELS) { if (cl.refresh_prepped) { cl.model_draw[i-CS_MODELS] = R_RegisterModel (cl.configstrings[i]); if (cl.configstrings[i][0] == '*') cl.model_clip[i-CS_MODELS] = CM_InlineModel (cl.configstrings[i]); else cl.model_clip[i-CS_MODELS] = NULL; } } else if (i >= OLD_CS_SOUNDS && i < OLD_CS_SOUNDS+OLD_MAX_SOUNDS) { if (cl.refresh_prepped) cl.sound_precache[i-OLD_CS_SOUNDS] = S_RegisterSound (cl.configstrings[i]); } else if (i >= OLD_CS_IMAGES && i < OLD_CS_IMAGES+OLD_MAX_IMAGES) { if (cl.refresh_prepped) cl.image_precache[i-OLD_CS_IMAGES] = R_DrawFindPic (cl.configstrings[i]); } else if (i >= OLD_CS_PLAYERSKINS && i < OLD_CS_PLAYERSKINS+MAX_CLIENTS) { if (cl.refresh_prepped && strcmp(olds, s)) CL_ParseClientinfo (i-OLD_CS_PLAYERSKINS); } else if (i >= OLD_CS_ITEMS && i < OLD_CS_ITEMS + MAX_ITEMS) { int j; int item = i - OLD_CS_ITEMS; int32_t token; Com_sprintf (scratch, sizeof(scratch), "use %s", cl.configstrings[i]); token = Q_STLookup(&key_table, scratch); cl.inventorykey[item] = -1; if (token >= 0) { for (j=0; j<MAX_KEYEVENTS; j++) { if (keytokens[j] == token) { cl.inventorykey[item] = j; break; } } } } } else // new configstring offsets { if (i >= CS_LIGHTS && i < CS_LIGHTS+MAX_LIGHTSTYLES) CL_SetLightstyle (i - CS_LIGHTS); else if (i == CS_CDTRACK) { if (cl.refresh_prepped) CL_PlayBackgroundTrack (); } else if (i >= CS_MODELS && i < CS_MODELS+MAX_MODELS) { if (cl.refresh_prepped) { cl.model_draw[i-CS_MODELS] = R_RegisterModel (cl.configstrings[i]); if (cl.configstrings[i][0] == '*') cl.model_clip[i-CS_MODELS] = CM_InlineModel (cl.configstrings[i]); else cl.model_clip[i-CS_MODELS] = NULL; } } else if (i >= CS_SOUNDS && i < CS_SOUNDS+MAX_SOUNDS) //Knightmare- was MAX_MODELS { if (cl.refresh_prepped) cl.sound_precache[i-CS_SOUNDS] = S_RegisterSound (cl.configstrings[i]); } else if (i >= CS_IMAGES && i < CS_IMAGES+MAX_IMAGES) //Knightmare- was MAX_MODELS { if (cl.refresh_prepped) cl.image_precache[i-CS_IMAGES] = R_DrawFindPic (cl.configstrings[i]); } else if (i >= CS_PLAYERSKINS && i < CS_PLAYERSKINS+MAX_CLIENTS) { if (cl.refresh_prepped && strcmp(olds, s)) CL_ParseClientinfo (i-CS_PLAYERSKINS); } else if (i >= CS_ITEMS && i < CS_ITEMS + MAX_ITEMS) { int j; int item = i - CS_ITEMS; int32_t token; Com_sprintf (scratch, sizeof(scratch), "use %s", cl.configstrings[i]); token = Q_STLookup(&key_table, scratch); cl.inventorykey[item] = -1; if (token >= 0) { for (j=0; j<MAX_KEYEVENTS; j++) { if (keytokens[j] == token) { cl.inventorykey[item] = j; break; } } } } } //end Knightmare }
struct model_s * S_RegisterSexedModel(entity_state_t *ent, char *base) { int n; char *p; struct model_s *md2; char model[MAX_QPATH]; char buffer[MAX_QPATH]; /* determine what model the client is using */ model[0] = 0; n = CS_PLAYERSKINS + ent->number - 1; if (cl.configstrings[n][0]) { p = strchr(cl.configstrings[n], '\\'); if (p) { p += 1; strcpy(model, p); p = strchr(model, '/'); if (p) { *p = 0; } } } /* if we can't figure it out, they're male */ if (!model[0]) { strcpy(model, "male"); } Com_sprintf(buffer, sizeof(buffer), "players/%s/%s", model, base + 1); md2 = R_RegisterModel(buffer); if (!md2) { /* not found, try default weapon model */ Com_sprintf(buffer, sizeof(buffer), "players/%s/weapon.md2", model); md2 = R_RegisterModel(buffer); if (!md2) { /* no, revert to the male model */ Com_sprintf(buffer, sizeof(buffer), "players/%s/%s", "male", base + 1); md2 = R_RegisterModel(buffer); if (!md2) { /* last try, default male weapon.md2 */ Com_sprintf(buffer, sizeof(buffer), "players/male/weapon.md2"); md2 = R_RegisterModel(buffer); } } } return md2; }
void CLH2_CreateStreamChain( int ent, int tag, int flags, int skin, int duration, const vec3_t source, const vec3_t dest ) { qhandle_t models[ 4 ]; models[ 0 ] = R_RegisterModel( "models/stchain.mdl" ); models[ 1 ] = models[ 2 ] = models[ 3 ] = 0; CLH2_CreateStream( H2TE_STREAM_CHAIN, ent, tag, flags, skin, duration, source, dest, models ); }
qboolean PlayerConfig_MenuInit (void) { extern cvar_t *name; extern cvar_t *team; extern cvar_t *skin; char currentdirectory[1024]; char currentskin[1024]; char scratch[MAX_QPATH]; int i = 0; int y = 0; int currentdirectoryindex = 0; int currentskinindex = 0; cvar_t *hand = Cvar_Get( "hand", "0", CVAR_USERINFO | CVAR_ARCHIVE ); static const char *handedness[] = { "right", "left", "center", 0 }; PlayerConfig_ScanDirectories (); if (s_numplayermodels == 0) return false; if ( hand->value < 0 || hand->value > 2 ) Cvar_SetValue( "hand", 0 ); // strncpy( currentdirectory, skin->string ); Q_strncpyz( currentdirectory, skin->string, sizeof(currentdirectory) ); if ( strchr( currentdirectory, '/' ) ) { // strncpy( currentskin, strchr( currentdirectory, '/' ) + 1 ); Q_strncpyz( currentskin, strchr( currentdirectory, '/' ) + 1, sizeof(currentskin) ); *strchr( currentdirectory, '/' ) = 0; } else if ( strchr( currentdirectory, '\\' ) ) { // strncpy( currentskin, strchr( currentdirectory, '\\' ) + 1 ); Q_strncpyz( currentskin, strchr( currentdirectory, '\\' ) + 1, sizeof(currentskin) ); *strchr( currentdirectory, '\\' ) = 0; } else { // strncpy( currentdirectory, "male" ); // strncpy( currentskin, "grunt" ); Q_strncpyz( currentdirectory, "male", sizeof(currentdirectory) ); Q_strncpyz( currentskin, "grunt", sizeof(currentskin) ); } qsort( s_pmi, s_numplayermodels, sizeof( s_pmi[0] ), pmicmpfnc ); memset( s_pmnames, 0, sizeof( s_pmnames ) ); for ( i = 0; i < s_numplayermodels; i++ ) { s_pmnames[i] = s_pmi[i].displayname; if ( Q_stricmp( s_pmi[i].directory, currentdirectory ) == 0 ) { int j; currentdirectoryindex = i; for ( j = 0; j < s_pmi[i].nskins; j++ ) { if ( Q_stricmp( s_pmi[i].skindisplaynames[j], currentskin ) == 0 ) { currentskinindex = j; break; } } } } s_player_config_menu.x = SCREEN_WIDTH*0.5 - 210; s_player_config_menu.y = SCREEN_HEIGHT*0.5 - 70; s_player_config_menu.nitems = 0; s_player_name_field.generic.type = MTYPE_FIELD; s_player_name_field.generic.flags = QMF_LEFT_JUSTIFY; s_player_name_field.generic.name = "name"; s_player_name_field.generic.callback = 0; s_player_name_field.generic.x = -MENU_FONT_SIZE; s_player_name_field.generic.y = y; s_player_name_field.length = 20; s_player_name_field.visible_length = 20; Q_strncpyz( s_player_name_field.buffer, name->string, sizeof(s_player_name_field.buffer) ); s_player_name_field.cursor = strlen( name->string ); s_player_model_title.generic.type = MTYPE_SEPARATOR; s_player_model_title.generic.flags = QMF_LEFT_JUSTIFY; s_player_model_title.generic.name = "model"; s_player_model_title.generic.x = -MENU_FONT_SIZE; s_player_model_title.generic.y = y += 3*MENU_LINE_SIZE; s_player_model_box.generic.type = MTYPE_SPINCONTROL; s_player_model_box.generic.x = -7*MENU_FONT_SIZE; s_player_model_box.generic.y = y += MENU_LINE_SIZE; s_player_model_box.generic.callback = ModelCallback; s_player_model_box.generic.cursor_offset = -6*MENU_FONT_SIZE; s_player_model_box.curvalue = currentdirectoryindex; s_player_model_box.itemnames = s_pmnames; s_player_skin_title.generic.type = MTYPE_SEPARATOR; s_player_skin_title.generic.flags = QMF_LEFT_JUSTIFY; s_player_skin_title.generic.name = "skin"; s_player_skin_title.generic.x = -2*MENU_FONT_SIZE; s_player_skin_title.generic.y = y += 2*MENU_LINE_SIZE; s_player_skin_box.generic.type = MTYPE_SPINCONTROL; s_player_skin_box.generic.x = -7*MENU_FONT_SIZE; s_player_skin_box.generic.y = y += MENU_LINE_SIZE; s_player_skin_box.generic.name = 0; s_player_skin_box.generic.callback = SkinCallback; // Knightmare added, was 0 s_player_skin_box.generic.cursor_offset = -6*MENU_FONT_SIZE; s_player_skin_box.curvalue = currentskinindex; s_player_skin_box.itemnames = s_pmi[currentdirectoryindex].skindisplaynames; s_player_skin_box.generic.flags |= QMF_SKINLIST; s_player_hand_title.generic.type = MTYPE_SEPARATOR; s_player_hand_title.generic.flags = QMF_LEFT_JUSTIFY; s_player_hand_title.generic.name = "handedness"; s_player_hand_title.generic.x = 4*MENU_FONT_SIZE; s_player_hand_title.generic.y = y += 2*MENU_LINE_SIZE; s_player_handedness_box.generic.type = MTYPE_SPINCONTROL; s_player_handedness_box.generic.x = -7*MENU_FONT_SIZE; s_player_handedness_box.generic.y = y += MENU_LINE_SIZE; s_player_handedness_box.generic.name = 0; s_player_handedness_box.generic.cursor_offset = -6*MENU_FONT_SIZE; s_player_handedness_box.generic.callback = HandednessCallback; s_player_handedness_box.curvalue = Cvar_VariableValue( "hand" ); s_player_handedness_box.itemnames = handedness; for (i = 0; i < sizeof(rate_tbl) / sizeof(*rate_tbl) - 1; i++) if (Cvar_VariableValue("rate") == rate_tbl[i]) break; s_player_rate_title.generic.type = MTYPE_SEPARATOR; s_player_rate_title.generic.flags = QMF_LEFT_JUSTIFY; s_player_rate_title.generic.name = "connect speed"; s_player_rate_title.generic.x = 7*MENU_FONT_SIZE; s_player_rate_title.generic.y = y += 2*MENU_LINE_SIZE; s_player_rate_box.generic.type = MTYPE_SPINCONTROL; s_player_rate_box.generic.x = -7*MENU_FONT_SIZE; s_player_rate_box.generic.y = y += MENU_LINE_SIZE; s_player_rate_box.generic.name = 0; s_player_rate_box.generic.cursor_offset = -6*MENU_FONT_SIZE; s_player_rate_box.generic.callback = RateCallback; s_player_rate_box.curvalue = i; s_player_rate_box.itemnames = rate_names; s_player_back_action.generic.type = MTYPE_ACTION; s_player_back_action.generic.name = "back to multiplayer"; s_player_back_action.generic.flags = QMF_LEFT_JUSTIFY; s_player_back_action.generic.x = -5*MENU_FONT_SIZE; s_player_back_action.generic.y = y += 2*MENU_LINE_SIZE; s_player_back_action.generic.statusbar = NULL; s_player_back_action.generic.callback = UI_BackMenu; // only register model and skin on starup or when changed Com_sprintf( scratch, sizeof( scratch ), "players/%s/tris.md2", s_pmi[s_player_model_box.curvalue].directory ); playermodel = R_RegisterModel( scratch ); Com_sprintf( scratch, sizeof( scratch ), "players/%s/%s.pcx", s_pmi[s_player_model_box.curvalue].directory, s_pmi[s_player_model_box.curvalue].skindisplaynames[s_player_skin_box.curvalue] ); playerskin = R_RegisterSkin( scratch ); // show current weapon model (if any) if (currentweaponmodel && strlen(currentweaponmodel)) { Com_sprintf( scratch, sizeof( scratch ), "players/%s/%s", s_pmi[s_player_model_box.curvalue].directory, currentweaponmodel ); weaponmodel = R_RegisterModel( scratch ); if (!weaponmodel) { Com_sprintf( scratch, sizeof( scratch ), "players/%s/weapon.md2", s_pmi[s_player_model_box.curvalue].directory ); weaponmodel = R_RegisterModel( scratch ); } } else { Com_sprintf( scratch, sizeof( scratch ), "players/%s/weapon.md2", s_pmi[s_player_model_box.curvalue].directory ); weaponmodel = R_RegisterModel( scratch ); } Menu_AddItem( &s_player_config_menu, &s_player_name_field ); Menu_AddItem( &s_player_config_menu, &s_player_model_title ); Menu_AddItem( &s_player_config_menu, &s_player_model_box ); if ( s_player_skin_box.itemnames ) { Menu_AddItem( &s_player_config_menu, &s_player_skin_title ); Menu_AddItem( &s_player_config_menu, &s_player_skin_box ); } Menu_AddItem( &s_player_config_menu, &s_player_hand_title ); Menu_AddItem( &s_player_config_menu, &s_player_handedness_box ); Menu_AddItem( &s_player_config_menu, &s_player_rate_title ); Menu_AddItem( &s_player_config_menu, &s_player_rate_box ); Menu_AddItem( &s_player_config_menu, &s_player_back_action ); return true; }
/* ================ CL_ParseConfigString ================ */ void CL_ParseConfigString (sizebuf_t *msg) { int i, length; char *s; char olds[MAX_QPATH]; i = MSG_ReadShort (msg); if ((unsigned)i >= MAX_CONFIGSTRINGS) Com_Error (ERR_DROP, "configstring > MAX_CONFIGSTRINGS"); Q_strncpyz (olds, cl.configstrings[i], sizeof(olds)); s = MSG_ReadString(msg); length = strlen(s); if (i != CS_NAME && i < CS_GENERAL) { if (i >= CS_STATUSBAR && i < CS_AIRACCEL) { Q_strncpyz(cl.configstrings[i], s, MAX_QPATH * (CS_AIRACCEL - i)); } else { if (length >= MAX_QPATH) Com_Printf ("WARNING: Configstring %d of length %d exceeds MAX_QPATH.\n", i, length); Q_strncpyz(cl.configstrings[i], s, MAX_QPATH); } } else { Q_strncpyz(cl.configstrings[i], s, MAX_QPATH * (MAX_CONFIGSTRINGS - i)); } // do something apropriate if(i == CS_AIRACCEL) { cl.pmp.airaccelerate = atoi(cl.configstrings[CS_AIRACCEL]) ? true : false; } else if (i >= CS_LIGHTS && i < CS_LIGHTS+MAX_LIGHTSTYLES) { CL_SetLightstyle (i - CS_LIGHTS); } else if (i == CS_CDTRACK) { #ifdef CD_AUDIO if (cl.refresh_prepped) CDAudio_Play (atoi(cl.configstrings[CS_CDTRACK]), true); #endif } else if (i >= CS_MODELS && i < CS_MODELS+MAX_MODELS) { if( i == CS_MODELS + 1 ) { if( length > 9 ) { Q_strncpyz( cls.mapname, s + 5, sizeof( cls.mapname ) ); // skip "maps/" cls.mapname[strlen( cls.mapname ) - 4] = 0; // cut off ".bsp" } } if (cl.refresh_prepped) { cl.model_draw[i-CS_MODELS] = R_RegisterModel (cl.configstrings[i]); if (cl.configstrings[i][0] == '*') cl.model_clip[i-CS_MODELS] = CM_InlineModel (cl.configstrings[i]); else cl.model_clip[i-CS_MODELS] = NULL; } } else if (i >= CS_SOUNDS && i < CS_SOUNDS+MAX_MODELS) { if (cl.refresh_prepped) cl.sound_precache[i-CS_SOUNDS] = S_RegisterSound (cl.configstrings[i]); } else if (i >= CS_IMAGES && i < CS_IMAGES+MAX_MODELS) { if (cl.refresh_prepped) cl.image_precache[i-CS_IMAGES] = Draw_FindPic (cl.configstrings[i]); } else if (i == CS_MAXCLIENTS) { cl.maxclients = atoi(cl.configstrings[CS_MAXCLIENTS]); clamp(cl.maxclients, 0, MAX_CLIENTS); } else if (i >= CS_PLAYERSKINS && i < CS_PLAYERSKINS+MAX_CLIENTS) { if (cl.refresh_prepped && strcmp(olds, s)) CL_ParseClientinfo (i-CS_PLAYERSKINS); } }
/* ================ CL_LoadClientinfo ================ */ void CL_LoadClientinfo (clientinfo_t *ci, char *s) { int i = 0; char *t; char model_name[MAX_QPATH]; char skin_name[MAX_QPATH]; char model_filename[MAX_QPATH]; char skin_filename[MAX_QPATH]; char weapon_filename[MAX_QPATH]; Q_strncpyz (ci->cinfo, s, sizeof(ci->cinfo)); // isolate the player's name Q_strncpyz (ci->name, s, sizeof(ci->name)); t = strchr(s, '\\'); if (t) { if (t - s >= sizeof(ci->name)-1) { i = -1; } else { ci->name[t-s] = 0; s = t+1; } } t = s; while (*t) { if (*t <= 32) { i = -1; break; } t++; } if (cl_noskins->integer || *s == 0 || i == -1) { strcpy (model_filename, "players/male/tris.md2"); strcpy (weapon_filename, "players/male/weapon.md2"); strcpy (skin_filename, "players/male/grunt.pcx"); strcpy (ci->iconname, "/players/male/grunt_i.pcx"); ci->model = R_RegisterModel (model_filename); memset(ci->weaponmodel, 0, sizeof(ci->weaponmodel)); ci->weaponmodel[0] = R_RegisterModel (weapon_filename); ci->skin = R_RegisterSkin (skin_filename); ci->icon = Draw_FindPic (ci->iconname); } else { // isolate the model name Q_strncpyz (model_name, s, sizeof(model_name)); t = strchr(model_name, '/'); if (!t) t = strchr(model_name, '\\'); if (!t) { memcpy (model_name, "male\0grunt\0\0\0\0\0\0", 16); s = "male\\grunt\0"; } else { *t = 0; } // isolate the skin name Q_strncpyz(skin_name, s + strlen(model_name) + 1, sizeof(skin_name)); // model file Com_sprintf (model_filename, sizeof(model_filename), "players/%s/tris.md2", model_name); ci->model = R_RegisterModel (model_filename); if (!ci->model) { strcpy(model_name, "male"); strcpy(model_filename, "players/male/tris.md2"); ci->model = R_RegisterModel (model_filename); } // skin file Com_sprintf (skin_filename, sizeof(skin_filename), "players/%s/%s.pcx", model_name, skin_name); ci->skin = R_RegisterSkin (skin_filename); // if we don't have the skin and the model wasn't male, // see if the male has it (this is for CTF's skins) if (!ci->skin && Q_stricmp(model_name, "male")) { // change model to male strcpy(model_name, "male"); strcpy(model_filename, "players/male/tris.md2"); ci->model = R_RegisterModel (model_filename); // see if the skin exists for the male model Com_sprintf (skin_filename, sizeof(skin_filename), "players/%s/%s.pcx", model_name, skin_name); ci->skin = R_RegisterSkin (skin_filename); } // if we still don't have a skin, it means that the male model didn't have // it, so default to grunt if (!ci->skin) { // see if the skin exists for the male model Com_sprintf (skin_filename, sizeof(skin_filename), "players/%s/grunt.pcx", model_name); ci->skin = R_RegisterSkin (skin_filename); } // weapon file for (i = 0; i < num_cl_weaponmodels; i++) { Com_sprintf (weapon_filename, sizeof(weapon_filename), "players/%s/%s", model_name, cl_weaponmodels[i]); ci->weaponmodel[i] = R_RegisterModel(weapon_filename); if (!ci->weaponmodel[i] && strcmp(model_name, "cyborg") == 0) { // try male Com_sprintf (weapon_filename, sizeof(weapon_filename), "players/male/%s", cl_weaponmodels[i]); ci->weaponmodel[i] = R_RegisterModel(weapon_filename); } if (!cl_vwep->integer) break; // only one when vwep is off } // icon file Com_sprintf (ci->iconname, sizeof(ci->iconname), "/players/%s/%s_i.pcx", model_name, skin_name); ci->icon = Draw_FindPic (ci->iconname); } // must have loaded all data types to be valud if (!ci->skin || !ci->icon || !ci->model || !ci->weaponmodel[0]) { ci->skin = NULL; ci->icon = NULL; ci->model = NULL; ci->weaponmodel[0] = NULL; return; } }
/* ================ CL_LoadClientinfo ================ */ void CL_LoadClientinfo (clientinfo_t *ci, char *s) { int32_t i; char *t; char model_name[MAX_QPATH]; char skin_name[MAX_QPATH]; char model_filename[MAX_QPATH]; char skin_filename[MAX_QPATH]; char weapon_filename[MAX_QPATH]; strncpy(ci->cinfo, s, sizeof(ci->cinfo)); ci->cinfo[sizeof(ci->cinfo)-1] = 0; // isolate the player's name strncpy(ci->name, s, sizeof(ci->name)); ci->name[sizeof(ci->name)-1] = 0; t = strstr (s, "\\"); if (t) { ci->name[t-s] = 0; s = t+1; } if (cl_noskins->value || *s == 0) { Com_sprintf (model_filename, sizeof(model_filename), "players/male/tris.md2"); Com_sprintf (weapon_filename, sizeof(weapon_filename), "players/male/weapon.md2"); Com_sprintf (skin_filename, sizeof(skin_filename), "players/male/grunt.pcx"); Com_sprintf (ci->iconname, sizeof(ci->iconname), "/players/male/grunt_i.pcx"); ci->model = R_RegisterModel (model_filename); memset(ci->weaponmodel, 0, sizeof(ci->weaponmodel)); ci->weaponmodel[0] = R_RegisterModel (weapon_filename); ci->skin = R_RegisterSkin (skin_filename); ci->icon = R_DrawFindPic (ci->iconname); } else { // isolate the model name strcpy (model_name, s); t = strstr(model_name, "/"); if (!t) t = strstr(model_name, "\\"); if (!t) t = model_name; *t = 0; // isolate the skin name strcpy (skin_name, s + strlen(model_name) + 1); // model file Com_sprintf (model_filename, sizeof(model_filename), "players/%s/tris.md2", model_name); ci->model = R_RegisterModel (model_filename); if (!ci->model) { strcpy(model_name, "male"); Com_sprintf (model_filename, sizeof(model_filename), "players/male/tris.md2"); ci->model = R_RegisterModel (model_filename); } // skin file Com_sprintf (skin_filename, sizeof(skin_filename), "players/%s/%s.pcx", model_name, skin_name); ci->skin = R_RegisterSkin (skin_filename); // if we don't have the skin and the model wasn't male, // see if the male has it (this is for CTF's skins) if (!ci->skin && Q_strcasecmp(model_name, "male")) { // change model to male strcpy(model_name, "male"); Com_sprintf (model_filename, sizeof(model_filename), "players/male/tris.md2"); ci->model = R_RegisterModel (model_filename); // see if the skin exists for the male model Com_sprintf (skin_filename, sizeof(skin_filename), "players/%s/%s.pcx", model_name, skin_name); ci->skin = R_RegisterSkin (skin_filename); } // if we still don't have a skin, it means that the male model didn't have // it, so default to grunt if (!ci->skin) { // see if the skin exists for the male model Com_sprintf (skin_filename, sizeof(skin_filename), "players/%s/grunt.pcx", model_name, skin_name); ci->skin = R_RegisterSkin (skin_filename); } // weapon file for (i = 0; i < num_cl_weaponmodels; i++) { Com_sprintf (weapon_filename, sizeof(weapon_filename), "players/%s/%s", model_name, cl_weaponmodels[i]); ci->weaponmodel[i] = R_RegisterModel(weapon_filename); if (!ci->weaponmodel[i] && strcmp(model_name, "cyborg") == 0) { // try male Com_sprintf (weapon_filename, sizeof(weapon_filename), "players/male/%s", cl_weaponmodels[i]); ci->weaponmodel[i] = R_RegisterModel(weapon_filename); } if (!cl_vwep->value) break; // only one when vwep is off } // icon file Com_sprintf (ci->iconname, sizeof(ci->iconname), "/players/%s/%s_i.pcx", model_name, skin_name); ci->icon = R_DrawFindPic (ci->iconname); } // must have loaded all data types to be valud if (!ci->skin || !ci->icon || !ci->model || !ci->weaponmodel[0]) { ci->skin = NULL; ci->icon = NULL; ci->model = NULL; ci->weaponmodel[0] = NULL; return; } }
//** as published by the Free Software Foundation; either version 3 //** of the License, or (at your option) any later version. //** //** This program is distributed in the hope that it will be useful, //** but WITHOUT ANY WARRANTY; without even the implied warranty of //** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //** included (gnu.txt) GNU General Public License for more details. //** //************************************************************************** #include "local.h" #include "../../../common/common_defs.h" static void CLH2_InitChunkGlass( float final, qhandle_t* model ) { if ( final < 0.20 ) { *model = R_RegisterModel( "models/shard1.mdl" ); } else if ( final < 0.40 ) { *model = R_RegisterModel( "models/shard2.mdl" ); } else if ( final < 0.60 ) { *model = R_RegisterModel( "models/shard3.mdl" ); } else if ( final < 0.80 ) { *model = R_RegisterModel( "models/shard4.mdl" ); } else { *model = R_RegisterModel( "models/shard5.mdl" ); } } static void CLH2_InitChunkClearGlass( float final, qhandle_t* model, int* skinNum, int* drawFlags ) { CLH2_InitChunkGlass( final, model ); *skinNum = 1; *drawFlags |= H2DRF_TRANSLUCENT;
// Call before entering a new level, or after changing dlls void CLQ2_PrepRefresh() { if ( !cl.q2_configstrings[ Q2CS_MODELS + 1 ][ 0 ] ) { return; // no map loaded } // let the render dll load the map char mapname[ 32 ]; String::Cpy( mapname, cl.q2_configstrings[ Q2CS_MODELS + 1 ] + 5 ); // skip "maps/" mapname[ String::Length( mapname ) - 4 ] = 0; // cut off ".bsp" // register models, pics, and skins common->Printf( "Map: %s\r", mapname ); SCR_UpdateScreen(); R_BeginRegistrationAndLoadWorld( mapname ); common->Printf( " \r" ); // precache status bar pics common->Printf( "pics\r" ); SCR_UpdateScreen(); SCRQ2_InitHudShaders(); SCR_TouchPics(); common->Printf( " \r" ); CLQ2_RegisterTEntModels(); clq2_num_weaponmodels = 1; String::Cpy( clq2_weaponmodels[ 0 ], "weapon.md2" ); for ( int i = 1; i < MAX_MODELS_Q2 && cl.q2_configstrings[ Q2CS_MODELS + i ][ 0 ]; i++ ) { char name[ MAX_QPATH ]; String::Cpy( name, cl.q2_configstrings[ Q2CS_MODELS + i ] ); name[ 37 ] = 0; // never go beyond one line if ( name[ 0 ] != '*' ) { common->Printf( "%s\r", name ); } SCR_UpdateScreen(); if ( name[ 0 ] == '#' ) { // special player weapon model if ( clq2_num_weaponmodels < MAX_CLIENTWEAPONMODELS_Q2 ) { String::NCpy( clq2_weaponmodels[ clq2_num_weaponmodels ], cl.q2_configstrings[ Q2CS_MODELS + i ] + 1, sizeof ( clq2_weaponmodels[ clq2_num_weaponmodels ] ) - 1 ); clq2_num_weaponmodels++; } } else { cl.model_draw[ i ] = R_RegisterModel( cl.q2_configstrings[ Q2CS_MODELS + i ] ); if ( name[ 0 ] == '*' ) { cl.model_clip[ i ] = CM_InlineModel( String::Atoi( cl.q2_configstrings[ Q2CS_MODELS + i ] + 1 ) ); } else { cl.model_clip[ i ] = 0; } } if ( name[ 0 ] != '*' ) { common->Printf( " \r" ); } } common->Printf( "images\r" ); SCR_UpdateScreen(); for ( int i = 1; i < MAX_IMAGES_Q2 && cl.q2_configstrings[ Q2CS_IMAGES + i ][ 0 ]; i++ ) { cl.q2_image_precache[ i ] = CLQ2_RegisterPicShader( cl.q2_configstrings[ Q2CS_IMAGES + i ] ); } common->Printf( " \r" ); for ( int i = 0; i < MAX_CLIENTS_Q2; i++ ) { if ( !cl.q2_configstrings[ Q2CS_PLAYERSKINS + i ][ 0 ] ) { continue; } common->Printf( "client %i\r", i ); SCR_UpdateScreen(); CLQ2_ParseClientinfo( i ); common->Printf( " \r" ); } CLQ2_LoadClientinfo( &cl.q2_baseclientinfo, "unnamed\\male/grunt" ); // set sky textures and speed common->Printf( "sky\r" ); SCR_UpdateScreen(); float rotate = String::Atof( cl.q2_configstrings[ Q2CS_SKYROTATE ] ); vec3_t axis; sscanf( cl.q2_configstrings[ Q2CS_SKYAXIS ], "%f %f %f", &axis[ 0 ], &axis[ 1 ], &axis[ 2 ] ); R_SetSky( cl.q2_configstrings[ Q2CS_SKY ], rotate, axis ); common->Printf( " \r" ); R_EndRegistration(); // clear any lines of console text Con_ClearNotify(); SCR_UpdateScreen(); cl.q2_refresh_prepped = true; // start the cd track CDAudio_Play( String::Atoi( cl.q2_configstrings[ Q2CS_CDTRACK ] ), true ); }
/* ================= CL_RegisterTEntModels ================= */ void CL_RegisterTEntModels (void) { cl_mod_explode = R_RegisterModel ("models/objects/explode/tris.md2"); cl_mod_smoke = R_RegisterModel ("models/objects/smoke/tris.md2"); cl_mod_flash = R_RegisterModel ("models/objects/flash/tris.md2"); cl_mod_parasite_segment = R_RegisterModel ("models/monsters/parasite/segment/tris.md2"); cl_mod_grapple_cable = R_RegisterModel ("models/ctf/segment/tris.md2"); cl_mod_parasite_tip = R_RegisterModel ("models/monsters/parasite/tip/tris.md2"); cl_mod_explo4 = R_RegisterModel ("models/objects/r_explode/tris.md2"); cl_mod_bfg_explo = R_RegisterModel ("sprites/s_bfg2.sp2"); cl_mod_powerscreen = R_RegisterModel ("models/items/armor/effect/tris.md2"); /* R_RegisterModel ("models/objects/laser/tris.md2"); R_RegisterModel ("models/objects/grenade2/tris.md2"); R_RegisterModel ("models/weapons/v_machn/tris.md2"); R_RegisterModel ("models/weapons/v_handgr/tris.md2"); R_RegisterModel ("models/weapons/v_shotg2/tris.md2"); R_RegisterModel ("models/objects/gibs/bone/tris.md2"); R_RegisterModel ("models/objects/gibs/sm_meat/tris.md2"); R_RegisterModel ("models/objects/gibs/bone2/tris.md2"); Draw_FindPic ("w_machinegun"); Draw_FindPic ("a_bullets"); Draw_FindPic ("i_health"); Draw_FindPic ("a_grenades"); */ //ROGUE #ifdef ROGUE cl_mod_explo4_big = R_RegisterModel ("models/objects/r_explode2/tris.md2"); cl_mod_lightning = R_RegisterModel ("models/proj/lightning/tris.md2"); cl_mod_heatbeam = R_RegisterModel ("models/proj/beam/tris.md2"); cl_mod_monster_heatbeam = R_RegisterModel ("models/proj/widowbeam/tris.md2"); #endif //ROGUE }