Scrypt / scrypt /data /cards.yaml
IMJONEZZ's picture
SCRYPT: initial commit — game, sandbox, Warden, Space web layer
9fca766
Raw
History Blame Contribute Delete
9.35 kB
# 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}