(svn r3449) - NewGRF Fix: When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf)
authorpeter1138
Fri, 27 Jan 2006 07:13:58 +0000
changeset 2895 8e15f64c4934
parent 2894 e768e08f7989
child 2896 5db6533e9977
(svn r3449) - NewGRF Fix: When changing the sprite ID of a vehicle, if it is not FD (custom graphics), the value needs to changed from a 16bit array offset to an array index. (fixes tropicstw.grf)
newgrf.c
--- a/newgrf.c	Thu Jan 26 22:09:25 2006 +0000
+++ b/newgrf.c	Fri Jan 27 07:13:58 2006 +0000
@@ -272,6 +272,11 @@
 			FOR_EACH_OBJECT {
 				uint8 spriteid = grf_load_byte(&buf);
 
+				/* TTD sprite IDs point to a location in a 16bit array, but we use it
+				 * as an array index, so we need it to be half the original value. */
+				if (spriteid < 0xFD)
+					spriteid >>= 1;
+
 				rvi[i].image_index = spriteid;
 			}
 		} break;
@@ -481,6 +486,9 @@
 				if (spriteid == 0xFF)
 					spriteid = 0xFD; // cars have different custom id in the GRF file
 
+				if (spriteid < 0xFD)
+					spriteid >>= 1;
+
 				rvi[i].image_index = spriteid;
 			}
 		} break;
@@ -582,6 +590,9 @@
 				if (spriteid == 0xFF)
 					spriteid = 0xFD; // ships have different custom id in the GRF file
 
+				if (spriteid < 0xFD)
+					spriteid >>= 1;
+
 				svi[i].image_index = spriteid;
 			}
 		}	break;
@@ -699,6 +710,9 @@
 				if (spriteid == 0xFF)
 					spriteid = 0xFD; // ships have different custom id in the GRF file
 
+				if (spriteid < 0xFD)
+					spriteid >>= 1;
+
 				avi[i].image_index = spriteid;
 			}
 		}	break;