(svn r17672) -Revert (r8081): 'last_value' and 'reseed' are shared between procedure and main chain.

-Fix (r8075): 'scope' and 'count' are not.
This commit is contained in:
frosch 2009-09-30 20:25:59 +00:00
parent 3863742c72
commit 2fa312aab9
2 changed files with 13 additions and 8 deletions

View File

@ -142,13 +142,16 @@ const SpriteGroup *DeterministicSpriteGroup::Resolve(ResolverObject *object) con
/* Try to get the variable. We shall assume it is available, unless told otherwise. */
bool available = true;
if (adjust->variable == 0x7E) {
ResolverObject subobject = *object;
const SpriteGroup *subgroup = SpriteGroup::Resolve(adjust->subroutine, &subobject);
const SpriteGroup *subgroup = SpriteGroup::Resolve(adjust->subroutine, object);
if (subgroup == NULL) {
value = CALLBACK_FAILED;
} else {
value = subgroup->GetCallbackResult();
}
/* Reset values to current scope.
* Note: 'last_value' and 'reseed' are shared between the main chain and the procedure */
object->scope = this->var_scope;
} else {
value = GetVariable(object, adjust->variable, adjust->parameter, &available);
}

View File

@ -291,14 +291,16 @@ struct ResolverObject {
uint32 callback_param2;
byte trigger;
byte count;
uint32 last_value;
uint32 reseed;
VarSpriteGroupScope scope;
BaseStorageArray *psa; ///< The persistent storage array of this resolved object.
uint32 last_value; ///< Result of most recent DeterministicSpriteGroup (including procedure calls)
uint32 reseed; ///< Collects bits to rerandomise while triggering triggers.
const GRFFile *grffile; ///< GRFFile the resolved SpriteGroup belongs to
VarSpriteGroupScope scope; ///< Scope of currently resolved DeterministicSpriteGroup resp. RandomizedSpriteGroup
byte count; ///< Additional scope for RandomizedSpriteGroup
BaseStorageArray *psa; ///< The persistent storage array of this resolved object.
const GRFFile *grffile; ///< GRFFile the resolved SpriteGroup belongs to
union {
struct {