fix compile against newer giflib
[rofl0r-obeditor.git] / src / common__parsing.cpp
blob0e928299cf397991b4390186478fc1e73c6147d9
1 #include "wx/wxprec.h"
2 #ifndef WX_PRECOMP
3 #include "wx/wx.h"
4 #endif
6 #include "common__tools.h"
8 /******************************************************11
9 ******** OB files struct datas
10 ******************************************************/
11 // arr_glob_constraint MEANING : for an entire line of an ob_file
12 // [0] => nb param min
13 // [1] => nb param max
14 // [2] => arr_constraint on param 1
15 // [3] => arr_constraint on param 2
16 // etc...
17 // [last] => NULL
19 // arr_constraint MEANING
20 // [0] => Type :
21 // 1 => Bool
22 // 2 => Int
23 // 3 => Positive Int
24 // 4 => Float
25 // 5 => path
26 // 6 => must be a string
27 // 8 => must be in the set, where set members that finish by # match a trailing number
28 // [1+] Element of the set, if [0]==8
29 // [last] => NULL
31 // Some constraints needs to be reversed cause they are tailed typed, so put them in this array
32 wxArrayString arr_Constraints_To_Reverse;
34 ob_validator::~ob_validator()
37 ob_validator::ob_validator()
39 arr_glob_constraint = NULL;
42 ob_validator::ob_validator( _V* _arr_glob_constraint )
44 arr_glob_constraint = _arr_glob_constraint;
47 void ob_validator::Validate( const ob_object* it, wxString* _tokens, const size_t tokens_size )
49 if( arr_glob_constraint == NULL)
50 return;
52 // Have To reverse some rules sometimes
53 wxString* tokens = _tokens;
54 if( arr_Constraints_To_Reverse.Index( it->name ) != wxNOT_FOUND )
55 tokens = Reverse_Null_StrArray( tokens, tokens_size );
58 // If number of tokens < number min
59 int bound_size = *(arr_glob_constraint[0]);
60 if( (int) tokens_size < bound_size )
61 ObjectsLog( MYLOG_WARNING, it->num_line + it->nb_line,
62 wxT("To less parameters for ") + it->name );
64 // If number of tokens > number max
65 bound_size = *(arr_glob_constraint[1]);
66 if( (int) tokens_size > bound_size )
67 ObjectsLog( MYLOG_WARNING, it->num_line + it->nb_line,
68 wxT("To much parameters for ") + it->name );
70 // Check each parameter of the tag
71 int i=2;
72 while( (int*) arr_glob_constraint[i] != NULL )
74 // Constraint on this parameter
75 _V arr_constraint = arr_glob_constraint[i];
77 // No more tokens => Everything fine :)
78 if( (int) tokens_size < i -1 )
79 return;
81 // Constraints for this parameter are empty !!
82 if( (_V) arr_constraint[0] == NULL )
84 ObjectsLog( MYLOG_ERROR, it->num_line + it->nb_line,
85 wxT("Constraint ") + IntToStr( i - 1 ) + wxT(" for <") + it->name + wxT("> is empty !!") );
86 i++;
87 continue;
90 // Check type constraint
91 int type_cstrts = (int) arr_constraint[0];
93 // Path constraint
94 if( type_cstrts == 5 )
96 if( tokens[i-2] == wxString() )
97 ObjectsLog( MYLOG_WARNING, it->num_line + it->nb_line,
98 wxT("For <") + it->name + wxT("> Parameter ") + IntToStr(i-1) + wxT(" must be path but it's empty") );
99 else
101 wxFileName temp = GetObFile( tokens[i-2] );
102 if( ! temp.FileExists() )
103 ObjectsLog( MYLOG_WARNING, it->num_line + it->nb_line,
104 wxT("For <") + it->name + wxT("> , Parameter ") + IntToStr(i-1) + wxT(" must be valid path, but can't find ")
105 + temp.GetFullPath() + wxT(" in filesystem ") );
109 if( type_cstrts == 1 && ! StrIsObBool( tokens[i-2] ))
110 ObjectsLog( MYLOG_WARNING, it->num_line + it->nb_line,
111 wxT("For <") + it->name +
112 wxT("> , Parameter ") + IntToStr(i-1) + wxT(" must be a boolean (0,1)"));
114 else if( type_cstrts == 2 && ! StrIsInt( tokens[i-2] ))
115 ObjectsLog( MYLOG_WARNING, it->num_line + it->nb_line,
116 wxT("For <") + it->name +
117 wxT("> , Parameter ") + IntToStr(i-1) + wxT(" must be an integer"));
119 else if( type_cstrts == 3 && ! StrIsUInt( tokens[i-2] ))
120 ObjectsLog( MYLOG_WARNING, it->num_line + it->nb_line,
121 wxT("For <") + it->name +
122 wxT("> , Parameter ") + IntToStr(i-1) + wxT(" must be a positive integer" ));
124 else if( type_cstrts == 4 && ! StrIsFloat( tokens[i-2] ))
125 ObjectsLog( MYLOG_WARNING, it->num_line + it->nb_line,
126 wxT("For <") + it->name
127 + wxT("> , Parameter ") + IntToStr(i-1) + wxT(" must be a real number") );
129 // Check Set + number constraint
130 else if( type_cstrts == 8 )
132 int j = 0;
133 bool found = false;
134 while( (_V) arr_constraint[j+1] != NULL )
136 wxString t = *((wxString*) arr_constraint[j+1]);
137 t = t.Upper();
138 if( t.Right(1) == wxT("#") )
140 t = t.Left( t.Len() -1);
141 if( tokens[i-2].Len() < t.Len() )
143 j++;
144 continue;
148 tokens[i-2].Left(t.Len()).Upper() == t // prefix of token Match
151 StrIsInt( tokens[i-2].Right( tokens[i-2].Len() - t.Len()) ) // suffix is a number
153 (tokens[i-2].Len() - t.Len() ) == 0 // no suffix
157 found = true;
158 break;
161 else if( tokens[i-2].Upper() == t )
163 found = true;
164 break;
166 j++;
168 if( ! found )
170 wxString setStr;
171 j = 0;
172 while( (_V) arr_constraint[j+1] != NULL )
174 setStr += *(wxString*)arr_constraint[j+1] + wxT(" | ");
175 j++;
177 ObjectsLog( MYLOG_WARNING, it->num_line + it->nb_line,
178 wxT("For <") + it->name +
179 wxT("> Parameter ") + IntToStr(i-1) + wxT(" is <") + tokens[i-2] + wxT("> AND must be in ") + setStr );
182 i++;
187 * Creation of known constraints
191 _V* _VSet( size_t setSize, ...)
193 va_list vals;
194 va_start(vals, setSize);
196 _V* res = new _V[setSize+2];
197 res[0] = (int*) 8;
198 size_t i = 0;
199 while ( i < setSize )
201 wxString t = wxString::FromAscii(va_arg( vals, char* ));
202 res[i+1] = (int*) new wxString(t);
203 i++;
205 res[i+1] = NULL;
206 va_end(vals);
207 return res;
210 _V* _VSet2( size_t setSize, wxString* tab)
212 _V* res = new _V[setSize+2];
213 res[0] = (int*) 8;
214 size_t i = 0;
215 while ( i < setSize )
217 res[i+1] = (int*) new wxString(tab[i]);
218 i++;
220 res[i+1] = NULL;
221 return res;
224 ob_validator* _Vcsrt( int min_args, int max_args, int nb_csrt, ... )
226 va_list vals;
227 va_start(vals, nb_csrt);
229 _V* res = new _V[3+nb_csrt];
230 res[0] = new int(min_args);
231 res[1] = new int(max_args);
232 int i = 0;
233 while ( i < nb_csrt )
235 res[i+2] = (_V) va_arg( vals, _V* );
236 i++;
238 res[i+2] = NULL;
239 va_end(vals);
240 return new ob_validator( res );
246 /** \internal
247 * The DATAs for the constraints
249 hash_constraints __ViD;
250 hash_constraints entity_constraints;
251 hash_constraints models_constraints;
252 hash_constraints levels_constraints;
254 wxString _t__off_def[] = {wxT("all"), wxT("shock"), wxT("burn"), wxT("steal"), wxT("blast"), wxT("freeze"), wxT("normal"), wxT("normal1"), wxT("normal2"), wxT("normal3"), wxT("normal4"), wxT("normal5"), wxT("normal6"), wxT("normal7"), wxT("normal8"), wxT("normal9"), wxT("normal10")};
256 wxString _t__entity_type[] = {wxT("player"), wxT("enemy"), wxT("npc"), wxT("item"), wxT("none"), wxT("steamer"), wxT("obstacle"), wxT("text"), wxT("trap"), wxT("endlevel"), wxT("pshot"), wxT("panel") };
258 wxString _t__entity_subtype[] = {wxT("arrow"), wxT("noskip"), wxT("weapon"), wxT("biker"), wxT("notgrab"), wxT("touch"), wxT("flydie"), wxT("both"), wxT("project"), wxT("chase"), wxT("follow") };
260 wxString _t__entity_aimove[] = {wxT("Chase"), wxT("Chasex"), wxT("Chasez"), wxT("Avoid"), wxT("Avoidx"), wxT("Avoidz"), wxT("Wander"), wxT("Ignoreholes")};
262 wxString _t__entity_animation[] = {
263 wxT("IDLE"),
264 wxT("ATTACK#"),
265 wxT("FALL#"),
266 wxT("WALK"),
267 wxT("BACKWALK"),
268 wxT("TURN"),
269 wxT("UP"),
270 wxT("DOWN"),
271 wxT("DUCK"),
272 wxT("LAND"),
273 wxT("RUNATTACK"),
274 wxT("RUNJUMPATTACK"),
275 wxT("BLOCK"),
276 wxT("DODGE"),
277 wxT("GET"),
278 wxT("CHARGEATTACK"),
279 wxT("ATTACKBOTH"),
280 wxT("UPPER"),
281 wxT("JUMP"),
282 wxT("JUMPDELAY"),
283 wxT("JUMPLAND"),
284 wxT("FORWARDJUMP"),
285 wxT("RUNJUMP"),
286 wxT("JUMPATTACK"),
287 wxT("JUMPFORWARD"),
288 wxT("JUMPATTACK2"),
289 wxT("JUMPATTACK3"),
290 wxT("JUMPSPECIAL"),
291 wxT("JUMPSPECIAL1"),
292 wxT("JUMPSPECIAL2"),
293 wxT("JUMPSPECIAL3"),
294 wxT("JUMPCANT"),
295 wxT("ATTACKUP"),
296 wxT("ATTACKDOWN"),
297 wxT("ATTACKFORWARD"),
298 wxT("ATTACKBACKWARD"),
299 wxT("FOLLOW#"),
300 wxT("FREESPECIAL#"),
301 wxT("SPECIAL"),
302 wxT("SPECIAL2"),
303 wxT("CHARGE"),
304 wxT("CANT"),
305 wxT("GRAB"),
306 wxT("GRABATTACK"),
307 wxT("GRABATTACK2"),
308 wxT("GRABFORWARD"),
309 wxT("GRABFORWARD2"),
310 wxT("GRABUP"),
311 wxT("GRABUP2"),
312 wxT("GRABDOWN"),
313 wxT("GRABDOWN2"),
314 wxT("GRABWALK"),
315 wxT("GRABBACKWALK"),
316 wxT("GRABWALKUP"),
317 wxT("GRABWALKDOWN"),
318 wxT("GRABTURN"),
319 wxT("THROW"),
320 wxT("GRABBED"),
321 wxT("GRABBEDWALK"),
322 wxT("GRABBEDBACKWALK"),
323 wxT("GRABBEDWALKUP"),
324 wxT("GRABBEDWALKDOWN"),
325 wxT("GRABBEDTURN"),
326 wxT("PAIN#"),
327 wxT("SPAIN"),
328 wxT("BPAIN"),
329 wxT("RISE"),
330 wxT("RISEATTACK"),
331 wxT("SHOCK"),
332 wxT("BURN"),
333 wxT("DEATH#"),
334 wxT("BDIE"),
335 wxT("SDIE"),
336 wxT("HITWALL"),
337 wxT("SLIDE"),
338 wxT("RUNSLIDE"),
339 wxT("RUN"),
340 wxT("SPAWN"),
341 wxT("WAITING"),
342 wxT("SELECT")
345 wxString _t__smartBomb[] = {wxT("0"), wxT("knockdown1"), wxT("1"), wxT("knockdown2"), wxT("2"), wxT("knockdown3"), wxT("3"), wxT("knockdown4"), wxT("4"), wxT("blast"), wxT("5"), wxT("burn"), wxT("6"), wxT("freeze"), wxT("7"), wxT("shock"), wxT("8"), wxT("steal") };
347 wxString _t__targetType[] = {wxT("enemy"), wxT("player"), wxT("npc"), wxT("obstacle"), wxT("shot"), wxT("ground") };
349 wxString _t__directions[] = { wxT("U"), wxT("D"), wxT("F"), wxT("B") };
351 * Implement the constraints to each tokens in the *.txt
352 * files of OB
355 _V __bool_;
356 _V __int_;
357 _V __Uint_;
358 _V __float_;
359 _V __path_;
360 _V __str_;
362 void constraints_init()
364 __bool_ = new int(1);
365 __int_ = new int(2);
366 __Uint_ = new int(3);
367 __float_= new int(4);
368 __path_ = new int(5);
369 __str_ = new int(6);
371 /****************************
372 // General validators
373 ****************************/
374 __ViD[wxT("EMPTY")] = _Vcsrt(0,0, 0 );
375 __ViD[wxT("noCstt")] = _Vcsrt(0,50, 0 );
377 __ViD[wxT("boolR")] = _Vcsrt(1,1, 1, __bool_ );
378 __ViD[wxT("bool")] = _Vcsrt(0,1, 1, __bool_ );
379 __ViD[wxT("intR")] = _Vcsrt(1,1, 1, __int_ );
380 __ViD[wxT("int")] = _Vcsrt(0,1, 1, __int_ );
381 __ViD[wxT("UintR")] = _Vcsrt(1,1, 1, __Uint_ );
382 __ViD[wxT("Uint")] = _Vcsrt(0,1, 1, __Uint_ );
383 __ViD[wxT("float")] = _Vcsrt(0,1, 1, __float_ );
384 __ViD[wxT("floatR")] = _Vcsrt(1,1, 1, __float_ );
385 __ViD[wxT("path")] = _Vcsrt(0,1, 1, __path_ );
386 __ViD[wxT("pathR")] = _Vcsrt(1,1, 1, __path_ );
387 __ViD[wxT("strR")] = _Vcsrt(1,1, 1, __str_ );
389 __ViD[wxT("2_int")] = _Vcsrt(1,2, 2, __int_, __int_ );
390 __ViD[wxT("2_Uint")] = _Vcsrt(1,2, 2, __Uint_, __Uint_ );
391 __ViD[wxT("2_path")] = _Vcsrt(2,2, 2, __path_, __path_ );
392 __ViD[wxT("2_bool")] = _Vcsrt(1,2, 2, __bool_, __bool_ );
393 __ViD[wxT("str_pathR")] = _Vcsrt(2,2, 2, __str_, __path_ );
394 __ViD[wxT("Uint_bool")] = _Vcsrt(1,2, 2, __Uint_, __bool_ );
396 __ViD[wxT("3_Uint")] = _Vcsrt(1,3, 3, __Uint_, __Uint_, __Uint_ );
397 __ViD[wxT("3_int")] = _Vcsrt(1,3, 3, __int_, __int_, __int_ );
398 __ViD[wxT("path_x_yR")] = _Vcsrt(3,3, 3, __path_, __int_, __int_ );
400 __ViD[wxT("4_bool")] = _Vcsrt(1,4, 4, __bool_, __bool_, __bool_,__bool_ );
401 __ViD[wxT("4_int")] = _Vcsrt(1,4, 4, __int_, __int_, __int_, __int_ );
402 __ViD[wxT("4_Uint")] = _Vcsrt(1,4, 4, __Uint_, __Uint_, __Uint_, __Uint_ );
404 __ViD[wxT("5_int")] = _Vcsrt(1,5, 5, __int_, __int_, __int_, __int_, __int_ );
405 __ViD[wxT("5_Uint")] = _Vcsrt(1,5, 5, __Uint_, __Uint_, __Uint_, __Uint_, __Uint_ );
407 __ViD[wxT("pathR_andMore")] = _Vcsrt(1,10, 1, __path_ );
409 /****************************
410 // Specific validators
411 ****************************/
413 // entity offense defense
414 _V* set__off_def = _VSet2( t_size_of( _t__off_def ), _t__off_def );
415 __ViD[wxT("off_def")] = _Vcsrt(2,2, 2, set__off_def, __int_ );
417 // entity type
418 _V* set__ent_type = _VSet2( t_size_of( _t__entity_type ), _t__entity_type );
419 __ViD[wxT("entity_type")] = _Vcsrt(1,1, 1, set__ent_type );
421 // entity subtype
422 _V* set__ent_subtype = _VSet2( t_size_of( _t__entity_subtype ), _t__entity_subtype );
423 __ViD[wxT("entity_subtype")] = _Vcsrt(1,1, 1, set__ent_subtype );
425 // entity aimove
426 _V* set__ent_aimove = _VSet2( t_size_of( _t__entity_aimove ), _t__entity_aimove );
427 __ViD[wxT("entity_aimove")] = _Vcsrt(1,1, 1, set__ent_aimove );
429 // entity running
430 __ViD[wxT("running")] = _Vcsrt(1,5, 5, __Uint_, __Uint_, __Uint_, __bool_, __bool_ );
432 // entity animation
433 _V* set__ent_animation = _VSet2( t_size_of( _t__entity_animation ), _t__entity_animation );
434 __ViD[wxT("entity_animation")] = _Vcsrt(1,1, 1, set__ent_animation );
436 // entity attack
437 __ViD[wxT("entity_attack_ON")] = _Vcsrt(6,10, 10,
438 __int_, __int_, __int_, __int_, __Uint_, __Uint_,
439 __bool_, __bool_, __Uint_, __int_ );
441 __ViD[wxT("entity_attack")] = _Vcsrt(1,10, 10,
442 __int_, __int_, __int_, __int_, __Uint_, __Uint_,
443 __bool_, __bool_, __Uint_, __int_ );
445 __ViD[wxT("entity_attack_blast")] = _Vcsrt(1,9, 9,
446 __int_, __int_, __int_, __int_, __Uint_,
447 __bool_, __bool_, __Uint_, __int_ );
450 // entity spawn
451 __ViD[wxT("entity_spawn")] = _Vcsrt(1,5, 5, __Uint_, __int_, __int_, __int_, __bool_ );
453 // smartBomb
454 _V* set__smartBomb = _VSet2( t_size_of( _t__smartBomb ), _t__smartBomb );
455 __ViD[wxT("entity_smartBomb")] = _Vcsrt(2,4, 4, __int_, set__smartBomb, __bool_, __Uint_ );
457 // entity_filter_type
458 _V* set__hostile = _VSet2( t_size_of( _t__targetType ), _t__targetType );
459 __ViD[wxT("entity_filter_type")] = _Vcsrt(1,5, 5, set__hostile, set__hostile, set__hostile, set__hostile, set__hostile );
461 // Atchain
462 __ViD[wxT("at_chain")] = _Vcsrt(1,15, 15,
463 __Uint_, __Uint_, __Uint_, __Uint_, __Uint_,
464 __Uint_, __Uint_, __Uint_, __Uint_, __Uint_,
465 __Uint_, __Uint_, __Uint_, __Uint_, __Uint_);
467 // com
468 _V* set__ent_directions = _VSet2( t_size_of( _t__directions ), _t__directions );
469 __ViD[wxT("entity_com")] = _Vcsrt(3,17, 17,
470 _VSet( 1, "freespecial#" ),
471 _VSet( 7, "A", "A2", "A3", "A4", "J", "S", "K" )
472 , set__ent_directions, set__ent_directions, set__ent_directions,
473 set__ent_directions, set__ent_directions, set__ent_directions,
474 set__ent_directions, set__ent_directions, set__ent_directions,
475 set__ent_directions, set__ent_directions, set__ent_directions,
476 set__ent_directions, set__ent_directions, set__ent_directions );
478 __ViD[wxT("ent_lifebarstatus")] = _Vcsrt( 2, 10, 10,
479 __Uint_, __Uint_, __bool_, __bool_, __bool_, __int_, __int_, __int_, __int_, __int_ );
481 __ViD[wxT("platform")] = _Vcsrt( 8, 8, 8,
482 __int_, __int_, __int_, __int_, __int_, __int_, __int_, __int_ );
484 __ViD[wxT("drawmethod")] = _Vcsrt( 1, 10, 10,
485 __int_, __int_, __bool_, __bool_, __int_, __int_ ,
486 __int_, __Uint_, __Uint_, __bool_);
489 // Models.txt constraints
490 models_constraints[wxT("name")] = __ViD[wxT("strR")];
491 models_constraints[wxT("ajspecial")] = __ViD[wxT("boolR")];
492 models_constraints[wxT("autoland")] = __ViD[wxT("UintR")];
493 models_constraints[wxT("colourselect")] = __ViD[wxT("boolR")];
494 models_constraints[wxT("nocost")] = __ViD[wxT("boolR")];
495 models_constraints[wxT("nolost")] = __ViD[wxT("boolR")];
496 models_constraints[wxT("blockratio")] = __ViD[wxT("boolR")];
497 models_constraints[wxT("mpblock")] = __ViD[wxT("boolR")];
498 models_constraints[wxT("nochipdeath")] = __ViD[wxT("boolR")];
499 models_constraints[wxT("nochipdeath")] = __ViD[wxT("boolR")];
500 models_constraints[wxT("versusdamage")] = __ViD[wxT("boolR")];
501 models_constraints[wxT("spdirection")] = __ViD[wxT("4_bool")];
502 models_constraints[wxT("maxattacks")] = __ViD[wxT("UintR")];
503 models_constraints[wxT("maxattacktypes")] = __ViD[wxT("UintR")];
504 models_constraints[wxT("maxfollows")] = __ViD[wxT("UintR")];
505 models_constraints[wxT("maxfreespecials")] = __ViD[wxT("UintR")];
506 models_constraints[wxT("lifescore")] = __ViD[wxT("intR")];
507 models_constraints[wxT("credscore")] = __ViD[wxT("intR")];
508 models_constraints[wxT("nocheats")] = __ViD[wxT("boolR")];
509 models_constraints[wxT("load")] = __ViD[wxT("str_pathR")];
510 models_constraints[wxT("know")] = __ViD[wxT("str_pathR")];
512 // entity files constraints
513 entity_constraints[wxT("name")] = __ViD[wxT("strR")];
514 entity_constraints[wxT("type")] = __ViD[wxT("entity_type")];
515 entity_constraints[wxT("subtype")] = __ViD[wxT("entity_subtype")];
516 entity_constraints[wxT("health")] = __ViD[wxT("UintR")];
517 entity_constraints[wxT("mp")] = __ViD[wxT("UintR")];
518 entity_constraints[wxT("credit")] = __ViD[wxT("UintR")];
519 entity_constraints[wxT("alpha")] = __ViD[wxT("UintR")];
520 entity_constraints[wxT("speed")] = __ViD[wxT("UintR")];
521 entity_constraints[wxT("speedf")] = __ViD[wxT("floatR")];
522 entity_constraints[wxT("running")] = __ViD[wxT("running")];
523 entity_constraints[wxT("nomove")] = __ViD[wxT("2_bool")];
524 entity_constraints[wxT("jumpspeed")] = __ViD[wxT("UintR")];
525 entity_constraints[wxT("jumpspeedf")] = __ViD[wxT("floatR")];
526 entity_constraints[wxT("jumpheight")] = __ViD[wxT("UintR")];
527 entity_constraints[wxT("grabdistance")] = __ViD[wxT("UintR")];
528 entity_constraints[wxT("throwdamage")] = __ViD[wxT("UintR")];
529 entity_constraints[wxT("throw")] = __ViD[wxT("2_Uint")];
530 entity_constraints[wxT("throwframewait")] = __ViD[wxT("UintR")];
531 entity_constraints[wxT("height")] = __ViD[wxT("UintR")];
532 entity_constraints[wxT("secret")] = __ViD[wxT("boolR")];
533 entity_constraints[wxT("shadow")] = __ViD[wxT("UintR")];
534 entity_constraints[wxT("fmap")] = __ViD[wxT("UintR")];
535 entity_constraints[wxT("load")] = __ViD[wxT("strR")];
536 entity_constraints[wxT("project")] = __ViD[wxT("strR")];
537 entity_constraints[wxT("shootnum")] = __ViD[wxT("UintR")];
538 entity_constraints[wxT("counter")] = __ViD[wxT("UintR")];
539 entity_constraints[wxT("reload")] = __ViD[wxT("UintR")];
540 entity_constraints[wxT("typeshot")] = __ViD[wxT("boolR")];
541 entity_constraints[wxT("animal")] = __ViD[wxT("boolR")];
542 entity_constraints[wxT("playshot")] = __ViD[wxT("strR")];
543 entity_constraints[wxT("playshotno")] = __ViD[wxT("strR")];
544 entity_constraints[wxT("knife")] = __ViD[wxT("strR")];
545 entity_constraints[wxT("star")] = __ViD[wxT("strR")];
546 entity_constraints[wxT("bomb")] = __ViD[wxT("strR")];
547 entity_constraints[wxT("pbomb")] = __ViD[wxT("strR")];
548 entity_constraints[wxT("hitenemy")] = __ViD[wxT("2_bool")];
549 entity_constraints[wxT("rider")] = __ViD[wxT("strR")];
550 entity_constraints[wxT("flash")] = __ViD[wxT("strR")];
551 entity_constraints[wxT("bflash")] = __ViD[wxT("strR")];
552 entity_constraints[wxT("dust")] = __ViD[wxT("strR")];
553 entity_constraints[wxT("nolife")] = __ViD[wxT("boolR")];
554 entity_constraints[wxT("noquake")] = __ViD[wxT("boolR")];
555 entity_constraints[wxT("nopain")] = __ViD[wxT("boolR")];
556 entity_constraints[wxT("nodrop")] = __ViD[wxT("boolR")];
557 entity_constraints[wxT("nodieblink")] = __ViD[wxT("Uint_bool")];
558 entity_constraints[wxT("makeinv")] = __ViD[wxT("Uint_bool")];
559 entity_constraints[wxT("blockodds")] = __ViD[wxT("UintR")];
560 entity_constraints[wxT("thold")] = __ViD[wxT("UintR")];
561 entity_constraints[wxT("blockpain")] = __ViD[wxT("boolR")];
562 entity_constraints[wxT("falldie")] = __ViD[wxT("UintR")];
563 entity_constraints[wxT("aironly")] = __ViD[wxT("boolR")];
564 entity_constraints[wxT("setlayer")] = __ViD[wxT("intR")];
565 entity_constraints[wxT("grabback")] = __ViD[wxT("boolR")];
566 entity_constraints[wxT("grabfinish")] = __ViD[wxT("boolR")];
567 entity_constraints[wxT("icon")] = __ViD[wxT("pathR")];
568 entity_constraints[wxT("iconpain")] = __ViD[wxT("pathR")];
569 entity_constraints[wxT("icondie")] = __ViD[wxT("pathR")];
570 entity_constraints[wxT("iconget")] = __ViD[wxT("pathR")];
571 entity_constraints[wxT("iconw")] = __ViD[wxT("pathR")];
572 entity_constraints[wxT("iconmphigh")] = __ViD[wxT("pathR")];
573 entity_constraints[wxT("iconmphalf")] = __ViD[wxT("pathR")];
574 entity_constraints[wxT("iconmplow")] = __ViD[wxT("pathR")];
575 entity_constraints[wxT("diesound")] = __ViD[wxT("pathR")];
576 entity_constraints[wxT("parrow")] = __ViD[wxT("path_x_yR")];
577 entity_constraints[wxT("parrow2")] = __ViD[wxT("path_x_yR")];
578 entity_constraints[wxT("score")] = __ViD[wxT("2_int")];
579 entity_constraints[wxT("smartbomb")] = __ViD[wxT("entity_smartBomb")];
580 entity_constraints[wxT("toflip")] = __ViD[wxT("boolR")];
581 entity_constraints[wxT("cantgrab")] = __ViD[wxT("boolR")];
582 entity_constraints[wxT("paingrab")] = __ViD[wxT("boolR")];
583 entity_constraints[wxT("noatflash")] = __ViD[wxT("boolR")];
584 entity_constraints[wxT("remove")] = __ViD[wxT("boolR")];
585 entity_constraints[wxT("escapehits")] = __ViD[wxT("UintR")];
586 entity_constraints[wxT("com")] = __ViD[wxT("entity_com")];
587 arr_Constraints_To_Reverse.Add( wxT("com") );
588 entity_constraints[wxT("remap")] = __ViD[wxT("2_path")];
589 entity_constraints[wxT("atchain")] = __ViD[wxT("at_chain")];
590 entity_constraints[wxT("chargerate")] = __ViD[wxT("UintR")];
591 entity_constraints[wxT("mprate]")] = __ViD[wxT("UintR")];
592 entity_constraints[wxT("risetime")] = __ViD[wxT("intR")];
593 entity_constraints[wxT("turndelay")] = __ViD[wxT("UintR")];
594 entity_constraints[wxT("facing")] = __ViD[wxT("UintR")];
595 entity_constraints[wxT("weaploss")] = __ViD[wxT("UintR")];
596 entity_constraints[wxT("branch")] = __ViD[wxT("strR")];
597 entity_constraints[wxT("hostile")] = __ViD[wxT("entity_filter_type")];
598 entity_constraints[wxT("candamage")] = __ViD[wxT("entity_filter_type")];
599 entity_constraints[wxT("projectilehit")] = __ViD[wxT("entity_filter_type")];
600 entity_constraints[wxT("aggression")] = __ViD[wxT("intR")];
601 entity_constraints[wxT("antigrab")] = __ViD[wxT("intR")];
602 entity_constraints[wxT("grabforce")] = __ViD[wxT("intR")];
603 entity_constraints[wxT("offense")] = __ViD[wxT("off_def")];
604 entity_constraints[wxT("defense")] = __ViD[wxT("off_def")];
605 entity_constraints[wxT("hmap")] = __ViD[wxT("2_Uint")];
606 entity_constraints[wxT("bounce")] = __ViD[wxT("boolR")];
607 entity_constraints[wxT("grabwalk")] = __ViD[wxT("boolR")];
608 entity_constraints[wxT("grabturn")] = __ViD[wxT("boolR")];
609 entity_constraints[wxT("load")] = __ViD[wxT("str_pathR")];
610 entity_constraints[wxT("lifespan")] = __ViD[wxT("UintR")];
611 entity_constraints[wxT("nopassiveblock")] = __ViD[wxT("boolR")];
612 entity_constraints[wxT("knockdowncount")] = __ViD[wxT("UintR")];
613 entity_constraints[wxT("antigravity")] = __ViD[wxT("intR")];
614 entity_constraints[wxT("aimove")] = __ViD[wxT("entity_aimove")];
615 entity_constraints[wxT("gfxshadow")] = __ViD[wxT("boolR")];
616 entity_constraints[wxT("holdblock")] = __ViD[wxT("boolR")];
617 entity_constraints[wxT("jumpmove")] = __ViD[wxT("2_Uint")];
618 entity_constraints[wxT("riseinv")] = __ViD[wxT("Uint_bool")];
619 entity_constraints[wxT("lifebarstatus")] = __ViD[wxT("ent_lifebarstatus")];
620 entity_constraints[wxT("lifeposition")] = __ViD[wxT("2_int")];
621 entity_constraints[wxT("nameposition")] = __ViD[wxT("2_int")];
622 entity_constraints[wxT("iconposition")] = __ViD[wxT("2_int")];
623 entity_constraints[wxT("no_adjust_base")] = __ViD[wxT("boolR")];
624 entity_constraints[wxT("subject_to_wall")] = __ViD[wxT("boolR")];
625 entity_constraints[wxT("subject_to_hole")] = __ViD[wxT("boolR")] ;
626 entity_constraints[wxT("subject_to_obstacle")] = __ViD[wxT("boolR")];
627 entity_constraints[wxT("subject_to_platform")] = __ViD[wxT("boolR")];
628 entity_constraints[wxT("subject_to_gravity")] = __ViD[wxT("boolR")];
629 entity_constraints[wxT("subject_to_screen")] = __ViD[wxT("boolR")];
630 entity_constraints[wxT("falldie")] = __ViD[wxT("UintR")];
631 entity_constraints[wxT("death")] = __ViD[wxT("UintR")];
632 entity_constraints[wxT("resetable")] = __ViD[wxT("int")];
633 entity_constraints[wxT("sleepwait")] = __ViD[wxT("int")];
634 entity_constraints[wxT("always_go_ahead")] = __ViD[wxT("bool")];
635 entity_constraints[wxT("always_walk")] = __ViD[wxT("bool")];
636 entity_constraints[wxT("nodropfly")] = __ViD[wxT("bool")];
637 entity_constraints[wxT("palette")] = __ViD[wxT("pathR_andMore")];
638 entity_constraints[wxT("alternatepal")] = __ViD[wxT("pathR")];
640 //Animations properties
641 entity_constraints[wxT("animation")] = __ViD[wxT("entity_animation")];
642 entity_constraints[wxT("anim")] = __ViD[wxT("entity_animation")];
644 entity_constraints[wxT("loop")] = __ViD[wxT("boolR")];
645 entity_constraints[wxT("fastattack")] = __ViD[wxT("boolR")];
646 entity_constraints[wxT("hitfx")] = __ViD[wxT("pathR")];
647 entity_constraints[wxT("hitflash")] = __ViD[wxT("strR")];
648 entity_constraints[wxT("custknife")] = __ViD[wxT("strR")];
649 entity_constraints[wxT("custstar")] = __ViD[wxT("strR")];
650 entity_constraints[wxT("custbomb")] = __ViD[wxT("strR")];
651 entity_constraints[wxT("custpbomb")] = __ViD[wxT("strR")];
652 entity_constraints[wxT("delay")] = __ViD[wxT("UintR")];
653 entity_constraints[wxT("offset")] = __ViD[wxT("2_int")];
654 entity_constraints[wxT("bbox")] = __ViD[wxT("5_int")];
655 entity_constraints[wxT("frame")] = __ViD[wxT("pathR")];
656 entity_constraints[wxT("range")] = __ViD[wxT("2_int")];
657 entity_constraints[wxT("rangez")] = __ViD[wxT("2_int")];
658 entity_constraints[wxT("rangea")] = __ViD[wxT("2_int")];
659 entity_constraints[wxT("attack")] = __ViD[wxT("entity_attack")];
660 entity_constraints[wxT("attack1")] = __ViD[wxT("entity_attack")];
661 entity_constraints[wxT("attack2")] = __ViD[wxT("entity_attack")];
662 entity_constraints[wxT("attack3")] = __ViD[wxT("entity_attack")];
663 entity_constraints[wxT("attack4")] = __ViD[wxT("entity_attack")];
664 entity_constraints[wxT("attack5")] = __ViD[wxT("entity_attack")];
665 entity_constraints[wxT("attack6")] = __ViD[wxT("entity_attack")];
666 entity_constraints[wxT("attack7")] = __ViD[wxT("entity_attack")];
667 entity_constraints[wxT("attack8")] = __ViD[wxT("entity_attack")];
668 entity_constraints[wxT("attack9")] = __ViD[wxT("entity_attack")];
669 entity_constraints[wxT("blast")] = __ViD[wxT("entity_attack_blast")];
670 entity_constraints[wxT("shock")] = __ViD[wxT("entity_attack")];
671 entity_constraints[wxT("burn")] = __ViD[wxT("entity_attack")];
672 entity_constraints[wxT("freeze")] = __ViD[wxT("entity_attack")];
673 entity_constraints[wxT("steal")] = __ViD[wxT("entity_attack")];
674 entity_constraints[wxT("quakeframe")] = __ViD[wxT("3_Uint")];
675 entity_constraints[wxT("move")] = __ViD[wxT("intR")];
676 entity_constraints[wxT("movea")] = __ViD[wxT("intR")];
677 entity_constraints[wxT("movez")] = __ViD[wxT("intR")];
678 entity_constraints[wxT("seta")] = __ViD[wxT("intR")];
679 entity_constraints[wxT("platform")] = __ViD[wxT("platform")];
680 entity_constraints[wxT("dive")] = __ViD[wxT("2_int")];
681 entity_constraints[wxT("sound")] = __ViD[wxT("path")];
682 entity_constraints[wxT("pshotframe")] = __ViD[wxT("2_Uint")];
683 entity_constraints[wxT("throwframe")] = __ViD[wxT("2_Uint")];
684 entity_constraints[wxT("tossframe")] = __ViD[wxT("2_Uint")];
685 entity_constraints[wxT("pbombframe")] = __ViD[wxT("2_Uint")];
686 entity_constraints[wxT("jumpframe")] = __ViD[wxT("4_int")];
687 entity_constraints[wxT("custpshot")] = __ViD[wxT("strR")];
688 entity_constraints[wxT("mpcost")] = __ViD[wxT("UintR")];
689 entity_constraints[wxT("custfireb")] = __ViD[wxT("strR")];
690 entity_constraints[wxT("shootframe")] = __ViD[wxT("2_Uint")];
691 entity_constraints[wxT("flipframe")] = __ViD[wxT("UintR")];
692 entity_constraints[wxT("followanim")] = __ViD[wxT("UintR")];
693 entity_constraints[wxT("followcond")] = __ViD[wxT("UintR")];
694 entity_constraints[wxT("counterframe")] = __ViD[wxT("3_Uint")];
695 entity_constraints[wxT("spawnframe")] = __ViD[wxT("entity_spawn")];
696 entity_constraints[wxT("summonframe")] = __ViD[wxT("entity_spawn")];
697 entity_constraints[wxT("unsummonframe")] = __ViD[wxT("UintR")];
698 entity_constraints[wxT("subentity")] = __ViD[wxT("UintR")];
699 entity_constraints[wxT("custentity")] = __ViD[wxT("UintR")];
700 entity_constraints[wxT("weaponframe")] = __ViD[wxT("2_Uint")];
701 entity_constraints[wxT("attackone")] = __ViD[wxT("boolR")];
702 entity_constraints[wxT("grabin")] = __ViD[wxT("2_Uint")];
703 entity_constraints[wxT("forcedirection")] = __ViD[wxT("intR")];
704 entity_constraints[wxT("damageonlanding")] = __ViD[wxT("2_Uint")];
705 entity_constraints[wxT("dropv")] = __ViD[wxT("3_int")];
706 entity_constraints[wxT("dropframe")] = __ViD[wxT("UintR")];
707 entity_constraints[wxT("landframe")] = __ViD[wxT("UintR")];
708 entity_constraints[wxT("counterattack")] = __ViD[wxT("boolR")];
709 entity_constraints[wxT("fshadow")] = __ViD[wxT("intR")];
710 entity_constraints[wxT("shadowcoords")] = __ViD[wxT("2_int")];
711 entity_constraints[wxT("itembox")] = __ViD[wxT("4_int")];
712 entity_constraints[wxT("stun")] = __ViD[wxT("intR")];
713 entity_constraints[wxT("seal")] = __ViD[wxT("2_Uint")];
714 entity_constraints[wxT("forcemap")] = __ViD[wxT("2_Uint")];
715 entity_constraints[wxT("drain")] = __ViD[wxT("4_Uint")];
716 entity_constraints[wxT("noreflect")] = __ViD[wxT("boolR")];
717 entity_constraints[wxT("drawmethod")] = __ViD[wxT("drawmethod")];
718 entity_constraints[wxT("nodrawmethod")] = __ViD[wxT("EMPTY")];
719 entity_constraints[wxT("bouncefactor")] = __ViD[wxT("intR")];
721 entity_constraints[wxT("mponly")] = __ViD[wxT("boolR")];
722 entity_constraints[wxT("hponly")] = __ViD[wxT("boolR")];
723 entity_constraints[wxT("energycost")] = __ViD[wxT("intR")];
724 entity_constraints[wxT("throwframewait")] = __ViD[wxT("UintR")];
726 entity_constraints[wxT("animationscript")] = __ViD[wxT("pathR")];
727 entity_constraints[wxT("takedamagescript")] = __ViD[wxT("pathR")];
728 entity_constraints[wxT("script")] = __ViD[wxT("pathR")];
729 entity_constraints[wxT("ondeathscript")] = __ViD[wxT("pathR")];
730 entity_constraints[wxT("didhitscript")] = __ViD[wxT("pathR")];
731 entity_constraints[wxT("didblockscript")] = __ViD[wxT("pathR")];
732 entity_constraints[wxT("@cmd")] = __ViD[wxT("noCstt")];
733 entity_constraints[wxT("@script")] = __ViD[wxT("noCstt")];
734 entity_constraints[wxT("@end_script")] = __ViD[wxT("noCstt")];
735 entity_constraints[wxT("fastattack")] = __ViD[wxT("boolR")];