mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 20:43:15 +00:00
- Added support for Eternity Engine's function pointer ACS instructions. (Note that an alternative ACS compiler is necessary to use these instructions properly.)
SVN r3731 (trunk)
This commit is contained in:
parent
e800522e26
commit
439b60ae68
2 changed files with 25 additions and 3 deletions
|
@ -4243,17 +4243,37 @@ int DLevelScript::RunScript ()
|
|||
}
|
||||
break;
|
||||
|
||||
case PCD_PUSHFUNCTION:
|
||||
{
|
||||
int funcnum = NEXTBYTE;
|
||||
PushToStack(funcnum | activeBehavior->GetLibraryID());
|
||||
break;
|
||||
}
|
||||
case PCD_CALL:
|
||||
case PCD_CALLDISCARD:
|
||||
case PCD_CALLSTACK:
|
||||
{
|
||||
int funcnum;
|
||||
int i;
|
||||
ScriptFunction *func;
|
||||
FBehavior *module = activeBehavior;
|
||||
FBehavior *module;
|
||||
SDWORD *mylocals;
|
||||
|
||||
funcnum = NEXTBYTE;
|
||||
if(pcd == PCD_CALLSTACK)
|
||||
{
|
||||
funcnum = STACK(1);
|
||||
module = FBehavior::StaticGetModule(funcnum>>16);
|
||||
--sp;
|
||||
|
||||
funcnum &= 0xFFFF; // Clear out tag
|
||||
}
|
||||
else
|
||||
{
|
||||
module = activeBehavior;
|
||||
funcnum = NEXTBYTE;
|
||||
}
|
||||
func = activeBehavior->GetFunction (funcnum, module);
|
||||
|
||||
if (func == NULL)
|
||||
{
|
||||
Printf ("Function %d in %s out of range\n", funcnum, ScriptPresentation(script).GetChars());
|
||||
|
|
|
@ -598,8 +598,10 @@ public:
|
|||
PCD_STRCPYTOMAPCHRANGE, // [FDARI] input range (copy string to all/part of array)
|
||||
PCD_STRCPYTOWORLDCHRANGE,
|
||||
PCD_STRCPYTOGLOBALCHRANGE,
|
||||
PCD_PUSHFUNCTION,
|
||||
/*360*/ PCD_CALLSTACK,
|
||||
|
||||
/*359*/ PCODE_COMMAND_COUNT
|
||||
/*361*/ PCODE_COMMAND_COUNT
|
||||
};
|
||||
|
||||
// Some constants used by ACS scripts
|
||||
|
|
Loading…
Reference in a new issue