(svn r544) -newgrf: codechange for better handling (pasky and octo__)
authorcelestar
Fri, 12 Nov 2004 15:15:56 +0000
changeset 356 e3721e481b38
parent 355 19a08ced3274
child 357 912b71f33867
(svn r544) -newgrf: codechange for better handling (pasky and octo__)
grfspecial.c
--- a/grfspecial.c	Thu Nov 11 23:23:42 2004 +0000
+++ b/grfspecial.c	Fri Nov 12 15:15:56 2004 +0000
@@ -9,6 +9,8 @@
 
 /* TTDPatch extended GRF format codec
  * (c) Petr Baudis 2004 (GPL'd)
+ * Changes by Florian octo Forster are (c) by the OpenTTD development team.
+ *
  * Contains portions of documentation by TTDPatch team.
  * Thanks especially to Josef Drexler for the documentation as well as a lot
  * of help at #tycoon. Also thanks to Michael Blunck for is GRF files which
@@ -419,6 +421,7 @@
 
 #undef shift_buf
 
+/* Action 0x00 */
 static void VehicleChangeInfo(byte *buf, int len)
 {
 	byte *bufend = buf + len;
@@ -512,7 +515,7 @@
 				}
 				break;
 			}
-			case 0x07: {
+			case 0x07: { /* TODO */
 				/* Loading speed */
 				/* Hyronymus explained me what does
 				 * this mean and insists on having a
@@ -528,7 +531,7 @@
 			{
 				if (handler[feature](engine, numinfo, prop, &buf, bufend - buf)) {
 ignoring:
-					grfmsg(GMS_WARN, "VehicleChangeInfo: Ignoring property %x.", prop);
+					grfmsg(GMS_NOTICE, "VehicleChangeInfo: Ignoring property %x (not implemented).", prop);
 				}
 				break;
 			}
@@ -558,6 +561,7 @@
 static int _spritesset_count;
 static struct SpriteSuperSet *_spritesset;
 
+/* Action 0x01 */
 static void SpriteNewSet(byte *buf, int len)
 {
 	/* <01> <feature> <num-sets> <num-ent>
@@ -584,12 +588,13 @@
 		}
 
 		_spriteset_start = _cur_spriteid + 1;
+		_spriteset_feature = feature;
 		_spriteset_numsets = buf[2];
 		_spriteset_numents = buf[3];
-		_spriteset_feature = feature;
 	}
 }
 
+/* Action 0x02 */
 static void SpriteNewSuperset(byte *buf, int len)
 {
 	byte *bufend = buf + len;
@@ -699,10 +704,13 @@
 	}
 }
 
+/* Action 0x03 */
 static void VehicleMapSpriteSuperset(byte *buf, int len)
 {
 	byte *bufend = buf + len;
 	/* <03> <feature> <n-id> <ids>... <num-cid> [<cargo-type> <cid>]... <def-cid>
+	 * id-list	:= [<id>] [id-list]
+	 * cargo-list	:= <cargo-type> <cid> [cargo-list]
 	 *
 	 * B feature       see action 0
 	 * B n-id          bits 0-6: how many IDs this definition applies to
@@ -797,6 +805,7 @@
 	}
 }
 
+/* Action 0x04 */
 static void VehicleNewName(byte *buf, int len)
 {
 	/* <04> <veh-type> <language-id> <num-veh> <offset> <data...>
@@ -840,6 +849,7 @@
 	}
 }
 
+/* Action 0x05 */
 static void GraphicsNew(byte *buf, int len)
 {
 	/* <05> <graphics-type> <num-sprites> <other data...>
@@ -848,8 +858,21 @@
 	 * B num-sprites   How many sprites are in this set?
 	 * V other data    Graphics type specific data.  Currently unused. */
 	/* TODO */
+
+	uint8 type;
+	uint8 num;
+
+	if (len != 2)
+		return;
+
+	type = buf[0];
+	num = buf[1];
+
+	grfmsg(GMS_NOTICE, "GraphicsNew: Custom graphics (type %x) sprite block of length %d (unimplemented, ignoring).\n",
+	       type, num);
 }
 
+/* Action 0x06 */
 static void CfgApply(byte *buf, int len)
 {
 	/* <06> <param-num> <param-size> <offset> ... <FF>
@@ -863,8 +886,11 @@
 	 * B offset        Offset into data from beginning of next sprite
 	 *                 to place where parameter is to be stored. */
 	/* TODO */
+	grfmsg(GMS_NOTICE, "CfgApply: Ignoring (not implemented).\n");
 }
 
+/* Action 0x07 */
+/* Action 0x09 */
 static void SkipIf(byte *buf, int len)
 {
 	/* <07/09> <param-num> <param-size> <condition-type> <value> <num-sprites>
@@ -928,7 +954,11 @@
 		uint8 version = buf[1];
 		// this is de facto big endian - grf_load_dword() unsuitable
 		uint32 grfid = buf[2] << 24 | buf[3] << 16 | buf[4] << 8 | buf[5];
-		DEBUG(grf, 1) ("[%s] Loaded GRFv%d set %08lx - %s:\n%s\n", _cur_grffile, version, grfid, buf+6, buf+6+strlen(buf+6)+1);
+		char *name = buf + 6;
+		char *info = name + strlen(name) + 1;
+
+		DEBUG(grf, 1) ("[%s] Loaded GRFv%d set %08lx - %s:\n%s\n",
+		               _cur_grffile, version, grfid, name, info);
 	}
 }
 
@@ -988,6 +1018,7 @@
 	 * V ignored       Anything following the 0C is ignored */
 }
 
+/* Action 0x0D */
 static void ParamSet(byte *buf, int len)
 {
 	/* <0D> <target> <operation> <source1> <source2> [<data>]
@@ -1054,6 +1085,8 @@
 	byte *buf = malloc(num);
 	int i;
 
+	if (buf == NULL) error("DecodeSpecialSprite: Could not allocate memory");
+
 	_cur_grffile = filename;
 	_cur_spriteid = spriteid;