Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
d3: fix game crash in Retribution level 12's big matcen room
When activating switches in the room with 6 matcens, this happens after a short while: ``` Assertion failure at TERRAIN_REGION (Descent3/terrain.h:218), triggered 1 time: 'x != -1 && "invalid/unset room number (-1)!"' f0 TERRAIN_REGION (x=-1) at Descent3/terrain.h:222 f1 AIPathAllocPath (obj=0x3d304b0 <Objects+150000>, ai_info=0x520000444080, goal_ptr=0x520000444250, start_room=0x3d304cc <Objects+150028>, start_pos=0x3d304d0 <Objects+150032>, end_room=0x7fb115dbe830, end_pos=0x52000044427c, rad=0, flags=0, handle=28822, ignore_obj=-1) at Descent3/aipath.cpp:1066 f2 GoalDoFrame (obj=0x3d304b0 <Objects+150000>) at Descent3/AIGoal.cpp:823 f3 AIDoFrame (obj=0x3d304b0 <Objects+150000>) at Descent3/AImain.cpp:6214 f4 ObjDoFrame (obj=0x3d304b0 <Objects+150000>) at Descent3/object.cpp:2674 f5 ObjDoFrameAll () at Descent3/object.cpp:2988 f6 GameFrame () at Descent3/GameLoop.cpp:2981 f7 GameSequencer () at Descent3/gamesequence.cpp:1221 f8 PlayGame () at Descent3/game.cpp:834 f9 MainLoop () at Descent3/descent.cpp:550 f10 Descent3 () at Descent3/descent.cpp:508 f11 oeD3LnxApp::run (this=0x7fb115a0db50) at Descent3/sdlmain.cpp:151 (gdb) up start_room=0x3d304cc <Objects+150028>, start_pos=0x3d304d0 <Objects+150032>, end_room=0x7fb115dbe830, end_pos=0x52000044427c, rad=0, flags=0, handle=28822, ignore_obj=-1) at Descent3/aipath.cpp:1066 1066 } else if (BOA_Array[BOA_INDEX(*start_room)][BOA_INDEX(*end_room)] & BOAF_TOO_SMALL_FOR_ROBOT) { (gdb) p *start_room $2 = 171 (gdb) p *end_room $3 = -1 ``` The return type of ``BOA_GetNextPath`` is int; but inside the function, ``false`` is returned, which does not fit the scheme. Judging from callsites, ``BOA_NO_PATH`` is expected instead. In some functions related to AI pathfinding, add handling or assertions for invalid room numbers.
- Loading branch information