ModernUO/Distribution/Data/Spawns/shared/felucca/OrcCaves.json
Kamron Batman 2f8a7afa57 chore(spawners): migrate spawn data to $type discriminator
- Rename "type" -> "$type" (first key, required for STJ polymorphism) in
  all 109 spawn JSON files (5,612 records).
- Convert "homeRange" + "location" -> "spawnBounds" object, dropping homeRange.
  Runtime keeps reading homeRange so un-migrated/external files still load.
- Add BoundsEquivalenceTests (hr=0/1/3/7) validating that the script's toBounds
  formula produces the same Rectangle3D as the runtime homeRange path.
- Add MigratedDataLoadTests loading a real migrated file as List<SpawnerDto>
  and round-tripping each DTO through ToSpawner().
- Add tools/spawner-json-migrate/migrate.mjs (offline Node script).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 16:17:35 -07:00

671 lines
12 KiB
JSON

[
{
"$type": "Spawner",
"guid": "01ae830b-c7f9-4857-8a6b-4bacca6758ad",
"name": "Spawner (212)",
"location": [
5356,
1304,
0
],
"map": "Felucca",
"count": 4,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5348,
"y1": 1296,
"z1": -128,
"x2": 5365,
"y2": 1313,
"z2": 128
},
"walkingRange": 10,
"entries": [
{
"name": "OrcBomber",
"maxCount": 1,
"probability": 100
},
{
"name": "OrcCaptain",
"maxCount": 1,
"probability": 100
},
{
"name": "Orc",
"maxCount": 2,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "03b59250-db54-481c-85f4-1d0b8b433252",
"name": "Spawner (212)",
"location": [
5153,
1971,
0
],
"map": "Felucca",
"count": 5,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5145,
"y1": 1963,
"z1": -128,
"x2": 5162,
"y2": 1980,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "Orc",
"maxCount": 5,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "0e858157-adc4-4963-a34b-101fefb109d1",
"name": "Spawner (212)",
"location": [
5308,
1372,
0
],
"map": "Felucca",
"count": 1,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5300,
"y1": 1364,
"z1": -128,
"x2": 5317,
"y2": 1381,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "Noble",
"maxCount": 1,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "1a6833ee-9e32-4900-ad6e-87926e8fb427",
"name": "Spawner (212)",
"location": [
5316,
1332,
0
],
"map": "Felucca",
"count": 3,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5308,
"y1": 1324,
"z1": -128,
"x2": 5325,
"y2": 1341,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "GiantRat",
"maxCount": 3,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "1bff583d-3643-4e60-9a44-e3dea6882a02",
"name": "Spawner (212)",
"location": [
5308,
2005,
0
],
"map": "Felucca",
"count": 5,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5296,
"y1": 1993,
"z1": -128,
"x2": 5321,
"y2": 2018,
"z2": 128
},
"walkingRange": 12,
"entries": [
{
"name": "OrcBrute",
"maxCount": 1,
"probability": 100
},
{
"name": "Orc",
"maxCount": 4,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "2d24f1f9-20ff-4ee1-8f31-8304e2e4822d",
"name": "Spawner (212)",
"location": [
5310,
1969,
0
],
"map": "Felucca",
"count": 4,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5298,
"y1": 1957,
"z1": -128,
"x2": 5323,
"y2": 1982,
"z2": 128
},
"walkingRange": 12,
"entries": [
{
"name": "OrcBomber",
"maxCount": 2,
"probability": 100
},
{
"name": "Orc",
"maxCount": 2,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "40c5eacc-9b5d-49f4-b13d-c605a32f6816",
"name": "Spawner (212)",
"location": [
5354,
1332,
0
],
"map": "Felucca",
"count": 4,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5346,
"y1": 1324,
"z1": -128,
"x2": 5363,
"y2": 1341,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "OrcCaptain",
"maxCount": 1,
"probability": 100
},
{
"name": "OrcishLord",
"maxCount": 1,
"probability": 100
},
{
"name": "OrcishMage",
"maxCount": 1,
"probability": 100
},
{
"name": "OrcBomber",
"maxCount": 1,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "471bb8b3-f768-4654-a3ae-9517ecc8dd45",
"name": "Spawner (212)",
"location": [
5317,
1309,
0
],
"map": "Felucca",
"count": 6,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5309,
"y1": 1301,
"z1": -128,
"x2": 5326,
"y2": 1318,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "OrcishLord",
"maxCount": 1,
"probability": 100
},
{
"name": "OrcishMage",
"maxCount": 2,
"probability": 100
},
{
"name": "OrcBomber",
"maxCount": 1,
"probability": 100
},
{
"name": "Orc",
"maxCount": 2,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "5145b262-72b3-4bf2-8a73-91efe509ce18",
"name": "Spawner (212)",
"location": [
5144,
1960,
0
],
"map": "Felucca",
"count": 3,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5136,
"y1": 1952,
"z1": -128,
"x2": 5153,
"y2": 1969,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "OrcishLord",
"maxCount": 3,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "572a2fac-11c7-4583-837a-1b03eae15f85",
"name": "Spawner (212)",
"location": [
5146,
1995,
0
],
"map": "Felucca",
"count": 3,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5138,
"y1": 1987,
"z1": -128,
"x2": 5155,
"y2": 2004,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "Orc",
"maxCount": 1,
"probability": 100
},
{
"name": "OrcCaptain",
"maxCount": 1,
"probability": 100
},
{
"name": "OrcishLord",
"maxCount": 1,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "593ee3b4-df42-426d-8976-faced7cd2435",
"name": "Spawner (212)",
"location": [
5302,
1355,
0
],
"map": "Felucca",
"count": 4,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5294,
"y1": 1347,
"z1": -128,
"x2": 5311,
"y2": 1364,
"z2": 128
},
"walkingRange": 12,
"entries": [
{
"name": "OrcishLord",
"maxCount": 1,
"probability": 100
},
{
"name": "Orc",
"maxCount": 3,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "70960aad-63ab-4bc2-9784-0ae5db883fe1",
"name": "Spawner (212)",
"location": [
5331,
1346,
0
],
"map": "Felucca",
"count": 3,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5323,
"y1": 1338,
"z1": -128,
"x2": 5340,
"y2": 1355,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "DireWolf",
"maxCount": 3,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "81a40400-c93d-42f3-8f19-0e9492198a82",
"name": "Spawner (212)",
"location": [
5292,
1316,
0
],
"map": "Felucca",
"count": 2,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5284,
"y1": 1308,
"z1": -128,
"x2": 5301,
"y2": 1325,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "Corpser",
"maxCount": 2,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "a1dbbaf6-03e3-42f2-ba42-35d88349fd0c",
"name": "Spawner (212)",
"location": [
5153,
1961,
0
],
"map": "Felucca",
"count": 2,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5145,
"y1": 1953,
"z1": -128,
"x2": 5162,
"y2": 1970,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "DireWolf",
"maxCount": 2,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "a70f186a-94a1-4f54-963f-5c039c7d4006",
"name": "Spawner (212)",
"location": [
5348,
2011,
0
],
"map": "Felucca",
"count": 5,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5338,
"y1": 2001,
"z1": -128,
"x2": 5359,
"y2": 2022,
"z2": 128
},
"walkingRange": 15,
"entries": [
{
"name": "OrcBomber",
"maxCount": 1,
"probability": 100
},
{
"name": "EarthElemental",
"maxCount": 4,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "d01dca90-9fac-438e-9660-a93e9df7fc58",
"name": "Spawner (212)",
"location": [
5281,
2029,
0
],
"map": "Felucca",
"count": 3,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5273,
"y1": 2021,
"z1": -128,
"x2": 5290,
"y2": 2038,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "Orc",
"maxCount": 3,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "d313d866-1199-45fc-a72c-018d146bbe8c",
"name": "Spawner (212)",
"location": [
5300,
1314,
0
],
"map": "Felucca",
"count": 6,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5292,
"y1": 1306,
"z1": -128,
"x2": 5309,
"y2": 1323,
"z2": 128
},
"walkingRange": 10,
"entries": [
{
"name": "Orc",
"maxCount": 3,
"probability": 100
},
{
"name": "OrcishMage",
"maxCount": 1,
"probability": 100
},
{
"name": "OrcishLord",
"maxCount": 2,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "ee800978-f2bf-47e0-8e19-c7f5fe0b33bc",
"name": "Spawner (212)",
"location": [
5332,
1365,
0
],
"map": "Felucca",
"count": 3,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5324,
"y1": 1357,
"z1": -128,
"x2": 5341,
"y2": 1374,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "Orc",
"maxCount": 3,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "fe0be93b-5f45-40b0-9169-16df378c0e6e",
"name": "Spawner (212)",
"location": [
5141,
1968,
0
],
"map": "Felucca",
"count": 3,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 5133,
"y1": 1960,
"z1": -128,
"x2": 5150,
"y2": 1977,
"z2": 128
},
"walkingRange": 8,
"entries": [
{
"name": "OrcCaptain",
"maxCount": 3,
"probability": 100
}
]
}
]