Zones instead of road timers: journeys, flights, meeting stone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rope 2026-10-24 08:24:50 +01:00
parent 7150b2f89c
commit 0e396ee5d4
7 changed files with 363 additions and 230 deletions

View file

@ -275,6 +275,9 @@ MOBS = {
"princess": {"name": "Princess", "lv": (9, 9), "kind": "beast", "hp": 2.5, "dmg": 1.3, "rare": True,
"junk": "Princess's Collar"},
"porcine_entourage": {"name": "Porcine Entourage", "lv": (6, 7), "kind": "beast", "junk": "Chunk of Boar Meat"},
"young_wolf_pack": {"name": "Prowling Wolf", "lv": (9, 10), "kind": "beast", "hp": 0.7, "junk": "Wolf Fang"},
"mother_fang": {"name": "Mother Fang", "lv": (10, 10), "kind": "beast", "hp": 2.5, "dmg": 1.3, "rare": True,
"junk": "Silky Spider Leg"},
"riverpaw_gnoll": {"name": "Riverpaw Gnoll", "lv": (9, 10), "kind": "humanoid", "junk": "Gnoll Tooth"},
"riverpaw_mystic": {"name": "Riverpaw Mystic", "lv": (10, 10), "kind": "humanoid", "hp": 0.8,
"abilities": ["healing_wave"], "junk": "Mystic's Charm"},
@ -343,68 +346,70 @@ BOSS_HP, BOSS_DMG = 5.0, 2.8 # on top of the mob's own multipliers
# --- the world -------------------------------------------------------------
# Hunts are fights you can repeat. `pulls` are the packs a hunt draws from.
PLACES = {
"northshire_abbey": {"name": "Northshire Abbey", "zone": "Elwynn Forest", "hub": True, "lv": (1, 5),
"links": {"northshire_valley": 1, "northshire_vineyards": 1, "echo_ridge": 1,
"goldshire": 4}},
"northshire_valley": {"name": "Northshire Valley", "zone": "Elwynn Forest", "lv": (1, 3),
"hunts": {"young_wolf": [["young_wolf"]], "kobold_vermin": [["kobold_vermin"]]},
"links": {"northshire_abbey": 1}},
"northshire_vineyards": {"name": "Northshire Vineyards", "zone": "Elwynn Forest", "lv": (3, 5),
"hunts": {"defias_thug": [["defias_thug"]],
"garrick_padfoot": [["garrick_padfoot", "defias_thug"]]},
"links": {"northshire_abbey": 1}},
"echo_ridge": {"name": "Echo Ridge Mine", "zone": "Elwynn Forest", "lv": (3, 5),
"hunts": {"kobold_worker": [["kobold_worker"]], "kobold_laborer": [["kobold_laborer"]]},
"links": {"northshire_abbey": 1}},
"goldshire": {"name": "Goldshire", "zone": "Elwynn Forest", "hub": True, "lv": (5, 10),
"links": {"northshire_abbey": 4, "fargodeep": 2, "crystal_lake": 2, "brackwell": 3,
"forests_edge": 3, "sentinel_hill": 7}},
"fargodeep": {"name": "Fargodeep Mine", "zone": "Elwynn Forest", "lv": (6, 8),
"hunts": {"kobold_tunneler": [["kobold_tunneler"]],
"kobold_miner": [["kobold_miner"], ["kobold_miner", "kobold_tunneler"]]},
"links": {"goldshire": 2}},
"crystal_lake": {"name": "Crystal Lake", "zone": "Elwynn Forest", "lv": (7, 9),
"hunts": {"murloc_streamrunner": [["murloc_streamrunner"]],
"murloc_forager": [["murloc_forager"], ["murloc_forager", "murloc_streamrunner"]]},
"links": {"goldshire": 2}},
"brackwell": {"name": "Brackwell Pumpkin Patch", "zone": "Elwynn Forest", "lv": (8, 10),
"hunts": {"defias_bandit": [["defias_bandit"]],
"princess": [["princess", "porcine_entourage", "porcine_entourage"]]},
"links": {"goldshire": 3, "forests_edge": 2}},
"forests_edge": {"name": "Forest's Edge", "zone": "Elwynn Forest", "lv": (9, 11),
"hunts": {"riverpaw_gnoll": [["riverpaw_gnoll"], ["riverpaw_gnoll", "riverpaw_mystic"]],
"hogger": [["hogger"]]},
"links": {"goldshire": 3, "brackwell": 2, "sentinel_hill": 5}},
"sentinel_hill": {"name": "Sentinel Hill", "zone": "Westfall", "hub": True, "lv": (10, 20),
"links": {"goldshire": 7, "forests_edge": 5, "saldeans_farm": 2, "molsen_farm": 2,
"dust_plains": 3, "gold_coast": 3, "moonbrook": 3}},
"saldeans_farm": {"name": "Saldean's Farm", "zone": "Westfall", "lv": (10, 13),
"hunts": {"harvest_watcher": [["harvest_watcher"]],
"young_fleshripper": [["young_fleshripper"]], "goretusk": [["goretusk"]]},
"links": {"sentinel_hill": 2}},
"molsen_farm": {"name": "The Molsen Farm", "zone": "Westfall", "lv": (12, 14),
"hunts": {"defias_trapper": [["defias_trapper"]],
"defias_smuggler": [["defias_smuggler"], ["defias_smuggler", "defias_trapper"]]},
"links": {"sentinel_hill": 2}},
"dust_plains": {"name": "The Dust Plains", "zone": "Westfall", "lv": (14, 16),
"hunts": {"riverpaw_brute": [["riverpaw_brute"], ["riverpaw_brute", "riverpaw_herbalist"]]},
"links": {"sentinel_hill": 3, "dagger_hills": 2}},
"gold_coast": {"name": "Gold Coast Quarry", "zone": "Westfall", "lv": (15, 16),
"hunts": {"murloc_coastrunner": [["murloc_coastrunner"], ["murloc_coastrunner", "murloc_tidecaller"]]},
"links": {"sentinel_hill": 3}},
"moonbrook": {"name": "Moonbrook", "zone": "Westfall", "lv": (16, 18), "dungeon": "deadmines",
"hunts": {"defias_pillager": [["defias_pillager"], ["defias_looter", "defias_pillager"]],
"defias_looter": [["defias_looter"]]},
"links": {"sentinel_hill": 3, "dagger_hills": 2}},
"dagger_hills": {"name": "The Dagger Hills", "zone": "Westfall", "lv": (17, 19),
"hunts": {"defias_pathstalker": [["defias_pathstalker"]],
"defias_highwayman": [["defias_highwayman"], ["defias_highwayman", "defias_pathstalker"]]},
"links": {"moonbrook": 2, "dust_plains": 2}},
# A zone is one page: every hunt, quest giver and vendor in it is a tap away.
ZONES = {
"elwynn": {"name": "Elwynn Forest", "lv": (1, 10), "hub": "goldshire", "start": "northshire_abbey"},
"westfall": {"name": "Westfall", "lv": (10, 20), "hub": "sentinel_hill"},
}
# Crossing between zones is a journey: a fight at each stop along the road, in
# order (reversed going the other way), each with a chance of the road's rare.
ROADS = {
"westbrook": {
"name": "The Westbrook road", "zones": ("elwynn", "westfall"), "rare": "mother_fang", "rare_odds": 0.1,
"stops": [
{"name": "Westbrook Garrison", "pulls": [["riverpaw_gnoll"], ["young_wolf_pack", "young_wolf_pack"]]},
{"name": "The Westbrook bridge", "pulls": [["murloc_forager", "murloc_streamrunner"],
["riverpaw_gnoll", "riverpaw_mystic"]]},
{"name": "The Jansen Stead", "pulls": [["young_fleshripper"], ["harvest_watcher"]]},
],
},
}
FLIGHT_COST = 50 # copper to fly to a zone you've reached on foot
# Places are a zone's subzones. Hunts are fights you can repeat; `pulls` are the
# packs a hunt draws from.
PLACES = {
"northshire_abbey": {"name": "Northshire Abbey", "zone": "elwynn", "hub": True, "lv": (1, 5)},
"northshire_valley": {"name": "Northshire Valley", "zone": "elwynn", "lv": (1, 3),
"hunts": {"young_wolf": [["young_wolf"]], "kobold_vermin": [["kobold_vermin"]]}},
"northshire_vineyards": {"name": "Northshire Vineyards", "zone": "elwynn", "lv": (3, 5),
"hunts": {"defias_thug": [["defias_thug"]],
"garrick_padfoot": [["garrick_padfoot", "defias_thug"]]}},
"echo_ridge": {"name": "Echo Ridge Mine", "zone": "elwynn", "lv": (3, 5),
"hunts": {"kobold_worker": [["kobold_worker"]], "kobold_laborer": [["kobold_laborer"]]}},
"goldshire": {"name": "Goldshire", "zone": "elwynn", "hub": True, "lv": (5, 10)},
"fargodeep": {"name": "Fargodeep Mine", "zone": "elwynn", "lv": (6, 8),
"hunts": {"kobold_tunneler": [["kobold_tunneler"]],
"kobold_miner": [["kobold_miner"], ["kobold_miner", "kobold_tunneler"]]}},
"crystal_lake": {"name": "Crystal Lake", "zone": "elwynn", "lv": (7, 9),
"hunts": {"murloc_streamrunner": [["murloc_streamrunner"]],
"murloc_forager": [["murloc_forager"], ["murloc_forager", "murloc_streamrunner"]]}},
"brackwell": {"name": "Brackwell Pumpkin Patch", "zone": "elwynn", "lv": (8, 10),
"hunts": {"defias_bandit": [["defias_bandit"]],
"princess": [["princess", "porcine_entourage", "porcine_entourage"]]}},
"forests_edge": {"name": "Forest's Edge", "zone": "elwynn", "lv": (9, 11),
"hunts": {"riverpaw_gnoll": [["riverpaw_gnoll"], ["riverpaw_gnoll", "riverpaw_mystic"]],
"hogger": [["hogger"]]}},
"sentinel_hill": {"name": "Sentinel Hill", "zone": "westfall", "hub": True, "lv": (10, 20)},
"saldeans_farm": {"name": "Saldean's Farm", "zone": "westfall", "lv": (10, 13),
"hunts": {"harvest_watcher": [["harvest_watcher"]],
"young_fleshripper": [["young_fleshripper"]], "goretusk": [["goretusk"]]}},
"molsen_farm": {"name": "The Molsen Farm", "zone": "westfall", "lv": (12, 14),
"hunts": {"defias_trapper": [["defias_trapper"]],
"defias_smuggler": [["defias_smuggler"], ["defias_smuggler", "defias_trapper"]]}},
"dust_plains": {"name": "The Dust Plains", "zone": "westfall", "lv": (14, 16),
"hunts": {"riverpaw_brute": [["riverpaw_brute"], ["riverpaw_brute", "riverpaw_herbalist"]]}},
"gold_coast": {"name": "Gold Coast Quarry", "zone": "westfall", "lv": (15, 16),
"hunts": {"murloc_coastrunner": [["murloc_coastrunner"], ["murloc_coastrunner", "murloc_tidecaller"]]}},
"moonbrook": {"name": "Moonbrook", "zone": "westfall", "lv": (16, 18), "dungeon": "deadmines",
"hunts": {"defias_pillager": [["defias_pillager"], ["defias_looter", "defias_pillager"]],
"defias_looter": [["defias_looter"]]}},
"dagger_hills": {"name": "The Dagger Hills", "zone": "westfall", "lv": (17, 19),
"hunts": {"defias_pathstalker": [["defias_pathstalker"]],
"defias_highwayman": [["defias_highwayman"], ["defias_highwayman", "defias_pathstalker"]]}},
}
GRAVEYARD = {"Elwynn Forest": "goldshire", "Westfall": "sentinel_hill"}
DUNGEONS = {
"deadmines": {
@ -458,7 +463,7 @@ QUESTS = {
"name": "Report to Goldshire", "giver": "northshire_abbey", "npc": "Marshal McBride", "lv": 5,
"req": ["investigate_echo_ridge"], "ender": "goldshire", "ender_npc": "Marshal Dughan",
"text": "Take word of the kobolds to Marshal Dughan in Goldshire.",
"obj": [{"visit": "goldshire"}], "xp": 200, "copper": 50},
"obj": [], "xp": 200, "copper": 50},
"gold_dust_exchange": {
"name": "Gold Dust Exchange", "giver": "goldshire", "npc": "Remy \"Two Times\"", "lv": 7,
"text": "The kobolds at Fargodeep pan for gold dust. Bring me some, and no questions.",
@ -497,7 +502,7 @@ QUESTS = {
"name": "Report to Gryan Stoutmantle", "giver": "goldshire", "npc": "Marshal Dughan", "lv": 10,
"req": ["riverpaw_gnoll_bounty"], "ender": "sentinel_hill", "ender_npc": "Gryan Stoutmantle",
"text": "The People's Militia at Sentinel Hill needs every sword it can get.",
"obj": [{"visit": "sentinel_hill"}], "xp": 400, "copper": 100},
"obj": [{"visit": "westfall"}], "xp": 400, "copper": 100},
"the_killing_fields": {
"name": "The Killing Fields", "giver": "saldeans_farm", "npc": "Farmer Saldean", "lv": 12,
"text": "Harvest Watchers turned on us. Smash them.",