mirror of https://github.com/OpenTTD/OpenTTD
(svn r23136) -Change: [NewGRF v8] Deprecate old-style callback results 0xFF??.
parent
7a3e362763
commit
e08a227b53
|
@ -4240,7 +4240,7 @@ static const SpriteGroup *GetGroupFromGroupID(byte setid, byte type, uint16 grou
|
||||||
{
|
{
|
||||||
if (HasBit(groupid, 15)) {
|
if (HasBit(groupid, 15)) {
|
||||||
assert(CallbackResultSpriteGroup::CanAllocateItem());
|
assert(CallbackResultSpriteGroup::CanAllocateItem());
|
||||||
return new CallbackResultSpriteGroup(groupid);
|
return new CallbackResultSpriteGroup(groupid, _cur.grffile->grf_version >= 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (groupid > MAX_SPRITEGROUP || _cur.spritegroups[groupid] == NULL) {
|
if (groupid > MAX_SPRITEGROUP || _cur.spritegroups[groupid] == NULL) {
|
||||||
|
@ -4263,7 +4263,7 @@ static const SpriteGroup *CreateGroupFromGroupID(byte feature, byte setid, byte
|
||||||
{
|
{
|
||||||
if (HasBit(spriteid, 15)) {
|
if (HasBit(spriteid, 15)) {
|
||||||
assert(CallbackResultSpriteGroup::CanAllocateItem());
|
assert(CallbackResultSpriteGroup::CanAllocateItem());
|
||||||
return new CallbackResultSpriteGroup(spriteid);
|
return new CallbackResultSpriteGroup(spriteid, _cur.grffile->grf_version >= 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_cur.IsValidSpriteSet(feature, spriteid)) {
|
if (!_cur.IsValidSpriteSet(feature, spriteid)) {
|
||||||
|
|
|
@ -175,7 +175,7 @@ const SpriteGroup *DeterministicSpriteGroup::Resolve(ResolverObject *object) con
|
||||||
if (this->num_ranges == 0) {
|
if (this->num_ranges == 0) {
|
||||||
/* nvar == 0 is a special case -- we turn our value into a callback result */
|
/* nvar == 0 is a special case -- we turn our value into a callback result */
|
||||||
if (value != CALLBACK_FAILED) value = GB(value, 0, 15);
|
if (value != CALLBACK_FAILED) value = GB(value, 0, 15);
|
||||||
static CallbackResultSpriteGroup nvarzero(0);
|
static CallbackResultSpriteGroup nvarzero(0, true);
|
||||||
nvarzero.result = value;
|
nvarzero.result = value;
|
||||||
return &nvarzero;
|
return &nvarzero;
|
||||||
}
|
}
|
||||||
|
|
|
@ -240,14 +240,15 @@ struct CallbackResultSpriteGroup : SpriteGroup {
|
||||||
/**
|
/**
|
||||||
* Creates a spritegroup representing a callback result
|
* Creates a spritegroup representing a callback result
|
||||||
* @param value The value that was used to represent this 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),
|
SpriteGroup(SGT_CALLBACK),
|
||||||
result(value)
|
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) */
|
* 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;
|
this->result &= ~0xFF00;
|
||||||
} else {
|
} else {
|
||||||
this->result &= ~0x8000;
|
this->result &= ~0x8000;
|
||||||
|
|
Loading…
Reference in New Issue