Phase 8: the quest book, generated from docs/quests.yaml

- tools/quests.py writes pack/config/ftbquests/quests/ in FTB Quests 2101's
  format (data.snbt, chapters/*.snbt, texts in lang/en_us.snbt) with ids
  derived from the YAML names, so progress survives regeneration. Flexible
  progression, no lock icons, no rewards (Adrian, 2026-11-03). tools/build.py
  runs it.
- docs/quests.yaml: 18 chapters, 74 quests. Getting Started; one chapter per
  zone and the End from a zone template (reach it, catch three of its
  Pokemon, mine its ores, beat its guardian) plus chapter extras (Mire
  Waders, Eyes of Ender, Eternatus); Pokemon Machines; Base and Jobs.
- Node positions: --pull reads them from an FTB Quests folder into the
  layout block (only moved nodes); tools/prism_instance.py pulls from the
  instance before each sync and rebuilds if something moved.
- The pack's own events as hidden advancements (cobblesurvival:events/...),
  granted by QuestEvents: zone reached, guardian beaten, machine filled, End
  boss beaten.
- Self-tests quest_book_loads and quest_events_mark_zones; the guardian and
  furnace tests check their events. Self-tests and island check pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
claudeandClaude Opus 5.5 committed 2026-11-03 10:57:35 +01:00
1 parent 9fb5e9895e
commit c5d1cf93f4
70 files changed
+3665 -7

No files matched your search

@@ -0,0 +1,108 @@
{
default_hide_dependency_lines: false
default_quest_shape: ""
filename: "westmarch"
group: ""
icon: {
id: "cobblemon:thunder_stone"
}
id: "59ECDC0F93A836A2"
order_index: 5
quest_links: [ ]
quests: [
{
icon: {
id: "minecraft:filled_map"
}
id: "0644BAB8C69CE8D0"
tasks: [
{
advancement: "cobblesurvival:events/zone/westmarch"
criterion: ""
id: "03F5C5D2587C6503"
type: "advancement"
}
]
x: 0.0d
y: 0.0d
}
{
dependencies: ["0644BAB8C69CE8D0"]
icon: {
id: "cobblemon:poke_ball"
}
id: "66F360A95FD42556"
tasks: [
{
action: "catch"
amount: 3L
biome: ""
dex_progress: ""
dimension: ""
form: ""
gender: ""
id: "7E55DFAB964DF237"
max_level: 0
min_level: 0
natures: ""
poke_ball_used: ""
pokemon: "cobblemon:appletun,cobblemon:applin,cobblemon:araquanid,cobblemon:breloom,cobblemon:buneary,cobblemon:corphish,cobblemon:deerling,cobblemon:dewpider,cobblemon:dipplin,cobblemon:dratini,cobblemon:flabebe,cobblemon:flapple,cobblemon:floette,cobblemon:gabite,cobblemon:gible,cobblemon:goomy,cobblemon:greedent,cobblemon:gyarados,cobblemon:lilligant,cobblemon:magikarp,cobblemon:maushold,cobblemon:munchlax,cobblemon:nickit,cobblemon:nuzleaf,cobblemon:petilil,cobblemon:phantump,cobblemon:pichu,cobblemon:pikachu,cobblemon:scyther,cobblemon:seedot,cobblemon:sewaddle,cobblemon:shroomish,cobblemon:skwovet,cobblemon:stunky,cobblemon:swadloon,cobblemon:tandemaus,cobblemon:teddiursa,cobblemon:thievul"
pokemon_type: ""
region: ""
shiny: false
time_max: 0L
time_min: 0L
type: "cobblemon_tasks:cobblemon_task"
}
]
x: 2.0d
y: -0.75d
}
{
dependencies: ["0644BAB8C69CE8D0"]
icon: {
id: "minecraft:iron_pickaxe"
}
id: "5F224979C849BDB1"
tasks: [
{
count: 8L
id: "5A7B474658E6A223"
item: {
count: 1
id: "minecraft:raw_iron"
}
type: "item"
}
{
count: 8L
id: "28C263298DD74549"
item: {
count: 1
id: "cobblemon:thunder_stone"
}
type: "item"
}
]
x: 2.0d
y: 0.75d
}
{
dependencies: ["66F360A95FD42556"]
icon: {
id: "minecraft:netherite_sword"
}
id: "51F4867542A2849E"
tasks: [
{
advancement: "cobblesurvival:events/guardian/westmarch"
criterion: ""
id: "16DC8BE1DDE7B0D7"
type: "advancement"
}
]
x: 4.0d
y: 0.0d
}
]
}