Instant targeting, damage on bars, interrupted casts, no arrows
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
bc99a1e0c5
commit
049e2c771a
6 changed files with 85 additions and 41 deletions
16
game.py
16
game.py
|
|
@ -1347,8 +1347,8 @@ UNIQUES = {
|
|||
{"find_the_seam": {"dur": 8}, "mark_prey": {"dur": 15},
|
||||
"ward": {"extra": [{"t": "shield", "c": 1.0, "dur": 20, "second": True}]}}),
|
||||
"wyrmscale_quiver": ("Wyrmscale quiver", "trinket", "quiver", "#e05a5a",
|
||||
"Volley takes no arrows and hits 40% harder; Aimed Shot aims 25% faster.",
|
||||
{"volley": {"cost": 0, "c": 1.4}, "aimed_shot": {"cast": 0.75}}),
|
||||
"Volley hits 40% harder; Aimed Shot aims 25% faster.",
|
||||
{"volley": {"c": 1.4}, "aimed_shot": {"cast": 0.75}}),
|
||||
}
|
||||
# The pieces every dungeon's patterns reforge, by what they're made of at each tier.
|
||||
MASTERWORK_PIECES = ["sword", "warhammer", "staff", "bow", "heavy", "medium", "light"]
|
||||
|
|
@ -2286,13 +2286,13 @@ def fight_member(world: dict, player: dict, at: float = 0.0) -> dict:
|
|||
"start_hp": round(player["hp"]), "hp_in": player["hp"], "top": max_hp(player), "style": me["style"],
|
||||
"role": me["role"], "abilities": me["abilities"], "interval": me["interval"] / speed(world),
|
||||
"fighter": me, "eaten": {}, "potion": ITEMS[potion]["drink"] if potion else 0, "potion_item": potion,
|
||||
"arrows": player["bank"].get("arrows", 0), "mend": blessed["mend"],
|
||||
"mend": blessed["mend"],
|
||||
"wind": blessed["wind"] and not (player["action"] or {}).get("wind_used"), "pp": blessed["cost"],
|
||||
"manual": [a for a in player.get("manual", []) if a in me["abilities"]], "inputs": [], "mods": me["mods"],
|
||||
"watch": at + combat.WATCH * speed(world)}
|
||||
|
||||
|
||||
FIGHT_PRIVATE = ("fighter", "mend", "wind", "arrows")
|
||||
FIGHT_PRIVATE = ("fighter", "mend", "wind")
|
||||
|
||||
|
||||
def fight_view(fight: dict) -> dict:
|
||||
|
|
@ -2891,7 +2891,7 @@ def _complete(world: dict, player: dict, action: dict, now: float, rng: random.R
|
|||
player["pp"] -= paid
|
||||
summary["pp_spent"] += paid
|
||||
gain_xp(world, player, "prayer", paid * PRAYER_XP_PER_POINT, now, summary)
|
||||
used = {**({mine["potion_item"]: 1} if mine["drank"] else {}), **({"arrows": mine["shot"]} if mine["shot"] else {})}
|
||||
used = {mine["potion_item"]: 1} if mine["drank"] else {}
|
||||
for key, spent in (("eaten", mine["eaten"]), ("used", used)):
|
||||
for item, count in spent.items():
|
||||
count = min(count, player["bank"].get(item, 0))
|
||||
|
|
@ -5978,6 +5978,12 @@ PATCH_NOTES = [
|
|||
"lens, Wyrmscale quiver. Abilities it changes get a ✦."),
|
||||
("new", "Choose when you eat between fights: below 25 / 50 / 75% of your HP, always, or never (the food slot, "
|
||||
"under \"Eat below\"). Default 50%: above it you just rest, so a scratch doesn't cost food."),
|
||||
("new", "Tapping an enemy or ally switches at once, and your next press goes to them: tap, then interrupt, "
|
||||
"without waiting."),
|
||||
("new", "HP bars show what was just lost, with each fighter's last hit or heal by their HP."),
|
||||
("new", "An interrupted cast stays on the enemy's bar for a moment, struck through: ✋ interrupted."),
|
||||
("balance", "Volley no longer takes arrows: abilities never cost anything. Wyrmscale quiver: Volley 40% harder "
|
||||
"and Aimed Shot 25% faster."),
|
||||
]},
|
||||
{"date": "2026-10-24", "title": "A dungeon in every area", "notes": [
|
||||
("new", "Six more dungeons for 2–4, seven pulls each with two mini-bosses and a final boss: Goblin Warren "
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue