mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-03 17:33:05 +00:00
SCUMM: Move common code from ScummEngine::fetchScript* to new method.
The new method is called refreshScriptPointer(). Also renamed getScriptEntryPoint() to resetScriptPointer() in an attempt to highlight both the similarity and difference between the two. svn-id: r53571
This commit is contained in:
parent
5d08ad157d
commit
d69a63c145
@ -339,7 +339,7 @@ void ScummEngine::runScriptNested(int script) {
|
||||
|
||||
_currentScript = script;
|
||||
getScriptBaseAddress();
|
||||
getScriptEntryPoint();
|
||||
resetScriptPointer();
|
||||
executeScript();
|
||||
|
||||
if (vm.numNestedScripts != 0)
|
||||
@ -354,7 +354,7 @@ void ScummEngine::runScriptNested(int script) {
|
||||
slot->status != ssDead && slot->freezeCount == 0) {
|
||||
_currentScript = nest->slot;
|
||||
getScriptBaseAddress();
|
||||
getScriptEntryPoint();
|
||||
resetScriptPointer();
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -441,12 +441,27 @@ void ScummEngine::getScriptBaseAddress() {
|
||||
}
|
||||
|
||||
|
||||
void ScummEngine::getScriptEntryPoint() {
|
||||
void ScummEngine::resetScriptPointer() {
|
||||
if (_currentScript == 0xFF)
|
||||
return;
|
||||
_scriptPointer = _scriptOrgPointer + vm.slot[_currentScript].offs;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks whether the resource that contains the active script
|
||||
* moved, and if so, updates the script pointer accordingly.
|
||||
*
|
||||
* The script resource may have moved because it might have been garbage
|
||||
* collected by ResourceManager::expireResources.
|
||||
*/
|
||||
void ScummEngine::refreshScriptPointer() {
|
||||
if (*_lastCodePtr + sizeof(MemBlkHeader) != _scriptOrgPointer) {
|
||||
long oldoffs = _scriptPointer - _scriptOrgPointer;
|
||||
getScriptBaseAddress();
|
||||
_scriptPointer = _scriptOrgPointer + oldoffs;
|
||||
}
|
||||
}
|
||||
|
||||
/** Execute a script - Read opcode, and execute it from the table */
|
||||
void ScummEngine::executeScript() {
|
||||
int c;
|
||||
@ -492,20 +507,12 @@ const char *ScummEngine::getOpcodeDesc(byte i) {
|
||||
}
|
||||
|
||||
byte ScummEngine::fetchScriptByte() {
|
||||
if (*_lastCodePtr + sizeof(MemBlkHeader) != _scriptOrgPointer) {
|
||||
long oldoffs = _scriptPointer - _scriptOrgPointer;
|
||||
getScriptBaseAddress();
|
||||
_scriptPointer = _scriptOrgPointer + oldoffs;
|
||||
}
|
||||
refreshScriptPointer();
|
||||
return *_scriptPointer++;
|
||||
}
|
||||
|
||||
uint ScummEngine::fetchScriptWord() {
|
||||
if (*_lastCodePtr + sizeof(MemBlkHeader) != _scriptOrgPointer) {
|
||||
long oldoffs = _scriptPointer - _scriptOrgPointer;
|
||||
getScriptBaseAddress();
|
||||
_scriptPointer = _scriptOrgPointer + oldoffs;
|
||||
}
|
||||
refreshScriptPointer();
|
||||
uint a = READ_LE_UINT16(_scriptPointer);
|
||||
_scriptPointer += 2;
|
||||
return a;
|
||||
@ -516,11 +523,7 @@ int ScummEngine::fetchScriptWordSigned() {
|
||||
}
|
||||
|
||||
uint ScummEngine::fetchScriptDWord() {
|
||||
if (*_lastCodePtr + sizeof(MemBlkHeader) != _scriptOrgPointer) {
|
||||
long oldoffs = _scriptPointer - _scriptOrgPointer;
|
||||
getScriptBaseAddress();
|
||||
_scriptPointer = _scriptOrgPointer + oldoffs;
|
||||
}
|
||||
refreshScriptPointer();
|
||||
uint a = READ_LE_UINT32(_scriptPointer);
|
||||
_scriptPointer += 4;
|
||||
return a;
|
||||
@ -898,7 +901,7 @@ void ScummEngine::runAllScripts() {
|
||||
if (vm.slot[i].cycle == cycle && vm.slot[i].status == ssRunning && !vm.slot[i].didexec) {
|
||||
_currentScript = (byte)i;
|
||||
getScriptBaseAddress();
|
||||
getScriptEntryPoint();
|
||||
resetScriptPointer();
|
||||
executeScript();
|
||||
}
|
||||
}
|
||||
|
@ -753,9 +753,10 @@ protected:
|
||||
void stopObjectScript(int script);
|
||||
|
||||
void getScriptBaseAddress();
|
||||
void getScriptEntryPoint();
|
||||
void resetScriptPointer();
|
||||
int getVerbEntrypoint(int obj, int entry);
|
||||
|
||||
void refreshScriptPointer();
|
||||
byte fetchScriptByte();
|
||||
virtual uint fetchScriptWord();
|
||||
virtual int fetchScriptWordSigned();
|
||||
|
Loading…
x
Reference in New Issue
Block a user