Menu categories for farming, cooking, prayer; lists sorted by level
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
e825518c5e
commit
2ca90c43c0
2 changed files with 27 additions and 23 deletions
38
game.py
38
game.py
|
|
@ -393,15 +393,15 @@ def _tiered_actions() -> list[dict]:
|
||||||
actions.append(_action(fish_id, "fishing", verb, level, [25, 35, 45, 55, 65, 80][tier],
|
actions.append(_action(fish_id, "fishing", verb, level, [25, 35, 45, 55, 65, 80][tier],
|
||||||
[6, 15, 28, 45, 62, 85][tier], outputs={raw[0]: 1}))
|
[6, 15, 28, 45, 62, 85][tier], outputs={raw[0]: 1}))
|
||||||
actions.append(_action(COOK_IDS[raw[0]], "cooking", cooked[1], level, [20, 30, 35, 40, 45, 50][tier],
|
actions.append(_action(COOK_IDS[raw[0]], "cooking", cooked[1], level, [20, 30, 35, 40, 45, 50][tier],
|
||||||
[6, 15, 27, 42, 58, 80][tier], {raw[0]: 1, "logs": 1}, {cooked[0]: 1}))
|
[6, 15, 27, 42, 58, 80][tier], {raw[0]: 1, "logs": 1}, {cooked[0]: 1}, group="Fish"))
|
||||||
return actions
|
return actions
|
||||||
|
|
||||||
|
|
||||||
ACTIONS = [
|
ACTIONS = [
|
||||||
_action("mine_stone", "mining", "Quarry stone", 1, 20, 5, outputs={"stone": 1}),
|
_action("mine_stone", "mining", "Quarry stone", 1, 20, 5, outputs={"stone": 1}),
|
||||||
_action("farm_wheat", "farming", "Grow wheat", 1, 25, 6, outputs={"wheat": 2}),
|
_action("farm_wheat", "farming", "Grow wheat", 1, 25, 6, outputs={"wheat": 2}, group="Crops"),
|
||||||
_action("farm_veg", "farming", "Grow vegetables", 12, 35, 13, outputs={"vegetables": 2}),
|
_action("farm_veg", "farming", "Grow vegetables", 12, 35, 13, outputs={"vegetables": 2}, group="Crops"),
|
||||||
*[_action(f"grow_{herb}", "farming", f"Grow {name.lower()}", level, seconds, xp, outputs={herb: 1})
|
*[_action(f"grow_{herb}", "farming", f"Grow {name.lower()}", level, seconds, xp, outputs={herb: 1}, group="Herbs")
|
||||||
for herb, name, _icon, level, seconds, xp, _value in HERBS],
|
for herb, name, _icon, level, seconds, xp, _value in HERBS],
|
||||||
*[_action(f"brew_{potion}", "herblore", name, level, 30 + level // 3, round(4 + level * 1.6),
|
*[_action(f"brew_{potion}", "herblore", name, level, 30 + level // 3, round(4 + level * 1.6),
|
||||||
{herb: 1, second: 1}, {potion: 1}, group=f"Tier {ROMAN[POTION_TIER[potion]]}")
|
{herb: 1, second: 1}, {potion: 1}, group=f"Tier {ROMAN[POTION_TIER[potion]]}")
|
||||||
|
|
@ -412,18 +412,15 @@ ACTIONS = [
|
||||||
_action("hunt_bear", "hunting", "Hunt bears", 40, 60, 48, outputs={"raw_meat": 3, "bear_pelt": 1}),
|
_action("hunt_bear", "hunting", "Hunt bears", 40, 60, 48, outputs={"raw_meat": 3, "bear_pelt": 1}),
|
||||||
*_tiered_actions(),
|
*_tiered_actions(),
|
||||||
_action("smith_arrows", "smithing", "Arrows", 5, 30, 10,
|
_action("smith_arrows", "smithing", "Arrows", 5, 30, 10,
|
||||||
{"copper_bar": 1, "logs": 1, "feathers": 2}, {"arrows": 15}, group="Bars"),
|
{"copper_bar": 1, "logs": 1, "feathers": 2}, {"arrows": 15}, group="Copper"),
|
||||||
_action("lw_studded", "leatherworking", "Studded jerkin", 25, 50, 40,
|
_action("lw_studded", "leatherworking", "Studded jerkin", 25, 50, 40,
|
||||||
{"leather": 4, "iron_bar": 1}, {"studded_body": 1}, group="Leather"),
|
{"leather": 4, "iron_bar": 1}, {"studded_body": 1}, group="Leather"),
|
||||||
_action("labour", "construction", "Work on the building site", 1, 30, 10, special="labour"),
|
_action("labour", "construction", "Work on the building site", 1, 30, 10, special="labour"),
|
||||||
_action("twist_rope", "construction", "Twist rope", 5, 30, 10, {"flax": 3}, {"rope": 1}, group="Supplies"),
|
_action("twist_rope", "construction", "Twist rope", 5, 30, 10, {"flax": 3}, {"rope": 1}, group="Supplies"),
|
||||||
_action("grow_thatch", "farming", "Cut thatch reeds", 3, 30, 7, outputs={"thatch": 3}),
|
_action("grow_thatch", "farming", "Cut thatch reeds", 3, 30, 7, outputs={"thatch": 3}, group="Materials"),
|
||||||
_action("grow_flax", "farming", "Grow flax", 10, 35, 11, outputs={"flax": 3}),
|
_action("grow_flax", "farming", "Grow flax", 10, 35, 11, outputs={"flax": 3}, group="Materials"),
|
||||||
_action("boil_glue", "leatherworking", "Boil hide glue", 5, 30, 10, {"hide": 1, "logs": 1}, {"hide_glue": 2},
|
_action("boil_glue", "leatherworking", "Boil hide glue", 5, 30, 10, {"hide": 1, "logs": 1}, {"hide_glue": 2},
|
||||||
group="Tanning"),
|
group="Tanning"),
|
||||||
_action("pack_bread", "cooking", "Pack bread rations", 1, 20, 6, {"bread": 2}, {"provisions": 1}),
|
|
||||||
_action("pack_meat", "cooking", "Pack meat rations", 5, 20, 7, {"cooked_meat": 2}, {"provisions": 1}),
|
|
||||||
_action("pack_fish", "cooking", "Pack fish rations", 1, 20, 6, {"cooked_shrimp": 2}, {"provisions": 1}),
|
|
||||||
*[_action(f"saw_{plank}", "construction", f"Saw {name.lower()}s", TIER_LEVELS[tier], 25 + 3 * tier,
|
*[_action(f"saw_{plank}", "construction", f"Saw {name.lower()}s", TIER_LEVELS[tier], 25 + 3 * tier,
|
||||||
[6, 14, 22, 32, 44, 58][tier], {TREES[tier][0]: 2}, {plank: 1}, group="Planks")
|
[6, 14, 22, 32, 44, 58][tier], {TREES[tier][0]: 2}, {plank: 1}, group="Planks")
|
||||||
for tier, (plank, name) in enumerate(PLANKS)],
|
for tier, (plank, name) in enumerate(PLANKS)],
|
||||||
|
|
@ -431,10 +428,13 @@ ACTIONS = [
|
||||||
_action("mason_cut_stone", "construction", "Cut stone", 10, 30, 12, {"stone": 3}, {"cut_stone": 1}, group="Masonry"),
|
_action("mason_cut_stone", "construction", "Cut stone", 10, 30, 12, {"stone": 3}, {"cut_stone": 1}, group="Masonry"),
|
||||||
_action("mason_beam", "construction", "Reinforced beam", 20, 45, 30,
|
_action("mason_beam", "construction", "Reinforced beam", 20, 45, 30,
|
||||||
{"oak_logs": 2, "iron_nails": 5}, {"beam": 1}, group="Masonry"),
|
{"oak_logs": 2, "iron_nails": 5}, {"beam": 1}, group="Masonry"),
|
||||||
_action("cook_bread", "cooking", "Bread", 1, 20, 5, {"wheat": 2, "logs": 1}, {"bread": 1}),
|
_action("cook_bread", "cooking", "Bread", 1, 20, 5, {"wheat": 2, "logs": 1}, {"bread": 1}, group="Meals"),
|
||||||
_action("cook_meat", "cooking", "Cooked meat", 5, 20, 7, {"raw_meat": 1, "logs": 1}, {"cooked_meat": 1}),
|
_action("cook_meat", "cooking", "Cooked meat", 5, 20, 7, {"raw_meat": 1, "logs": 1}, {"cooked_meat": 1}, group="Meals"),
|
||||||
_action("cook_stew", "cooking", "Stew", 15, 35, 16,
|
_action("cook_stew", "cooking", "Stew", 15, 35, 16,
|
||||||
{"raw_meat": 1, "vegetables": 2, "logs": 1}, {"stew": 2}),
|
{"raw_meat": 1, "vegetables": 2, "logs": 1}, {"stew": 2}, group="Meals"),
|
||||||
|
_action("pack_bread", "cooking", "Pack bread rations", 1, 20, 6, {"bread": 2}, {"provisions": 1}, group="Rations"),
|
||||||
|
_action("pack_meat", "cooking", "Pack meat rations", 5, 20, 7, {"cooked_meat": 2}, {"provisions": 1}, group="Rations"),
|
||||||
|
_action("pack_fish", "cooking", "Pack fish rations", 1, 20, 6, {"cooked_shrimp": 2}, {"provisions": 1}, group="Rations"),
|
||||||
_action("drill_militia", "combat", "Drill the militia", 1, 60, 12, special="drill"),
|
_action("drill_militia", "combat", "Drill the militia", 1, 60, 12, special="drill"),
|
||||||
_action("fight_wolves", "combat", "Wolves in the woods", 1, 60, 14, difficulty=2, damage=2, gold=2,
|
_action("fight_wolves", "combat", "Wolves in the woods", 1, 60, 14, difficulty=2, damage=2, gold=2,
|
||||||
drops=[["raw_meat", 1, 0.6], ["hide", 1, 0.5], ["bones", 1, 1.0]]),
|
drops=[["raw_meat", 1, 0.6], ["hide", 1, 0.5], ["bones", 1, 1.0]]),
|
||||||
|
|
@ -454,15 +454,15 @@ ACTIONS = [
|
||||||
drops=[["red_dragonhide", 2, 0.9], ["rune_bar", 1, 0.1], ["dragon_bones", 2, 1.0]]),
|
drops=[["red_dragonhide", 2, 0.9], ["rune_bar", 1, 0.1], ["dragon_bones", 2, 1.0]]),
|
||||||
_action("sabotage", "combat", "Sabotage the bandit camp", 10, 120, 35, difficulty=12, damage=10,
|
_action("sabotage", "combat", "Sabotage the bandit camp", 10, 120, 35, difficulty=12, damage=10,
|
||||||
special="sabotage"),
|
special="sabotage"),
|
||||||
_action("bury_bones", "prayer", "Bury bones", 1, 10, 4, {"bones": 1}, special="bury", pp=2),
|
_action("bury_bones", "prayer", "Bury bones", 1, 10, 4, {"bones": 1}, special="bury", pp=2, group="Bury"),
|
||||||
_action("bury_big_bones", "prayer", "Bury big bones", 15, 10, 15, {"big_bones": 1}, special="bury", pp=6),
|
_action("bury_big_bones", "prayer", "Bury big bones", 15, 10, 15, {"big_bones": 1}, special="bury", pp=6, group="Bury"),
|
||||||
_action("bury_dragon_bones", "prayer", "Bury dragon bones", 40, 12, 72, {"dragon_bones": 1}, special="bury", pp=20),
|
_action("bury_dragon_bones", "prayer", "Bury dragon bones", 40, 12, 72, {"dragon_bones": 1}, special="bury", pp=20, group="Bury"),
|
||||||
_action("offer_bones", "prayer", "Offer bones at the temple", 1, 12, 7, {"bones": 1}, special="offer",
|
_action("offer_bones", "prayer", "Offer bones at the temple", 1, 12, 7, {"bones": 1}, special="offer",
|
||||||
devotion=2, city={"temple": 1}),
|
devotion=2, city={"temple": 1}, group="Offer at the temple"),
|
||||||
_action("offer_big_bones", "prayer", "Offer big bones", 15, 12, 25, {"big_bones": 1}, special="offer",
|
_action("offer_big_bones", "prayer", "Offer big bones", 15, 12, 25, {"big_bones": 1}, special="offer",
|
||||||
devotion=6, city={"temple": 1}),
|
devotion=6, city={"temple": 1}, group="Offer at the temple"),
|
||||||
_action("offer_dragon_bones", "prayer", "Offer dragon bones", 40, 14, 110, {"dragon_bones": 1}, special="offer",
|
_action("offer_dragon_bones", "prayer", "Offer dragon bones", 40, 14, 110, {"dragon_bones": 1}, special="offer",
|
||||||
devotion=20, city={"temple": 2}),
|
devotion=20, city={"temple": 2}, group="Offer at the temple"),
|
||||||
_action("recon_roads", "reconnaissance", "Scout the roads", 1, 60, 12, special="recon", recon=1),
|
_action("recon_roads", "reconnaissance", "Scout the roads", 1, 60, 12, special="recon", recon=1),
|
||||||
_action("recon_camps", "reconnaissance", "Shadow the war bands", 15, 90, 28, special="recon", recon=2),
|
_action("recon_camps", "reconnaissance", "Shadow the war bands", 15, 90, 28, special="recon", recon=2),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -349,13 +349,17 @@ function skillPage(id) {
|
||||||
if (id === "reconnaissance") html += `<div class="panel small muted">Reconnaissance on a coming threat raises its intel. Each level takes more than the last, a bigger band takes longer to read, and the sharpest news (the exact day and their camp) only comes in the last hours before they strike. The spymaster's guild adds to every point and gathers some on its own. The council & threats page shows the progress.</div>`;
|
if (id === "reconnaissance") html += `<div class="panel small muted">Reconnaissance on a coming threat raises its intel. Each level takes more than the last, a bigger band takes longer to read, and the sharpest news (the exact day and their camp) only comes in the last hours before they strike. The spymaster's guild adds to every point and gathers some on its own. The council & threats page shows the progress.</div>`;
|
||||||
html += skillHappenings(id);
|
html += skillHappenings(id);
|
||||||
const live = new Set(S.happenings.problems.map((p) => p.kind));
|
const live = new Set(S.happenings.problems.map((p) => p.kind));
|
||||||
const actions = C.actions.filter((a) => a.skill === id && (a.special !== "problem" || live.has(a.problem)));
|
const listed = C.actions.filter((a) => a.skill === id && (a.special !== "problem" || live.has(a.problem)));
|
||||||
const groups = [...new Set(actions.map((a) => a.group).filter(Boolean))];
|
// Tabs and sections keep their designed order; what's inside each is sorted by the level it needs.
|
||||||
|
const groups = [...new Set(listed.map((a) => a.group).filter(Boolean))];
|
||||||
|
const actions = [...listed].sort((a, b) => a.level - b.level);
|
||||||
if (groups.length > 2) {
|
if (groups.length > 2) {
|
||||||
// Many tiers: one tab per tier, opening on the highest one you can work.
|
// Many groups: one tab each.
|
||||||
const open = (g) => actions.some((a) => a.group === g && !isLocked(a));
|
const open = (g) => actions.some((a) => a.group === g && !isLocked(a));
|
||||||
let current = tabs[id] || remember(`tab.${id}`);
|
let current = tabs[id] || remember(`tab.${id}`);
|
||||||
if (!groups.includes(current)) current = [...groups].reverse().find(open) || groups[0];
|
// Tier ladders open on the highest tier you can work; categories open on the first.
|
||||||
|
const ladder = ["smithing", "leatherworking", "herblore"].includes(id);
|
||||||
|
if (!groups.includes(current)) current = (ladder && [...groups].reverse().find(open)) || groups[0];
|
||||||
const bar = groups.map((g) => `<button class="tab ${g === current ? "on" : ""} ${open(g) ? "" : "dim"}" data-tab="${id}" data-group="${esc(g)}">${esc(g)}</button>`).join("");
|
const bar = groups.map((g) => `<button class="tab ${g === current ? "on" : ""} ${open(g) ? "" : "dim"}" data-tab="${id}" data-group="${esc(g)}">${esc(g)}</button>`).join("");
|
||||||
// Ungrouped actions (the building site) stay above the tabs.
|
// Ungrouped actions (the building site) stay above the tabs.
|
||||||
const loose = actions.filter((a) => !a.group);
|
const loose = actions.filter((a) => !a.group);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue