X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fcampaign_file.qc;h=69dbb0b1d3af124d6900d59381e6f67919f31036;hb=f19182bb895ceff0b85a38d663576cc3cff873a5;hp=067cd8054de6f311d562bf427190fd806ef1de79;hpb=068f027f0c402702df2e3029b8223d9524692601;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/campaign_file.qc b/qcsrc/common/campaign_file.qc index 067cd8054..69dbb0b1d 100644 --- a/qcsrc/common/campaign_file.qc +++ b/qcsrc/common/campaign_file.qc @@ -1,8 +1,17 @@ +#if defined(CSQC) +#elif defined(MENUQC) +#elif defined(SVQC) + #include "../dpdefs/progsdefs.qh" + #include "../dpdefs/dpextensions.qh" + #include "util.qh" + #include "campaign_common.qh" +#endif + // CampaignFileLoad(offset, n) // - Loads campaign level data (up to n entries starting at offset) // into the globals // - Returns the number of entries successfully read -float CampaignFile_Load(float offset, float n) +float CampaignFile_Load(int offset, float n) { float fh; float lineno; @@ -38,13 +47,12 @@ float CampaignFile_Load(float offset, float n) { entlen = tokenize(l); // using insane tokenizer for CSV -#define CAMPAIGN_GETARG0 if(i >= entlen) -#define CAMPAIGN_GETARG1 CAMPAIGN_GETARG0 error("syntax error in campaign file: line has not enough fields"); -#define CAMPAIGN_GETARG2 CAMPAIGN_GETARG1 a = argv(++i); -#define CAMPAIGN_GETARG3 CAMPAIGN_GETARG2 if(a == ",") -#define CAMPAIGN_GETARG4 CAMPAIGN_GETARG3 a = ""; -#define CAMPAIGN_GETARG5 CAMPAIGN_GETARG4 else -#define CAMPAIGN_GETARG CAMPAIGN_GETARG5 ++i +#define CAMPAIGN_GETARG \ + a = argv(++i); \ + if(a == ",") \ + a = ""; \ + else \ + ++i // What you're seeing here is what people will do when your compiler supports // C-style macros but no line continuations. @@ -58,9 +66,13 @@ float CampaignFile_Load(float offset, float n) CAMPAIGN_GETARG; campaign_mutators[campaign_entries] = strzone(a); CAMPAIGN_GETARG; campaign_shortdesc[campaign_entries] = strzone(a); CAMPAIGN_GETARG; campaign_longdesc[campaign_entries] = strzone(strreplace("\\n", "\n", a)); + + if(i > entlen) + error("syntax error in campaign file: line has not enough fields"); + campaign_entries = campaign_entries + 1; - if(campaign_entries >= n) + if(campaign_entries >= n) break; } lineno = lineno + 1; @@ -75,10 +87,10 @@ float CampaignFile_Load(float offset, float n) void CampaignFile_Unload() { - float i; if(campaign_title) { strunzone(campaign_title); + int i; for(i = 0; i < campaign_entries; ++i) { strunzone(campaign_gametype[i]);