Changeset - r3808:fd2511eca5c9
[Not reviewed]
master
0 1 0
peter1138 - 18 years ago 2006-05-10 21:55:44
peter1138@openttd.org
(svn r4818) - NewGRF: add support for reading another GRF file's parameters, and warn if GRF Resource Management is tried.
1 file changed with 38 insertions and 16 deletions:
newgrf.c
38
16
0 comments (0 inline, 0 general)
newgrf.c
Show inline comments
 
@@ -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);
 
	}
 

	
 
	if (src2 == 0xFF) {
 
		src2 = data;
 
	} else {
 
		uint32 temp;
 
		src2 = GetParamVal(src2, &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);
 
		}
 
	}
 

	
 
	/* TODO: You can access the parameters of another GRF file by using
0 comments (0 inline, 0 general)