ModernUO/Distribution/Data/Spawns/shared/malas/Labyrinth.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

674 lines
12 KiB
JSON

[
{
"$type": "Spawner",
"guid": "0b34e749-7a4e-4dc8-8b84-6d6444d80525",
"name": "Spawner (407)",
"location": [
335,
1920,
0
],
"map": "Malas",
"count": 1,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 330,
"y1": 1915,
"z1": -128,
"x2": 341,
"y2": 1926,
"z2": 128
},
"walkingRange": 5,
"entries": [
{
"name": "Miasma",
"maxCount": 1,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "3ba58850-4bed-4935-8a37-e0c703f3b768",
"name": "Spawner (407)",
"location": [
366,
1928,
0
],
"map": "Malas",
"count": 8,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 346,
"y1": 1908,
"z1": -128,
"x2": 387,
"y2": 1949,
"z2": 128
},
"walkingRange": 20,
"entries": [
{
"name": "Drake",
"maxCount": 4,
"probability": 100
},
{
"name": "AirElemental",
"maxCount": 4,
"probability": 100
},
{
"name": "Rat",
"maxCount": 4,
"probability": 100
},
{
"name": "Snake",
"maxCount": 4,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "3d9f4f90-3f61-4dc1-9715-0d614c34c99c",
"name": "Spawner (407)",
"location": [
382,
1913,
0
],
"map": "Malas",
"count": 0,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 377,
"y1": 1908,
"z1": -128,
"x2": 388,
"y2": 1919,
"z2": 128
},
"walkingRange": 5,
"entries": [
{
"name": "Meraktus",
"maxCount": 0,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "46f54372-6b9c-4e33-9f35-99fc01204b59",
"name": "Spawner (407)",
"location": [
427,
1923,
5
],
"map": "Malas",
"count": 10,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 412,
"y1": 1908,
"z1": -128,
"x2": 443,
"y2": 1939,
"z2": 128
},
"walkingRange": 15,
"entries": [
{
"name": "MinotaurCaptain",
"maxCount": 6,
"probability": 100
},
{
"name": "Minotaur",
"maxCount": 6,
"probability": 100
},
{
"name": "MinotaurScout",
"maxCount": 6,
"probability": 100
},
{
"name": "Rat",
"maxCount": 4,
"probability": 100
},
{
"name": "TropicalBird",
"maxCount": 4,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "4a9e68d9-d730-402c-96cc-979f6d08fcfa",
"name": "Spawner (407)",
"location": [
357,
1898,
5
],
"map": "Malas",
"count": 1,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 347,
"y1": 1888,
"z1": -128,
"x2": 368,
"y2": 1909,
"z2": 128
},
"walkingRange": 10,
"entries": [
{
"name": "Rend",
"maxCount": 1,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "50f241e9-15cf-4561-9a1c-0fe8522d01cd",
"name": "Spawner (407)",
"location": [
415,
1897,
5
],
"map": "Malas",
"count": 1,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 410,
"y1": 1892,
"z1": -128,
"x2": 421,
"y2": 1903,
"z2": 128
},
"walkingRange": 5,
"entries": [
{
"name": "Pyre",
"maxCount": 1,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "613eb20c-bb8e-4f16-8561-bd839851b463",
"name": "Spawner (407)",
"location": [
390,
1883,
0
],
"map": "Malas",
"count": 8,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 380,
"y1": 1873,
"z1": -128,
"x2": 401,
"y2": 1894,
"z2": 128
},
"walkingRange": 10,
"entries": [
{
"name": "Eagle",
"maxCount": 8,
"probability": 100
},
{
"name": "Cat",
"maxCount": 8,
"probability": 100
},
{
"name": "Bird",
"maxCount": 8,
"probability": 100
},
{
"name": "TropicalBird",
"maxCount": 8,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "a451b30c-88b8-411d-99b6-3a66cdfd0cd5",
"name": "Spawner (407)",
"location": [
355,
1918,
0
],
"map": "Malas",
"count": 6,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 335,
"y1": 1898,
"z1": -128,
"x2": 376,
"y2": 1939,
"z2": 128
},
"walkingRange": 20,
"entries": [
{
"name": "Reptalon",
"maxCount": 6,
"probability": 100
},
{
"name": "Minotaur",
"maxCount": 6,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "aaca3ab0-5ea8-4af5-ac5f-c037d41b00fa",
"name": "Spawner (407)",
"location": [
347,
1888,
5
],
"map": "Malas",
"count": 4,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 327,
"y1": 1868,
"z1": -128,
"x2": 368,
"y2": 1909,
"z2": 128
},
"walkingRange": 20,
"entries": [
{
"name": "flurry",
"maxCount": 4,
"probability": 100
},
{
"name": "grim",
"maxCount": 4,
"probability": 100
},
{
"name": "mistral",
"maxCount": 4,
"probability": 100
},
{
"name": "tempest",
"maxCount": 4,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "af7b61de-563e-4559-9905-d5113f0e7c02",
"name": "Spawner (407)",
"location": [
392,
1917,
0
],
"map": "Malas",
"count": 20,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 372,
"y1": 1897,
"z1": -128,
"x2": 413,
"y2": 1938,
"z2": 128
},
"walkingRange": 20,
"entries": [
{
"name": "MinotaurScout",
"maxCount": 11,
"probability": 100
},
{
"name": "Minotaur",
"maxCount": 11,
"probability": 100
},
{
"name": "MinotaurCaptain",
"maxCount": 11,
"probability": 100
},
{
"name": "Squirrel",
"maxCount": 9,
"probability": 100
},
{
"name": "TropicalBird",
"maxCount": 9,
"probability": 100
},
{
"name": "Bird",
"maxCount": 9,
"probability": 100
},
{
"name": "Cat",
"maxCount": 9,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "b8196e8f-9f8f-4362-b188-6bb06dbfea9d",
"name": "Spawner (407)",
"location": [
336,
1891,
0
],
"map": "Malas",
"count": 5,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 324,
"y1": 1879,
"z1": -128,
"x2": 349,
"y2": 1904,
"z2": 128
},
"walkingRange": 12,
"entries": [
{
"name": "Minotaur",
"maxCount": 5,
"probability": 100
},
{
"name": "MinotaurScout",
"maxCount": 5,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "b9da636f-3e98-4924-a7da-8ac3d0141e5f",
"name": "Spawner (407)",
"location": [
1742,
990,
-84
],
"map": "Malas",
"count": 10,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 1730,
"y1": 978,
"z1": -128,
"x2": 1755,
"y2": 1003,
"z2": 128
},
"walkingRange": 12,
"entries": [
{
"name": "Scorpion",
"maxCount": 6,
"probability": 100
},
{
"name": "Snake",
"maxCount": 4,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "c1e202ec-c6ba-4c76-8a26-29767ae27907",
"name": "Spawner (407)",
"location": [
346,
1910,
0
],
"map": "Malas",
"count": 6,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 334,
"y1": 1898,
"z1": -128,
"x2": 359,
"y2": 1923,
"z2": 128
},
"walkingRange": 12,
"entries": [
{
"name": "TropicalBird",
"maxCount": 6,
"probability": 100
},
{
"name": "Bird",
"maxCount": 6,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "ebe544f9-9a54-4822-bb37-ee11ba1059db",
"name": "Spawner (407)",
"location": [
384,
1932,
10
],
"map": "Malas",
"count": 5,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 374,
"y1": 1922,
"z1": -128,
"x2": 395,
"y2": 1943,
"z2": 128
},
"walkingRange": 10,
"entries": [
{
"name": "Minotaur",
"maxCount": 3,
"probability": 100
},
{
"name": "Snake",
"maxCount": 2,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "eea9dc24-23e1-4198-8dbc-b22bddb5a71c",
"name": "Spawner (407)",
"location": [
1740,
990,
-80
],
"map": "Malas",
"count": 1,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 1725,
"y1": 975,
"z1": -128,
"x2": 1756,
"y2": 1006,
"z2": 128
},
"walkingRange": 15,
"entries": [
{
"name": "WanderingHealer",
"maxCount": 1,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "ef581668-95b6-4e1b-b43f-06e805e2e646",
"name": "Spawner (407)",
"location": [
348,
1948,
0
],
"map": "Malas",
"count": 16,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 333,
"y1": 1933,
"z1": -128,
"x2": 364,
"y2": 1964,
"z2": 128
},
"walkingRange": 15,
"entries": [
{
"name": "TropicalBird",
"maxCount": 12,
"probability": 100
},
{
"name": "Eagle",
"maxCount": 12,
"probability": 100
},
{
"name": "Rat",
"maxCount": 12,
"probability": 100
},
{
"name": "Bird",
"maxCount": 12,
"probability": 100
},
{
"name": "MinotaurScout",
"maxCount": 4,
"probability": 100
}
]
},
{
"$type": "Spawner",
"guid": "f5972024-9852-4b8d-96a2-bf1afc05c588",
"name": "Spawner (407)",
"location": [
346,
1959,
0
],
"map": "Malas",
"count": 4,
"minDelay": "00:05:00",
"maxDelay": "00:10:00",
"team": 0,
"spawnBounds": {
"x1": 336,
"y1": 1949,
"z1": -128,
"x2": 357,
"y2": 1970,
"z2": 128
},
"walkingRange": 10,
"entries": [
{
"name": "Squirrel",
"maxCount": 4,
"probability": 100
},
{
"name": "Rat",
"maxCount": 4,
"probability": 100
}
]
}
]