wmllint now has the capability to automatically check...

...that every description= in [message] and [filter] blocks refers to
a unit that is present in the scenario. This commit fixes almost all
bugs found with this test, and adds magic comments to handle places
where the WML doesn't supply a recognizable unit creation or recall
(usually because of macros).
This commit is contained in:
Eric S. Raymond 2008-01-31 13:12:19 +00:00
parent c7810fbb66
commit 13d01a4e51
79 changed files with 495 additions and 173 deletions

View file

@ -23,7 +23,6 @@
villages_per_scout="0"
leader_value="3"
village_value="1"
recruitment_pattern=""
income="0"
recruit="Elvish Archer, Elvish Fighter, Elvish Scout, Elvish Shaman"
[ai]

View file

@ -74,6 +74,8 @@
name=knolls.ogg
[/music]
# wmllint: recognize Darken Volk
[objectives]
side=1
[objective]

View file

@ -42,6 +42,8 @@
[/ai]
[/side]
# wmllint: recognize Darken Volk
[event]
name=prestart
[music]
@ -141,6 +143,8 @@
{GEN_GUARDIAN (Great Mage) (Lord Karres) (_ "Lord Karres") 2 $actualStart.x $actualStart.y}
{CLEAR_VARIABLE actualStart}
# wmllint: recognize Lord Karres
{VARIABLE_OP i random (0..2)}
{IF_VAR i numerical_equals 0 (
[then]

View file

@ -146,7 +146,8 @@
name=gold.ogg
[/sound]
[message]
description=narrator
speaker=narrator
image=wesnoth-icon.png
message= _ "You find 100 gold in the fortress!"
[/message]
[gold]

View file

@ -46,6 +46,8 @@
{STARTING_VILLAGES_AREA 5 26 31 5}
{STARTING_VILLAGES_AREA 5 29 46 1}
# wmllint: recognize Kalenz
[side]
type=Fighter
description=Konrad

View file

@ -55,6 +55,8 @@
controller=human
[/side]
# wmllint: recognize Delfador
[side]
type=Orcish Warrior
description="Usadar Q'kai"

View file

@ -172,6 +172,9 @@
{LOYAL_UNIT (Merman Fighter) (Kalba) ( _ "Kalba") 1 27 12}
{LOYAL_UNIT (Merman Fighter) (Gnaba) ( _ "Gnaba") 1 31 14}
# wmllint: recognize Kalba
# wmllint: recognize Gnaba
[message]
description=Konrad
message= _ "Whew, I survived. But now where am I? Is this island inhabited?"
@ -197,6 +200,7 @@
[/move_unit_fake]
{LOYAL_UNIT (Outlaw) (Delurin) ( _ "Delurin") 1 21 12}
# wmllint: recognize Delurin
[redraw]
[/redraw]

View file

@ -49,6 +49,8 @@
{GOLD 180 120 120}
[/side]
# wmllint: recognize Delfador
[side]
type=Orcish Warlord
description=Agadla

View file

@ -449,6 +449,7 @@
[/move_unit_fake]
{LOYAL_UNIT (Elvish Archer) (Niodien) ( _ "Niodien") 1 11 13}
# wmllint: recognize Niodien
[message]
description=Niodien
@ -470,6 +471,7 @@
[/move_unit_fake]
{LOYAL_UNIT (Elvish Fighter) (Loflar) ( _ "Loflar") 1 5 15}
# wmllint: recognize Loflar
[message]
description=Loflar

View file

@ -311,6 +311,7 @@
[/move_unit_fake]
{LOYAL_UNIT (Duelist) (Ronry) ( _ "Ronry") 2 6 40}
# wmllint: recognize Ronry
[scroll_to_unit]
x=6

View file

@ -102,6 +102,9 @@
{LOYAL_UNIT (Sleeping Gryphon) (Graak) ( _ "Graak") 3 12 18}
{LOYAL_UNIT (Sleeping Gryphon) (Grook) ( _ "Grook") 3 16 16}
{LOYAL_UNIT (Sleeping Gryphon) (Gruak) ( _ "Gruak") 3 10 14}
# wmllint: recognize Graak
# wmllint: recognize Grook
# wmllint: recognize Gruak
{VARIABLE gryphon_disposition 1}
[/event]

View file

@ -146,6 +146,8 @@
{VARIABLE_OP true_entrance_location random 1..2}
[/event]
# wmllint: recognize Uncle Somf
[event]
name=start
[recall]
@ -154,6 +156,9 @@
[recall]
description=Kalenz
[/recall]
[recall]
description=Haldiel
[/recall]
[role]
type=Elvish Outrider,Elvish Rider,Elvish Scout,Lancer,Paladin,Grand Knight,Knight,Horseman
role=Rider
@ -664,6 +669,7 @@
[/filter]
{LOYAL_UNIT (Cuttle Fish) (Cuttle Fish) ( _ "Cuttle Fish") 5 13 13}
# wmllint: recognize Cuttle Fish
[message]
description=Cuttle Fish
@ -693,6 +699,7 @@
[/message]
{LOYAL_UNIT (Princess) (Li'sar) ( _ "Li'sar") 2 8 44}
# wmllint: recognize Li'sar
{LISAR_GUARD_DOORS}
{LISAR_GUARD_DOORS}
{LISAR_GUARD_DOORS}

View file

@ -135,6 +135,7 @@
[/filter]
{LOYAL_UNIT (Dwarvish Fighter) (Burlin) ( _ "Burlin") 2 17 24}
# wmllint: recognize Burlin
[message]
description=Burlin
@ -158,6 +159,7 @@
{PLACE_IMAGE units/trolls/whelp-die-6.png 2 22}
{PLACE_IMAGE units/trolls/whelp-die-5.png 4 21}
{LOYAL_UNIT (Dwarvish Ulfserker) (Ulfdain) ( _ "Ulfdain") 2 2 21}
# wmllint: recognize Ulfdain
[teleport]
[filter]
x,y=$x1,$y1

View file

@ -50,6 +50,8 @@
{UNDERGROUND_VOLCANO -32 -42 -42}
{UNDERGROUND_VOLCANO -28 -38 -38}
# wmllint: recognize Konrad
[event]
name=prestart
[objectives]

View file

@ -351,7 +351,7 @@
message= _ "Oh my! A monster!"
[/message]
[message]
description=""Li'sar""
description="Li'sar"
message= _ "A dragon! A big one!"
[/message]
[message]
@ -363,7 +363,7 @@
message= _ "A talking dragon?"
[/message]
[message]
description=""Li'sar""
description="Li'sar"
message= _ "I am beginning to understand why you were talking about monsters on our way here, Lord Kalenz."
[/message]
[message]

View file

@ -522,6 +522,7 @@
side=4
[/move_unit_fake]
{LOYAL_UNIT (Elvish Rider) (Glarilon) ( _ "Glarilon") 4 $temp_x $temp_y}
# wmllint: recognize Glarilon
[message]
description=Glarilon
message= _ "My lords! I have found you at last."
@ -534,6 +535,7 @@
side=4
[/move_unit_fake]
{LOYAL_UNIT (Elvish Rider) (Thalindil) ( _ "Thalindil") 4 $temp_x $temp_y}
# wmllint: recognize Thalindil
[message]
description=Thalindil
message= _ "(exhausted) We have... (pant) finally found you!"
@ -564,6 +566,7 @@
side=4
[/move_unit_fake]
{LOYAL_UNIT (Elvish Rider) (Rholandir) ( _ "Rholandir") 4 $temp_x $temp_y}
# wmllint: recognize Rholandir
[message]
description=Rholandir
message= _ "Lord Kalenz, Lord Konrad, our forces are nigh! Do not lose hope!"

View file

@ -178,6 +178,7 @@
{LOYAL_UNIT (Halberdier) (Dacayan) ( _ "Dacayan") 4 33 37}
{LOYAL_UNIT (Halberdier) (Ceomyr) ( _ "Ceomyr") 4 32 37}
{LOYAL_UNIT (Halberdier) (Gwellyn) ( _ "Gwellyn") 4 34 37}
# wmllint: recognize Dacayan
#a little attempt at comic relief
[message]

View file

@ -204,6 +204,8 @@
{DALLBEN_PEASANT Thug_Peasant 5 30 Teneor ( _ "Teneor")}
{DALLBEN_PEASANT Poacher_Peasant 3 28 Kembe ( _ "Kembe")}
{DALLBEN_PEASANT Poacher_Peasant 3 30 Treagh ( _ "Treagh")}
# wmllint: recognize Red
# wmllint: recognize Kembe
[unit]
type=Footpad_Peasant
@ -318,6 +320,8 @@
{DALLBEN_PEASANT Thug_Peasant 10 2 Remald ( _ "Remald")}
{DALLBEN_PEASANT Thug_Peasant 8 2 Wolmas ( _ "Wolmas")}
# wmllint: recognize Remald
# wmllint: recognize Wolmas
#ifdef EASY
{DALLBEN_PEASANT Thug_Peasant 9 4 Jasken ( _ "Jasken")}

View file

@ -123,6 +123,8 @@
[/recall]
{LOYAL_UNIT 1 Outlaw 30 17 Jingo ( _ "Jingo")}
{LOYAL_UNIT 1 Outlaw 32 17 Majel ( _ "Majel")}
# wmllint: recognize Jingo
# wmllint: recognize Majel
[/event]
#
@ -150,6 +152,7 @@
[/message]
{LOYAL_UNIT 1 Dragoon 11 1 Pitcher ( _ "Pitcher")}
# wmllint: recognize Pitcher
{MOVE_UNIT description=Pitcher 20 14}

View file

@ -241,6 +241,8 @@
message= _ "YES! We did it! We are free!"
[/message]
# wmllint: recognize Un'Yin
[move_unit_fake]
type=Orcish Grunt
description="Un'Yin"

View file

@ -92,6 +92,7 @@
[/event]
#define TEMPTATION_OF_TALLIN
# wmllint: recognize Hamel
[message]
description=Malifor
message= _ "But my my, what do we have here - Tallin."

View file

@ -529,6 +529,8 @@
[/objectives]
[/event]
# wmllint: recognize Abhai
[event]
name=moveto
[filter]
@ -1055,6 +1057,7 @@
[/message]
{LOYAL_UNIT (Sea Serpent) (Sea Serpent) ( _ "Sea Serpent") 2 31 5}
# wmllint: recognize Sea Serpent
[message]
description=Sea Serpent
@ -1476,6 +1479,8 @@
[/modifications]
[/unit]
# wmllint: recognize Father Marcus
[message]
description=Sister Theta
message= _ "Freedom at last. Thank you Lord Tallin."

View file

@ -31,6 +31,46 @@
next_scenario=slave_of_undead
[side]
type=Peasant
description=Tallin
canrecruit=1
side=1
controller=human
gold=100
recruit=Walking Corpse
team_name=mob
shroud=yes
[/side]
[side]
type=Troll
description=Franik
user_description= _ "Franik"
canrecruit=1
side=2
{GOLD4 20 30 35 40}
recruit=Troll Whelp
team_name=trolls
[ai]
recruitment_pattern=fighter
[/ai]
[/side]
[side]
type=Troll
description=Henie
user_description= _ "Henie"
canrecruit=1
side=3
{GOLD4 20 30 35 40}
recruit=Troll Whelp
team_name=trolls
[ai]
recruitment_pattern=fighter
[/ai]
[/side]
[event]
name=prestart
[objectives]
@ -167,46 +207,6 @@
[/kill]
[/event]
[side]
type=Peasant
description=Tallin
canrecruit=1
side=1
controller=human
gold=100
recruit=Walking Corpse
team_name=mob
shroud=yes
[/side]
[side]
type=Troll
description=Franik
user_description= _ "Franik"
canrecruit=1
side=2
{GOLD4 20 30 35 40}
recruit=Troll Whelp
team_name=trolls
[ai]
recruitment_pattern=fighter
[/ai]
[/side]
[side]
type=Troll
description=Henie
user_description= _ "Henie"
canrecruit=1
side=3
{GOLD4 20 30 35 40}
recruit=Troll Whelp
team_name=trolls
[ai]
recruitment_pattern=fighter
[/ai]
[/side]
[event]
name=start

View file

@ -177,6 +177,70 @@
map_data="{campaigns/Northern_Rebirth/maps/old_friend.map}"
[side]
type=Peasant
description=Tallin
user_description=_ "Tallin"
canrecruit=1
side=1
controller=human
{GOLD4 450 350 300 250}
recruit=Peasant,Woodsman,Thug,Poacher,Spearman,Bowman,Footpad
team_name=mob
[/side]
[side]
type=Orcish Sovereign
description=Rakshas
profile=portraits/Rakshas.jpg
user_description= _ "Rakshas"
canrecruit=1
side=2
recruit=Orcish Grunt,Orcish Archer,Wolf Rider,Orcish Assassin,Troll Whelp,Orcish Warrior,Orcish Crossbowman,Troll
{GOLD4 400 500 600 700}
{INCOME4 30 40 50 60}
team_name=orcs
[ai]
aggression=1.0
caution=-1.0
leader_value=50
[/ai]
[/side]
[side]
type=Orcish Warlord
description=Drung
user_description= _ "Drung"
canrecruit=1
side=3
recruit=Orcish Grunt,Orcish Archer,Wolf Rider,Orcish Assassin,Troll Whelp,Orcish Warrior,Orcish Crossbowman,Troll
{GOLD4 400 500 600 700}
{INCOME4 30 40 50 60}
team_name=orcs
[ai]
aggression=1.0
caution=-1.0
leader_value=50
[/ai]
[/side]
[side]
type=Orcish Warlord
description=Poul
user_description= _ "Poul"
canrecruit=1
side=4
recruit=Orcish Grunt,Orcish Archer,Wolf Rider,Orcish Assassin,Troll Whelp,Orcish Warrior,Orcish Crossbowman,Troll
{GOLD4 400 500 600 700}
{INCOME4 30 40 50 60}
team_name=orcs
[ai]
aggression=1.0
caution=-1.0
leader_value=50
[/ai]
[/side]
[event]
name=prestart
@ -293,70 +357,6 @@
{CLEAR_VARIABLE typechange}
[/event]
[side]
type=Peasant
description=Tallin
user_description=_ "Tallin"
canrecruit=1
side=1
controller=human
{GOLD4 450 350 300 250}
recruit=Peasant,Woodsman,Thug,Poacher,Spearman,Bowman,Footpad
team_name=mob
[/side]
[side]
type=Orcish Sovereign
description=Rakshas
profile=portraits/Rakshas.jpg
user_description= _ "Rakshas"
canrecruit=1
side=2
recruit=Orcish Grunt,Orcish Archer,Wolf Rider,Orcish Assassin,Troll Whelp,Orcish Warrior,Orcish Crossbowman,Troll
{GOLD4 400 500 600 700}
{INCOME4 30 40 50 60}
team_name=orcs
[ai]
aggression=1.0
caution=-1.0
leader_value=50
[/ai]
[/side]
[side]
type=Orcish Warlord
description=Drung
user_description= _ "Drung"
canrecruit=1
side=3
recruit=Orcish Grunt,Orcish Archer,Wolf Rider,Orcish Assassin,Troll Whelp,Orcish Warrior,Orcish Crossbowman,Troll
{GOLD4 400 500 600 700}
{INCOME4 30 40 50 60}
team_name=orcs
[ai]
aggression=1.0
caution=-1.0
leader_value=50
[/ai]
[/side]
[side]
type=Orcish Warlord
description=Poul
user_description= _ "Poul"
canrecruit=1
side=4
recruit=Orcish Grunt,Orcish Archer,Wolf Rider,Orcish Assassin,Troll Whelp,Orcish Warrior,Orcish Crossbowman,Troll
{GOLD4 400 500 600 700}
{INCOME4 30 40 50 60}
team_name=orcs
[ai]
aggression=1.0
caution=-1.0
leader_value=50
[/ai]
[/side]
[event]
name=start

View file

@ -553,6 +553,7 @@
{LOYAL_UNIT (Giant Spider) (Giant Spider) ( _ "Giant Spider") 2 84 72}
{LOYAL_UNIT (Giant Spider) (Giant Spider) ( _ "Giant Spider") 2 78 70}
{LOYAL_UNIT (Giant Spider) (Giant Spider) ( _ "Giant Spider") 2 76 68}
# wmllint: recognize Giant Spider
[message]
description=Giant Spider
@ -1085,6 +1086,8 @@
[/if]
[/event]
# wmllint: recognize Tentacle
[event]
name=die
first_time_only=no

View file

@ -264,6 +264,10 @@
controller=human
[/side]
# wmllint: recognize Ro'Arthian
# wmllint: recognize Ro'Sothian
# wmllint: recognize Anita
[event]
name=prestart

View file

@ -140,6 +140,8 @@
controller=human
[/side]
# wmllint: recognize Ro'Arthian
[event]
name=start

View file

@ -224,6 +224,7 @@
{VARIABLE changealanin.y 5}
[unstore_unit]
variable=changealanin
# wmllint: recognize Alanin
[/unstore_unit]
{MOVE_UNIT description=Alanin 6 9}
[clear_variable]

View file

@ -374,7 +374,7 @@
y=16,28
[/move_unit_fake]
{RANDOM_TRAIT_UNIT (
description=Kawn
description=Kawn # wmllint: ignore
user_description= _ "Kawn"
type=Gryphon Rider
x,y=5,28

View file

@ -237,13 +237,13 @@
type=Dwarvish Runesmith
x,y=10,8
side=1
description=Kinan
description=Kinan # wmllint: ignore
user_description= _ "Kinan")}
{RANDOM_TRAIT_UNIT (
type=Dwarvish Runesmith
x,y=12,6
side=1
description=Rynan
description=Rynan # wmllint: ignore
user_description= _ "Rynan")}
[message]
speaker=narrator

View file

@ -37,10 +37,14 @@
{SOF_DEATHS}
# wmllint: recognize Rugnur
[event]
name=prestart
# Alanin and Krawg are taking a break
# wmllint: recognize Alanin
# wmllint: recognize Krawg
[store_unit]
[filter]

View file

@ -322,7 +322,7 @@
message= _ "I suppose..."
[/message]
[message]
description=Glaenar
description=Gaenlar
message= _ "Come out, dwarves, and surrender! Or die in that cave, your choice."
[/message]
[/event]

View file

@ -210,13 +210,13 @@
[/message]
{RANDOM_TRAIT_UNIT (
type=Spearman
description=Rolin
description=Rolin # wmllint: ignore
user_description= _ "Rolin"
x,y=$x1,$y1
side=1
upkeep=loyal)}
[message]
description=Rolin
description=Rolin # wmllint: ignore
message= _ "We will certainly help any warrior of Wesnoth who needs our help!"
[/message]
[/event]
@ -256,13 +256,13 @@
[/filter]
{RANDOM_TRAIT_UNIT (
type=Lieutenant
description=Hadlin
description=Hadlin # wmllint: ignore
user_description= _ "Hadlin"
x,y=10,63
side=1
upkeep=loyal)}
[message]
description=Hadlin
description=Hadlin # wmllint: ignore
message= _ "Who goes there?"
[/message]
[message]
@ -270,7 +270,7 @@
message= _ "I'm a dragoon, with Haldric II's personal bodyguard. I was sent on a mission in the northlands, and now elvish horsemen are chasing me. I barely evaded them."
[/message]
[message]
description=Hadlin
description=Hadlin # wmllint: ignore
message= _ "I see. Well, come on in. I doubt they would be able to capture this fort, even if they did want to start a war, which I doubt."
[/message]
[store_unit]

View file

@ -174,6 +174,11 @@
{HEROMACRO Baglur}
{HEROMACRO Krawg}
{HEROMACRO Thursagan}
# wmllint: recognize Rugnor
# wmllint: recognize Baglur
# wmllint: recognize Krawg
# wmllint: recognize Thursagan
{ROLEMACRO 1}
{ROLEMACRO 2}
{ROLEMACRO 3}
@ -197,6 +202,9 @@
{RECALLMACRO Baglur}
{RECALLMACRO Krawg}
{RECALLMACRO Thursagan}
# wmllint: recognize Baglur
# wmllint: recognize Krawg
# wmllint: recognize Thursagan
{RECALLMACRO 1}
{RECALLMACRO 2}
{RECALLMACRO 3}

View file

@ -102,6 +102,8 @@
[/unit]
[/event]
# wmllint: recognize Alanin
[event]
name=start
#dialogue starts
@ -212,6 +214,7 @@
[/set_variable]
[unstore_unit]
variable=krawg
# wmllint: recognize Krawg
[/unstore_unit]
#/MUF
[message]

View file

@ -282,6 +282,9 @@
{ORCISH_SHAMAN 22 14 Pirk}
{OLD_ORCISH_SHAMAN 22 15 Gork}
{NOVICE_ORCISH_SHAMAN 21 15 Vraurk}
# wmllint: recognize Pirk
# wmllint: recognize Gork
# wmllint: recognize Vraurk
[item]
x=7

View file

@ -178,6 +178,10 @@
{ORCISH_SHAMAN 26 1 Pirk}
{OLD_ORCISH_SHAMAN 27 1 Gork}
{NOVICE_ORCISH_SHAMAN 28 1 Vraurk}
# wmllint: recognize Pirk
# wmllint: recognize Gork
# wmllint: recognize Vraurk
[recall]
description=Grüü
[/recall]

View file

@ -148,6 +148,9 @@
{OLD_ORCISH_SHAMAN 32 30 Fabstep}
{OLD_ORCISH_SHAMAN 32 30 Klebar}
{OLD_ORCISH_SHAMAN 32 30 Echarp}
# wmllint: recognize Fabstep
# wmllint: recognize Klebar
# wmllint: recognize Echarp
[message]
description="Echarp"
message= _ "What is this? Are you mad!? Humans are to besiege our fortress at Prestim and you are fighting each other!?"
@ -220,6 +223,9 @@
{OLD_ORCISH_SHAMAN 32 30 Fabstep}
{OLD_ORCISH_SHAMAN 32 30 Klebar}
{OLD_ORCISH_SHAMAN 32 30 Echarp}
# wmllint: recognize Fabstep
# wmllint: recognize Klebar
# wmllint: recognize Echarp
[message]
description="Echarp"
message= _ "What is this? Are you mad!? Humans are to besiege our fortress at Prestim and you are fighting each other!?"

View file

@ -271,6 +271,7 @@
y=4
[/unit]
{RECALL Grüü}
# wmllint: recognize Grüü
{WATCH_TOWER 30 5 (Eastern Tower)}
{WATCH_TOWER 10 4 (Western Tower)}
{WATCH_TOWER 19 5 (Southern Tower)}

View file

@ -160,6 +160,8 @@
name=prestart
{RECALL Grüü}
{RECALL Inarix}
# wmllint: recognize Grüü
# wmllint: recognize Inarix
[role]
type=Orcish Warlord,Troll Warrior,Orcish Warrior,Saurian Ambusher,Troll,Orcish Grunt,Saurian Skirmisher,Troll Whelp
role=cannonfodder

View file

@ -214,6 +214,8 @@
[/unstore_unit]
{RECALL Grüü}
{RECALL Inarix}
# wmllint: recognize Grüü
# wmllint: recognize Inarix
[message]
description=Mkel

View file

@ -197,6 +197,7 @@
{RECALL Grüü}
{RECALL Inarix}
# wmllint: recognize Grüü
{HUMAN GUARD 19 25}
{HUMAN GUARD 13 25}

View file

@ -157,6 +157,8 @@
{RECALL Grüü}
{RECALL Inarix}
# wmllint: recognize Grüü
# wmllint: recognize Inarix
{HUMAN GUARD 19 25}
{HUMAN GUARD 13 25}

View file

@ -153,7 +153,7 @@
[if]
[have_unit]
description=_"Master Perrin"
description="Master Perrin"
[/have_unit]
[then]

View file

@ -157,72 +157,72 @@
{CONDITIONAL_MAGE_RECRUITING}
[message]
description= _ "Aiglondur"
description="Aiglondur"
message=_"(Psst, Angarthing...Karrag and those dwarves on the dais, they're all masked.)"
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message=_"(I see it. There is something very wrong here.)"
[/message]
[message]
description= _ "Karrag"
description="Karrag"
message=_" Hail, fellow dwarves. All Kal Kartha thanks you for your timely rescue."
[/message]
[message]
description= _ "Aiglondur"
description="Aiglondur"
message=_"We are from Knalga; your clans are kin to ours of old. We but did our duty to kin."
[/message]
[message]
description= _ "Karrag"
description="Karrag"
message=_"All dwarves are kin, and must prevail against orcs and humans and other dirtgrubbers. You can be part of the fist that smites them."
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message=_"We did not come to smite anyone, but to re-open contact and trade."
[/message]
[message]
description= _ "Karrag"
description="Karrag"
message=_"Trade? Your destruction of the besieging orcs was a far nobler act than trade. There can be more such victories. And there will be by the power of our ancient heirloom, the Hammer of Thursagan. "
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message=_"It is remembered in Knalga that Kal Kartha holds the Hammer."
[/message]
[message]
description= _ "Karrag"
description="Karrag"
message=_"Yes! And the Hammer holds the soul of the dwarves, the true people. Together, we can march to greater victories! Will you of Knalga join me?"
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message=_"On one condition. You must take off that mask and show your true face. I am a witness."
[/message]
[message]
description= _ "Karrag"
description="Karrag"
message=_"You...do not wish to see what is beneath this mask. I was terribly wounded in an orcish attack. Disfigured."
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message=_"But the Law must see. A dwarf must put his name and his face behind his deeds. I am a witness."
[/message]
[message]
description= _ "Karrag"
description="Karrag"
message=_"Impertinent fool! It is not for you to dictate to a lord in his own holding, much less one who holds the very soul of the dwarves in his hand."
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message=_"The Law speaks. Against him with the eyes to see, no deception can hold. I AM A WITNESS!"
[/message]
@ -255,17 +255,17 @@
[/redraw]
[message]
description= _ "Dulcatulos"
description="Dulcatulos"
message=_"No...no...it is horrible! My lord, how did you come to this?"
[/message]
[message]
description= _ "Karrag"
description="Karrag"
message=_"I lingered for weeks in agony. Only my hatred and the runelore of old sustained me, until I became as I am. I will have revenge; I will destroy the orcs, and the humans, and the elves, and all but the true people!"
[/message]
[message]
description= _ "Karrag"
description="Karrag"
message=_"And you have sealed your doom. Hundreds of dirtgrubbers have already died to weave a web of blood around the Hammer and the soul of the dwarves. You and your new friends will be the the last sacrifices I require to bind the entire dwarvish race to my purpose. TAKE THEM!"
[/message]

View file

@ -281,32 +281,32 @@
{CONDITIONAL_MAGE_RECRUITING}
[message]
description= _ "Angarthing"
description="Angarthing"
message=_"This place smells of death."
[/message]
[message]
description= _ "Dulcatulos"
description="Dulcatulos"
message=_"It's been...it's been years since I've been down here. Only Karrag and his personal followers used this level. Why did I never wonder about that before?"
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message=_"Karrag's will, and his dark magic. I think he has been casting glamours on all of you ever since he passed over."
[/message]
[message]
description= _ "Aiglondur"
description="Aiglondur"
message=_"Where *is* Karrag? We can't have been more than seconds behind him."
[/message]
[message]
description= _ "Dulcatulos"
description="Dulcatulos"
message=_"This is the Grand Gallery. There are rows of small chambers along its sides; he could have slipped into any of them."
[/message]
[message]
description= _ "Aiglondur"
description="Aiglondur"
message=_"More likely he has cloaked himself, thinking to run ahead to gather his followers. He could be within a spear-cast of us now and we wouldn't know it in this gloom."
[/message]
@ -315,12 +315,12 @@
[/sound]
[message]
description= _ "Dulcatulos"
description="Dulcatulos"
message=_"Those are war-drums!"
[/message]
[message]
description= _ "Aiglondur"
description="Aiglondur"
message=_"Aye. Karrag, calling his troops to battle. Only the Dark Gods know what hellspawn the lich will summon. AXES UP!"
[/message]
@ -392,7 +392,7 @@
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message= _ "I sense these bindings to be the work of common sorcery, not the power of the Hammer. Usually to each such locking spell there is some sort of key. If we can but find the key, we will able to open these doors."
[/message]
[/then]
@ -475,17 +475,17 @@
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message= _ "I believe that will be the key-spell for that sealed door."
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message= _ " (reads) Kannin a'kana du'masi a'forigln de'amp."
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message= _ "Now try the door again, it should open."
[/message]
@ -848,7 +848,7 @@
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message= _ "It seems to be some sort of a teleportation device. What's more, the bindings that are preventing it from working seem to be the same ones that bar those sealed gates."
[/message]
[/then]
@ -894,7 +894,7 @@
[/message]
[message]
description= _ "Angarthing"
description="Angarthing"
message= _ "It seems to be some sort of a teleportation device. What's more, the bindings that are preventing it from working seem to be the same ones that bar those sealed gates."
[/message]
[/then]

View file

@ -98,9 +98,10 @@
{KAL_KARTHAN 10 11 "Dwarvish Lord" Glamdrsol}
{KAL_KARTHAN 10 12 "Dwarvish Steelclad" Pelaithil}
{KAL_KARTHAN 10 13 "Dwarvish Fighter" Alaithus}
#wmllint: recognize Narithil
[message]
description= _ "Angarthing"
description="Angarthing"
message=_" Dwarves of Kal Kartha, I speak the Law. Your house is cast down; you have harbored a great evil. Who now will take the burden of cleansing this holding of its taint?"
[/message]
@ -111,7 +112,7 @@
[/message]
[message]
description= _ "Dulcatulos"
description="Dulcatulos"
message=_"Loremaster...none of us is fit to take up the lordship. Karrag fooled us all, made us the tools of his foul scheme"
[/message]
@ -134,7 +135,7 @@
[unit]
type=Lancer
description=Pelias
user_description= _ "Pelias"
user_description="Pelias"
side=2
x,y=12,11
[/unit]

View file

@ -61,6 +61,7 @@
name=prestart
{HERO (Warrior King) (King Eldaric IV) ( _ "King Eldaric IV") 1 28 15 "portraits/eldaric.png"}
# wmllint: recognize King Eldaric IV
[objectives]
side=1

View file

@ -178,6 +178,8 @@
{FULL_HEAL (description=Wesfolk Leader)}
# wmllint: recognize Wesfolk Leader
[message]
speaker=narrator
message= _ "Summer passes into fall, and King Eldaric fortifies his frontiers. It is not long before the first orcish scouts are spotted. War has come to the valley."
@ -321,6 +323,7 @@
[/unstore_unit]
{MAKE_HERO (Lady Outlaw)}
# wmliint: recognize Lady Outlaw
{FULL_HEAL (description=Lady Outlaw)}
@ -357,6 +360,7 @@
[/unstore_unit]
{MAKE_HERO (Lady Outlaw)}
# wmllint: recognize Lady Outlaw
{FULL_HEAL (description=Lady Outlaw)}

View file

@ -336,7 +336,6 @@ SW - The Midlands."
amount=60
[/gold]
{LOYAL_UNIT (Orcish Slayer) (Hashnak) ( _ "Hashnak") 3 25 40}
#else
[gold]
side=3
@ -348,6 +347,7 @@ SW - The Midlands."
{LOYAL_UNIT (Orcish Assassin) (Vigdish) ( _ "Vigdish") 3 26 40}
#endif
# wmllint: recognize Hashnak
[message]
description=Tan-NauVong
message= _ "Come and get it!"

View file

@ -248,6 +248,7 @@
[/move_unit_fake]
{LOYAL_UNIT (Goblin Knight) (Grilg) ( _ "Grilg") 3 11 33}
# wmllint: recognize Grilg
[message]
description=Grilg
@ -276,6 +277,7 @@
[/move_unit_fake]
{LOYAL_UNIT (Orcish Slayer) (Vrogar) ( _ "Vrogar") 4 36 33}
# wmllint: recognize Vrogar
[message]
description=Vrogar

View file

@ -175,6 +175,7 @@
[/unstore_unit]
{FULL_HEAL description="Lady Outlaw"}
# wmllint: recognize Lady Outlaw
[if]
[variable]
@ -321,6 +322,7 @@
[/unstore_unit]
{FULL_HEAL description="Lady Jessica"}
# wmllint: recognize Lady Jessica
{CLEAR_VARIABLE lady_store}

View file

@ -211,6 +211,7 @@
{LOYAL_UNIT (Peasant) (Angry Farmer) ( _ "Angry Farmer") 2 26 18}
{LOYAL_UNIT (Peasant) (Angry Farmer) ( _ "Angry Farmer") 2 28 19}
{LOYAL_UNIT (Peasant) (Angry Farmer) ( _ "Angry Farmer") 2 29 22}
# wmllint: recognize Angry Farmer
[objectives]
side=1

View file

@ -544,6 +544,7 @@
[/move_unit_fake]
{LOYAL_UNIT (Yeti) (Rarlg) ( _ "Rarlg") 4 12 11}
# wmllint: recognize Rarlg
[message]
description=Rarlg
@ -571,6 +572,7 @@
[/scroll_to_unit]
{LOYAL_UNIT (Yeti) (Raul-Rarlg) ( _ "Raul-Rarlg") 4 15 11}
# wmllint: recognize Raul-Rarg
[/event]
[event]

View file

@ -208,6 +208,7 @@
{GUARD_UNIT (Swordsman) (Southbay Guard 2) ( _ "Southbay Guard") 2 21 30}
{GUARD_UNIT (Swordsman) (Southbay Guard 3) ( _ "Southbay Guard") 2 28 24}
{GUARD_UNIT (Swordsman) (Southbay Guard 4) ( _ "Southbay Guard") 2 27 22}
# wmllint: recognize Southbay Guard 1
[object]
description= _ "The Ruby of Fire was imbued with magic in the distant west, and can be used to scorch enemies into submission."
@ -305,7 +306,7 @@
message= _ "Humph. Fool of a boy's just gonna burn us all up. Humans, always playing at being wizards."
[/message]
[message]
description=Southbay Guard
description=Southbay Guard 1
message= _ "Orcs sighted! They've seized the frontier! To arms! To arms!"
[/message]
[message]
@ -332,6 +333,7 @@
[/move_unit_fake]
{HERO (Merman Warrior) (Lord Typhon) ( _ "Lord Typhon") 1 4 19 ("portraits/typhon.png")}
# wmllint: recognize Lord Typhon
[message]
description=Lord Typhon
@ -426,6 +428,7 @@
[/move_unit_fake]
{UNDEAD_INTEL (Ancient Lich) (Lich-Lord Jevyan) ( _ "Lich-Lord Jevyan") "portraits/jevyan.png" 5 42 24}
# wmllint: recognize Lich-Lord Jevyan
[message]
description=Lich-Lord Jevyan
@ -437,6 +440,7 @@
[/message]
{UNDEAD_INTEL (Death Knight) (Fool Prince) ( _ "Fool Prince") "unit_image" 5 43 24}
# wmllint: recognize Fool Prince
[message]
description=Lich-Lord Jevyan

View file

@ -230,6 +230,7 @@
{VARIABLE_OP yy1 random 16..19}
{LOYAL_UNIT (Sea Serpent) (Bitey the Serpent) ( _ "Bitey the Serpent") 4 $xx1 $yy1}
# wmllint: recognize Bitey The Sepent
[message]
speaker=unit
@ -276,6 +277,7 @@
[/move_unit_fake]
{UNDEAD_INTEL (Blood Bat) (Familiar) ( _ "Familiar") "portraits/familiar.png" 4 4 2}
# wmllint: recognize Familiar
[message]
description=Familiar

View file

@ -207,6 +207,7 @@
{VARIABLE_OP yy1 random 23..30}
{LOYAL_UNIT (Sea Serpent) (Chompey the Serpent) ( _ "Chompey the Serpent") 2 $xx1 $yy1}
# wmllint: recognize Chompey the Serpent
[message]
speaker=unit
@ -235,6 +236,7 @@
{VARIABLE_OP yy1 random 7..8}
{LOYAL_UNIT (Sea Serpent) (Scaly the Serpent) ( _ "Scaly the Serpent") 2 $xx1 $yy1}
# wmllint: recognize Scaly the Serpent
[message]
speaker=unit
@ -263,6 +265,7 @@
{VARIABLE_OP yy1 random 12..13}
{LOYAL_UNIT (Sea Serpent) (Toothey the Serpent) ( _ "Toothey the Serpent") 2 $xx1 $yy1}
# wmllint: recognize Toothey the Serpent
[message]
speaker=unit
@ -304,6 +307,7 @@
[/move_unit_fake]
{UNDEAD_INTEL (Blood Bat) (Familiar) ( _ "Familiar") "portraits/familiar.png" 4 3 26}
# wmllint: recognize Familiar
[message]
description=Familiar

View file

@ -231,6 +231,7 @@
[/move_unit_fake]
{HERO (Elvish Shyde) (Lord Dionli) ( _ "Lord Dionli") 2 28 7 ("portraits/dionli.png")}
# wmllint: recognize Lord Dionli
[message]
description=Lord Dionli

View file

@ -156,6 +156,7 @@
[/teleport]
{HERO (Elvish Marshal) ("Lord El'Isomithir") ( _ "Lord El'Isomithir") 4 13 14 ("portraits/isomithir.png")}
# wmllint: recognize Lord El'Isomithir
[/event]
#define DRAGON
@ -626,6 +627,7 @@
[/move_unit_fake]
{HERO (Lieutenant) (Commander Aethyr) ( _ "Commander Aethyr") 1 19 24 ("portraits/aethyr.png")}
# wmllint: recognize Commander Aethyr
[message]
description=Lord Logalmier

View file

@ -344,6 +344,7 @@
[/variable]
[then]
{LOYAL_UNIT (Fire Dragon) ("Shek'kahan") ( _ "Shek'kahan") 5 20 27}
# wmllint: recognize Shek'kahan
[set_variable]
name=dragon_awake

View file

@ -243,6 +243,7 @@
[/move_unit_fake]
{LOYAL_UNIT (Naga Warrior) (Riaa) ( _ "Riaa") 2 6 15}
# wmllint: recognize Riaa
[message]
description=Riaa

View file

@ -139,6 +139,7 @@
#define TEMP_QUEEN X Y
[event]
# wmllint: recognize Lady Jessica
name=moveto
[filter]
side=1
@ -151,6 +152,7 @@
[/message]
{UNDEAD_INTEL (Vampire Lady) (Midnight Queen) ( _ "Midnight Queen") "unit_image" 2 ({X}) ({Y})}
# wmllint: recognize Midnight Queen
{UNDEAD_UNIT (Blood Bat) 3 ({X}) ({Y})}
{UNDEAD_UNIT (Blood Bat) 2 ({X}) ({Y})}

View file

@ -78,6 +78,7 @@
[/hide_unit]
{HERO (Elvish Marshal) (Lord El'Isomithir) ( _ "Lord El'Isomithir") 4 13 14 ("portraits/isomithir.png")}
# wmllint: recognize Lord El'Isomithir
[/event]
[event]
@ -92,6 +93,7 @@
[/move_unit_fake]
{HERO (Outlaw Queen) (Jessica in Hiding) ( _ "Jessica in Hiding") 4 19 16 "portraits/jessica.png"}
# wmllint: recognize Jessica in Hiding
[scroll_to_unit]
description=Jessica in Hiding

View file

@ -350,6 +350,7 @@
[/filter_second]
{UNDEAD_INTEL (Banebow) (Rabbin) ( _ "Rabbin") "unit_image" 2 1 28}
# wmllint: recognize Rabbin
[message]
description=Rabbin
@ -371,6 +372,7 @@
[/filter_second]
{UNDEAD_INTEL (Draug) (General Kafka) ( _ "General Kafka") "unit_image" 3 35 19}
# wmllint: recognize General Kafka
[message]
description=General Kafka

View file

@ -273,6 +273,7 @@
[/move_unit_fake]
{UNDEAD_INTEL (Blood Bat) (Familiar) ( _ "Familiar") "portraits/familiar.png" 2 28 2}
# wmllint: recognize Familiar
[move_unit_fake]
type=Ancient Lich
@ -282,6 +283,7 @@
[/move_unit_fake]
{UNDEAD_INTEL (Ancient Lich) (Lich-Lord Jevyan) ( _ "Lich-Lord Jevyan") "portraits/jevyan.png" 2 25 2}
# wmllint: recognize Lich-Lord Jevyan
[message]
description=Lich-Lord Jevyan
@ -408,6 +410,7 @@
[/unstore_unit]
{CLEAR_VARIABLE jessica_store}
# wmllint: recognize Lady Jessica
[message]
description=Lady Jessica
@ -465,6 +468,7 @@
{LOYAL_UNIT (Cuttle Fish) (Cuttle Fish) ( _ "Cuttle Fish") 3 11 18}
{LOYAL_UNIT (Cuttle Fish) (Cuttle Fish) ( _ "Cuttle Fish") 3 12 16}
#endif
# wmllint: recognize Cuttle Fish
[message]
description=Cuttle Fish
message= _ "Slurp, click, click, click!"
@ -482,6 +486,7 @@
x=25-40
y=13-18
[/filter]
# wmllint: recognize Flixta
{LOYAL_UNIT (Saurian Flanker) (Flixta) ( _ "Flixta") 4 34 15}
{LOYAL_UNIT (Saurian Oracle) ("Bzz'Kza") ( _ "Bzz'Kza") 4 34 16}
{LOYAL_UNIT (Saurian Soothsayer) (Tirasch) ( _ "Tirasch") 4 33 16}

View file

@ -265,6 +265,7 @@
#[/remove_shroud]
{UNDEAD_INTEL (Blood Bat) (Familiar) ( _ "Familiar") "portraits/familiar.png" 2 40 39}
# wmllint: recognize Familiar
[set_variable]
name=num_orcs_alive
@ -1013,6 +1014,7 @@
[/move_unit_fake]
{LOYAL_UNIT (Naga Warrior) (Abraxas) ( _ "Abraxas") 2 6 32}
# wmllint: recognize Abraxas
[scroll_to_unit]
description=Abraxas

View file

@ -92,6 +92,9 @@
{SG_GUARD (Naga Warrior) (Lesssh) (_"Lesssh") 2 13 7}
#endif
[/side]
# wmllint: recognize Queen Xeila
# wmllint: recognize Kramak
# wmllint: recognize Abdur
#prestart
@ -100,6 +103,10 @@
# Store away Deoran, his human troops, Ethiliel and her bodyguards, so
# that only Gerrick and the rest of the elves remain.
# wmllint: recognize Ethiliel
# wmllint: recognize Minister Hylas
# wmllint: recognize Elvish Bodyguard
# wmllint: recognize Sir Gerrick
[store_unit]
[filter]

View file

@ -908,6 +908,8 @@
# first stable encounter
{VARIABLE grasslands_dialogue 2}
{RANDOM_TRAIT_UNIT 1 "Desert Scout" $x1 $y1 "Naru" ( _ "Naru") ()}
# wmllint: recognize Naru
[message]
description=Naru
message= _ "Is it safe to come out? I was so scared."
@ -936,6 +938,7 @@
message= _ "Hey Nisa, the rocks have stopped falling. You can come out now!"
[/message]
{RANDOM_TRAIT_UNIT 1 "Desert Scout" 43 31 "Nisa" ( _ "Nisa") (gender="female")}
# wmllint: recognize Nisa
[message]
description=Nisa
message= _ "Oh, thank Eloh, I thought they would never stop."
@ -1189,6 +1192,7 @@
{RANDOM_TRAIT_UNIT 1 "Desert Fighter" 29 1 "Narn" ( _ "Narn") ()}
{RANDOM_TRAIT_UNIT 1 "Desert Scout" 27 2 "Jokli" ( _ "Jokli") ()}
{RANDOM_TRAIT_UNIT 1 "Desert Archer" 28 1 "Lyia" ( _ "Lyia") (gender="female")}
# wmllint: recognize Pythos
[message]
description=Pythos

View file

@ -730,6 +730,7 @@
[/if]
#!***Set scorpion death event when needed only***
# wmllint: recognize Scorpion
[event]
name=die
@ -1372,6 +1373,7 @@
{PLACE_UNITS_RANDOMLY $archers 4 "Skeleton Archer" "Undead Raider" ( _ "Undead Raider") (role="ElyssaUndead")}
{PLACE_UNITS_RANDOMLY $revenants 4 "Revenant" "Undead Raider" ( _ "Undead Raider") (role="ElyssaUndead")}
{PLACE_UNITS_RANDOMLY $shooters 4 "Bone Shooter" "Undead Raider" ( _ "Undead Raider") (role="ElyssaUndead")}
# wmllint: recognize Go'hag
{CLEAR_VARIABLE skeletons}
{CLEAR_VARIABLE archers}
@ -1391,14 +1393,14 @@
#ifdef HARD
[message]
description=Go'hag
description="Go'hag"
message= _ "You have defied our master for the last time. Now you shall die! And I shall personally make it slow and painful, to thank you for that scorching you gave me. "
[/message]
#else
[message]
description=Go'hag
description="Go'hag"
message= _ "You have defied our master for the last time. Now you shall die!"
[/message]
@ -1620,6 +1622,7 @@
#endif
{PLACE_UNITS_RANDOMLY $ogres 3 "Ogre" "Ogre Nomad" ( _ "Ogre Nomad") (random_traits="no")}
{PLACE_UNITS_RANDOMLY $young_ogres 3 "Young Ogre" "Ogre Nomad" ( _ "Ogre Nomad") (random_traits="no")}
# wmllint: recognize Ogre Nomad
{CLEAR_VARIABLE ogres}
{CLEAR_VARIABLE young_ogres}

View file

@ -49,6 +49,16 @@
# These macros store the various important dialogue sections, which are
# often called by several events (the macros have to appear before they
# are called).
#
# Tell wmllint what descriptions are good in the macros
# wmllint: recognize Nym
# wmllint: recognize Kaleh
# wmllint: recognize Azkotep
# wmllint: recognize Ystara
# wmllint: recognize Elyssa
# wmllint: recognize Garak
# wmllint: recognize Zhul
# wmllint: recognize Ganthos
#opening dialogue at start of scenario
#define INTRO_DIALOGUE
@ -148,7 +158,9 @@
#enddef
#dialogue when one undead leader possesses Garak
#define GARAK_DIALOGUE_PART_ONE
# wmllint: recognize Possessed Garak
#define GARAK_DIALOGUE_PART_ONE
[message]
description=Zhul

View file

@ -819,6 +819,8 @@
#endif
#endif
# wmllint: recognize Goblin Scout
# wmllint: recognize Goblin Coward
[message]
description=Goblin Scout
@ -861,6 +863,7 @@
#else
{UNIT_ (Orcish Slayer) (Orac) ( _ "Orac") 2 24 32}
#endif
# wmllint: recognize Orac
#2 two goblins back him up
@ -879,6 +882,7 @@
#else
{UNIT_ (Naga Warrior) (Scylla) ( _ "Scylla") 2 20 34}
#endif
# wmllint: recognize Scylla
#hack to make Scylla female
[+unit]
gender=female
@ -1237,6 +1241,7 @@
[/filter]
{UNIT_ (Goblin Impaler) (Greebo) ( _ "Greebo") 4 35 7}
# wmllint: recognize Greebo
{PLACE_IMAGE items/chest-plain-closed.png 35 6}
@ -1354,6 +1359,7 @@
[command]
{UNIT_ (Darawf) (Purple Abomination) ( _ "Purple Abomination") 3 14 15}
# wmllint: recognize Purple Abomination
[/command]
[command]

View file

@ -997,6 +997,7 @@
[/move_unit_fake]
{UNIT_ (Dwarvish Fighter) (Wounded Dwarf) ( _ "Wounded Dwarf") 4 21 29}
# wmllint: recognize Wounded Dwarf
[message]
description=Wounded Dwarf
@ -1051,6 +1052,7 @@
[event]
name=moveto
# wmllint: recognize Fundin
[filter]
x=23-31
y=8-17
@ -1097,6 +1099,7 @@
[event]
name=moveto
# wmllint: recognize Nori
[filter]
x=41-51
y=10-16
@ -1143,6 +1146,7 @@
[event]
name=moveto
# wmllint: recognize Thungar
[filter]
x=23-31
y=37-44
@ -1181,6 +1185,7 @@
[event]
name=moveto
# wmllint: recognize Gnarl
[filter]
x=42-51
y=37-45
@ -1335,6 +1340,11 @@
{UNIT_T (Troll Whelp) (Troll Defender) ( _ "Troll Defender") 3 42 32}
{UNIT_T (Troll Shaman) (Troll Defender) ( _ "Troll Defender") 3 44 31}
# wmllint: recognize Dwarf Leader
# wmllint: recognize Troll Leader
# wmllint: recognize Dwarf Defender
# wmllint: recognize Troll Defender
[redraw]
[/redraw]
@ -2129,6 +2139,7 @@
[/move_unit_fake]
{UNIT_T (Troll Shaman) (Troll Flamecaster) ( _ "Troll Flamecaster") 3 43 19}
# wmllint: recognize Troll Flamecaster
#endif
[message]
@ -2393,6 +2404,7 @@
[/move_unit_fake]
{UNIT_T (Dwarvish Thunderguard) (Dwarf Grenadier) ( _ "Dwarf Grenadier") 5 42 22}
# wmllint: recognize Dwarf Grenadier
#endif
[message]
@ -2962,6 +2974,8 @@
#define ZURG_CONVERSATION
# wmllint: recognize Zurg
# wmllint: recognize Cloaked Figure
[message]
description=Zurg
message= _ "Congratulations! Some of trolls didn't think you strong enough to beat dwarves."
@ -3052,6 +3066,7 @@
#define GRENDEL_CONVERSATION
# wmllint: recognize Grendel
[message]
description=Grendel
message= _ "Congratulations, some of me boys didn't think you could beat the trolls."

View file

@ -686,6 +686,7 @@
#else
{UNIT_ (Troll Whelp) (Troll Guard) ( _ "Troll Guard") 3 21 19}
#endif
# wmllint: recognize Troll Guard
# Have Grendel blow the explosives to destroy the wall
@ -1144,6 +1145,8 @@
name=new turn
first_time_only=no
# wmllint: recognize Guardian Phoenix
# wmllint: recognize Dust Devil
[redraw]
[/redraw]
@ -1153,7 +1156,10 @@
[filter]
side=1,3,4
[not]
description=Guardian Phoenix,Dust Devil
description=Guardian Phoenix
[/not]
[not]
description=Dust Devil
[/not]
[/filter]
variable=locs
@ -2232,6 +2238,7 @@
name=moveto
first_time_only=no
# wmllint: recognize Dwarf Ghost
[filter]
x=7-11
y=17-21

View file

@ -668,6 +668,7 @@
{UNIT_ (Dwarvish Scout) (Dwarf Guard) ( _ "Dwarf Guard") 2 20 34}
{UNIT_ (Dwarvish Scout) (Dwarf Guard) ( _ "Dwarf Guard") 2 24 34}
#endif
# wmllint: recognize Dwarf Guard
# Have Zurg cast spell to destroy wall
@ -831,6 +832,7 @@
#ifdef HARD
{UNIT_T (Dwarvish Fighter) (Dwarf Conscript) ( _ "Dwarf Conscript") 2 9 35}
#endif
# wmllint: recognize Dwarf Conscript
[message]
description=Dwarf Sergeant
@ -1189,6 +1191,7 @@
[/remove_shroud]
{UNIT_T (Dwarvish Sentinel) (Jorgi) ( _ "Jorgi") 6 19 25}
# wmllint: recognize Jorgi
#ifdef HARD
{UNIT_T (Dwarvish Steelclad) (Dwarf Guard) ( _ "Dwarf Guard") 6 18 26}
@ -1286,6 +1289,7 @@
[event]
name=moveto
# wmllint: recognize Dwarf High Guard
[filter]
x=12-21
y=19-26
@ -1488,6 +1492,7 @@
[event]
name=die
# wmllint: recognize Big Hairy Bat
[filter]
description=Big Hairy Bat
[/filter]
@ -2126,7 +2131,7 @@
[/unit]
[message]
description=Small Tentacle
description=Smaller Tentacle
message= _ "Splash! Splash!"
[/message]
@ -2319,6 +2324,7 @@
[command]
{UNIT_ (Ghost) (Angry Ghost) ( _ "Angry Ghost") 9 47 22}
# wmllint: recognize Angry Ghost
[message]
description=Angry Ghost

View file

@ -1536,6 +1536,10 @@
[/redraw]
#endif
# wmllint: recognize Bernard
# wmllint: recognize Daryl
# wmllint: recognize Oswald
[message]
description=Daryl
@ -2522,6 +2526,11 @@
{FREE_UNIT (Ghost) (Novice Iona) ( _ "Novice Iona") 3 11 41}
{FREE_UNIT (Ghost) (Novice Dani) ( _ "Novice Dani") 3 12 42}
# wmllint: recognize Blessed Kali
# wmllint: recognize Novice Pior
# wmllint: recognize Novice Iona
# wmllint: recognize Novice Dani
[message]
description=Blessed Kali
message= _ "All right you runts, let's try this again. Pior, remember to swing your sword with your whole body, not just your arms."
@ -2920,6 +2929,7 @@
#ifdef NORMAL
{FREE_UNIT (Skeleton Archer) (Restless Dead) ( _ "Restless Dead") 3 17 37}
#endif
# wmllint: recognize Restless Dead
[message]
description=Restless Dead
@ -3139,6 +3149,7 @@
[/removeitem]
{FREE_UNIT (Flesh Golem) (Kromph) ( _ "Kromph") 1 18 29}
# wmllint: recognize Kromph
[/command]
[command]
@ -3460,6 +3471,7 @@
#create crypt guardian unit
{FREE_UNIT (Spider Lich) (Crypt Guardian) ( _ "Crypt Guardian") 3 12 25}
# wmllint: recognize Crypt Guardian
[message]
description=Crypt Guardian
@ -4513,6 +4525,7 @@
[then]
#if Kaleh isn't the unit moving outside then Eloh calls for him
# wmllint: recognize Eloh
[message]
description=Eloh
@ -4697,6 +4710,8 @@
{FREE_UNIT (Dragoon) (Human Guard) ( _ "Human Guard") 2 31 26}
{FREE_UNIT (Swordsman) (Human Guard) ( _ "Human Guard") 2 30 24}
{FREE_UNIT (Longbowman) (Human Guard) ( _ "Human Guard") 2 30 26}
# wmllint: recognize Sergeant Durstrag
# wmllint: recognize Human Guard
[message]
description=Sergeant Durstrag
@ -5194,6 +5209,7 @@
[/move_unit_fake]
{FREE_UNIT (ENightgaunt) (Undead Emissary) ( _ "Undead Emissary") 5 35 30}
# wmllint: recognize Undead Emissary
[message]
description=Undead Emissary
@ -5493,12 +5509,12 @@
[filter]
side=8
description = _ "Human Messenger"
description = "Human Messenger"
y=1
[/filter]
[kill]
description= _ "Human Messenger"
description= "Human Messenger"
animate=no
fire_event=no
[/kill]

View file

@ -2410,7 +2410,7 @@
[if]
[have_unit]
description=eloh
description=Eloh
[/have_unit]
[then]
@ -2575,6 +2575,7 @@
[/remove_shroud]
{UNIT_T (Necromancer) (Hekuba) ( _ "Hekuba") 4 15 28}
# wmllint: recognize Hekuba
[message]
description=Hekuba
@ -2851,6 +2852,7 @@
[/remove_shroud]
{UNIT_ (Necromancer) (Hekuba) ( _ "Hekuba") 4 15 28}
# wmllint: recognize Hekuba
[message]
description=Hekuba
@ -3151,6 +3153,7 @@
{RANDOM_PLACEMENT_AREA 50 28 3}
{PLACE_UNITS_RANDOMLY 3 7 "Crab Man" "Angry Crab" ( _ "Angry Crab") ()}
# wmllint: recognize Angry Crab
{CLEAR_PLACEMENT_AREA}
@ -3177,6 +3180,7 @@
{RANDOM_PLACEMENT_AREA 41 23 3}
{PLACE_UNITS_RANDOMLY 3 7 "Crab Man" "Angry Crab" ( _ "Angry Crab") ()}
# wmllint: recognize Angry Crab
{CLEAR_PLACEMENT_AREA}

View file

@ -1776,6 +1776,7 @@
[/kill]
{UNIT_T (Sea Serpent) (Sea Serpent) ( _ "Sea Serpent") 2 13 9}
# wmllint: recognize Sea Serpent
[message]
description=Sea Serpent

View file

@ -525,6 +525,35 @@
[/unit]
#enddef
#define RECALL_OR_CREATE TYPE NAME
# A substitute for [recall] that works even when there's no-one to recall
# useful for testing scenarios out of order.
[recall]
description={NAME}
[/recall]
[if]
[have_unit]
description={NAME}
[/have_unit]
[else]
[store_starting_location]
side=1
variable=tmp
[/store_starting_location]
[unit]
type={TYPE}
description={NAME}
side=1
x=$tmp.x
y=$tmp.y
[/unit]
[clear_variable]
name=tmp
[/clear_variable]
[/else]
[/if]
#enddef
# FIXME: Documentation for these is needed.
#define MENU_IMG_TXT IMG TXT

View file

@ -36,6 +36,22 @@
#
# You can also prevent description insertions with "wmllint: no-icon".
#
# You can force otherwise undeclared characters to be recogized with
# a magic comment containing the string "wmllint: recognize".
# The rest of the line is stripped and treated as the name of a character
# who should be recognized in descriptions. This will be useful,
# for example, if your scenario follows a continue so there are
# characters present who were not explicitly recalled. It may
# also be useful if you have wrapped unit-creation or recall markup in macros
# and wmllint cannot recognize it.
#
# Similarly, it is possible to explicitly declare a unit's usage class
# with a magic comment that looks like thisL
# wmllint: usage of <unit> is <class>
# Note that <unit> must be a string wrapped in ASCII doublequotes. This
# declaration will be useful if you are declaring units with macros that
# include a substitutable formal in the unit name; there are examples in UtBS.
#
# You can disable stack-based malformation checks with a comment
# containing "wmllint: validate-off" and re-enable with "wmllint: validate-on".
#
@ -540,23 +556,38 @@ notepairs = (
trait_note = dict(notepairs)
note_trait = dict(map(lambda p: (p[1], p[0]), notepairs))
def string_strip(value):
"String-strip the value"
if value.startswith('"'):
value = value[1:]
if value.endswith('"'):
value = value[:-1]
if value.startswith("'"):
value = value[1:]
if value.endswith("'"):
value = value[:-1]
return value
def parse_attribute(str):
"Parse a WML key-value pair from a line."
if '=' not in str:
return None
m = re.match(r"(^\s*[a-z0-9_]+\s*=\s*)(.+)((?<=\S)\s*#?.*\s*)", str)
if not m:
return None
(leader, value, comment) = m.groups()
# String-strip the value
if value.startswith('"'):
value = value[1:]
if value.endswith('"'):
value = value[:-1]
key = m.group(1).replace("=", "").strip()
where = str.find("=")
leader = str[:where]
after = str[where+1:]
after = after.lstrip()
if "#" in after:
where = after.find("#")
while after[where-1] in (" ", "\t"):
where -= 1
value = after[:where+1]
comment = after[where:]
else:
value = after.rstrip()
comment = ""
# Return four fields: stripped key, part of line before value,
# value, trailing whitespace and comment.
return (key, leader, value, comment)
return (leader.strip(), leader+"=", string_strip(value), comment)
# This needs to match the list of usagge types in ai_python.cpp
usage_types = ("scout", "fighter", "mixed fighter", "archer", "healer")
@ -666,6 +697,48 @@ def sanity_check(filename, lines):
% (filename, i+1, utype)
except TypeError:
pass
# Consistency-check the description attributes in [side], [unit], [recall],
# and [message] scopes.
present = []
in_scenario = False
in_person = False
ignoreable = False
for i in range(len(lines)):
if "[scenario]" in lines[i]:
in_scenario = True
elif "[/scenario]" in lines[i]:
in_scenario = False
elif "[objective]" in lines[i] or "[kill]" in lines[i] or "[object]" in lines[i] or "[move_unit_fake]" in lines[i] or "[scroll_to_unit]" in lines[i]:
ignoreable = True
elif "[/objective]" in lines[i] or "[/kill]" in lines[i] or "[/object]" in lines[i] or "[/move_unit_fake]" in lines[i] or "[/scroll_to_unit]" in lines[i]:
ignoreable = False
elif "[side]" in lines[i] or "[unit]" in lines[i] or "[recall]" in lines[i]:
in_person = True
continue
elif "[/side]" in lines[i] or "[/unit]" in lines[i] or "[/recall]" in lines[i]:
in_person = False
if not in_scenario:
continue
m = re.search("# *wmllint: recognize +(.*)", lines[i])
if m:
present.append(string_strip(m.group(1)).strip())
if '=' not in lines[i] or ignoreable:
continue
try:
(key, prefix, value, comment) = parse_attribute(lines[i])
if key == 'role':
present.append(value)
if "wmllint: ignore" in comment or key != "description":
continue
if in_person:
present.append(value)
elif value in ('narrator', 'unit', 'second_unit') or value[0] in ("$", "{"):
continue
elif value not in present:
print '"%s", line %d: unknown \'%s\' referred to by description' \
% (filename, i+1, value)
except TypeError:
pass
# Interpret magic comments for setting the sage pattern of units.
# This copes with some wacky UtBS units that are defined with
# variant-spawning macros. The prototype comment looks like this: