Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
intermission.qc File Reference
Include dependency graph for intermission.qc:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

float DoNextMapOverride (float reinit)
void FixIntermissionClient (entity e)
string GetGametype ()
int GetMaplistPosition ()
string GetMapname ()
string GetNextMap (void)
string GotoMap (string m)
void GotoNextMap (float reinit)
void IntermissionThink (entity this)
bool Map_Check (string m, int pass)
string Map_Filename (string m)
void Map_Goto (float reinit)
void Map_Goto_SetIndex (int position)
void Map_Goto_SetStr (string nextmapname)
bool Map_IsRecent (string m)
void Map_MarkAsRecent (string m)
bool MapHasRightSize (string map)
void Maplist_Close ()
int Maplist_Init (void)
int MaplistMethod_Iterate (void)
int MaplistMethod_Random (void)
int MaplistMethod_Repeat (void)
void Send_NextMap_To_Player (entity pl)
void Set_NextMap (string mapname)

Variables

float autoscreenshot
int Map_Count
int Map_Current

Function Documentation

◆ DoNextMapOverride()

float DoNextMapOverride ( float reinit)

Definition at line 345 of file intermission.qc.

346{
348 {
350 alreadychangedlevel = true;
351 return true;
352 }
354 {
356 {
357 localcmd("quit\n");
358 alreadychangedlevel = true;
359 return true;
360 }
361 }
363 {
365 alreadychangedlevel = true;
366 return true;
367 }
368 if (!reinit && autocvar_samelevel) // if samelevel is set, stay on same level
369 {
370 localcmd("restart\n");
371 alreadychangedlevel = true;
372 return true;
373 }
374 if(get_nextmap() != "")
375 {
377 if (m != get_nextmap())
378 Set_NextMap(m);
379
380 if(!m || gametypevote)
381 return false;
383 {
385 return false;
386 }
387
388 if(MapInfo_CheckMap(m))
389 {
391 Map_Goto(reinit);
392 alreadychangedlevel = true;
393 return true;
394 }
395 }
396 if(!reinit && autocvar_lastlevel)
397 {
399 localcmd("set lastlevel 0\ntogglemenu 1\n");
400 alreadychangedlevel = true;
401 return true;
402 }
403 return false;
404}
int currentbots
Definition api.qh:104
int player_count
Definition api.qh:103
bool gametypevote
int cvar_settemp_restore()
Definition util.qc:857
void Set_NextMap(string mapname)
void Map_Goto_SetStr(string nextmapname)
void Map_Goto(float reinit)
bool autocvar_samelevel
bool alreadychangedlevel
bool autocvar_lastlevel
#define get_nextmap()
float MapInfo_CheckMap(string s)
Definition mapinfo.qc:1502
bool autocvar_g_campaign
Definition menu.qc:752
void localcmd(string command,...)
string strzone(string s)
void CampaignPostIntermission()
Definition campaign.qc:240
string GameTypeVote_MapInfo_FixName(string m)
bool autocvar_sv_vote_gametype
string autocvar_quit_and_redirect
Definition world.qh:13
bool autocvar_quit_when_empty
Definition world.qh:15
string redirection_target
Definition world.qh:67

References alreadychangedlevel, autocvar_g_campaign, autocvar_lastlevel, autocvar_quit_and_redirect, autocvar_quit_when_empty, autocvar_samelevel, autocvar_sv_vote_gametype, CampaignPostIntermission(), currentbots, cvar_settemp_restore(), gametypevote, GameTypeVote_MapInfo_FixName(), get_nextmap, localcmd(), Map_Goto(), Map_Goto_SetStr(), MapInfo_CheckMap(), player_count, redirection_target, Set_NextMap(), and strzone().

Referenced by GotoFirstMap(), GotoMap(), and MapVote_Think().

◆ FixIntermissionClient()

void FixIntermissionClient ( entity e)

Definition at line 508 of file intermission.qc.

509{
510 if(!e.autoscreenshot) // initial call
511 {
512 e.autoscreenshot = time + 0.1;
513 SetResourceExplicit(e, RES_HEALTH, -2342); // health in the first intermission phase
514 for (int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
515 {
516 .entity weaponentity = weaponentities[slot];
517 if(e.(weaponentity))
518 {
519 e.(weaponentity).effects = EF_NODRAW;
520 if (e.(weaponentity).weaponchild)
521 e.(weaponentity).weaponchild.effects = EF_NODRAW;
522 }
523 }
524 if(IS_REAL_CLIENT(e))
525 {
526 stuffcmd(e, "\nscr_printspeed 1000000\n");
530 });
532 {
533 stuffcmd(e, sprintf("\ncd loop %s\n", RandomSelection_chosen_string));
534 }
535 msg_entity = e;
537 }
538 }
539}
float effects
float time
const float EF_NODRAW
WriteByte(chan, ent.angles.y/DEC_FACTOR)
SetResourceExplicit(ent, RES_ARMOR, ReadByte() *DEC_FACTOR)) ENTCS_PROP(NAME
string autocvar_sv_intermission_cdtrack
#define FOREACH_WORD(words, cond, body)
Definition iter.qh:33
float MSG_ONE
Definition menudefs.qc:56
entity msg_entity
Definition progsdefs.qc:63
float SVC_INTERMISSION
Definition progsdefs.qc:340
#define stuffcmd(cl,...)
Definition progsdefs.qh:23
ERASEABLE void RandomSelection_Init()
Definition random.qc:4
string RandomSelection_chosen_string
Definition random.qh:7
#define RandomSelection_AddString(s, weight, priority)
Definition random.qh:16
#define IS_REAL_CLIENT(v)
Definition utils.qh:17
entity weaponchild
Definition all.qh:400
const int MAX_WEAPONSLOTS
Definition weapon.qh:16
entity weaponentities[MAX_WEAPONSLOTS]
Definition weapon.qh:17

References autocvar_sv_intermission_cdtrack, EF_NODRAW, effects, entity(), FOREACH_WORD, IS_REAL_CLIENT, MAX_WEAPONSLOTS, msg_entity, MSG_ONE, RandomSelection_AddString, RandomSelection_chosen_string, RandomSelection_Init(), SetResourceExplicit(), stuffcmd, SVC_INTERMISSION, time, weaponchild, weaponentities, and WriteByte().

Referenced by IntermissionThink(), and NextLevel().

◆ GetGametype()

string GetGametype ( )

◆ GetMaplistPosition()

int GetMaplistPosition ( )

Definition at line 41 of file intermission.qc.

42{
43 string map = GetMapname();
45
46 if(idx >= 0)
47 {
48 if(idx < Map_Count)
49 {
50 if(map == bufstr_get(maplist_buffer, idx))
51 {
52 return idx;
53 }
54 }
55 }
56
57 for(int pos = 0; pos < Map_Count; ++pos)
58 {
59 if(map == bufstr_get(maplist_buffer, pos))
60 return pos;
61 }
62
63 // resume normal maplist rotation if current map is not in g_maplist
64 return idx;
65}
string GetMapname()
int Map_Count
int maplist_buffer
int autocvar_g_maplist_index

References autocvar_g_maplist_index, GetMapname(), Map_Count, and maplist_buffer.

Referenced by Maplist_Init().

◆ GetMapname()

◆ GetNextMap()

string GetNextMap ( void )

Definition at line 323 of file intermission.qc.

324{
325 int nextMap = -1;
326
327 if(nextMap == -1 && autocvar_g_maplist_selectrandom)
328 nextMap = MaplistMethod_Random();
329
330 if(nextMap == -1)
331 nextMap = MaplistMethod_Iterate();
332
333 if(nextMap == -1)
334 nextMap = MaplistMethod_Repeat();
335
336 if(nextMap >= 0)
337 {
338 Map_Goto_SetIndex(nextMap);
339 return getmapname_stored;
340 }
341
342 return "";
343}
void Map_Goto_SetIndex(int position)
int MaplistMethod_Iterate(void)
int MaplistMethod_Random(void)
int MaplistMethod_Repeat(void)
string getmapname_stored
bool autocvar_g_maplist_selectrandom

References autocvar_g_maplist_selectrandom, getmapname_stored, Map_Goto_SetIndex(), MaplistMethod_Iterate(), MaplistMethod_Random(), and MaplistMethod_Repeat().

Referenced by GotoNextMap(), and MapVote_AddVotable().

◆ GotoMap()

string GotoMap ( string m)

Definition at line 423 of file intermission.qc.

424{
426 if (!m)
427 return "The map you suggested is not available on this server.";
429 if (!MapInfo_CheckMap(m))
430 return "The map you suggested does not support the current gametype.";
431 if (m != get_nextmap())
432 Set_NextMap(m);
434 cvar_set("_endmatch", "1");
436 {
437 if(DoNextMapOverride(0))
438 return "Map switch initiated.";
439 else
440 return "Hm... no. For some reason I like THIS map more.";
441 }
442 else
443 return "Map switch will happen after scoreboard.";
444}
float DoNextMapOverride(float reinit)
bool intermission_running
void cvar_set(string name, string value)
bool mapvote_initialized

References alreadychangedlevel, autocvar_sv_vote_gametype, cvar_set(), DoNextMapOverride(), GameTypeVote_MapInfo_FixName(), get_nextmap, intermission_running, MapInfo_CheckMap(), mapvote_initialized, and Set_NextMap().

Referenced by GameCommand_gotomap().

◆ GotoNextMap()

void GotoNextMap ( float reinit)

Definition at line 406 of file intermission.qc.

407{
408 //string nextmap;
409 //float n, nummaps;
410 //string s;
412 return;
413 alreadychangedlevel = true;
414
415 Maplist_Init();
416 string nextMap = GetNextMap();
418 if(nextMap == "")
419 error("Everything is broken - cannot find a next map. Please report this to the developers.");
420 Map_Goto(reinit);
421}
void Maplist_Close()
int Maplist_Init(void)
string GetNextMap(void)
#define error
Definition pre.qh:6

References alreadychangedlevel, error, GetNextMap(), Map_Goto(), Maplist_Close(), and Maplist_Init().

Referenced by GotoFirstMap(), MapVote_Think(), and SelectSpawnPoint().

◆ IntermissionThink()

void IntermissionThink ( entity this)

Definition at line 455 of file intermission.qc.

456{
458
459 float server_screenshot = (autocvar_sv_autoscreenshot && CS_CVAR(this).cvar_cl_autoscreenshot);
460 float client_screenshot = (CS_CVAR(this).cvar_cl_autoscreenshot == 2);
461
462 if( (server_screenshot || client_screenshot)
463 && ((this.autoscreenshot > 0) && (time > this.autoscreenshot)) )
464 {
465 this.autoscreenshot = -1;
466 if(IS_REAL_CLIENT(this))
467 {
468 // in old clients "cl_autoscreenshot_screenshot_s %s %s;" takes the screenshot
469 // "cl_autoscreenshot_screenshot %s %s;" does nothing because the cl_autoscreenshot_screenshot alias
470 // doesn't exist; the cl_autoscreenshot_screenshot dummy cvar is created
471 // so that "cl_autoscreenshot_screenshot %s %s" doesn't print any warning in console
472
473 // in new clients "cl_autoscreenshot_screenshot %s %s;" takes the screenshot
474 // even if the cl_autoscreenshot_screenshot cvar is created, only the cl_autoscreenshot_screenshot alias
475 // is executed since only the alias is executed if a cvar with the same name exists
476 // cl_autoscreenshot_screenshot_s is not run as cl_autoscreenshot_screenshot alias clears it
477 // (it doesn't delete it so that "unalias cl_autoscreenshot_screenshot_s;" doesn't print any warning)
478
479 // this stuffcmd is needed only for Xonotic 0.8.6 or lower
480 // the s in cl_autoscreenshot_screenshot_s stands for server alias (alias name can't be longer than 32)
481 stuffcmd(this, sprintf("\n"
482 "alias cl_autoscreenshot_screenshot_s \"screenshot screenshots/autoscreenshot/%s-%s.jpg\";"
483 "set cl_autoscreenshot_screenshot 0;", GetMapname(), matchid));
484
485 // keep only this stuffcmd after the next release
486 stuffcmd(this, sprintf("\ncl_autoscreenshot_screenshot %s %s;"
487 "echo \"^5A screenshot has been taken at request of the server.\"\n", GetMapname(), matchid));
488
489 // this stuffcmd is needed only for Xonotic 0.8.6 or lower
490 stuffcmd(this, "\n"
491 "cl_autoscreenshot_screenshot_s %s %s;"
492 "unset cl_autoscreenshot_screenshot;"
493 "unalias cl_autoscreenshot_screenshot_s;");
494 }
495 return;
496 }
497
499 return;
500
503 return;
504
506}
#define PHYS_INPUT_BUTTON_JUMP(s)
Definition player.qh:153
#define PHYS_INPUT_BUTTON_HOOK(s)
Definition player.qh:157
#define PHYS_INPUT_BUTTON_USE(s)
Definition player.qh:160
#define PHYS_INPUT_BUTTON_ATCK(s)
Definition player.qh:152
#define PHYS_INPUT_BUTTON_ATCK2(s)
Definition player.qh:154
void FixIntermissionClient(entity e)
float autoscreenshot
float intermission_exittime
bool autocvar_sv_autoscreenshot
#define CS_CVAR(this)
Definition state.qh:51
void MapVote_Start()
string matchid
Definition world.qh:63

References autocvar_sv_autoscreenshot, autoscreenshot, CS_CVAR, entity(), FixIntermissionClient(), GetMapname(), intermission_exittime, IS_REAL_CLIENT, mapvote_initialized, MapVote_Start(), matchid, PHYS_INPUT_BUTTON_ATCK, PHYS_INPUT_BUTTON_ATCK2, PHYS_INPUT_BUTTON_HOOK, PHYS_INPUT_BUTTON_JUMP, PHYS_INPUT_BUTTON_USE, stuffcmd, and time.

Referenced by PlayerPreThink(), and PlayerThink().

◆ Map_Check()

bool Map_Check ( string m,
int pass )

Definition at line 135 of file intermission.qc.

136{
137 if(pass <= 1)
138 {
139 if(Map_IsRecent(m))
140 return false;
141 }
142 if(MapInfo_CheckMap(m))
143 {
144 if(pass == 2)
145 return true;
146 // MapInfo_Map_flags was set by MapInfo_CheckMap()
148 return false;
149 if(MapHasRightSize(m))
150 return true;
151 return false;
152 }
153 else
154 {
155 string filename = Map_Filename(m);
156 LOG_DEBUG( "Couldn't select '", filename, "'..." );
157 }
158
159 return false;
160}
#define pass(name, colormin, colormax)
string Map_Filename(string m)
bool MapHasRightSize(string map)
bool Map_IsRecent(string m)
#define LOG_DEBUG(...)
Definition log.qh:78
int MapInfo_Map_flags
Definition mapinfo.qh:15
const int MAPINFO_FLAG_DONOTWANT
Definition mapinfo.qh:164

References LOG_DEBUG, Map_Filename(), Map_IsRecent(), MapHasRightSize(), MapInfo_CheckMap(), MAPINFO_FLAG_DONOTWANT, MapInfo_Map_flags, and pass.

Referenced by Maplist_Init(), MaplistMethod_Iterate(), MaplistMethod_Random(), and MaplistMethod_Repeat().

◆ Map_Filename()

string Map_Filename ( string m)

Definition at line 118 of file intermission.qc.

119{
120 return strcat("maps/", m, ".bsp");
121}
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))

References strcat().

Referenced by Map_Check(), and Maplist_Init().

◆ Map_Goto()

void Map_Goto ( float reinit)

Definition at line 179 of file intermission.qc.

180{
182}
void MapInfo_LoadMap(string s, float reinit)
Definition mapinfo.qc:1514

References getmapname_stored, and MapInfo_LoadMap().

Referenced by DoNextMapOverride(), GotoNextMap(), MapVote_Finished(), and MapVote_Think().

◆ Map_Goto_SetIndex()

void Map_Goto_SetIndex ( int position)

Definition at line 172 of file intermission.qc.

173{
174 Map_Current = position;
175 cvar_set("g_maplist_index", ftos(position));
176 Map_Goto_SetStr(bufstr_get(maplist_buffer, position));
177}
int Map_Current
string ftos(float f)

References cvar_set(), ftos(), Map_Current, Map_Goto_SetStr(), and maplist_buffer.

Referenced by GetNextMap().

◆ Map_Goto_SetStr()

void Map_Goto_SetStr ( string nextmapname)

Definition at line 162 of file intermission.qc.

163{
164 if(getmapname_stored != "")
166 if(nextmapname == "")
168 else
169 getmapname_stored = strzone(nextmapname);
170}
void strunzone(string s)

References getmapname_stored, strunzone(), and strzone().

Referenced by DoNextMapOverride(), Map_Goto_SetIndex(), MapVote_Finished(), and MapVote_Think().

◆ Map_IsRecent()

bool Map_IsRecent ( string m)

Definition at line 128 of file intermission.qc.

129{
131 return false;
133}
#define strhasword(s, w)
Definition string.qh:375
string autocvar_g_maplist_mostrecent

References autocvar_g_maplist_mostrecent, and strhasword.

Referenced by Map_Check(), MapVote_Suggest(), and ValidateMap().

◆ Map_MarkAsRecent()

void Map_MarkAsRecent ( string m)

Definition at line 123 of file intermission.qc.

124{
126}
float max(float f,...)
ERASEABLE string strwords(string s, int w)
Definition string.qh:365
ERASEABLE string cons(string a, string b)
Definition string.qh:277
int autocvar_g_maplist_mostrecent_count

References autocvar_g_maplist_mostrecent, autocvar_g_maplist_mostrecent_count, cons(), cvar_set(), max(), and strwords().

Referenced by spawnfunc().

◆ MapHasRightSize()

bool MapHasRightSize ( string map)

Definition at line 67 of file intermission.qc.

68{
69 int minplayers = max(0, floor(autocvar_minplayers));
70 if (teamplay)
73 && (currentbots || autocvar_bot_number || player_count < minplayers))
74 {
75 string checkwp_msg = strcat("checkwp ", map);
76 if(!fexists(strcat("maps/", map, ".waypoints")))
77 {
78 LOG_TRACE(checkwp_msg, ": no waypoints");
79 return false;
80 }
81 LOG_TRACE(checkwp_msg, ": has waypoints");
82 }
83
85 return true;
86
87 // open map size restriction file (sets map_minplayers and map_maxplayers)
88 if(!MapReadSizes(map))
89 return true; // map has no size restrictions
90
91 string checksize_msg = strcat("MapHasRightSize ", map);
92 int pcount = player_count;
93
95 pcount -= currentbots;
96 pcount -= rint(cvar("g_maplist_sizes_specparty") * pcount);
98 pcount = min(pcount, GetPlayerLimit()); // bind it to the player limit so that forced spectators don't influence the limits
99
100 // ensure small maps can be selected when pcount is low
102 map_minplayers = 0;
103
104 if(pcount < map_minplayers)
105 {
106 LOG_TRACE(checksize_msg, ": not enough");
107 return false;
108 }
109 if(map_maxplayers && pcount > map_maxplayers)
110 {
111 LOG_TRACE(checksize_msg, ": too many");
112 return false;
113 }
114 LOG_TRACE(checksize_msg, ": right size");
115 return true;
116}
int autocvar_bot_number
Definition cvars.qh:64
int autocvar_minplayers
Definition cvars.qh:68
int autocvar_minplayers_per_team
Definition cvars.qh:69
ERASEABLE bool fexists(string f)
Definition file.qh:4
#define LOG_TRACE(...)
Definition log.qh:74
bool MapReadSizes(string map)
Definition mapinfo.qc:1401
Gametype MapInfo_CurrentGametype()
Definition mapinfo.qc:1482
float _MapInfo_GetTeamPlayBool(Gametype t)
Definition mapinfo.qc:538
int map_minplayers
Definition mapinfo.qh:190
int map_maxplayers
Definition mapinfo.qh:191
float cvar(string name)
float min(float f,...)
float rint(float f)
float floor(float f)
#define AVAILABLE_TEAMS
Number of teams that exist currently.
int GetPlayerLimit()
Definition client.qc:2156
bool autocvar_g_maplist_check_waypoints
bool autocvar_g_maplist_sizes_count_maxplayers
bool autocvar_g_maplist_ignore_sizes
bool autocvar_g_maplist_sizes_count_bots
bool teamplay
Definition teams.qh:59

References _MapInfo_GetTeamPlayBool(), autocvar_bot_number, autocvar_g_maplist_check_waypoints, autocvar_g_maplist_ignore_sizes, autocvar_g_maplist_sizes_count_bots, autocvar_g_maplist_sizes_count_maxplayers, autocvar_minplayers, autocvar_minplayers_per_team, AVAILABLE_TEAMS, currentbots, cvar(), fexists(), floor(), GetPlayerLimit(), LOG_TRACE, map_maxplayers, map_minplayers, MapInfo_CurrentGametype(), MapReadSizes(), max(), min(), player_count, rint(), strcat(), and teamplay.

Referenced by Map_Check().

◆ Maplist_Close()

void Maplist_Close ( )

Definition at line 317 of file intermission.qc.

318{
319 buf_del(maplist_buffer);
320}

References maplist_buffer.

Referenced by GotoNextMap(), and MapVote_AddVotableMaps().

◆ Maplist_Init()

int Maplist_Init ( void )

Definition at line 239 of file intermission.qc.

240{
241 bool have_maps = false;
242 if(autocvar_g_maplist != "")
243 {
244 // make sure there is at least one playable map in the list
245 bool needtrim = false;
247 {
248 if(!fexists(Map_Filename(it)))
249 {
250 needtrim = true;
251 if(have_maps)
252 break;
253 continue;
254 }
255 if(have_maps || !Map_Check(it, 2))
256 continue;
257 have_maps = true;
258 if(needtrim)
259 break;
260 });
261
262 // additionally trim any non-existent maps
263 if(needtrim)
264 {
265 int trimmedmaps = 0;
266 string newmaplist = "";
268 {
269 if(!fexists(Map_Filename(it)))
270 {
271 ++trimmedmaps;
272 continue;
273 }
274 newmaplist = cons(newmaplist, it);
275 });
276 cvar_set("g_maplist", newmaplist);
277 LOG_DEBUGF("Maplist_Init: trimmed %d missing maps from the list", trimmedmaps);
278 }
279 }
280
281 if (!have_maps)
282 {
283 bprint( "Maplist contains no usable maps! Resetting it to default map list.\n" );
286 localcmd("\nmenu_cmd sync\n");
287 }
288
290
291 int _cnt = 0;
293 {
294 // NOTE: inlined maplist_shuffle function to avoid a second buffer, keep both in sync
296 {
297 int _j = floor(random() * (_cnt + 1));
298 if(_j != _cnt)
299 bufstr_set(maplist_buffer, _cnt, bufstr_get(maplist_buffer, _j));
300 bufstr_set(maplist_buffer, _j, it);
301 ++_cnt;
302 }
303 else
304 bufstr_set(maplist_buffer, i, it);
305 });
306
307 Map_Count = buf_getsize(maplist_buffer);
308
309 if(Map_Count == 0)
310 error("empty maplist, cannot select a new map");
311
313
314 return Map_Count;
315}
#define buf_create
int GetMaplistPosition()
bool Map_Check(string m, int pass)
#define LOG_DEBUGF(...)
Definition log.qh:79
int MapInfo_RequiredFlags()
Definition mapinfo.qc:1670
int MapInfo_ForbiddenFlags()
Definition mapinfo.qc:1655
string MapInfo_ListAllowedMaps(Gametype type, float pRequiredFlags, float pForbiddenFlags)
Definition mapinfo.qc:1533
float bound(float min, float value, float max)
float random(void)
void bprint(string text,...)
float autocvar_g_maplist_shuffle
#define autocvar_g_maplist
bool autocvar_sv_dedicated
Definition world.qh:41

References autocvar_g_maplist, autocvar_g_maplist_shuffle, autocvar_sv_dedicated, bound(), bprint(), buf_create, cons(), cvar_set(), error, fexists(), floor(), FOREACH_WORD, GetMaplistPosition(), localcmd(), LOG_DEBUGF, Map_Check(), Map_Count, Map_Current, Map_Filename(), MapInfo_CurrentGametype(), MapInfo_ForbiddenFlags(), MapInfo_ListAllowedMaps(), MapInfo_RequiredFlags(), maplist_buffer, and random().

Referenced by GotoNextMap(), and MapVote_AddVotableMaps().

◆ MaplistMethod_Iterate()

int MaplistMethod_Iterate ( void )

Definition at line 187 of file intermission.qc.

188{
189 int attempts = 42; // skip advanced checks if this many maps fail
190
191 LOG_TRACE("Trying MaplistMethod_Iterate");
192
193 for(int i = 1; i < Map_Count; ++i)
194 {
195 int mapindex = (i + Map_Current) % Map_Count;
196 if(Map_Check(bufstr_get(maplist_buffer, mapindex), 1))
197 return mapindex;
198
199 --attempts;
200 if(attempts <= 0)
201 {
202 LOG_DEBUG("MaplistMethod_Iterate: Couldn't find a suitable map, falling back to next valid");
203 break;
204 }
205 }
206
207 // failing that, just accept the next map in the list
208 int mapindex = (1 + Map_Current) % Map_Count;
209 return mapindex;
210}

References LOG_DEBUG, LOG_TRACE, Map_Check(), Map_Count, Map_Current, and maplist_buffer.

Referenced by GetNextMap().

◆ MaplistMethod_Random()

int MaplistMethod_Random ( void )

Definition at line 221 of file intermission.qc.

222{
223 int i, imax;
224
225 LOG_TRACE("Trying MaplistMethod_Random");
226
227 imax = 42;
228
229 for(i = 0; i <= imax; ++i)
230 {
231 int mapindex = (Map_Current + floor(random() * (Map_Count - 1) + 1)) % Map_Count; // any OTHER map
232 if(Map_Check(bufstr_get(maplist_buffer, mapindex), 1))
233 return mapindex;
234 }
235 return -1;
236}

References floor(), LOG_TRACE, Map_Check(), Map_Count, Map_Current, maplist_buffer, and random().

Referenced by GetNextMap().

◆ MaplistMethod_Repeat()

int MaplistMethod_Repeat ( void )

Definition at line 212 of file intermission.qc.

213{
214 LOG_TRACE("Trying MaplistMethod_Repeat");
215
216 if(Map_Check(bufstr_get(maplist_buffer, Map_Current), 2))
217 return Map_Current;
218 return -2;
219}

References LOG_TRACE, Map_Check(), Map_Current, and maplist_buffer.

Referenced by GetNextMap().

◆ Send_NextMap_To_Player()

void Send_NextMap_To_Player ( entity pl)

Definition at line 13 of file intermission.qc.

14{
15 stuffcmd(pl, sprintf("\nsettemp _nextmap %s\n", get_nextmap()));
16}

References entity(), get_nextmap, and stuffcmd.

Referenced by ClientConnect(), and Set_NextMap().

◆ Set_NextMap()

void Set_NextMap ( string mapname)

Definition at line 18 of file intermission.qc.

19{
20 if (mapname != "")
22 else
24
26}
void Send_NextMap_To_Player(entity pl)
string _nextmap
#define strfree(this)
Definition string.qh:57
#define strcpy(this, s)
Definition string.qh:51
#define FOREACH_CLIENT(cond, body)
Definition utils.qh:52

References _nextmap, FOREACH_CLIENT, IS_REAL_CLIENT, mapname, Send_NextMap_To_Player(), strcpy, and strfree.

Referenced by DoNextMapOverride(), GameCommand_nextmap(), and GotoMap().

Variable Documentation

◆ autoscreenshot

float autoscreenshot

Definition at line 454 of file intermission.qc.

Referenced by IntermissionThink().

◆ Map_Count

int Map_Count

◆ Map_Current