diff options
-rw-r--r-- | newgrf.c | 32 |
1 files changed, 12 insertions, 20 deletions
@@ -1940,11 +1940,15 @@ static uint32 GetParamVal(byte param, uint32 *cond_val) case 0x84: /* .grf loading stage, 0=initialization, 1=activation */ return _cur_stage; - case 0x85: { /* TTDPatch flags, only for bit tests */ - uint32 param_val = _ttdpatch_flags[*cond_val / 0x20]; - *cond_val %= 0x20; - return param_val; - } + case 0x85: /* TTDPatch flags, only for bit tests */ + if (cond_val == NULL) { + /* Supported in Action 0x07 and 0x09, not 0x0D */ + return 0; + } else { + uint32 param_val = _ttdpatch_flags[*cond_val / 0x20]; + *cond_val %= 0x20; + return param_val; + } case 0x86: /* road traffic side, bit 4 clear=left, set=right */ return _opt.road_side << 4; @@ -1980,7 +1984,6 @@ static uint32 GetParamVal(byte param, uint32 *cond_val) grfmsg(GMS_WARN, "Unsupported in-game variable 0x%02X.", param); return -1; } - } /* Action 0x07 */ @@ -2304,7 +2307,7 @@ static void ParamSet(byte *buf, int len) if (GB(data, 0, 8) == 0xFF) { if (data == 0x0000FFFF) { /* Patch variables */ - grfmsg(GMS_WARN, "ParamSet: Reading Patch variables unsupport."); + grfmsg(GMS_WARN, "ParamSet: Reading Patch variables unsupported."); return; } else { /* GRF Resource Management */ @@ -2326,19 +2329,8 @@ static void ParamSet(byte *buf, int len) * variables available in action 7, or they can be FF to use the value * of <data>. If referring to parameters that are undefined, a value * of 0 is used instead. */ - if (src1 == 0xFF) { - src1 = data; - } else { - uint32 temp; - src1 = GetParamVal(src1, &temp); - } - - if (src2 == 0xFF) { - src2 = data; - } else { - uint32 temp; - src2 = GetParamVal(src2, &temp); - } + src1 = (src1 == 0xFF) ? data : GetParamVal(src1, NULL); + src2 = (src2 == 0xFF) ? data : GetParamVal(src2, NULL); } /* TODO: You can access the parameters of another GRF file by using |