mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-05 15:40:10 +00:00
Added ForceJump/ForceMoveJump commands
This commit is contained in:
parent
3f6a7e36d0
commit
a32ab842ae
@ -1053,10 +1053,12 @@ namespace MWMechanics
|
||||
//KnockedOutOneFrameLogic
|
||||
//Used for "OnKnockedOut" command
|
||||
//Put here to ensure that it's run for PRECISELY one frame.
|
||||
if (stats.getKnockedDown() && !stats.getKnockedDownOneFrame() && !stats.getKnockedDownOverOneFrame()) { //Start it for one frame if nessesary
|
||||
if (stats.getKnockedDown() && !stats.getKnockedDownOneFrame() && !stats.getKnockedDownOverOneFrame())
|
||||
{ //Start it for one frame if nessesary
|
||||
stats.setKnockedDownOneFrame(true);
|
||||
}
|
||||
else if (stats.getKnockedDownOneFrame() && !stats.getKnockedDownOverOneFrame()) { //Turn off KnockedOutOneframe
|
||||
else if (stats.getKnockedDownOneFrame() && !stats.getKnockedDownOverOneFrame())
|
||||
{ //Turn off KnockedOutOneframe
|
||||
stats.setKnockedDownOneFrame(false);
|
||||
stats.setKnockedDownOverOneFrame(true);
|
||||
}
|
||||
|
@ -1174,6 +1174,37 @@ void CharacterController::update(float duration)
|
||||
bool isrunning = cls.getCreatureStats(mPtr).getStance(MWMechanics::CreatureStats::Stance_Run);
|
||||
bool sneak = cls.getCreatureStats(mPtr).getStance(MWMechanics::CreatureStats::Stance_Sneak);
|
||||
bool flying = world->isFlying(mPtr);
|
||||
CreatureStats &stats = cls.getCreatureStats(mPtr);
|
||||
|
||||
//Force Jump Logic
|
||||
|
||||
bool isMoving = (std::abs(cls.getMovementSettings(mPtr).mPosition[0]) > .5 || abs(cls.getMovementSettings(mPtr).mPosition[1]) > .5);
|
||||
if(!inwater && !flying)
|
||||
{
|
||||
//Force Jump
|
||||
if(stats.getMovementFlag(MWMechanics::CreatureStats::Flag_ForceJump))
|
||||
{
|
||||
if(onground)
|
||||
{
|
||||
cls.getMovementSettings(mPtr).mPosition[2] = 1;
|
||||
}
|
||||
else
|
||||
cls.getMovementSettings(mPtr).mPosition[2] = 0;
|
||||
}
|
||||
//Force Move Jump, only jump if they're otherwise moving
|
||||
std::cout << isMoving << std::endl;
|
||||
if(stats.getMovementFlag(MWMechanics::CreatureStats::Flag_ForceMoveJump) && isMoving)
|
||||
{
|
||||
|
||||
if(onground)
|
||||
{
|
||||
cls.getMovementSettings(mPtr).mPosition[2] = 1;
|
||||
}
|
||||
else
|
||||
cls.getMovementSettings(mPtr).mPosition[2] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//Ogre::Vector3 vec = cls.getMovementVector(mPtr);
|
||||
Ogre::Vector3 vec(cls.getMovementSettings(mPtr).mPosition);
|
||||
if(vec.z > 0.0f) // to avoid slow-down when jumping
|
||||
@ -1183,7 +1214,7 @@ void CharacterController::update(float duration)
|
||||
vec.x = vecXY.x;
|
||||
vec.y = vecXY.y;
|
||||
}
|
||||
else
|
||||
else
|
||||
vec.normalise();
|
||||
|
||||
if(mHitState != CharState_None && mJumpState == JumpState_None)
|
||||
@ -1352,8 +1383,7 @@ void CharacterController::update(float duration)
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!(vec.z > 0.0f))
|
||||
mJumpState = JumpState_None;
|
||||
mJumpState = JumpState_None;
|
||||
vec.z = 0.0f;
|
||||
|
||||
inJump = false;
|
||||
|
@ -227,7 +227,9 @@ namespace MWMechanics
|
||||
Flag_ForceRun = 1,
|
||||
Flag_ForceSneak = 2,
|
||||
Flag_Run = 4,
|
||||
Flag_Sneak = 8
|
||||
Flag_Sneak = 8,
|
||||
Flag_ForceJump = 16,
|
||||
Flag_ForceMoveJump = 32
|
||||
};
|
||||
enum Stance
|
||||
{
|
||||
|
@ -121,6 +121,34 @@ namespace MWScript
|
||||
}
|
||||
};
|
||||
|
||||
template <class R>
|
||||
class OpGetForceJump : public Interpreter::Opcode0
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void execute (Interpreter::Runtime& runtime)
|
||||
{
|
||||
MWWorld::Ptr ptr = R()(runtime);
|
||||
|
||||
MWMechanics::CreatureStats& stats = ptr.getClass().getCreatureStats (ptr);
|
||||
runtime.push (stats.getMovementFlag (MWMechanics::CreatureStats::Flag_ForceJump));
|
||||
}
|
||||
};
|
||||
|
||||
template <class R>
|
||||
class OpGetForceMoveJump : public Interpreter::Opcode0
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void execute (Interpreter::Runtime& runtime)
|
||||
{
|
||||
MWWorld::Ptr ptr = R()(runtime);
|
||||
|
||||
MWMechanics::CreatureStats& stats = ptr.getClass().getCreatureStats (ptr);
|
||||
runtime.push (stats.getMovementFlag (MWMechanics::CreatureStats::Flag_ForceMoveJump));
|
||||
}
|
||||
};
|
||||
|
||||
template <class R>
|
||||
class OpGetForceSneak : public Interpreter::Opcode0
|
||||
{
|
||||
@ -169,27 +197,54 @@ namespace MWScript
|
||||
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeToggleCollision, new OpToggleCollision);
|
||||
|
||||
//Force Run
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeClearForceRun,
|
||||
new OpClearMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceRun));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeForceRun,
|
||||
new OpSetMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceRun));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeClearForceSneak,
|
||||
new OpClearMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceSneak));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeForceSneak,
|
||||
new OpSetMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceSneak));
|
||||
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeClearForceRunExplicit,
|
||||
new OpClearMovementFlag<ExplicitRef> (MWMechanics::CreatureStats::Flag_ForceRun));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeForceRun,
|
||||
new OpSetMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceRun));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeForceRunExplicit,
|
||||
new OpSetMovementFlag<ExplicitRef> (MWMechanics::CreatureStats::Flag_ForceRun));
|
||||
|
||||
//Force Jump
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeClearForceJump,
|
||||
new OpClearMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceJump));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeClearForceJumpExplicit,
|
||||
new OpClearMovementFlag<ExplicitRef> (MWMechanics::CreatureStats::Flag_ForceJump));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeForceJump,
|
||||
new OpSetMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceJump));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeForceJumpExplicit,
|
||||
new OpSetMovementFlag<ExplicitRef> (MWMechanics::CreatureStats::Flag_ForceJump));
|
||||
|
||||
//Force MoveJump
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeClearForceMoveJump,
|
||||
new OpClearMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceMoveJump));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeClearForceMoveJumpExplicit,
|
||||
new OpClearMovementFlag<ExplicitRef> (MWMechanics::CreatureStats::Flag_ForceMoveJump));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeForceMoveJump,
|
||||
new OpSetMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceMoveJump));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeForceMoveJumpExplicit,
|
||||
new OpSetMovementFlag<ExplicitRef> (MWMechanics::CreatureStats::Flag_ForceMoveJump));
|
||||
|
||||
//Force Sneak
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeClearForceSneak,
|
||||
new OpClearMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceSneak));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeClearForceSneakExplicit,
|
||||
new OpClearMovementFlag<ExplicitRef> (MWMechanics::CreatureStats::Flag_ForceSneak));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeForceSneak,
|
||||
new OpSetMovementFlag<ImplicitRef> (MWMechanics::CreatureStats::Flag_ForceSneak));
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeForceSneakExplicit,
|
||||
new OpSetMovementFlag<ExplicitRef> (MWMechanics::CreatureStats::Flag_ForceSneak));
|
||||
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeGetPcRunning, new OpGetPcRunning);
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeGetPcSneaking, new OpGetPcSneaking);
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeGetForceRun, new OpGetForceRun<ImplicitRef>);
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeGetForceRunExplicit, new OpGetForceRun<ExplicitRef>);
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeGetForceJump, new OpGetForceJump<ImplicitRef>);
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeGetForceJumpExplicit, new OpGetForceJump<ExplicitRef>);
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeGetForceMoveJump, new OpGetForceMoveJump<ImplicitRef>);
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeGetForceMoveJumpExplicit, new OpGetForceMoveJump<ExplicitRef>);
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeGetForceSneak, new OpGetForceSneak<ImplicitRef>);
|
||||
interpreter.installSegment5 (Compiler::Control::opcodeGetForceSneakExplicit, new OpGetForceSneak<ExplicitRef>);
|
||||
}
|
||||
|
@ -413,5 +413,13 @@ op 0x2000254: HurtStandingActor
|
||||
op 0x2000255: HurtStandingActor, explicit
|
||||
op 0x2000256: HurtCollidingActor
|
||||
op 0x2000257: HurtCollidingActor, explicit
|
||||
op 0x2000258: ClearForceJump
|
||||
op 0x2000259: ClearForceJump, explicit reference
|
||||
op 0x200025a: ForceJump
|
||||
op 0x200025b: ForceJump, explicit reference
|
||||
op 0x200025c: ClearForceMoveJump
|
||||
op 0x200025d: ClearForceMoveJump, explicit reference
|
||||
op 0x200025e: ForceMoveJump
|
||||
op 0x200025f: ForceMoveJump, explicit reference
|
||||
|
||||
opcodes 0x2000258-0x3ffffff unused
|
||||
opcodes 0x2000260-0x3ffffff unused
|
||||
|
@ -148,6 +148,16 @@ namespace Compiler
|
||||
extensions.registerInstruction ("forcerun", "", opcodeForceRun,
|
||||
opcodeForceRunExplicit);
|
||||
|
||||
extensions.registerInstruction ("clearforcejump", "", opcodeClearForceJump,
|
||||
opcodeClearForceJumpExplicit);
|
||||
extensions.registerInstruction ("forcejump", "", opcodeForceJump,
|
||||
opcodeForceJumpExplicit);
|
||||
|
||||
extensions.registerInstruction ("clearforcemovejump", "", opcodeClearForceMoveJump,
|
||||
opcodeClearForceMoveJumpExplicit);
|
||||
extensions.registerInstruction ("forcemovejump", "", opcodeForceMoveJump,
|
||||
opcodeForceMoveJumpExplicit);
|
||||
|
||||
extensions.registerInstruction ("clearforcesneak", "", opcodeClearForceSneak,
|
||||
opcodeClearForceSneakExplicit);
|
||||
extensions.registerInstruction ("forcesneak", "", opcodeForceSneak,
|
||||
@ -155,6 +165,8 @@ namespace Compiler
|
||||
extensions.registerFunction ("getpcrunning", 'l', "", opcodeGetPcRunning);
|
||||
extensions.registerFunction ("getpcsneaking", 'l', "", opcodeGetPcSneaking);
|
||||
extensions.registerFunction ("getforcerun", 'l', "", opcodeGetForceRun, opcodeGetForceRunExplicit);
|
||||
extensions.registerFunction ("getforcejump", 'l', "", opcodeGetForceJump, opcodeGetForceJumpExplicit);
|
||||
extensions.registerFunction ("getforcemovejump", 'l', "", opcodeGetForceMoveJump, opcodeGetForceMoveJumpExplicit);
|
||||
extensions.registerFunction ("getforcesneak", 'l', "", opcodeGetForceSneak, opcodeGetForceSneakExplicit);
|
||||
}
|
||||
}
|
||||
|
@ -123,6 +123,14 @@ namespace Compiler
|
||||
const int opcodeClearForceRunExplicit = 0x2000155;
|
||||
const int opcodeForceRun = 0x2000156;
|
||||
const int opcodeForceRunExplicit = 0x2000157;
|
||||
const int opcodeClearForceJump = 0x2000258;
|
||||
const int opcodeClearForceJumpExplicit = 0x2000259;
|
||||
const int opcodeForceJump = 0x200025a;
|
||||
const int opcodeForceJumpExplicit = 0x200025b;
|
||||
const int opcodeClearForceMoveJump = 0x200025c;
|
||||
const int opcodeClearForceMoveJumpExplicit = 0x200025d;
|
||||
const int opcodeForceMoveJump = 0x200025e;
|
||||
const int opcodeForceMoveJumpExplicit = 0x200025f;
|
||||
const int opcodeClearForceSneak = 0x2000158;
|
||||
const int opcodeClearForceSneakExplicit = 0x2000159;
|
||||
const int opcodeForceSneak = 0x200015a;
|
||||
@ -134,6 +142,10 @@ namespace Compiler
|
||||
const int opcodeGetForceSneak = 0x20001cc;
|
||||
const int opcodeGetForceRunExplicit = 0x20001cd;
|
||||
const int opcodeGetForceSneakExplicit = 0x20001ce;
|
||||
const int opcodeGetForceJump = 0x2000260;
|
||||
const int opcodeGetForceMoveJump = 0x2000262;
|
||||
const int opcodeGetForceJumpExplicit = 0x2000261;
|
||||
const int opcodeGetForceMoveJumpExplicit = 0x2000263;
|
||||
}
|
||||
|
||||
namespace Dialogue
|
||||
|
Loading…
x
Reference in New Issue
Block a user