diff options
-rw-r--r-- | grfspecial.c | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/grfspecial.c b/grfspecial.c index 7991ab6a3..f76079e8f 100644 --- a/grfspecial.c +++ b/grfspecial.c @@ -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 @@ static int ShipVehicleChangeInfo(uint engine, int numinfo, int prop, byte **bufp #undef shift_buf +/* Action 0x00 */ static void VehicleChangeInfo(byte *buf, int len) { byte *bufend = buf + len; @@ -512,7 +515,7 @@ static void VehicleChangeInfo(byte *buf, int len) } break; } - case 0x07: { + case 0x07: { /* TODO */ /* Loading speed */ /* Hyronymus explained me what does * this mean and insists on having a @@ -528,7 +531,7 @@ static void VehicleChangeInfo(byte *buf, int len) { 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 _spriteset_feature; 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 @@ static void SpriteNewSet(byte *buf, int len) } _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 @@ static void SpriteNewSuperset(byte *buf, int len) } } +/* 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 @@ static void VehicleMapSpriteSuperset(byte *buf, int len) } } +/* Action 0x04 */ static void VehicleNewName(byte *buf, int len) { /* <04> <veh-type> <language-id> <num-veh> <offset> <data...> @@ -840,6 +849,7 @@ static void VehicleNewName(byte *buf, int len) } } +/* Action 0x05 */ static void GraphicsNew(byte *buf, int len) { /* <05> <graphics-type> <num-sprites> <other data...> @@ -848,8 +858,21 @@ static void GraphicsNew(byte *buf, int len) * 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 @@ static void CfgApply(byte *buf, int len) * 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 @@ static void GRFInfo(byte *buf, int len) 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 @@ static void GRFComment(byte *buf, int len) * 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 @@ void DecodeSpecialSprite(const char *filename, int num, int spriteid) byte *buf = malloc(num); int i; + if (buf == NULL) error("DecodeSpecialSprite: Could not allocate memory"); + _cur_grffile = filename; _cur_spriteid = spriteid; |