It is currently 02 Dec 2020, 21:35
Text Size

Updates on the way.

MicroProse's Shandalar Campaign Game, now with new cards & a new look!

Moderators: BAgate, drool66, stassy, Aswan jaguar, gmzombie, CCGHQ Admins

Re: Updates on the way.

Postby stassy » 05 Mar 2016, 04:59

There is to note that for some reasons, Shandalar will crash in duel only mode if you use the command prompt windows instead of a custom shortcut.

Everything else seems to work good at 1st glance.
Posts: 5274
Joined: 25 Feb 2009, 07:06
Has thanked: 471 times
Been thanked: 337 times

Re: Updates on the way.

Postby Aswan jaguar » 05 Mar 2016, 05:31

A humongous update,I don't dare even to number to 3000 !!! It will take me forever.Once again thanks Korath for the great work and effort you make for Shandalar! =D>

People don't forget to erase the cards implemented with this new update from the list of your requested cards in SHANDALAR CARD wishlist! ask for NEW cards!
Last edited by Aswan jaguar on 05 Mar 2016, 05:47, edited 1 time in total.
Trying to squash some bugs and playtesting.
User avatar
Aswan jaguar
Super Tester Elite
Posts: 7289
Joined: 13 May 2010, 12:17
Has thanked: 613 times
Been thanked: 331 times

Re: Updates on the way.

Postby Misaka Mikoto » 05 Mar 2016, 05:56

Clean install works fine for me. Thank you!
User avatar
Misaka Mikoto
Posts: 8
Joined: 21 Nov 2015, 08:01
Has thanked: 2 times
Been thanked: 2 times

Re: Updates on the way.

Postby stassy » 05 Mar 2016, 06:16

Kozilek's Translator cardimage is missing after checking Commander 2015 and Oath of Gatewatch cardimages :

Posts: 5274
Joined: 25 Feb 2009, 07:06
Has thanked: 471 times
Been thanked: 337 times

Re: Updates on the way.

Postby Korath » 05 Mar 2016, 12:45

Comparatively unsurprising - it was one of three cards I added to the OGW list late in the process, so would have been easy to miss. The other two were Expedition Raptor and Visions of Brutality - are they missing too? I haven't gone through artwork reinstallation myself yet. All three are in the "Not used" folder in the second download here.

On another note, anyone have any bright ideas for an icon design for "this spell can't be countered"? The best I've come up with is vaguely inspired by Counterbalance's art, and I'm really not happy with it:
cant-be-countered.png (2.78 KiB) Viewed 4880 times

Also, any other (probably keyworded) abilities people would like to see icons for? I mostly don't add them of my own volition unless at least one card adds them to others. Prowess seems like a contender. Possibly "can't attack", though that overlaps with Defender, of course.
User avatar
Posts: 3492
Joined: 02 Jun 2013, 05:57
Has thanked: 489 times
Been thanked: 984 times

Re: Updates on the way.

Postby stassy » 05 Mar 2016, 13:01

The "can't be countered" effect feel like "unblockable", so it's hard to come up with a simple symbol that doesn't make think of the latter, like those:



Posts: 5274
Joined: 25 Feb 2009, 07:06
Has thanked: 471 times
Been thanked: 337 times

Re: Updates on the way.

Postby Sonic » 05 Mar 2016, 16:13


Added missing Expedition Raptor, Kozilek's Translator and Visions of Brutality.

Removed Ovinomancer - duplicated in

Updated total number of cards in CardArtManalink folder: 16625

See below for download:
Working On: Life, the Universe, and Everything.
User avatar
Posts: 827
Joined: 27 Feb 2010, 00:37
Has thanked: 3 times
Been thanked: 160 times

Re: Updates on the way.

Postby stassy » 07 Mar 2016, 09:24

The Bug Tracker doesn't have the AS1 option available in the Ticket creation, either in the bug nor request feature section.
Posts: 5274
Joined: 25 Feb 2009, 07:06
Has thanked: 471 times
Been thanked: 337 times

Re: Updates on the way.

Postby gmzombie » 07 Mar 2016, 15:53

So much good stuff here. I just wish I could figure out how to copy your ogw src to manalink. Haven't figured out how to code just yet..I'm working on that though. :D
can I maze of ith your snowstorm? old stuff in here. don't use this stuff right now till I get time to get back into it and readjust.
Posts: 856
Joined: 26 Feb 2009, 01:05
Location: Wyoming, Mi
Has thanked: 200 times
Been thanked: 50 times

Re: Updates on the way.

Postby Korath » 08 Mar 2016, 22:59

The bugtracker version dropdown menu can only by edited by administrators, so it'll get there as soon as Goblin Hero reads his PMs. <whipcrack/>

The first steps towards the next version, as such are wont to do, have a large percentage of cards using new features - experience counters, cards that can't be countered, spells with (some forms of) multiple non-matching targets, and cards with protection from arbitrary qualities instead of just colors or artifacts:
within | Open
Emrakul, the Aeons Torn
Grip of Desolation
Auriok Windwalker
Baneslayer Angel
Debt of Loyalty
Devoted Caretaker
Elite Inquisitor
Guardian of the Guildpact
Guildscorn Ward
Harrier Griffin
Kitsune Riftwalker
Knight of the Skyward Eye
Kor Line-Slinger
Mantle of Leadership
Midnight Duelist
Mistmeadow Skulk
Order of the Golden Cricket
Pale Wayfarer
Repel the Darkness
Safehold Sentry
Soldier of the Pantheon
Spare from Evil
Tattoo Ward
Veteran's Reflexes
Æther Tradewinds
Aura Finesse
Azimaet Drake
Blizzard Elemental
Cerulean Sphinx
Churning Eddy
Coma Veil
Controlled Instincts
Drake Hatchling
Dreamscape Artist
Etherium Astrolabe
Glimmerdust Nap
Horizon Drake
Horseshoe Crab
Illusory Ambusher
Krovikan Mist
Last Word
Lost in the Mist
Lu Su, Wu Advisor
Merrow Wavebreakers
Pearl Lake Ancient
Peel from Reality
Sarcomite Myr
Shoreline Raider
Silkwing Scout
Sphinx of the Final Word
Stream of Unconsciousness
Survivor of the Unseen
True-Name Nemesis
View from Above
Vigilant Drake
Wilderness Hypnotist
Black Poplar Shaman
Carrion Howler
Cruel Revival
Dark Dabbling
Deepcavern Imp
Enemy of the Guildpact
Footbottom Feast
Foul Renewal
Grave Exchange
Gristle Grinner
Keeper of the Dead
Masked Gorgon
Nath's Buffoon
Nectar Faerie
Poisonbelly Ogre
Ridged Kusite
Scarred Vinebreeder
Skeletal Kathari
Slinking Skirge
Spiteful Blow
Wake of Vultures
Weed-Pruner Poplar
Bazaar Trader
Bloodpyre Elemental
Bloodshed Fever
Diaochan, Artful Beauty
Exquisite Firecraft
Ghor-Clan Bloodscale
Into the Maw of Hell
Lunk Errant
Ma Chao, Western Warrior
Magnetic Theft
Magus of the Arena
Mogg Assassin
Orcish Bloodpainter
Punish the Enemy
Reckless Ogre
Rending Volley
Rogue Kavu
Seething Pathblazer
Shower of Sparks
Skizzik Surger
Soul's Fire
Soulsurge Elemental
Sunflare Shaman
Tail Slash
Tears of Valakut
Thoughtbound Primoc
Viashino Skeleton
Volcanic Fallout
Volcanic Offering
Wandering Goblins
Wild Swing
Yuan Shao's Infantry
Aerie Ouphes
Blurred Mongoose
Durkwood Tracker
Dwell on the Past
Entangling Vines
Epic Confrontation
Everbark Shaman
Forcemage Advocate
Freyalise's Radiance
Gaea's Blessing
Gaea's Herald
Gaea's Revenge
Grave Bramble
Great Sable Stag
Harbinger of Spring
Heal the Scars
Hunt the Weak
Isao, Enlightened Bushi
Kavu Chameleon
Lace with Moonglove
Leyline of Lifeforce
Mistcutter Hydra
Perilous Forays
Petrified Wood-Kin
Plated Rootwalla
Prey Upon
Ronom Hulk
Root Sliver
Savage Punch
Simian Brawler
Simic Ragworm
Soul's Might
Spoils of Victory
Stomp and Howl
Superior Numbers
Terra Stomper
Thrun, the Last Troll
Time to Feed
Vexing Beetle
Warren-Scourge Elf
Wild Mammoth
Wing Puncture
Wormwood Dryad
Wrap in Vigor
Abrupt Decay
Azorius First-Wing
Bartel Runeaxe
Beetleform Mage
Congregation at Dawn
Cunning Strike
Curse of Chains
Daxos the Returned
Double Cleave
Executioner's Swing
Ezuri, Claw of Progress
Godtracker of Jund
Grazing Kelpie
Grim Contest
Groundling Pouncer
Kalemne, Disciple of Iroas
Last Stand
Loxodon Smiter
Meren of Clan Nel Toth
Merrow Grimeblotter
Mizzix of the Izmagnus
Morgue Burst
Plague Spores
Polis Crusher
Rakeclaw Gargantuan
Restore the Peace
Sangrite Surge
Skarrgan Skybreaker
Skyclaw Thrash
Spellbreaker Behemoth
Suffocating Blast
Supreme Verdict
Surrak Dragonclaw
Tetsuo Umezawa
Trap Essence
Tsabo Tavoc
Vagrant Plowbeasts
Vectis Agents
Vengeful Rebirth
Vexing Shusher
Woodvine Elemental
Wreak Havoc
Altar Golem
Brass Gnat
Brass Secretary
Brass Squire
Cyclopean Snare
Goblin Dirigible
Goblin War Wagon
Herbal Poultice
Revelsong Horn
Scroll of Origins
Wanderer's Twig
as well as a re-rewrite of Artifact Ward that only does what the card says, instead of granting full protection from artifacts like every other incarnation in Shandalar and Manalink.

Reliably detecting whether an "effect" (in the context of the Magic the Gathering comprehensive rules) is from a spell, permanent, or activation, as needed by cards like Emrakul, the Aeons Torn or Bartel Runeaxe, was surprisingly tricky, and I'm only somewhat confident I got it right.

The difficulty arises from "effect" cards (in the context of the MicroProse MTG implementation - the little orange cards that pop up everywhere) - these can be permanent or until-end-of-turn or until-end-of-whatever effects (comp rules sense again), delayed triggered abilities, workarounds for engine limitations (notably for when-this-dies triggers), etc. If one of these needs to target or deal damage to something, it contains a reference to its source card, but that card is generally no longer where it was when the effect card was created - it'll just about never still be on the stack or the player's hand if that was where it was, and may no longer be on the battlefield, and there's no way to tell.

An extremely common case is for damage "cards", since the MicroProse MTG engine still uses 4th-edition-era rules here, where damage isn't applied until the stack is empty, and then goes through a damage prevention phase. Damage effect cards are a bit unusual in that they're always created by the same function - damage_creature() in the original executables and in Manalink (damage_creature_or_player() and damage_player() are frequently-used front ends, though they always forward to damage_creature() internally), fully replaced by deal_damage() in Shandalar. In theory, then, damage effects can check whether their immediate source is a spell or activation or permanent and record that in a field on the damage card, and I in fact tried this at first... but other delayed triggers and effect cards can sometimes deal damage too, so this turned out not to be enough.

Bartel Runeaxe and Tetsuo Umezawa I think should be ok, since I can't think of any Auras that create delayed effects while they're still spells, let alone targeted ones.

Emrakul, the Aeons Torn, though, is problematic. I'm currently relying on a heuristic that mostly seems accurate - for damage, I'm calling it unprotected if the damage's immediate source was from an activation effect card (which I can check easily - there's a small handful of spells that can activate while on the stack, and none of them are in Shandalar or I think in Manalink) or from a permanent type (none of which can deal damage while on the stack). Attachments and blocking aren't an issue, since Aura, Equipment, and creature permanents aren't spells. Targeting currently just checks if the source is still on the stack or in a player's hand, so something like "Instant - At the beginning of your next upkeep, [this card] deals 3 damage to target creature." will be able to target it. (Ulamog, the Infinite Gyre and Ulamog, the Ceaseless Hunger will become annoying corner cases here once you can respond to their triggers with something like Purelace.) So I'm going to have to either come up with a more reliable way of detecting this sort of situation, or do a comprehensive search for cards that might cause it.

I'm also going to have to come back and revisit this once cards can activate from a player's hand. I currently treat cards-in-hand as spells, even though they technically aren't until casting begins; otherwise, you'd be able to begin casting a Swords to Plowshares when Emrakul's the only creature on the bf, not be able to target it, and have to cancel. Worse, the AI goes through the same loop, over and over.

There's also going to be eventual problems with loss of abilities, but I don't expect them to be common, or really to ever actually arise in actual gameplay. The sort of scenario would be a permanent that grants continuous protection to one or more other permanents (like Guildscorn Ward), an effect like Humble or Humility that removes all abilities with a later timestamp, then another effect, either temporary or permanent, that grants a different variety of continuous protection to one of the first set of permanents (like Spare from Evil) with the latest timestamp. In any reasonable implementation for loss-of-ability effects I can think of, while the Humble could correctly remove the marker from the affected permanent that indicates something else is giving it a miscellaneous protection of some sort, the Spare from Evil would add it back for its own effect, and the Guildscorn Ward wouldn't be able to tell the difference.

And, finally, there's still about 40 unrewritten MicroProse cards that can target permanents. These'll all have to be updated to use the targeting functions in Shandalar.dll, since the original versions don't record which card is doing the targeting, just its colors and whether it's an artifact or creature. About a third can already be done idiomatically, using the library of functions I've built up in Shandalar.dll that future-proof them against things like Deflection effects; the rest are a laundry list of things I can't easily do yet - damage prevention, multiblocking (on Blaze of Glory), cards with both mana- and non-mana abilities (Desert, Strip Mine), complex aftereffects (Cyclopean Tomb, Guardian Angel), add subtypes (Mishra's Factory), and so on. For most of these, at the worst I'll still be able to put in shims that use modern targeting, and be able to put off the full rewrites to another day. I'm fairly sure that the nine damage prevention and redirection cards only target the damage effect card, though, not the object being damaged as their current wording requires. Samite Healer is a typical example.

Dealing with all of those is a release blocker. I've also got "effects that add or remove subtypes", "turn defender into a real ability that can be added or removed from cards like in Manalink", and "maybe deal with cards with both mana and nonmana abilities so I can finally have Kjeldoran Outpost in the game" on my wishlist for the next release, depending on how long the rewrites take.
Last edited by Korath on 17 Mar 2016, 01:57, edited 1 time in total.
User avatar
Posts: 3492
Joined: 02 Jun 2013, 05:57
Has thanked: 489 times
Been thanked: 984 times

Re: Updates on the way.

Postby Korath » 14 Mar 2016, 02:28

And on further review, no, none of the cards redirecting or preventing damage to permanents target those permanents. They are: Alabaster Potion, Amulet of Kroog, Argivian Blacksmith, Guardian Angel, Healing Salve, Jade Monolith, Oasis, Rakalite, Samite Healer. (And a handful of cards identical to one of those (mostly Sammy) except for cost/keyworded abilities/power/toughness: Alabaster Wall, Benevolent Ancestor, Clergy en-Vec, Femeref Healer, Healing Leaves, Kithkin Healer, Militant Monk.) I'm currently leaning towards leaving them broken - since they don't reference their putative target at all, they can't be patched in-place like I did with most of the others; and if nobody's been up in arms about Samite Healer's ability to prevent damage to Black Knight, I can't see them objecting too strenuously to Oasis being able to do the same for Horizon Drake. At least for the time being.

Other than those, I've gotten through just about all of the others. The remainder are four astral cards - Orcish Catapult, Goblin Polka Band, Power Struggle, and some of Faerie Dragon's effects. While these all have a similar problem as the damage prevention cards, in that they don't (or don't always) fully target the cards they affect, they're all effects that I can feasibly rewrite at this point.


The reason I've been putting off cards that have both mana and non-mana activated abilities can more or less be summed up by the scenario: "You have nothing on the battlefield but a Rishadan Port. Can you tap your opponent's land with it?" Obviously not, but the way this engine deals with mana costs is to compute the total possible mana that could be produced, then compare each card's activation costs against that. There's nowhere to store which card is responsible for a given chunk of potential mana, and so no way to directly indicate a card like Rishadan Port can't activate to tap a land with mana paid by tapping itself.

Manalink's solution is to pretend these cards' non-mana abilities have a higher cost when it's trying to determine whether they can be activated - {2}, {T} for Rishadan Port, {1} {W} {W}, {T} for Kjeldoran Outpost, {6}, {T}, sacrifice for Dreamstone Hedron, and so on - and, when it is being activated, temporarily tap it before charging mana.

The second part of this works ok in practice - there aren't, to my knowledge, any cards that change the amount of mana they produce depending on whether some other card you control (the one activating, in this case) is tapped - but the first is very fragile. Enchant that Rishadan Port with a Wild Growth or get a Mana Flare onto the battlefield, and suddenly its first ability produces {C} {G} or {C} {C} and the game thinks that's enough to pay for the second ability again.

This is a problem that I've been irritated with for a couple years now. For a long time, I couldn't come up with any better solution than the fairly obvious one: to silently tap the Port, recompute potential mana to see if it had enough to pay the {1} for its second ability, then untap it and either re-recompute potential mana for the benefit of other cards or restore a stashed copy made at the start of the process. MPMTG's CPU requirements are modest by the standards of today's hardware, and I doubt that something like that would have a noticeable effect even when multiplied by thousands of AI branches per turn, but it's still pretty distasteful - it defeats the whole point of precomputing potential mana in the first place, and that's a quite elegant optimization most of the time.

Another fairly obvious method - make every card that registers itself as able to produce mana also respond to another event that makes them remove their mana from the potential mana count instead of adding it, like EVENT_COUNT_MANA does. This was promising, but turned out to be impractical: in edge cases similar to the ones that break when you pretend Rishadan Port costs {2} {T} to tap a land, this ends up needing to be able to find which specific bit of potential mana was previously announced by the card. And if that's recorded anyway, there's no need for the new event.

My current thinking is to put this off for a while longer until I begin to tackle cards with restrictions on how their mana costs or produced mana may be paid or spent - Imperiosaur, Myr Superion, Eldrazi Temple, Cavern of Souls, and so on. I'm already going to have to mark each point of mana with what produced it both in the mana pool and in the potential mana pool to deal with the first two of those examples, and probably to deal with the latter two as well. I may do something like the "good enough" Manalink solution as a stopgap before then - I really want Kjeldoran Outpost - but it'd be error-prone to future-proof it for when I do have a permanent solution in place.

On the other hand, looking at Strip Mine and Elephant Graveyard in my to-rewrite list for miscellaneous protection made me realize that none of that really matters if the non-mana ability has no mana in its cost, so I went through and programmed all the otherwise-blindingly-easy cards that looked like " {T}: Add [some mana] to your mana pool. {0} / {T} / sacrifice something / etc: Do something else."
and some other cards that caught my eye | Open
Alaborn Veteran
Auriok Bladewarden
Kabuto Moth
Kitsune Loreweaver
Loxodon Mender
Pang Tong, "Young Phoenix"
Steelshaper Apprentice
Stern Marshal
Takeno's Cavalry
Baleful Stare
Blinkmoth Infusion
Filigree Sages
Neurok Prodigy
Oboro Breezecaller
Soratami Mirror-Guard
Soratami Rainshaper
Teardrop Kami
Withering Gaze
Acolyte of Xathrid
Cabal Torturer
Cackling Imp
Hunger of the Nim
Scuttling Death
Wall of Blood
Akki Raider
Blood Rites
Ogre Recluse
Orcish Cannoneers
Screaming Fury
Shinka Gatekeeper
Steam Vines
Accelerated Mutation
Arbor Elf
Fyndhorn Brownie
Rebuking Ceremony
Roaring Slagwurm
Tel-Jilad Lifebreather
Thriss, Nantuko Primus
Traproot Kami
Trolls of Tel-Jilad
Viridian Lorebearers
Viridian Scout
Crenellated Wall
Galvanic Key
Honor-Worn Shaku
Imi Statue
Nine-Ringed Bo
Scale of Chiss-Goria
Thermal Navigator
Voltaic Construct
Ghost Town
Heart of Yavimaya
High Market
Maze of Shadows
Petrified Field
Unstable Frontier
This keeps me from adding effects that increase activation costs, but there aren't many of those, and I couldn't have done them properly while any cards at all are left still using their MicroProse implementations in Shandalar.exe anyway. Gloom is a theoretical problem, so I left out Gaea's Touch; Iceberg is the only other enchantment with both mana and non-mana activated abilities, and it has a mana cost. I can accept for now that these will incorrectly show up as activateable if there isn't enough other mana to pay for them and there's a Gloom on the battlefield and the card's been Sleight of MindPurelace'd to the right color and either there's an Enchanted Evening on the battlefield or it's a copy made with Copy Artifact.
User avatar
Posts: 3492
Joined: 02 Jun 2013, 05:57
Has thanked: 489 times
Been thanked: 984 times

Abandoned Shrine 2

Postby Korath » 20 Mar 2016, 08:07

Last edited by Korath on 19 Dec 2016, 19:23, edited 2 times in total.
User avatar
Posts: 3492
Joined: 02 Jun 2013, 05:57
Has thanked: 489 times
Been thanked: 984 times

Re: Updates on the way.

Postby Bog Wraith » 20 Mar 2016, 19:22

Bug Tracker does not have Abandoned Shrine 2 as a selection yet so I am posting this here.

After installing the 4 files to update from Abandoned Shrine 1, when I start the program, the game does not run & I get the error report below.

When restoring the 4 files from the Abandoned Shrine 1 backup I have, everything goes back to normal & the game starts & plays as usual.

Here is the error report window:
Shandalar.exe Error
'Twas in the bogs of Cannelbrae
My mate did meet an early grave
'Twas nothing left for us to save
In the peat-filled bogs of Cannelbrae.
User avatar
Bog Wraith
Global Mod 1 (Ret)
Posts: 1101
Joined: 28 May 2008, 22:40
Location: Shandalar
Has thanked: 425 times
Been thanked: 152 times

Re: Updates on the way.

Postby Korath » 20 Mar 2016, 23:51

Nothing related has changed. Is anyone else seeing this?

(Though since you brought it up, I now see that that function's being called only when it isn't needed, instead of only when it is; so non-Manalink cards and cards from DTK and later only ever show the first version of their artwork. D'oh.)

AS2 will show up in the bugtracker when Goblin Hero sees his PMs, as usual. You can still report problems there and say "AS2" in the title or text or whatever; I'll edit the field once it's in the dropdown.
User avatar
Posts: 3492
Joined: 02 Jun 2013, 05:57
Has thanked: 489 times
Been thanked: 984 times

Re: Updates on the way.

Postby Misaka Mikoto » 21 Mar 2016, 14:55

AS2 works fine for me; no errors on launch.
User avatar
Misaka Mikoto
Posts: 8
Joined: 21 Nov 2015, 08:01
Has thanked: 2 times
Been thanked: 2 times


Return to Shandalar

Who is online

Users browsing this forum: Hadsingrinsen and 4 guests

Who is online

In total there are 5 users online :: 1 registered, 0 hidden and 4 guests (based on users active over the past 10 minutes)
Most users ever online was 1371 on 09 Feb 2020, 16:22

Users browsing this forum: Hadsingrinsen and 4 guests

Login Form