diff options
author | peter1138 <peter1138@openttd.org> | 2008-01-21 20:41:04 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2008-01-21 20:41:04 +0000 |
commit | ca1b3e7b4eb236b5cb36bfe2f83f2e0b0b6e24fa (patch) | |
tree | 060191c8dc0f46b1574782e94ce94e62a7aff3ae | |
parent | 0a6425926b4174a76046772aa7456182c3e49b33 (diff) | |
download | openttd-ca1b3e7b4eb236b5cb36bfe2f83f2e0b0b6e24fa.tar.xz |
(svn r11938) -Codechange: support loading of canal/river properties (though still ignored)
-rw-r--r-- | src/newgrf.cpp | 40 | ||||
-rw-r--r-- | src/newgrf_canal.cpp | 4 | ||||
-rw-r--r-- | src/newgrf_canal.h | 9 |
3 files changed, 46 insertions, 7 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp index af6570d98..d4514d38d 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1134,6 +1134,38 @@ static bool StationChangeInfo(uint stid, int numinfo, int prop, byte **bufp, int return ret; } +static bool CanalChangeInfo(uint id, int numinfo, int prop, byte **bufp, int len) +{ + byte *buf = *bufp; + bool ret = false; + + if (id + numinfo > CF_END) { + grfmsg(1, "CanalChangeInfo: Canal feature %u is invalid, max %u, ignoreing", id + numinfo, CF_END); + return false; + } + + for (int i = 0; i < numinfo; i++) { + WaterFeature *wf = &_water_feature[id + i]; + + switch (prop) { + case 0x08: + wf->callbackmask = grf_load_byte(&buf); + break; + + case 0x09: + wf->flags = grf_load_byte(&buf); + break; + + default: + ret = true; + break; + } + } + + *bufp = buf; + return ret; +} + static bool BridgeChangeInfo(uint brid, int numinfo, int prop, byte **bufp, int len) { byte *buf = *bufp; @@ -2128,7 +2160,7 @@ static void FeatureChangeInfo(byte *buf, int len) /* GSF_SHIP */ ShipVehicleChangeInfo, /* GSF_AIRCRAFT */ AircraftVehicleChangeInfo, /* GSF_STATION */ StationChangeInfo, - /* GSF_CANAL */ NULL, + /* GSF_CANAL */ CanalChangeInfo, /* GSF_BRIDGE */ BridgeChangeInfo, /* GSF_TOWNHOUSE */ TownHouseChangeInfo, /* GSF_GLOBALVAR */ NULL, /* Global variables are handled during reservation */ @@ -2876,7 +2908,7 @@ static void CanalMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount) continue; } - _canal_sg[cf] = _cur_grffile->spritegroups[groupid]; + _water_feature[cf].group = _cur_grffile->spritegroups[groupid]; } } @@ -5037,8 +5069,8 @@ static void ResetNewGRFData() ResetStationClasses(); ResetCustomStations(); - /* Reset canal sprite groups */ - memset(_canal_sg, 0, sizeof(_canal_sg)); + /* Reset canal sprite groups and flags */ + memset(_water_feature, 0, sizeof(_water_feature)); /* Reset the snowline table. */ ClearSnowLine(); diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp index a2a89d13b..1a276ea7d 100644 --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -15,7 +15,7 @@ /** Table of canal 'feature' sprite groups */ -const SpriteGroup *_canal_sg[CF_END]; +WaterFeature _water_feature[CF_END]; /* Random bits and triggers are not supported for canals, so the following @@ -94,7 +94,7 @@ SpriteID GetCanalSprite(CanalFeature feature, TileIndex tile) NewCanalResolver(&object, tile); - group = Resolve(_canal_sg[feature], &object); + group = Resolve(_water_feature[feature].group, &object); if (group == NULL || group->type != SGT_RESULT) return 0; return group->g.result.sprite; diff --git a/src/newgrf_canal.h b/src/newgrf_canal.h index 1972c2c86..03e7cdff8 100644 --- a/src/newgrf_canal.h +++ b/src/newgrf_canal.h @@ -17,8 +17,15 @@ enum CanalFeature { }; +struct WaterFeature { + const SpriteGroup *group; + uint8 callbackmask; + uint8 flags; +}; + + /** Table of canal 'feature' sprite groups */ -extern const SpriteGroup *_canal_sg[CF_END]; +extern WaterFeature _water_feature[CF_END]; /** Lookup the base sprite to use for a canal. |