Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions Tiltfile
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,14 @@ DRAFT_WASM_SRC = ['crates/draft-wasm/src/']
# build-wasm.sh honors CARGO_TARGET_DIR (defaulting to target/ for CI/deploy
# callers that don't set it), so only this dev-loop invocation is relocated.
local_resource('wasm',
cmd = 'CARGO_TARGET_DIR=target/wasm ./scripts/build-wasm.sh',
# List-form cmd: Tilt runs a STRING cmd through the platform shell (cmd.exe on
# Windows), which can't parse POSIX `VAR=val cmd` syntax or `./script.sh` --
# and worse, cmd.exe mangles nested double-quotes before bash ever sees them,
# so a 'bash -c "..."' STRING wrapper fails with "unexpected EOF" (found the
# hard way). A list-form cmd bypasses cmd.exe's string parsing entirely --
# Tilt execs the argv array directly, so bash receives the script text as one
# untouched element. On Mac/Linux this is equally valid and equally a no-op.
cmd = ['bash', '-c', 'CARGO_TARGET_DIR=target/wasm ./scripts/build-wasm.sh'],
deps = ENGINE_SRC + AI_SRC + WASM_SRC + DRAFT_CORE_SRC + DRAFT_WASM_SRC,
ignore = TMP_IGNORE,
allow_parallel = True,
Expand Down Expand Up @@ -190,7 +197,9 @@ local_resource('test-frontend',
# also gives it its own build lock, so it never queues behind the native test
# builds. Cost: a second debug tree on disk (reclaimed by cargo-sweep).
local_resource('clippy',
cmd = 'CARGO_TARGET_DIR=target/clippy cargo clippy --all-targets -- -D warnings && CARGO_TARGET_DIR=target/clippy ./scripts/check-interaction-bindings.sh --check',
# List-form cmd: see the 'wasm' resource above for why (a STRING 'bash -c "..."'
# gets its quotes mangled by cmd.exe on Windows; list-form bypasses that).
cmd = ['bash', '-c', 'CARGO_TARGET_DIR=target/clippy cargo clippy --all-targets -- -D warnings && CARGO_TARGET_DIR=target/clippy ./scripts/check-interaction-bindings.sh --check'],
deps = ['crates/', 'client/src/adapter/generated/interaction/index.ts', 'scripts/check-interaction-bindings.sh'],
ignore = TMP_IGNORE,
auto_init = 'lint' in enabled,
Expand All @@ -213,7 +222,9 @@ local_resource('check-frontend',
# ---------------------------------------------------------------------------

local_resource('card-data',
cmd = './scripts/gen-card-data.sh',
# List-form cmd: see the 'wasm' resource above for why (a STRING 'bash -c "..."'
# gets its quotes mangled by cmd.exe on Windows; list-form bypasses that).
cmd = ['bash', '-c', './scripts/gen-card-data.sh'],
deps = ENGINE_SRC,
# gen-card-data.sh promotes these tracked files under crates/engine/data/, which is
# in ENGINE_SRC (deps). Watching card-data's own generated outputs makes every
Expand Down
2 changes: 1 addition & 1 deletion client/public/changelog-meta.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"latestId": 183
"latestId": 184
}
15 changes: 15 additions & 0 deletions client/public/changelog.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
{
"entries": [
{
"id": 184,
"date": "2026-08-01",
"title": "Sacrificial mana gets a choice",
"tags": [
"new-cards",
"card-fixes",
"gameplay",
"interface",
"ai",
"multiplayer"
],
"body": "✨ New Cards & Mechanics\n• Mana sources that sacrifice themselves now pause for your confirmation, so you stay in control of how a spell is paid for\n\n🛠️ Cards That Now Work Right\n• Gemstone Mine and similar depletion lands now sacrifice themselves after their last counter is removed; Gift of Immortality returns to the saved creature at the next end step\n• Wandering Archaic correctly lets the casting opponent choose whether to pay, while the same pronoun handling now fixes related cards including Smart Ass, Siege Dragon, and Elder Brain\n• Diluvian Primordial preserves its free-cast sequence, and Riptide Gearhulk now puts each chosen opponent’s permanent into that owner’s library\n• Counterspell effects that replace an event retain their intended target\n\n⚔️ Combat & Gameplay\n• Basic-land mana and land mana granted by land types now obey activation restrictions, including effects that stop abilities, detain, phasing, and can’t-tap effects\n• Best-of-three games now offer clear options to concede the current game or the entire match; reconnecting after a timeout reliably records the resulting forfeit\n\n🖥️ Interface\n• Mana-payment prompts make self-sacrificing sources explicit instead of spending them automatically\n\n🤖 AI\n• AI avoids spending a colored mana source as colorless convoke or improvise mana when that would strand a required colored cost, and makes more reliable damage and fight decisions\n\n🌐 Multiplayer\n• Multiplayer servers preserve a single, correct forfeit result when multiple disconnected seats expire together",
"discordUrl": "https://discord.com/channels/1485498006781427802/1486432040332296424/1533139853225623742"
},
{
"id": 183,
"date": "2026-07-29",
Expand Down
Loading
Loading