diff --git a/CMakeLists.txt b/CMakeLists.txt index cb4958df3b..eed7eea420 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,7 @@ set(GAMESCRIPT apps/openmw/mwscript/compilercontext.cpp apps/openmw/mwscript/interpretercontext.cpp apps/openmw/mwscript/cellextensions.cpp + apps/openmw/mwscript/miscextensions.cpp apps/openmw/mwscript/extensions.cpp apps/openmw/mwscript/globalscripts.cpp ) @@ -48,6 +49,7 @@ set(GAMESCRIPT_HEADER apps/openmw/mwscript/compilercontext.hpp apps/openmw/mwscript/interpretercontext.hpp apps/openmw/mwscript/cellextensions.hpp + apps/openmw/mwscript/miscextensions.hpp apps/openmw/mwscript/extensions.hpp apps/openmw/mwscript/globalscripts.hpp ) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 1532cacf19..dcd97f377a 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -21,17 +21,18 @@ Segment 4: opcodes 0x200-0x3ff unused Segment 5: -op 2000000: CellChanged -op 2000001: Say -op 2000002: SayDone -op 2000003: StreamMusic -op 2000004: PlaySound -op 2000005: PlaySoundVP -op 2000006: PlaySound3D -op 2000007: PlaySound3DVP -op 2000008: PlayLoopSound3D -op 2000009: PlayLoopSound3DVP -op 200000a: StopSound -op 200000b: GetSoundPlaying -opcodes 0x200000c-0x3ffffff unused +op 0x2000000: CellChanged +op 0x2000001: Say +op 0x2000002: SayDone +op 0x2000003: StreamMusic +op 0x2000004: PlaySound +op 0x2000005: PlaySoundVP +op 0x2000006: PlaySound3D +op 0x2000007: PlaySound3DVP +op 0x2000008: PlayLoopSound3D +op 0x2000009: PlayLoopSound3DVP +op 0x200000a: StopSound +op 0x200000b: GetSoundPlaying +op 0x200000c: XBox (always 0) +opcodes 0x200000d-0x3ffffff unused diff --git a/apps/openmw/mwscript/extensions.cpp b/apps/openmw/mwscript/extensions.cpp index fa548770ff..ea968b4588 100644 --- a/apps/openmw/mwscript/extensions.cpp +++ b/apps/openmw/mwscript/extensions.cpp @@ -4,12 +4,14 @@ #include "../mwsound/extensions.hpp" #include "cellextensions.hpp" +#include "miscextensions.hpp" namespace MWScript { void registerExtensions (Compiler::Extensions& extensions) { Cell::registerExtensions (extensions); + Misc::registerExtensions (extensions); MWSound::registerExtensions (extensions); } } diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp new file mode 100644 index 0000000000..e7956c3ad1 --- /dev/null +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -0,0 +1,38 @@ + +#include "miscextensions.hpp" + +#include + +#include +#include +#include + +namespace MWScript +{ + namespace Misc + { + class OpXBox : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + runtime.push (0); + } + }; + + const int opcodeXBox = 0x200000c; + + + + void registerExtensions (Compiler::Extensions& extensions) + { + extensions.registerFunction ("xbox", 'l', "", opcodeXBox); + } + + void installOpcodes (Interpreter::Interpreter& interpreter) + { + interpreter.installSegment5 (opcodeXBox, new OpXBox); + } + } +} diff --git a/apps/openmw/mwscript/miscextensions.hpp b/apps/openmw/mwscript/miscextensions.hpp new file mode 100644 index 0000000000..69818f466e --- /dev/null +++ b/apps/openmw/mwscript/miscextensions.hpp @@ -0,0 +1,26 @@ +#ifndef GAME_SCRIPT_MISCEXTENSIONS_H +#define GAME_SCRIPT_MISCEXTENSIONS_H + +namespace Compiler +{ + class Extensions; +} + +namespace Interpreter +{ + class Interpreter; +} + +namespace MWScript +{ + namespace Misc + { + void registerExtensions (Compiler::Extensions& extensions); + + void installOpcodes (Interpreter::Interpreter& interpreter); + } +} + +#endif + + diff --git a/apps/openmw/mwscript/scriptmanager.cpp b/apps/openmw/mwscript/scriptmanager.cpp index 7aea55693c..42ece2f322 100644 --- a/apps/openmw/mwscript/scriptmanager.cpp +++ b/apps/openmw/mwscript/scriptmanager.cpp @@ -18,6 +18,7 @@ #include "../mwsound/extensions.hpp" #include "cellextensions.hpp" +#include "miscextensions.hpp" namespace MWScript { @@ -121,6 +122,7 @@ namespace MWScript { Interpreter::installOpcodes (interpreter); Cell::installOpcodes (interpreter); + Misc::installOpcodes (interpreter); MWSound::installOpcodes (interpreter); } }