changeset 18300:4161e822c9f8 draft

(svn r23136) -Change: [NewGRF v8] Deprecate old-style callback results 0xFF??.
author frosch <frosch@openttd.org>
date Tue, 08 Nov 2011 17:22:19 +0000
parents f5184bd12454
children 51ada4c1086e
files src/newgrf.cpp src/newgrf_spritegroup.cpp src/newgrf_spritegroup.h
diffstat 3 files changed, 7 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -4240,7 +4240,7 @@
 {
 	if (HasBit(groupid, 15)) {
 		assert(CallbackResultSpriteGroup::CanAllocateItem());
-		return new CallbackResultSpriteGroup(groupid);
+		return new CallbackResultSpriteGroup(groupid, _cur.grffile->grf_version >= 8);
 	}
 
 	if (groupid > MAX_SPRITEGROUP || _cur.spritegroups[groupid] == NULL) {
@@ -4263,7 +4263,7 @@
 {
 	if (HasBit(spriteid, 15)) {
 		assert(CallbackResultSpriteGroup::CanAllocateItem());
-		return new CallbackResultSpriteGroup(spriteid);
+		return new CallbackResultSpriteGroup(spriteid, _cur.grffile->grf_version >= 8);
 	}
 
 	if (!_cur.IsValidSpriteSet(feature, spriteid)) {
--- a/src/newgrf_spritegroup.cpp
+++ b/src/newgrf_spritegroup.cpp
@@ -175,7 +175,7 @@
 	if (this->num_ranges == 0) {
 		/* nvar == 0 is a special case -- we turn our value into a callback result */
 		if (value != CALLBACK_FAILED) value = GB(value, 0, 15);
-		static CallbackResultSpriteGroup nvarzero(0);
+		static CallbackResultSpriteGroup nvarzero(0, true);
 		nvarzero.result = value;
 		return &nvarzero;
 	}
--- a/src/newgrf_spritegroup.h
+++ b/src/newgrf_spritegroup.h
@@ -240,14 +240,15 @@
 	/**
 	 * Creates a spritegroup representing a callback result
 	 * @param value The value that was used to represent this callback result
+	 * @param grf_version8 True, if we are dealing with a new NewGRF which uses GRF version >= 8.
 	 */
-	CallbackResultSpriteGroup(uint16 value) :
+	CallbackResultSpriteGroup(uint16 value, bool grf_version8) :
 		SpriteGroup(SGT_CALLBACK),
 		result(value)
 	{
-		/* Old style callback results have the highest byte 0xFF so signify it is a callback result
+		/* Old style callback results (only valid for version < 8) have the highest byte 0xFF so signify it is a callback result.
 		 * New style ones only have the highest bit set (allows 15-bit results, instead of just 8) */
-		if ((this->result >> 8) == 0xFF) {
+		if (!grf_version8 && (this->result >> 8) == 0xFF) {
 			this->result &= ~0xFF00;
 		} else {
 			this->result &= ~0x8000;