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 261 of file campaign.qc.

262{
263 if(n < 0)
264 n = campaign_level + 1;
266 CampaignFile_Load(n, 1);
268 CampaignSetup(0);
269 else
270 error("Sorry, cheater. You are NOT WELCOME.");
272}
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 100 of file campaign.qc.

101{
102 // now some sanity checks
103 if(Campaign_Invalid())
104 return;
106 {
107 cvar_set("fraglimit", "0");
108 cvar_set("leadlimit", "0");
109 cvar_set("timelimit", "0.01");
110 }
111 else
112 {
113 // "default" uses implicit values, "" or "0" means no limit
115 if(argv(0) != "default") {
116 cvar_set("fraglimit", argv(0));
117 }
118 if(argv(1) != "default") {
119 cvar_set("leadlimit", argv(1));
120 }
121 if(campaign_timelimit[0] != "default") {
122 cvar_set("timelimit", campaign_timelimit[0]);
123 }
124 }
125}
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 239 of file campaign.qc.

240{
241 // NOTE: campaign_won is 0 or 1, that is, points to the next level
242
244 {
245 // last map won!
246 LOG_DEBUG("^2test run: campaign looks GOOD");
247 localcmd("togglemenu 1\n");
249 return;
250 }
251
256 campaign_name = "";
257}
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
95
97 return;
98}
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:811
string mapname
void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s, float recurse)
Definition mapinfo.qc:667
void MapInfo_SwitchGameType(Gametype t)
Definition mapinfo.qc:1518
Gametype MapInfo_Type_FromString(string gtype, bool dowarn, bool is_q3compat)
Definition mapinfo.qc:621
#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 167 of file campaign.qc.

168{
169 int won = 0;
170 int lost = 0;
171 string savevar;
172
174 if(it.winning)
175 won += 1;
176 else
177 lost += 1;
178 });
179
181 {
182 campaign_won = 1;
183 bprint("Campaign test run, advancing level.\n");
184 }
185 else if(campaign_forcewin)
186 {
187 campaign_won = 1;
188 bprint("The current level has been WON.\n");
189 }
190 else if(won == 1 && lost == 0 && checkrules_equality == 0)
191 {
192 if(autocvar_timelimit != 0 && autocvar_fraglimit != 0 && time > autocvar_timelimit * 60) // checks if the timelimit has expired.
193 {
194 campaign_won = 0;
195 bprint("Time's up! The current level has been LOST.\n");
196 // sound!
197 }
198 else
199 {
200 campaign_won = 1;
201 bprint("The current level has been WON.\n");
202 // sound!
203 }
204 }
205 else if(autocvar_timelimit != 0 && time > autocvar_timelimit * 60)
206 {
207 campaign_won = 0;
208 bprint("Time's up! The current level has been LOST.\n");
209 // sound!
210 }
211 else
212 {
213 campaign_won = 0;
214 bprint("The current level has been LOST.\n");
215 // sound!
216 }
217
219 {
221 {
222 if(campaign_entries < 2)
223 {
224 // I have won
225 savevar = strcat("g_campaign", campaign_name, "_won");
226 CampaignSaveCvar(savevar, 1);
227 // advance level (for menu to show it right)
229 }
230 else
231 {
232 // advance level
234 }
235 }
236 }
237}
float cheatcount_total
Definition cheats.qh:10
#define IS_PLAYER(s)
Definition player.qh:243
#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:127
#define IS_REAL_CLIENT(v)
Definition utils.qh:17
#define FOREACH_CLIENT(cond, body)
Definition utils.qh:50
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().