# HG changeset patch # User rubidium # Date 1190148119 0 # Node ID f885804de706312442f24ff26d8bede4ae49e41d # Parent 0d6d44f403c5a92a19fafd4ccdd83fa09e04dc56 (svn r11127) -Fix: truncate the result of 8 bits callbacks. diff -r 0d6d44f403c5 -r f885804de706 src/newgrf_callbacks.h --- 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__ + * + * @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. */ diff -r 0d6d44f403c5 -r f885804de706 src/newgrf_spritegroup.cpp --- 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; }