static void MakeSkyVec( float s, float t, int axis, vec2_t st, vec3_t xyz ) { // 1 = s, 2 = t, 3 = zfar static const int st_to_vec[6][3] = { { 3, -1, 2 }, { -3, 1, 2 }, { 1, 3, 2 }, { -1, -3, 2 }, { -2, -1, 3 }, // 0 degrees yaw, look straight up { 2, -1, -3 } // look straight down }; vec3_t b; float boxSize = backEnd.viewParms.zFar / 1.75; // div sqrt(3) b[0] = boxSize * s; b[1] = boxSize * t; b[2] = boxSize; for (int i = 0; i < 3; ++i) { int k = st_to_vec[axis][i]; xyz[i] = (k < 0) ? -b[-k - 1] : b[k - 1]; } // convert our -1:1 range (and inverted t) into GL TCs if ( st ) { st[0] = Com_Clamp( 0, 1, (s+1) * 0.5 ); st[1] = 1.0 - Com_Clamp( 0, 1, (t+1) * 0.5 ); } }
static void DrawSkyBox( const shader_t* shader ) { // Com_Memset( s_skyTexCoords, 0, sizeof( s_skyTexCoords ) ); for (int i = 0; i < 6; ++i) { int sky_mins_subd[2], sky_maxs_subd[2]; if ( ( sky_mins_st[i][0] >= sky_maxs_st[i][0] ) || ( sky_mins_st[i][1] >= sky_maxs_st[i][1] ) ) { continue; } sky_mins_subd[0] = HALF_SKY_SUBDIVISIONS * Com_Clamp( -1, 1, sky_mins_st[i][0] ); sky_mins_subd[1] = HALF_SKY_SUBDIVISIONS * Com_Clamp( -1, 1, sky_mins_st[i][1] ); sky_maxs_subd[0] = HALF_SKY_SUBDIVISIONS * Com_Clamp( -1, 1, sky_maxs_st[i][0] ); sky_maxs_subd[1] = HALF_SKY_SUBDIVISIONS * Com_Clamp( -1, 1, sky_maxs_st[i][1] ); // // iterate through the subdivisions // for (int t = sky_mins_subd[1]+HALF_SKY_SUBDIVISIONS; t <= sky_maxs_subd[1]+HALF_SKY_SUBDIVISIONS; ++t) { for (int s = sky_mins_subd[0]+HALF_SKY_SUBDIVISIONS; s <= sky_maxs_subd[0]+HALF_SKY_SUBDIVISIONS; ++s) { MakeSkyVec( ( s - HALF_SKY_SUBDIVISIONS ) / ( float ) HALF_SKY_SUBDIVISIONS, ( t - HALF_SKY_SUBDIVISIONS ) / ( float ) HALF_SKY_SUBDIVISIONS, i, s_skyTexCoords[t][s], s_skyPoints[t][s] ); } } DrawSkySide( shader->sky.outerbox[i], sky_mins_subd, sky_maxs_subd ); } }
/* ====================== S_StartBackgroundTrack ====================== */ void S_Base_StartBackgroundTrack( const char *intro, const char *loop, float volume, float loopVolume ) { if ( !intro ) { intro = ""; } if ( !loop || !loop[0] ) { loop = intro; } Com_DPrintf( "S_StartBackgroundTrack( %s, %s, %f, %f )\n", intro, loop, volume, loopVolume ); if(!*intro) { S_Base_StopBackgroundTrack(); return; } s_backgroundVolume = Com_Clamp(0, 10, volume); s_backgroundLoopVolume = Com_Clamp(0, 10, loopVolume); if( !loop ) { s_backgroundLoop[0] = 0; } else { Q_strncpyz( s_backgroundLoop, loop, sizeof( s_backgroundLoop ) ); } S_OpenBackgroundStream( intro ); }
static void Preferences_SetMenuItems( void ) { float textScale; s_preferences.crosshair.curvalue = (int)trap_Cvar_VariableValue( "cg_drawCrosshair" ) % NUM_CROSSHAIRS; s_preferences.crosshairhealth.curvalue = trap_Cvar_VariableValue( "cg_crosshairHealth" ) != 0; s_preferences.viewbob.curvalue = trap_Cvar_VariableValue( "cg_viewbob" ) != 0; s_preferences.simpleitems.curvalue = trap_Cvar_VariableValue( "cg_simpleItems" ) != 0; s_preferences.brass.curvalue = trap_Cvar_VariableValue( "cg_brassTime" ) != 0; s_preferences.wallmarks.curvalue = trap_Cvar_VariableValue( "cg_marks" ) != 0; s_preferences.identifytarget.curvalue = trap_Cvar_VariableValue( "cg_drawCrosshairNames" ) != 0; s_preferences.dynamiclights.curvalue = trap_Cvar_VariableValue( "r_dynamiclight" ) != 0; s_preferences.highqualitysky.curvalue = trap_Cvar_VariableValue ( "r_fastsky" ) == 0; s_preferences.synceveryframe.curvalue = trap_Cvar_VariableValue( "r_finish" ) != 0; s_preferences.forcemodel.curvalue = trap_Cvar_VariableValue( "cg_forcemodel" ) != 0; s_preferences.drawteamoverlay.curvalue = Com_Clamp( 0, 3, trap_Cvar_VariableValue( "cg_drawTeamOverlay" ) ); s_preferences.allowdownload.curvalue = trap_Cvar_VariableValue( "cl_allowDownload" ) != 0; s_preferences.splitvertical.curvalue = trap_Cvar_VariableValue( "cg_splitviewVertical" ) != 0; textScale = trap_Cvar_VariableValue( "cg_splitviewTextScale" ); if ( textScale <= 1.0f ) { s_preferences.splittextsize.curvalue = 0; } else if ( textScale <= 1.5f ) { s_preferences.splittextsize.curvalue = 1; } else { s_preferences.splittextsize.curvalue = 2; } s_preferences.thirdsize.curvalue = trap_Cvar_VariableValue( "cg_splitviewThirdEqual" ) != 0; }
/* ================= SCR_DrawSpree ================= */ void SCR_DrawSpree(void) { if (cl.snap.ps.persistant[PERS_TEAM] == TEAM_SPECTATOR || cl.snap.ps.pm_type > 4 || cl_paused->value || !cl_drawSpree->integer || cl.snap.ps.clientNum != clc.clientNum || !Cvar_VariableIntegerValue("cg_draw2d")) { return; } int x; int y = 450; int spacing = 2; int size = 20; int width; int max = 12; int i; width = size * cl.spreeCount + spacing * (cl.spreeCount - 1); x = 320 - width / 2; for (i = 0; i < (int)Com_Clamp(0, max, cl.spreeCount); i++) { SCR_DrawNamedPic(x, y, size, size, "skull.tga"); x += spacing + size; } }
/* ================= PunkBuster_Confirm ================= */ static void Punkbuster_ConfirmEnable( bool result ) { if (result) { // trap->SetPbClStatus(1); } g_arenaservers.punkbuster.curvalue = Com_Clamp( 0, 1, cvarSystem->VariableValue( "cl_punkbuster" ) ); }
/* =============== CL_KeyState Returns the fraction of the frame that the key was down =============== */ float CL_KeyState( localPlayer_t *player, kbutton_t *key ) { float digital, analog; CL_KeyStateSeparate( player, key, &digital, &analog ); return Com_Clamp( 0, 1, digital + analog ); }
/* ================= PunkBuster_Confirm ================= */ static void Punkbuster_ConfirmEnable( qboolean result ) { if (result) { trap_SetPbClStatus(1); } g_arenaservers.punkbuster.curvalue = Com_Clamp( 0, 1, trap_Cvar_VariableValue( "cl_punkbuster" ) ); }
/* ================= PlayerSettings_SetMenuItems ================= */ static void PlayerSettings_SetMenuItems(void) { vec3_t viewangles; int c; int h; // name Q_strncpyz(s_playersettings.name.field.buffer, UI_Cvar_VariableString("name"), sizeof(s_playersettings.name.field.buffer)); // effects color c = trap_Cvar_VariableValue("color1") - 1; if (c < 0 || c > 6) { c = 6; } s_playersettings.effects.curvalue = gamecodetoui[c]; // model/skin memset(&s_playersettings.playerinfo, 0, sizeof(playerInfo_t)); viewangles[YAW] = 180 - 30; viewangles[PITCH] = 0; viewangles[ROLL] = 0; UI_PlayerInfo_SetModel(&s_playersettings.playerinfo, UI_Cvar_VariableString("model")); UI_PlayerInfo_SetInfo(&s_playersettings.playerinfo, LEGS_IDLE, TORSO_STAND, viewangles, vec3_origin, WP_MACHINEGUN, qfalse); // handicap h = Com_Clamp(5, 100, trap_Cvar_VariableValue("handicap")); s_playersettings.handicap.curvalue = 20 - h / 5; }
/* ** SetFarClip */ static void SetFarClip( void ) { float farthestCornerDistance = 0; int i; // if not rendering the world (icons, menus, etc) // set a 2k far clip plane if ( tr.refdef.rdflags & RDF_NOWORLDMODEL ) { tr.viewParms.zFar = 2048; return; } // // set far clipping planes dynamically // for ( i = 0; i < 8; i++ ) { vec3_t v; float distance; if ( i & 1 ) { v[0] = tr.viewParms.visBounds[0][0]; } else { v[0] = tr.viewParms.visBounds[1][0]; } if ( i & 2 ) { v[1] = tr.viewParms.visBounds[0][1]; } else { v[1] = tr.viewParms.visBounds[1][1]; } if ( i & 4 ) { v[2] = tr.viewParms.visBounds[0][2]; } else { v[2] = tr.viewParms.visBounds[1][2]; } distance = DistanceSquared(tr.viewParms.or.origin, v); if ( distance > farthestCornerDistance ) { farthestCornerDistance = distance; } } // Bring in the zFar to the distanceCull distance // The sky renders at zFar so need to move it out a little // ...and make sure there is a minimum zfar to prevent problems tr.viewParms.zFar = Com_Clamp(2048.0f, tr.distanceCull * (1.732), sqrtf( farthestCornerDistance )); }
/* ================= StartServer_InGame_Old_Init ================= */ static void StartServer_InGame_Old_Init( void ) { int i, j; qboolean disabled; qboolean init; groupinfo_t* group; int type, t; s_itemcontrols_old.enabled = ingame_enabled_old; s_itemcontrols_old.grouptype = ingame_grouptype_old; // get the cvars currently set for (i = 0; i < ITEM_COUNT; i++) { disabled = (int)Com_Clamp(0, 1, trap_Cvar_VariableValue(va("disable_%s", server_itemlist[i].mapitem))); if (disabled) s_itemcontrols_old.enabled[i] = qfalse; else s_itemcontrols_old.enabled[i] = qtrue; } // all groups are custom by default, just in case a group // doesn't have a master control (we want the control visible and editable) for (i = 0; i < ITEMGROUP_COUNT; i++) { s_itemcontrols_old.grouptype[i] = ALLGROUPS_CUSTOM; } // now scan through the master controls to see how they should be setup for (i = 0; i < masterControl_old_Size; i++) { if (!masterControl_old[i].control) continue; // check each group for a contrary enable state init = qfalse; for (j = 0; j < groupInfo_Size; j++) { group = groupInfo[j].group; if (group->ident != masterControl_old[i].ident) continue; t = StartServer_InGame_Old_FindGroupType(group->itemlist, group->size); if (init) { type = t; init = qfalse; } else { if (t != type) type = ALLGROUPS_CUSTOM; } } s_itemcontrols_old.grouptype[ masterControl_old[i].ident ] = type; } StartServer_BothItemPage_Old_InitControls(); }
/* =============== IN_GetUIMousePosition =============== */ static void IN_GetUIMousePosition( int localPlayerNum, int *x, int *y ) { if( cgvm ) { int pos = VM_Call( cgvm, CG_MOUSE_POSITION, localPlayerNum ); *x = Com_Clamp(0, cls.glconfig.vidWidth - 1, pos & 0xFFFF); *y = Com_Clamp(0, cls.glconfig.vidHeight - 1, ( pos >> 16 ) & 0xFFFF); } else {
static void FillCloudBox( const shader_t* shader, int stage ) { // skybox surfs are ordered RLBFUD, so don't draw clouds on the last one for (int i = 0; i < 5; ++i) { int s, t; int sky_mins_subd[2], sky_maxs_subd[2]; if ( ( sky_mins_st[i][0] >= sky_maxs_st[i][0] ) || ( sky_mins_st[i][1] >= sky_maxs_st[i][1] ) ) { //ri.Printf( PRINT_ALL, "clipped cloudside %i\n", i ); continue; } sky_mins_subd[0] = HALF_SKY_SUBDIVISIONS * Com_Clamp( -1, 1, sky_mins_st[i][0] ); sky_mins_subd[1] = HALF_SKY_SUBDIVISIONS * Com_Clamp( -1, 1, sky_mins_st[i][1] ); sky_maxs_subd[0] = HALF_SKY_SUBDIVISIONS * Com_Clamp( -1, 1, sky_maxs_st[i][0] ); sky_maxs_subd[1] = HALF_SKY_SUBDIVISIONS * Com_Clamp( -1, 1, sky_maxs_st[i][1] ); // // iterate through the subdivisions // for ( t = sky_mins_subd[1]+HALF_SKY_SUBDIVISIONS; t <= sky_maxs_subd[1]+HALF_SKY_SUBDIVISIONS; t++ ) { for ( s = sky_mins_subd[0]+HALF_SKY_SUBDIVISIONS; s <= sky_maxs_subd[0]+HALF_SKY_SUBDIVISIONS; s++ ) { MakeSkyVec( ( s - HALF_SKY_SUBDIVISIONS ) / ( float ) HALF_SKY_SUBDIVISIONS, ( t - HALF_SKY_SUBDIVISIONS ) / ( float ) HALF_SKY_SUBDIVISIONS, i, NULL, s_skyPoints[t][s] ); s_skyTexCoords[t][s][0] = s_cloudTexCoords[i][t][s][0]; s_skyTexCoords[t][s][1] = s_cloudTexCoords[i][t][s][1]; } } // only add indexes for first stage FillCloudySkySide( sky_mins_subd, sky_maxs_subd, (qbool)(stage == 0) ); } }
/* =============== Svcmd_AddBot_f =============== */ void Svcmd_AddBot_f( void ) { float skill; int delay; char name[MAX_TOKEN_CHARS]; char altname[MAX_TOKEN_CHARS]; char string[MAX_TOKEN_CHARS]; char team[MAX_TOKEN_CHARS]; // are bots enabled? if ( !trap_Cvar_VariableIntegerValue( "bot_enable" ) ) { return; } // name trap_Argv( 1, name, sizeof( name ) ); if ( !name[0] ) { trap_Print( "Usage: Addbot <botname> [skill 1-5] [team] [msec delay] [altname]\n" ); return; } // skill trap_Argv( 2, string, sizeof( string ) ); if ( !string[0] ) { skill = 4; } else { skill = Com_Clamp( 1, 5, atof( string ) ); } // team trap_Argv( 3, team, sizeof( team ) ); // delay trap_Argv( 4, string, sizeof( string ) ); if ( !string[0] ) { delay = 0; } else { delay = atoi( string ); } // alternative name trap_Argv( 5, altname, sizeof( altname ) ); G_AddBot( name, skill, team, delay, altname ); // if this was issued during gameplay and we are playing locally, // go ahead and load the bot's media immediately if ( level.time - level.startTime > 1000 && trap_Cvar_VariableIntegerValue( "cl_running" ) ) { trap_SendServerCommand( -1, "loaddefered\n" ); // FIXME: spelled wrong, but not changing for demo } }
static void Preferences_SetMenuItems(void) { s_preferences.crosshair.curvalue = (int)trap_Cvar_VariableValue("cg_drawCrosshair") % NUM_CROSSHAIRS; s_preferences.simpleitems.curvalue = trap_Cvar_VariableValue("cg_simpleItems") != 0; s_preferences.brass.curvalue = trap_Cvar_VariableValue("cg_brassTime") != 0; s_preferences.wallmarks.curvalue = trap_Cvar_VariableValue("cg_marks") != 0; s_preferences.identifytarget.curvalue = trap_Cvar_VariableValue("cg_drawCrosshairNames") != 0; s_preferences.dynamiclights.curvalue = trap_Cvar_VariableValue("r_dynamiclight") != 0; s_preferences.highqualitysky.curvalue = trap_Cvar_VariableValue("r_fastsky") == 0; s_preferences.synceveryframe.curvalue = trap_Cvar_VariableValue("r_finish") != 0; s_preferences.forcemodel.curvalue = trap_Cvar_VariableValue("cg_forcemodel") != 0; s_preferences.drawteamoverlay.curvalue = Com_Clamp(0, 3, trap_Cvar_VariableValue("cg_drawTeamOverlay")); s_preferences.allowdownload.curvalue = trap_Cvar_VariableValue("cl_allowDownload") != 0; }
static void Preferences_SetMenuItems( void ) { float textScale; #ifndef TURTLEARENA s_preferences.crosshair.curvalue = (int)trap_Cvar_VariableValue( "cg_drawCrosshair" ) % NUM_CROSSHAIRS; s_preferences.viewbob.curvalue = trap_Cvar_VariableValue( "cg_viewbob" ) != 0; #endif s_preferences.simpleitems.curvalue = trap_Cvar_VariableValue( "cg_simpleItems" ) != 0; #ifndef TURTLEARENA s_preferences.brass.curvalue = trap_Cvar_VariableValue( "cg_brassTime" ) != 0; #endif s_preferences.wallmarks.curvalue = trap_Cvar_VariableValue( "cg_marks" ) != 0; s_preferences.identifytarget.curvalue = trap_Cvar_VariableValue( "cg_drawCrosshairNames" ) != 0; s_preferences.dynamiclights.curvalue = trap_Cvar_VariableValue( "r_dynamiclight" ) != 0; s_preferences.highqualitysky.curvalue = trap_Cvar_VariableValue ( "r_fastsky" ) == 0; s_preferences.synceveryframe.curvalue = trap_Cvar_VariableValue( "r_finish" ) != 0; #ifdef TURTLEARENA // NO_CGFORCEMODLE s_preferences.forcemodel.curvalue = trap_Cvar_VariableValue( "cg_deferPlayers" ) != 0; #else s_preferences.forcemodel.curvalue = trap_Cvar_VariableValue( "cg_forcemodel" ) != 0; #endif s_preferences.drawteamoverlay.curvalue = Com_Clamp( 0, 3, trap_Cvar_VariableValue( "cg_drawTeamOverlay" ) ); s_preferences.allowdownload.curvalue = trap_Cvar_VariableValue( "cl_allowDownload" ) != 0; s_preferences.splitvertical.curvalue = trap_Cvar_VariableValue( "cg_splitviewVertical" ) != 0; textScale = trap_Cvar_VariableValue( "cg_splitviewTextScale" ); if ( textScale <= 1.0f ) { s_preferences.splittextsize.curvalue = 0; } else if ( textScale <= 1.5f ) { s_preferences.splittextsize.curvalue = 1; } else { s_preferences.splittextsize.curvalue = 2; } s_preferences.atmeffects.curvalue = 2*trap_Cvar_VariableValue( "cg_atmosphericEffects" ); if (s_preferences.atmeffects.curvalue < 0) s_preferences.atmeffects.curvalue = 0; else if (s_preferences.atmeffects.curvalue > 2) s_preferences.atmeffects.curvalue = 2; #ifdef IOQ3ZTM // CONTENT_FILTERING #ifndef NOBLOOD s_preferences.showblood.curvalue = trap_Cvar_VariableValue( "com_blood" ) != 0; #endif #ifndef NOTRATEDM s_preferences.showgibs.curvalue = trap_Cvar_VariableValue( "cg_gibs" ) != 0; #endif #endif }
void FX_LightUpdateRGB(fxLight_t *_self, float frac) { if(!VectorCompare(_self->startRGB, _self->endRGB)) // This changes based on time, so do some sort of magic lerping { // TODO: wave/clamp/nonlinear. BLAH. if(_self->RGBflags & FXTLF_NONLINEAR) { VectorCopy(_self->startRGB, _self->RGB); } else if(_self->RGBflags & FXTLF_LINEAR) { _self->RGB[0] = _self->startRGB[0] + frac * _self->endRGB[0]; _self->RGB[1] = _self->startRGB[1] + frac * _self->endRGB[1]; _self->RGB[2] = _self->startRGB[2] + frac * _self->endRGB[2]; } else { VectorCopy(_self->startRGB, _self->RGB); } } else VectorCopy(_self->startRGB, _self->RGB); #if 0 float invfrac = 1.0f - frac; int i; for(i = 0; i < 3; i++) { _self->RGB[i] = Com_Clamp( 0.0f, 1.0f, ( _self->startRGB[i] * invfrac + _self->endRGB[i] * frac ) ); /* _self->RGB[i] = ( _self->startRGB[i] * invfrac + _self->endRGB[i] * frac ); // Has been explicitely flagged to use the alpha channel if ( !(m_flags & FXF_USE_ALPHA_CHAN) ) { _self->RGB[i] *= _self->alpha; } if (_self->RGB[i] < 0.0f) _self->RGB[i] = 0.0f; if (_self->RGB[i] > 1.0f) _self->RGB[i] = 1.0f; */ } #endif }
void FX_qFlash( centity_t* cent, vec3_t org, int timeIndex ) { trace_t tr; refEntity_t flare; float frac; if ( cg.predictedPlayerState.clientNum != cent->currentState.clientNum ) { CG_Trace( &tr, cg.refdef.vieworg, NULL, NULL, cent->lerpOrigin, cg.predictedPlayerState.clientNum, CONTENTS_SOLID ); if ( tr.fraction != 1 ) { return; } } memset( &flare, 0, sizeof( flare ) ); flare.reType = RT_SPRITE; flare.shaderRGBA[0] = 0xff; flare.shaderRGBA[1] = 0xff; flare.shaderRGBA[2] = 0xff; flare.shaderRGBA[3] = 0xff; flare.data.sprite.rotation = 0; flare.nonNormalizedAxes = qtrue; //needed for effective scaling flare.customShader = cgs.media.qFlashSprite; flare.renderfx |= RF_DEPTHHACK; VectorCopy( org, flare.origin ); //find the basic ratio frac = (float)(cg.time - timeIndex) / (float)( Q_FLASH_TIME ); //apply a sine function to it to make it less linear //calculated using the fine graph prog @ http://math.umn.edu/~garrett/a08/Graph.html frac = ( 0.65f * sin( 4.5f * frac - 0.6f ) + 0.35f ); frac = Com_Clamp( 0.0f, 1.0f, frac ); //CG_Printf( "%f\n", frac ); flare.data.sprite.radius = (float)Q_FLASH_SIZE * frac; trap_R_AddRefEntityToScene( &flare ); }
qboolean SmokeThink( localEntity_t *le ) { vec3_t velocity/*, accel*/; vec3_t origin; vec3_t dir; float speed; int i; VectorCopy( le->data.spawner.dir, dir ); //clamp the smoke vector //Smoke should always go up dir[2] = Com_Clamp( 0.85f, 1.0f, dir[2] ); for ( i = 0; i < 3; i++ ) { velocity[i] = dir[i] + ( 0.2f * crandom()); } VectorMA( le->refEntity.origin, 1, le->data.spawner.dir, origin); //slow down the smoke the smaller it gets //else it scatters too much speed = le->data.spawner.data1 * 2.4; VectorScale( velocity, speed, velocity ); //speed FX_AddSprite( origin, velocity, qfalse, //accel le->data.spawner.data1 + (crandom() * le->data.spawner.data1 * 0.5f ), le->data.spawner.data1 + (crandom() * le->data.spawner.data1), 0.8, 0.0, 16.0f + random() * 45.0f, 0.5f, 7000, cgs.media.smokeShader ); //flags return qtrue; }
/* ================= PlayerSettings_SetMenuItems ================= */ static void PlayerSettings_SetMenuItems( void ) { vec3_t viewangles; int c1, c2, c3; int h; char temp[6]; // name Q_strncpyz( s_playersettings.name.field.buffer, UI_Cvar_VariableString("name"), sizeof(s_playersettings.name.field.buffer) ); // effects color trap_Cvar_VariableStringBuffer( "color1", temp, sizeof(temp) ); c1 = atoi( va( "%c", temp[0] ) ) - 1; c2 = atoi( va( "%c", temp[2] ) ) - 1; c3 = atoi( va( "%c", temp[4] ) ) - 1; if ( c1 > 6 || c1 < 0 ) c1 = 6; if ( c2 > 6 || c2 < 0 ) c2 = 6; if ( c3 > 6 || c3 < 0 ) c3 = 6; s_playersettings.effects.curvalue = gamecodetoui[c1]; s_playersettings.effects2.curvalue = gamecodetoui[c2]; s_playersettings.effects3.curvalue = gamecodetoui[c3]; // model/skin memset( &s_playersettings.playerinfo, 0, sizeof(playerInfo_t) ); viewangles[YAW] = 180 - 30; viewangles[PITCH] = 0; viewangles[ROLL] = 0; UI_PlayerInfo_SetModel( &s_playersettings.playerinfo, UI_Cvar_VariableString( "model" ) ); UI_PlayerInfo_SetInfo( &s_playersettings.playerinfo, LEGS_IDLE, TORSO_STAND, viewangles, vec3_origin, WP_RAILGUN, qfalse ); // handicap h = Com_Clamp( 5, 100, trap_Cvar_VariableValue("handicap") ); s_playersettings.handicap.curvalue = 20 - h / 5; }
/* ================= CG_SizeDown_f Keybinding command ================= */ static void CG_SizeDown_f (void) { // manually clamp here so cvar range warning isn't show trap_Cvar_SetValue("cg_viewsize", Com_Clamp( 30, 100, (int)(cg_viewsize.integer-10) ) ); }
/* ================= ArenaServers_MenuInit ================= */ static void ArenaServers_MenuInit( void ) { int i; int y; static char statusbuffer[MAX_STATUSLENGTH]; // zero set all our globals memset( &g_arenaservers, 0 ,sizeof(arenaservers_t) ); ArenaServers_Cache(); g_arenaservers.menu.fullscreen = true; g_arenaservers.menu.wrapAround = true; g_arenaservers.menu.draw = ArenaServers_MenuDraw; g_arenaservers.menu.key = ArenaServers_MenuKey; g_arenaservers.banner.generic.type = MTYPE_BTEXT; g_arenaservers.banner.generic.flags = QMF_CENTER_JUSTIFY; g_arenaservers.banner.generic.x = 320; g_arenaservers.banner.generic.y = 16; g_arenaservers.banner.string = "ARENA SERVERS"; g_arenaservers.banner.style = UI_CENTER; g_arenaservers.banner.color = color_white; y = 80; g_arenaservers.master.generic.type = MTYPE_SPINCONTROL; g_arenaservers.master.generic.name = "Servers:"; g_arenaservers.master.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.master.generic.callback = ArenaServers_Event; g_arenaservers.master.generic.id = ID_MASTER; g_arenaservers.master.generic.x = 320; g_arenaservers.master.generic.y = y; g_arenaservers.master.itemnames = master_items; y += SMALLCHAR_HEIGHT; g_arenaservers.gametype.generic.type = MTYPE_SPINCONTROL; g_arenaservers.gametype.generic.name = "Game Type:"; g_arenaservers.gametype.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.gametype.generic.callback = ArenaServers_Event; g_arenaservers.gametype.generic.id = ID_GAMETYPE; g_arenaservers.gametype.generic.x = 320; g_arenaservers.gametype.generic.y = y; g_arenaservers.gametype.itemnames = servertype_items; y += SMALLCHAR_HEIGHT; g_arenaservers.sortkey.generic.type = MTYPE_SPINCONTROL; g_arenaservers.sortkey.generic.name = "Sort By:"; g_arenaservers.sortkey.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.sortkey.generic.callback = ArenaServers_Event; g_arenaservers.sortkey.generic.id = ID_SORTKEY; g_arenaservers.sortkey.generic.x = 320; g_arenaservers.sortkey.generic.y = y; g_arenaservers.sortkey.itemnames = sortkey_items; y += SMALLCHAR_HEIGHT; g_arenaservers.showfull.generic.type = MTYPE_RADIOBUTTON; g_arenaservers.showfull.generic.name = "Show Full:"; g_arenaservers.showfull.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.showfull.generic.callback = ArenaServers_Event; g_arenaservers.showfull.generic.id = ID_SHOW_FULL; g_arenaservers.showfull.generic.x = 320; g_arenaservers.showfull.generic.y = y; y += SMALLCHAR_HEIGHT; g_arenaservers.showempty.generic.type = MTYPE_RADIOBUTTON; g_arenaservers.showempty.generic.name = "Show Empty:"; g_arenaservers.showempty.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.showempty.generic.callback = ArenaServers_Event; g_arenaservers.showempty.generic.id = ID_SHOW_EMPTY; g_arenaservers.showempty.generic.x = 320; g_arenaservers.showempty.generic.y = y; y += 3 * SMALLCHAR_HEIGHT; g_arenaservers.list.generic.type = MTYPE_SCROLLLIST; g_arenaservers.list.generic.flags = QMF_HIGHLIGHT_IF_FOCUS; g_arenaservers.list.generic.id = ID_LIST; g_arenaservers.list.generic.callback = ArenaServers_Event; g_arenaservers.list.generic.x = 72; g_arenaservers.list.generic.y = y; g_arenaservers.list.width = MAX_LISTBOXWIDTH; g_arenaservers.list.height = 11; g_arenaservers.list.itemnames = (const char **)g_arenaservers.items; for( i = 0; i < MAX_LISTBOXITEMS; i++ ) { g_arenaservers.items[i] = g_arenaservers.table[i].buff; } g_arenaservers.mappic.generic.type = MTYPE_BITMAP; g_arenaservers.mappic.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; g_arenaservers.mappic.generic.x = 72; g_arenaservers.mappic.generic.y = 80; g_arenaservers.mappic.width = 128; g_arenaservers.mappic.height = 96; g_arenaservers.mappic.errorpic = ART_UNKNOWNMAP; g_arenaservers.arrows.generic.type = MTYPE_BITMAP; g_arenaservers.arrows.generic.name = ART_ARROWS0; g_arenaservers.arrows.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; g_arenaservers.arrows.generic.callback = ArenaServers_Event; g_arenaservers.arrows.generic.x = 512+48; g_arenaservers.arrows.generic.y = 240-64+16; g_arenaservers.arrows.width = 64; g_arenaservers.arrows.height = 128; g_arenaservers.up.generic.type = MTYPE_BITMAP; g_arenaservers.up.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY; g_arenaservers.up.generic.callback = ArenaServers_Event; g_arenaservers.up.generic.id = ID_SCROLL_UP; g_arenaservers.up.generic.x = 512+48; g_arenaservers.up.generic.y = 240-64+16; g_arenaservers.up.width = 64; g_arenaservers.up.height = 64; g_arenaservers.up.focuspic = ART_ARROWS_UP; g_arenaservers.down.generic.type = MTYPE_BITMAP; g_arenaservers.down.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY; g_arenaservers.down.generic.callback = ArenaServers_Event; g_arenaservers.down.generic.id = ID_SCROLL_DOWN; g_arenaservers.down.generic.x = 512+48; g_arenaservers.down.generic.y = 240+16; g_arenaservers.down.width = 64; g_arenaservers.down.height = 64; g_arenaservers.down.focuspic = ART_ARROWS_DOWN; y = 376; g_arenaservers.status.generic.type = MTYPE_TEXT; g_arenaservers.status.generic.x = 320; g_arenaservers.status.generic.y = y; g_arenaservers.status.string = statusbuffer; g_arenaservers.status.style = UI_CENTER|UI_SMALLFONT; g_arenaservers.status.color = menu_text_color; y += SMALLCHAR_HEIGHT; g_arenaservers.statusbar.generic.type = MTYPE_TEXT; g_arenaservers.statusbar.generic.x = 320; g_arenaservers.statusbar.generic.y = y; g_arenaservers.statusbar.string = ""; g_arenaservers.statusbar.style = UI_CENTER|UI_SMALLFONT; g_arenaservers.statusbar.color = text_color_normal; g_arenaservers.remove.generic.type = MTYPE_BITMAP; g_arenaservers.remove.generic.name = ART_REMOVE0; g_arenaservers.remove.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.remove.generic.callback = ArenaServers_Event; g_arenaservers.remove.generic.id = ID_REMOVE; g_arenaservers.remove.generic.x = 450; g_arenaservers.remove.generic.y = 86; g_arenaservers.remove.width = 96; g_arenaservers.remove.height = 48; g_arenaservers.remove.focuspic = ART_REMOVE1; g_arenaservers.back.generic.type = MTYPE_BITMAP; g_arenaservers.back.generic.name = ART_BACK0; g_arenaservers.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.back.generic.callback = ArenaServers_Event; g_arenaservers.back.generic.id = ID_BACK; g_arenaservers.back.generic.x = 0; g_arenaservers.back.generic.y = 480-64; g_arenaservers.back.width = 128; g_arenaservers.back.height = 64; g_arenaservers.back.focuspic = ART_BACK1; g_arenaservers.specify.generic.type = MTYPE_BITMAP; g_arenaservers.specify.generic.name = ART_SPECIFY0; g_arenaservers.specify.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.specify.generic.callback = ArenaServers_Event; g_arenaservers.specify.generic.id = ID_SPECIFY; g_arenaservers.specify.generic.x = 128; g_arenaservers.specify.generic.y = 480-64; g_arenaservers.specify.width = 128; g_arenaservers.specify.height = 64; g_arenaservers.specify.focuspic = ART_SPECIFY1; g_arenaservers.refresh.generic.type = MTYPE_BITMAP; g_arenaservers.refresh.generic.name = ART_REFRESH0; g_arenaservers.refresh.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.refresh.generic.callback = ArenaServers_Event; g_arenaservers.refresh.generic.id = ID_REFRESH; g_arenaservers.refresh.generic.x = 256; g_arenaservers.refresh.generic.y = 480-64; g_arenaservers.refresh.width = 128; g_arenaservers.refresh.height = 64; g_arenaservers.refresh.focuspic = ART_REFRESH1; g_arenaservers.create.generic.type = MTYPE_BITMAP; g_arenaservers.create.generic.name = ART_CREATE0; g_arenaservers.create.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.create.generic.callback = ArenaServers_Event; g_arenaservers.create.generic.id = ID_CREATE; g_arenaservers.create.generic.x = 384; g_arenaservers.create.generic.y = 480-64; g_arenaservers.create.width = 128; g_arenaservers.create.height = 64; g_arenaservers.create.focuspic = ART_CREATE1; g_arenaservers.go.generic.type = MTYPE_BITMAP; g_arenaservers.go.generic.name = ART_CONNECT0; g_arenaservers.go.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.go.generic.callback = ArenaServers_Event; g_arenaservers.go.generic.id = ID_CONNECT; g_arenaservers.go.generic.x = 640; g_arenaservers.go.generic.y = 480-64; g_arenaservers.go.width = 128; g_arenaservers.go.height = 64; g_arenaservers.go.focuspic = ART_CONNECT1; g_arenaservers.punkbuster.generic.type = MTYPE_SPINCONTROL; g_arenaservers.punkbuster.generic.name = "Punkbuster:"; g_arenaservers.punkbuster.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.punkbuster.generic.callback = ArenaServers_Event; g_arenaservers.punkbuster.generic.id = ID_PUNKBUSTER; g_arenaservers.punkbuster.generic.x = 480+32; g_arenaservers.punkbuster.generic.y = 144; g_arenaservers.punkbuster.itemnames = punkbuster_items; g_arenaservers.pblogo.generic.type = MTYPE_BITMAP; g_arenaservers.pblogo.generic.name = ART_PUNKBUSTER; g_arenaservers.pblogo.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; g_arenaservers.pblogo.generic.x = 526; g_arenaservers.pblogo.generic.y = 176; g_arenaservers.pblogo.width = 32; g_arenaservers.pblogo.height = 16; g_arenaservers.pblogo.errorpic = ART_UNKNOWNMAP; Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.banner ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.master ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.gametype ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.sortkey ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.showfull); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.showempty ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.mappic ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.status ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.statusbar ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.arrows ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.up ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.down ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.list ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.remove ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.back ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.specify ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.refresh ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.create ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.go ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.punkbuster ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.pblogo ); ArenaServers_LoadFavorites(); g_arenaservers.master.curvalue = g_servertype = Com_Clamp( 0, 6, ui_browserMaster.integer ); g_gametype = Com_Clamp( 0, 4, ui_browserGameType.integer ); g_arenaservers.gametype.curvalue = g_gametype; g_sortkey = Com_Clamp( 0, 4, ui_browserSortKey.integer ); g_arenaservers.sortkey.curvalue = g_sortkey; g_fullservers = Com_Clamp( 0, 1, ui_browserShowFull.integer ); g_arenaservers.showfull.curvalue = g_fullservers; g_emptyservers = Com_Clamp( 0, 1, ui_browserShowEmpty.integer ); g_arenaservers.showempty.curvalue = g_emptyservers; g_arenaservers.punkbuster.curvalue = Com_Clamp( 0, 1, cvarSystem->VariableValue( "cl_punkbuster" ) ); // force to initial state and refresh g_arenaservers.master.curvalue = g_servertype = ArenaServers_SetType(g_servertype); cvarSystem->Register(NULL, "debug_protocol", "", 0 ); }
static qboolean CG_ParseLensFlareEffect(char** p, lensFlareEffect_t* lfe) { char* token; char* name; #if LFDEBUG CG_LoadingString("LF: CG_ParseLensFlareEffect()"); #endif ParseEffect: token = COM_Parse(p); if (!token[0]) { if (CG_PopFile()) { *p = lfbuf; goto ParseEffect; } return qfalse; } if (!Q_stricmp(token, "import")) { CG_PushFile("maps/import/", COM_Parse(p)); goto ParseEffect; } if (!Q_stricmp(token, "sunparm")) { token = COM_Parse(p); Q_strncpyz(cgs.sunFlareEffect, token, sizeof(cgs.sunFlareEffect)); token = COM_Parse(p); cgs.sunFlareYaw = atof(token); token = COM_Parse(p); cgs.sunFlarePitch = atof(token); token = COM_Parse(p); cgs.sunFlareDistance = atof(token); goto ParseEffect; } name = va("%s%s", lfNameBase, token); if (CG_FindLensFlareEffect(name)) { SkipBracedSection(p, 0); goto ParseEffect; } Q_strncpyz(lfe->name, name, sizeof(lfe->name)); token = COM_Parse(p); if (Q_stricmp(token, "{")) { CG_Printf(S_COLOR_YELLOW "read '%s', expected '{' in '%s'\n", token, lfe->name); return qfalse; } // set non-zero default values lfe->range = 400; lfe->fadeAngle = 20; while (1) { token = COM_Parse(p); if (!token[0]) { CG_Printf(S_COLOR_YELLOW "unexpected end of lens flare effect '%s'\n", lfe->name); return qfalse; } if (!Q_stricmp(token, "}")) break; if (!Q_stricmp(token, "{")) { if (lfe->numLensFlares >= MAX_LENSFLARES_PER_EFFECT) { CG_Printf(S_COLOR_YELLOW "too many lensflares in '%s' (max=%d)\n", lfe->name, MAX_LENSFLARES_PER_EFFECT); return qfalse; } if (!CG_ParseLensFlare(p, &lfe->lensFlares[lfe->numLensFlares], lfe->name)) return qfalse; lfe->numLensFlares++; } else if (!Q_stricmp(token, "range")) { token = COM_Parse(p); lfe->range = atof(token); lfe->rangeSqr = Square(lfe->range); } else if (!Q_stricmp(token, "fadeAngle")) { token = COM_Parse(p); lfe->fadeAngle = Com_Clamp(0, 180, atof(token)); } else { CG_Printf(S_COLOR_YELLOW "unexpected token '%s' in '%s'\n", token, lfe->name); return qfalse; } } CG_FinalizeLensFlareEffect(lfe); return qtrue; }
static qboolean CG_ParseLensFlare(char** p, lensFlare_t* lf, const char* lfename) { char* token; #if LFDEBUG CG_LoadingString(va("LF: CG_ParseLensFlare(%s)", lfename)); #endif // set non-zero default values lf->pos = 1.0; lf->size = 1.0; lf->rgba[0] = 0xff; lf->rgba[1] = 0xff; lf->rgba[2] = 0xff; lf->rgba[3] = 0xff; lf->fadeAngleFactor = 1.0; lf->entityAngleFactor = 1.0; lf->rotationRollFactor = 1.0; while (1) { token = COM_Parse(p); if (!token[0]) { CG_Printf(S_COLOR_YELLOW "unexpected end of lens flare definition in '%s'\n", lfename); #if LFDEBUG CG_LoadingString(va("LF: CG_ParseLensFlare(%s) unexpected end", lfename)); #endif return qfalse; } if (!Q_stricmp(token, "}")) break; if (!Q_stricmp(token, "shader")) { token = COM_Parse(p); if (token[0]) { lf->shader = trap_R_RegisterShaderNoMip(token); } } else if (!Q_stricmp(token, "mode")) { token = COM_Parse(p); if (!Q_stricmp(token, "reflexion")) { lf->mode = LFM_reflexion; } else if (!Q_stricmp(token, "glare")) { lf->mode = LFM_glare; } else if (!Q_stricmp(token, "star")) { lf->mode = LFM_star; } else { CG_Printf(S_COLOR_YELLOW "unknown mode '%s' in '%s'\n", token, lfename); return qfalse; } } else if (!Q_stricmp(token, "pos")) { token = COM_Parse(p); lf->pos = atof(token); } else if (!Q_stricmp(token, "size")) { token = COM_Parse(p); lf->size = atof(token); } else if (!Q_stricmp(token, "color")) { token = COM_Parse(p); lf->rgba[0] = 0xff * Com_Clamp(0, 1, atof(token)); token = COM_Parse(p); lf->rgba[1] = 0xff * Com_Clamp(0, 1, atof(token)); token = COM_Parse(p); lf->rgba[2] = 0xff * Com_Clamp(0, 1, atof(token)); } else if (!Q_stricmp(token, "alpha")) { token = COM_Parse(p); lf->rgba[3] = 0xff * Com_Clamp(0, 1000, atof(token)); } else if (!Q_stricmp(token, "rotation")) { token = COM_Parse(p); lf->rotationOffset = Com_Clamp(-360, 360, atof(token)); token = COM_Parse(p); lf->rotationYawFactor = atof(token); token = COM_Parse(p); lf->rotationPitchFactor = atof(token); token = COM_Parse(p); lf->rotationRollFactor = atof(token); } else if (!Q_stricmp(token, "fadeAngleFactor")) { token = COM_Parse(p); lf->fadeAngleFactor = atof(token); if (lf->fadeAngleFactor < 0) lf->fadeAngleFactor = 0; } else if (!Q_stricmp(token, "entityAngleFactor")) { token = COM_Parse(p); lf->entityAngleFactor = atof(token); if (lf->entityAngleFactor < 0) lf->entityAngleFactor = 0; } else if (!Q_stricmp(token, "intensityThreshold")) { token = COM_Parse(p); lf->intensityThreshold = Com_Clamp(0, 0.99, atof(token)); } else { CG_Printf(S_COLOR_YELLOW "unexpected token '%s' in '%s'\n", token, lfename); return qfalse; } } return qtrue; }
/* ================= UI_SPSkillMenu_Init ================= */ static void UI_SPSkillMenu_Init( void ) { int skill; memset( &skillMenuInfo, 0, sizeof(skillMenuInfo) ); skillMenuInfo.menu.fullscreen = qtrue; skillMenuInfo.menu.key = UI_SPSkillMenu_Key; UI_SPSkillMenu_Cache(); skillMenuInfo.art_frame.generic_mc.type = MTYPE_BITMAP; skillMenuInfo.art_frame.generic_mc.name = ART_FRAME; skillMenuInfo.art_frame.generic_mc.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; skillMenuInfo.art_frame.generic_mc.x = 142; skillMenuInfo.art_frame.generic_mc.y = 118; skillMenuInfo.art_frame.width = 359; skillMenuInfo.art_frame.height = 256; skillMenuInfo.art_banner.generic_mc.type = MTYPE_BTEXT; skillMenuInfo.art_banner.generic_mc.flags = QMF_CENTER_JUSTIFY; skillMenuInfo.art_banner.generic_mc.x = 320; skillMenuInfo.art_banner.generic_mc.y = 16; skillMenuInfo.art_banner.string = "DIFFICULTY"; skillMenuInfo.art_banner.color = color_white; skillMenuInfo.art_banner.style = UI_CENTER; skillMenuInfo.item_baby.generic_mc.type = MTYPE_PTEXT; skillMenuInfo.item_baby.generic_mc.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; skillMenuInfo.item_baby.generic_mc.x = 320; skillMenuInfo.item_baby.generic_mc.y = 170; skillMenuInfo.item_baby.generic_mc.callback = UI_SPSkillMenu_SkillEvent; skillMenuInfo.item_baby.generic_mc.id = ID_BABY; skillMenuInfo.item_baby.string = "I Can Win"; skillMenuInfo.item_baby.color = color_red; skillMenuInfo.item_baby.style = UI_CENTER; skillMenuInfo.item_easy.generic_mc.type = MTYPE_PTEXT; skillMenuInfo.item_easy.generic_mc.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; skillMenuInfo.item_easy.generic_mc.x = 320; skillMenuInfo.item_easy.generic_mc.y = 198; skillMenuInfo.item_easy.generic_mc.callback = UI_SPSkillMenu_SkillEvent; skillMenuInfo.item_easy.generic_mc.id = ID_EASY; skillMenuInfo.item_easy.string = "Bring It On"; skillMenuInfo.item_easy.color = color_red; skillMenuInfo.item_easy.style = UI_CENTER; skillMenuInfo.item_medium.generic_mc.type = MTYPE_PTEXT; skillMenuInfo.item_medium.generic_mc.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; skillMenuInfo.item_medium.generic_mc.x = 320; skillMenuInfo.item_medium.generic_mc.y = 227; skillMenuInfo.item_medium.generic_mc.callback = UI_SPSkillMenu_SkillEvent; skillMenuInfo.item_medium.generic_mc.id = ID_MEDIUM; skillMenuInfo.item_medium.string = "Hurt Me Plenty"; skillMenuInfo.item_medium.color = color_red; skillMenuInfo.item_medium.style = UI_CENTER; skillMenuInfo.item_hard.generic_mc.type = MTYPE_PTEXT; skillMenuInfo.item_hard.generic_mc.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; skillMenuInfo.item_hard.generic_mc.x = 320; skillMenuInfo.item_hard.generic_mc.y = 255; skillMenuInfo.item_hard.generic_mc.callback = UI_SPSkillMenu_SkillEvent; skillMenuInfo.item_hard.generic_mc.id = ID_HARD; skillMenuInfo.item_hard.string = "Hardcore"; skillMenuInfo.item_hard.color = color_red; skillMenuInfo.item_hard.style = UI_CENTER; skillMenuInfo.item_nightmare.generic_mc.type = MTYPE_PTEXT; skillMenuInfo.item_nightmare.generic_mc.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; skillMenuInfo.item_nightmare.generic_mc.x = 320; skillMenuInfo.item_nightmare.generic_mc.y = 283; skillMenuInfo.item_nightmare.generic_mc.callback = UI_SPSkillMenu_SkillEvent; skillMenuInfo.item_nightmare.generic_mc.id = ID_NIGHTMARE; skillMenuInfo.item_nightmare.string = "NIGHTMARE!"; skillMenuInfo.item_nightmare.color = color_red; skillMenuInfo.item_nightmare.style = UI_CENTER; skillMenuInfo.item_back.generic_mc.type = MTYPE_BITMAP; skillMenuInfo.item_back.generic_mc.name = ART_BACK; skillMenuInfo.item_back.generic_mc.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; skillMenuInfo.item_back.generic_mc.x = 0; skillMenuInfo.item_back.generic_mc.y = 480-64; skillMenuInfo.item_back.generic_mc.callback = UI_SPSkillMenu_BackEvent; skillMenuInfo.item_back.generic_mc.id = ID_BACK; skillMenuInfo.item_back.width = 128; skillMenuInfo.item_back.height = 64; skillMenuInfo.item_back.focuspic = ART_BACK_FOCUS; skillMenuInfo.art_skillPic.generic_mc.type = MTYPE_BITMAP; skillMenuInfo.art_skillPic.generic_mc.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; skillMenuInfo.art_skillPic.generic_mc.x = 320-64; skillMenuInfo.art_skillPic.generic_mc.y = 368; skillMenuInfo.art_skillPic.width = 128; skillMenuInfo.art_skillPic.height = 96; skillMenuInfo.item_fight.generic_mc.type = MTYPE_BITMAP; skillMenuInfo.item_fight.generic_mc.name = ART_FIGHT; skillMenuInfo.item_fight.generic_mc.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS; skillMenuInfo.item_fight.generic_mc.callback = UI_SPSkillMenu_FightEvent; skillMenuInfo.item_fight.generic_mc.id = ID_FIGHT; skillMenuInfo.item_fight.generic_mc.x = 640; skillMenuInfo.item_fight.generic_mc.y = 480-64; skillMenuInfo.item_fight.width = 128; skillMenuInfo.item_fight.height = 64; skillMenuInfo.item_fight.focuspic = ART_FIGHT_FOCUS; Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.art_frame ); Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.art_banner ); Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_baby ); Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_easy ); Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_medium ); Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_hard ); Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_nightmare ); Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.art_skillPic ); Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_back ); Menu_AddItem( &skillMenuInfo.menu, ( void * )&skillMenuInfo.item_fight ); skill = (int)Com_Clamp( 1, 5, trap_Cvar_VariableValue( "g_spSkill" ) ); SetSkillColor( skill, color_white ); skillMenuInfo.art_skillPic.shader = skillMenuInfo.skillpics[skill - 1]; if( skill == 5 ) { trap_S_StartLocalSound( skillMenuInfo.nightmareSound, CHAN_ANNOUNCER ); } }
/* ================= ArenaServers_MenuInit ================= */ static void ArenaServers_MenuInit( void ) { int i; int type; int y; static char statusbuffer[MAX_STATUSLENGTH]; static char leaguebuffer[MAX_LEAGUELENGTH]; // zero set all our globals memset( &g_arenaservers, 0 ,sizeof(arenaservers_t) ); ArenaServers_Cache(); g_arenaservers.menu.fullscreen = qtrue; g_arenaservers.menu.wrapAround = qtrue; g_arenaservers.menu.showlogo = LOGO_AFTERWARDS; g_arenaservers.menu.draw = ArenaServers_MenuDraw; g_arenaservers.menu.key = ArenaServers_MenuKey; g_arenaservers.banner.generic.type = MTYPE_BTEXT; g_arenaservers.banner.generic.flags = QMF_CENTER_JUSTIFY; g_arenaservers.banner.generic.x = 320; g_arenaservers.banner.generic.y = 16; g_arenaservers.banner.string = "JOIN GAME"; g_arenaservers.banner.style = UI_CENTER; g_arenaservers.banner.color = color_white; g_arenaservers.grlogo.generic.type = MTYPE_BITMAP; g_arenaservers.grlogo.generic.name = GLOBALRANKINGS_LOGO; g_arenaservers.grlogo.generic.flags = QMF_INACTIVE|QMF_HIDDEN; g_arenaservers.grlogo.generic.x = 530; g_arenaservers.grlogo.generic.y = 40; g_arenaservers.grlogo.width = 32; g_arenaservers.grlogo.height = 64; g_arenaservers.league.generic.type = MTYPE_TEXT; g_arenaservers.league.generic.flags = QMF_HIDDEN; g_arenaservers.league.generic.x = g_arenaservers.grlogo.generic.x + (g_arenaservers.grlogo.width / 2); g_arenaservers.league.generic.y = g_arenaservers.grlogo.generic.y + g_arenaservers.grlogo.height + 2; g_arenaservers.league.string = leaguebuffer; g_arenaservers.league.style = UI_CENTER|UI_SMALLFONT; g_arenaservers.league.color = menu_text_color; g_arenaservers.practice.generic.type = MTYPE_TEXT; g_arenaservers.practice.generic.flags = QMF_HIDDEN; g_arenaservers.practice.generic.x = g_arenaservers.grlogo.generic.x + (g_arenaservers.grlogo.width / 2); g_arenaservers.practice.generic.y = g_arenaservers.grlogo.generic.y + 6; g_arenaservers.practice.string = "practice"; g_arenaservers.practice.style = UI_CENTER|UI_SMALLFONT; g_arenaservers.practice.color = menu_text_color; y = 80; g_arenaservers.master.generic.type = MTYPE_SPINCONTROL; g_arenaservers.master.generic.name = "Servers:"; g_arenaservers.master.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.master.generic.callback = ArenaServers_Event; g_arenaservers.master.generic.id = ID_MASTER; g_arenaservers.master.generic.x = 320; g_arenaservers.master.generic.y = y; g_arenaservers.master.itemnames = master_items; y += SMALLCHAR_HEIGHT; g_arenaservers.gametype.generic.type = MTYPE_SPINCONTROL; g_arenaservers.gametype.generic.name = "Game Type:"; g_arenaservers.gametype.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.gametype.generic.callback = ArenaServers_Event; g_arenaservers.gametype.generic.id = ID_GAMETYPE; g_arenaservers.gametype.generic.x = 320; g_arenaservers.gametype.generic.y = y; g_arenaservers.gametype.itemnames = servertype_items; y += SMALLCHAR_HEIGHT; g_arenaservers.sortkey.generic.type = MTYPE_SPINCONTROL; g_arenaservers.sortkey.generic.name = "Sort By:"; g_arenaservers.sortkey.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.sortkey.generic.callback = ArenaServers_Event; g_arenaservers.sortkey.generic.id = ID_SORTKEY; g_arenaservers.sortkey.generic.x = 320; g_arenaservers.sortkey.generic.y = y; g_arenaservers.sortkey.itemnames = sortkey_items; y += SMALLCHAR_HEIGHT; g_arenaservers.showfull.generic.type = MTYPE_RADIOBUTTON; g_arenaservers.showfull.generic.name = "Show Full:"; g_arenaservers.showfull.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.showfull.generic.callback = ArenaServers_Event; g_arenaservers.showfull.generic.id = ID_SHOW_FULL; g_arenaservers.showfull.generic.x = 320; g_arenaservers.showfull.generic.y = y; y += SMALLCHAR_HEIGHT; g_arenaservers.showempty.generic.type = MTYPE_RADIOBUTTON; g_arenaservers.showempty.generic.name = "Show Empty:"; g_arenaservers.showempty.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.showempty.generic.callback = ArenaServers_Event; g_arenaservers.showempty.generic.id = ID_SHOW_EMPTY; g_arenaservers.showempty.generic.x = 320; g_arenaservers.showempty.generic.y = y; y += SMALLCHAR_HEIGHT; g_arenaservers.showawonly.generic.type = MTYPE_RADIOBUTTON; g_arenaservers.showawonly.generic.name = "AW Only:"; g_arenaservers.showawonly.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; g_arenaservers.showawonly.generic.callback = ArenaServers_Event; g_arenaservers.showawonly.generic.id = ID_SHOW_AWONLY; g_arenaservers.showawonly.generic.x = 320; g_arenaservers.showawonly.generic.y = y; y += 2 * SMALLCHAR_HEIGHT; g_arenaservers.list.generic.type = MTYPE_SCROLLLIST; g_arenaservers.list.generic.flags = QMF_HIGHLIGHT_IF_FOCUS; g_arenaservers.list.generic.id = ID_LIST; g_arenaservers.list.generic.callback = ArenaServers_Event; g_arenaservers.list.generic.x = 32; g_arenaservers.list.generic.y = y; g_arenaservers.list.width = MAX_LISTBOXWIDTH; g_arenaservers.list.height = 11; g_arenaservers.list.itemnames = (const char **)g_arenaservers.items; for( i = 0; i < MAX_LISTBOXITEMS; i++ ) { g_arenaservers.items[i] = g_arenaservers.table[i].buff; } g_arenaservers.mappic.generic.type = MTYPE_BITMAP; g_arenaservers.mappic.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; g_arenaservers.mappic.generic.x = 72; g_arenaservers.mappic.generic.y = 80; g_arenaservers.mappic.width = 128; g_arenaservers.mappic.height = 96; g_arenaservers.mappic.errorpic = ART_UNKNOWNMAP; g_arenaservers.arrows.generic.type = MTYPE_BITMAP; g_arenaservers.arrows.generic.name = ART_ARROWS0; g_arenaservers.arrows.generic.flags = QMF_LEFT_JUSTIFY|QMF_INACTIVE; g_arenaservers.arrows.generic.callback = ArenaServers_Event; g_arenaservers.arrows.generic.x = 512+48; g_arenaservers.arrows.generic.y = 240-16; g_arenaservers.arrows.width = 64; g_arenaservers.arrows.height = 128; g_arenaservers.up.generic.type = MTYPE_BITMAP; g_arenaservers.up.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY; g_arenaservers.up.generic.callback = ArenaServers_Event; g_arenaservers.up.generic.id = ID_SCROLL_UP; g_arenaservers.up.generic.x = 512+48; g_arenaservers.up.generic.y = 240-16; g_arenaservers.up.width = 64; g_arenaservers.up.height = 64; g_arenaservers.up.focuspic = ART_ARROWS_UP; g_arenaservers.down.generic.type = MTYPE_BITMAP; g_arenaservers.down.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS|QMF_MOUSEONLY; g_arenaservers.down.generic.callback = ArenaServers_Event; g_arenaservers.down.generic.id = ID_SCROLL_DOWN; g_arenaservers.down.generic.x = 512+48; g_arenaservers.down.generic.y = 240+48; g_arenaservers.down.width = 64; g_arenaservers.down.height = 64; g_arenaservers.down.focuspic = ART_ARROWS_DOWN; y = 376; g_arenaservers.status.generic.type = MTYPE_TEXT; g_arenaservers.status.generic.x = 320; g_arenaservers.status.generic.y = y; g_arenaservers.status.string = statusbuffer; g_arenaservers.status.style = UI_CENTER|UI_SMALLFONT; g_arenaservers.status.color = menu_text_color; y += SMALLCHAR_HEIGHT; g_arenaservers.statusbar.generic.type = MTYPE_TEXT; g_arenaservers.statusbar.generic.x = 320; g_arenaservers.statusbar.generic.y = y; g_arenaservers.statusbar.string = ""; g_arenaservers.statusbar.style = UI_CENTER|UI_SMALLFONT; g_arenaservers.statusbar.color = text_color_normal; g_arenaservers.info.generic.type = MTYPE_BITMAP; g_arenaservers.info.generic.name = ART_INFO0; g_arenaservers.info.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.info.generic.callback = ArenaServers_Event; g_arenaservers.info.generic.id = ID_INFO; g_arenaservers.info.generic.x = 450; g_arenaservers.info.generic.y = 80; g_arenaservers.info.width = 96; g_arenaservers.info.height = 48; g_arenaservers.info.focuspic = ART_INFO1; g_arenaservers.favorite.generic.type = MTYPE_BITMAP; g_arenaservers.favorite.generic.name = ART_REMOVE0; g_arenaservers.favorite.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.favorite.generic.callback = ArenaServers_Event; g_arenaservers.favorite.generic.id = ID_FAVORITE; g_arenaservers.favorite.generic.x = 450; g_arenaservers.favorite.generic.y = 130; g_arenaservers.favorite.width = 96; g_arenaservers.favorite.height = 48; g_arenaservers.favorite.focuspic = ART_REMOVE1; g_arenaservers.back.generic.type = MTYPE_BITMAP; g_arenaservers.back.generic.name = ART_BACK0; g_arenaservers.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.back.generic.callback = ArenaServers_Event; g_arenaservers.back.generic.id = ID_BACK; g_arenaservers.back.generic.x = 0; g_arenaservers.back.generic.y = 480-64; g_arenaservers.back.width = 128; g_arenaservers.back.height = 64; g_arenaservers.back.focuspic = ART_BACK1; g_arenaservers.specify.generic.type = MTYPE_BITMAP; g_arenaservers.specify.generic.name = ART_SPECIFY0; g_arenaservers.specify.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.specify.generic.callback = ArenaServers_Event; g_arenaservers.specify.generic.id = ID_SPECIFY; g_arenaservers.specify.generic.x = 170; g_arenaservers.specify.generic.y = 480-64; g_arenaservers.specify.width = 128; g_arenaservers.specify.height = 64; g_arenaservers.specify.focuspic = ART_SPECIFY1; g_arenaservers.refresh.generic.type = MTYPE_BITMAP; g_arenaservers.refresh.generic.name = ART_REFRESH0; g_arenaservers.refresh.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.refresh.generic.callback = ArenaServers_Event; g_arenaservers.refresh.generic.id = ID_REFRESH; g_arenaservers.refresh.generic.x = 340; g_arenaservers.refresh.generic.y = 480-64; g_arenaservers.refresh.width = 128; g_arenaservers.refresh.height = 64; g_arenaservers.refresh.focuspic = ART_REFRESH1; g_arenaservers.go.generic.type = MTYPE_BITMAP; g_arenaservers.go.generic.name = ART_CONNECT0; g_arenaservers.go.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS; g_arenaservers.go.generic.callback = ArenaServers_Event; g_arenaservers.go.generic.id = ID_CONNECT; g_arenaservers.go.generic.x = 640; g_arenaservers.go.generic.y = 480-64; g_arenaservers.go.width = 128; g_arenaservers.go.height = 64; g_arenaservers.go.focuspic = ART_CONNECT1; Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.banner ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.grlogo ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.league ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.practice ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.master ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.gametype ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.sortkey ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.showfull); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.showempty ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.showawonly ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.mappic ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.list ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.status ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.statusbar ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.arrows ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.up ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.down ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.info ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.favorite ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.back ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.specify ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.refresh ); Menu_AddItem( &g_arenaservers.menu, (void*) &g_arenaservers.go ); // ArenaServers_LoadFavorites(); g_servertype = Com_Clamp( 0, 3, ui_browserMaster.integer ); g_arenaservers.master.curvalue = g_servertype; g_gametype = Com_Clamp( 0, 4, ui_browserGameType.integer ); g_arenaservers.gametype.curvalue = g_gametype; g_sortkey = Com_Clamp( 0, 4, ui_browserSortKey.integer ); g_arenaservers.sortkey.curvalue = g_sortkey; g_fullservers = Com_Clamp( 0, 1, ui_browserShowFull.integer ); g_arenaservers.showfull.curvalue = g_fullservers; g_emptyservers = Com_Clamp( 0, 1, ui_browserShowEmpty.integer ); g_arenaservers.showempty.curvalue = g_emptyservers; g_arenaservers.showawonly.curvalue = Com_Clamp( 0, 1, ui_browserShowAwOnly.integer ); // force to initial state and refresh memset( &serverStatus, 0, sizeof( serverStatus ) ); type = g_servertype; g_servertype = -1; ArenaServers_SetType( type ); trap_Cvar_Register(NULL, "debug_protocol", "", 0 ); }
/* ================= R_SetupEntityLightingGrid ================= */ static void R_SetupEntityLightingGrid( trRefEntity_t *ent ) { vec3_t lightOrigin; int pos[3]; int i, j; float frac[3]; int gridStep[3]; vec3_t direction; float totalFactor; unsigned short *startGridPos; if (r_fullbright->integer) { ent->ambientLight[0] = ent->ambientLight[1] = ent->ambientLight[2] = 255.0; ent->directedLight[0] = ent->directedLight[1] = ent->directedLight[2] = 255.0; VectorCopy( tr.sunDirection, ent->lightDir ); return; } if (r_newDLights->integer) { vec3_t v, invfrac; float fraction[8]; if ( ent->e.renderfx & RF_LIGHTING_ORIGIN ) { // seperate lightOrigins are needed so an object that is // sinking into the ground can still be lit, and so // multi-part models can be lit identically VectorCopy( ent->e.lightingOrigin, lightOrigin ); } else { VectorCopy( ent->e.origin, lightOrigin ); } VectorSubtract( lightOrigin, tr.world->lightGridOrigin, lightOrigin ); VectorScaleVector( lightOrigin, tr.world->lightGridInverseSize, v ); pos[0] = (int)floorf(v[0]); pos[1] = (int)floorf(v[1]); pos[2] = (int)floorf(v[2]); frac[0] = v[0] - (float)pos[0]; frac[1] = v[1] - (float)pos[1]; frac[2] = v[2] - (float)pos[2]; invfrac[0] = 1.0f - frac[0]; invfrac[1] = 1.0f - frac[1]; invfrac[2] = 1.0f - frac[2]; fraction[0] = invfrac[0] * invfrac[1] * invfrac[2]; fraction[1] = frac[0] * invfrac[1] * invfrac[2]; fraction[2] = invfrac[0] * frac[1] * invfrac[2]; fraction[3] = frac[0] * frac[1] * invfrac[2]; fraction[4] = invfrac[0] * invfrac[1] * frac[2]; fraction[5] = frac[0] * invfrac[1] * frac[2]; fraction[6] = invfrac[0] * frac[1] * frac[2]; fraction[7] = frac[0] * frac[1] * frac[2]; pos[0] = Com_Clamp(0, tr.world->lightGridBounds[0] - 1, pos[0]); pos[1] = Com_Clamp(0, tr.world->lightGridBounds[1] - 1, pos[1]); pos[2] = Com_Clamp(0, tr.world->lightGridBounds[2] - 1, pos[2]); VectorClear( ent->ambientLight ); VectorClear( ent->directedLight ); VectorClear( direction ); // trilerp the light value /* startGridPos = tr.world->lightGridArray + (pos[0] * tr.world->lightGridStep[0]) + (pos[1] * tr.world->lightGridStep[1]) + (pos[2] * tr.world->lightGridStep[2]); */ startGridPos = tr.world->lightGridArray + (int)((pos[0] * tr.world->lightGridStep[0])) + (int)((pos[1] * tr.world->lightGridStep[1])) + (int)((pos[2] * tr.world->lightGridStep[2])); totalFactor = 0; for ( i = 0 ; i < 8 ; i++ ) { float factor; mgrid_t *data; unsigned short *gridPos; int lat, lng; vec3_t normal; gridPos = startGridPos + tr.world->lightGridOffsets[i]; if (gridPos >= tr.world->lightGridArray + tr.world->numGridArrayElements) { //we've gone off the array somehow continue; } data = tr.world->lightGridData + *gridPos; if ( data->styles[0] == LS_LSNONE ) { continue; // ignore samples in walls } factor = fraction[i]; totalFactor += factor; for(j = 0; j < MAXLIGHTMAPS; j++) { if (data->styles[j] != LS_LSNONE) { const byte style = data->styles[j]; ent->ambientLight[0] += factor * data->ambientLight[j][0] * styleColors[style][0] / 255.0f; ent->ambientLight[1] += factor * data->ambientLight[j][1] * styleColors[style][1] / 255.0f; ent->ambientLight[2] += factor * data->ambientLight[j][2] * styleColors[style][2] / 255.0f; ent->directedLight[0] += factor * data->directLight[j][0] * styleColors[style][0] / 255.0f; ent->directedLight[1] += factor * data->directLight[j][1] * styleColors[style][1] / 255.0f; ent->directedLight[2] += factor * data->directLight[j][2] * styleColors[style][2] / 255.0f; } else { break; } } lat = data->latLong[1] << 2; lng = data->latLong[0] << 2; // decode X as cos( lat ) * sin( long ) // decode Y as sin( lat ) * sin( long ) // decode Z as cos( long ) normal[0] = tr.sinTable[(lat + (FUNCTABLE_SIZE / 4)) & FUNCTABLE_MASK] * tr.sinTable[lng]; normal[1] = tr.sinTable[lat] * tr.sinTable[lng]; normal[2] = tr.sinTable[(lng + (FUNCTABLE_SIZE / 4)) & FUNCTABLE_MASK]; VectorMA( direction, factor, normal, direction ); } if ( totalFactor > 0 && totalFactor < 0.99 ) { totalFactor = 1.0 / totalFactor; VectorScale( ent->ambientLight, totalFactor, ent->ambientLight ); VectorScale( ent->directedLight, totalFactor, ent->directedLight ); } VectorScale( ent->ambientLight, r_ambientScale->value, ent->ambientLight ); VectorScale( ent->directedLight, r_directedScale->value, ent->directedLight ); VectorNormalize2( direction, ent->lightDir ); } else { if ( ent->e.renderfx & RF_LIGHTING_ORIGIN ) { // seperate lightOrigins are needed so an object that is // sinking into the ground can still be lit, and so // multi-part models can be lit identically VectorCopy( ent->e.lightingOrigin, lightOrigin ); } else { VectorCopy( ent->e.origin, lightOrigin ); } VectorSubtract( lightOrigin, tr.world->lightGridOrigin, lightOrigin ); for ( i = 0 ; i < 3 ; i++ ) { float v; v = lightOrigin[i]*tr.world->lightGridInverseSize[i]; pos[i] = floor( v ); frac[i] = v - pos[i]; if ( pos[i] < 0 ) { pos[i] = 0; } else if ( pos[i] >= tr.world->lightGridBounds[i] - 1 ) { pos[i] = tr.world->lightGridBounds[i] - 1; } } VectorClear( ent->ambientLight ); VectorClear( ent->directedLight ); VectorClear( direction ); // trilerp the light value gridStep[0] = 1; gridStep[1] = tr.world->lightGridBounds[0]; gridStep[2] = tr.world->lightGridBounds[0] * tr.world->lightGridBounds[1]; startGridPos = tr.world->lightGridArray + (pos[0] * gridStep[0] + pos[1] * gridStep[1] + pos[2] * gridStep[2]); totalFactor = 0; for ( i = 0 ; i < 8 ; i++ ) { float factor; mgrid_t *data; unsigned short *gridPos; int lat, lng; vec3_t normal; factor = 1.0; gridPos = startGridPos; for ( j = 0 ; j < 3 ; j++ ) { if ( i & (1<<j) ) { factor *= frac[j]; gridPos += gridStep[j]; } else { factor *= (1.0 - frac[j]); } } if (gridPos >= tr.world->lightGridArray + tr.world->numGridArrayElements) {//we've gone off the array somehow continue; } data = tr.world->lightGridData + *gridPos; if ( data->styles[0] == LS_LSNONE ) { continue; // ignore samples in walls } totalFactor += factor; for(j=0;j<MAXLIGHTMAPS;j++) { if (data->styles[j] != LS_LSNONE) { const byte style= data->styles[j]; ent->ambientLight[0] += factor * data->ambientLight[j][0] * styleColors[style][0] / 255.0f; ent->ambientLight[1] += factor * data->ambientLight[j][1] * styleColors[style][1] / 255.0f; ent->ambientLight[2] += factor * data->ambientLight[j][2] * styleColors[style][2] / 255.0f; ent->directedLight[0] += factor * data->directLight[j][0] * styleColors[style][0] / 255.0f; ent->directedLight[1] += factor * data->directLight[j][1] * styleColors[style][1] / 255.0f; ent->directedLight[2] += factor * data->directLight[j][2] * styleColors[style][2] / 255.0f; } else { break; } } lat = data->latLong[1]; lng = data->latLong[0]; lat *= (FUNCTABLE_SIZE/256); lng *= (FUNCTABLE_SIZE/256); // decode X as cos( lat ) * sin( long ) // decode Y as sin( lat ) * sin( long ) // decode Z as cos( long ) normal[0] = tr.sinTable[(lat + (FUNCTABLE_SIZE / 4)) & FUNCTABLE_MASK] * tr.sinTable[lng]; normal[1] = tr.sinTable[lat] * tr.sinTable[lng]; normal[2] = tr.sinTable[(lng + (FUNCTABLE_SIZE / 4)) & FUNCTABLE_MASK]; VectorMA( direction, factor, normal, direction ); } if ( totalFactor > 0 && totalFactor < 0.99 ) { totalFactor = 1.0 / totalFactor; VectorScale( ent->ambientLight, totalFactor, ent->ambientLight ); VectorScale( ent->directedLight, totalFactor, ent->directedLight ); } VectorScale( ent->ambientLight, r_ambientScale->value, ent->ambientLight ); VectorScale( ent->directedLight, r_directedScale->value, ent->directedLight ); VectorNormalize2( direction, ent->lightDir ); } }
/* ============== CG_SurfaceText Add text in 3D space. Text faces away from axis forward directory. ref entity should have origin, axis, and shaderRGBA set ============== */ void CG_SurfaceText( const refEntity_t *originEnt, const fontInfo_t *font, float scale, const char *text, float adjust, int limit, float gradient, qboolean forceColor ) { int len, count; vec4_t newColor; vec4_t gradientColor; const glyphInfo_t *glyph; const char *s; float yadj, xadj; float useScale; vec3_t baseline; refEntity_t re; polyVert_t verts[4]; float x, y, w, h; int j; if ( !text ) { return; } scale *= 0.25f; // for world scale re = *originEnt; re.reType = RT_POLY_LOCAL; VectorCopy( re.origin, re.oldorigin ); // center justify at origin VectorCopy( vec3_origin, baseline ); x = 0 - Text_Width( text, font, scale, 0 ) / 2; y = 0; useScale = scale * font->glyphScale; newColor[0] = re.shaderRGBA[0] / 255.0f; newColor[1] = re.shaderRGBA[1] / 255.0f; newColor[2] = re.shaderRGBA[2] / 255.0f; newColor[3] = re.shaderRGBA[3] / 255.0f; gradientColor[0] = Com_Clamp( 0, 1, newColor[0] - gradient ); gradientColor[1] = Com_Clamp( 0, 1, newColor[1] - gradient ); gradientColor[2] = Com_Clamp( 0, 1, newColor[2] - gradient ); gradientColor[3] = newColor[3]; len = Q_UTF8_PrintStrlen( text ); if ( limit > 0 && len > limit ) { len = limit; } s = text; count = 0; while ( s && *s && count < len ) { if ( Q_IsColorString( s ) ) { if ( !forceColor ) { VectorCopy( g_color_table[ColorIndex(*(s+1))], newColor ); gradientColor[0] = Com_Clamp( 0, 1, newColor[0] - gradient ); gradientColor[1] = Com_Clamp( 0, 1, newColor[1] - gradient ); gradientColor[2] = Com_Clamp( 0, 1, newColor[2] - gradient ); } s += 2; continue; } glyph = Text_GetGlyph( font, Q_UTF8_CodePoint( &s ) ); yadj = useScale * glyph->top; xadj = useScale * glyph->left; w = glyph->imageWidth * useScale; h = glyph->imageHeight * useScale; // 0 1 // 3 2 verts[0].xyz[0] = baseline[0] + 0; verts[0].xyz[1] = baseline[1] - ( x + xadj ); verts[0].xyz[2] = baseline[2] + y + yadj; verts[1].xyz[0] = baseline[0] + 0; verts[1].xyz[1] = baseline[1] - ( x + xadj + w ); verts[1].xyz[2] = baseline[2] + y + yadj; verts[2].xyz[0] = baseline[0] + 0; verts[2].xyz[1] = baseline[1] - ( x + xadj + w ); verts[2].xyz[2] = baseline[2] + y + yadj - h; verts[3].xyz[0] = baseline[0] + 0; verts[3].xyz[1] = baseline[1] - ( x + xadj ); verts[3].xyz[2] = baseline[2] + y + yadj - h; // standard square texture coordinates for ( j = 0; j < 4; j++ ) { verts[j].st[0] = ( j == 0 || j == 3 ) ? glyph->s : glyph->s2; verts[j].st[1] = ( j < 2 ) ? glyph->t : glyph->t2; if ( j < 2 || gradient == 0 ) { verts[j].modulate[0] = newColor[0] * 0xFF; verts[j].modulate[1] = newColor[1] * 0xFF; verts[j].modulate[2] = newColor[2] * 0xFF; verts[j].modulate[3] = newColor[3] * 0xFF; } else { verts[j].modulate[0] = gradientColor[0] * 0xFF; verts[j].modulate[1] = gradientColor[1] * 0xFF; verts[j].modulate[2] = gradientColor[2] * 0xFF; verts[j].modulate[3] = gradientColor[3] * 0xFF; } } re.customShader = glyph->glyph; re.radius = w / 2; trap_R_AddPolyRefEntityToScene( &re, 4, verts, 1 ); x += ( glyph->xSkip * useScale ) + adjust; count++; } // debug axis //re.reType = RT_MODEL; //re.hModel = 0; //trap_R_AddRefEntityToScene( &re ); }
/* ** SetFarClip */ static void SetFarClip( void ) { float farthestCornerDistance = 0; int i; // if not rendering the world (icons, menus, etc) // set a 2k far clip plane if ( tr.refdef.rdflags & RDF_NOWORLDMODEL ) { if (tr.refdef.rdflags & RDF_AUTOMAP) { //override the zfar then tr.viewParms.zFar = 32768.0f; } else { tr.viewParms.zFar = 2048.0f; } return; } // // set far clipping planes dynamically // for ( i = 0; i < 8; i++ ) { vec3_t v; float distance; if ( i & 1 ) { v[0] = tr.viewParms.visBounds[0][0]; } else { v[0] = tr.viewParms.visBounds[1][0]; } if ( i & 2 ) { v[1] = tr.viewParms.visBounds[0][1]; } else { v[1] = tr.viewParms.visBounds[1][1]; } if ( i & 4 ) { v[2] = tr.viewParms.visBounds[0][2]; } else { v[2] = tr.viewParms.visBounds[1][2]; } distance = DistanceSquared(tr.viewParms.ori.origin, v); if ( distance > farthestCornerDistance ) { farthestCornerDistance = distance; } } // Bring in the zFar to the distanceCull distance // The sky renders at zFar so need to move it out a little // ...and make sure there is a minimum zfar to prevent problems tr.viewParms.zFar = Com_Clamp(2048.0f, tr.distanceCull * (1.732), sqrtf( farthestCornerDistance )); /* if (r_shadows->integer == 2) { //volume caps need an "infinite" far clipping plane. So I'm using this semi-arbitrary massive number. tr.viewParms.zFar = 524288.0f; } */ }
static void UI_AddBotsMenu_Init( void ) { int n; int y; int gametype; int count; char info[MAX_INFO_STRING]; UI_trap_GetConfigString(CS_SERVERINFO, info, MAX_INFO_STRING); gametype = atoi( Info_ValueForKey( info,"g_gametype" ) ); memset( &addBotsMenuInfo, 0 ,sizeof(addBotsMenuInfo) ); addBotsMenuInfo.menu.draw = UI_AddBotsMenu_Draw; addBotsMenuInfo.menu.fullscreen = qfalse; addBotsMenuInfo.menu.wrapAround = qtrue; addBotsMenuInfo.delay = 1000; UI_AddBots_Cache(); addBotsMenuInfo.numBots = UI_GetNumBots(); count = addBotsMenuInfo.numBots < 7 ? addBotsMenuInfo.numBots : 7; addBotsMenuInfo.arrows.generic.type = MTYPE_BITMAP; addBotsMenuInfo.arrows.generic.name = ART_ARROWS; addBotsMenuInfo.arrows.generic.flags = QMF_INACTIVE; addBotsMenuInfo.arrows.generic.x = 200; addBotsMenuInfo.arrows.generic.y = 128; addBotsMenuInfo.arrows.width = 64; addBotsMenuInfo.arrows.height = 128; addBotsMenuInfo.up.generic.type = MTYPE_BITMAP; addBotsMenuInfo.up.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; addBotsMenuInfo.up.generic.x = 200; addBotsMenuInfo.up.generic.y = 128; addBotsMenuInfo.up.generic.id = ID_UP; addBotsMenuInfo.up.generic.callback = UI_AddBotsMenu_UpEvent; addBotsMenuInfo.up.width = 64; addBotsMenuInfo.up.height = 64; addBotsMenuInfo.up.focuspic = ART_ARROWUP; addBotsMenuInfo.down.generic.type = MTYPE_BITMAP; addBotsMenuInfo.down.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; addBotsMenuInfo.down.generic.x = 200; addBotsMenuInfo.down.generic.y = 128+64; addBotsMenuInfo.down.generic.id = ID_DOWN; addBotsMenuInfo.down.generic.callback = UI_AddBotsMenu_DownEvent; addBotsMenuInfo.down.width = 64; addBotsMenuInfo.down.height = 64; addBotsMenuInfo.down.focuspic = ART_ARROWDOWN; for( n = 0, y = 120; n < count; n++, y += 20 ) { addBotsMenuInfo.bots[n].generic.type = MTYPE_PTEXT; addBotsMenuInfo.bots[n].generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; addBotsMenuInfo.bots[n].generic.id = ID_BOTNAME0 + n; addBotsMenuInfo.bots[n].generic.x = 320 - 56; addBotsMenuInfo.bots[n].generic.y = y; addBotsMenuInfo.bots[n].generic.callback = UI_AddBotsMenu_BotEvent; addBotsMenuInfo.bots[n].string = addBotsMenuInfo.botnames[n]; addBotsMenuInfo.bots[n].color = color_orange; addBotsMenuInfo.bots[n].style = UI_LEFT|UI_SMALLFONT; } y += 12; addBotsMenuInfo.skill.generic.type = MTYPE_SPINCONTROL; addBotsMenuInfo.skill.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; addBotsMenuInfo.skill.generic.x = 320; addBotsMenuInfo.skill.generic.y = y; addBotsMenuInfo.skill.generic.name = "Skill:"; addBotsMenuInfo.skill.generic.id = ID_SKILL; addBotsMenuInfo.skill.itemnames = skillNames; addBotsMenuInfo.skill.curvalue = Com_Clamp( 0, 4, (int)UI_trap_Cvar_VariableValue( "g_spSkill" ) - 1 ); y += SMALLCHAR_HEIGHT; addBotsMenuInfo.team.generic.type = MTYPE_SPINCONTROL; addBotsMenuInfo.team.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT; addBotsMenuInfo.team.generic.x = 320; addBotsMenuInfo.team.generic.y = y; addBotsMenuInfo.team.generic.name = "Team: "; addBotsMenuInfo.team.generic.id = ID_TEAM; if( gametype >= GT_TEAM ) { addBotsMenuInfo.team.itemnames = teamNames2; } else { addBotsMenuInfo.team.itemnames = teamNames1; addBotsMenuInfo.team.generic.flags = QMF_GRAYED; } addBotsMenuInfo.go.generic.type = MTYPE_BITMAP; addBotsMenuInfo.go.generic.name = ART_FIGHT0; addBotsMenuInfo.go.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; addBotsMenuInfo.go.generic.id = ID_GO; addBotsMenuInfo.go.generic.callback = UI_AddBotsMenu_FightEvent; addBotsMenuInfo.go.generic.x = 320+128-128; addBotsMenuInfo.go.generic.y = 256+128-64; addBotsMenuInfo.go.width = 128; addBotsMenuInfo.go.height = 64; addBotsMenuInfo.go.focuspic = ART_FIGHT1; addBotsMenuInfo.back.generic.type = MTYPE_BITMAP; addBotsMenuInfo.back.generic.name = ART_BACK0; addBotsMenuInfo.back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; addBotsMenuInfo.back.generic.id = ID_BACK; addBotsMenuInfo.back.generic.callback = UI_AddBotsMenu_BackEvent; addBotsMenuInfo.back.generic.x = 320-128; addBotsMenuInfo.back.generic.y = 256+128-64; addBotsMenuInfo.back.width = 128; addBotsMenuInfo.back.height = 64; addBotsMenuInfo.back.focuspic = ART_BACK1; addBotsMenuInfo.baseBotNum = 0; addBotsMenuInfo.selectedBotNum = 0; addBotsMenuInfo.bots[0].color = color_white; UI_AddBotsMenu_GetSortedBotNums(); UI_AddBotsMenu_SetBotNames(); Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.arrows ); Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.up ); Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.down ); for( n = 0; n < count; n++ ) { Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.bots[n] ); } Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.skill ); Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.team ); Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.go ); Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.back ); }