char *G_Gametype_GENERIC_ScoreboardMessage( void ) { char entry[MAX_TOKEN_CHARS]; size_t len; int i; edict_t *e; int carrierIcon; *scoreboardString = 0; len = 0; Q_snprintfz( entry, sizeof(entry), "&t %i 0 0 ", TEAM_PLAYERS ); if( SCOREBOARD_MSG_MAXSIZE - len > strlen( entry ) ) { Q_strncatz( scoreboardString, entry, sizeof( scoreboardString ) ); len = strlen( scoreboardString ); } // players for( i = 0; i < teamlist[TEAM_PLAYERS].numplayers; i++ ) { e = game.edicts + teamlist[TEAM_PLAYERS].playerIndices[i]; if( e->s.effects & EF_CARRIER ) carrierIcon = trap_ImageIndex( ( e->s.team == TEAM_BETA ) ? PATH_ALPHAFLAG_ICON : PATH_BETAFLAG_ICON ); else if( e->s.effects & EF_QUAD ) carrierIcon = trap_ImageIndex( PATH_QUAD_ICON ); else if( e->s.effects & EF_SHELL ) carrierIcon = trap_ImageIndex( PATH_SHELL_ICON ); else if( e->s.effects & EF_REGEN ) carrierIcon = trap_ImageIndex( PATH_REGEN_ICON ); else carrierIcon = 0; Q_snprintfz( entry, sizeof( entry ), "&p %i %i %i %i %i ", PLAYERNUM( e ), e->r.client->level.stats.score, e->r.client->r.ping > 999 ? 999 : e->r.client->r.ping, carrierIcon, ( level.ready[PLAYERNUM( e )] || GS_MatchState() >= MATCH_STATE_PLAYTIME ) ? trap_ImageIndex( PATH_VSAY_YES_ICON ) : 0 ); if( SCOREBOARD_MSG_MAXSIZE - len > strlen( entry ) ) { Q_strncatz( scoreboardString, entry, sizeof( scoreboardString ) ); len = strlen( scoreboardString ); } } return scoreboardString; }
//QUAKED worldspawn (0 0 0) ? // //Only used for the world. //"sky" environment map name //"skyaxis" vector axis for rotating sky //"skyrotate" speed of rotation in degrees/second //"sounds" music cd track number //"gravity" 800 is default gravity //"message" text to print at user logon //======================== static void SP_worldspawn( edict_t *ent ) { ent->movetype = MOVETYPE_PUSH; ent->r.solid = SOLID_YES; ent->r.inuse = true; // since the world doesn't use G_Spawn() VectorClear( ent->s.origin ); VectorClear( ent->s.angles ); GClip_SetBrushModel( ent, "*0" ); // sets mins / maxs and modelindex 1 G_PureModel( "*0" ); if( st.nextmap ) Q_strncpyz( level.nextmap, st.nextmap, sizeof( level.nextmap ) ); // make some data visible to the server /* message = trap_GetFullnameFromMapList( level.mapname ); if( message && message[0] ) ent->message = G_LevelCopyString( message ); */ if( ent->message && ent->message[0] ) { trap_ConfigString( CS_MESSAGE, ent->message ); Q_strncpyz( level.level_name, ent->message, sizeof( level.level_name ) ); } else { trap_ConfigString( CS_MESSAGE, level.mapname ); Q_strncpyz( level.level_name, level.mapname, sizeof( level.level_name ) ); } // send music if( st.music ) { trap_ConfigString( CS_AUDIOTRACK, st.music ); trap_PureSound( st.music ); } if( st.gravity ) level.gravity = atof( st.gravity ); if( st.colorCorrection ) { level.colorCorrection = trap_ImageIndex( st.colorCorrection ); gs.gameState.stats[GAMESTAT_COLORCORRECTION] = level.colorCorrection; } }
/* * PrecacheItem * * Precaches all data needed for a given item. * This will be called for each item spawned in a level, * and for each item in each client's inventory. */ void PrecacheItem( gsitem_t *it ) { int i; const char *s, *start; char data[MAX_QPATH]; int len; gsitem_t *ammo; if( !it ) return; if( it->pickup_sound ) trap_SoundIndex( it->pickup_sound ); for( i = 0; i < MAX_ITEM_MODELS; i++ ) { if( it->world_model[i] ) trap_ModelIndex( it->world_model[i] ); } if( it->icon ) trap_ImageIndex( it->icon ); // parse everything for its ammo if( it->ammo_tag ) { ammo = GS_FindItemByTag( it->ammo_tag ); if( ammo != it ) PrecacheItem( ammo ); } // parse the space separated precache string for other items for( i = 0; i < 3; i++ ) { if( i == 0 ) s = it->precache_models; else if( i == 1 ) s = it->precache_sounds; else s = it->precache_images; if( !s || !s[0] ) continue; while( *s ) { start = s; while( *s && *s != ' ' ) s++; len = s-start; if( len >= MAX_QPATH || len < 5 ) G_Error( "PrecacheItem: %s has bad precache string", it->classname ); memcpy( data, start, len ); data[len] = 0; if( *s ) s++; if( i == 0 ) trap_ModelIndex( data ); else if( i == 1 ) trap_SoundIndex( data ); else trap_ImageIndex( data ); } } }
//QUAKED misc_particles (.6 .7 .7) (-8 -8 -8) (8 8 8) SPHERICAL SOLID GRAVITY LIGHT EXPAND_EFFECT SHRINK_EFFECT START_OFF //-------- KEYS -------- //angles: direction in which particles will be thrown. //shader : particleShader void SP_misc_particles( edict_t *ent ) { ent->r.svflags &= ~SVF_NOCLIENT; ent->r.svflags |= SVF_BROADCAST; ent->r.solid = SOLID_NOT; ent->s.type = ET_PARTICLES; if( st.noise ) { ent->s.sound = trap_SoundIndex( st.noise ); G_PureSound( st.noise ); } if( st.gameteam >= TEAM_ALPHA && st.gameteam < GS_MAX_TEAMS ) ent->s.team = st.gameteam; else ent->s.team = 0; if( ent->speed > 0 ) ent->particlesInfo.speed = ((int)ent->speed) & 255; if( ent->count > 0 ) ent->particlesInfo.frequency = ent->count & 255; if( st.shaderName ) ent->particlesInfo.shaderIndex = trap_ImageIndex( st.shaderName ); else ent->particlesInfo.shaderIndex = trap_ImageIndex( "particle" ); if( st.size ) ent->particlesInfo.size = st.size & 255; else ent->particlesInfo.size = 16; ent->particlesInfo.time = ent->delay; if( !ent->particlesInfo.time ) ent->particlesInfo.time = 4; if( ent->spawnflags & 1 ) // SPHERICAL ent->particlesInfo.spherical = true; if( ent->spawnflags & 2 ) // BOUNCE ent->particlesInfo.bounce = true; if( ent->spawnflags & 4 ) // GRAVITY ent->particlesInfo.gravity = true; if( ent->spawnflags & 8 ) // LIGHT { ent->s.light = COLOR_RGB( (qbyte)(ent->color[0] * 255), (qbyte)(ent->color[1] * 255), (qbyte)(ent->color[2] * 255) ); if( !ent->s.light ) ent->s.light = COLOR_RGB( 255, 255, 255 ); } if( ent->spawnflags & 16 ) // EXPAND_EFFECT ent->particlesInfo.expandEffect = true; if( ent->spawnflags & 32 ) // SHRINK_EFFECT ent->particlesInfo.shrinkEffect = true; if( ent->spawnflags & 64 ) // START_OFF ent->r.svflags |= SVF_NOCLIENT; if( st.radius > 0 ) { ent->particlesInfo.spread = st.radius; clamp( ent->particlesInfo.spread, 0, 255 ); } ent->think = SP_misc_particles_finish; ent->nextThink = level.time + 1; ent->use = SP_misc_particles_use; GClip_LinkEntity( ent ); }