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

Go to the source code of this file.

Macros

#define CAMPAIGN_MAX_ENTRIES   2

Functions

int Campaign_GetLevelNum ()
void CampaignLevelWarp (float n)
void CampaignPostInit ()
void CampaignPostIntermission ()
void CampaignPreInit ()
void CampaignPreIntermission ()

Variables

int autocvar__campaign_index
string autocvar__campaign_name
bool autocvar__campaign_testrun
bool autocvar_g_campaign
float autocvar_g_campaign_forceteam
int autocvar_g_campaign_skill
bool campaign_bots_may_start
 campaign mode: bots shall spawn but wait for the player to spawn before they do anything in other gametypes, this is ignored
bool campaign_forcewin

Macro Definition Documentation

◆ CAMPAIGN_MAX_ENTRIES

#define CAMPAIGN_MAX_ENTRIES   2

Definition at line 11 of file campaign.qh.

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().

◆ 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)
#define error
Definition pre.qh:6

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
void cvar_set(string name, string value)
string argv(float n)
float Campaign_Invalid()
Definition campaign.qc:31
bool autocvar__campaign_testrun
Definition campaign.qh:3

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]
string campaign_gametype[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
Gametype MapInfo_Type_FromString(string gtype, bool dowarn, bool is_q3compat)
Definition mapinfo.qc:620
#define MAPINFO_SETTEMP_ACL_USER
Definition mapinfo.qh:236
string ftos(float f)
string strzone(string s)
float max(float f,...)
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
float CampaignBailout(string s)
Definition campaign.qc:22
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().

Variable Documentation

◆ autocvar__campaign_index

int autocvar__campaign_index

Definition at line 4 of file campaign.qh.

Referenced by CampaignPreInit().

◆ autocvar__campaign_name

string autocvar__campaign_name

Definition at line 5 of file campaign.qh.

Referenced by CampaignPreInit().

◆ autocvar__campaign_testrun

bool autocvar__campaign_testrun

◆ autocvar_g_campaign

bool autocvar_g_campaign

Definition at line 6 of file campaign.qh.

◆ autocvar_g_campaign_forceteam

float autocvar_g_campaign_forceteam

Definition at line 7 of file campaign.qh.

Referenced by Player_DetermineForcedTeam(), and TeamBalance_GetTeamCounts().

◆ autocvar_g_campaign_skill

int autocvar_g_campaign_skill

Definition at line 8 of file campaign.qh.

Referenced by CampaignPreInit().

◆ campaign_bots_may_start

bool campaign_bots_may_start

campaign mode: bots shall spawn but wait for the player to spawn before they do anything in other gametypes, this is ignored

Definition at line 26 of file campaign.qh.

Referenced by bot_think(), Join(), Monster_Move(), Monster_Move_2D(), MUTATOR_HOOKFUNCTION(), round_handler_Think(), and WinningCondition_LMS().

◆ campaign_forcewin

bool campaign_forcewin

Definition at line 28 of file campaign.qh.

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