View Issue Details

IDProjectCategoryView StatusLast Update
0002734The Dark ModCodingpublic27.12.2019 05:01
Reportergrayman Assigned Tograyman  
PrioritynormalSeveritymajorReproducibilitysometimes
Status closedResolutionfixed 
Product VersionTDM 1.05 
Target VersionTDM 1.06Fixed in VersionTDM 1.06 
Summary0002734: Inaccurate AAS data can lead to a hang.
DescriptionThis has only been seen once, in a map under construction. The architecture of the map somehow caused the AAS data to be incorrect. This created a situation where a search for likely spots to look for the player was searching in a volume whose min values were higher than its max values. The code wasn't allowing for that situation, resulting in an endless loop, hanging the game.
Steps To ReproduceBuild and run the attached map. Run past the first guard and AI will be alerted elsewhere. Sometimes the hang occurs, sometimes it doesn't, so you have to keep trying.
TagsNo tags attached.
Attached Files
fau08_bugged.map (2,807,920 bytes)

Activities

grayman

grayman

19.04.2011 21:48

viewer   ~0003810

Added code to idBounds.Intersect() and idBounds.IntersectSelf() to handle null intersections. Without it, it was possible to generate a search area that couldn’t be handled by the hiding spot search, causing a hang.

AAS data was not the problem.

rev. 4806:

bounds.h - the fix
DarkModGlobals.cpp - added AAS logging
DarkModGlobals.h - added AAS logging

rev. 11844:

tdm_defs.script - added AAS logging
stgatilov

stgatilov

26.12.2019 16:58

administrator   ~0011946

Last edited: 27.12.2019 05:01

Just bumped into this change of idBounds intersection.

Well, I must say the new way is not how box intersection is expected to work. When boxes don't intersection, their "intersection" must be a box inverted across at least one dimension.
Luckily, there are only a few places which call this method, so I can revert it by moving the check for intersection into call sites.

What is important is that the IntersectSelf is used in interaction culling, where this old change efficiently disabled culling in most cases.
I wonder how this did not cause noticeable performance regression.

UPDATE: In fact, this change could not be noticed until Doom 3 source code was integrated into TDM codebase, since at the time of 1.04 the game engine was a separate .exe with its own unmodifiable instance of idlib.

grayman

grayman

27.12.2019 03:06

viewer   ~0011947

I don't understand what "their 'intersection' must be a box inverted across at least one dimension" means.

That makes no sense to me.
stgatilov

stgatilov

27.12.2019 05:01

administrator   ~0011948

Committed the revert in rev 8468.

Issue History

Date Modified Username Field Change
18.04.2011 18:05 grayman New Issue
18.04.2011 18:05 grayman Status new => assigned
18.04.2011 18:05 grayman Assigned To => grayman
18.04.2011 18:05 grayman File Added: fau08_bugged.map
19.04.2011 21:48 grayman Note Added: 0003810
19.04.2011 21:48 grayman Status assigned => resolved
19.04.2011 21:48 grayman Resolution open => fixed
19.04.2011 21:48 grayman Fixed in Version => TDM 1.06
27.10.2011 05:20 greebo Status resolved => closed
26.12.2019 16:58 stgatilov Note Added: 0011946
27.12.2019 03:06 grayman Note Added: 0011947
27.12.2019 05:01 stgatilov Note Edited: 0011946
27.12.2019 05:01 stgatilov Note Added: 0011948