Spaces:
Running on Zero
Running on Zero
| # SCRYPT card pool — terminal-flavored creatures. | |
| # Costs: {type: free} | {type: mem, amount: N} | {type: dumps, amount: N} | |
| # Sigils must exist in engine/cards.py KNOWN_SIGILS. | |
| # art: up to 3 lines, 9 columns; drawn inside the card frame. | |
| cards: | |
| - id: bit | |
| name: Bit | |
| power: 0 | |
| health: 1 | |
| cost: {type: free} | |
| flavor: "A humble bit. It costs nothing, and it is worth exactly that." | |
| art: |2 | |
| ┌─┐ | |
| │1│ | |
| └─┘ | |
| - id: orphan-thread | |
| name: Orphan Thread | |
| power: 0 | |
| health: 2 | |
| cost: {type: free} | |
| flavor: "Nobody joined it. It waits anyway. It will wait for you too." | |
| art: |2 | |
| ╷ | |
| ├──x | |
| ╵ | |
| - id: daemon | |
| name: Daemon | |
| power: 1 | |
| health: 2 | |
| cost: {type: mem, amount: 1} | |
| flavor: "It runs quietly in the background. It has always been running." | |
| art: |2 | |
| ^ ^ | |
| (o,o) | |
| )"( | |
| - id: firewall | |
| name: Firewall | |
| power: 1 | |
| health: 2 | |
| cost: {type: mem, amount: 1} | |
| sigils: [packet_filter] | |
| flavor: "Nothing gets over it. Not even the things that fly." | |
| art: |2 | |
| ▒▒▒▒▒▒▒ | |
| ▒▒▒▒▒▒▒ | |
| ▒▒▒▒▒▒▒ | |
| - id: packet | |
| name: Packet | |
| power: 1 | |
| health: 1 | |
| cost: {type: mem, amount: 1} | |
| sigils: [tunneling] | |
| flavor: "It rides the wire, far above your defenses." | |
| art: |2 | |
| ┌┄┄┄┐ | |
| ┆ 01┆» | |
| └┄┄┄┘ | |
| - id: oom-killer | |
| name: OOM Killer | |
| power: 3 | |
| health: 2 | |
| cost: {type: mem, amount: 2} | |
| flavor: "When memory runs short, it decides what deserves to live." | |
| art: |2 | |
| │ | |
| ──╳── | |
| │ | |
| - id: fork-bomb | |
| name: Fork Bomb | |
| power: 1 | |
| health: 1 | |
| cost: {type: mem, amount: 1} | |
| sigils: [self_replicating] | |
| flavor: ":(){ :|:& };: — it brings a friend. The friend brings a friend." | |
| art: |2 | |
| :(){ | |
| :|:& | |
| };: | |
| - id: segfault | |
| name: Segfault | |
| power: 1 | |
| health: 1 | |
| cost: {type: mem, amount: 2} | |
| sigils: [null_pointer] | |
| flavor: "One touch of the wrong address, and everything comes down." | |
| art: |2 | |
| ▚▘ ▗▞ | |
| ▐0x0▌ | |
| ▞▗ ▘▚ | |
| - id: tarpit | |
| name: Tarpit | |
| power: 0 | |
| health: 3 | |
| cost: {type: mem, amount: 1} | |
| sigils: [honeypot] | |
| flavor: "Connect, and wait. And wait. And wait." | |
| art: |2 | |
| ≈≈≈≈≈ | |
| ≈(_)≈ | |
| ≈≈≈≈≈ | |
| - id: zombie-process | |
| name: Zombie Process | |
| power: 2 | |
| health: 3 | |
| cost: {type: dumps, amount: 4} | |
| flavor: "Killed long ago. Never reaped. It holds a grudge about that." | |
| art: |2 | |
| [z] | |
| ╱│╲ | |
| z Z | |
| - id: garbage-collector | |
| name: Garbage Collector | |
| power: 0 | |
| health: 3 | |
| cost: {type: mem, amount: 1} | |
| sigils: [scavenger_loop] | |
| flavor: "It sweeps up the dead and keeps what it finds." | |
| art: |2 | |
| ─┬─ | |
| │░░░│ | |
| └───┘ | |
| - id: sudo-token | |
| name: Sudo Token | |
| power: 0 | |
| health: 1 | |
| cost: {type: mem, amount: 1} | |
| sigils: [privileged] | |
| flavor: "Spend it, and for one shining moment you may do anything." | |
| art: |2 | |
| ┌──┐ | |
| │##│═o | |
| └──┘ | |
| - id: watchdog | |
| name: Watchdog | |
| power: 0 | |
| health: 1 | |
| cost: {type: mem, amount: 1} | |
| sigils: [auto_restart] | |
| flavor: "Kill it. Go on. It will be back before you finish typing." | |
| art: |2 | |
| /\─/\ | |
| (•ᴥ•) | |
| ┘ └ | |
| - id: kernel-panic | |
| name: Kernel Panic | |
| power: 4 | |
| health: 6 | |
| cost: {type: mem, amount: 3} | |
| flavor: "The system's final scream, given claws." | |
| art: |2 | |
| ▄▄█▄▄ | |
| ██!██ | |
| ▀█▀█▀ | |
| - id: root | |
| name: Root | |
| power: 7 | |
| health: 7 | |
| cost: {type: mem, amount: 4} | |
| flavor: "It can do anything. It owes you nothing." | |
| art: |2 | |
| # | |
| ╱ │ ╲ | |
| ╱╱ │ ╲╲ | |
| # Foe-side creatures (the Warden's processes). Not draftable by players. | |
| - id: reaper | |
| name: Reaper | |
| power: 1 | |
| health: 1 | |
| cost: {type: free} | |
| draftable: false | |
| flavor: "It collects exit codes. Yours is pending." | |
| art: |2 | |
| ▄▄▄▄ | |
| ▀ ▀▖ | |
| ▐ | |
| - id: audit-daemon | |
| name: Audit Daemon | |
| power: 1 | |
| health: 3 | |
| cost: {type: free} | |
| flavor: "It saw what you did. It wrote it down." | |
| draftable: false | |
| art: |2 | |
| ╭───╮ | |
| │ ● │ | |
| ╰───╯ | |
| - id: kill-signal | |
| name: Kill Signal | |
| power: 2 | |
| health: 1 | |
| cost: {type: free} | |
| sigils: [tunneling] | |
| flavor: "SIGKILL cannot be caught, blocked, or ignored." | |
| draftable: false | |
| art: |2 | |
| ╱ | |
| ──╱── | |
| ╱ -9 | |
| - id: cron-golem | |
| name: Cron Golem | |
| power: 3 | |
| health: 5 | |
| cost: {type: free} | |
| flavor: "At the appointed minute it rises. Check the schedule. Despair." | |
| draftable: false | |
| art: |2 | |
| ╭─╮ | |
| │┼│ | |
| ▐███▌ | |
| - id: multiplexer | |
| name: Multiplexer | |
| power: 2 | |
| health: 3 | |
| cost: {type: free} | |
| sigils: [forked] | |
| flavor: "One window, many panes. It hits everything beside you." | |
| draftable: false | |
| art: |2 | |
| ┌─┬─┐ | |
| │ │ │ | |
| └─┴─┘ | |
| - id: init | |
| name: init | |
| power: 4 | |
| health: 8 | |
| cost: {type: free} | |
| flavor: "PID 1. The parent of everything. Orphans answer to it now." | |
| draftable: false | |
| art: |2 | |
| ▄▄▄ | |
| █ 1 █ | |
| ▀▀▀ | |
| # Full starting decks (the side pile of bits is separate and always there). | |
| # Every deck carries free fodder so sacrifices never starve. | |
| starter_decks: | |
| vanilla: | |
| name: "init" | |
| description: "Where every process begins. Flexible, honest, doomed." | |
| cards: [daemon, firewall, oom-killer, orphan-thread, orphan-thread, | |
| packet, tarpit, sudo-token] | |
| forkstorm: | |
| name: "fork()" | |
| description: "Multiply, sacrifice, repeat. The board is a petri dish." | |
| cards: [fork-bomb, fork-bomb, sudo-token, orphan-thread, orphan-thread, | |
| packet, segfault, daemon] | |
| graveyard: | |
| name: "core dump" | |
| description: "Your processes die and come back owing you favors." | |
| cards: [garbage-collector, zombie-process, watchdog, orphan-thread, | |
| daemon, tarpit, oom-killer, sudo-token] | |
| encounters: | |
| # script[turn] -> plays entering the foe queue after that turn's attack. | |
| # Turn 0 and 1 resolve during setup (queue + first front row). | |
| first_blood: | |
| name: "PID 2" | |
| script: | |
| - [] # turn 0: an empty board, a breath | |
| - [{lane: 1, card: reaper}] | |
| - [{lane: 2, card: reaper}] | |
| - [{lane: 0, card: audit-daemon}] | |
| - [{lane: 3, card: kill-signal}] | |
| - [] | |
| - [{lane: 2, card: audit-daemon}] | |
| audit_sweep: | |
| name: "The Audit" | |
| script: | |
| - [{lane: 0, card: audit-daemon}] | |
| - [{lane: 2, card: reaper}] | |
| - [{lane: 1, card: kill-signal}] | |
| - [{lane: 3, card: audit-daemon}] | |
| - [{lane: 0, card: reaper}] | |
| - [{lane: 2, card: cron-golem}] | |
| - [{lane: 1, card: reaper}] | |
| - [{lane: 3, card: kill-signal}] | |
| swap_storm: | |
| name: "The Swap" | |
| script: | |
| - [{lane: 1, card: multiplexer}] | |
| - [{lane: 2, card: reaper}] | |
| - [{lane: 0, card: kill-signal}] | |
| - [{lane: 3, card: multiplexer}] | |
| - [{lane: 2, card: audit-daemon}] | |
| - [{lane: 1, card: kill-signal}] | |
| - [{lane: 0, card: cron-golem}] | |
| - [{lane: 2, card: kill-signal}] | |
| scheduled_doom: | |
| name: "Crontab" | |
| script: | |
| - [{lane: 1, card: reaper}, {lane: 2, card: audit-daemon}] | |
| - [{lane: 0, card: kill-signal}] | |
| - [{lane: 3, card: cron-golem}] | |
| - [{lane: 1, card: audit-daemon}] | |
| - [{lane: 2, card: kill-signal}] | |
| - [{lane: 0, card: audit-daemon}] | |
| - [{lane: 1, card: cron-golem}] | |
| - [{lane: 2, card: kill-signal}] | |
| init_zero: | |
| name: "PID 1" | |
| script: | |
| - [{lane: 1, card: audit-daemon}, {lane: 2, card: reaper}] | |
| - [{lane: 0, card: multiplexer}] | |
| - [{lane: 3, card: kill-signal}] | |
| - [{lane: 2, card: cron-golem}] | |
| - [{lane: 1, card: kill-signal}] | |
| - [{lane: 0, card: init}] | |
| - [{lane: 3, card: multiplexer}] | |
| - [{lane: 2, card: kill-signal}] | |
| # Forks: the path splits and the Warden holds both doors open. | |
| # bounty applies only if the player WINS the chosen fight. | |
| # {kind: cycles, amount: N} -> extra cycles banked | |
| # {kind: draft} -> an extra card draft right after the fight | |
| forks: | |
| crossroads_audit: | |
| prompt: "Two doors. Behind one, the auditor you expected. Behind the other, something hungrier." | |
| options: | |
| - encounter: audit_sweep | |
| label: "the audit" | |
| blurb: "the fight you were promised. fair, as fairness goes here." | |
| - encounter: swap_storm | |
| label: "the swap" | |
| blurb: "panes within panes. survivors loot the wreckage." | |
| bounty: {kind: draft} | |
| crossroads_final: | |
| prompt: "The last stretch. Choose your executioner." | |
| options: | |
| - encounter: scheduled_doom | |
| label: "the crontab" | |
| blurb: "death on a schedule you have already read." | |
| - encounter: init_zero | |
| label: "PID 1" | |
| blurb: "the parent of everything. bring everything." | |
| bounty: {kind: cycles, amount: 10} | |