(svn r11127) -Fix: truncate the result of 8 bits callbacks.
--- a/src/newgrf_callbacks.h Tue Sep 18 18:55:25 2007 +0000
+++ b/src/newgrf_callbacks.h Tue Sep 18 20:41:59 2007 +0000
@@ -13,6 +13,9 @@
* bit is set in the callback flags/trigger for a vehicle, house,
* industry, etc.
* Names are formatted as CBID_<CLASS>_<CALLBACK>
+ *
+ * @note Do not forget to add 15 bits callbacks to the switch in
+ * newgrf_spritegroup.cpp (search for "15 bits callback").
*/
enum CallbackID {
/** Set when using the callback resolve system, but not to resolve a callback. */
--- a/src/newgrf_spritegroup.cpp Tue Sep 18 18:55:25 2007 +0000
+++ b/src/newgrf_spritegroup.cpp Tue Sep 18 20:41:59 2007 +0000
@@ -192,7 +192,25 @@
if (group->g.determ.num_ranges == 0) {
/* nvar == 0 is a special case -- we turn our value into a callback result */
nvarzero.type = SGT_CALLBACK;
- nvarzero.g.callback.result = GB(value, 0, 15);
+ switch (object->callback) {
+ /* All these functions are 15 bit callbacks */
+ case CBID_VEHICLE_REFIT_CAPACITY:
+ case CBID_BUILDING_COLOUR:
+ case CBID_HOUSE_CARGO_ACCEPTANCE:
+ case CBID_INDUSTRY_LOCATION:
+ case CBID_INDTILE_CARGO_ACCEPTANCE:
+ case CBID_VEHICLE_COLOUR_MAPPING:
+ case CBID_HOUSE_PRODUCE_CARGO:
+ case CBID_VEHICLE_SOUND_EFFECT:
+ case CBID_SOUNDS_AMBIENT_EFFECT:
+ nvarzero.g.callback.result = GB(value, 0, 15);
+ break;
+
+ /* The rest is a 8 bit callback, which should be truncated properly */
+ default:
+ nvarzero.g.callback.result = GB(value, 0, 8);
+ break;
+ }
return &nvarzero;
}