Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
campaign.qc File Reference
#include "campaign.qh"
#include <common/campaign_common.qh>
#include <common/mapinfo.qh>
#include <common/stats.qh>
#include <common/weapons/_all.qh>
#include <server/cheats.qh>
#include <server/intermission.qh>
#include <server/world.qh>
Include dependency graph for campaign.qc:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int Campaign_GetLevelNum ()
float Campaign_Invalid ()
float CampaignBailout (string s)
void CampaignLevelWarp (float n)
void CampaignPostInit ()
void CampaignPostIntermission ()
void CampaignPreInit ()
void CampaignPreIntermission ()
void CampaignSaveCvar (string cvarname, float value)

Variables

string campaign_index_var
float campaign_level
float campaign_won

Function Documentation

◆ Campaign_GetLevelNum()

int Campaign_GetLevelNum ( )

Definition at line 44 of file campaign.qc.

45{
46 return campaign_level + 1;
47}
float campaign_level
Definition campaign.qc:17

References campaign_level.

Referenced by SendWelcomeMessage().

◆ Campaign_Invalid()

float Campaign_Invalid ( )

Definition at line 31 of file campaign.qc.

32{
33 string thismapname, wantedmapname;
34 thismapname = GetMapname();
35 wantedmapname = campaign_gametype[0];
36 if(MapInfo_CurrentGametype() != MapInfo_Type_FromString(wantedmapname, false, false))
37 return CampaignBailout("wrong gametype!");
38 wantedmapname = campaign_mapname[0];
39 if(wantedmapname != thismapname)
40 return CampaignBailout(strcat("wrong map: ", wantedmapname, " != ", thismapname));
41 return 0;
42}
string campaign_gametype[CAMPAIGN_MAX_ENTRIES]
string campaign_mapname[CAMPAIGN_MAX_ENTRIES]
string GetMapname()
Gametype MapInfo_CurrentGametype()
Definition mapinfo.qc:1482
Gametype MapInfo_Type_FromString(string gtype, bool dowarn, bool is_q3compat)
Definition mapinfo.qc:620
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
float CampaignBailout(string s)
Definition campaign.qc:22

References campaign_gametype, campaign_mapname, CampaignBailout(), GetMapname(), MapInfo_CurrentGametype(), MapInfo_Type_FromString(), and strcat().

Referenced by CampaignPostInit(), and CampaignPreInit().

◆ CampaignBailout()

float CampaignBailout ( string s)

Definition at line 22 of file campaign.qc.

23{
24 cvar_set("g_campaign", "0");
25 LOG_INFO("^4campaign initialization failed: ", s);
27 error("CAMPAIGN FAIL AHAHAHAHAHAHAHAHAH))");
28 return 1;
29}
#define LOG_INFO(...)
Definition log.qh:65
void cvar_set(string name, string value)
#define error
Definition pre.qh:6
bool autocvar__campaign_testrun
Definition campaign.qh:3

References autocvar__campaign_testrun, cvar_set(), error, and LOG_INFO.

Referenced by Campaign_Invalid(), and CampaignPreInit().

◆ CampaignLevelWarp()

void CampaignLevelWarp ( float n)

Definition at line 262 of file campaign.qc.

263{
264 if(n < 0)
265 n = campaign_level + 1;
267 CampaignFile_Load(n, 1);
269 CampaignSetup(0);
270 else
271 error("Sorry, cheater. You are NOT WELCOME.");
273}
void CampaignFile_Unload()
void CampaignSetup(int n)
int campaign_entries
float CampaignFile_Load(float offset, float entries)

References campaign_entries, campaign_level, CampaignFile_Load(), CampaignFile_Unload(), CampaignSetup(), and error.

Referenced by GameCommand_warp(), and target_levelwarp_use().

◆ CampaignPostInit()

void CampaignPostInit ( )

Definition at line 101 of file campaign.qc.

102{
103 // now some sanity checks
104 if(Campaign_Invalid())
105 return;
107 {
108 cvar_set("fraglimit", "0");
109 cvar_set("leadlimit", "0");
110 cvar_set("timelimit", "0.01");
111 }
112 else
113 {
114 // "default" uses implicit values, "" or "0" means no limit
116 if(argv(0) != "default") {
117 cvar_set("fraglimit", argv(0));
118 }
119 if(argv(1) != "default") {
120 cvar_set("leadlimit", argv(1));
121 }
122 if(campaign_timelimit[0] != "default") {
123 cvar_set("timelimit", campaign_timelimit[0]);
124 }
125 }
126}
string campaign_fraglimit[CAMPAIGN_MAX_ENTRIES]
string campaign_timelimit[CAMPAIGN_MAX_ENTRIES]
#define tokenizebyseparator
string argv(float n)
float Campaign_Invalid()
Definition campaign.qc:31

References argv(), autocvar__campaign_testrun, campaign_fraglimit, Campaign_Invalid(), campaign_timelimit, cvar_set(), and tokenizebyseparator.

Referenced by spawnfunc().

◆ CampaignPostIntermission()

void CampaignPostIntermission ( )

Definition at line 240 of file campaign.qc.

241{
242 // NOTE: campaign_won is 0 or 1, that is, points to the next level
243
245 {
246 // last map won!
247 LOG_DEBUG("^2test run: campaign looks GOOD");
248 localcmd("togglemenu 1\n");
250 return;
251 }
252
257 campaign_name = "";
258}
string campaign_name
#define LOG_DEBUG(...)
Definition log.qh:80
void localcmd(string command,...)
void strunzone(string s)
float campaign_won
Definition campaign.qc:18
string campaign_index_var
Definition campaign.qc:19

References campaign_entries, campaign_index_var, campaign_name, campaign_won, CampaignFile_Unload(), CampaignSetup(), localcmd(), LOG_DEBUG, and strunzone().

Referenced by DoNextMapOverride().

◆ CampaignPreInit()

void CampaignPreInit ( )

Definition at line 49 of file campaign.qc.

50{
51 float baseskill;
54 campaign_index_var = strzone(strcat("g_campaign", campaign_name, "_index"));
56
57 if(campaign_entries < 1)
58 {
59 CampaignBailout("unknown map");
60 return;
61 }
62
64 {
67 CampaignBailout("JOLLY CHEATS AHAHAHAHAHAHAH))");
68 return;
69 }
70
72 campaign_forcewin = false;
73
74 cvar_set("sv_public", "0");
75 cvar_set("pausable", "1");
76
77 string cvar_campaignwrapper_list = strcat("; ", campaign_mutators[0], "; ");
78 int argc = tokenizebyseparator(cvar_campaignwrapper_list, "; ");
79 if(argc > 0)
80 {
81 for(int j = 0; j < argc; ++j)
82 {
83 string arg = argv(j);
84 if(arg == "") continue;
86 }
87 }
88
89 cvar_settemp("g_campaign", "1");
90 cvar_settemp("g_dm", "0");
91 cvar_settemp("skill", ftos(baseskill));
92 cvar_settemp("bot_number", ftos(campaign_bots[0]));
93 cvar_settemp("bot_vs_human", "0");
94
96
98 return;
99}
string campaign_mutators[CAMPAIGN_MAX_ENTRIES]
float campaign_bots[CAMPAIGN_MAX_ENTRIES]
float campaign_botskill[CAMPAIGN_MAX_ENTRIES]
int autocvar_sv_cheats
Definition cheats.qh:5
float cvar_settemp(string tmp_cvar, string tmp_value)
Definition util.qc:807
string mapname
void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s, float recurse)
Definition mapinfo.qc:666
void MapInfo_SwitchGameType(Gametype t)
Definition mapinfo.qc:1509
#define MAPINFO_SETTEMP_ACL_USER
Definition mapinfo.qh:236
string ftos(float f)
string strzone(string s)
float max(float f,...)
int autocvar_g_campaign_skill
Definition campaign.qh:8
string autocvar__campaign_name
Definition campaign.qh:5
int autocvar__campaign_index
Definition campaign.qh:4
bool campaign_forcewin
Definition campaign.qh:28

References _MapInfo_Parse_Settemp(), argv(), autocvar__campaign_index, autocvar__campaign_name, autocvar_g_campaign_skill, autocvar_sv_cheats, campaign_bots, campaign_botskill, campaign_entries, campaign_forcewin, campaign_gametype, campaign_index_var, Campaign_Invalid(), campaign_level, campaign_mutators, campaign_name, CampaignBailout(), CampaignFile_Load(), CampaignFile_Unload(), cvar_set(), cvar_settemp(), ftos(), MAPINFO_SETTEMP_ACL_USER, MapInfo_SwitchGameType(), MapInfo_Type_FromString(), mapname, max(), strcat(), strzone(), and tokenizebyseparator.

Referenced by spawnfunc().

◆ CampaignPreIntermission()

void CampaignPreIntermission ( )

Definition at line 168 of file campaign.qc.

169{
170 int won = 0;
171 int lost = 0;
172 string savevar;
173
175 if(it.winning)
176 ++won;
177 else
178 ++lost;
179 });
180
182 {
183 campaign_won = 1;
184 bprint("Campaign test run, advancing level.\n");
185 }
186 else if(campaign_forcewin)
187 {
188 campaign_won = 1;
189 bprint("The current level has been WON.\n");
190 }
191 else if(won == 1 && lost == 0 && checkrules_equality == 0)
192 {
193 if(autocvar_timelimit != 0 && autocvar_fraglimit != 0 && time > autocvar_timelimit * 60) // checks if the timelimit has expired.
194 {
195 campaign_won = 0;
196 bprint("Time's up! The current level has been LOST.\n");
197 // sound!
198 }
199 else
200 {
201 campaign_won = 1;
202 bprint("The current level has been WON.\n");
203 // sound!
204 }
205 }
206 else if(autocvar_timelimit != 0 && time > autocvar_timelimit * 60)
207 {
208 campaign_won = 0;
209 bprint("Time's up! The current level has been LOST.\n");
210 // sound!
211 }
212 else
213 {
214 campaign_won = 0;
215 bprint("The current level has been LOST.\n");
216 // sound!
217 }
218
220 {
222 {
223 if(campaign_entries < 2)
224 {
225 // I have won
226 savevar = strcat("g_campaign", campaign_name, "_won");
227 CampaignSaveCvar(savevar, 1);
228 // advance level (for menu to show it right)
230 }
231 else
232 {
233 // advance level
235 }
236 }
237 }
238}
float cheatcount_total
Definition cheats.qh:10
#define IS_PLAYER(s)
Definition player.qh:242
#define autocvar_timelimit
Definition stats.qh:92
#define autocvar_fraglimit
Definition stats.qh:90
float time
float cvar(string name)
void bprint(string text,...)
void CampaignSaveCvar(string cvarname, float value)
Definition campaign.qc:128
#define IS_REAL_CLIENT(v)
Definition utils.qh:17
#define FOREACH_CLIENT(cond, body)
Definition utils.qh:52
float checkrules_equality
Definition world.qh:35

References autocvar__campaign_testrun, autocvar_fraglimit, autocvar_timelimit, bprint(), campaign_entries, campaign_forcewin, campaign_index_var, campaign_level, campaign_name, campaign_won, CampaignSaveCvar(), cheatcount_total, checkrules_equality, cvar(), FOREACH_CLIENT, IS_PLAYER, IS_REAL_CLIENT, strcat(), and time.

Referenced by NextLevel().

◆ CampaignSaveCvar()

void CampaignSaveCvar ( string cvarname,
float value )

Definition at line 128 of file campaign.qc.

129{
130 float fh;
131 float len;
132 string contents;
133 string l;
134
135 registercvar(cvarname, ftos(value));
136 cvar_set(cvarname, ftos(value));
137 // note: cvarname must be remembered
138
139 fh = fopen("campaign.cfg", FILE_READ);
140 contents = "";
141 if(fh >= 0)
142 {
143 while((l = fgets(fh)))
144 {
145 len = tokenize_console(l);
146 if(len != 3)
147 continue;
148 if(argv(0) != "set")
149 continue;
150 if(argv(1) == cvarname)
151 continue;
152 contents = strcat(contents, "set ", argv(1), " ", argv(2), "\n");
153 }
154 fclose(fh);
155 }
156 contents = strcat(contents, "set ", cvarname, " ", ftos(value), "\n");
157 fh = fopen("campaign.cfg", FILE_WRITE);
158 if(fh >= 0)
159 {
160 fputs(fh, contents);
161 }
162 else
163 {
164 error("Cannot write to campaign file");
165 }
166}
const float FILE_READ
const float FILE_WRITE
#define tokenize_console
float registercvar(string name, string value, float flags)
string fgets(float fhandle)
void fclose(float fhandle)
void fputs(float fhandle, string s)
float fopen(string filename, float mode)

References argv(), cvar_set(), error, fclose(), fgets(), FILE_READ, FILE_WRITE, fopen(), fputs(), ftos(), registercvar(), strcat(), and tokenize_console.

Referenced by CampaignPreIntermission().

Variable Documentation

◆ campaign_index_var

string campaign_index_var

Definition at line 19 of file campaign.qc.

Referenced by CampaignPostIntermission(), CampaignPreInit(), and CampaignPreIntermission().

◆ campaign_level

◆ campaign_won

float campaign_won

Definition at line 18 of file campaign.qc.

Referenced by CampaignPostIntermission(), and CampaignPreIntermission().