From 9ca929c812fe06cab248feb00fc830e00363ea95 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 20 Jan 2008 18:30:53 +0000 Subject: [PATCH] (svn r11934) -Codechange: add persistent random data for river and canal tiles. --- docs/landscape.html | 8 +++++++- src/newgrf_canal.cpp | 6 +++++- src/openttd.cpp | 2 +- src/water_cmd.cpp | 10 +++++----- src/water_map.h | 13 +++++++++---- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/docs/landscape.html b/docs/landscape.html index cd6a0cf12d..ec208b944b 100644 --- a/docs/landscape.html +++ b/docs/landscape.html @@ -864,6 +864,11 @@ coast or riverbank + + 02  + river + + 10..1B  canal locks @@ -945,7 +950,8 @@ -
  • m4: Owner of the water
  • +
  • m4: Owner of the water when ship depot
  • +
  • m4: Random data for canal or river tiles
  • m6 bits 7..6 : Possibility of a bridge above, in the direction specified
  • m6 bits 1..0 : Tropic zone definition
  • diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp index f7cc633d7e..a2a89d13b8 100644 --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -11,6 +11,7 @@ #include "newgrf_spritegroup.h" #include "newgrf_canal.h" #include "tile_map.h" +#include "water_map.h" /** Table of canal 'feature' sprite groups */ @@ -21,7 +22,7 @@ const SpriteGroup *_canal_sg[CF_END]; * three functions are stubs. */ static uint32 CanalGetRandomBits(const ResolverObject *object) { - return 0; + return GetWaterTileRandomBits(object->u.canal.tile); } @@ -47,6 +48,9 @@ static uint32 CanalGetVariable(const ResolverObject *object, byte variable, byte case 0x81: return GetTerrainType(tile); + + case 0x83: + return GetWaterTileRandomBits(tile); } DEBUG(grf, 1, "Unhandled canal property 0x%02X", variable); diff --git a/src/openttd.cpp b/src/openttd.cpp index cff06481b5..19436ea1e0 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1710,7 +1710,7 @@ bool AfterLoadGame() if (GB(_m[t].m5, 3, 2) == 0) { MakeClear(t, CLEAR_GRASS, 3); } else { - MakeCanal(t, (GetTileOwner(t) == OWNER_WATER) ? OWNER_NONE : GetTileOwner(t)); + MakeCanal(t, (GetTileOwner(t) == OWNER_WATER) ? OWNER_NONE : GetTileOwner(t), Random()); } } SetBridgeMiddle(t, axis); diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index ac90ef20d0..eeed4a6968 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -56,7 +56,7 @@ void MakeWaterOrCanalDependingOnSurroundings(TileIndex t, Owner o) /* Non-sealevel -> canal */ if (TileHeight(t) != 0) { - MakeCanal(t, o); + MakeCanal(t, o, Random()); return; } @@ -71,7 +71,7 @@ void MakeWaterOrCanalDependingOnSurroundings(TileIndex t, Owner o) } } if (has_canal || !has_water) { - MakeCanal(t, o); + MakeCanal(t, o, Random()); } else { MakeWater(t); } @@ -128,7 +128,7 @@ void MakeWaterOrCanalDependingOnOwner(TileIndex tile, Owner o) if (o == OWNER_WATER) { MakeWater(tile); } else { - MakeCanal(tile, o); + MakeCanal(tile, o, Random()); } } @@ -305,9 +305,9 @@ CommandCost CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) if (TileHeight(tile) == 0 && p2 == 1) { MakeWater(tile); } else if (p2 == 2) { - MakeRiver(tile); + MakeRiver(tile, Random()); } else { - MakeCanal(tile, _current_player); + MakeCanal(tile, _current_player, Random()); } MarkTileDirtyByTile(tile); MarkTilesAroundDirty(tile); diff --git a/src/water_map.h b/src/water_map.h index 98177631be..93ec67a9dc 100644 --- a/src/water_map.h +++ b/src/water_map.h @@ -108,6 +108,11 @@ static inline byte GetSection(TileIndex t) return GB(_m[t].m5, 0, 4); } +static inline byte GetWaterTileRandomBits(TileIndex t) +{ + return _m[t].m4; +} + static inline void MakeWater(TileIndex t) { @@ -129,24 +134,24 @@ static inline void MakeShore(TileIndex t) _m[t].m5 = 1; } -static inline void MakeRiver(TileIndex t) +static inline void MakeRiver(TileIndex t, uint8 random_bits) { SetTileType(t, MP_WATER); SetTileOwner(t, OWNER_WATER); _m[t].m2 = 0; _m[t].m3 = 0; - _m[t].m4 = 0; + _m[t].m4 = random_bits; _m[t].m5 = 2; } -static inline void MakeCanal(TileIndex t, Owner o) +static inline void MakeCanal(TileIndex t, Owner o, uint8 random_bits) { assert(o != OWNER_WATER); SetTileType(t, MP_WATER); SetTileOwner(t, o); _m[t].m2 = 0; _m[t].m3 = 0; - _m[t].m4 = 0; + _m[t].m4 = random_bits; _m[t].m5 = 0; }