Status report.
I've got a mostly-complete dev environment in place. Cygwin's various quirks had annoyed me to the point where I was really unenthusiastic about installing it again; and the perl shipped in standard mingw's minimal msys environment is so horrendously out of date - 5.8, released in 2008 - that it can't run any of the maintenance scripts I still had; so I looked into msys2. I'm mostly happy with it.
A major exception is with gdb. 64-bit gdb can't debug 32-bit programs, and the 32-bit version of gdb that msys2 ships can't trap SIGTRAP - it kills the thread that gets the signal instead of trapping to the debugger. So no breakpoints, and no UserDebuggerHotKey. Behavior's the same if I compile gdb myself. It does trap SIGSEGV, so that's something. The 64-bit version works fine, but that doesn't help for Manalink/Shandalar.
I don't yet have Photoshop on this machine, since I can't find my old installation media. I can't justify buying it again since I don't use it for work anymore and since the most recent non-subscription-only version is years out of date. There's
no way I'd be willing to pay $50 a month for the current version. (And they wonder why people steal it.) For now, I can limp along with the install on the old machine - it was installed to a drive I hadn't lost - but that's going to be unusably inconvenient in the long term.
I haven't yet begun to setup decompilation again either.
I've lost enthusiasm for working on manlands and other activate-to-animate-self cards, so it's going to be a long time before I get back to the ones I hadn't yet pushed. Those are mostly the ones that add a non-keyworded ability as they animate themselves, like
Raging Ravine and
Myth Realized. On the other hand, I've reconstructed the any-player-may-activate engine update, though I've tested it much less throughly than before, especially with respect to how the AI deals with it.
- Also, added just about all of the relevant cards | Open
- AEther Storm
Armageddon Clock (MicroProse rewrite)
Drain Power (MicroProse rewrite)
Endbringer's Revel
Erosion (MicroProse rewrite)
Errant Minion (Inexact - it reuses Power Leak, for which see below.)
Excavation
Feral Hydra
Flailing Manticore
Flailing Ogre
Flailing Soldier
Ifh-Biff Efreet (MicroProse rewrite)
Infinite Hourglass
Land's Edge
Lethal Vapors
Lord of the Pit (MicroProse rewrite)
Merseine
Oona's Prowler
Personal Incarnation (Partial MicroProse rewrite, so its owner activates it - see here.)
Power Leak (Partial MicroProse rewrite, so it triggers per its modern wording instead of activating during upkeep; but you still can't choose to pay more than 2 mana, if you were inclined to do so.)
Power Surge (MicroProse rewrite)
Quicksilver Wall
Ribbon Snake
Sailmonger
Saproling Cluster
Scandalmonger
Soul Ransom
Squallmonger
Task Mage Assembly
Tidal Control
Vintara Elephant
Volrath's Dungeon
Wall of Vipers
Warmonger
Well of Knowledge
Wishmonger
Zerapa Minotaur
Of the remainder, I plan to work on
Mana Cache tonight.
Deadly Designs will have to wait until
Conspiracy 2 is in Manalink.csv (I'll add it with Kaladesh);
Lightning Storm is a no-go, since it activates while on the stack (so not doable yet even if only its controller could do so);
Martyrdom,
Mercenaries, and
Samite Sanctuary prevent or redirect specific packets of damage, and I'm not going to do anything with that until the whole system's using modern rules instead of the fourth-edition-era damage prevention step; and I have so little confidence in the AI's ability to semi-intelligently activate
Clergy of the Holy Nimbus,
Knight of the Holy Nimbus,
Glittering Lion, and
Glittering Lynx that I'm not even going to try for now.
The original MicroProse
Armageddon Clock used a hack that let either player activate either player's cards during the upkeep phase. Not just
Armageddon Clock, but
every card that didn't specifically check for it. (See
this Manalink bug, the same one I mentioned in my last update post.) This was harmless for the AI, since the original MicroProse AI didn't speculate during upkeep, and only activated a card if that specific card forced the AI to. Most humans don't notice it, since the function that highlights activated cards' titles in yellow doesn't check for it (and so the AI's
Armageddon Clock didn't show up in yellow for you, either). And I was avoiding the problem in cards I'd rewritten in Shandalar, since I put in the specific check in the same place that all of my Shandalar cards check to see if you have enough mana to activate (even if the mana cost is 0, in anticipation of effects that modify cards' activation costs).
Still, since the MicroProse hack was no longer necessary (as I'd rewritten
Armageddon Clock to use the more general any-player-may-activate system) and since it complicated a lot of functions I was moving into Shandalar.dll to make the new system, I removed most of it. A side effect of part of it turns out to be the reason why the AI didn't spontaneously activate abilities and cast instants during upkeep, despite me having put in an abbreviated AI speculation loop during upkeep in both Manalink and Shandalar so that it deals with upkeep triggers intelligently. So now I'm seeing the AI do things like tap my creatures with
Icy Manipulator or
Enervate during my upkeep, and activating
Infinite Hourglass to remove counters only when it would benefit more from that than I would, without me having to do anything specific to encourage it. I imagine some cards like
Mana Short and
Icy Manipulator and so on could now stand to have some AI discouragement from using them during its own turn, but still, this was a totally unexpected and fairly major benefit.
Also, I learned enough doing this feature that making cards and abilities like cycling that activate from your hand is probably feasible, without a Manalink-esque Rules Engine hack, or even by faking them by making them alternative casting modes instead of real activations. I might even be able to do it without having to go through the hassle of setting up decompilation first.
I'd be thinking about making a release around now, except Kaladesh is going to be on Gatherer in another couple days, and I expect to be able to put in a fairly high percentage of it without much effort. Getting them from Gatherer into Manalink.csv will probably be harder - I still have the script that translates from Gatherer Extractor's xml output, but not the instructions I'd written up for how to use it, and those were nontrivial.