more cleanup and organizing of TODOs

This commit is contained in:
Lumen Keyes 2024-07-15 10:44:44 -06:00
parent 72b8052f70
commit 904e4120dd
8 changed files with 1224 additions and 1449 deletions

1
PDFGen

@ -1 +0,0 @@
Subproject commit 53ea781d446d51ce70492a796c2523286490633f

2129
output.pdf

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +0,0 @@
const PandocOptions = &[_][]const u8{ "pandoc", "out.md", "-o", "out.pdf", "--pdf-engine", "xelatex", "-V", "mainfont:Liberation Mono", "-V", "geometry:margin=0cm" };
try allPrinted.appendSlice(markdownFormatString);
var pandocProcess = std.process.Child.init(PandocOptions, allocator);
_ = try pandocProcess.spawnAndWait();
try allPrinted.appendSlice(markdownFormatString);
try cwd.writeFile(.{ .sub_path = "out.md", .data = allPrinted.items });
const markdownFormatString = "```" ++ (" " ** (pageWidth - 4)) ++ "\n";

View File

@ -1,490 +0,0 @@
```
|Prismatic Vista (Land) >> |Mox Jet {0} (Artifact) >> |Tenth District Hero {1}{W}
|{T}, Pay 1 life, Sacrifice |{T}: Add {B}. |(Creature Human) >> {1}{W},
|Prismatic Vista: Search your | |Collect evidence 2: Tenth
|library for a basic land | |District Hero becomes a Human
|card, put it onto the | |Detective with base power and
|battlefield, then shuffle. | |toughness 4/4 and gains
| | |vigilance. {2}{W}, Collect
| | |evidence 4: If Tenth District
| | |Hero is a Detective, it
| | |becomes a legendary creature
| | |named Mileva, the Stalwart,
| | |it has base power and
| | |toughness 5/5, and it gains
| | |"Other creatures you control
| | |have indestructible." (2/3)
| | |
|Wasteland (Land) >> {T}: Add |Misty Rainforest (Land) >> |Green Sun's Zenith {X}{G}
|{C}. {T}, Sacrifice |{T}, Pay 1 life, Sacrifice |(Sorcery) >> Search your
|Wasteland: Destroy target |Misty Rainforest: Search your |library for a green creature
|nonbasic land. |library for a Forest or |card with mana value X or
| |Island card, put it onto the |less, put it onto the
| |battlefield, then shuffle. |battlefield, then shuffle.
| | |Shuffle Green Sun's Zenith
| | |into its owner's library.
| | |
|Grist, the Hunger Tide |Wrenn and Six {R}{G} |Thalia, Heretic Cathar {2}{W}
|{1}{B}{G} (Legendary |(Legendary Planeswalker |(Legendary Creature Human
|Planeswalker Grist) >> As |Wrenn) >> +1: Return up to |Soldier) >> First strike
|long as Grist, the Hunger |one target land card from |Creatures and nonbasic lands
|Tide isn't on the |your graveyard to your hand. |your opponents control enter
|battlefield, it's a 1/1 |1: Wrenn and Six deals 1 |the battlefield tapped. (3/2)
|Insect creature in addition |damage to any target. 7: You |
|to its other types. +1: |get an emblem with "Instant |
|Create a 1/1 black and green |and sorcery cards in your |
|Insect creature token, then |graveyard have retrace." (You |
|mill a card. If an Insect |may cast instant and sorcery |
|card was milled this way, put |cards from your graveyard by |
|a loyalty counter on Grist |discarding a land card in |
|and repeat this process. 2: |addition to paying their |
|You may sacrifice a creature. |other costs.) |
|When you do, destroy target | |
|creature or planeswalker. 5: | |
|Each opponent loses life | |
|equal to the number of | |
|creature cards in your | |
|graveyard. | |
| | |
|Badlands (Land Swamp |Stomping Ground (Land |Fatal Push {B} (Instant) >>
|Mountain) >> ({T}: Add {B} or |Mountain Forest) >> ({T}: Add |Destroy target creature if it
|{R}.) |{R} or {G}.) As Stomping |has mana value 2 or less.
| |Ground enters the |Revolt Destroy that creature
| |battlefield, you may pay 2 |if it has mana value 4 or
| |life. If you don't, it enters |less instead if a permanent
| |the battlefield tapped. |you controlled left the
| | |battlefield this turn.
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
|Inti, Seneschal of the Sun |Mental Misstep {U/P} |Abrupt Decay {B}{G} (Instant)
|{1}{R} (Legendary Creature |(Instant) >> ({U/P} can be |>> This spell can't be
|Human Knight) >> Whenever you |paid with either {U} or 2 |countered. Destroy target
|attack, you may discard a |life.) Counter target spell |nonland permanent with mana
|card. When you do, put a |with mana value 1. |value 3 or less.
|+1/+1 counter on target | |
|attacking creature. It gains | |
|trample until end of turn. | |
|Whenever you discard one or | |
|more cards, exile the top | |
|card of your library. You may | |
|play that card until your | |
|next end step. (2/2) | |
| | |
|Gitaxian Probe {U/P} |Opposition Agent {2}{B} |Scavenging Ooze {1}{G}
|(Sorcery) >> ({U/P} can be |(Creature Human Rogue) >> |(Creature Ooze) >> {G}:
|paid with either {U} or 2 |Flash You control your |Exile target card from a
|life.) Look at target |opponents while they're |graveyard. If it was a
|player's hand. Draw a card. |searching their libraries. |creature card, put a +1/+1
| |While an opponent is |counter on Scavenging Ooze
| |searching their library, they |and you gain 1 life. (2/2)
| |exile each card they find. |
| |You may play those cards for |
| |as long as they remain |
| |exiled, and you may spend |
| |mana as though it were mana |
| |of any color to cast them. |
| |(3/2) |
| | |
|Dark Confidant {1}{B} |Troll of Khazad-dm {5}{B} |Taiga (Land Mountain Forest)
|(Creature Human Wizard) >> |(Creature Troll) >> Troll of |>> ({T}: Add {R} or {G}.)
|At the beginning of your |Khazad-dm can't be blocked |
|upkeep, reveal the top card |except by three or more |
|of your library and put that |creatures. Swampcycling {1} |
|card into your hand. You lose |({1}, Discard this card: |
|life equal to its mana value. |Search your library for a |
|(2/1) |Swamp card, reveal it, put it |
| |into your hand, then |
| |shuffle.) (6/5) |
| | |
|Deathrite Shaman {B/G} |Windswept Heath (Land) >> |Prismatic Ending {X}{W}
|(Creature Elf Shaman) >> |{T}, Pay 1 life, Sacrifice |(Sorcery) >> Converge Exile
|{T}: Exile target land card |Windswept Heath: Search your |target nonland permanent if
|from a graveyard. Add one |library for a Forest or |its mana value is less than
|mana of any color. {B}, {T}: |Plains card, put it onto the |or equal to the number of
|Exile target instant or |battlefield, then shuffle. |colors of mana spent to cast
|sorcery card from a | |this spell.
|graveyard. Each opponent | |
|loses 2 life. {G}, {T}: Exile | |
|target creature card from a | |
|graveyard. You gain 2 life. | |
|(1/2) | |
| | |
|Undermountain Adventurer |Lotus Petal {0} (Artifact) >> |Duress {B} (Sorcery) >>
|{3}{G} (Creature Giant |{T}, Sacrifice Lotus Petal: |Target opponent reveals their
|Warrior) >> Vigilance When |Add one mana of any color. |hand. You choose a
|Undermountain Adventurer | |noncreature, nonland card
|enters the battlefield, you | |from it. That player discards
|take the initiative. {T}: Add | |that card.
|{G}{G}. If you've completed a | |
|dungeon, add six {G} instead. | |
|(3/4) | |
| | |
| | |
| | |
| | |
|Forth Eorlingas! {X}{R}{W} |Mox Emerald {0} (Artifact) >> |Inquisition of Kozilek {B}
|(Sorcery) >> Create X 2/2 red |{T}: Add {G}. |(Sorcery) >> Target player
|Human Knight creature tokens | |reveals their hand. You
|with trample and haste. | |choose a nonland card from it
|Whenever one or more | |with mana value 3 or less.
|creatures you control deal | |That player discards that
|combat damage to one or more | |card.
|players this turn, you become | |
|the monarch. | |
| | |
|Minsc & Boo, Timeless Heroes |Tarmogoyf (Token Creature |Sungold Sentinel {1}{W}
|{2}{R}{G} (Legendary |Lhurgoyf) >> Tarmogoyf's |(Creature Human Soldier) >>
|Planeswalker Minsc) >> When |power is equal to the number |Whenever Sungold Sentinel
|Minsc & Boo, Timeless Heroes |of card types among cards in |enters the battlefield or
|enters the battlefield and at |all graveyards and its |attacks, exile up to one
|the beginning of your upkeep, |toughness is equal to that |target card from a graveyard.
|you may create Boo, a |number plus 1. (This token's |Coven {1}{W}: Choose a
|legendary 1/1 red Hamster |mana cost is {1}{G}.) (*/1+*) |color. Sungold Sentinel gains
|creature token with trample | |hexproof from that color
|and haste. +1: Put three | |until end of turn and can't
|+1/+1 counters on up to one | |be blocked by creatures of
|target creature with trample | |that color this turn.
|or haste. 2: Sacrifice a | |Activate only if you control
|creature. When you do, Minsc | |three or more creatures with
|& Boo, Timeless Heroes deals | |different powers. (3/2)
|X damage to any target, where | |
|X is that creature's power. | |
|If the sacrificed creature | |
|was a Hamster, draw X cards. | |
|Minsc & Boo, Timeless Heroes | |
|can be your commander. | |
| | |
|Simian Spirit Guide {2}{R} |Eladamri's Call {G}{W} |Unearth {B} (Sorcery) >>
|(Creature Ape Spirit) >> |(Instant) >> Search your |Return target creature card
|Exile Simian Spirit Guide |library for a creature card, |with mana value 3 or less
|from your hand: Add {R}. |reveal that card, put it into |from your graveyard to the
|(2/2) |your hand, then shuffle. |battlefield. Cycling {2}
| | |({2}, Discard this card: Draw
| | |a card.)
| | |
|Tidehollow Sculler {W}{B} |White Plume Adventurer {2}{W} |Swamp (Basic Land Swamp) >>
|(Artifact Creature Zombie) |(Creature Orc Cleric) >> |({T}: Add {B}.)
|>> When Tidehollow Sculler |When White Plume Adventurer |
|enters the battlefield, |enters the battlefield, you |
|target opponent reveals their |take the initiative. At the |
|hand and you choose a nonland |beginning of each opponent's |
|card from it. Exile that |upkeep, untap a creature you |
|card. When Tidehollow Sculler |control. If you've completed |
|leaves the battlefield, |a dungeon, untap all |
|return the exiled card to its |creatures you control |
|owner's hand. (2/2) |instead. (3/3) |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
|Mosswood Dreadknight // Dread |Karakas (Legendary Land) >> |Legolas's Quick Reflexes {G}
|Whispers {1}{G} // {1}{B} |{T}: Add {W}. {T}: Return |(Instant) >> Split second (As
|(Creature Human Knight // |target legendary creature to |long as this spell is on the
|Sorcery Adventure) >> (3/2) |its owner's hand. |stack, players can't cast
|Trample When Mosswood | |spells or activate abilities
|Dreadknight dies, you may | |that aren't mana abilities.)
|cast it from your graveyard | |Untap target creature. Until
|as an Adventure until the end | |end of turn, it gains
|of your next turn. (3/2) | |hexproof, reach, and
| // | |"Whenever this creature
|You draw a card and you lose | |becomes tapped, it deals
|1 life. (Then exile this | |damage equal to its power to
|card. You may cast the | |up to one target creature."
|creature later from exile.) | |
| | |
| | |
| | |
|Seasoned Dungeoneer {3}{W} |Mother of Runes {W} (Creature |Wooded Foothills (Land) >>
|(Creature Human Warrior) >> | Human Cleric) >> {T}: Target |{T}, Pay 1 life, Sacrifice
|When Seasoned Dungeoneer |creature you control gains |Wooded Foothills: Search your
|enters the battlefield, you |protection from the color of |library for a Mountain or
|take the initiative. Whenever |your choice until end of |Forest card, put it onto the
|you attack, target attacking |turn. (1/1) |battlefield, then shuffle.
|Cleric, Rogue, Warrior, or | |
|Wizard gains protection from | |
|creatures until end of turn. | |
|It explores. (Reveal the top | |
|card of your library. Put | |
|that card into your hand if | |
|it's a land. Otherwise, put a | |
|+1/+1 counter on the | |
|creature, then put the card | |
|back or put it into your | |
|graveyard.) (3/4) | |
| | |
|Verdant Catacombs (Land) >> |Hexdrinker {G} (Creature |Elvish Spirit Guide {2}{G}
|{T}, Pay 1 life, Sacrifice |Snake) >> Level up {1} ({1}: |(Creature Elf Spirit) >>
|Verdant Catacombs: Search |Put a level counter on this. |Exile Elvish Spirit Guide
|your library for a Swamp or |Level up only as a sorcery.) |from your hand: Add {G}.
|Forest card, put it onto the |LEVEL 3-7 4/4 Protection from |(2/2)
|battlefield, then shuffle. |instants LEVEL 8+ 6/6 |
| |Protection from everything |
| |(2/1) |
| | |
|Savannah (Land Forest |Godless Shrine (Land Plains |Kellan, Daring Traveler //
|Plains) >> ({T}: Add {G} or |Swamp) >> ({T}: Add {W} or |Journey On {1}{W} // {G}
|{W}.) |{B}.) As Godless Shrine |(Legendary Creature Human
| |enters the battlefield, you |Faerie Scout // Sorcery
| |may pay 2 life. If you don't, |Adventure) >> (2/3) Whenever
| |it enters the battlefield |Kellan, Daring Traveler
| |tapped. |attacks, reveal the top card
| | |of your library. If it's a
| | |creature card with mana value
| | |3 or less, put it into your
| | |hand. Otherwise, you may put
| | |it into your graveyard. (2/3)
| | |
| | |// Create X Map tokens, where
| | |X is one plus the number of
| | |opponents who control an
| | |artifact. (Then exile this
| | |card. You may cast the
| | |creature later from exile.)
| | |
| | |
| | |
|Witherbloom Command {B}{G} |Mox Pearl {0} (Artifact) >> |Underground Mortuary (Land
|(Sorcery) >> Choose two |{T}: Add {W}. |Swamp Forest) >> ({T}: Add
|Target player mills three | |{B} or {G}.) Underground
|cards, then you return a land | |Mortuary enters the
|card from your graveyard to | |battlefield tapped. When
|your hand. Destroy target | |Underground Mortuary enters
|noncreature, nonland | |the battlefield, surveil 1.
|permanent with mana value 2 | |(Look at the top card of your
|or less. Target creature | |library. You may put it into
|gets -3/-1 until end of turn. | |your graveyard.)
| Target opponent loses 2 life | |
|and you gain 2 life. | |
| | |
|Shadowspear {1} (Legendary |Razorverge Thicket (Land) >> |Overgrown Tomb (Land Swamp
|Artifact Equipment) >> |Razorverge Thicket enters the |Forest) >> ({T}: Add {B} or
|Equipped creature gets +1/+1 |battlefield tapped unless you |{G}.) As Overgrown Tomb
|and has trample and lifelink. |control two or fewer other |enters the battlefield, you
|{1}: Permanents your |lands. {T}: Add {G} or {W}. |may pay 2 life. If you don't,
|opponents control lose | |it enters the battlefield
|hexproof and indestructible | |tapped.
|until end of turn. Equip {2} | |
| | |
|Noble Hierarch {G} (Creature |Thalia, Guardian of Thraben |Reanimate {B} (Sorcery) >>
|Human Druid) >> Exalted |{1}{W} (Legendary Creature |Put target creature card from
|(Whenever a creature you |Human Soldier) >> First |a graveyard onto the
|control attacks alone, that |strike Noncreature spells |battlefield under your
|creature gets +1/+1 until end |cost {1} more to cast. (2/1) |control. You lose life equal
|of turn.) {T}: Add {G}, {W}, | |to its mana value.
|or {U}. (0/1) | |
| | |
|Laelia, the Blade Reforged |Sentinel of the Nameless City |Anointed Peacekeeper {2}{W}
|{2}{R} (Legendary Creature |{2}{G} (Creature Merfolk |(Creature Human Cleric) >>
|Spirit Warrior) >> Haste |Warrior Scout) >> Vigilance |Vigilance As Anointed
|Whenever Laelia, the Blade |Whenever Sentinel of the |Peacekeeper enters the
|Reforged attacks, exile the |Nameless City enters the |battlefield, look at an
|top card of your library. You |battlefield or attacks, |opponent's hand, then choose
|may play that card this turn. |create a Map token. (It's an |any card name. Spells your
|Whenever one or more cards |artifact with "{1}, {T}, |opponents cast with the
|are put into exile from your |Sacrifice this artifact: |chosen name cost {2} more to
|library and/or your |Target creature you control |cast. Activated abilities of
|graveyard, put a +1/+1 |explores. Activate only as a |sources with the chosen name
|counter on Laelia. (2/2) |sorcery.") (3/4) |cost {2} more to activate
| | |unless they're mana
| | |abilities. (3/3)
| | |
|Swords to Plowshares {W} |Forest (Basic Land Forest) |Leyline Binding {5}{W}
|(Instant) >> Exile target |>> ({T}: Add {G}.) |(Enchantment) >> Flash Domain
|creature. Its controller | | This spell costs {1} less to
|gains life equal to its | |cast for each basic land type
|power. | |among lands you control. When
| | |Leyline Binding enters the
| | |battlefield, exile target
| | |nonland permanent an opponent
| | |controls until Leyline
| | |Binding leaves the
| | |battlefield.
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
|Questing Beast {2}{G}{G} |Generous Ent {5}{G} (Creature |Bayou (Land Swamp Forest) >>
|(Legendary Creature Beast) | Treefolk) >> Reach When |({T}: Add {B} or {G}.)
|>> Vigilance, deathtouch, |Generous Ent enters the |
|haste Questing Beast can't be |battlefield, create a Food |
|blocked by creatures with |token. (It's an artifact with |
|power 2 or less. Combat |"{2}, {T}, Sacrifice this |
|damage that would be dealt by |artifact: You gain 3 life.") |
|creatures you control can't |Forestcycling {1} ({1}, |
|be prevented. Whenever |Discard this card: Search |
|Questing Beast deals combat |your library for a Forest |
|damage to an opponent, it |card, reveal it, put it into |
|deals that much damage to |your hand, then shuffle.) |
|target planeswalker that |(5/7) |
|player controls. (4/4) | |
| | |
|Plains (Basic Land Plains) |Boseiju, Who Endures |Arid Mesa (Land) >> {T}, Pay
|>> ({T}: Add {W}.) |(Legendary Land) >> {T}: Add |1 life, Sacrifice Arid Mesa:
| |{G}. Channel {1}{G}, Discard |Search your library for a
| |Boseiju, Who Endures: Destroy |Mountain or Plains card, put
| |target artifact, enchantment, |it onto the battlefield, then
| |or nonbasic land an opponent |shuffle.
| |controls. That player may |
| |search their library for a |
| |land card with a basic land |
| |type, put it onto the |
| |battlefield, then shuffle. |
| |This ability costs {1} less |
| |to activate for each |
| |legendary creature you |
| |control. |
| | |
|Plateau (Land Mountain |Endurance {1}{G}{G} (Creature |Scrubland (Land Plains
|Plains) >> ({T}: Add {R} or | Elemental Incarnation) >> |Swamp) >> ({T}: Add {W} or
|{W}.) |Flash Reach When Endurance |{B}.)
| |enters the battlefield, up to |
| |one target player puts all |
| |the cards from their |
| |graveyard on the bottom of |
| |their library in a random |
| |order. EvokeExile a green |
| |card from your hand. (3/4) |
| | |
|Ignoble Hierarch {G} |Scalding Tarn (Land) >> {T}, |Luminarch Aspirant {1}{W}
|(Creature Goblin Shaman) >> |Pay 1 life, Sacrifice |(Creature Human Cleric) >>
|Exalted (Whenever a creature |Scalding Tarn: Search your |At the beginning of combat on
|you control attacks alone, |library for an Island or |your turn, put a +1/+1
|that creature gets +1/+1 |Mountain card, put it onto |counter on target creature
|until end of turn.) {T}: Add |the battlefield, then |you control. (1/1)
|{B}, {R}, or {G}. (0/1) |shuffle. |
| | |
|Archon of Emeria {2}{W} |Once Upon a Time {1}{G} |Mana Confluence (Land) >>
|(Creature Archon) >> Flying |(Instant) >> If this spell is |{T}, Pay 1 life: Add one mana
|Each player can't cast more |the first spell you've cast |of any color.
|than one spell each turn. |this game, you may cast it |
|Nonbasic lands your opponents |without paying its mana cost. |
|control enter the battlefield |Look at the top five cards of |
|tapped. (2/3) |your library. You may reveal |
| |a creature or land card from |
| |among them and put it into |
| |your hand. Put the rest on |
| |the bottom of your library in |
| |a random order. |
| | |
| | |
| | |
| | |
|Birds of Paradise {G} |Cankerbloom {1}{G} (Creature |Path to Exile {W} (Instant)
|(Creature Bird) >> Flying |Phyrexian Fungus) >> {1}, |>> Exile target creature. Its
|{T}: Add one mana of any |Sacrifice Cankerbloom: Choose |controller may search their
|color. (0/1) |one Destroy target |library for a basic land
| |artifact. Destroy target |card, put that card onto the
| |enchantment. Proliferate. |battlefield tapped, then
| |(Choose any number of |shuffle.
| |permanents and/or players, |
| |then give each another |
| |counter of each kind already |
| |there.) (3/2) |
| | |
|Marsh Flats (Land) >> {T}, |Broadside Bombardiers {2}{R} |Caves of Chaos Adventurer
|Pay 1 life, Sacrifice Marsh |(Creature Goblin Pirate) >> |{3}{R} (Creature Human
|Flats: Search your library |Menace, haste Boast |Barbarian) >> Trample When
|for a Plains or Swamp card, |Sacrifice another creature or |Caves of Chaos Adventurer
|put it onto the battlefield, |artifact: Broadside |enters the battlefield, you
|then shuffle. |Bombardiers deals damage |take the initiative. Whenever
| |equal to 2 plus the |Caves of Chaos Adventurer
| |sacrificed permanent's mana |attacks, exile the top card
| |value to any target. |of your library. If you've
| |(Activate only if this |completed a dungeon, you may
| |creature attacked this turn |play that card this turn
| |and only once each turn.) |without paying its mana cost.
| |(2/2) |Otherwise, you may play that
| | |card this turn. (5/3)
| | |
|Mawloc {X}{R}{G} (Creature |Comet, Stellar Pup {2}{R}{W} |Orcish Bowmasters {1}{B}
|Tyranid) >> Ravenous (This |(Legendary Planeswalker |(Creature Orc Archer) >>
|creature enters the |Comet) >> 0: Roll a six-sided |Flash When Orcish Bowmasters
|battlefield with X +1/+1 |die. 1 or 2 [+2], then |enters the battlefield and
|counters on it. If X is 5 or |create two 1/1 green Squirrel |whenever an opponent draws a
|more, draw a card when it |creature tokens. They gain |card except the first one
|enters.) Terror from the Deep |haste until end of turn. 3 |they draw in each of their
| When Mawloc enters the |[1], then return a card with |draw steps, Orcish Bowmasters
|battlefield, it fights up to |mana value 2 or less from |deals 1 damage to any target.
|one target creature an |your graveyard to your hand. |Then amass Orcs 1. (1/1)
|opponent controls. If that |4 or 5 Comet, Stellar Pup |
|creature would die this turn, |deals damage equal to the |
|exile it instead. (2/2) |number of loyalty counters on |
| |him to a creature or player, |
| |then [2]. 6 [+1], and you |
| |may activate Comet, Stellar |
| |Pup's loyalty ability two |
| |more times this turn. |
| | |
|Chrome Mox {0} (Artifact) >> |Thoughtseize {B} (Sorcery) >> |Polluted Delta (Land) >> {T},
|Imprint When Chrome Mox |Target player reveals their |Pay 1 life, Sacrifice
|enters the battlefield, you |hand. You choose a nonland |Polluted Delta: Search your
|may exile a nonartifact, |card from it. That player |library for an Island or
|nonland card from your hand. |discards that card. You lose |Swamp card, put it onto the
|{T}: Add one mana of any of |2 life. |battlefield, then shuffle.
|the exiled card's colors. | |
| | |
|City of Brass (Land) >> |Mox Diamond {0} (Artifact) >> |Flooded Strand (Land) >> {T},
|Whenever City of Brass |If Mox Diamond would enter |Pay 1 life, Sacrifice Flooded
|becomes tapped, it deals 1 |the battlefield, you may |Strand: Search your library
|damage to you. {T}: Add one |discard a land card instead. |for a Plains or Island card,
|mana of any color. |If you do, put Mox Diamond |put it onto the battlefield,
| |onto the battlefield. If you |then shuffle.
| |don't, put it into its |
| |owner's graveyard. {T}: Add |
| |one mana of any color. |
| | |
| | |
| | |
|Temple Garden (Land Forest |Lord Skitter, Sewer King |Bloodstained Mire (Land) >>
|Plains) >> ({T}: Add {G} or |{2}{B} (Legendary Creature |{T}, Pay 1 life, Sacrifice
|{W}.) As Temple Garden enters |Rat Noble) >> Whenever |Bloodstained Mire: Search
|the battlefield, you may pay |another Rat enters the |your library for a Swamp or
|2 life. If you don't, it |battlefield under your |Mountain card, put it onto
|enters the battlefield |control, exile up to one |the battlefield, then
|tapped. |target card from an |shuffle.
| |opponent's graveyard. At the |
| |beginning of combat on your |
| |turn, create a 1/1 black Rat |
| |creature token with "This |
| |creature can't block." (3/3) |
| | |
|Ayara's Oathsworn {1}{B} | |
|(Creature Human Knight) >> | |
|Menace Whenever Ayara's | |
|Oathsworn deals combat damage | |
|to a player, if it has fewer | |
|than four +1/+1 counters on | |
|it, put a +1/+1 counter on | |
|it. Then if it has exactly | |
|four +1/+1 counters on it, | |
|search your library for a | |
|card, put it into your hand, | |
|then shuffle. (2/2) | |
| | |
```

Binary file not shown.

View File

@ -1,9 +1,20 @@
//c library usage based on https://medium.com/@eddo2626/lets-learn-zig-4-using-c-libraries-in-zig-5fcc3206f0dc
//TODO: change references to "HeightMayVary" to "constantHeight"
//TODO: add loyalty for planeswalkers
//TODO: print mana cost beside each name for dual-faced cards
//TODO: consider eliminating the TextCard struct
//TODO: add some kind of "update" command to support pulling new oracle data
//TODO: implement oracleFileName as a cli arg
//TODO: add more robust tests
const std = @import("std");
// https://github.com/Hejsil/zig-clap
const clap = @import("clap");
//using the zg lib: https://codeberg.org/dude_the_builder/zg
// https://codeberg.org/dude_the_builder/zg
const DisplayWidth = @import("DisplayWidth");
// https://github.com/AndreRenaud/PDFGen
// including the header file only works for a full build, "zig run" can't find it
const c = @cImport({
@cInclude("pdfgen.h");
});
@ -44,15 +55,20 @@ const cardWidth = 30;
const cardHeight = 32;
const minCardHeight = 5;
const pageHeight = 66;
var heightMayVary = true; //whether or not cards must have a constant height
const pdfHeight = c.PDF_LETTER_HEIGHT;
const pdfWidth = c.PDF_LETTER_WIDTH;
const formatString = "{s: <" ++ std.fmt.digits2(cardWidth) ++ "}";
const lineFormatter = "|" ++ formatString;
const spacer: []const u8 = "|" ++ (" " ** cardWidth);
const oracleFileName = "/home/lumenk/Documents/code/zig/proxy-print/src/oracle-cards-20240701090158.json"; //"oracle-cards-20240205220208.js";
const fullWidthSpacer = (spacer ** 3) ++ "\n";
const pageWidth = fullWidthSpacer.len;
//values that may vary depending on user-supplied arguments
var oracleFileName = "oracle-data/oracle-cards-20240701090158.json";
var listFileName: []const u8 = undefined; //the name of the file with the list of cards to print
var heightMayVary = true; //whether or not cards must have a constant height
test "Check constants" {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const paddedLine = try std.fmt.allocPrint(gpa.allocator(), lineFormatter, .{"hello> woooooooooooooooooooorl"});
@ -60,8 +76,6 @@ test "Check constants" {
}
pub fn main() !void {
// var args = try std.process.argsWithAllocator(std.heap.page_allocator);
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const allocator = arena.allocator();
@ -69,7 +83,7 @@ pub fn main() !void {
const params = comptime clap.parseParamsComptime(
\\-h, --help Display this help and exit.
\\-l, --listFile <str> The list of cards to print
\\
\\-c, --constant <str> "true" or "false" (case-sensitive, whether or not the height of cards may vary)
);
const res = clap.parse(clap.Help, &params, clap.parsers.default, .{
@ -77,8 +91,15 @@ pub fn main() !void {
}) catch |err| {
return err;
};
if(res.args.listFile == null) return error.ExpectedArgument;
const listFileName = res.args.listFile.?;
if(res.args.listFile) |name| {
listFileName = name;
} else {
return error.ExpectedArgument;
}
//TODO (FIXME): passing "false" currently causes the program to hang and then crash
if(res.args.constant) |choice| {
heightMayVary = stringToBool(choice);
}
const oracleFile = try cwd.openFile(oracleFileName, .{});
var jsonReader = json.reader(allocator, oracleFile.reader());
@ -106,8 +127,6 @@ pub fn main() !void {
cards.sort(CardSortContext{ .list = cards.values() });
var allPrinted = std.ArrayList([]const u8).init(allocator);
const pdfHeight = c.PDF_LETTER_HEIGHT;
const pdfWidth = c.PDF_LETTER_WIDTH;
const pdf_doc: *c.pdf_doc = @ptrCast(c.pdf_create(pdfWidth, pdfHeight, &c.pdf_info{ .creator = ("My Software" ++ " " ** 53).* }).?);
var rowToPrint = std.ArrayList(TextCard).init(allocator);

Binary file not shown.