v3.3.0: fixed very rare hangs in wandmaker spawning logic

This commit is contained in:
Evan Debenham
2025-11-03 12:47:53 -05:00
parent 8e47b27507
commit 94bd1370d7

View File

@@ -302,9 +302,15 @@ public class Wandmaker extends NPC {
Wandmaker npc = new Wandmaker(); Wandmaker npc = new Wandmaker();
boolean validPos; boolean validPos;
//Do not spawn wandmaker on the entrance, in front of a door, or on bad terrain. //Do not spawn wandmaker on the entrance, in front of a door, or on bad terrain.
int tries = 0;
int dist = 2;
do { do {
validPos = true; validPos = true;
npc.pos = level.pointToCell(room.random((room.width() > 6 && room.height() > 6) ? 2 : 1)); if (tries > 30 && dist > 0){
tries = 0;
dist--;
}
npc.pos = level.pointToCell(room.random(dist));
if (npc.pos == level.entrance() || level.solid[npc.pos]){ if (npc.pos == level.entrance() || level.solid[npc.pos]){
validPos = false; validPos = false;
} }
@@ -318,6 +324,7 @@ public class Wandmaker extends NPC {
|| level.map[npc.pos] == Terrain.EMPTY_SP){ || level.map[npc.pos] == Terrain.EMPTY_SP){
validPos = false; validPos = false;
} }
tries++;
} while (!validPos); } while (!validPos);
level.mobs.add( npc ); level.mobs.add( npc );