changeset 13869:7bef2d0abe63 draft

(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
author rubidium <rubidium@openttd.org>
date Fri, 04 Dec 2009 16:57:35 +0000
parents 1bf0fa7bf81b
children 1f84e7212840
files src/tree_cmd.cpp
diffstat 1 files changed, 3 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/tree_cmd.cpp
+++ b/src/tree_cmd.cpp
@@ -457,16 +457,8 @@
 	/* 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 @@
 	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();