Wesnoth.org post-migration status report

I posted a rather extensive report of the results of the asheviere.wesnoth.orgbaldras.wesnoth.org migration to the developers’ ML because Ivanovic wanted me to post updates to the ML for some weird reason. I am fairly sure the people who are actually subscribed to it skip them entirely.

Here’s a link to the email message.

Because I care about transparency and stuff, I pointed out an important thing there:

[…] the migration process went smoothly and now the wiki is running MediaWiki 1.21.2 instead of 1.16.1. Look up 1.16.1's release date and the branch's EOL date and you'll understand why I've been saying "not really optimal" and "deplorable" when referring to the wiki.

(Only after sending the mail I realized that I wrote MW 1.16.1 instead of 1.15.1. The version that was running on wesnoth.org is indeed 1.15.1, not 1.16.1.)

I don’t really have anything to add here, but I am providing a verbatim copy of the email after the break anyway, only because it’s a wall of text and I like those.

Continue reading

Wesnoth.org moving hosts

As announced in the Wesnoth.org forums, today (although it’s still yesterday for me) we are moving most of Wesnoth.org’s facilities to a new host, to continue the migration process that started with the previous move of add-ons.wesnoth.org, devdocs.wesnoth.org, and files.wesnoth.org.

What you probably wouldn’t guess from the announcement is how complicated the underlying machinery actually is. I did not want to clog up the post with additional details because that is often confusing for most people, but here is a list of services that will be directly affected by this whole operation:

Continue reading

Wesnoth UMC Review: Shadows of Deception

For very long, there have been only two (2) campaigns in the Wesnoth add-ons server that follow the “shadowmcanon” established by Invasion from the Unknown and After the Storm; the campaigns in question are Invasion from the Unknown, and After the Storm. Yes. That’s it. The only other campaign whose author has consulted plot matters with me and followed the shadowmcanon correctly (as opposed to blindly extrapolating from IftU and AtS and making grossly wrong assumptions about things that are left unspecified or presented in a deliberately vague fashion) is The Silver Lands, but it was abandoned far too early during its development cycle.

But the status quo has just changed with the release of version 0.5.0 of Shadows of Deception (NX-RPG), a campaign by vultraz for Wesnoth 1.11.6 and later. So far, six scenarios out of the first set of 12 have been done; the goal is two episodes.

Of note is the fact that vultraz has been a member of my After the Storm internal playtesting and prose reviewing team for a couple of years.

Per the description found in the campaign’s forum thread, Shadows of Deception (SoD for short) is “a half-RPG, half regular style Wesnoth campaign, incorporating several custom gameplay elements as well as your typical battle scenarios”. What does half-RPG mean? Damn if I know — I don't even know what a full RPG would be. Having playtested SoD prior to the release myself, though, I can say that the campaign places a fair amount of emphasis on the story while experimenting with some unusual gameplay mechanics.

Continue reading

After the Storm 0.9.6

Version 0.9.6 is out!

Some people in the audience might have heard of a certain revamp taking place a little while ago in the multiplayer Era of Chaos add-on. In fact, this effort was originally started by artisticdude for AtS; he did the basic Demon units (Demon, Demon Grunt, Demon Warrior, Demon Zephyr), which received some touch-ups from me, and then I proceeded to redraw their cousins from scratch in record time. The differences compared to the old baseframes might seem jarring at first, but I can confirm that the original oversized sprites used in IftU and AtS all these years were merely an oversight and not something I actually did on purpose.

This release mostly revolves around graphic updates for the aforementioned unit type groups, compatibility fixes and improvements for the upcoming Wesnoth 1.11.6 (whenever it’s ready), and a catastrophic bug in Episode III scenario 6 (Divergence). Additionally, a unit type was renamed, breaking non-start-of-scenario saved games for the only scenario in which it appears; some unit type descriptions for the in-game help were rewritten, expanded upon, or added for the first time (“FIXME” never counted as a description), and a few unimportant inconsistencies were solved. Not listed in the changelog are a few minor dialogue additions to the last segment of Episode III scenario 10 (Blood).

For those who can afford the 7.32 MiB download, I strongly advise upgrading now instead of continuing to use older versions. Aside from the aforementioned renaming and the scenario it affects, nothing will break. Also note that this is the last version that will accept old saved games from version 0.9.3 and earlier. The faerie race renaming support code will be gone in version 0.9.7.

Special thanks to vultraz, 8680, and artisticdude for their help.

The complete changelog for this version follows:

Version 0.9.6:
--------------
* General:
* The workaround for the `[move_unit_fake]/[move_unit]` interaction with
`[lock_view]` is now used only for Wesnoth 1.11.0 through 1.11.5 since a
superior solution is now built into version 1.11.6.
* Graphics:
* New or updated unit graphics: Argan, Elyssa (E1/E2), Demon, Demon Zephyr,
Demon Grunt, Demon Warrior, Demon Messenger, Demoness Spelldancer, Demon
Stormtide, Demoness Hellbent Tide, Demoness Slashing Gale, Angel of Blood,
Errant Executor, Gatekeeper.
* Eliminate various missing image warnings caused by changes to the handling
of custom unit ellipses for ZoC-less (e.g. L0) units in Wesnoth 1.11.6 and
later.
* Fixed issues with invisible L0/stunned unit ellipses on Wesnoth 1.11.6 and
later.
* Scenarios:
* E2S4 - Shifting Allegiances:
* Fixed Tara's loyal icon overlay ending up assigned to a Rock Golem.
* E3S4.1 - Outpost of Hell:
* Mark "Defeat all enemy leaders" as an optional bonus objective as opposed
to alternative.
* E3S6 - Divergence:
* Fix a severe gold management issue.
* Units:
* New unit type descriptions:
* Demon, Demon Zephyr, Demon Grunt, Demon Warrior
* Demoness Messenger
* Elvish Civilian
* Elvish Hunter, Elvish Trapper, Elvish Prowler
* Elvish Wayfarer
* Dusk Faerie, Night Nymph, Nightshade Fire
* Sylvan Warden
* Civilian, Messenger
* Animated Rock, Rock Golem.
* Renamed Demon Spelldancer to Demoness Spelldancer (UI name only).
* Renamed Demon Messenger to Demoness Messenger (UI name only).
* Replaced Demon Lord unit type with the Errant Executor.

The future of Invasion from the Unknown (and After the Storm, sort of)

Well, the cat’s out of the bag already. Not that I really intended to keep the plan under wraps for very long in the first place—perhaps I should have done that—but I already implied, and then confirmed that this is a thing that is taking place.

Invasion from the Unknown is being rewritten.

Continue reading

After the Storm 0.9.1

Version 0.9.1 is out!

Since the campaign is complete, any future—and hopefully infrequent—releases from now on will consist mostly of bug fixes, balancing changes, art updates, and very minor features. On this particular occasion, I played the campaign end-to-end on Wesnoth 1.11.2 to make sure various 1.11.x-specific issues were solved as early as possible in order to make the eventual transition to 1.12 as smooth as possible. I will try to make sure future releases of the campaign are well-tested against future Wesnoth development versions as well. (Future, future, future.)

Because of a very annoying player side data loss bug (#20373) affecting various E3 scenarios, I decided to drop support for Wesnoth 1.11.1, thus only Wesnoth 1.10.x and 1.11.2 are supported for this release! I will simply ignore any future reports on technical issues occurring on 1.11.1.

Aside from the aforementioned, some other noteworthy changes in this release include making E3S13 an optional/bonus cutscene as it was originally intended to be, adding very simple AMLAs for two main characters throughout E2 and E3, updating the Aragwaithi units to match bumbadadabum’s and vultraz’s changes to the faction from the Era of Chaos add-on (as of version 1.1.0), as well as an amount of minor prose fixes and improvements from vultraz, 8680, and me.

The complete changelog for this version follows:

Version 0.9.1:
--------------
* General:
* Added workaround code for a problem with the `[lock_view]` implementation and
its interaction with unit movement via `[move_unit_fake]/[move_unit]` on
Wesnoth 1.11.x.
* Made it so sequences using `[animate_attack]` do not display a floating label
when dealing 1 HP damage since most of the time this is a consequence of
dealing 100% HP on the target with kill=no, or other reasons along the same
line.
* Graphics:
* New or updated unit graphics: Elynia, Ivyel, Argan.
* Scenarios:
* Fixed several instances (E1S7, etc.) of sighted events taking place
prematurely on Wesnoth 1.11.x.
* Fixed several instances of loyal units auto-recall code causing warnings on
Wesnoth 1.11.x.
* Minor prose fixes, tweaks, and enhancements throughout the entire campaign.
* E1S7 - The Search for the Past:
* Glyphs needed to end the scenario are now marked with a blinking tile
outline (requires halos to be enabled in Display preferences).
* Minor cutscene improvements.
* Reworked message glyphs' code so their messages can be triggered as many
times as the player wants (NOTE: the last glyph triggered will still
unconditionally trigger the end of the scenario).
* E1S9.1 - The Triad, part 1:
* Minor gameplay improvements.
* Removed duplicate character line during the initial sequence.
* E1S9.2 - The Triad, part 2:
* Reworked some code for increased robustness.
* E1S9.3 - The Triad, part 3:
* Reworked some code for increased robustness.
* E1S10 - Tears:
* Fixed gold carryover from E1S8 (Fear) being reduced to its 40% (for an
effective carryover of 16%) when calculating the initial player gold
supply for this scenario.
* Reduced minimum starting gold to compensate for the bug fix above.
* E1S11.1 - Return to Wesmere, part 1:
* Fixed "retrieving member of non-existent WML container" warnings at the
start of the scenario.
* E1S11.2 - Return to Wesmere, part 2:
* Fixed spurious "retrieving member of non-existent WML container" warning
at the end of the scenario.
* E2S1 - By the Moonlight:
* Minor balancing changes.
* E2S4 - Shifting Allegiances:
* Minor map balancing tweaks.
* Reduced turn limit from 34/33/32 to 28/27/26.
* Other minor balancing changes.
* E2S7 - Proximus:
* Fixed minor fog refresh issues during the initial cutscene.
* E2S8 - And then there was Chaos:
* Minor balancing changes to increase difficulty.
* E2S9 - New Hive:
* Minor balancing changes.
* E3S3 - Amidst the Ruins of Glamdrol:
* Apply the default AMLA to Kyara and Horo a predefined amount of times on
prestart according to the difficulty level.
* Made it so neither the player nor Nar-hamoth can land a hit on each other.
* E3S4 - Outpost of Hell:
* Fix specific units being unintentionally visible during a white screen
sequence.
* Fixed "trying to remove non-existent menu item" warning at the end of
the scenario on Wesnoth 1.11.x under certain conditions.
* Make sure side 2 units also get their demolition ability and overlay
removed at the end.
* E3S5 - Pass of Sorrows:
* Make the teleportation/exposition event in the middle of the scenario
work as intended.
* E3S7B - Dark Sea:
* Make the northwestern Shaxthal and eastern undead sides less prone to
stealing player villages.
* E3S9 - Dark Depths:
* Minor boss fight improvements.
* Minor cutscene improvements.
* E3S10 - Blood:
* Made the foreshadowing moon combination have a x4 multiplier effect
instead of x5 on all difficulty levels, not just Hard.
* E3S13 - Epilogue:
* Fixed some cutscene-only female units not having their gender specified
in WML or translatable strings.
* This scenario is now only accessible after recovering an object hidden in
a previous scenario.
* Terrains:
* Experimental fix for the long-standing gate clipping issue when adjacent to
stone wall corners.
* Units:
* Added sidebar icon for units affected by the 'stun' weapon special.
* Added sidebar icon for units affected by the movement range bind spell.
* Applied changes from bumbadadabum's "The Aragwaithi" add-on, versions 1.0.6
through 1.0.9, and "Era of Chaos" version 1.1.0:
* Archer HP increased from 26 to 28.
* Granted the new 'precision' weapon special to the Greatbow's ranged
attack.
* Increased Guard's blade resistance from 10% to 20%.
* Increased Guard's XP from 64 to 74.
* Decreased Guard's cost from 28 to 27.
* Decreased Pikeman's cost from 38 to 28.
* Increased Shield Guard's cost from 37 to 45.
* Increased Shield Guard's blade and pierce resistances from 10% to 20%.
* Granted the 'marksman' weapon special to the Swordsmaster.
* Renamed the Aragwaith Witch's image files (may break saved games from
E3S2).
* Various animation fixes and updates.
* Balancing:
* Increased Elynia's (E3) mystic fire attack strength from 5-4 to 5-5.
* Increased Elynia's (post-Divergence) ensnare attack strength from 9-3 to
9-4.
* Increased Forest Spirit's movement points from 5 to 6.
* Decreased Fallen Faerie's HP from 49 to 43.
* Decreased Fallen Faerie's wail attack strength from 12-3 to 11-3.
* Gave Anya and Elynia special AMLAs for E2 and E3.
* Fixed wrong description for Galas' bolas attack AMLA (stated magical as the
weapon special, it is actually slows).

After the Storm 0.9.0

After years and years of development, drama, script rewrites, field research, technological advancements, budget cuts, and temporal shenanigans, today, March 5th 2013, I can say for sure that After the Storm is complete with the release of the most important milestone yet: version 0.9.0, with all three episodes completed with 13 scenarios each.

A few caveats for people upgrading from the previous release:

  • This release adds the final Epilogue scenario for Episode III, which will become a bonus feature in 0.9.1. If you had previously finished AtS Episode III using versions 0.8.90 or 0.8.90.1, you will have a start-of-scenario save for the Epilogue scenario which you can use after upgrading to this version.
  • As usual, for the most stable experience I advise using Wesnoth 1.10.x — preferably 1.10.5 or a newer version when it becomes available. All episodes of this campaign were primarily developed and tested on 1.10.x, and there are subtle behavioral differences in the game engine between 1.10.x and 1.11.x that may break some sequences or cause other unintended side-effects.
  • Various issues reported by playtesters on Wesnoth 1.11.1 were fixed. Most notably, it implements a workaround measure for mainline bug #20373, which is relevant for Episode III scenarios starting from Dark Sea. People who experienced player information loss (recall and recruit lists, gold reserves) after Dark Sea on 1.11.1 will need to replay that scenario from the start-of-scenario save (NOT the Turn 1 save!) in order for Wesnoth to install the code in charge of solving that issue in later scenarios. This code will not work on Wesnoth 1.11.2 — you will need to finish Episode III on 1.11.1 before switching to 1.11.2 (whenever it is released, anyway).

This... has been a really long journey, to say the least, and I pretty much lost all hope of ever finishing this campaign at various points over past years. Development started in 2008 and quickly stagnated for various reasons:

  • Perceived lack/loss of interest from the audience
  • Excessive perfectionism on my part
  • Various IRL struggles, including health and personal matters
  • Constant conflicts of interest amongst the few people who were actually interested in IftU and AtS’ development
  • Mainline development tasks taking up my spare time
  • Wesnoth.org forums moderation and administration taking up my spare time

To say that I was overjoyed when the Big Merge took place just a couple of weeks ago would be a big understatement. This campaign became for me more than just another Wesnoth campaign as time passed — it became a part of me I thought I had left behind when IftU was first completed, a testament to my chronic failure to drive my own projects to completion.

After the Storm changed a lot since it was originally conceived in 2008. The original draft was both over-pretentious and subpar, and it was not what I wanted to create after IftU. I wanted to create something better than IftU, but I locked myself in a trap by relying on source material that was already broken by design. Making a better sequel became my obsession, and that obsession led to AtS’ stagnation during the development of Episode I.

But some time mid-2011, I finally saw that trying to achieve perfection was a flawed goal in its own right. What I should have been aiming for all along was to make something fun, something from which I could learn, something I would enjoy to play and create. It was that realization that finally led me to complete Episode I, and the rest was a blaze; a blaze that culminates with this release, today.

The final product is neither perfect nor it aims to be such. I do not think this campaign is for everyone, seeing as how the gameplay and plot are very tightly knit together, and the overall scenario count goes up to 39 without taking cutscenes, segmented scenarios, and bifurcation into account; however, unlike IftU, every episode is a separate campaign in its own right, and I believe that makes the overall experience more enjoyable and less chaotic, balancing-wise.

When I first wrote IftU, my grasp of the English language was as poor as my handle of storytelling in general was, to say the least. This also applies to AtS Episode I up to scenario 9, part 2 — which became the turning point for the campaign’s development when I finally chose to renounce perfectionism and embrace the fun in creation. But I digress. AtS’ prose is all my own output with minor amendments from my playtesters and proofreaders, and an experiment in style wherein I take breaks from mainline conventions on purpose, in a subtle and calculated manner. Attentive players may be able to point out those inflection points from just paying attention at the characters and their interactions — characters whose flaws and mistakes are not as detached from reality as the game’s fantasy setting or the subtext-based delivery may suggest.

The three-episodes structure was mostly an afterthought. AtS episode III became an amalgamation of a previous planned AtS sequel and an aborted IftU prequel. But this structure fits the narrative better than the original plan. Episode I establishes the setting and motivations for the protagonists, and provides more hints about the overarching plot than IftU did; Episode II gradually develops further on the characters’ inner struggles while providing entertaining gameplay and dropping even more hints about the grand scheme; and finally, on Episode III things go off the rails in pretty much every way possible—including gameplay—and the plot reaches its final resolution within the scope originally intended for AtS.

Some people will be unable to find or interpret the hints and may see the finale as an out-of-the-blue succession of events, all because I avoided indulging in long and heavy exposition sequences that leave nothing to the player’s imagination and reading skills. I am perfectly aware that this is an inevitability, because it is absolutely impossible to please everyone, as I have learned from my experience with activities otherwise wholly orthogonal to the storytelling field. I think some UMC authors should really keep this in mind whenever they feel tempted to abandon their efforts just because a vocal segment of their players doesn’t like their output.

Other people will not like AtS because “it’s not like IftU”. Perfectionism aside, it is impossible for it to be like IftU after all that I have learned in the meantime about storytelling, life, people, and myself. The circumstances under which IftU was created were entirely unique and I would have to trade many things which I have gained or lost since then in order to create another IftU — and I would not be pleased by the result in the end.

I think AtS works just fine as an IftU sequel, and a sequel does not have to fully embrace the spirit of the original to be such. It’s not like AtS isn’t littered with callbacks to IftU in direct and meta levels anyway. There are a lot of things in it to enjoy, and a lot of things to hate — and both are part of the plan!

But in the end, all that matters to me is that I like the finished product, had fun making it, and learned lots of things along the road.

For those who might think that AtS’ finale is a definitive conclusion to the involved characters’ respective arcs: no, it is not — but I allotted a specific amount of time and scenarios for telling their origin stories, and the campaign had to end at some point. Is there enough material for sequels? Hell, yes, but I don’t see myself making another Wesnoth campaign given all the technical and non-technical limitations imposed by the platform. The three ultimate protagonists have a whole journey ahead of them (as well as more characters to meet), and I would like to explore that in some other medium in the future. For fellow Wesnoth UMC authors, though, there is plenty of material left to work with if you pay attention to every single minor detail.

Of course, I am open to questions about everything you may want to know about the campaign, be it via forum PM, or posts in the campaign’s development topic. But I would appreciate it if people didn’t post topics for every single thing in Writers’ Forum — when that happens, odds are I will just ignore those topics in their entirety and not take the effort seriously. As a matter of principle, if you want to ask a campaign author about their work, you ask them directly through their official communication channels instead of walking to the closest park holding a massive sign in your hand.

With AtS 0.9.0 released, all I have left to do is to take care of fine-tuning scenario and unit balance, fixing any remaining prose issues (especially those annoying unit type descriptions for the in-game help system), dealing with missing/placeholder/subpar pixel art, and somehow find a portrait artist willing to work under my specific terms. The latter part will probably take ages, so don’t hold your breath waiting for AtS 1.0.0.

I will be forever grateful to the people (and pets) who helped me along this arduous and extended quest, even those who did so unwittingly — if you are reading this, odds are that you know who you are.

To conclude this post, the changelog for this version follows:

Version 0.9.0:
--------------
* General:
* Milestone: all scenarios completed.
* Scenarios:
* Deployed code to work around a side-switching issue affecting Wesnoth
1.11.1 during post-Divergence (E3S6) scenarios. The corresponding
mainline bug is #20373 and it is fixed on 1.11.2.
* Fixed various "wesnoth.get_side is deprecated, use wesnoth.sides instead"
warnings on 1.11.x.
* Minor story text grammar, style, and punctuation amendments.
* E1S6 - Quenoth Isle (Elves of a Different Land):
* Minor prose tweaks.
* E1S7 - The Search for the Past:
* Minor prose tweaks.
* E1S12 - The Queen:
* Minor prose tweak.
* E1S13 - Death and Rebirth:
* Fixed minor prose issue ("take risky choices" -> "make risky choices").
* E2S2 - The Heart Forest:
* Minor prose tweak.
* E2S11 - A Final Confrontation:
* Minor cutscene improvements near the end.
* E2S12 - Fate:
* Minor cutscene improvements.
* E3S8C - Breakdown:
* Don't allow summoning Fire Guardians until the player enters the
underground river passage.
* Fix objectives display inconsistencies throughout the scenario.
* Minor cutscene improvements.
* E3S8D - Destiny, part 2:
* Fixed Anya's movements not being undoable.
* E3S9: Dark Depths:
* Fixed minor cutscene glitches.
* E3S10 - Blood:
* Add a context menu item displaying a list of available attack
combinations and their effects.
* E3S13 - Epilogue:
* New scenario.
* Units:
* Balancing:
* Decreased Demon Slashing Gale's melee attack from 11-3 to 10-3.
* Decreased Demon Slashing Gale's ranged attack from 10-5 to 9-4.
* Fixed Chaos Arbalestier ranged attack animation failing to trigger.
* Fixed Shaxthal Turret not getting the biomechanical trait.
* Fix multiple "Descriptions should no longer include the name as the first
line" warnings on 1.11.1 and later.
* Fix unit types with missing faction prefixes in their names:
* Arbalestier -> Chaos Arbalestier
* Cataphract -> Chaos Cataphract
* Crossbowman -> Chaos Crossbowman
* Heavy Longbowman -> Chaos Heavy Longbowman
* Hide private variations for regular unit types from the help system on
1.11.x.
* Killed Kri'tan.

The full changelog—for versions 0.3.0 through 0.9.0—can be found here.

After the Storm: Three commits I never thought would happen

------------------------------------------------------------------------
r17326 | xxxxxx | 2013-03-01 09:11:52 -0300 (Fri, 01 Mar 2013) | 2 lines
AtS E3S13: enable completed scenario in production
------------------------------------------------------------------------
r17327 | xxxxxx | 2013-03-01 09:12:35 -0300 (Fri, 01 Mar 2013) | 4 lines
AtS: remove END_OF_PLAYABLE_SCENARIOS macro
AtS is complete. This macro no longer serves any purpose.
------------------------------------------------------------------------
r17328 | xxxxxx | 2013-03-01 09:12:57 -0300 (Fri, 01 Mar 2013) | 4 lines
AtS: remove ROCKS_FALL_EVERYONE_DIES macro
AtS is complete. This macro no longer serves any purpose.

*sheds a single tear*

The ubiquitous undocumented verbatim string WML preprocessor directive

Some time ago, I rewrote most of the PreprocessorRef article in the Wesnoth.org wiki to make syntax and examples clearer, but it seems I missed something.

[lua]
code = <<
wesnoth.dofile '~add-ons/After_the_Storm/lua/common.lua'
wesnoth.dofile '~add-ons/After_the_Storm/lua/npc.lua'
wesnoth.dofile '~add-ons/After_the_Storm/lua/gui/bug.lua'
wesnoth.dofile '~add-ons/After_the_Storm/lua/gui/character_action_dialog.lua'
wesnoth.dofile '~add-ons/After_the_Storm/lua/gui/item_choice_dialog.lua'
wesnoth.dofile '~add-ons/After_the_Storm/lua/gui/show_image.lua'
wesnoth.dofile '~add-ons/After_the_Storm/lua/gui/transient_message.lua'
wesnoth.dofile '~add-ons/After_the_Storm/lua/gui/top_message.lua'
wesnoth.dofile '~add-ons/After_the_Storm/lua/wlp.lua'
wesnoth.dofile '~add-ons/After_the_Storm/lua/After_the_Storm.lua'
>>
[/lua]

The << and >> ASCII angular quotes are actually part of the general WML preprocessor syntax, not the [lua] tag in particular. They were introduced for version 1.7.0 in r34037 and r34038 as quotes denoting a verbatim (i.e. not preprocessed) string. The committer’s intention was obviously to allow for more convenient inlining of Lua code in WML document, but that is not the only possible use for this feature.

I had worked this whole time under the impression that the [lua] tag was somehow magical and special to the WML preprocessor, when in reality, it is not. The only thing that is special about it is that most people use the << foobar >> syntax in order to avoid clashes with tokens that the WML preprocessor recognizes as directives, such as curly braces {} (the file/macro substitution directive), but that is merely a convention, not a requirement — unless you do have such conflicting tokens within your string literal, of course.

Incidentally, I only figured this out when deploying a special AI engine for certain AtS E3 scenarios a few days ago:

#define AI_BOSS_TARGETING_ENGINE _TARGETS_LIST
[engine]
name="lua"
code= <<
local ai = ...
return wesnoth.require("~add-ons/After_the_Storm/ai/eng/priority_target_engine.lua").init(ai)
>>
[/engine]
[modify_ai]
side=2
action=add
path="stage[main_loop].candidate_action[]"
[candidate_action]
engine=lua
name=change_attacks_aspect
id=change_attacks_aspect
max_score=999999
evaluation="return (...):change_attacks_aspect("+{_TARGETS_LIST}+")"
execution="(...):change_attacks_aspect()"
[/candidate_action]
[/modify_ai]
#enddef

In this snippet, the _TARGET_LIST argument needs to be substituted with a valid Lua table. However, for that one would have to use curly braces like this:

{AI_BOSS_TARGETING_ENGINE {"Hero 1","Hero 2"}}

That will not work, of course, since the preprocessor will see that as an attempt to include a file or macro named "Hero 1","Hero 2". The correct syntax is:

{AI_BOSS_TARGETING_ENGINE <<{"Hero 1","Hero 2"}>>

Now I just need to get around to documenting this thing some day, and figure out how it interacts with translatable strings and textdomains.

After the Storm 0.8.90 (a.k.a. “0.9.0 minus one”)

Version 0.8.90 (a.k.a. “0.9.0 minus one”) is out!

Episode III (Final) is now complete in this version, sans the final Epilogue scenario (which will eventually become a bonus feature) that is not part of the scenario count for various reasons that will become evident once 0.9.0 is released.

Some important caveats:

  • All scenarios after E3S6 (Divergence) were developed and tested on Wesnoth 1.10.x only, so if you are playing on 1.11.1 and you experience any issues, please report them on the forum topic.
  • Some code in later scenarios seems to be somewhat CPU intensive, performing significantly worse on my dual-core 2.1 GHz laptop than on my quad-core + HT 3.4 GHz desktop.
  • If you will play the last scenarios of Episode III with music, you must make sure you have upgraded the AtS Music add-on to version 0.2.0 first! This version was published on the add-ons server in advance a few days ago to give people time to upgrade in preparation for version 0.8.90 of the campaign proper
  • Official support for Wesnoth versions 1.9.10 through 1.9.14 has been dropped in this version. In theory, Wesnoth 1.9.14 should work just fine, but there are several minor bugs that were addressed later during the 1.10.x stable series that may affect this campaign.

Special thanks go to vultraz for playtesting this beast starting from E3S6 in less than a day (around 14 hours with breaks), and the other two playtesters (you know who you are!) who reported some glaring issues with E3S6 and E3S7A.1, which were addressed after the Big Merge and before the packaging of this release.

I will save the longer announcement (including plans for the future) for later, when the final Epilogue is done and 0.9.0 is released.

The changelog for this version follows:

Version 0.8.90 a.k.a. "0.9.0 minus one":
----------------------------------------
* General:
* Dropped remaining compatibility code for Wesnoth 1.9.14 and earlier.
* Scenarios:
* E1S11.2 - Return to Wesmere, part 2:
* Removed compatibility code for Wesnoth 1.9.5 through 1.9.8.
* Completed Episode III (sans Epilogue).
* Units:
* Balancing:
* Increased Elynia's resistance to impact damage from -10% to 0%.
* Decreased Demon Shapeshifter's ranged attack from 8-2 to 7-2.