From 5188a1c2cdc78ed8d6a4f2a2284c26427b457cf2 Mon Sep 17 00:00:00 2001 From: Emanuel Guevel Date: Mon, 5 Aug 2013 23:24:48 +0200 Subject: [PATCH] Implement script instructions Become/UndoWerewolf --- apps/openmw/mwscript/docs/vmformat.txt | 6 +++++- apps/openmw/mwscript/statsextensions.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwscript/docs/vmformat.txt b/apps/openmw/mwscript/docs/vmformat.txt index 59d988410..06026a22a 100644 --- a/apps/openmw/mwscript/docs/vmformat.txt +++ b/apps/openmw/mwscript/docs/vmformat.txt @@ -343,5 +343,9 @@ op 0x2000213: HitOnMe op 0x2000214: HitOnMe, explicit op 0x2000215: DisableTeleporting op 0x2000216: EnableTeleporting +op 0x2000217: BecomeWerewolf +op 0x2000218: BecomeWerewolfExplicit +op 0x2000219: UndoWerewolf +op 0x200021a: UndoWerewolfExplicit -opcodes 0x2000217-0x3ffffff unused +opcodes 0x2000219-0x3ffffff unused diff --git a/apps/openmw/mwscript/statsextensions.cpp b/apps/openmw/mwscript/statsextensions.cpp index 04e89edc6..5322b1f0c 100644 --- a/apps/openmw/mwscript/statsextensions.cpp +++ b/apps/openmw/mwscript/statsextensions.cpp @@ -1056,6 +1056,18 @@ namespace MWScript } }; + template + class OpSetWerewolf : public Interpreter::Opcode0 + { + public: + + virtual void execute (Interpreter::Runtime& runtime) + { + MWWorld::Ptr ptr = R()(runtime); + MWBase::Environment::get().getWorld()->setWerewolf(ptr, set); + } + }; + const int numberOfAttributes = 8; const int opcodeGetAttribute = 0x2000027; @@ -1148,6 +1160,10 @@ namespace MWScript const int opcodeOnDeathExplicit = 0x2000205; const int opcodeIsWerewolf = 0x20001fd; const int opcodeIsWerewolfExplicit = 0x20001fe; + const int opcodeBecomeWerewolf = 0x2000217; + const int opcodeBecomeWerewolfExplicit = 0x2000218; + const int opcodeUndoWerewolf = 0x2000219; + const int opcodeUndoWerewolfExplicit = 0x200021a; void registerExtensions (Compiler::Extensions& extensions) { @@ -1266,6 +1282,9 @@ namespace MWScript extensions.registerFunction ("ondeath", 'l', "", opcodeOnDeath, opcodeOnDeathExplicit); extensions.registerFunction ("iswerewolf", 'l', "", opcodeIsWerewolf, opcodeIsWerewolfExplicit); + + extensions.registerInstruction("becomewerewolf", "", opcodeBecomeWerewolf, opcodeBecomeWerewolfExplicit); + extensions.registerInstruction("undowerewolf", "", opcodeUndoWerewolf, opcodeBecomeWerewolfExplicit); } void installOpcodes (Interpreter::Interpreter& interpreter) @@ -1386,6 +1405,11 @@ namespace MWScript interpreter.installSegment5 (opcodeIsWerewolf, new OpIsWerewolf); interpreter.installSegment5 (opcodeIsWerewolfExplicit, new OpIsWerewolf); + + interpreter.installSegment5 (opcodeBecomeWerewolf, new OpSetWerewolf); + interpreter.installSegment5 (opcodeBecomeWerewolfExplicit, new OpSetWerewolf); + interpreter.installSegment5 (opcodeUndoWerewolf, new OpSetWerewolf); + interpreter.installSegment5 (opcodeUndoWerewolfExplicit, new OpSetWerewolf); } } }