From 40a04816a42a0ec9389c4bd2ede5fcd908979f96 Mon Sep 17 00:00:00 2001 From: tron Date: Mon, 22 Nov 2004 10:09:37 +0000 Subject: [PATCH] (svn r756) Demystify and explain some piece of code regarding which house sprite to draw --- town_cmd.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/town_cmd.c b/town_cmd.c index 7bd9b63015..7174d454cd 100644 --- a/town_cmd.c +++ b/town_cmd.c @@ -52,12 +52,16 @@ static void DrawTile_Town(TileInfo *ti) /* Retrieve pointer to the draw town tile struct */ { - uint hash, t; - hash = ti->x >> 4; - hash ^= hash>>2; - hash ^= (t=(ti->y >> 4)); - hash -= t>>2; - dcts = &_town_draw_tile_data[((_map2[ti->tile]<<4)|(_map3_lo[ti->tile]>>6)|((hash&3)<<2))]; + /* this "randomizes" on the (up to) 4 variants of a building */ + byte gfx = _map2[ti->tile]; + byte stage = _map3_lo[ti->tile] >> 6; + uint variant; + variant = ti->x >> 4; + variant ^= ti->x >> 6; + variant ^= ti->y >> 4; + variant -= ti->y >> 6; + variant &= 3; + dcts = &_town_draw_tile_data[gfx << 4 | variant << 2 | stage]; } z = ti->z;