From efc9ed2fe9685a448af32065935eb33228c011c3 Mon Sep 17 00:00:00 2001 From: Marisa Heit Date: Sat, 1 Oct 2016 22:31:07 -0500 Subject: [PATCH] Fix state lookup from non-action functions (i.e. Damage functions) --- src/thingdef/thingdef_expression.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/thingdef/thingdef_expression.cpp b/src/thingdef/thingdef_expression.cpp index 3851d05cc..700ac94bb 100644 --- a/src/thingdef/thingdef_expression.cpp +++ b/src/thingdef/thingdef_expression.cpp @@ -4978,7 +4978,8 @@ static int DecoHandleRuntimeState(VMFrameStack *stack, VMValue *param, int numpa ExpEmit FxRuntimeStateIndex::Emit(VMFunctionBuilder *build) { - assert(build->Registers[REGT_POINTER].GetMostUsed() >= 3); + assert(build->IsActionFunc && build->Registers[REGT_POINTER].GetMostUsed() >= 3 && + "FxRuntimeStateIndex is only valid inside action functions"); ExpEmit out(build, REGT_POINTER); @@ -5150,7 +5151,14 @@ int DecoFindSingleNameState(VMFrameStack *stack, VMValue *param, int numparam, V ExpEmit FxMultiNameState::Emit(VMFunctionBuilder *build) { ExpEmit dest(build, REGT_POINTER); - build->Emit(OP_PARAM, 0, REGT_POINTER, 1); // pass stateowner + if (build->IsActionFunc) + { + build->Emit(OP_PARAM, 0, REGT_POINTER, 1); // pass stateowner + } + else + { + build->Emit(OP_PARAM, 0, REGT_POINTER, 0); // pass self + } for (unsigned i = 0; i < names.Size(); ++i) { build->EmitParamInt(names[i]);