mirror of https://github.com/OpenTTD/OpenTTD
(svn r7462) -Fix: when doing comparison in action 7/9, mask the param value so it has the 'same' size as the value it is compared to
parent
14363bfb51
commit
6bc56c61e3
12
newgrf.c
12
newgrf.c
|
@ -2370,23 +2370,19 @@ static void SkipIf(byte *buf, int len)
|
||||||
|
|
||||||
param_val = GetParamVal(param, &cond_val);
|
param_val = GetParamVal(param, &cond_val);
|
||||||
|
|
||||||
/* Apply parameter mask, only for GRF parameters. */
|
|
||||||
if (param < 0x80) param_val &= mask;
|
|
||||||
|
|
||||||
DEBUG(grf, 7) ("Test condtype %d, param 0x%08X, condval 0x%08X", condtype, param_val, cond_val);
|
DEBUG(grf, 7) ("Test condtype %d, param 0x%08X, condval 0x%08X", condtype, param_val, cond_val);
|
||||||
switch (condtype) {
|
switch (condtype) {
|
||||||
case 0: result = !!(param_val & (1 << cond_val));
|
case 0: result = !!(param_val & (1 << cond_val));
|
||||||
break;
|
break;
|
||||||
case 1: result = !(param_val & (1 << cond_val));
|
case 1: result = !(param_val & (1 << cond_val));
|
||||||
break;
|
break;
|
||||||
/* TODO: For the following, make it to work with paramsize>1. */
|
case 2: result = (param_val & mask) == cond_val;
|
||||||
case 2: result = (param_val == cond_val);
|
|
||||||
break;
|
break;
|
||||||
case 3: result = (param_val != cond_val);
|
case 3: result = (param_val & mask) != cond_val;
|
||||||
break;
|
break;
|
||||||
case 4: result = (param_val < cond_val);
|
case 4: result = (param_val & mask) < cond_val;
|
||||||
break;
|
break;
|
||||||
case 5: result = (param_val > cond_val);
|
case 5: result = (param_val & mask) > cond_val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Tests 6 to 10 are only for param 0x88, GRFID checks */
|
/* Tests 6 to 10 are only for param 0x88, GRFID checks */
|
||||||
|
|
Loading…
Reference in New Issue