diff options
author | peter1138 <peter1138@openttd.org> | 2006-05-10 21:55:44 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2006-05-10 21:55:44 +0000 |
commit | 90be3fadf71877f26a1c79da3ba43cd544efabb9 (patch) | |
tree | d690aa3cd890bb86ad7abb4ca73e433b95a5e38a | |
parent | bd28390b2e6368418968f259889b28871e3191b7 (diff) | |
download | openttd-90be3fadf71877f26a1c79da3ba43cd544efabb9.tar.xz |
(svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
-rw-r--r-- | newgrf.c | 52 |
1 files changed, 37 insertions, 15 deletions
@@ -2300,23 +2300,45 @@ static void ParamSet(byte *buf, int len) oper &= 0x7F; } - /* The source1 and source2 operands refer to the grf parameter number - * like in action 6 and 7. In addition, they can refer to the special - * 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; + if (src2 == 0xFE) { + if (GB(data, 0, 8) == 0xFF) { + if (data == 0x0000FFFF) { + /* Patch variables */ + grfmsg(GMS_WARN, "ParamSet: Reading Patch variables unsupport."); + return; + } else { + /* GRF Resource Management */ + grfmsg(GMS_WARN, "ParamSet: GRF Resource Management unsupported."); + return; + } + } else { + /* Read another GRF File's parameter */ + const GRFFile *file = GetFileByGRFID(data); + if (file == NULL || src1 >= file->param_end) { + src1 = 0; + } else { + src1 = file->param[src1]; + } + } } else { - uint32 temp; - src1 = GetParamVal(src1, &temp); - } + /* The source1 and source2 operands refer to the grf parameter number + * like in action 6 and 7. In addition, they can refer to the special + * 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); + if (src2 == 0xFF) { + src2 = data; + } else { + uint32 temp; + src2 = GetParamVal(src2, &temp); + } } /* TODO: You can access the parameters of another GRF file by using |