mirror of
https://github.com/dhewm/dhewm3.git
synced 2025-02-16 17:21:21 +00:00
Work around assertion in alphalabs4, fix #409
In the savegame from that bugreport, "monster_zsec_shotgun_12" was lying dead pretty much at its spawn point. script/map_alphalabs4.script moves those "ride_of_death" platforms around, and at the end of a cycle teleports "ride_of_death*_parent" back to its starting position - and the "ride_of_death*" bound to it, which is a pushing mover, just gets dragged along by the physics code and thus can collide with that zombie cadaver, which then tries to push it along, causing that assertion in TestHugeTranslation(). This is a map bug - Doom3 even prints a warning: WARNING: script/map_alphalabs4.script(722): Thread 'map_alphalabs4::RideOfDeathPath': teleported 'ride_of_death2_parent' which has the pushing mover 'ride_of_death2' bound to it So I just disable that assertion for this specific case.. Also moved the assertion behind the corresponding warning, so that gets printed before the assertion kills the game.. Also a small change to CMakeLists.txt that should make enabling LINUX_RELEASE_BINS after CMake has already been run without it work
This commit is contained in:
parent
adad73cda7
commit
c22965bf58
5 changed files with 28 additions and 11 deletions
|
@ -69,7 +69,9 @@ Note: Numbers starting with a "#" like #330 refer to the bugreport with that num
|
|||
- On Mac it's in `$HOME/Library/Application Support/dhewm3/`
|
||||
- On other Unix-like systems like Linux it's in `$XDG_DATA_HOME/dhewm3/`
|
||||
(usually `$HOME/.local/share/dhewm3/`)
|
||||
|
||||
* Improved compatibility with Wayland (#426)
|
||||
* Work around assertion in AlphaLabs4 due to "ride_of_death" yeeting
|
||||
the dead "monster_zsec_shotgun_12" into the void (#409)
|
||||
|
||||
1.5.1 (2021-03-14)
|
||||
------------------------------------------------------------------------
|
||||
|
|
|
@ -33,6 +33,7 @@ set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/sys/cmake")
|
|||
|
||||
if(LINUX_RELEASE_BINS)
|
||||
message(STATUS "Setting RPATH to \$ORIGIN/libs/ so you can put dependencies in there")
|
||||
set(CMAKE_SKIP_RPATH OFF CACHE BOOL "Skip RPATH" FORCE)
|
||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
|
||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||
set(CMAKE_INSTALL_RPATH "$ORIGIN/libs")
|
||||
|
|
|
@ -887,7 +887,8 @@ void idCollisionModelManagerLocal::Translation( trace_t *results, const idVec3 &
|
|||
if ( session->rw ) {
|
||||
session->rw->DebugArrow( colorRed, start, end, 1 );
|
||||
}
|
||||
common->Printf( "idCollisionModelManagerLocal::Translation: huge translation\n" );
|
||||
common->Printf( "idCollisionModelManagerLocal::Translation: huge translation from (%.2f %.2f %.2f) to (%.2f %.2f %.2f)\n",
|
||||
start.x, start.y, start.z, end.x, end.y, end.z);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -965,14 +965,6 @@ idClip::TestHugeTranslation
|
|||
*/
|
||||
ID_INLINE bool TestHugeTranslation( trace_t &results, const idClipModel *mdl, const idVec3 &start, const idVec3 &end, const idMat3 &trmAxis ) {
|
||||
if ( mdl != NULL && ( end - start ).LengthSqr() > Square( CM_MAX_TRACE_DIST ) ) {
|
||||
#ifndef CTF
|
||||
// May be important: This occurs in CTF when a player connects and spawns
|
||||
// in the PVS of a player that has a flag that is spawning the idMoveableItem
|
||||
// "nuggets". The error seems benign and the assert was getting in the way
|
||||
// of testing.
|
||||
assert( 0 );
|
||||
#endif
|
||||
|
||||
results.fraction = 0.0f;
|
||||
results.endpos = start;
|
||||
results.endAxis = trmAxis;
|
||||
|
@ -984,6 +976,15 @@ ID_INLINE bool TestHugeTranslation( trace_t &results, const idClipModel *mdl, co
|
|||
} else {
|
||||
gameLocal.Printf( "huge translation for clip model %d\n", mdl->GetId() );
|
||||
}
|
||||
gameLocal.Printf( " from (%.2f %.2f %.2f) to (%.2f %.2f %.2f)\n", start.x, start.y, start.z, end.x, end.y, end.z);
|
||||
|
||||
#ifndef CTF
|
||||
// May be important: This occurs in CTF when a player connects and spawns
|
||||
// in the PVS of a player that has a flag that is spawning the idMoveableItem
|
||||
// "nuggets". The error seems benign and the assert was getting in the way
|
||||
// of testing.
|
||||
assert( 0 );
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -965,7 +965,7 @@ idClip::TestHugeTranslation
|
|||
*/
|
||||
ID_INLINE bool TestHugeTranslation( trace_t &results, const idClipModel *mdl, const idVec3 &start, const idVec3 &end, const idMat3 &trmAxis ) {
|
||||
if ( mdl != NULL && ( end - start ).LengthSqr() > Square( CM_MAX_TRACE_DIST ) ) {
|
||||
assert( 0 );
|
||||
|
||||
|
||||
results.fraction = 0.0f;
|
||||
results.endpos = start;
|
||||
|
@ -979,6 +979,18 @@ ID_INLINE bool TestHugeTranslation( trace_t &results, const idClipModel *mdl, co
|
|||
} else {
|
||||
gameLocal.Printf( "huge translation for clip model %d\n", mdl->GetId() );
|
||||
}
|
||||
|
||||
gameLocal.Printf( " from (%.2f %.2f %.2f) to (%.2f %.2f %.2f)\n", start.x, start.y, start.z, end.x, end.y, end.z);
|
||||
|
||||
if ( mdl->GetEntity() != NULL && idStr::Cmp(mdl->GetEntity()->GetName(), "monster_zsec_shotgun_12") == 0
|
||||
&& idStr::Cmp(gameLocal.GetMapName(), "maps/game/alphalabs4.map") == 0 )
|
||||
{
|
||||
// there is a map bug in alpha4 where the ride of death can push a monster far into the void
|
||||
// don't assert there
|
||||
return true;
|
||||
}
|
||||
|
||||
assert( 0 );
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
Loading…
Reference in a new issue