]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/gamec/campaign_file.c
Now addng level numbers automatically
[divverent/nexuiz.git] / data / qcsrc / server / gamec / campaign_file.c
1 // CampaignFileLoad(offset, n)
2 // - Loads campaign level data (up to n entries starting at offset)
3 //   into the globals
4 // - Returns the number of entries successfully read
5 float CampaignFile_Load(float offset, float n)
6 {
7         float fh;
8         float lineno;
9         float entlen;
10         float i;
11         string l;
12
13         if(n > CAMPAIGN_MAX_ENTRIES)
14                 n = CAMPAIGN_MAX_ENTRIES;
15
16         campaign_offset = offset;
17         campaign_entries = 0;
18
19         fh = fopen("maps/campaign.txt", FILE_READ);
20         if(fh >= 0)
21         {
22                 for(lineno = 0; (l = fgets(fh)); )
23                 {
24                         if(strlen(l) == 0)
25                                 continue; // empty line
26                         if(substring(l, 0, 2) == "//")
27                                 continue; // comment
28                         if(lineno >= offset)
29                         {
30                                 entlen = tokenize(l);
31                                 if(entlen != 8)
32                                         error("syntax error in campaign file");
33
34                                 i = 0;
35                                 campaign_gametype[campaign_entries] = strzone(argv(i++));
36                                 campaign_mapname[campaign_entries] = strzone(argv(i++));
37                                 campaign_bots[campaign_entries] = stof(argv(i++));
38                                 campaign_botskill[campaign_entries] = stof(argv(i++));
39                                 campaign_fraglimit[campaign_entries] = stof(argv(i++));
40                                 campaign_mutators[campaign_entries] = strzone(argv(i++));
41                                 campaign_shortdesc[campaign_entries] = strzone(argv(i++));
42                                 campaign_longdesc[campaign_entries] = strzone(argv(i++));
43                                 campaign_entries = campaign_entries + 1;
44
45                                 if(campaign_entries >= n)
46                                         break;
47                         }
48                         lineno = lineno + 1;
49                 }
50                 fclose(fh);
51         }
52
53         return campaign_entries;
54 }
55
56 void CampaignFile_Unload()
57 {
58         float i;
59         for(i = 0; i < campaign_entries; ++i)
60         {
61                 strunzone(campaign_gametype[i]);
62                 strunzone(campaign_mapname[i]);
63                 strunzone(campaign_mutators[i]);
64                 strunzone(campaign_shortdesc[i]);
65                 strunzone(campaign_longdesc[i]);
66         }
67         campaign_entries = 0;
68 }
69
70
71 // stuff to handle the campaign_longdesc field
72 string fstrunzone(string s)
73 {
74         string t;
75         t = strcat(s);
76         strunzone(s);
77         return t;
78 }
79
80 // NOTE: s may not be a tempstring here
81 string Campaign_wordwrap(string s, float l)
82 {
83         string t;
84         string word;
85
86         float lleft;
87         float i;
88
89         float startidx;
90
91         startidx = 0;
92
93         t = strzone("");
94
95         lleft = l;
96         for(i = 0; i <= strlen(s); ++i)
97         {
98                 if(i != strlen(s) && substring(s, i, 1) != " ")
99                         continue;
100
101                 word = substring(s, startidx, i - startidx);
102                 startidx = i + 1;
103                 
104                 if(word == "+++")
105                 {
106                         t = fstrunzone(t);
107                         t = strzone(strcat(t, "\n\n"));
108                         lleft = l;
109                 }
110                 else if(!l || (strlen(word) < lleft))
111                 {
112                         t = fstrunzone(t);
113                         if(lleft != l)
114                         {
115                                 t = strcat(t, " ");
116                                 lleft = lleft - 1;
117                         }
118                         t = strzone(strcat(t, word));
119                         lleft = lleft - strlen(word);
120                 }
121                 else
122                 {
123                         t = fstrunzone(t);
124                         t = strzone(strcat(t, "\n", word));
125                         lleft = l - strlen(word);
126                 }
127         }
128         t = fstrunzone(t);
129         return t;
130 }
131