/*QUAKED worldspawn (0 0 0) ? Used for game-world global options. Every map should have exactly one. === KEYS === ; message: Text to print during connection process. Used for the name of level. ; music: path/name of looping .wav file used for level's music (eg. music/sonic5.wav). ; gravity: level gravity [g_gravity (800)] ; humanBuildPoints: maximum amount of power the humans can use. [g_humanBuildPoints] ; humanRepeaterBuildPoints: maximum amount of power the humans can use around each repeater. [g_humanRepeaterBuildPoints] ; alienBuildPoints: maximum amount of sentience available to the overmind. [g_alienBuildPoints] ; humanMaxStage: The highest stage the humans are allowed to use (0/1/2). [g_alienMaxStage (2)] ; alienMaxStage: The highest stage the aliens are allowed to use (0/1/2). [g_humanMaxStage (2)] ; disabledEquipment: A comma delimited list of human weapons or upgrades to disable for this map. [g_disabledEquipment ()] ; disabledClasses: A comma delimited list of alien classes to disable for this map. [g_disabledClasses ()] ; disabledBuildables: A comma delimited list of buildables to disable for this map. [g_disabledBuildables ()] */ void SP_worldspawn( void ) { char *s; G_SpawnString( "classname", "", &s ); if ( Q_stricmp( s, S_WORLDSPAWN ) ) { G_Error( "SP_worldspawn: The first entry in the spawn string isn't of expected type '" S_WORLDSPAWN "'" ); } // make some data visible to connecting client trap_SetConfigstring( CS_GAME_VERSION, GAME_VERSION ); trap_SetConfigstring( CS_LEVEL_START_TIME, va( "%i", level.startTime ) ); G_SpawnString( "music", "", &s ); trap_SetConfigstring( CS_MUSIC, s ); G_SpawnString( "message", "", &s ); trap_SetConfigstring( CS_MESSAGE, s ); // map specific message if(G_SpawnString( "colorGrade", "", &s )) trap_SetConfigstring( CS_GRADING_TEXTURES, s ); trap_SetConfigstring( CS_MOTD, g_motd.string ); // message of the day G_SpawnStringIntoCVar( "gravity", "g_gravity" ); G_SpawnStringIntoCVar( "humanMaxStage", "g_humanRepeaterBuildPoints" ); G_SpawnStringIntoCVar( "alienMaxStage", "g_alienMaxStage" ); G_SpawnStringIntoCVar( "humanBuildPoints", "g_humanBuildPoints" ); G_SpawnStringIntoCVar( "humanRepeaterBuildPoints", "g_humanRepeaterBuildPoints" ); G_SpawnStringIntoCVar( "alienBuildPoints", "g_alienBuildPoints" ); G_SpawnStringIntoCVar( "disabledEquipment", "g_disabledEquipment" ); G_SpawnStringIntoCVar( "disabledClasses", "g_disabledClasses" ); G_SpawnStringIntoCVar( "disabledBuildables", "g_disabledBuildables" ); g_entities[ ENTITYNUM_WORLD ].s.number = ENTITYNUM_WORLD; g_entities[ ENTITYNUM_WORLD ].r.ownerNum = ENTITYNUM_NONE; g_entities[ ENTITYNUM_WORLD ].classname = S_WORLDSPAWN; g_entities[ ENTITYNUM_NONE ].s.number = ENTITYNUM_NONE; g_entities[ ENTITYNUM_NONE ].r.ownerNum = ENTITYNUM_NONE; g_entities[ ENTITYNUM_NONE ].classname = "nothing"; // see if we want a warmup time trap_SetConfigstring( CS_WARMUP, "-1" ); if ( g_doWarmup.integer ) { level.warmupTime = level.time - level.startTime + ( g_warmup.integer * 1000 ); trap_SetConfigstring( CS_WARMUP, va( "%i", level.warmupTime ) ); G_LogPrintf( "Warmup: %i\n", g_warmup.integer ); } level.timelimit = g_timelimit.integer; }
/*QUAKED worldspawn (0 0 0) ? Used for game-world global options. Every map should have exactly one. === KEYS === ; message: Text to print during connection process. Used for the name of level. ; music: path/name of looping .wav file used for level's music (eg. music/sonic5.wav). ; gravity: level gravity [g_gravity (800)] ; humanBuildPoints: maximum amount of power the humans can use. [g_humanBuildPoints] ; humanRepeaterBuildPoints: maximum amount of power the humans can use around each repeater. [g_humanRepeaterBuildPoints] ; alienBuildPoints: maximum amount of sentience available to the overmind. [g_alienBuildPoints] ; disabledEquipment: A comma delimited list of human weapons or upgrades to disable for this map. [g_disabledEquipment ()] ; disabledClasses: A comma delimited list of alien classes to disable for this map. [g_disabledClasses ()] ; disabledBuildables: A comma delimited list of buildables to disable for this map. [g_disabledBuildables ()] */ void SP_worldspawn() { char *s; float reverbIntensity = 1.0f; G_SpawnString( "classname", "", &s ); if ( Q_stricmp( s, S_WORLDSPAWN ) ) { Com_Error(errorParm_t::ERR_DROP, "SP_worldspawn: The first entry in the spawn string isn't of expected type '" S_WORLDSPAWN "'" ); } // make some data visible to connecting client trap_SetConfigstring( CS_GAME_VERSION, GAME_VERSION ); trap_SetConfigstring( CS_LEVEL_START_TIME, va( "%i", level.startTime ) ); G_SpawnString( "music", "", &s ); trap_SetConfigstring( CS_MUSIC, s ); G_SpawnString( "message", "", &s ); trap_SetConfigstring( CS_MESSAGE, s ); // map specific message if(G_SpawnString( "gradingTexture", "", &s )) trap_SetConfigstring( CS_GRADING_TEXTURES, va( "%i %f %s", -1, 0.0f, s ) ); if(G_SpawnString( "colorGrade", "", &s )) { Log::Warn("\"colorGrade\" deprecated. Please use \"gradingTexture\""); trap_SetConfigstring( CS_GRADING_TEXTURES, va( "%i %f %s", -1, 0.0f, s ) ); } if(G_SpawnString( "reverbIntensity", "", &s )) sscanf( s, "%f", &reverbIntensity ); if(G_SpawnString( "reverbEffect", "", &s )) trap_SetConfigstring( CS_REVERB_EFFECTS, va( "%i %f %s %f", 0, 0.0f, s, Com_Clamp( 0.0f, 2.0f, reverbIntensity ) ) ); trap_SetConfigstring( CS_MOTD, g_motd.string ); // message of the day G_SpawnStringIntoCVarIfSet( "gravity", "g_gravity" ); G_SpawnStringIntoCVarIfSet( "humanBuildPoints", "g_humanBuildPoints" ); G_SpawnStringIntoCVarIfSet( "humanRepeaterBuildPoints", "g_humanRepeaterBuildPoints" ); G_SpawnStringIntoCVarIfSet( "alienBuildPoints", "g_alienBuildPoints" ); G_SpawnStringIntoCVar( "disabledEquipment", "g_disabledEquipment" ); G_SpawnStringIntoCVar( "disabledClasses", "g_disabledClasses" ); G_SpawnStringIntoCVar( "disabledBuildables", "g_disabledBuildables" ); g_entities[ ENTITYNUM_WORLD ].s.number = ENTITYNUM_WORLD; g_entities[ ENTITYNUM_WORLD ].r.ownerNum = ENTITYNUM_NONE; g_entities[ ENTITYNUM_WORLD ].classname = S_WORLDSPAWN; g_entities[ ENTITYNUM_NONE ].s.number = ENTITYNUM_NONE; g_entities[ ENTITYNUM_NONE ].r.ownerNum = ENTITYNUM_NONE; g_entities[ ENTITYNUM_NONE ].classname = "nothing"; // see if we want a warmup time trap_SetConfigstring( CS_WARMUP, "-1" ); if ( g_doWarmup.integer ) { level.warmupTime = level.matchTime + ( g_warmup.integer * 1000 ); trap_SetConfigstring( CS_WARMUP, va( "%i", level.warmupTime ) ); G_LogPrintf( "Warmup: %i\n", g_warmup.integer ); } level.timelimit = g_timelimit.integer; }