summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-12-04 16:57:35 +0000
committerrubidium <rubidium@openttd.org>2009-12-04 16:57:35 +0000
commitc1c9a3e8353393fa37cb8c7cf1050bb2e5822c43 (patch)
tree9ba59b996f4b0201a057c2a948a7692f1fbba618
parentc559ec63088e2d043eb0cf2e17dd23968aaa40b3 (diff)
downloadopenttd-c1c9a3e8353393fa37cb8c7cf1050bb2e5822c43.tar.xz
(svn r18398) -Fix [FS#3343]: the tree 'which one to draw' hash wasn't anywhere near random and thus showed a very visible repeated pattern when only one tree type was used
-rw-r--r--src/tree_cmd.cpp14
1 files changed, 3 insertions, 11 deletions
diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp
index d0dec00e2..8802acb46 100644
--- a/src/tree_cmd.cpp
+++ b/src/tree_cmd.cpp
@@ -457,16 +457,8 @@ static void DrawTile_Trees(TileInfo *ti)
/* Do not draw trees when the invisible trees setting is set */
if (IsInvisibilitySet(TO_TREES)) return;
- uint16 tmp = ti->x;
-
- tmp = ROR(tmp, 2);
- tmp -= ti->y;
- tmp = ROR(tmp, 3);
- tmp -= ti->x;
- tmp = ROR(tmp, 1);
- tmp += ti->y;
-
- uint index = GB(tmp, 6, 2) + (GetTreeType(ti->tile) << 2);
+ uint tmp = CountBits(ti->tile + ti->x + ti->y);
+ uint index = GB(tmp, 0, 2) + (GetTreeType(ti->tile) << 2);
/* different tree styles above one of the grounds */
if (GetTreeGround(ti->tile) == TREE_GROUND_SNOW_DESERT &&
@@ -478,7 +470,7 @@ static void DrawTile_Trees(TileInfo *ti)
assert(index < lengthof(_tree_layout_sprite));
const PalSpriteID *s = _tree_layout_sprite[index];
- const TreePos *d = _tree_layout_xy[GB(tmp, 4, 2)];
+ const TreePos *d = _tree_layout_xy[GB(tmp, 2, 2)];
/* combine trees into one sprite object */
StartSpriteCombine();