Back to the Vavoom Forum Archives


Forum

[Fixed] [1.30] Strife: Entity crash

Mon, 27 Jul 2009 21:20:17

Crimson Wizard

More info: this happens 100% when EntityBoss touches EntityPod (investigated which objects participate in CheckRelThing function). Also, after some tweaking I knew that if EntityPod is not made nonsolid (by calling A_NoBlocking) then game will play longer, like maybe 10-15 seconds, but still crash after with same error.
Mon, 27 Jul 2009 18:24:09

Crimson Wizard

On level "Entity Lair" as soon as Entity appears and is about to go to chase state (or just after it does), game crashes:
- (None)
- VObject::ExecuteFunction
- (linespec.SpectralMonster.Touch)
- VEntity::CheckRelPosition
- VEntity::TryMove
- VObject::ExecuteFunction
- (decorate.EntityBoss.None)
- VEntity::SetState
- VObject::ExecuteFunction
- (linespec.Actor.A_Look)
- VEntity::SetState
- VEntity::AdvanceState
- VObject::ExecuteFunction
- (linespec.EntityEx.Tick)
- VThinker::Tick
- VLevel::TickWorld
- SV_Ticker
- ServerFrame
- Host_Frame

ERROR: Segmentation Violation
Mon, 27 Jul 2009 18:52:32

Crimson Wizard

Vavoom build with code revision 4040: Same thing happens, only Entity able to shoot one lightning, and also error message is more clear:
- VEntity::CheckRelPosition
- VEntity::TryMove
- VObject::ExecuteFunction
- (decorate.EntityBoss.None)
- VEntity::SetState
- VEntity::AdvanceState
- VObject::ExecuteFunction
- (linespec.EntityEx.Tick)
- VThinker::Tick
- VLevel::TickWorld
- SV_Ticker
- ServerFrame
- Host_Frame

ERROR: Assertion failed: Index < ArrNum
EDIT: Very similar crash happens with Oracle monster. I believe there's something wrong with this Spectre/Alien/Entity actor physics or behavior.
Mon, 27 Jul 2009 20:26:56

Crimson Wizard

Allright, here it goes. I ran Vavoom from MSVS with debugger, and after some time fighting vs Spectre MSVS thrown a memory access exception. It was in pr_exec.cpp in RunFunction(), line 174:
if (func->Flags & FUNC_Net)
most of the object members 'func' pointed to were shown as "cannot evaluate", which may mean that memory was thrashed there. Call Stack:
RunFunction(VMethod * func=0xcd1d0048)  Line 174 + 0x3 bytes
RunFunction(VMethod * func=0x03a46438)  Line 223 + 0xc bytes
VObject::ExecuteFunction(VMethod * func=0x03a46438)  Line 1891 + 0x9 bytes
VEntity::eventTouch(VEntity * Other=0x043ebfd0)  Line 336 + 0x14 bytes
VEntity::CheckRelThing(tmtrace_t & tmtrace={...}, VEntity * Other=0x043ebfd0)  Line 1042
VEntity::CheckRelPosition(tmtrace_t & tmtrace={...}, TVec Pos={...})  Line 886 + 0x18 bytes
VEntity::TryMove(tmtrace_t & tmtrace={...}, TVec newPos={...}, bool AllowDropOff=false)  Line 1217 + 0x22 bytes
VEntity::execTryMoveEx()  Line 2345 + 0x26 bytes
RunFunction(VMethod * func=0x038e5658)  Line 186 + 0xd bytes
RunFunction(VMethod * func=0x028fd8d0)  Line 223 + 0xc bytes
RunFunction(VMethod * func=0x03936cc0)  Line 223 + 0xc bytes
RunFunction(VMethod * func=0x039373e0)  Line 259 + 0x22 bytes
RunFunction(VMethod * func=0x03ad3900)  Line 223 + 0xc bytes
VObject::ExecuteFunction(VMethod * func=0x03ad3900)  Line 1891 + 0x9 bytes
VEntity::SetState(VState * InState=0x03e74fd4)  Line 287 + 0xc bytes
VEntity::AdvanceState(float deltaTime=0.012003764)  Line 339 + 0x12 bytes
VEntity::execAdvanceState()  Line 639 + 0xf bytes
RunFunction(VMethod * func=0x038e2b98)  Line 186 + 0xd bytes
RunFunction(VMethod * func=0x03927320)  Line 223 + 0xc bytes
VObject::ExecuteFunction(VMethod * func=0x03927320)  Line 1891 + 0x9 bytes
VThinker::Tick(float DeltaTime=0.012003764)  Line 119 + 0x14 bytes
VLevel::TickWorld(float DeltaTime=0.012003764)  Line 136 + 0x16 bytes
SV_Ticker()  Line 493	
ServerFrame(int realtics=0)  Line 1488
Host_Frame()  Line 369 + 0xb bytes
Tue, 28 Jul 2009 16:27:19

Firebrand

In common progs SpectralMonster::Touch, you needs to be like this:
//==========================================================================
//
//	Touch
//
//==========================================================================

bool Touch(Entity InOther)
{
	EntityEx(InOther).Damage(self, self, 5, 'Melee');
	
	return ::Touch(InOther);
}
Since actor spawns over the entity nest object and touching it the function needs to return touching physics too <!-- s;) --><img src="{SMILIES_PATH}/icon_wink.gif" alt=";)" title="Wink" /><!-- s;) -->.
Tue, 28 Jul 2009 17:01:21

Crimson Wizard

Ha ha! Firebrand, you're genius! <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> That method simply does not return a value. ..... actually I notified Janis that compiler does not check obligatory "return" statement longlong ago <!-- s:roll: --><img src="{SMILIES_PATH}/icon_rolleyes.gif" alt=":roll:" title="Rolling Eyes" /><!-- s:roll: --> <!-- l --><a class="postlink-local" href="http://vavoom-engine.com/forums/viewtopic.php?f=1&t=759">viewtopic.php?f=1&t=759</a><!-- l --> and now this... <!-- s:wink: --><img src="{SMILIES_PATH}/icon_wink.gif" alt=":wink:" title="Wink" /><!-- s:wink: --> EDIT: Tada!! it works, I can play Strife now <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->

Back to the Vavoom Forum Archives