1 #include "commands.h"
2 #include "openbor.h"
3 
4 
freeCommandList(List * list)5 void freeCommandList(List* list) {
6 	List_Clear(list);
7 	free(list);
8 }
9 
10 // attention: modifies usercommand to lowercase
getCommandlistCommand(List * list,char * usercommand)11 void* getCommandlistCommand(List* list, char* usercommand) {
12 	if (!usercommand || !usercommand[0])
13 		goto fail;
14 	lc(usercommand, strlen(usercommand));
15 	Node* n = List_GetNodeByName(list, usercommand);
16 	if(n)
17 		return n->value;
18 	fail:
19 	return NULL;
20 }
21 
getModelCommand(List * list,char * usercommand)22 modelCommands getModelCommand(List* list, char* usercommand) {
23 	return (modelCommands) getCommandlistCommand(list, usercommand);
24 }
25 
getModelstxtCommand(List * list,char * usercommand)26 modelstxtCommands getModelstxtCommand(List* list, char* usercommand) {
27 	return (modelstxtCommands) getCommandlistCommand(list, usercommand);
28 }
29 
getLevelCommand(List * list,char * usercommand)30 levelCommands getLevelCommand(List* list, char* usercommand) {
31 	return (levelCommands) getCommandlistCommand(list, usercommand);
32 }
33 
getLevelOrderCommand(List * list,char * usercommand)34 levelOrderCommands getLevelOrderCommand(List* list, char* usercommand) {
35 	return (levelOrderCommands) getCommandlistCommand(list, usercommand);
36 }
37 
prepareList(void)38 List* prepareList(void) {
39 	List* result = malloc(sizeof(List));
40 	assert(result);
41 	List_Init(result);
42 	return result;
43 }
44 
createModelstxtCommandList(void)45 List* createModelstxtCommandList(void) {
46 	List* result = prepareList();
47 	#define LIST_ADD(y,z) List_InsertAfter(result, (void*) y, z)
48 	LIST_ADD(CMD_MODELSTXT_MAXIDLES, "maxidles");
49 	LIST_ADD(CMD_MODELSTXT_MAXWALKS, "maxwalks");
50 	LIST_ADD(CMD_MODELSTXT_MAXBACKWALKS, "maxbackwalks");
51 	LIST_ADD(CMD_MODELSTXT_MAXUPS, "maxups");
52 	LIST_ADD(CMD_MODELSTXT_MAXDOWNS, "maxdowns");
53 	LIST_ADD(CMD_MODELSTXT_MAXATTACKTYPES, "maxattacktypes");
54 	LIST_ADD(CMD_MODELSTXT_MAXFOLLOWS, "maxfollows");
55 	LIST_ADD(CMD_MODELSTXT_MAXFREESPECIALS, "maxfreespecials");
56 	LIST_ADD(CMD_MODELSTXT_MAXATTACKS, "maxattacks");
57 	LIST_ADD(CMD_MODELSTXT_MUSIC, "music");
58 	LIST_ADD(CMD_MODELSTXT_LOAD, "load");
59 	LIST_ADD(CMD_MODELSTXT_COLOURSELECT, "colourselect");
60 	LIST_ADD(CMD_MODELSTXT_SPDIRECTION, "spdirection");
61 	LIST_ADD(CMD_MODELSTXT_AUTOLAND, "autoland");
62 	LIST_ADD(CMD_MODELSTXT_NOLOST, "nolost");
63 	LIST_ADD(CMD_MODELSTXT_AJSPECIAL, "ajspecial");
64 	LIST_ADD(CMD_MODELSTXT_NOCOST, "nocost");
65 	LIST_ADD(CMD_MODELSTXT_NOCHEATS, "nocheats");
66 	LIST_ADD(CMD_MODELSTXT_NODROPEN, "nodropen");
67 	LIST_ADD(CMD_MODELSTXT_NODROPSPAWN, "nodropspawn");
68 	LIST_ADD(CMD_MODELSTXT_KNOW, "know");
69 	LIST_ADD(CMD_MODELSTXT_NOAIRCANCEL, "noaircancel");
70 	LIST_ADD(CMD_MODELSTXT_NOMAXRUSHRESET, "nomaxrushreset");
71 	LIST_ADD(CMD_MODELSTXT_MPBLOCK, "mpblock");
72 	LIST_ADD(CMD_MODELSTXT_BLOCKRATIO, "blockratio");
73 	LIST_ADD(CMD_MODELSTXT_NOCHIPDEATH, "nochipdeath");
74 	LIST_ADD(CMD_MODELSTXT_LIFESCORE, "lifescore");
75 	LIST_ADD(CMD_MODELSTXT_CREDSCORE, "credscore");
76 	LIST_ADD(CMD_MODELSTXT_VERSUSDAMAGE, "versusdamage");
77 	LIST_ADD(CMD_MODELSTXT_COMBODELAY, "combodelay");
78 	#undef LIST_ADD
79 	return result;
80 }
81 
createModelCommandList(void)82 List* createModelCommandList(void) {
83 	int i, amax = 99;
84 	char buf[64] ;
85 	List* result = prepareList();
86 	#define LIST_ADD(y,z) List_InsertAfter(result, (void*) y, z)
87 	LIST_ADD(CMD_MODEL_NAME, "name");
88 	LIST_ADD(CMD_MODEL_TYPE, "type");
89 	LIST_ADD(CMD_MODEL_SUBTYPE, "subtype");
90 	LIST_ADD(CMD_MODEL_STATS, "stats");
91 	LIST_ADD(CMD_MODEL_HEALTH, "health");
92 	LIST_ADD(CMD_MODEL_SCROLL, "scroll");
93 	LIST_ADD(CMD_MODEL_MP, "mp");
94 	LIST_ADD(CMD_MODEL_NOLIFE, "nolife");
95 	LIST_ADD(CMD_MODEL_MAKEINV, "makeinv");
96 	LIST_ADD(CMD_MODEL_RISEINV, "riseinv");
97 	LIST_ADD(CMD_MODEL_LOAD, "load");
98 	LIST_ADD(CMD_MODEL_SCORE, "score");
99 	LIST_ADD(CMD_MODEL_SMARTBOMB, "smartbomb");
100 	LIST_ADD(CMD_MODEL_BOUNCE, "bounce");
101 	LIST_ADD(CMD_MODEL_NOQUAKE, "noquake");
102 	LIST_ADD(CMD_MODEL_BLOCKBACK, "blockback");
103 	LIST_ADD(CMD_MODEL_HITENEMY, "hitenemy");
104 	LIST_ADD(CMD_MODEL_HOSTILE, "hostile");
105 	LIST_ADD(CMD_MODEL_CANDAMAGE, "candamage");
106 	LIST_ADD(CMD_MODEL_PROJECTILEHIT, "projectilehit");
107 	LIST_ADD(CMD_MODEL_AIMOVE, "aimove");
108 	LIST_ADD(CMD_MODEL_AIATTACK, "aiattack");
109 	LIST_ADD(CMD_MODEL_SUBJECT_TO_WALL, "subject_to_wall");
110 	LIST_ADD(CMD_MODEL_SUBJECT_TO_HOLE, "subject_to_hole");
111 	LIST_ADD(CMD_MODEL_SUBJECT_TO_PLATFORM, "subject_to_platform");
112 	LIST_ADD(CMD_MODEL_SUBJECT_TO_OBSTACLE, "subject_to_obstacle");
113 	LIST_ADD(CMD_MODEL_SUBJECT_TO_GRAVITY, "subject_to_gravity");
114 	LIST_ADD(CMD_MODEL_SUBJECT_TO_SCREEN, "subject_to_screen");
115 	LIST_ADD(CMD_MODEL_SUBJECT_TO_MINZ, "subject_to_minz");
116 	LIST_ADD(CMD_MODEL_SUBJECT_TO_MAXZ, "subject_to_maxz");
117 	LIST_ADD(CMD_MODEL_NO_ADJUST_BASE, "no_adjust_base");
118 	LIST_ADD(CMD_MODEL_INSTANTITEMDEATH, "instantitemdeath");
119 	LIST_ADD(CMD_MODEL_SECRET, "secret");
120 	LIST_ADD(CMD_MODEL_MODELFLAG, "modelflag");
121 	LIST_ADD(CMD_MODEL_WEAPLOSS, "weaploss");
122 	LIST_ADD(CMD_MODEL_WEAPNUM, "weapnum");
123 	LIST_ADD(CMD_MODEL_PROJECT, "project");
124 	LIST_ADD(CMD_MODEL_WEAPONS, "weapons");
125 	LIST_ADD(CMD_MODEL_SHOOTNUM, "shootnum");
126 	LIST_ADD(CMD_MODEL_RELOAD, "reload");
127 	LIST_ADD(CMD_MODEL_TYPESHOT, "typeshot");
128 	LIST_ADD(CMD_MODEL_COUNTER, "counter");
129 	LIST_ADD(CMD_MODEL_ANIMAL, "animal");
130 	LIST_ADD(CMD_MODEL_RIDER, "rider");
131 	LIST_ADD(CMD_MODEL_KNIFE, "knife");
132 	LIST_ADD(CMD_MODEL_FIREB, "fireb");
133 	LIST_ADD(CMD_MODEL_PLAYSHOT, "playshot");
134 	LIST_ADD(CMD_MODEL_PLAYSHOTW, "playshotw");
135 	LIST_ADD(CMD_MODEL_PLAYSHOTNO, "playshotno");
136 	LIST_ADD(CMD_MODEL_PLAYBOMB, "playbomb");
137 	LIST_ADD(CMD_MODEL_STAR, "star");
138 	LIST_ADD(CMD_MODEL_BOMB, "bomb");
139 	LIST_ADD(CMD_MODEL_FLASH, "flash");
140 	LIST_ADD(CMD_MODEL_BFLASH, "bflash");
141 	LIST_ADD(CMD_MODEL_DUST, "dust");
142 	LIST_ADD(CMD_MODEL_BRANCH, "branch");
143 	LIST_ADD(CMD_MODEL_CANTGRAB, "cantgrab");
144 	LIST_ADD(CMD_MODEL_NOGRAB, "nograb");
145 	LIST_ADD(CMD_MODEL_NOTGRAB, "notgrab");
146 	LIST_ADD(CMD_MODEL_ANTIGRAB, "antigrab");
147 	LIST_ADD(CMD_MODEL_GRABFORCE, "grabforce");
148 	LIST_ADD(CMD_MODEL_GRABBACK, "grabback");
149 	LIST_ADD(CMD_MODEL_OFFSCREENKILL, "offscreenkill");
150 	LIST_ADD(CMD_MODEL_FALLDIE, "falldie");
151 	LIST_ADD(CMD_MODEL_DEATH, "death");
152 	LIST_ADD(CMD_MODEL_SPEED, "speed");
153 	LIST_ADD(CMD_MODEL_SPEEDF, "speedf");
154 	LIST_ADD(CMD_MODEL_JUMPSPEED, "jumpspeed");
155 	LIST_ADD(CMD_MODEL_JUMPSPEEDF, "jumpspeedf");
156 	LIST_ADD(CMD_MODEL_ANTIGRAVITY, "antigravity");
157 	LIST_ADD(CMD_MODEL_STEALTH, "stealth");
158 	LIST_ADD(CMD_MODEL_JUGGLEPOINTS, "jugglepoints");
159 	LIST_ADD(CMD_MODEL_RISEATTACKTYPE, "riseattacktype");
160 	LIST_ADD(CMD_MODEL_GUARDPOINTS, "guardpoints");
161 	LIST_ADD(CMD_MODEL_DEFENSE, "defense");
162 	LIST_ADD(CMD_MODEL_OFFENSE, "offense");
163 	LIST_ADD(CMD_MODEL_HEIGHT, "height");
164 	LIST_ADD(CMD_MODEL_JUMPHEIGHT, "jumpheight");
165 	LIST_ADD(CMD_MODEL_JUMPMOVE, "jumpmove");
166 	LIST_ADD(CMD_MODEL_KNOCKDOWNCOUNT, "knockdowncount");
167 	LIST_ADD(CMD_MODEL_GRABDISTANCE, "grabdistance");
168 	LIST_ADD(CMD_MODEL_GRABFLIP, "grabflip");
169 	LIST_ADD(CMD_MODEL_GRABFINISH, "grabfinish");
170 	LIST_ADD(CMD_MODEL_THROWDAMAGE, "throwdamage");
171 	LIST_ADD(CMD_MODEL_SHADOW, "shadow");
172 	LIST_ADD(CMD_MODEL_GFXSHADOW, "gfxshadow");
173 	LIST_ADD(CMD_MODEL_AIRONLY, "aironly");
174 	LIST_ADD(CMD_MODEL_FMAP, "fmap");
175 	LIST_ADD(CMD_MODEL_KOMAP, "komap");
176 	LIST_ADD(CMD_MODEL_HMAP, "hmap");
177 	LIST_ADD(CMD_MODEL_SETLAYER, "setlayer");
178 	LIST_ADD(CMD_MODEL_TOFLIP, "toflip");
179 	LIST_ADD(CMD_MODEL_NODIEBLINK, "nodieblink");
180 	LIST_ADD(CMD_MODEL_NOATFLASH, "noatflash");
181 	LIST_ADD(CMD_MODEL_NOMOVE, "nomove");
182 	LIST_ADD(CMD_MODEL_NODROP, "nodrop");
183 	LIST_ADD(CMD_MODEL_THOLD, "thold");
184 	LIST_ADD(CMD_MODEL_RUNNING, "running");
185 	LIST_ADD(CMD_MODEL_BLOCKODDS, "blockodds");
186 	LIST_ADD(CMD_MODEL_HOLDBLOCK, "holdblock");
187 	LIST_ADD(CMD_MODEL_BLOCKPAIN, "blockpain");
188 	LIST_ADD(CMD_MODEL_NOPASSIVEBLOCK, "nopassiveblock");
189 	LIST_ADD(CMD_MODEL_EDELAY, "edelay");
190 	LIST_ADD(CMD_MODEL_PAINGRAB, "paingrab");
191 	LIST_ADD(CMD_MODEL_THROW, "throw");
192 	LIST_ADD(CMD_MODEL_GRABWALK, "grabwalk");
193 	LIST_ADD(CMD_MODEL_GRABTURN, "grabturn");
194 	LIST_ADD(CMD_MODEL_THROWFRAMEWAIT, "throwframewait");
195 	LIST_ADD(CMD_MODEL_DIESOUND, "diesound");
196 	LIST_ADD(CMD_MODEL_ICON, "icon");
197 	LIST_ADD(CMD_MODEL_ICONPAIN, "iconpain");
198 	LIST_ADD(CMD_MODEL_ICONDIE, "icondie");
199 	LIST_ADD(CMD_MODEL_ICONGET, "iconget");
200 	LIST_ADD(CMD_MODEL_ICONW, "iconw");
201 	LIST_ADD(CMD_MODEL_ICONMPHIGH, "iconmphigh");
202 	LIST_ADD(CMD_MODEL_ICONMPHALF, "iconmphalf");
203 	LIST_ADD(CMD_MODEL_ICONMPLOW, "iconmplow");
204 	LIST_ADD(CMD_MODEL_PARROW, "parrow");
205 	LIST_ADD(CMD_MODEL_PARROW2, "parrow2");
206 	LIST_ADD(CMD_MODEL_PARROW3, "parrow3");
207 	LIST_ADD(CMD_MODEL_PARROW4, "parrow4");
208 	LIST_ADD(CMD_MODEL_ATCHAIN, "atchain");
209 	LIST_ADD(CMD_MODEL_COMBOSTYLE, "combostyle");
210 	LIST_ADD(CMD_MODEL_CREDIT, "credit");
211 	LIST_ADD(CMD_MODEL_NOPAIN, "nopain");
212 	LIST_ADD(CMD_MODEL_ESCAPEHITS, "escapehits");
213 	LIST_ADD(CMD_MODEL_CHARGERATE, "chargerate");
214 	LIST_ADD(CMD_MODEL_MPRATE, "mprate");
215 	LIST_ADD(CMD_MODEL_MPSET, "mpset");
216 	LIST_ADD(CMD_MODEL_SLEEPWAIT, "sleepwait");
217 	LIST_ADD(CMD_MODEL_GUARDRATE, "guardrate");
218 	LIST_ADD(CMD_MODEL_AGGRESSION, "aggression");
219 	LIST_ADD(CMD_MODEL_RISETIME, "risetime");
220 	LIST_ADD(CMD_MODEL_FACING, "facing");
221 	LIST_ADD(CMD_MODEL_TURNDELAY, "turndelay");
222 	LIST_ADD(CMD_MODEL_LIFESPAN, "lifespan");
223 	LIST_ADD(CMD_MODEL_SUMMONKILL, "summonkill");
224 	LIST_ADD(CMD_MODEL_LIFEPOSITION, "lifeposition");
225 	LIST_ADD(CMD_MODEL_LIFEBARSTATUS, "lifebarstatus");
226 	LIST_ADD(CMD_MODEL_ICONPOSITION, "iconposition");
227 	LIST_ADD(CMD_MODEL_NAMEPOSITION, "nameposition");
228 	LIST_ADD(CMD_MODEL_COM, "com");
229 	LIST_ADD(CMD_MODEL_REMAP, "remap");
230 	LIST_ADD(CMD_MODEL_PALETTE, "palette");
231 	LIST_ADD(CMD_MODEL_ALTERNATEPAL, "alternatepal");
232 	LIST_ADD(CMD_MODEL_GLOBALMAP, "globalmap");
233 	LIST_ADD(CMD_MODEL_ALPHA, "alpha");
234 	LIST_ADD(CMD_MODEL_REMOVE, "remove");
235 	LIST_ADD(CMD_MODEL_SCRIPT, "script");
236 	LIST_ADD(CMD_MODEL_THINKSCRIPT, "thinkscript");
237 	LIST_ADD(CMD_MODEL_TAKEDAMAGESCRIPT, "takedamagescript");
238 	LIST_ADD(CMD_MODEL_ONFALLSCRIPT, "onfallscript");
239 	LIST_ADD(CMD_MODEL_ONPAINSCRIPT, "onpainscript");
240 	LIST_ADD(CMD_MODEL_ONBLOCKSSCRIPT, "onblocksscript");
241 	LIST_ADD(CMD_MODEL_ONBLOCKWSCRIPT, "onblockwscript");
242 	LIST_ADD(CMD_MODEL_ONBLOCKOSCRIPT, "onblockoscript");
243 	LIST_ADD(CMD_MODEL_ONBLOCKZSCRIPT, "onblockzscript");
244 	LIST_ADD(CMD_MODEL_ONBLOCKASCRIPT, "onblockascript");
245 	LIST_ADD(CMD_MODEL_ONMOVEXSCRIPT, "onmovexscript");
246 	LIST_ADD(CMD_MODEL_ONMOVEZSCRIPT, "onmovezscript");
247 	LIST_ADD(CMD_MODEL_ONMOVEASCRIPT, "onmoveascript");
248 	LIST_ADD(CMD_MODEL_ONDEATHSCRIPT, "ondeathscript");
249 	LIST_ADD(CMD_MODEL_ONKILLSCRIPT, "onkillscript");
250 	LIST_ADD(CMD_MODEL_DIDBLOCKSCRIPT, "didblockscript");
251 	LIST_ADD(CMD_MODEL_ONDOATTACKSCRIPT, "ondoattackscript");
252 	LIST_ADD(CMD_MODEL_DIDHITSCRIPT, "didhitscript");
253 	LIST_ADD(CMD_MODEL_ONSPAWNSCRIPT, "onspawnscript");
254 	LIST_ADD(CMD_MODEL_ANIMATIONSCRIPT, "animationscript");
255 	LIST_ADD(CMD_MODEL_KEYSCRIPT, "keyscript");
256 	LIST_ADD(CMD_MODEL_ANIM, "anim");
257 	LIST_ADD(CMD_MODEL_LOOP, "loop");
258 	LIST_ADD(CMD_MODEL_ANIMHEIGHT, "animheight");
259 	LIST_ADD(CMD_MODEL_DELAY, "delay");
260 	LIST_ADD(CMD_MODEL_OFFSET, "offset");
261 	LIST_ADD(CMD_MODEL_SHADOWCOORDS, "shadowcoords");
262 	LIST_ADD(CMD_MODEL_ENERGYCOST, "energycost");
263 	LIST_ADD(CMD_MODEL_MPONLY, "mponly");
264 	LIST_ADD(CMD_MODEL_CHARGETIME, "chargetime");
265 	LIST_ADD(CMD_MODEL_DIVE, "dive");
266 	LIST_ADD(CMD_MODEL_DIVE1, "dive1");
267 	LIST_ADD(CMD_MODEL_DIVE2, "dive2");
268 	LIST_ADD(CMD_MODEL_ATTACKONE, "attackone");
269 	LIST_ADD(CMD_MODEL_COUNTERATTACK, "counterattack");
270 	LIST_ADD(CMD_MODEL_THROWFRAME, "throwframe");
271 	LIST_ADD(CMD_MODEL_PSHOTFRAME, "pshotframe");
272 	LIST_ADD(CMD_MODEL_PSHOTFRAMEW, "pshotframew");
273 	LIST_ADD(CMD_MODEL_PSHOTFRAMENO, "pshotframeno");
274 	LIST_ADD(CMD_MODEL_SHOOTFRAME, "shootframe");
275 	LIST_ADD(CMD_MODEL_TOSSFRAME, "tossframe");
276 	LIST_ADD(CMD_MODEL_PBOMBFRAME, "pbombframe");
277 	LIST_ADD(CMD_MODEL_CUSTKNIFE, "custknife");
278 	LIST_ADD(CMD_MODEL_CUSTPSHOT, "custpshot");
279 	LIST_ADD(CMD_MODEL_CUSTPSHOTW, "custpshotw");
280 	LIST_ADD(CMD_MODEL_CUSTPSHOTNO, "custpshotno");
281 	LIST_ADD(CMD_MODEL_CUSTBOMB, "custbomb");
282 	LIST_ADD(CMD_MODEL_CUSTPBOMB, "custpbomb");
283 	LIST_ADD(CMD_MODEL_CUSTSTAR, "custstar");
284 	LIST_ADD(CMD_MODEL_JUMPFRAME, "jumpframe");
285 	LIST_ADD(CMD_MODEL_BOUNCEFACTOR, "bouncefactor");
286 	LIST_ADD(CMD_MODEL_LANDFRAME, "landframe");
287 	LIST_ADD(CMD_MODEL_DROPFRAME, "dropframe");
288 	LIST_ADD(CMD_MODEL_CANCEL, "cancel");
289 	LIST_ADD(CMD_MODEL_SOUND, "sound");
290 	LIST_ADD(CMD_MODEL_HITFX, "hitfx");
291 	LIST_ADD(CMD_MODEL_HITFLASH, "hitflash");
292 	LIST_ADD(CMD_MODEL_BLOCKFLASH, "blockflash");
293 	LIST_ADD(CMD_MODEL_BLOCKFX, "blockfx");
294 	LIST_ADD(CMD_MODEL_FASTATTACK, "fastattack");
295 	LIST_ADD(CMD_MODEL_BBOX, "bbox");
296 	LIST_ADD(CMD_MODEL_BBOXZ, "bboxz");
297 	LIST_ADD(CMD_MODEL_PLATFORM, "platform");
298 	LIST_ADD(CMD_MODEL_DRAWMETHOD, "drawmethod");
299 	LIST_ADD(CMD_MODEL_NODRAWMETHOD, "nodrawmethod");
300 	LIST_ADD(CMD_MODEL_ATTACK, "attack");
301 	LIST_ADD(CMD_MODEL_ATTACK1, "attack1");
302 	LIST_ADD(CMD_MODEL_ATTACK2, "attack2");
303 	LIST_ADD(CMD_MODEL_ATTACK3, "attack3");
304 	LIST_ADD(CMD_MODEL_ATTACK4, "attack4");
305 	LIST_ADD(CMD_MODEL_ATTACK5, "attack5");
306 	LIST_ADD(CMD_MODEL_ATTACK6, "attack6");
307 	LIST_ADD(CMD_MODEL_ATTACK7, "attack7");
308 	LIST_ADD(CMD_MODEL_ATTACK8, "attack8");
309 	LIST_ADD(CMD_MODEL_ATTACK9, "attack9");
310 	LIST_ADD(CMD_MODEL_ATTACK10, "attack10");
311 	for(i=11; i<=amax; i++){
312 		sprintf(buf, "attack%d", i);
313 		LIST_ADD(CMD_MODEL_ATTACK_ETC, buf);
314 	}
315 	LIST_ADD(CMD_MODEL_SHOCK, "shock");
316 	LIST_ADD(CMD_MODEL_BURN, "burn");
317 	LIST_ADD(CMD_MODEL_STEAL, "steal");
318 	LIST_ADD(CMD_MODEL_FREEZE, "freeze");
319 	LIST_ADD(CMD_MODEL_ITEMBOX, "itembox");
320 	LIST_ADD(CMD_MODEL_ATTACKZ, "attackz");
321 	LIST_ADD(CMD_MODEL_HITZ, "hitz");
322 	LIST_ADD(CMD_MODEL_BLAST, "blast");
323 	LIST_ADD(CMD_MODEL_DROPV, "dropv");
324 	LIST_ADD(CMD_MODEL_OTG, "otg");
325 	LIST_ADD(CMD_MODEL_JUGGLECOST, "jugglecost");
326 	LIST_ADD(CMD_MODEL_GUARDCOST, "guardcost");
327 	LIST_ADD(CMD_MODEL_STUN, "stun");
328 	LIST_ADD(CMD_MODEL_GRABIN, "grabin");
329 	LIST_ADD(CMD_MODEL_NOREFLECT, "noreflect");
330 	LIST_ADD(CMD_MODEL_NOKILL, "nokill");
331 	LIST_ADD(CMD_MODEL_FORCEDIRECTION, "forcedirection");
332 	LIST_ADD(CMD_MODEL_DAMAGEONLANDING, "damageonlanding");
333 	LIST_ADD(CMD_MODEL_SEAL, "seal");
334 	LIST_ADD(CMD_MODEL_STAYDOWN, "staydown");
335 	LIST_ADD(CMD_MODEL_DOT, "dot");
336 	LIST_ADD(CMD_MODEL_FORCEMAP, "forcemap");
337 	LIST_ADD(CMD_MODEL_IDLE, "idle");
338 	LIST_ADD(CMD_MODEL_MOVE, "move");
339 	LIST_ADD(CMD_MODEL_MOVEZ, "movez");
340 	LIST_ADD(CMD_MODEL_MOVEA, "movea");
341 	LIST_ADD(CMD_MODEL_SETA, "seta");
342 	LIST_ADD(CMD_MODEL_FSHADOW, "fshadow");
343 	LIST_ADD(CMD_MODEL_RANGE, "range");
344 	LIST_ADD(CMD_MODEL_RANGEZ, "rangez");
345 	LIST_ADD(CMD_MODEL_RANGEA, "rangea");
346 	LIST_ADD(CMD_MODEL_RANGEB, "rangeb");
347 	LIST_ADD(CMD_MODEL_FRAME, "frame");
348 	LIST_ADD(CMD_MODEL_ALPHAMASK, "alphamask");
349 	LIST_ADD(CMD_MODEL_FLIPFRAME, "flipframe");
350 	LIST_ADD(CMD_MODEL_FOLLOWANIM, "followanim");
351 	LIST_ADD(CMD_MODEL_FOLLOWCOND, "followcond");
352 	LIST_ADD(CMD_MODEL_COUNTERFRAME, "counterframe");
353 	LIST_ADD(CMD_MODEL_COUNTERRANGE, "counterrange");
354 	LIST_ADD(CMD_MODEL_WEAPONFRAME, "weaponframe");
355 	LIST_ADD(CMD_MODEL_QUAKEFRAME, "quakeframe");
356 	LIST_ADD(CMD_MODEL_SUBENTITY, "subentity");
357 	LIST_ADD(CMD_MODEL_CUSTENTITY, "custentity");
358 	LIST_ADD(CMD_MODEL_SPAWNFRAME, "spawnframe");
359 	LIST_ADD(CMD_MODEL_SUMMONFRAME, "summonframe");
360 	LIST_ADD(CMD_MODEL_UNSUMMONFRAME, "unsummonframe");
361 	LIST_ADD(CMD_MODEL_AT_SCRIPT, "@script");
362 	LIST_ADD(CMD_MODEL_AT_CMD, "@cmd");
363 	LIST_ADD(CMD_MODEL_MPCOST, "mpcost");
364 	LIST_ADD(CMD_MODEL_SUBCLASS, "subclass");
365 
366 	#undef LIST_ADD
367 	return result;
368 }
369 
createLevelCommandList(void)370 List* createLevelCommandList(void) {
371 	List* result = prepareList();
372 	#define LIST_ADD(y,z) List_InsertAfter(result, (void*) y, z)
373 
374 	LIST_ADD(CMD_LEVEL_LOADINGBG, "loadingbg");
375 	LIST_ADD(CMD_LEVEL_MUSICFADE, "musicfade");
376 	LIST_ADD(CMD_LEVEL_MUSIC, "music");
377 	LIST_ADD(CMD_LEVEL_AT, "at");
378 	LIST_ADD(CMD_LEVEL_ALLOWSELECT, "allowselect");
379 	LIST_ADD(CMD_LEVEL_LOAD, "load");
380 	LIST_ADD(CMD_LEVEL_BACKGROUND, "background");
381 	LIST_ADD(CMD_LEVEL_BGLAYER, "bglayer");
382 	LIST_ADD(CMD_LEVEL_FGLAYER, "fglayer");
383 	LIST_ADD(CMD_LEVEL_WATER, "water");
384 	LIST_ADD(CMD_LEVEL_DIRECTION, "direction");
385 	LIST_ADD(CMD_LEVEL_FACING, "facing");
386 	LIST_ADD(CMD_LEVEL_ROCK, "rock");
387 	LIST_ADD(CMD_LEVEL_BGSPEED, "bgspeed");
388 	LIST_ADD(CMD_LEVEL_SCROLLSPEED, "scrollspeed");
389 	LIST_ADD(CMD_LEVEL_MIRROR, "mirror");
390 	LIST_ADD(CMD_LEVEL_BOSSMUSIC, "bossmusic");
391 	LIST_ADD(CMD_LEVEL_NOPAUSE, "nopause");
392 	LIST_ADD(CMD_LEVEL_NOSCREENSHOT, "noscreenshot");
393 	LIST_ADD(CMD_LEVEL_SETTIME, "settime");
394 	LIST_ADD(CMD_LEVEL_SETWEAP, "setweap");
395 	LIST_ADD(CMD_LEVEL_NOTIME, "notime");
396 	LIST_ADD(CMD_LEVEL_NORESET, "noreset");
397 	LIST_ADD(CMD_LEVEL_NOSLOW, "noslow");
398 	LIST_ADD(CMD_LEVEL_TYPE, "type");
399 	LIST_ADD(CMD_LEVEL_NOHIT, "nohit");
400 	LIST_ADD(CMD_LEVEL_GRAVITY, "gravity");
401 	LIST_ADD(CMD_LEVEL_MAXFALLSPEED, "maxfallspeed");
402 	LIST_ADD(CMD_LEVEL_MAXTOSSSPEED, "maxtossspeed");
403 	LIST_ADD(CMD_LEVEL_CAMERATYPE, "cameratype");
404 	LIST_ADD(CMD_LEVEL_CAMERAOFFSET, "cameraoffset");
405 	LIST_ADD(CMD_LEVEL_SPAWN1, "spawn1");
406 	LIST_ADD(CMD_LEVEL_SPAWN2, "spawn2");
407 	LIST_ADD(CMD_LEVEL_SPAWN3, "spawn3");
408 	LIST_ADD(CMD_LEVEL_SPAWN4, "spawn4");
409 	LIST_ADD(CMD_LEVEL_FRONTPANEL, "frontpanel");
410 	LIST_ADD(CMD_LEVEL_PANEL, "panel");
411 	LIST_ADD(CMD_LEVEL_STAGENUMBER, "stagenumber");
412 	LIST_ADD(CMD_LEVEL_ORDER, "order");
413 	LIST_ADD(CMD_LEVEL_HOLE, "hole");
414 	LIST_ADD(CMD_LEVEL_WALL, "wall");
415 	LIST_ADD(CMD_LEVEL_PALETTE, "palette");
416 	LIST_ADD(CMD_LEVEL_UPDATESCRIPT, "updatescript");
417 	LIST_ADD(CMD_LEVEL_UPDATEDSCRIPT, "updatedscript");
418 	LIST_ADD(CMD_LEVEL_KEYSCRIPT, "keyscript");
419 	LIST_ADD(CMD_LEVEL_LEVELSCRIPT, "levelscript");
420 	LIST_ADD(CMD_LEVEL_ENDLEVELSCRIPT, "endlevelscript");
421 	LIST_ADD(CMD_LEVEL_BLOCKED, "blocked");
422 	LIST_ADD(CMD_LEVEL_ENDHOLE, "endhole");
423 	LIST_ADD(CMD_LEVEL_WAIT, "wait");
424 	LIST_ADD(CMD_LEVEL_NOJOIN, "nojoin");
425 	LIST_ADD(CMD_LEVEL_CANJOIN, "canjoin");
426 	LIST_ADD(CMD_LEVEL_SHADOWCOLOR, "shadowcolor");
427 	LIST_ADD(CMD_LEVEL_SHADOWALPHA, "shadowalpha");
428 	LIST_ADD(CMD_LEVEL_LIGHT, "light");
429 	LIST_ADD(CMD_LEVEL_SCROLLZ, "scrollz");
430 	LIST_ADD(CMD_LEVEL_SCROLLX, "scrollx");
431 	LIST_ADD(CMD_LEVEL_BLOCKADE, "blockade");
432 	LIST_ADD(CMD_LEVEL_SETPALETTE, "setpalette");
433 	LIST_ADD(CMD_LEVEL_GROUP, "group");
434 	LIST_ADD(CMD_LEVEL_SPAWN, "spawn");
435 	LIST_ADD(CMD_LEVEL_2PSPAWN, "2pspawn");
436 	LIST_ADD(CMD_LEVEL_3PSPAWN, "3pspawn");
437 	LIST_ADD(CMD_LEVEL_4PSPAWN, "4pspawn");
438 	LIST_ADD(CMD_LEVEL_BOSS, "boss");
439 	LIST_ADD(CMD_LEVEL_FLIP, "flip");
440 	LIST_ADD(CMD_LEVEL_HEALTH, "health");
441 	LIST_ADD(CMD_LEVEL_2PHEALTH, "2phealth");
442 	LIST_ADD(CMD_LEVEL_3PHEALTH, "3phealth");
443 	LIST_ADD(CMD_LEVEL_4PHEALTH, "4phealth");
444 	LIST_ADD(CMD_LEVEL_MP, "mp");
445 	LIST_ADD(CMD_LEVEL_SCORE, "score");
446 	LIST_ADD(CMD_LEVEL_NOLIFE, "nolife");
447 	LIST_ADD(CMD_LEVEL_ALIAS, "alias");
448 	LIST_ADD(CMD_LEVEL_MAP, "map");
449 	LIST_ADD(CMD_LEVEL_ALPHA, "alpha");
450 	LIST_ADD(CMD_LEVEL_DYING, "dying");
451 	LIST_ADD(CMD_LEVEL_ITEM, "item");
452 	LIST_ADD(CMD_LEVEL_2PITEM, "2pitem");
453 	LIST_ADD(CMD_LEVEL_3PITEM, "3pitem");
454 	LIST_ADD(CMD_LEVEL_4PITEM, "4pitem");
455 	LIST_ADD(CMD_LEVEL_ITEMMAP, "itemmap");
456 	LIST_ADD(CMD_LEVEL_ITEMHEALTH, "itemhealth");
457 	LIST_ADD(CMD_LEVEL_ITEMALIAS, "itemalias");
458 	LIST_ADD(CMD_LEVEL_WEAPON, "weapon");
459 	LIST_ADD(CMD_LEVEL_AGGRESSION, "aggression");
460 	LIST_ADD(CMD_LEVEL_CREDIT, "credit");
461 	LIST_ADD(CMD_LEVEL_ITEMTRANS, "itemtrans");
462 	LIST_ADD(CMD_LEVEL_ITEMALPHA, "itemalpha");
463 	LIST_ADD(CMD_LEVEL_COORDS, "coords");
464 	LIST_ADD(CMD_LEVEL_SPAWNSCRIPT, "spawnscript");
465 
466 	#undef LIST_ADD
467 	return result;
468 }
469 
createLevelOrderCommandList(void)470 List* createLevelOrderCommandList(void) {
471 	List* result = prepareList();
472 	#define LIST_ADD(y,z) List_InsertAfter(result, (void*) y, z)
473 	LIST_ADD(CMD_LEVELORDER_BLENDFX, "blendfx");
474 	LIST_ADD(CMD_LEVELORDER_SET, "set");
475 	LIST_ADD(CMD_LEVELORDER_IFCOMPLETE, "ifcomplete");
476 	LIST_ADD(CMD_LEVELORDER_SKIPSELECT, "skipselect");
477 	LIST_ADD(CMD_LEVELORDER_FILE, "file");
478 	LIST_ADD(CMD_LEVELORDER_SCENE, "scene");
479 	LIST_ADD(CMD_LEVELORDER_SELECT, "select");
480 	LIST_ADD(CMD_LEVELORDER_NEXT, "next");
481 	LIST_ADD(CMD_LEVELORDER_END, "end");
482 	LIST_ADD(CMD_LEVELORDER_LIVES, "lives");
483 	LIST_ADD(CMD_LEVELORDER_DISABLEHOF, "disablehof");
484 	LIST_ADD(CMD_LEVELORDER_CANSAVE, "cansave");
485 	LIST_ADD(CMD_LEVELORDER_Z, "z");
486 	LIST_ADD(CMD_LEVELORDER_BRANCH, "branch");
487 	LIST_ADD(CMD_LEVELORDER_P1LIFE, "p1life");
488 	LIST_ADD(CMD_LEVELORDER_P2LIFE, "p2life");
489 	LIST_ADD(CMD_LEVELORDER_P3LIFE, "p3life");
490 	LIST_ADD(CMD_LEVELORDER_P4LIFE, "p4life");
491 	LIST_ADD(CMD_LEVELORDER_P1MP, "p1mp");
492 	LIST_ADD(CMD_LEVELORDER_P2MP, "p2mp");
493 	LIST_ADD(CMD_LEVELORDER_P3MP, "p3mp");
494 	LIST_ADD(CMD_LEVELORDER_P4MP, "p4mp");
495 	LIST_ADD(CMD_LEVELORDER_P1LIFEX, "p1lifex");
496 	LIST_ADD(CMD_LEVELORDER_P2LIFEX, "p2lifex");
497 	LIST_ADD(CMD_LEVELORDER_P3LIFEX, "p3lifex");
498 	LIST_ADD(CMD_LEVELORDER_P4LIFEX, "p4lifex");
499 	LIST_ADD(CMD_LEVELORDER_P1LIFEN, "p1lifen");
500 	LIST_ADD(CMD_LEVELORDER_P2LIFEN, "p2lifen");
501 	LIST_ADD(CMD_LEVELORDER_P3LIFEN, "p3lifen");
502 	LIST_ADD(CMD_LEVELORDER_P4LIFEN, "p4lifen");
503 	LIST_ADD(CMD_LEVELORDER_E1LIFE, "e1life");
504 	LIST_ADD(CMD_LEVELORDER_E2LIFE, "e2life");
505 	LIST_ADD(CMD_LEVELORDER_E3LIFE, "e3life");
506 	LIST_ADD(CMD_LEVELORDER_E4LIFE, "e4life");
507 	LIST_ADD(CMD_LEVELORDER_P1ICON, "p1icon");
508 	LIST_ADD(CMD_LEVELORDER_P2ICON, "p2icon");
509 	LIST_ADD(CMD_LEVELORDER_P3ICON, "p3icon");
510 	LIST_ADD(CMD_LEVELORDER_P4ICON, "p4icon");
511 	LIST_ADD(CMD_LEVELORDER_P1ICONW, "p1iconw");
512 	LIST_ADD(CMD_LEVELORDER_P2ICONW, "p2iconw");
513 	LIST_ADD(CMD_LEVELORDER_P3ICONW, "p3iconw");
514 	LIST_ADD(CMD_LEVELORDER_P4ICONW, "p4iconw");
515 	LIST_ADD(CMD_LEVELORDER_MP1ICON, "mp1icon");
516 	LIST_ADD(CMD_LEVELORDER_MP2ICON, "mp2icon");
517 	LIST_ADD(CMD_LEVELORDER_MP3ICON, "mp3icon");
518 	LIST_ADD(CMD_LEVELORDER_MP4ICON, "mp4icon");
519 	LIST_ADD(CMD_LEVELORDER_P1NAMEJ, "p1namej");
520 	LIST_ADD(CMD_LEVELORDER_P2NAMEJ, "p2namej");
521 	LIST_ADD(CMD_LEVELORDER_P3NAMEJ, "p3namej");
522 	LIST_ADD(CMD_LEVELORDER_P4NAMEJ, "p4namej");
523 	LIST_ADD(CMD_LEVELORDER_P1SCORE, "p1score");
524 	LIST_ADD(CMD_LEVELORDER_P2SCORE, "p2score");
525 	LIST_ADD(CMD_LEVELORDER_P3SCORE, "p3score");
526 	LIST_ADD(CMD_LEVELORDER_P4SCORE, "p4score");
527 	LIST_ADD(CMD_LEVELORDER_P1SHOOT, "p1shoot");
528 	LIST_ADD(CMD_LEVELORDER_P2SHOOT, "p2shoot");
529 	LIST_ADD(CMD_LEVELORDER_P3SHOOT, "p3shoot");
530 	LIST_ADD(CMD_LEVELORDER_P4SHOOT, "p4shoot");
531 	LIST_ADD(CMD_LEVELORDER_P1RUSH, "p1rush");
532 	LIST_ADD(CMD_LEVELORDER_P2RUSH, "p2rush");
533 	LIST_ADD(CMD_LEVELORDER_P3RUSH, "p3rush");
534 	LIST_ADD(CMD_LEVELORDER_P4RUSH, "p4rush");
535 	LIST_ADD(CMD_LEVELORDER_E1ICON, "e1icon");
536 	LIST_ADD(CMD_LEVELORDER_E2ICON, "e2icon");
537 	LIST_ADD(CMD_LEVELORDER_E3ICON, "e3icon");
538 	LIST_ADD(CMD_LEVELORDER_E4ICON, "e4icon");
539 	LIST_ADD(CMD_LEVELORDER_E1NAME, "e1name");
540 	LIST_ADD(CMD_LEVELORDER_E2NAME, "e2name");
541 	LIST_ADD(CMD_LEVELORDER_E3NAME, "e3name");
542 	LIST_ADD(CMD_LEVELORDER_E4NAME, "e4name");
543 	LIST_ADD(CMD_LEVELORDER_P1SMENU, "p1smenu");
544 	LIST_ADD(CMD_LEVELORDER_P2SMENU, "p2smenu");
545 	LIST_ADD(CMD_LEVELORDER_P3SMENU, "p3smenu");
546 	LIST_ADD(CMD_LEVELORDER_P4SMENU, "p4smenu");
547 	LIST_ADD(CMD_LEVELORDER_TIMEICON, "timeicon");
548 	LIST_ADD(CMD_LEVELORDER_BGICON, "bgicon");
549 	LIST_ADD(CMD_LEVELORDER_OLICON, "olicon");
550 	LIST_ADD(CMD_LEVELORDER_TIMELOC, "timeloc");
551 	LIST_ADD(CMD_LEVELORDER_LBARSIZE, "lbarsize");
552 	LIST_ADD(CMD_LEVELORDER_OLBARSIZE, "olbarsize");
553 	LIST_ADD(CMD_LEVELORDER_MPBARSIZE, "mpbarsize");
554 	LIST_ADD(CMD_LEVELORDER_LBARTEXT, "lbartext");
555 	LIST_ADD(CMD_LEVELORDER_MPBARTEXT, "mpbartext");
556 	LIST_ADD(CMD_LEVELORDER_SHOWCOMPLETE, "showcomplete");
557 	LIST_ADD(CMD_LEVELORDER_CLEARBONUS, "clearbonus");
558 	LIST_ADD(CMD_LEVELORDER_RUSHBONUS, "rushbonus");
559 	LIST_ADD(CMD_LEVELORDER_LIFEBONUS, "lifebonus");
560 	LIST_ADD(CMD_LEVELORDER_SCBONUSES, "scbonuses");
561 	LIST_ADD(CMD_LEVELORDER_TOTALSCORE, "totalscore");
562 	LIST_ADD(CMD_LEVELORDER_MUSICOVERLAP, "musicoverlap");
563 	LIST_ADD(CMD_LEVELORDER_SHOWRUSHBONUS, "showrushbonus");
564 	LIST_ADD(CMD_LEVELORDER_NOSLOWFX, "noslowfx");
565 	LIST_ADD(CMD_LEVELORDER_EQUALAIRPAUSE, "equalairpause");
566 	LIST_ADD(CMD_LEVELORDER_HISCOREBG, "hiscorebg");
567 	LIST_ADD(CMD_LEVELORDER_COMPLETEBG, "completebg");
568 	LIST_ADD(CMD_LEVELORDER_LOADINGBG, "loadingbg");
569 	LIST_ADD(CMD_LEVELORDER_LOADINGBG2, "loadingbg2");
570 	LIST_ADD(CMD_LEVELORDER_LOADINGMUSIC, "loadingmusic");
571 	LIST_ADD(CMD_LEVELORDER_UNLOCKBG, "unlockbg");
572 	LIST_ADD(CMD_LEVELORDER_NOSHARE, "noshare");
573 	LIST_ADD(CMD_LEVELORDER_CUSTFADE, "custfade");
574 	LIST_ADD(CMD_LEVELORDER_CONTINUESCORE, "continuescore");
575 	LIST_ADD(CMD_LEVELORDER_CREDITS, "credits");
576 	LIST_ADD(CMD_LEVELORDER_TYPEMP, "typemp");
577 	LIST_ADD(CMD_LEVELORDER_SINGLE, "single");
578 	LIST_ADD(CMD_LEVELORDER_MAXPLAYERS, "maxplayers");
579 	LIST_ADD(CMD_LEVELORDER_NOSAME, "nosame");
580 	LIST_ADD(CMD_LEVELORDER_RUSH, "rush");
581 	LIST_ADD(CMD_LEVELORDER_MAXWALLHEIGHT, "maxwallheight");
582 	LIST_ADD(CMD_LEVELORDER_SCOREFORMAT, "scoreformat");
583 
584 	#undef LIST_ADD
585 	return result;
586 }
587