feat: Deduplicates spawns. Adds spawnbounds where needed. (#2299)

### Summary

- Add z-restricted spawnBounds to 35 spawners across 15 files to prevent creatures from spawning on incorrect floors
- Building spawners (Pyramid, Fire dungeon, Shame, Vendors) use minZ = spawner_z to prevent spawning below
- Ground level spawners (Graveyards, Outdoors, Tokuno) use minZ = -128 for natural terrain variation
- Multi-floor structures in Ilshenar use floor-specific Z restrictions

### Test plan

- Verify spawners in Fire dungeon building don't spawn creatures on floors below
- Verify Pyramid spawners keep creatures on their respective levels
- Verify ground level spawners (graveyards, outdoors) still spawn correctly on terrain
- Check Ilshenar multi-floor structure spawns creatures on correct floors
This commit is contained in:
Kamron Batman 2025-12-30 00:21:03 -08:00 • committed by GitHub
parent 598223703f
commit 723e1a836d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
184 changed files with 83110 additions and 175383 deletions

View file

@ -1,4 +1,4 @@
[
[
{
"type": "Spawner",
"guid": "35fb2ebe-b2e6-4a64-af3a-ce1eaacd9a54",
@ -11,7 +11,9 @@
"team": 0,
"homeRange": 15,
"walkingRange": 15,
"entries": [{ "name": "Hydra", "maxCount": 8, "probability": 100 }]
"entries": [
{ "name": "Hydra", "maxCount": 8, "probability": 100 }
]
},
{
"type": "Spawner",
@ -25,7 +27,9 @@
"team": 0,
"homeRange": 5,
"walkingRange": 5,
"entries": [{ "name": "MaddeningHorror", "maxCount": 1, "probability": 100 }]
"entries": [
{ "name": "MaddeningHorror", "maxCount": 1, "probability": 100 }
]
},
{
"type": "Spawner",
@ -39,7 +43,9 @@
"team": 0,
"homeRange": 20,
"walkingRange": 20,
"entries": [{ "name": "SlasherOfVeils", "maxCount": 1, "probability": 100 }]
"entries": [
{ "name": "SlasherOfVeils", "maxCount": 1, "probability": 100 }
]
},
{
"type": "Spawner",
@ -53,7 +59,9 @@
"team": 0,
"homeRange": 10,
"walkingRange": 10,
"entries": [{ "name": "StygianDragon", "maxCount": 1, "probability": 100 }]
"entries": [
{ "name": "StygianDragon", "maxCount": 1, "probability": 100 }
]
},
{
"type": "Spawner",
@ -125,7 +133,9 @@
"team": 0,
"homeRange": 18,
"walkingRange": 18,
"entries": [{ "name": "ClockworkScorpion", "maxCount": 16, "probability": 100 }]
"entries": [
{ "name": "ClockworkScorpion", "maxCount": 16, "probability": 100 }
]
},
{
"type": "Spawner",
@ -157,7 +167,9 @@
"team": 0,
"homeRange": 20,
"walkingRange": 20,
"entries": [{ "name": "ClanRibbonPlagueRat", "maxCount": 15, "probability": 100 }]
"entries": [
{ "name": "ClanRibbonPlagueRat", "maxCount": 15, "probability": 100 }
]
},
{
"type": "Spawner",
@ -189,7 +201,9 @@
"team": 0,
"homeRange": 20,
"walkingRange": 20,
"entries": [{ "name": "ClanScratchSavageWolf", "maxCount": 18, "probability": 100 }]
"entries": [
{ "name": "ClanScratchSavageWolf", "maxCount": 18, "probability": 100 }
]
},
{
"type": "Spawner",
@ -318,7 +332,9 @@
"team": 0,
"homeRange": 15,
"walkingRange": 15,
"entries": [{ "name": "Medusa", "maxCount": 1, "probability": 100 }]
"entries": [
{ "name": "Medusa", "maxCount": 1, "probability": 100 }
]
},
{
"type": "Spawner",