changeset 8577:3d02afc95b6f draft

(svn r12158) -Codechange: merge all the sprite recolouring mapping under a single function -Fix: Handle the bridge recolouring mapping as the other features. Although not specified by the specs, it seems to be implicit.
author belugas <belugas@openttd.org>
date Sat, 16 Feb 2008 03:01:05 +0000
parents b16535117c57
children 5fd73509ab21
files src/newgrf.cpp
diffstat 1 files changed, 31 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -289,6 +289,26 @@
 	return colour;
 }
 
+/** Map the colour modifiers of TTDPatch to those that Open is using.
+ * @param grf_sprite pointer to the structure been modified
+ */
+static void MapSpriteMappingRecolour(PalSpriteID *grf_sprite)
+{
+	if (HasBit(grf_sprite->pal, 14)) {
+		ClrBit(grf_sprite->pal, 14);
+		SetBit(grf_sprite->sprite, SPRITE_MODIFIER_OPAQUE);
+	}
+
+	if (HasBit(grf_sprite->sprite, 14)) {
+		ClrBit(grf_sprite->sprite, 14);
+		SetBit(grf_sprite->sprite, PALETTE_MODIFIER_TRANSPARENT);
+	}
+
+	if (HasBit(grf_sprite->sprite, 15)) {
+		ClrBit(grf_sprite->sprite, 15);
+		SetBit(grf_sprite->sprite, PALETTE_MODIFIER_COLOR);
+	}
+}
 
 typedef bool (*VCI_Handler)(uint engine, int numinfo, int prop, byte **buf, int len);
 
@@ -936,18 +956,8 @@
 						ClrBit(dts->ground.pal, 15);
 						SetBit(dts->ground.sprite, SPRITE_MODIFIER_USE_OFFSET);
 					}
-					if (HasBit(dts->ground.pal, 14)) {
-						ClrBit(dts->ground.pal, 14);
-						SetBit(dts->ground.sprite, SPRITE_MODIFIER_OPAQUE);
-					}
-					if (HasBit(dts->ground.sprite, 15)) {
-						ClrBit(dts->ground.sprite, 15);
-						SetBit(dts->ground.sprite, PALETTE_MODIFIER_COLOR);
-					}
-					if (HasBit(dts->ground.sprite, 14)) {
-						ClrBit(dts->ground.sprite, 14);
-						SetBit(dts->ground.sprite, PALETTE_MODIFIER_TRANSPARENT);
-					}
+
+					MapSpriteMappingRecolour(&dts->ground);
 
 					while (buf < *bufp + len) {
 						DrawTileSeqStruct *dtss;
@@ -971,19 +981,8 @@
 							ClrBit(dtss->image.pal, 15);
 							SetBit(dtss->image.sprite, SPRITE_MODIFIER_USE_OFFSET);
 						}
-						if (HasBit(dtss->image.pal, 14)) {
-							ClrBit(dtss->image.pal, 14);
-							SetBit(dtss->image.sprite, SPRITE_MODIFIER_OPAQUE);
-						}
-
-						if (HasBit(dtss->image.sprite, 15)) {
-							ClrBit(dtss->image.sprite, 15);
-							SetBit(dtss->image.sprite, PALETTE_MODIFIER_COLOR);
-						}
-						if (HasBit(dtss->image.sprite, 14)) {
-							ClrBit(dtss->image.sprite, 14);
-							SetBit(dtss->image.sprite, PALETTE_MODIFIER_TRANSPARENT);
-						}
+
+						MapSpriteMappingRecolour(&dtss->image);
 					}
 				}
 				break;
@@ -1207,15 +1206,10 @@
 						SpriteID image = grf_load_word(&buf);
 						SpriteID pal   = grf_load_word(&buf);
 
-						if (HasBit(pal, 15)) {
-							SetBit(image, PALETTE_MODIFIER_TRANSPARENT);
-						}
-
-						/* Clear old color modifer bit */
-						ClrBit(image, 15);
-
 						bridge->sprite_table[tableid][sprite].sprite = image;
 						bridge->sprite_table[tableid][sprite].pal    = pal;
+
+						MapSpriteMappingRecolour(&bridge->sprite_table[tableid][sprite]);
 					}
 				}
 			} break;
@@ -2654,19 +2648,10 @@
 					/* Groundsprite */
 					group->g.layout.dts->ground.sprite = grf_load_word(&buf);
 					group->g.layout.dts->ground.pal    = grf_load_word(&buf);
+
 					/* Remap transparent/colour modifier bits */
-					if (HasBit(group->g.layout.dts->ground.sprite, 14)) {
-						ClrBit(group->g.layout.dts->ground.sprite, 14);
-						SetBit(group->g.layout.dts->ground.sprite, PALETTE_MODIFIER_TRANSPARENT);
-					}
-					if (HasBit(group->g.layout.dts->ground.sprite, 15)) {
-						ClrBit(group->g.layout.dts->ground.sprite, 15);
-						SetBit(group->g.layout.dts->ground.sprite, PALETTE_MODIFIER_COLOR);
-					}
-					if (HasBit(group->g.layout.dts->ground.pal, 14)) {
-						ClrBit(group->g.layout.dts->ground.pal, 14);
-						SetBit(group->g.layout.dts->ground.sprite, SPRITE_MODIFIER_OPAQUE);
-					}
+					MapSpriteMappingRecolour(&group->g.layout.dts->ground);
+
 					if (HasBit(group->g.layout.dts->ground.pal, 15)) {
 						/* Bit 31 set means this is a custom sprite, so rewrite it to the
 						 * last spriteset defined. */
@@ -2685,18 +2670,8 @@
 						seq->delta_x = grf_load_byte(&buf);
 						seq->delta_y = grf_load_byte(&buf);
 
-						if (HasBit(seq->image.sprite, 14)) {
-							ClrBit(seq->image.sprite, 14);
-							SetBit(seq->image.sprite, PALETTE_MODIFIER_TRANSPARENT);
-						}
-						if (HasBit(seq->image.sprite, 15)) {
-							ClrBit(seq->image.sprite, 15);
-							SetBit(seq->image.sprite, PALETTE_MODIFIER_COLOR);
-						}
-						if (HasBit(seq->image.pal, 14)) {
-							ClrBit(seq->image.pal, 14);
-							SetBit(seq->image.sprite, SPRITE_MODIFIER_OPAQUE);
-						}
+						MapSpriteMappingRecolour(&seq->image);
+
 						if (HasBit(seq->image.pal, 15)) {
 							/* Bit 31 set means this is a custom sprite, so rewrite it to the
 							 * last spriteset defined. */