Having these in canon felt like a plot hole in other campaigns. If an
apprentice mage could make these amulets circa 350 YW then every village and
border-fort should have them, but Wesnoth's storylines work better if a
messenger on horseback is the usual method of long-distance communication. For
example, TSG is about a commander sent to discipline a lazy outpost, only to
find that they should have brought reinforcements. When it's the enemy trying
to communicate, DM S21 and UtBS S08 both involve stopping the messengers.
This changes the intro to have a beacons for communicating with the trade
caravans, I'm leaving it ambiguous whether it's a smoke signal or a fire
signal. Fire beacons might make more sense if the village sees the caravan's
campfires at night and, in normal usage, light the beacon to trade.
While this adds beacons to canon, they're an ancient technology with a limited
range and very limited bandwidth. There are easy plot reasons not to set
beacons up, such as the costs of having people watch for and maintain them,
there are easy plot reasons why they don't work on a given day, such as
weather, and there are easy plot reasons for attempted communication to be
ignored by assuming that it's a fire for a different purpose.
Previously suggested in https://r.wesnoth.org/p669889 .
* Add basic achievements functionality.
This reads the mainline achievements.cfg and then all the achievements of each installed add-on.
This is intentionally handled separately from other WML loading so that:
a) All achievements and their status are able to be displayed on the main menu right after Wesnoth starts and regardless of which add-ons are active.
b) Add-ons can add additional achievements to other content, whether UMC or mainline. For example, a modification that adds more achievements for mainline campaigns.
Marking something as achieved is handled by the new [set_achieved] tag and whether an achievement has been completed can be checked via [has_achievement].
There is no attempt to prevent people from manually editing which achievements they've accomplished.
NOTE: These are *not* in any way related to Steam achievements!
* revise I-type terrain codes so they can be filtered with wildcard
* update the few MP maps using these I-type codes
* update the few campaigm maps using these I-type codes
* Revise capitalisation as per https://wiki.wesnoth.org/ProseStyle
Capitalisation of race names was inconsistent in parts, even within the same scenario in some cases.
As per https://wiki.wesnoth.org/ProseStyle, race names are generally lower-case unless part of unit or place names, or a specific group (such as 'Quenoth Elves'):
* Elf/Elves/Elvish/Elven
* Drakes
* Dwarf/Dwarves/Dwarvish/Dwarven
* Goblins
* Gryphons
* Humans
* Mer/Merfolk
* Nagas
* Ogres
* Orcs
* Saurians
* Trolls
* Woses
I substitute 'human' for 'men' on occasion, not for PC-ness, but to make it clear it's a reference to the race, not males (non-humans sometimes say 'men' when speaking to fellow male soldiers, for example).
Capitalisation of titles is a little less straightforward. Clearly cases such as King Haldric, Queen Asheviere, Prince of Wesnoth, Great Chief, etc, are capitalised.
However, use of a title alone can be valid with or without capital, eg 'the king/King'. I try to be consistent and consider the context:
* Title is used in place of the name, eg compare 'by the King's order' with 'by Garard's order'
* Would the speaker show respect to the person concerned as their leader, or a foreign dignitary? Contrast, 'Asheviere, that vile queen'.
* Compare 'my king' with 'my father' (latter is not usually capitalised in everyday English)
* Occasionally, when the speaker may not otherwise know a character's name or the correct protocol to address, may say something like 'Sir Elf'.
I apologise if I run counter to previous revisions - removal of 'princess' as a direct address in Northern Rebirth, for example, also dealt with the capitalisation issue, if I recall correctly.
Miscellaneous changes:
* Magi, as plural of mage, is not usually capitalised.
* Council may be capitalised when referring to a specific instance, such as the Elvish High Council in the Ka'lian, but not in instances such as 'making council'.
The review focused solely on campaign prose - there may be cases in other data files where capitalisation needs revising too.
* Capitalise proper noun use of 'kingdom'.
Just as England may be referred to as such on its own, it was also known as the Kingdom of England.
In the same way, Wesnoth is usually referred to simply as Wesnoth, but it would be formally called the Kingdom of Wesnoth.
* Capitalise 'majesty' when used as an address.
For consistency with existing instances of 'Your Majesty'.
* Capitalise 'Land of the Dead'.
While we might not normally refer to such as a place as a proper noun, Delfador's Memoirs seems to establish this as a specific location in Wesnoth lore.
For consistency, also capitalise a few references to this place in Northern Rebirth and Son of the Black-Eye.
(Granted, this does make Iliah-Malal's line in DM S18 seem a bit awkward, contrasting with 'land of the living', but the precedent has been set throughout the rest of the campaign.)
* Capitalise instances of the Book of Crelanu.
I leave book as lower-case when it's not yet famously known as the Book of Crelanu, such as in Legend of Wesmere, as well as in DM S15, where it is simply described as a book belonging to the old mage Crelanu.
* Harbour of Tirigaz does not appear to be a formal (capitalised) name.
In S12, Tirigaz is only described as a 'harbour'. Other instances of Tirigaz describes it as (lower-case) a port city.
[ci skip]
- get_terrain and set_terrain replaced with direct indexing operations
- get_map_size mostly replaced with either the iterator or an on_board call.
Only a few cases really needed to know the size of the map for some other purpose.
- shroud and fog operations, village owner, time areas, and location filters
- get_terrain_info replaced with terrain_types table
- Map generation functions create_map and create_filter
This is about 10 lines of translatable text, not sure if it's okay to backport to 1.14.
The storyline itself is going to have large changes by 1.18 (maybe 1.16), so I'm not sure if
this will ever be in a stable release.
If a player loads a start-of-S02 save without the who_slew_mordak variable then it will still
work, showing the "I saw the killing blow with my own eyes" version.
Explanation for what's going on (put in the commit message because this bit is non-canon):
There are some "grey mages" in the Grey Woods, who appear in the Liberty
campaign. Most of the details of these were removed from 1.15, but in 1.14's
Liberty S06 they don't tolerate necromancers. SotA mentions an ancient elvish
civil war in these woods, with the ghosts still haunting the battlefield. I'm
assuming a general truce between elves and grey mages, on the understanding
that the grey mages are doing exorcisms of ghosts from the ancient war.
This elf has fallen on such hard times that he's considering being turned into a thrall by a necromancer as an upgrade. I'm thinking his keep is probably a bit rubbish. It's certainly not likely to be a human castle, which is what it was.
For both [scenario]map_file= and [replace_map]map_file=, this allows both of
these to have the same effect:
* map_file=campaigns/Heir_To_The_Throne/maps/01_The_Elves_Besieged.map
* map_file=01_The_Elves_Besieged.map
This allows a lot of copies of the campaign/add-on's name to be omitted. Thus
it's no longer necessary to change every scenario's .cfg file to rename an
add-on, or to move a campaign between UMC and mainline.
This makes [binary_path] a misnomer, as it now also handles a text-based type
of file, however that's going to be the correct path for campaigns or add-ons
that use the standard layout with images/, maps/, scenarios/, etc.
This commit has the change itself, in filesystem_common.cpp, and the updates
for most of the campaigns. DM, LoW, UtBS and WoV are omitted from this, as they
all use a macro to do the same effect:
#define MEMOIRS_MAP NAME
- map_file=campaigns/Delfadors_Memoirs/maps/{NAME}
+ map_file={NAME}
#enddef
Also backtracked the removal of wesnoth.get_recall_units, which is now available as wesnoth.units.find_on_recall - it's just more convenient than passing x=recall to wesnoth.units.find
since the recent changes to overlays= in particular 1a7724e547,
e71033374c and b2cd1cf6c [unit]overlays= is no longer the
recommended way to add an overlay and the use of the
apply_to=overlay effect is reccomended instead, so adding it
to the [trait] is the most natural option here.
this in particular fixes#4058 . Also people simply forgetting the
IS_LOYAL macro was a not-so-uncommon cause of bugs.
In some cases people want to give the LOYAL trait without giving the
loyal overlays for those cases i added a optional OVERLAY parameter to
the {TRAIT_LOYAL} macro, also heroes should now use {TRAIT_LOYAL_HERO}
instead which uses the hero overlay. The IS_LOYAL and IS_HERO macros are
no longer needed in combination with those traits.
In Caves of the Basilisk, give the monsters names so their descriptions
would show in-game. The descriptions show in the tooltip, so
a non-empty name is required in order for players to be able to summon
th tooltip.
- Passing () as the side to the unit util macros results in an empty side key
There's no reason not to just pass 1 instead though.
- [modify_side] does not support [filter]; instead it uses [filter_side]
However, it also supports inline side which is sufficient here,
so just use that instead.
This covers both difficulty levels; TB is now clean of schema issues.
ai_helper.robust_move_and_attack() does the stop_unit_moves automatically if the unit is at the destination hex.
(cherry-picked from commit fdc3249496)