mirror of
https://github.com/wesnoth/wesnoth
synced 2025-04-26 17:22:57 +00:00
Reindent mainline.
This commit is contained in:
parent
a1605bd14f
commit
0aa99781cf
@ -1,6 +1,6 @@
|
||||
#textdomain wesnoth
|
||||
[ai]
|
||||
id=default # id is needed uniquely identify a MP AI, it is not needed in the scenario AI
|
||||
id=default # id is needed uniquely identify a MP AI, it is not needed in the scenario AI
|
||||
description=Default AI # this description is, again, needed for MP AI (it shows in AI list under this description
|
||||
version=10703 # no spaces here, version should be parsed as int. This version marker is a sign that ALL snippets of AI are written using new syntax
|
||||
[stage] #this is a stage. Each turn is: 'foreach stage in stages, play it'
|
||||
|
@ -1,7 +1,7 @@
|
||||
#textdomain wesnoth
|
||||
#[ai]
|
||||
# id=formula
|
||||
# description=Formula AI
|
||||
# id=formula
|
||||
# description=Formula AI
|
||||
# version=10703
|
||||
|
||||
# [aspect]
|
||||
@ -20,7 +20,7 @@
|
||||
# id=fallback
|
||||
# name=testing_ai_default::fallback
|
||||
# [ai]
|
||||
# ai_algorithm=default_ai
|
||||
# ai_algorithm=default_ai
|
||||
# [/ai]
|
||||
# [/stage]
|
||||
#[/ai]
|
||||
#[/ai]
|
||||
|
@ -1,2 +1,2 @@
|
||||
#textdomain wesnoth
|
||||
{ai/dev/testing_ai_default_test_targeting.cfg}
|
||||
{ai/dev/testing_ai_default_test_targeting.cfg}
|
||||
|
@ -1,6 +1,6 @@
|
||||
#textdomain wesnoth
|
||||
|
||||
#note: as fai engine is temporary disabled, this example will not work atm, it will work again soon
|
||||
#note: as fai engine is temporary disabled, this example will not work atm, it will work again soon
|
||||
[ai]
|
||||
id=default_ai_poisoning
|
||||
description= Default AI with poisoning formula
|
||||
@ -11,7 +11,7 @@
|
||||
[candidate_action] #it consists of several candidate actions
|
||||
engine=fai # fai engine is temporary disabled, it will be enabled real soon. Note that the rest of parameters are parsed by formula ai engine
|
||||
name=poisoner #this paramerer (and the rest of them), are specific to fai engine
|
||||
type=attack
|
||||
type=attack
|
||||
[filter]
|
||||
me="filter( input, 'me', filter(me.attacks,'att',filter(att.special,'spe',contains_string(spe,'poison'))))"
|
||||
target="filter( input, 'target', target.undead = 0 and target.hitpoints > 5 and index_of('poisoned',keys(target.states)) = -1)"
|
||||
@ -20,7 +20,7 @@
|
||||
action="{ai/formula/poisoner_attack.fai}"
|
||||
[/candidate_action]
|
||||
[/stage]
|
||||
[stage] #as candidate action evaluation loop ends when all actions score <=0, this stage is needed to play the rest of the turn
|
||||
[stage] #as candidate action evaluation loop ends when all actions score <=0, this stage is needed to play the rest of the turn
|
||||
engine=cpp
|
||||
name=testing_ai_default::fallback
|
||||
[ai] # this is fallback stage specific parameter - it holds parameters of the AI to which we fall back in this fallback stage
|
||||
|
@ -1,38 +1,38 @@
|
||||
#textdomain wesnoth
|
||||
[ai]
|
||||
id=map_control
|
||||
description=Map Control AI (dev)
|
||||
version=10703
|
||||
id=map_control
|
||||
description=Map Control AI (dev)
|
||||
version=10703
|
||||
|
||||
[aspect]
|
||||
id=recruitment
|
||||
[facet]
|
||||
[value]
|
||||
engine=fai
|
||||
name=side_formulas
|
||||
move="{ai/formula/recruitment.fai}"
|
||||
[/value]
|
||||
[/facet]
|
||||
[/aspect]
|
||||
[aspect]
|
||||
id=recruitment
|
||||
[facet]
|
||||
[value]
|
||||
engine=fai
|
||||
name=side_formulas
|
||||
move="{ai/formula/recruitment.fai}"
|
||||
[/value]
|
||||
[/facet]
|
||||
[/aspect]
|
||||
|
||||
[aspect]
|
||||
id=aggression
|
||||
[facet]
|
||||
value = 0
|
||||
[/facet]
|
||||
[/aspect]
|
||||
[aspect]
|
||||
id=caution
|
||||
[facet]
|
||||
value = 0.15
|
||||
[/facet]
|
||||
[/aspect]
|
||||
[stage]
|
||||
engine=cpp
|
||||
id=fallback
|
||||
name=testing_ai_default::fallback
|
||||
[ai]
|
||||
ai_algorithm=default_ai
|
||||
[/ai]
|
||||
[/stage]
|
||||
[aspect]
|
||||
id=aggression
|
||||
[facet]
|
||||
value = 0
|
||||
[/facet]
|
||||
[/aspect]
|
||||
[aspect]
|
||||
id=caution
|
||||
[facet]
|
||||
value = 0.15
|
||||
[/facet]
|
||||
[/aspect]
|
||||
[stage]
|
||||
engine=cpp
|
||||
id=fallback
|
||||
name=testing_ai_default::fallback
|
||||
[ai]
|
||||
ai_algorithm=default_ai
|
||||
[/ai]
|
||||
[/stage]
|
||||
[/ai]
|
||||
|
@ -5,13 +5,13 @@
|
||||
version=10703
|
||||
[aspect] #that is an aspect
|
||||
id=aggression #it's id is aggression. Id of an aspect must be one of well-known ids (see AI_Module page in the wiki)
|
||||
#we can override aspect config here, but it is better to leave default composite_aspect in here, and add [facet]'s instead
|
||||
#we can override aspect config here, but it is better to leave default composite_aspect in here, and add [facet]'s instead
|
||||
[facet]#we add a facet to this aspect
|
||||
id=base_value #this is an arbitrary facet id. it is not needed, and will be useful later, when [modify_ai] will be available
|
||||
engine=cpp #this facet
|
||||
name=standard_aspect #this is the default
|
||||
value="0.4" #this is the value of this aspect.
|
||||
# we can put time_of_day or turns restriction there, as well. The rule is 'first facet that is active is used'
|
||||
id=base_value #this is an arbitrary facet id. it is not needed, and will be useful later, when [modify_ai] will be available
|
||||
engine=cpp #this facet
|
||||
name=standard_aspect #this is the default
|
||||
value="0.4" #this is the value of this aspect.
|
||||
# we can put time_of_day or turns restriction there, as well. The rule is 'first facet that is active is used'
|
||||
[/facet]
|
||||
#we can put other [facet]'s in there
|
||||
[/aspect]
|
||||
@ -73,12 +73,12 @@
|
||||
max_score=15
|
||||
score=15
|
||||
[/candidate_action]
|
||||
# [candidate_action]
|
||||
# engine=cpp
|
||||
# name=testing_ai_default::leader_control_phase
|
||||
# max_score=0
|
||||
# score=0
|
||||
# [/candidate_action]
|
||||
# [candidate_action]
|
||||
# engine=cpp
|
||||
# name=testing_ai_default::leader_control_phase
|
||||
# max_score=0
|
||||
# score=0
|
||||
# [/candidate_action]
|
||||
[/stage]
|
||||
#note that there's no fallback stage there - this is a complete ai implemented as an RCA
|
||||
[/ai]
|
||||
|
@ -7,13 +7,13 @@
|
||||
version=10703
|
||||
[aspect] #that is an aspect
|
||||
id=aggression #it's id is aggression. Id of an aspect must be one of well-known ids (see AI_Module page in the wiki)
|
||||
#we can override aspect config here, but it is better to leave default composite_aspect in here, and add [facet]'s instead
|
||||
#we can override aspect config here, but it is better to leave default composite_aspect in here, and add [facet]'s instead
|
||||
[facet]#we add a facet to this aspect
|
||||
id=base_value #this is an arbitrary facet id. it is not needed, and will be useful later, when [modify_ai] will be available
|
||||
engine=cpp #this facet
|
||||
name=standard_aspect #this is the default
|
||||
value="0.4" #this is the value of this aspect.
|
||||
# we can put time_of_day or turns restriction there, as well. The rule is 'first facet that is active is used'
|
||||
id=base_value #this is an arbitrary facet id. it is not needed, and will be useful later, when [modify_ai] will be available
|
||||
engine=cpp #this facet
|
||||
name=standard_aspect #this is the default
|
||||
value="0.4" #this is the value of this aspect.
|
||||
# we can put time_of_day or turns restriction there, as well. The rule is 'first facet that is active is used'
|
||||
[/facet]
|
||||
#we can put other [facet]'s in there
|
||||
[/aspect]
|
||||
@ -75,12 +75,12 @@
|
||||
max_score=15
|
||||
score=15
|
||||
[/candidate_action]
|
||||
# [candidate_action]
|
||||
# engine=cpp
|
||||
# name=testing_ai_default::leader_control_phase
|
||||
# max_score=0
|
||||
# score=0
|
||||
# [/candidate_action]
|
||||
# [candidate_action]
|
||||
# engine=cpp
|
||||
# name=testing_ai_default::leader_control_phase
|
||||
# max_score=0
|
||||
# score=0
|
||||
# [/candidate_action]
|
||||
[/stage]
|
||||
#note that there's no fallback stage there - this is a complete ai implemented as an RCA
|
||||
[/ai]
|
||||
|
@ -69,12 +69,12 @@
|
||||
name=testing_ai_default::aspect_attacks
|
||||
invalidate_on_gamestate_change=yes
|
||||
[filter_own]
|
||||
race=dwarf
|
||||
race=dwarf
|
||||
[/filter_own]
|
||||
[filter_enemy]
|
||||
[not]
|
||||
type="Dark Adept"
|
||||
[/not]
|
||||
[not]
|
||||
type="Dark Adept"
|
||||
[/not]
|
||||
[/filter_enemy]
|
||||
[/facet]
|
||||
)}
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
[event]
|
||||
name=preload
|
||||
first_time_only=no
|
||||
first_time_only=no
|
||||
[lua]
|
||||
code = <<
|
||||
H = wesnoth.dofile("lua/helper.lua")
|
||||
@ -38,7 +38,7 @@
|
||||
|
||||
[event]
|
||||
name=preload
|
||||
first_time_only=no
|
||||
first_time_only=no
|
||||
[set_variable]
|
||||
name=test_path_to_ai
|
||||
value=ai/ais/default_ai.cfg
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
[event]
|
||||
name=preload
|
||||
first_time_only=no
|
||||
first_time_only=no
|
||||
[lua]
|
||||
code = <<
|
||||
H = wesnoth.dofile("lua/helper.lua")
|
||||
@ -52,7 +52,7 @@
|
||||
{ai/aliases/stable_singleplayer.cfg}
|
||||
[ai]
|
||||
{AI_SIMPLE_ALWAYS_ASPECT aggression 1}
|
||||
[/ai]
|
||||
[/ai]
|
||||
[/side]
|
||||
[side]
|
||||
side=3
|
||||
@ -92,8 +92,5 @@
|
||||
{NOTRAIT_UNIT 2 "Orcish Grunt" 36 21}
|
||||
{NOTRAIT_UNIT 2 "Naga Fighter" 46 21}
|
||||
{NOTRAIT_UNIT 2 "Orcish Grunt" 46 22}
|
||||
|
||||
[/event]
|
||||
|
||||
|
||||
[/test]
|
||||
|
@ -77,7 +77,7 @@
|
||||
[/aspect]
|
||||
{DEFAULT_ASPECT_VALUE recruitment_ignore_bad_combat no}
|
||||
{DEFAULT_ASPECT_VALUE recruitment_ignore_bad_movement no}
|
||||
{DEFAULT_ASPECT_EMPTY recruitment_pattern}
|
||||
{DEFAULT_ASPECT_EMPTY recruitment_pattern}
|
||||
{DEFAULT_ASPECT_VALUE scout_village_targeting 3}
|
||||
{DEFAULT_ASPECT_VALUE simple_targeting no}
|
||||
{DEFAULT_ASPECT_VALUE support_villages no}
|
||||
|
@ -5,8 +5,8 @@
|
||||
next_scenario=02_this_valley_belongs_to_me
|
||||
{MEMOIRS_MAP four_oracles.map}
|
||||
turns=1
|
||||
#TODO uncomment when the fullscreen theme is available again.
|
||||
# theme=FullScreen
|
||||
#TODO uncomment when the fullscreen theme is available again.
|
||||
# theme=FullScreen
|
||||
{MORNING}
|
||||
|
||||
{INTRO_AND_SCENARIO_MUSIC revelation.ogg heroes_rite.ogg}
|
||||
@ -223,7 +223,7 @@
|
||||
result=victory
|
||||
linger_mode=no
|
||||
carryover_report=no
|
||||
|
||||
|
||||
#result=continue
|
||||
[/endlevel]
|
||||
[/event]
|
||||
|
@ -26,7 +26,7 @@
|
||||
canrecruit=yes
|
||||
#TODO goodies is not a good teamname
|
||||
team_name=goodies
|
||||
|
||||
|
||||
recruit={LOYALISTS}
|
||||
[/side]
|
||||
[event]
|
||||
@ -265,5 +265,4 @@
|
||||
save=no
|
||||
[/endlevel]
|
||||
[/event]
|
||||
|
||||
[/scenario]
|
||||
|
@ -65,7 +65,7 @@
|
||||
{MEMOIRS_GENERATOR_SKELETON 11 19 12}
|
||||
#endif HARD
|
||||
|
||||
{MEMOIRS_GENERATOR}
|
||||
{MEMOIRS_GENERATOR}
|
||||
|
||||
# if the player manages to destroy all generators...
|
||||
# an unlikely outcome unless we are on EASY
|
||||
|
@ -485,7 +485,7 @@
|
||||
|
||||
# wmllint: local spelling An-Usrukhar eyeblink
|
||||
[message]
|
||||
#po: The Tomb Guardian's dialogue should sound especially archaic
|
||||
#po: The Tomb Guardian's dialogue should sound especially archaic
|
||||
#po: and imperious. If your language has special forms for superior
|
||||
#po: addressing inferior, use them here.
|
||||
speaker=narrator
|
||||
@ -499,7 +499,7 @@
|
||||
[message]
|
||||
speaker=narrator
|
||||
#po: "bestrode" = past tense of archaic verb "bestride", literally
|
||||
#po: meaning to straddle but with a secondary sense of "to
|
||||
#po: meaning to straddle but with a secondary sense of "to
|
||||
#po: dominate", and connotations of gigantism.
|
||||
message=_"I am the will of An-Usrukhar, greatest of mages, he who bestrode Irdya in the morning of time, who sleeps now in a death beyond death until the unmaking of the world."
|
||||
image="portraits/tomb-guardian.png"
|
||||
@ -528,7 +528,7 @@
|
||||
[message]
|
||||
speaker=Delfador
|
||||
#po: "coil" is an archaism. In the English of around 1600, it was
|
||||
#po: used to refer to a difficulty or entanglement. Translate
|
||||
#po: used to refer to a difficulty or entanglement. Translate
|
||||
#po: freely.
|
||||
message=_"I have felt the coils of prophecy on me before. I am beginning to dislike them."
|
||||
[/message]
|
||||
@ -544,7 +544,7 @@
|
||||
[message]
|
||||
speaker=narrator
|
||||
#po: The Tomb Guardian speaks closer to literal truth here than
|
||||
#po: Delfador can possibly know. It is now 470YW; in 501YW,
|
||||
#po: Delfador can possibly know. It is now 470YW; in 501YW,
|
||||
#po: Garard II will be murdered by his wife and son, and the
|
||||
#po: usurpation of Asheviere will begin.
|
||||
message=_"Your king will die in an eyeblink and your kingdom in the drawing of a breath. Delfador, I ask you again, ARE YOU A SERVANT OF THE LIGHT?"
|
||||
@ -557,7 +557,7 @@
|
||||
[message]
|
||||
speaker=narrator
|
||||
#po: "matter" is used here with an archaic meaning, roughly
|
||||
#po: that of "ground" or "essence". This sense survives in
|
||||
#po: that of "ground" or "essence". This sense survives in
|
||||
#po: modern English in constructions like "It matters a lot."
|
||||
message=_"Peoples vanish and lands wither under the pitiless gaze of eternity; the true matter of the world is deeper. Delfador, I ask you a third time, and on your answer hangs your life: ARE YOU A SERVANT OF THE LIGHT?"
|
||||
image="portraits/tomb-guardian.png"
|
||||
|
@ -138,24 +138,23 @@
|
||||
visible=yes
|
||||
viewing_side=1
|
||||
[/filter_vision]
|
||||
|
||||
[/have_unit]
|
||||
[/not]
|
||||
|
||||
[then]
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"What are you doing in our forests, stranger?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Delfador
|
||||
message=_"It's a long story... but I wonder whether I might first ask for your hospitality? I'm lost, and freezing to death here!"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"I suppose there can be little harm in one half-frozen human... Our nearest post is to the northeast; I'll lead you there. But we must not tarry! There are deadlier foes than the weather abroad."
|
||||
[/message]
|
||||
[/then]
|
||||
|
||||
[then]
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"What are you doing in our forests, stranger?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Delfador
|
||||
message=_"It's a long story... but I wonder whether I might first ask for your hospitality? I'm lost, and freezing to death here!"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"I suppose there can be little harm in one half-frozen human... Our nearest post is to the northeast; I'll lead you there. But we must not tarry! There are deadlier foes than the weather abroad."
|
||||
[/message]
|
||||
[/then]
|
||||
[/if]
|
||||
[/event]
|
||||
|
||||
|
@ -405,7 +405,7 @@
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Delfador
|
||||
#po: "be of heart" -> "have courage" in modern English.
|
||||
#po: "be of heart" -> "have courage" in modern English.
|
||||
message= _ "I have fought these before. Be of heart: impact weapons and magic can defeat them. Do I recall aright that there is a school of mages not far from here?"
|
||||
[/message]
|
||||
[message]
|
||||
|
@ -5,7 +5,7 @@
|
||||
next_scenario=15_save_the_king
|
||||
{MEMOIRS_MAP shadows.map}
|
||||
{TURNS 32 28 24}
|
||||
# {TURNS 24 28 32}
|
||||
# {TURNS 24 28 32}
|
||||
|
||||
{DEFAULT_SCHEDULE}
|
||||
|
||||
|
@ -62,7 +62,7 @@
|
||||
[/protect_unit]
|
||||
[/ai]
|
||||
[ai]
|
||||
# Avoid everywhere north of the southernmost reach of the river
|
||||
# Avoid everywhere north of the southernmost reach of the river
|
||||
[avoid]
|
||||
x=1-30
|
||||
y=1-19,21-28
|
||||
@ -74,7 +74,7 @@
|
||||
[/avoid]
|
||||
[/ai]
|
||||
[ai]
|
||||
# Avoid southwestern keep until side 4 gets gold for its
|
||||
# Avoid southwestern keep until side 4 gets gold for its
|
||||
# second wave.
|
||||
turns=1-12
|
||||
[avoid]
|
||||
@ -483,6 +483,5 @@
|
||||
[/endlevel]
|
||||
[/event]
|
||||
|
||||
|
||||
{MEMOIRS_DEATHS}
|
||||
[/scenario]
|
||||
|
@ -83,7 +83,6 @@
|
||||
[/part]
|
||||
[/story]
|
||||
|
||||
|
||||
[story]
|
||||
[part]
|
||||
background=story/landscape-battlefield.jpg
|
||||
|
@ -168,7 +168,7 @@
|
||||
x,y=2,18
|
||||
side=1
|
||||
[/capture_village]
|
||||
# We have mercy on the player and don't make him slog a unit
|
||||
# We have mercy on the player and don't make him slog a unit
|
||||
# through mountains to get this one.
|
||||
[capture_village]
|
||||
x,y=2,21
|
||||
@ -226,7 +226,7 @@
|
||||
name=close_portal
|
||||
[/fire_event]
|
||||
|
||||
# If Iliah-Malal got killed before this point,
|
||||
# If Iliah-Malal got killed before this point,
|
||||
# rematerialize him on his keep so we can have
|
||||
# final dialog - the "join me" is referred to later.
|
||||
[if]
|
||||
@ -276,7 +276,7 @@
|
||||
|
||||
{REMOVE_IMAGE 19 21}
|
||||
|
||||
# Prompt player to go back to starting location
|
||||
# Prompt player to go back to starting location
|
||||
{HIGHLIGHT_IMAGE 2 19 items/gohere.png ()}
|
||||
|
||||
[delay]
|
||||
@ -405,7 +405,7 @@
|
||||
message= _ "Out of my way, foul creatures!"
|
||||
[/message]
|
||||
[/event]
|
||||
|
||||
|
||||
#############################
|
||||
# closing dialog
|
||||
#############################
|
||||
|
@ -318,7 +318,7 @@
|
||||
[/event]
|
||||
[/else]
|
||||
[/if]
|
||||
[/event]
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=recall
|
||||
@ -454,7 +454,7 @@
|
||||
speaker=Delfador
|
||||
message= _ "You who fought beside me in the Land of the Dead and chose the side of the living on this day, return now to your peace and rest."
|
||||
[/message]
|
||||
|
||||
|
||||
[kill]
|
||||
side=1
|
||||
race=undead
|
||||
|
@ -20,7 +20,7 @@
|
||||
[part]
|
||||
# Asheviere was already having secret talks with
|
||||
# the orcs about the early HttT events and Lionel's mission
|
||||
#po: "demesne" = the part of a feudal lord's lands reserved for
|
||||
#po: "demesne" = the part of a feudal lord's lands reserved for
|
||||
#po: personal use.
|
||||
#po: The "Sceptre" spelling is intentional.
|
||||
story=_ "Upon his return to Weldyn, Delfador discovered that the queen had left with a strong escort to visit her family's demesne and her ailing parents. Lionel, the King's most trusted general, had been sent at Asheviere's request on an errand to Knalga to retrieve the Sceptre of Fire. That mission would cost Lionel his life; and neither Lionel nor Delfador knew that Lionel's mission had been compromised from the start."
|
||||
|
@ -14,4 +14,3 @@
|
||||
cost=200
|
||||
description=_"Under the feudal system, all authority ultimately rested with the sovereign. His lords held their property only with his agreement, and had to pay him tribute. In return, the king would defend the realm against invaders, and redistribute wealth in times of need."+{SPECIAL_NOTES}+{SPECIAL_NOTES_LEADERSHIP}
|
||||
[/unit_type]
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
[/event]
|
||||
#enddef
|
||||
|
||||
#define MEMOIRS_GENERATOR
|
||||
#define MEMOIRS_GENERATOR
|
||||
# generate a unit each turn
|
||||
[event]
|
||||
name=new turn
|
||||
@ -47,8 +47,8 @@
|
||||
y=$monoliths[$one].y
|
||||
animate=yes
|
||||
[/unit]
|
||||
{NEXT one}
|
||||
[/event]
|
||||
{NEXT one}
|
||||
[/event]
|
||||
|
||||
# if someone capable of destroying the generator moves there
|
||||
[event]
|
||||
|
@ -100,7 +100,7 @@
|
||||
|
||||
# We'll use this for a logic guard later on.
|
||||
#define HAVE_UNDEAD_VETERANS
|
||||
[variable]
|
||||
[variable]
|
||||
name=dead_recall.length
|
||||
greater_than=0
|
||||
[/variable]
|
||||
@ -413,7 +413,7 @@
|
||||
[/unstore_unit]
|
||||
# Delfador regains the ability to recruit L1 elves through Kalenz
|
||||
# This is mostly for storyline purpose, as Delfador will almost
|
||||
# certainly already have better units for this sort of battle.
|
||||
# certainly already have better units for this sort of battle.
|
||||
[allow_recruit]
|
||||
side=1
|
||||
type={ELVES}
|
||||
@ -449,7 +449,7 @@
|
||||
id=Delfador
|
||||
[/filter]
|
||||
[/store_unit]
|
||||
# Delfador dismissed his undead veterans
|
||||
# Delfador dismissed his undead veterans
|
||||
{CLEAR_VARIABLE undead_recall}
|
||||
# It would be nice to let Delfador keep his other veterans, but that
|
||||
# would stretch the storyline a bit far. Human veterans will get
|
||||
|
@ -278,7 +278,6 @@
|
||||
|
||||
#Dacyn pops out on keep and gives message about trapdoor.
|
||||
[event]
|
||||
|
||||
#define WIN_SCENARIO
|
||||
[message]
|
||||
speaker=Gweddry
|
||||
@ -335,7 +334,7 @@
|
||||
[have_unit]
|
||||
id=Gweddry
|
||||
x,y=9,16
|
||||
[/have_unit]
|
||||
[/have_unit]
|
||||
[then]
|
||||
{WIN_SCENARIO}
|
||||
[/then]
|
||||
|
@ -413,7 +413,7 @@
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Kalenz
|
||||
message= _ "The land of Wesnoth is not safe for us. The Queen's forces reach every corner. We must make haste to the north lands, across the Great River. Let us go quickly!"
|
||||
message= _ "The land of Wesnoth is not safe for us. The Queen's forces reach every corner. We must make haste to the north lands, across the Great River. Let us go quickly!"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Delfador
|
||||
|
@ -66,7 +66,7 @@
|
||||
[side]
|
||||
type=General
|
||||
# FIXME: This name is re-used in the last scenario.
|
||||
# Replace it with "Robryn" when we're not string-frozen.
|
||||
# Replace it with "Robryn" when we're not string-frozen.
|
||||
id=Heford
|
||||
name= _ "Heford"
|
||||
side=2
|
||||
|
@ -234,13 +234,13 @@
|
||||
|
||||
{VARIABLE terrain Aa}
|
||||
[/case]
|
||||
|
||||
|
||||
[case]
|
||||
value=Re
|
||||
|
||||
{VARIABLE terrain Aa}
|
||||
[/case]
|
||||
|
||||
|
||||
[case]
|
||||
value=Hh
|
||||
|
||||
@ -301,7 +301,7 @@
|
||||
{VARIABLE_OP i add 1}
|
||||
[/do]
|
||||
[/while]
|
||||
|
||||
|
||||
{CLEAR_VARIABLE non_snowy_locs}
|
||||
[/event]
|
||||
[/event]
|
||||
|
@ -229,7 +229,7 @@
|
||||
|
||||
[message]
|
||||
speaker=Kalenz
|
||||
#po: "Longlier" <- English "long" + "lies"; translate accordingly
|
||||
#po: "Longlier" <- English "long" + "lies"; translate accordingly
|
||||
message= _ "I can tell where we are. That is the river that is known as Longlier to men, called Arkan-thoria in my people's ancient tongue. The home of my people lies to the east."
|
||||
[/message]
|
||||
[message]
|
||||
|
@ -999,15 +999,15 @@ Soooo... It is you who sent your subordinates to attack us. Now when we've destr
|
||||
message= _ "I wonder why the drakes haven't finished him by now? It is strange that there are not any drakes or undead in that area."
|
||||
[/message]
|
||||
#define SERPENT X Y
|
||||
[unit]
|
||||
type=Water Serpent
|
||||
side=4
|
||||
x={X}
|
||||
y={Y}
|
||||
[movement_costs]
|
||||
mountains={UNREACHABLE}
|
||||
[/movement_costs]
|
||||
[/unit]
|
||||
[unit]
|
||||
type=Water Serpent
|
||||
side=4
|
||||
x={X}
|
||||
y={Y}
|
||||
[movement_costs]
|
||||
mountains={UNREACHABLE}
|
||||
[/movement_costs]
|
||||
[/unit]
|
||||
#enddef
|
||||
{SERPENT 48 13}
|
||||
{SERPENT 45 12}
|
||||
|
@ -69,8 +69,8 @@ This is the story of Kalenz, and of the Elves in the days of the humans in Wesno
|
||||
[unit]
|
||||
{LANDAR}
|
||||
# wmllint: recognize Landar
|
||||
#TODO enable the coordinates after the persistence test phase
|
||||
# x,y=16,15
|
||||
#TODO enable the coordinates after the persistence test phase
|
||||
# x,y=16,15
|
||||
find_vacant=yes
|
||||
[/unit]
|
||||
[unit]
|
||||
@ -78,20 +78,20 @@ This is the story of Kalenz, and of the Elves in the days of the humans in Wesno
|
||||
name=_ "Anduilas"
|
||||
unrenamable=yes
|
||||
type=Elvish Fighter
|
||||
#TODO enable the coordinates after the persistence test phase
|
||||
# x,y=19,15
|
||||
#TODO enable the coordinates after the persistence test phase
|
||||
# x,y=19,15
|
||||
[modifications]
|
||||
{TRAIT_LOYAL}
|
||||
{TRAIT_STRONG}
|
||||
{TRAIT_INTELLIGENT}
|
||||
# {TEAM_COLOR_LOYAL}
|
||||
# {TEAM_COLOR_LOYAL}
|
||||
[/modifications]
|
||||
find_vacant=yes
|
||||
[/unit]
|
||||
[/side]
|
||||
#wmllint: validate-on
|
||||
|
||||
#TODO I have seen better solutions in NR
|
||||
#TODO I have seen better solutions in NR
|
||||
[event]
|
||||
name=prestart
|
||||
{INIT_LANDAR}
|
||||
@ -217,7 +217,6 @@ This is the story of Kalenz, and of the Elves in the days of the humans in Wesno
|
||||
|
||||
{AI_SIMPLE_DAY_ASPECT caution 0.3}
|
||||
{AI_SIMPLE_NIGHT_ASPECT caution 0.2}
|
||||
|
||||
[/ai]
|
||||
{INCOME 4 8 12}
|
||||
[/side]
|
||||
|
@ -146,7 +146,6 @@
|
||||
#endif
|
||||
[/else]
|
||||
[/if]
|
||||
|
||||
[/event]
|
||||
|
||||
# Elves have stepped on Olurf's land.
|
||||
@ -217,77 +216,75 @@
|
||||
name=dwarves_kill_elves
|
||||
[/fire_event]
|
||||
#endif
|
||||
|
||||
[/else]
|
||||
[/if]
|
||||
{CLEAR_VARIABLE olurf_side}
|
||||
{VARIABLE offended_by_elves yes}
|
||||
|
||||
[/event]
|
||||
|
||||
# start dwarven ai code
|
||||
# start dwarven ai code
|
||||
|
||||
# TODO: AI C++ : add engine support for path=goal[*] for mass deleting
|
||||
# TODO: AI C++ : consider adding the way to mass-delete all 'extra' stuff (via tags)
|
||||
# TODO: AI C++ : add engine support for path=goal[*] for mass deleting
|
||||
# TODO: AI C++ : consider adding the way to mass-delete all 'extra' stuff (via tags)
|
||||
#define CLEAN_AI SIDE
|
||||
{MODIFY_AI_DELETE_GOAL {SIDE} kill_elves}
|
||||
{MODIFY_AI_DELETE_GOAL {SIDE} kill_trolls}
|
||||
{MODIFY_AI_DELETE_GOAL {SIDE} kill_trespassers}
|
||||
{MODIFY_AI_DELETE_STAGE {SIDE} retreat_to_olurfs_land}
|
||||
{MODIFY_AI_DELETE_ASPECT {SIDE} avoid stay_in_own_land}
|
||||
{MODIFY_AI_DELETE_ASPECT {SIDE} recruitment always}
|
||||
{MODIFY_AI_DELETE_GOAL {SIDE} kill_elves}
|
||||
{MODIFY_AI_DELETE_GOAL {SIDE} kill_trolls}
|
||||
{MODIFY_AI_DELETE_GOAL {SIDE} kill_trespassers}
|
||||
{MODIFY_AI_DELETE_STAGE {SIDE} retreat_to_olurfs_land}
|
||||
{MODIFY_AI_DELETE_ASPECT {SIDE} avoid stay_in_own_land}
|
||||
{MODIFY_AI_DELETE_ASPECT {SIDE} recruitment always}
|
||||
#enddef
|
||||
|
||||
#define ADD_AVOID_STAY_AT_OLURFS_LAND
|
||||
{MODIFY_AI_ADD_ASPECT 2 avoid (
|
||||
[facet]
|
||||
id="stay_in_own_land"
|
||||
[value]
|
||||
[not]
|
||||
{OLURFS_LAND}
|
||||
[/not]
|
||||
[/value]
|
||||
[/facet]
|
||||
)}
|
||||
{MODIFY_AI_ADD_ASPECT 2 avoid (
|
||||
[facet]
|
||||
id="stay_in_own_land"
|
||||
[value]
|
||||
[not]
|
||||
{OLURFS_LAND}
|
||||
[/not]
|
||||
[/value]
|
||||
[/facet]
|
||||
)}
|
||||
#enddef
|
||||
|
||||
#define ADD_GOAL_KILL_ELVES SIDE
|
||||
{MODIFY_AI_ADD_GOAL {SIDE} (
|
||||
{MODIFY_AI_ADD_GOAL {SIDE} (
|
||||
[goal]
|
||||
id=kill_elves
|
||||
[criteria]
|
||||
side=1
|
||||
side=1
|
||||
[/criteria]
|
||||
value=1.5
|
||||
[/goal]
|
||||
)}
|
||||
)}
|
||||
#enddef
|
||||
|
||||
#define ADD_GOAL_KILL_TROLLS SIDE
|
||||
{MODIFY_AI_ADD_GOAL {SIDE} (
|
||||
{MODIFY_AI_ADD_GOAL {SIDE} (
|
||||
[goal]
|
||||
id=kill_trolls
|
||||
[criteria]
|
||||
side=3
|
||||
side=3
|
||||
[/criteria]
|
||||
value=1.5
|
||||
[/goal]
|
||||
)}
|
||||
)}
|
||||
#enddef
|
||||
|
||||
#define ADD_GOAL_KILL_TRESPASSERS SIDE
|
||||
{MODIFY_AI_ADD_GOAL {SIDE} (
|
||||
[goal]
|
||||
{MODIFY_AI_ADD_GOAL {SIDE} (
|
||||
[goal]
|
||||
id=kill_trespassers
|
||||
[criteria]
|
||||
[not]
|
||||
side={SIDE}
|
||||
side={SIDE}
|
||||
[/not]
|
||||
#limiting is handled by 'avoid' aspect
|
||||
#limiting is handled by 'avoid' aspect
|
||||
[/criteria]
|
||||
value=1.5
|
||||
[/goal]
|
||||
)}
|
||||
)}
|
||||
#enddef
|
||||
|
||||
#define ADD_STAGE_RETREAT_TO_OLURFS_LAND SIDE
|
||||
@ -300,27 +297,26 @@
|
||||
name=testing_ai_default::candidate_action_evaluation_loop
|
||||
#TODO: add [candidate_action]s to make the retreat work
|
||||
[/stage]
|
||||
[/modify_ai]
|
||||
[/modify_ai]
|
||||
#enddef
|
||||
|
||||
[event]
|
||||
name=dwarves_watch_the_show
|
||||
first_time_only=no
|
||||
{CLEAN_AI 2}
|
||||
{MODIFY_AI_ADD_ASPECT 2 recruitment {AI_NO_RECRUITMENT} }
|
||||
{MODIFY_AI_ADD_ASPECT 2 recruitment {AI_NO_RECRUITMENT} }
|
||||
{ADD_AVOID_STAY_AT_OLURFS_LAND}
|
||||
[message]
|
||||
id=Olurf
|
||||
message= _ "It should be rare sport to watch this ... just beware not to trespass on our land."
|
||||
[/message]
|
||||
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=dwarves_kill_elves
|
||||
first_time_only=no
|
||||
{CLEAN_AI 2}
|
||||
{MODIFY_AI_ADD_ASPECT 2 recruitment {AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT} }
|
||||
{MODIFY_AI_ADD_ASPECT 2 recruitment {AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT} }
|
||||
{ADD_GOAL_KILL_ELVES 2}
|
||||
[message]
|
||||
id=Olurf
|
||||
@ -332,7 +328,7 @@
|
||||
name=dwarves_kill_trolls
|
||||
first_time_only=no
|
||||
{CLEAN_AI 2}
|
||||
{MODIFY_AI_ADD_ASPECT 2 recruitment {AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT} }
|
||||
{MODIFY_AI_ADD_ASPECT 2 recruitment {AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT} }
|
||||
{ADD_GOAL_KILL_TROLLS 2}
|
||||
[message]
|
||||
id=Olurf
|
||||
@ -344,7 +340,7 @@
|
||||
name=dwarves_kill_elves_and_trolls
|
||||
first_time_only=no
|
||||
{CLEAN_AI 2}
|
||||
{MODIFY_AI_ADD_ASPECT 2 recruitment {AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT} }
|
||||
{MODIFY_AI_ADD_ASPECT 2 recruitment {AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT} }
|
||||
{ADD_GOAL_KILL_ELVES 2}
|
||||
{ADD_GOAL_KILL_TROLLS 2}
|
||||
[message]
|
||||
@ -357,7 +353,7 @@
|
||||
name=dwarves_defend_their_territory
|
||||
first_time_only=no
|
||||
{CLEAN_AI 2}
|
||||
{MODIFY_AI_ADD_ASPECT 2 recruitment {AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT} }
|
||||
{MODIFY_AI_ADD_ASPECT 2 recruitment {AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT} }
|
||||
{ADD_AVOID_STAY_AT_OLURFS_LAND}
|
||||
{ADD_GOAL_KILL_TRESPASSERS 2}
|
||||
{ADD_STAGE_RETREAT_TO_OLURFS_LAND 2}
|
||||
@ -374,7 +370,7 @@
|
||||
#undef ADD_GOAL_KILL_TROLLS
|
||||
#undef ADD_GOAL_KILL_TRESPASSERS
|
||||
|
||||
# end dwarven ai code
|
||||
# end dwarven ai code
|
||||
|
||||
[event]
|
||||
name=victory
|
||||
@ -467,7 +463,6 @@
|
||||
[fire_event]
|
||||
name=dwarves_watch_the_show
|
||||
[/fire_event]
|
||||
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
@ -505,29 +500,29 @@
|
||||
[/event]
|
||||
|
||||
#define ENDSPEECH SPEAKER
|
||||
[message]
|
||||
speaker={SPEAKER}
|
||||
message= _ "We made it. Onwards to Wesmere!"
|
||||
[/message]
|
||||
[message]
|
||||
speaker={SPEAKER}
|
||||
message= _ "We made it. Onwards to Wesmere!"
|
||||
[/message]
|
||||
|
||||
[if]
|
||||
[variable]
|
||||
name=killed_by_elves
|
||||
greater_than=3
|
||||
[/variable]
|
||||
[then]
|
||||
[message]
|
||||
id=Olurf
|
||||
message= _ "Crazy elves! But at least they felled a few trolls before they left."
|
||||
[/message]
|
||||
[/then]
|
||||
[else]
|
||||
[message]
|
||||
id=Olurf
|
||||
message= _ "Crazy elves!"
|
||||
[/message]
|
||||
[/else]
|
||||
[/if]
|
||||
[if]
|
||||
[variable]
|
||||
name=killed_by_elves
|
||||
greater_than=3
|
||||
[/variable]
|
||||
[then]
|
||||
[message]
|
||||
id=Olurf
|
||||
message= _ "Crazy elves! But at least they felled a few trolls before they left."
|
||||
[/message]
|
||||
[/then]
|
||||
[else]
|
||||
[message]
|
||||
id=Olurf
|
||||
message= _ "Crazy elves!"
|
||||
[/message]
|
||||
[/else]
|
||||
[/if]
|
||||
#enddef
|
||||
|
||||
[event]
|
||||
@ -583,7 +578,7 @@
|
||||
[/filter_second]
|
||||
[message]
|
||||
id=Grugl
|
||||
# wmllint: local spelling Uuuurrrggghh
|
||||
# wmllint: local spelling Uuuurrrggghh
|
||||
message= _ "Uuuurrrggghh! Grugl tried to eat dwarves, but choked in their sharp nasty axes."
|
||||
[/message]
|
||||
|
||||
|
@ -78,14 +78,13 @@
|
||||
recruit={ELVES}
|
||||
gold=0
|
||||
|
||||
{ai/aliases/stable_singleplayer.cfg} #note that this MUST be given OUTSIDE the 'ai' tag
|
||||
{ai/aliases/stable_singleplayer.cfg} #note that this MUST be given OUTSIDE the 'ai' tag
|
||||
[ai]
|
||||
{AI_NO_SCOUTS}
|
||||
{AI_SIMPLE_ALWAYS_ASPECT recruitment_pattern "healer,archer,fighter,archer,fighter,archer,healer,scout"}
|
||||
[/ai]
|
||||
[/side]
|
||||
|
||||
|
||||
#### Side3 code ####
|
||||
[side]
|
||||
side=3
|
||||
@ -226,7 +225,6 @@
|
||||
{AI_SIMPLE_ALWAYS_ASPECT villages_per_scout 5}
|
||||
{AI_SIMPLE_ALWAYS_ASPECT recruitment_pattern "scout,fighter,fighter,archer,mixed fighter"}
|
||||
[/ai]
|
||||
|
||||
[/side]
|
||||
[event]
|
||||
name=last breath
|
||||
@ -243,79 +241,78 @@
|
||||
#### Orc AI ####
|
||||
|
||||
#define ORC_BATTLEFIELD_EVALUATION
|
||||
{VARIABLE orc_battlefield_evaluation 0}
|
||||
# slayer dead: -1000
|
||||
[if]
|
||||
[not]
|
||||
[have_unit]
|
||||
id=Urudin
|
||||
side=3
|
||||
[/have_unit]
|
||||
[/not]
|
||||
[then]
|
||||
{VARIABLE_OP orc_battlefield_evaluation add -1000}
|
||||
[/then]
|
||||
[/if]
|
||||
{VARIABLE orc_battlefield_evaluation 0}
|
||||
# slayer dead: -1000
|
||||
[if]
|
||||
[not]
|
||||
[have_unit]
|
||||
id=Urudin
|
||||
side=3
|
||||
[/have_unit]
|
||||
[/not]
|
||||
[then]
|
||||
{VARIABLE_OP orc_battlefield_evaluation add -1000}
|
||||
[/then]
|
||||
[/if]
|
||||
|
||||
# orcs in Ka'lian: +3 +4 +5 per orc
|
||||
[store_unit]
|
||||
variable=eval_orcs_in_kalian
|
||||
[filter]
|
||||
side=3,4,5
|
||||
[filter_location]
|
||||
[and]
|
||||
x,y=31,25
|
||||
radius=5
|
||||
[/and]
|
||||
[not]
|
||||
terrain=W*
|
||||
[/not]
|
||||
[/filter_location]
|
||||
[/filter]
|
||||
[/store_unit]
|
||||
# orcs in Ka'lian: +3 +4 +5 per orc
|
||||
[store_unit]
|
||||
variable=eval_orcs_in_kalian
|
||||
[filter]
|
||||
side=3,4,5
|
||||
[filter_location]
|
||||
[and]
|
||||
x,y=31,25
|
||||
radius=5
|
||||
[/and]
|
||||
[not]
|
||||
terrain=W*
|
||||
[/not]
|
||||
[/filter_location]
|
||||
[/filter]
|
||||
[/store_unit]
|
||||
|
||||
{VARIABLE eval_orcs_in_kalian_score 0}
|
||||
{VARIABLE_OP eval_orcs_in_kalian_score add $eval_orcs_in_kalian.length}
|
||||
{VARIABLE eval_orcs_in_kalian_score 0}
|
||||
{VARIABLE_OP eval_orcs_in_kalian_score add $eval_orcs_in_kalian.length}
|
||||
|
||||
#ifdef EASY
|
||||
{VARIABLE_OP eval_orcs_in_kalian_score multiply 3}
|
||||
{VARIABLE_OP eval_orcs_in_kalian_score multiply 3}
|
||||
#endif
|
||||
#ifdef NORMAL
|
||||
{VARIABLE_OP eval_orcs_in_kalian_score multiply 4}
|
||||
{VARIABLE_OP eval_orcs_in_kalian_score multiply 4}
|
||||
#endif
|
||||
#ifdef HARD
|
||||
{VARIABLE_OP eval_orcs_in_kalian_score multiply 5}
|
||||
{VARIABLE_OP eval_orcs_in_kalian_score multiply 5}
|
||||
#endif
|
||||
|
||||
{VARIABLE_OP orc_battlefield_evaluation add $eval_orcs_in_kalian_score}
|
||||
{VARIABLE_OP orc_battlefield_evaluation add $eval_orcs_in_kalian_score}
|
||||
|
||||
# elven units: -1 per unit
|
||||
[store_unit]
|
||||
variable=eval_elves
|
||||
[filter]
|
||||
side=1,2
|
||||
[/filter]
|
||||
[/store_unit]
|
||||
|
||||
# elven units: -1 per unit
|
||||
[store_unit]
|
||||
variable=eval_elves
|
||||
[filter]
|
||||
side=1,2
|
||||
[/filter]
|
||||
[/store_unit]
|
||||
|
||||
{VARIABLE_OP orc_battlefield_evaluation sub $eval_elves.length}
|
||||
{CLEAR_VARIABLE eval_elves}
|
||||
{CLEAR_VARIABLE eval_orcs_in_kalian}
|
||||
{CLEAR_VARIABLE eval_orcs_in_kalian_score}
|
||||
{VARIABLE_OP orc_battlefield_evaluation sub $eval_elves.length}
|
||||
{CLEAR_VARIABLE eval_elves}
|
||||
{CLEAR_VARIABLE eval_orcs_in_kalian}
|
||||
{CLEAR_VARIABLE eval_orcs_in_kalian_score}
|
||||
#enddef
|
||||
|
||||
#define ORC_BATTLEFIELD_EVALUATION_SUCCESS
|
||||
[variable]
|
||||
name=orc_battlefield_evaluation
|
||||
greater_than_equal_to=11
|
||||
[/variable]
|
||||
[variable]
|
||||
name=orc_battlefield_evaluation
|
||||
greater_than_equal_to=11
|
||||
[/variable]
|
||||
#enddef
|
||||
|
||||
#define ORC_BATTLEFIELD_EVALUATION_FAILURE
|
||||
[variable]
|
||||
name=orc_battlefield_evaluation
|
||||
less_than_equal_to=-25
|
||||
[/variable]
|
||||
[variable]
|
||||
name=orc_battlefield_evaluation
|
||||
less_than_equal_to=-25
|
||||
[/variable]
|
||||
#enddef
|
||||
|
||||
[event]
|
||||
@ -352,30 +349,30 @@
|
||||
[/message]
|
||||
{ORC_BATTLEFIELD_EVALUATION}
|
||||
[if]
|
||||
{ORC_BATTLEFIELD_EVALUATION_SUCCESS}
|
||||
[then]
|
||||
[message]
|
||||
id=Urudin
|
||||
message=_ "Yes. We slaughtered them in great numbers."
|
||||
[/message]
|
||||
[/then]
|
||||
[else]
|
||||
[if]
|
||||
{ORC_BATTLEFIELD_EVALUATION_FAILURE}
|
||||
[then]
|
||||
[message]
|
||||
id=Urudin
|
||||
message=_ "No, our attack was repulsed."
|
||||
[/message]
|
||||
[/then]
|
||||
[else]
|
||||
[message]
|
||||
id=Urudin
|
||||
message=_ "They resisted us fiercely; the battle is not yet done."
|
||||
[/message]
|
||||
[/else]
|
||||
[/if]
|
||||
[/else]
|
||||
{ORC_BATTLEFIELD_EVALUATION_SUCCESS}
|
||||
[then]
|
||||
[message]
|
||||
id=Urudin
|
||||
message=_ "Yes. We slaughtered them in great numbers."
|
||||
[/message]
|
||||
[/then]
|
||||
[else]
|
||||
[if]
|
||||
{ORC_BATTLEFIELD_EVALUATION_FAILURE}
|
||||
[then]
|
||||
[message]
|
||||
id=Urudin
|
||||
message=_ "No, our attack was repulsed."
|
||||
[/message]
|
||||
[/then]
|
||||
[else]
|
||||
[message]
|
||||
id=Urudin
|
||||
message=_ "They resisted us fiercely; the battle is not yet done."
|
||||
[/message]
|
||||
[/else]
|
||||
[/if]
|
||||
[/else]
|
||||
[/if]
|
||||
{CLEAR_VARIABLE orc_battlefield_evaluation}
|
||||
[fire_event]
|
||||
@ -395,7 +392,7 @@
|
||||
[/message]
|
||||
[store_unit]
|
||||
[filter]
|
||||
id=Urudin
|
||||
id=Urudin
|
||||
[/filter]
|
||||
variable=Urudin_from_low3
|
||||
kill=yes
|
||||
@ -443,9 +440,9 @@
|
||||
equals='wait'
|
||||
[/variable]
|
||||
[then]
|
||||
[message]
|
||||
message=_ " $orc_battlefield_strategy changed to attack "
|
||||
[/message]
|
||||
[message]
|
||||
message=_ " $orc_battlefield_strategy changed to attack "
|
||||
[/message]
|
||||
{VARIABLE orc_battlefield_strategy 'attack'}
|
||||
[/then]
|
||||
[/if]
|
||||
@ -547,7 +544,6 @@
|
||||
value=200
|
||||
[/goal]
|
||||
)}
|
||||
|
||||
[/event]
|
||||
|
||||
#### /Orc AI ####
|
||||
@ -598,7 +594,7 @@
|
||||
name="time over"
|
||||
|
||||
{REPLACE_SCENARIO_MUSIC the_city_falls.ogg}
|
||||
|
||||
|
||||
{APPEND_MUSIC wanderer.ogg}
|
||||
#TODO add some more titles
|
||||
{APPEND_MUSIC suspense.ogg}
|
||||
@ -630,18 +626,18 @@
|
||||
x=$villages[$village].x
|
||||
y=$villages[$village].y
|
||||
[/capture_village]
|
||||
{NEXT village}
|
||||
|
||||
{NEXT village}
|
||||
|
||||
{CLEAR_VARIABLE villages}
|
||||
|
||||
|
||||
{FOREACH kalenz elf}
|
||||
[unstore_unit]
|
||||
variable=kalenz[$elf]
|
||||
x=recall
|
||||
y=recall
|
||||
[/unstore_unit]
|
||||
{NEXT elf}
|
||||
|
||||
{NEXT elf}
|
||||
|
||||
{CLEAR_VARIABLE kalenz}
|
||||
|
||||
[recall]
|
||||
@ -726,16 +722,15 @@
|
||||
{MODIFY_AI_ADD_GOAL 2 (
|
||||
[goal]
|
||||
[criteria]
|
||||
id=Mutaf-uru
|
||||
[or]
|
||||
id=Murudin
|
||||
[/or]
|
||||
id=Mutaf-uru
|
||||
[or]
|
||||
id=Murudin
|
||||
[/or]
|
||||
[/criteria]
|
||||
value=2
|
||||
[/goal]
|
||||
)}
|
||||
|
||||
|
||||
[event]
|
||||
name="time over"
|
||||
[message]
|
||||
|
@ -153,7 +153,6 @@
|
||||
id=Kalenz
|
||||
[/scroll_to_unit]
|
||||
|
||||
|
||||
[message]
|
||||
id=Kalenz
|
||||
message= _ "We must free them and make these saurians pay. Attack and leave no one alive!"
|
||||
|
@ -166,7 +166,6 @@
|
||||
#po: Saurians often hiss their sibilants; do this in your language.
|
||||
message= _ "The elves have followed ussss! We must hold the gold until reinforcements arrive."
|
||||
[/message]
|
||||
|
||||
[/event]
|
||||
|
||||
#define BLINK
|
||||
@ -184,55 +183,53 @@
|
||||
[/delay]
|
||||
#enddef
|
||||
|
||||
|
||||
|
||||
#define TREASURE_CHEST X Y
|
||||
[item]
|
||||
image=items/chest.png
|
||||
[item]
|
||||
image=items/chest.png
|
||||
x={X}
|
||||
y={Y}
|
||||
[/item]
|
||||
|
||||
[event]
|
||||
name=moveto
|
||||
delayed_variable_substitution=no
|
||||
[filter]
|
||||
x={X}
|
||||
y={Y}
|
||||
[/item]
|
||||
side=1
|
||||
type=Elvish Scout, Elvish Outrider, Elvish Rider
|
||||
[/filter]
|
||||
|
||||
[event]
|
||||
name=moveto
|
||||
delayed_variable_substitution=no
|
||||
[object]
|
||||
image=items/chest.png
|
||||
name= _ "Treasure Chest"
|
||||
[effect]
|
||||
apply_to=status
|
||||
add=slowed
|
||||
unit_type=Elvish Scout, Elvish Outrider, Elvish Rider
|
||||
[/effect]
|
||||
duration=level
|
||||
[filter]
|
||||
x={X}
|
||||
y={Y}
|
||||
side=1
|
||||
type=Elvish Scout, Elvish Outrider, Elvish Rider
|
||||
[/filter]
|
||||
|
||||
[object]
|
||||
image=items/chest.png
|
||||
name= _ "Treasure Chest"
|
||||
[effect]
|
||||
apply_to=status
|
||||
add=slowed
|
||||
unit_type=Elvish Scout, Elvish Outrider, Elvish Rider
|
||||
[/effect]
|
||||
duration=level
|
||||
[filter]
|
||||
[then]
|
||||
[removeitem]
|
||||
image=items/chest.png
|
||||
[/removeitem]
|
||||
[role]
|
||||
x={X}
|
||||
y={Y}
|
||||
[/filter]
|
||||
[then]
|
||||
[removeitem]
|
||||
image=items/chest.png
|
||||
[/removeitem]
|
||||
[role]
|
||||
x={X}
|
||||
y={Y}
|
||||
role=gold_carrier
|
||||
[/role]
|
||||
[unit_overlay]
|
||||
x={X}
|
||||
y={Y}
|
||||
image=items/gold-coins-small.png
|
||||
[/unit_overlay]
|
||||
[/then]
|
||||
[/object]
|
||||
[/event]
|
||||
role=gold_carrier
|
||||
[/role]
|
||||
[unit_overlay]
|
||||
x={X}
|
||||
y={Y}
|
||||
image=items/gold-coins-small.png
|
||||
[/unit_overlay]
|
||||
[/then]
|
||||
[/object]
|
||||
[/event]
|
||||
#enddef
|
||||
|
||||
[event]
|
||||
@ -241,7 +238,6 @@
|
||||
{MODIFY_UNIT role=gold_carrier status.slowed yes }
|
||||
[/event]
|
||||
|
||||
|
||||
[event]
|
||||
name=moveto
|
||||
[filter]
|
||||
@ -268,7 +264,7 @@
|
||||
x=20
|
||||
y=21
|
||||
role=treasure_guard
|
||||
# overlays="items/gohere.png"
|
||||
# overlays="items/gohere.png"
|
||||
[modifications]
|
||||
{TRAIT_STRONG}
|
||||
{TRAIT_RESILIENT}
|
||||
@ -282,7 +278,7 @@
|
||||
x=20
|
||||
y=21
|
||||
role=treasure_guard
|
||||
# overlays="items/gohere.png"
|
||||
# overlays="items/gohere.png"
|
||||
[modifications]
|
||||
{TRAIT_STRONG}
|
||||
{TRAIT_RESILIENT}
|
||||
@ -296,7 +292,7 @@
|
||||
x=20
|
||||
y=21
|
||||
role=treasure_guard
|
||||
# overlays="items/gohere.png"
|
||||
# overlays="items/gohere.png"
|
||||
[modifications]
|
||||
{TRAIT_DEXTROUS}
|
||||
{TRAIT_RESILIENT}
|
||||
@ -311,7 +307,7 @@
|
||||
x=20
|
||||
y=21
|
||||
role=treasure_guard
|
||||
# overlays="items/gohere.png"
|
||||
# overlays="items/gohere.png"
|
||||
[modifications]
|
||||
{TRAIT_STRONG}
|
||||
{TRAIT_RESILIENT}
|
||||
@ -416,9 +412,7 @@
|
||||
message= _ "Turnabout is fair play. Now that we've retrieved the gold, let us fare swiftly back to Wesmere. The Saurians will likely be infesting the direct route, so we will detour to the north. "
|
||||
[/message]
|
||||
{LOOT 1800 1}
|
||||
|
||||
[/event]
|
||||
|
||||
{campaigns/Legend_of_Wesmere/utils/deaths.cfg}
|
||||
[/scenario]
|
||||
|
||||
|
@ -111,7 +111,7 @@
|
||||
user_team_name= _ "Enemies"
|
||||
{FLAG_VARIANT undead}
|
||||
#ifdef EASY
|
||||
recruit=Orcish Archer, Orcish Assassin, Orcish Grunt, Wolf Rider, Orcish Crossbowman, Goblin Knight, Goblin Pillager
|
||||
recruit=Orcish Archer, Orcish Assassin, Orcish Grunt, Wolf Rider, Orcish Crossbowman, Goblin Knight, Goblin Pillager
|
||||
#endif
|
||||
#ifdef NORMAL
|
||||
recruit=Orcish Archer, Orcish Assassin, Orcish Grunt, Wolf Rider, Orcish Crossbowman, Goblin Knight, Goblin Pillager, Orcish Slayer
|
||||
@ -187,7 +187,6 @@
|
||||
note={EARLY_FINISH_BONUS_NOTE}
|
||||
#TODO add to note#note= _ "Try to save leveled dwarf units"
|
||||
[/objectives]
|
||||
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
@ -219,7 +218,6 @@
|
||||
[/message]
|
||||
|
||||
{AI_CONTROLLER_ALLOW_LEADER_CONTROL 1 2}
|
||||
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
|
@ -359,7 +359,6 @@
|
||||
|
||||
{AI_CONTROLLER_ALLOW_LEADER_CONTROL 1 2}
|
||||
{AI_CONTROLLER_ALLOW_LEADER_CONTROL 1 3}
|
||||
|
||||
[/event]
|
||||
[event]
|
||||
name=victory
|
||||
|
@ -78,9 +78,9 @@
|
||||
[/not]
|
||||
[and]
|
||||
type=Elvish Marshal,Elvish Champion,Elvish Avenger,Elvish Sharpshooter
|
||||
[or]
|
||||
[or]
|
||||
{FILTER_LOYALS}
|
||||
[/or]
|
||||
[/or]
|
||||
[/and]
|
||||
[/filter]
|
||||
[/store_unit]
|
||||
@ -88,8 +88,8 @@
|
||||
[recall]
|
||||
id=Anduilas
|
||||
[/recall]
|
||||
#
|
||||
# {RECALL_LOYALS}
|
||||
#
|
||||
# {RECALL_LOYALS}
|
||||
|
||||
[switch]
|
||||
variable=l3_store.length
|
||||
@ -136,7 +136,7 @@
|
||||
[/set_variable]
|
||||
[/else]
|
||||
[/switch]
|
||||
{NEXT i}
|
||||
{NEXT i}
|
||||
{CLEAR_VARIABLE l3_length}
|
||||
[/else]
|
||||
[/switch]
|
||||
@ -343,16 +343,16 @@
|
||||
[/filter]
|
||||
|
||||
{RANDOM_PLACEMENT 32 7 1 (
|
||||
[unit]
|
||||
type=Water Serpent
|
||||
id=Sealurr
|
||||
name= _ "Sealurr"
|
||||
side=4
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_STRONG}
|
||||
[/modifications]
|
||||
[/unit]
|
||||
[unit]
|
||||
type=Water Serpent
|
||||
id=Sealurr
|
||||
name= _ "Sealurr"
|
||||
side=4
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_STRONG}
|
||||
[/modifications]
|
||||
[/unit]
|
||||
) }
|
||||
|
||||
[message]
|
||||
@ -365,16 +365,16 @@
|
||||
[/scroll_to_unit]
|
||||
|
||||
{RANDOM_PLACEMENT 3 8 2 (
|
||||
[unit]
|
||||
type=Cuttle Fish
|
||||
id=Kallub
|
||||
name= _ "Kallub"
|
||||
side=4
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_STRONG}
|
||||
[/modifications]
|
||||
[/unit]
|
||||
[unit]
|
||||
type=Cuttle Fish
|
||||
id=Kallub
|
||||
name= _ "Kallub"
|
||||
side=4
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_STRONG}
|
||||
[/modifications]
|
||||
[/unit]
|
||||
) }
|
||||
|
||||
[message]
|
||||
@ -388,16 +388,16 @@
|
||||
|
||||
#ifndef EASY
|
||||
{RANDOM_PLACEMENT 3 9 2 (
|
||||
[unit]
|
||||
type=Water Serpent
|
||||
id=Scardeep
|
||||
name= _ "Scardeep"
|
||||
side=4
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_STRONG}
|
||||
[/modifications]
|
||||
[/unit]
|
||||
[unit]
|
||||
type=Water Serpent
|
||||
id=Scardeep
|
||||
name= _ "Scardeep"
|
||||
side=4
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_STRONG}
|
||||
[/modifications]
|
||||
[/unit]
|
||||
) }
|
||||
|
||||
[message]
|
||||
@ -410,16 +410,16 @@
|
||||
[/scroll_to_unit]
|
||||
|
||||
{RANDOM_PLACEMENT 16 6 2 (
|
||||
[unit]
|
||||
type=Cuttle Fish
|
||||
id=Kalimar
|
||||
name= _ "Kalimar"
|
||||
side=4
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_STRONG}
|
||||
[/modifications]
|
||||
[/unit]
|
||||
[unit]
|
||||
type=Cuttle Fish
|
||||
id=Kalimar
|
||||
name= _ "Kalimar"
|
||||
side=4
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_STRONG}
|
||||
[/modifications]
|
||||
[/unit]
|
||||
) }
|
||||
|
||||
[scroll_to_unit]
|
||||
@ -429,16 +429,16 @@
|
||||
|
||||
#ifdef HARD
|
||||
{RANDOM_PLACEMENT 34 8 1 (
|
||||
[unit]
|
||||
type=Cuttle Fish
|
||||
id=Alkamar
|
||||
name= _ "Alkamar"
|
||||
side=4
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_STRONG}
|
||||
[/modifications]
|
||||
[/unit]
|
||||
[unit]
|
||||
type=Cuttle Fish
|
||||
id=Alkamar
|
||||
name= _ "Alkamar"
|
||||
side=4
|
||||
[modifications]
|
||||
{TRAIT_RESILIENT}
|
||||
{TRAIT_STRONG}
|
||||
[/modifications]
|
||||
[/unit]
|
||||
) }
|
||||
|
||||
[scroll_to_unit]
|
||||
|
@ -109,7 +109,7 @@
|
||||
[/filter_second]
|
||||
[message]
|
||||
id=Crelanu
|
||||
message= _ "I sense a presence that is not one of Aquagar's creatures. Who are you, and what is your purpose here?"
|
||||
message= _ "I sense a presence that is not one of Aquagar's creatures. Who are you, and what is your purpose here?"
|
||||
[/message]
|
||||
[message]
|
||||
id=Cleodil
|
||||
@ -121,7 +121,7 @@
|
||||
[/message]
|
||||
[message]
|
||||
id=Kalenz
|
||||
message= _ "If you are the mage Crelanu, we have come to seek your help."
|
||||
message= _ "If you are the mage Crelanu, we have come to seek your help."
|
||||
[/message]
|
||||
[message]
|
||||
id=Crelanu
|
||||
@ -137,7 +137,6 @@
|
||||
[/modify_side]
|
||||
[/event]
|
||||
|
||||
|
||||
[event]
|
||||
name=prestart
|
||||
[objectives]
|
||||
@ -205,12 +204,12 @@
|
||||
# wmllint: local spelling Morogoth
|
||||
message= _ "I die, but I will not go unavenged! Cursed will you be Kalenz! You will never find lasting peace in all your years. You will lose your dearest. And you, Crelanu, your book will bring woe on you and haunt all its future owners to their graves! This will be the price for slaying me, Aquagar, great drake wizard of Morogoth."
|
||||
[/message]
|
||||
|
||||
|
||||
[message]
|
||||
id=Olurf
|
||||
message= _ "Some scary fellow this Aquagar thinks he is! Come now, I think Crelanu owes us some drinks."
|
||||
[/message]
|
||||
|
||||
|
||||
[endlevel]
|
||||
result=victory
|
||||
save=no
|
||||
|
@ -359,7 +359,7 @@
|
||||
side=7
|
||||
x=5
|
||||
y=5
|
||||
canrecruit=yes
|
||||
canrecruit=yes
|
||||
[/unit]
|
||||
|
||||
[unit]
|
||||
@ -415,7 +415,7 @@
|
||||
role=reenforce1
|
||||
message= _ "Our wolves' teeth will crack their bones! Attack!"
|
||||
[/message]
|
||||
|
||||
|
||||
[scroll_to_unit]
|
||||
role=reenforce3
|
||||
[/scroll_to_unit]
|
||||
@ -428,7 +428,6 @@
|
||||
role=reenforce2
|
||||
message= _ "Blood and steel! Hunt the worms down and crush them!"
|
||||
[/message]
|
||||
|
||||
[/event]
|
||||
|
||||
[side]
|
||||
@ -507,7 +506,6 @@
|
||||
role=reenforce2
|
||||
message=_ "Har har har!"
|
||||
[/message]
|
||||
|
||||
[/event]
|
||||
|
||||
#### /reenforcements for the orcs ####
|
||||
|
@ -38,7 +38,7 @@
|
||||
show_title=yes
|
||||
{TO_THE_CHIEF_MUST_DIE}
|
||||
[/part]
|
||||
[part]
|
||||
[part]
|
||||
story= _ "With the battle of Tath over, Kalenz and Landar knew the time had come to carry out Crelanu's dangerous but necessary plan. Meanwhile Cleodil had, reluctantly, been training Kalenz in a selected few of the secrets of Crelanu's book ..."
|
||||
{TO_THE_CHIEF_MUST_DIE_BATTLE}
|
||||
[/part]
|
||||
@ -217,8 +217,8 @@
|
||||
[ai]
|
||||
version=10703
|
||||
[stage]
|
||||
engine=fai
|
||||
name=unit_formulas
|
||||
engine=fai
|
||||
name=unit_formulas
|
||||
[/stage]
|
||||
[/ai]
|
||||
[/side]
|
||||
@ -316,7 +316,7 @@
|
||||
message= _ "This feels passing strange! Landar, remember to stay far from the wolves-they may be able to smell us."
|
||||
[/message]
|
||||
|
||||
#TODO Transfer some of the powers the unit Kalenz came from had -- eg leadership
|
||||
#TODO Transfer some of the powers the unit Kalenz came from had -- eg leadership
|
||||
|
||||
{HIGHLIGHT_IMAGE 2 30 scenery/signpost.png ()}
|
||||
|
||||
|
@ -58,28 +58,28 @@ Enemy units cannot see this unit, except for wolf-based units who can smell it i
|
||||
[ai]
|
||||
loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
[vars]
|
||||
guard_radius=3
|
||||
waypoints=[ loc(25,4) -> loc(14,2), loc(14,2) -> loc(9,12), loc(9,12) -> loc(6,19), loc(6,19) -> loc(25,4) ]
|
||||
next_step="loc(25,4)"
|
||||
guard_radius=3
|
||||
waypoints=[ loc(25,4) -> loc(14,2), loc(14,2) -> loc(9,12), loc(9,12) -> loc(6,19), loc(6,19) -> loc(25,4) ]
|
||||
next_step="loc(25,4)"
|
||||
[/vars]
|
||||
[/ai]
|
||||
[/unit]
|
||||
|
||||
# [unit]
|
||||
# type=Direwolf Rider
|
||||
# id=Gragul
|
||||
# name=_ "Gragul"
|
||||
# side=7
|
||||
# x,y=16,29
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(16,29) -> loc(21,19), loc(21,19) -> loc(27,17), loc(27,17) -> loc(23,6), loc(23,6) -> loc(16,29) ]
|
||||
# next_step="loc(16,29)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
# [unit]
|
||||
# type=Direwolf Rider
|
||||
# id=Gragul
|
||||
# name=_ "Gragul"
|
||||
# side=7
|
||||
# x,y=16,29
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(16,29) -> loc(21,19), loc(21,19) -> loc(27,17), loc(27,17) -> loc(23,6), loc(23,6) -> loc(16,29) ]
|
||||
# next_step="loc(16,29)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
|
||||
[unit]
|
||||
type=Goblin Pillager
|
||||
@ -90,28 +90,28 @@ Enemy units cannot see this unit, except for wolf-based units who can smell it i
|
||||
[ai]
|
||||
loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
[vars]
|
||||
guard_radius=3
|
||||
waypoints=[ loc(10,20) -> loc(18,24), loc(18,24) -> loc(21,19), loc(21,19) -> loc(18,11), loc(18,11) -> loc(10,20) ]
|
||||
next_step="loc(10,20)"
|
||||
guard_radius=3
|
||||
waypoints=[ loc(10,20) -> loc(18,24), loc(18,24) -> loc(21,19), loc(21,19) -> loc(18,11), loc(18,11) -> loc(10,20) ]
|
||||
next_step="loc(10,20)"
|
||||
[/vars]
|
||||
[/ai]
|
||||
[/unit]
|
||||
|
||||
# [unit]
|
||||
# type=Goblin Knight
|
||||
# id=Muhtr
|
||||
# name=_ "Muhtr"
|
||||
# side=7
|
||||
# x,y=13,25
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(13,25) -> loc(12,22), loc(12,22) -> loc(6,27), loc(6,27) -> loc(4,20), loc(4,20) -> loc(9,13), loc(9,13) -> loc(19,19), loc(19,19) -> loc(17,25), loc(17,25) -> loc(13,25)]
|
||||
# next_step="loc(13,25)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
# [unit]
|
||||
# type=Goblin Knight
|
||||
# id=Muhtr
|
||||
# name=_ "Muhtr"
|
||||
# side=7
|
||||
# x,y=13,25
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(13,25) -> loc(12,22), loc(12,22) -> loc(6,27), loc(6,27) -> loc(4,20), loc(4,20) -> loc(9,13), loc(9,13) -> loc(19,19), loc(19,19) -> loc(17,25), loc(17,25) -> loc(13,25)]
|
||||
# next_step="loc(13,25)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
[unit]
|
||||
type=Goblin Pillager
|
||||
id=Kartrog
|
||||
@ -121,27 +121,27 @@ Enemy units cannot see this unit, except for wolf-based units who can smell it i
|
||||
[ai]
|
||||
loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
[vars]
|
||||
guard_radius=3
|
||||
waypoints=[ loc(22,27) -> loc(27,24), loc(27,24) -> loc(21,16),loc(21,16) -> loc(22,27), loc(22,27) -> loc(6,24), loc(6,24)-> loc(22,27)]
|
||||
next_step="loc(22,27)"
|
||||
guard_radius=3
|
||||
waypoints=[ loc(22,27) -> loc(27,24), loc(27,24) -> loc(21,16),loc(21,16) -> loc(22,27), loc(22,27) -> loc(6,24), loc(6,24)-> loc(22,27)]
|
||||
next_step="loc(22,27)"
|
||||
[/vars]
|
||||
[/ai]
|
||||
[/unit]
|
||||
# [unit]
|
||||
# type=Wolf Rider
|
||||
# id=Griul
|
||||
# name=_ "Griul"
|
||||
# side=7
|
||||
# x,y=12,29
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(12,29) -> loc(16,15), loc(16,15) -> loc(25,4), loc(25,4) -> loc(12,29) ]
|
||||
# next_step="loc(12,29)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
# [unit]
|
||||
# type=Wolf Rider
|
||||
# id=Griul
|
||||
# name=_ "Griul"
|
||||
# side=7
|
||||
# x,y=12,29
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(12,29) -> loc(16,15), loc(16,15) -> loc(25,4), loc(25,4) -> loc(12,29) ]
|
||||
# next_step="loc(12,29)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
[unit]
|
||||
type=Goblin Knight
|
||||
id=Sdrul
|
||||
@ -151,28 +151,28 @@ Enemy units cannot see this unit, except for wolf-based units who can smell it i
|
||||
[ai]
|
||||
loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
[vars]
|
||||
guard_radius=3
|
||||
waypoints=[ loc(13,19) -> loc(16,15), loc(16,15) -> loc(25,4), loc(25,4) -> loc(13,19) ]
|
||||
next_step="loc(13,19)"
|
||||
guard_radius=3
|
||||
waypoints=[ loc(13,19) -> loc(16,15), loc(16,15) -> loc(25,4), loc(25,4) -> loc(13,19) ]
|
||||
next_step="loc(13,19)"
|
||||
[/vars]
|
||||
[/ai]
|
||||
[/unit]
|
||||
|
||||
# [unit]
|
||||
# type=Wolf Rider
|
||||
# id=Etruw
|
||||
# name=_ "Etruw"
|
||||
# side=7
|
||||
# x,y=31,15
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(31,15) -> loc(16,15), loc(16,15) -> loc(31,15) ]
|
||||
# next_step="loc(31,15)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
# [unit]
|
||||
# type=Wolf Rider
|
||||
# id=Etruw
|
||||
# name=_ "Etruw"
|
||||
# side=7
|
||||
# x,y=31,15
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(31,15) -> loc(16,15), loc(16,15) -> loc(31,15) ]
|
||||
# next_step="loc(31,15)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
|
||||
[unit]
|
||||
type=Direwolf Rider
|
||||
@ -183,28 +183,28 @@ Enemy units cannot see this unit, except for wolf-based units who can smell it i
|
||||
[ai]
|
||||
loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
[vars]
|
||||
guard_radius=3
|
||||
waypoints=[ loc(29,24) -> loc(16,15), loc(16,15) -> loc(29,24) ]
|
||||
next_step="loc(29,24)"
|
||||
guard_radius=3
|
||||
waypoints=[ loc(29,24) -> loc(16,15), loc(16,15) -> loc(29,24) ]
|
||||
next_step="loc(29,24)"
|
||||
[/vars]
|
||||
[/ai]
|
||||
[/unit]
|
||||
|
||||
# [unit]
|
||||
# type=Goblin Pillager
|
||||
# id=Bihlas
|
||||
# name=_ "Bihlas"
|
||||
# side=7
|
||||
# x,y=5,21
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(5,21) -> loc(16,15), loc(16,15) -> loc(5,21) ]
|
||||
# next_step="loc(5,21)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
# [unit]
|
||||
# type=Goblin Pillager
|
||||
# id=Bihlas
|
||||
# name=_ "Bihlas"
|
||||
# side=7
|
||||
# x,y=5,21
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(5,21) -> loc(16,15), loc(16,15) -> loc(5,21) ]
|
||||
# next_step="loc(5,21)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
|
||||
[unit]
|
||||
type=Goblin Knight
|
||||
@ -215,31 +215,30 @@ Enemy units cannot see this unit, except for wolf-based units who can smell it i
|
||||
[ai]
|
||||
loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
[vars]
|
||||
guard_radius=3
|
||||
waypoints=[ loc(25,4) -> loc(16,15), loc(16,15) -> loc(25,4) ]
|
||||
next_step="loc(17,8)"
|
||||
guard_radius=3
|
||||
waypoints=[ loc(25,4) -> loc(16,15), loc(16,15) -> loc(25,4) ]
|
||||
next_step="loc(17,8)"
|
||||
[/vars]
|
||||
[/ai]
|
||||
[/unit]
|
||||
|
||||
# [unit]
|
||||
# type=Direwolf Rider
|
||||
# id=Mrat
|
||||
# name=_ "Mrat"
|
||||
# side=7
|
||||
# x,y=14,15
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(14,15) -> loc(19,12), loc(19,12) -> loc(31,16), loc(31,16) -> loc(14,15) ]
|
||||
# next_step="loc(14,15)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
# [unit]
|
||||
# type=Direwolf Rider
|
||||
# id=Mrat
|
||||
# name=_ "Mrat"
|
||||
# side=7
|
||||
# x,y=14,15
|
||||
# [ai]
|
||||
# loop_formula="{campaigns/Legend_of_Wesmere/ai/patrol.fai}"
|
||||
# [vars]
|
||||
# guard_radius=3
|
||||
# waypoints=[ loc(14,15) -> loc(19,12), loc(19,12) -> loc(31,16), loc(31,16) -> loc(14,15) ]
|
||||
# next_step="loc(14,15)"
|
||||
# [/vars]
|
||||
# [/ai]
|
||||
# [/unit]
|
||||
|
||||
|
||||
#### end of wolves ####
|
||||
#### end of wolves ####
|
||||
|
||||
[unit]
|
||||
type=Orcish Grunt
|
||||
|
@ -238,7 +238,6 @@
|
||||
[/message]
|
||||
|
||||
{AI_CONTROLLER_ALLOW_LEADER_CONTROL 1 2}
|
||||
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
|
@ -102,7 +102,7 @@
|
||||
variable=faeries[$faery]
|
||||
x,y=recall
|
||||
[/unstore_unit]
|
||||
{NEXT faery}
|
||||
{NEXT faery}
|
||||
{CLEAR_VARIABLE faeries}
|
||||
[/event]
|
||||
|
||||
@ -160,7 +160,7 @@
|
||||
[ai]
|
||||
recruitment_ignore_bad_movement=yes
|
||||
#ifdef EASY
|
||||
recruitment_pattern=scout, healer, scout
|
||||
recruitment_pattern=scout, healer, scout
|
||||
#else
|
||||
recruitment_pattern=scout, healer, scout, archer
|
||||
#endif
|
||||
@ -219,7 +219,7 @@
|
||||
[/unstore_unit]
|
||||
[/else]
|
||||
[/if]
|
||||
{NEXT unit}
|
||||
{NEXT unit}
|
||||
{CLEAR_VARIABLE unit}
|
||||
{CLEAR_VARIABLE steal_wearer}
|
||||
[/event]
|
||||
@ -274,7 +274,7 @@
|
||||
[/message]
|
||||
[message]
|
||||
id=Landar
|
||||
message= _ "Destroy them, root and branch. Burn out their homes. Let none remain alive!"
|
||||
message= _ "Destroy them, root and branch. Burn out their homes. Let none remain alive!"
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
@ -285,7 +285,7 @@
|
||||
[/event]
|
||||
|
||||
#TODO update this comment
|
||||
# every time one of the saurian gets killed this event checks if it
|
||||
# every time one of the saurian gets killed this event checks if it
|
||||
# was the last one and if there are any villages left.
|
||||
#define VICTORY_CONDITIONAL
|
||||
[if]
|
||||
@ -295,7 +295,7 @@
|
||||
[or]
|
||||
side=3
|
||||
[/or]
|
||||
[/have_unit]
|
||||
[/have_unit]
|
||||
[/not]
|
||||
[not]
|
||||
[have_location]
|
||||
@ -308,7 +308,7 @@
|
||||
bonus=no
|
||||
save=no
|
||||
carryover_percentage=0
|
||||
[/endlevel]
|
||||
[/endlevel]
|
||||
[/then]
|
||||
[/if]
|
||||
#enddef
|
||||
@ -342,7 +342,7 @@
|
||||
message= _ "Do not spare them. They will only foul our forests anew when they get their growth."
|
||||
[/message]
|
||||
[message]
|
||||
#TODO The nearest saurian
|
||||
#TODO The nearest saurian
|
||||
#formula=TODO get it from crap
|
||||
side=2,3
|
||||
[not]
|
||||
|
@ -107,13 +107,12 @@
|
||||
variable=kalenz_loyals[$loyal_one]
|
||||
x,y=recall,recall
|
||||
[/unstore_unit]
|
||||
|
||||
{NEXT loyal_one}
|
||||
{NEXT loyal_one}
|
||||
{CLEAR_VARIABLE loyal_one}
|
||||
{CLEAR_VARIABLE kalenz_loyals}
|
||||
[/event]
|
||||
|
||||
#### Betrayer's code ####
|
||||
#### Betrayer's code ####
|
||||
|
||||
[event]
|
||||
name=prestart
|
||||
@ -128,7 +127,7 @@
|
||||
canrecruit=yes
|
||||
role=betrayer
|
||||
[/role]
|
||||
|
||||
|
||||
{STORE_UNIT_VAR (role=betrayer) name betrayer}
|
||||
[/event]
|
||||
|
||||
@ -139,15 +138,15 @@
|
||||
[/message]
|
||||
[message]
|
||||
id=Cleodil
|
||||
message= _ "You turn on us? I cannot believe it! How has elf come to strive against elf so bitterly?"
|
||||
message= _ "You turn on us? I cannot believe it! How has elf come to strive against elf so bitterly?"
|
||||
[/message]
|
||||
[message]
|
||||
id=Kalenz
|
||||
message= _ "Evil takes many forms, my love. Today we see another of its faces...and must defeat it again. Prepare to die, $betrayer|!"
|
||||
message= _ "Evil takes many forms, my love. Today we see another of its faces...and must defeat it again. Prepare to die, $betrayer|!"
|
||||
[/message]
|
||||
[message]
|
||||
role=betrayer
|
||||
message= _ "Only Landar has the will to do what must be done to save the Elves!"
|
||||
message= _ "Only Landar has the will to do what must be done to save the Elves!"
|
||||
[/message]
|
||||
|
||||
[modify_side]
|
||||
@ -193,7 +192,6 @@
|
||||
[/message]
|
||||
|
||||
{BETRAY_SPEECH}
|
||||
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
@ -203,7 +201,7 @@
|
||||
[or]
|
||||
side=5
|
||||
[/or]
|
||||
# team=assassins
|
||||
# team=assassins
|
||||
[/filter]
|
||||
[filter_second]
|
||||
side=$betraying_side
|
||||
@ -212,20 +210,18 @@
|
||||
[message]
|
||||
side=$unit.side
|
||||
canrecruit=yes
|
||||
message= _ "Hold your hand, $unit.name|! $second_unit.name| is on our side!"
|
||||
message= _ "Hold your hand, $unit.name|! $second_unit.name| is on our side!"
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
role=betrayer
|
||||
message= _ "I will not stand by as Kalenz betrays us to the Humans and Dwarves. We follow Landar now!"
|
||||
[/message]
|
||||
|
||||
{BETRAY_SPEECH}
|
||||
|
||||
{BETRAY_SPEECH}
|
||||
[/event]
|
||||
|
||||
#### /Betrayer's code ####
|
||||
|
||||
#### /Betrayer's code ####
|
||||
|
||||
[side]
|
||||
side=2
|
||||
@ -254,7 +250,7 @@
|
||||
#else
|
||||
recruitment_pattern=archer,fighter,mixed fighter
|
||||
#endif
|
||||
# {HIGH_PRIORITY_TARGETS}
|
||||
# {HIGH_PRIORITY_TARGETS}
|
||||
[/ai]
|
||||
[/side]
|
||||
|
||||
@ -281,7 +277,7 @@
|
||||
#endif
|
||||
{GOLD 200 320 350}
|
||||
[ai]
|
||||
# {HIGH_PRIORITY_TARGETS}
|
||||
# {HIGH_PRIORITY_TARGETS}
|
||||
recruitment_ignore_bad_movement=yes
|
||||
#ifndef HARD
|
||||
recruitment_pattern=archer,fighter
|
||||
@ -329,9 +325,6 @@
|
||||
[/ai]
|
||||
[/side]
|
||||
|
||||
|
||||
|
||||
|
||||
[side]
|
||||
side=5
|
||||
team_name=assassins
|
||||
@ -367,8 +360,6 @@
|
||||
[/side]
|
||||
#undef HIGH_PRIORITY_TARGETS
|
||||
|
||||
|
||||
|
||||
[event]
|
||||
name=prestart
|
||||
[objectives]
|
||||
|
@ -68,7 +68,7 @@
|
||||
variable=steal_wearer[$unit]
|
||||
x,y=recall,recall
|
||||
[/unstore_unit]
|
||||
{NEXT unit}
|
||||
{NEXT unit}
|
||||
{CLEAR_VARIABLE unit}
|
||||
{CLEAR_VARIABLE steal_wearer}
|
||||
[/event]
|
||||
@ -76,17 +76,17 @@
|
||||
# wmllint: recognize Uradredia
|
||||
[event]
|
||||
name=victory
|
||||
{MODIFY_UNIT (side=2
|
||||
[not]
|
||||
id=Uradredia
|
||||
[/not]) side 1}
|
||||
{MODIFY_UNIT (side=2
|
||||
[not]
|
||||
id=Uradredia
|
||||
[/not]) side 1}
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=start
|
||||
[message]
|
||||
speaker=narrator
|
||||
message= _ "Kalenz can only recall shamans and their advancements from his former army; the rest of his men joined Uradredia before he arrived."
|
||||
message= _ "Kalenz can only recall shamans and their advancements from his former army; the rest of his men joined Uradredia before he arrived."
|
||||
image=wesnoth-icon.png
|
||||
[/message]
|
||||
[/event]
|
||||
|
@ -76,9 +76,9 @@
|
||||
[/side]
|
||||
#wmllint: validate-on
|
||||
|
||||
#### /Side setup ####
|
||||
#### /Side setup ####
|
||||
|
||||
#### Scenario Objectives ####
|
||||
#### Scenario Objectives ####
|
||||
[event]
|
||||
name=prestart
|
||||
|
||||
@ -116,11 +116,11 @@
|
||||
[/message]
|
||||
[/event]
|
||||
|
||||
#TODO add speech for Landar and Kalenz
|
||||
#TODO add speech for Landar and Kalenz
|
||||
[event]
|
||||
name=last breath
|
||||
# Second_unit (on kalenz's side) kills unit (on landar's side);
|
||||
# both came from the player's recall list and so have fought
|
||||
# Second_unit (on kalenz's side) kills unit (on landar's side);
|
||||
# both came from the player's recall list and so have fought
|
||||
# side by side.
|
||||
[filter]
|
||||
role=landar_loyal
|
||||
@ -140,7 +140,7 @@
|
||||
|
||||
[event]
|
||||
name=last breath
|
||||
# Same as above but with roles exchanged. One of Landar's men
|
||||
# Same as above but with roles exchanged. One of Landar's men
|
||||
# kills his former comrade.
|
||||
[filter]
|
||||
role=kalenz_loyal
|
||||
|
@ -36,7 +36,7 @@
|
||||
unrenamable=yes
|
||||
profile="portraits/landar.png"
|
||||
type=Elvish Archer
|
||||
# side=1
|
||||
# side=1
|
||||
{IS_HERO}
|
||||
[modifications]
|
||||
{TRAIT_DEXTROUS}
|
||||
@ -88,7 +88,7 @@
|
||||
{TRAIT_RESILIENT}
|
||||
[/modifications]
|
||||
side=2
|
||||
# colour=green
|
||||
# colour=green
|
||||
controller=ai
|
||||
canrecruit=yes
|
||||
recruit={ELVES}
|
||||
|
@ -66,7 +66,7 @@
|
||||
id=Cleodil
|
||||
[/filter]
|
||||
[message]
|
||||
# There's an argument that Cleodil shouldn't reger to Kalenz as
|
||||
# There's an argument that Cleodil shouldn't reger to Kalenz as
|
||||
# "beloved", in the early scenarios, but I (ESR) think it is
|
||||
# poignant and appropriate that she reveal her feelings
|
||||
# as she dies.
|
||||
|
@ -1,12 +1,12 @@
|
||||
#textdomain wesnoth-low
|
||||
|
||||
#define TEAM_COLOR COLOR
|
||||
[object]
|
||||
[effect]
|
||||
apply_to=image_mod
|
||||
add=RC(magenta>{COLOR})
|
||||
[/effect]
|
||||
[/object]
|
||||
[object]
|
||||
[effect]
|
||||
apply_to=image_mod
|
||||
add=RC(magenta>{COLOR})
|
||||
[/effect]
|
||||
[/object]
|
||||
#enddef
|
||||
|
||||
#define TEAM_COLOR_CRITICAL
|
||||
@ -17,7 +17,6 @@
|
||||
{TEAM_COLOR lightred}
|
||||
#enddef
|
||||
|
||||
|
||||
#define LOW_MAP NAME
|
||||
map_data="{campaigns/Legend_of_Wesmere/maps/{NAME}}"
|
||||
#enddef
|
||||
@ -347,8 +346,6 @@ Orcish Archer, Orcish Assassin, Orcish Grunt, Wolf Rider, Goblin Spearman#enddef
|
||||
[/event]
|
||||
#enddef
|
||||
|
||||
|
||||
|
||||
#define STARTING_VILLAGES_HUMAN SIDE
|
||||
[event]
|
||||
name=prestart
|
||||
|
@ -12,7 +12,7 @@
|
||||
y={Y}
|
||||
full_range=1
|
||||
fade_range=4
|
||||
[/sound_source]
|
||||
[/sound_source]
|
||||
[/event]
|
||||
#enddef
|
||||
|
||||
@ -30,7 +30,7 @@
|
||||
y={Y}
|
||||
full_range=3
|
||||
fade_range=5
|
||||
[/sound_source]
|
||||
[/sound_source]
|
||||
[/event]
|
||||
#enddef
|
||||
|
||||
@ -48,11 +48,10 @@
|
||||
y={Y}
|
||||
full_range=2
|
||||
fade_range=4
|
||||
[/sound_source]
|
||||
[/sound_source]
|
||||
[/event]
|
||||
#enddef
|
||||
|
||||
|
||||
#define BIRD_SOUND X Y
|
||||
[event]
|
||||
name=new turn
|
||||
@ -86,7 +85,7 @@
|
||||
y={Y}
|
||||
full_range=5
|
||||
fade_range=7
|
||||
[/sound_source]
|
||||
[/sound_source]
|
||||
[/then]
|
||||
[else]
|
||||
[remove_sound_source]
|
||||
@ -97,4 +96,3 @@
|
||||
{CLEAR_VARIABLE time_of_day}
|
||||
[/event]
|
||||
#enddef
|
||||
|
||||
|
@ -1690,7 +1690,7 @@
|
||||
number=4
|
||||
icon=attacks/lightning.png
|
||||
[/effect]
|
||||
# The cool animation mentioned above, a copypasted
|
||||
# The cool animation mentioned above, a copypasted
|
||||
# fragment from Delfador's attack
|
||||
[effect]
|
||||
apply_to=new_animation
|
||||
@ -1722,7 +1722,7 @@
|
||||
apply_to=movement
|
||||
increase=2
|
||||
[/effect]
|
||||
# If the unit has melee attacks, increase the damage of
|
||||
# If the unit has melee attacks, increase the damage of
|
||||
# all of them by two
|
||||
[effect]
|
||||
apply_to=attack
|
||||
@ -1735,7 +1735,7 @@
|
||||
increase_total=10
|
||||
heal_full=yes
|
||||
[/effect]
|
||||
# Reduce the amount of experience required for next level
|
||||
# Reduce the amount of experience required for next level
|
||||
# by 20%
|
||||
[effect]
|
||||
apply_to=max_experience
|
||||
|
@ -58,7 +58,7 @@
|
||||
background=portraits/Tallin.png
|
||||
[/part]
|
||||
[part]
|
||||
#po: "coil" meant, in Middle and Early Modern English, a difficulty
|
||||
#po: "coil" meant, in Middle and Early Modern English, a difficulty
|
||||
#po: or problem.
|
||||
story= _ "That will be very difficult. We did that last time and they will no doubt be alert to that threat now. Anyway, it would be but temporary solution. Soon another strong leader would emerge and we'd find oursel' back in the same coil."
|
||||
background=portraits/Hamel.png
|
||||
|
@ -1,6 +1,6 @@
|
||||
#textdomain wesnoth-nr
|
||||
[scenario]
|
||||
# Set up basic scenario data, music, turns and default timeschedule.
|
||||
# Set up basic scenario data, music, turns and default timeschedule.
|
||||
# Killing enemy AI is not enough, player needs to reach Eryssa in time.
|
||||
id=elvish_princess
|
||||
name= _ "Elvish Princess"
|
||||
@ -37,13 +37,13 @@
|
||||
[part]
|
||||
story= _ "The leaders met in council, considering what to do..."
|
||||
[/part]
|
||||
|
||||
|
||||
{STORY_PART_TALLIN (_ "This kidnapped princess explains a great deal. It is not easy to draw the elves out of their forests.")}
|
||||
|
||||
{STORY_PART_HAMEL (_ "Aye, lad. Her kin will have come either to do battle or pay ransom. By the looks of things, they've busked themselves for either.")}
|
||||
# wmllint: local spelling Pahhh
|
||||
{STORY_PART_ARTHIAN (_ "Pahhh, who cares. Let the elves and orcs chop each other into mincemeat. It will just make things easier for us.")}
|
||||
|
||||
|
||||
{STORY_PART_STALRAG (_ "Hah! I ken yer brain has rotted awa' entire. Think on it, skull-head, what would happen if the elves dinna' fight and pay the ransom instead?")}
|
||||
|
||||
{STORY_PART_ARTHIAN (_ "Do you want to die, dwarf?")}
|
||||
|
@ -32,7 +32,7 @@
|
||||
side=2
|
||||
[/side]
|
||||
|
||||
# Prestart event, place decoration, bad guys
|
||||
# Prestart event, place decoration, bad guys
|
||||
[event]
|
||||
name=prestart
|
||||
{SCATTER_IMAGE (terrain=Uu) 4 scenery/rubble.png}
|
||||
|
@ -388,7 +388,7 @@
|
||||
[/message]
|
||||
|
||||
[objectives]
|
||||
#side=0 sets the objectives for all sides.
|
||||
#side=0 sets the objectives for all sides.
|
||||
side=0
|
||||
[objective]
|
||||
description= _ "Defeat the enemy leaders"
|
||||
@ -442,7 +442,7 @@
|
||||
|
||||
[message]
|
||||
id=Tallin
|
||||
message= _ "We have torn the heart from their eastern defenses."
|
||||
message= _ "We have torn the heart from their eastern defenses."
|
||||
[/message]
|
||||
|
||||
[if]
|
||||
|
@ -513,7 +513,7 @@
|
||||
{MODIFY_UNIT id=Sisal canrecruit no}
|
||||
[/then]
|
||||
[/if]
|
||||
# Make veteran elves available for
|
||||
# Make veteran elves available for
|
||||
# the Elf side in Showdown.
|
||||
{MODIFY_UNIT (side=2) side 9}
|
||||
# Sisal and Eryssa need to be recallable.
|
||||
|
@ -628,7 +628,7 @@
|
||||
[event]
|
||||
name=start
|
||||
|
||||
# If Sisal is alive it means gold was recovered, give it back to
|
||||
# If Sisal is alive it means gold was recovered, give it back to
|
||||
# three player sided split evenly
|
||||
[recall]
|
||||
id=Sisal
|
||||
|
@ -67,23 +67,22 @@
|
||||
{QUANTITY4 income {EASY_AMOUNT} {NORMAL_AMOUNT} {HARD_AMOUNT} {NIGHTMARE_AMOUNT}}
|
||||
#enddef
|
||||
|
||||
|
||||
#define STORY_PART_HAMEL SPEECH
|
||||
{STORY_PART_SPEECH portraits/Hamel.png (_ "Hamel") {SPEECH} }
|
||||
{STORY_PART_SPEECH portraits/Hamel.png (_ "Hamel") {SPEECH} }
|
||||
#enddef
|
||||
|
||||
#define STORY_PART_TALLIN SPEECH
|
||||
{STORY_PART_SPEECH portraits/Tallin.png (_ "Tallin") {SPEECH} }
|
||||
{STORY_PART_SPEECH portraits/Tallin.png (_ "Tallin") {SPEECH} }
|
||||
#enddef
|
||||
|
||||
#define STORY_PART_ARTHIAN SPEECH
|
||||
{STORY_PART_SPEECH portraits/Arthian.png (_ "Arthian") {SPEECH} }
|
||||
{STORY_PART_SPEECH portraits/Arthian.png (_ "Arthian") {SPEECH} }
|
||||
#enddef
|
||||
|
||||
#define STORY_PART_FATHER_MORVIN SPEECH
|
||||
{STORY_PART_SPEECH portraits/Father_Morvin.png (_ "Father Morvin") {SPEECH} }
|
||||
{STORY_PART_SPEECH portraits/Father_Morvin.png (_ "Father Morvin") {SPEECH} }
|
||||
#enddef
|
||||
|
||||
#define STORY_PART_STALRAG SPEECH
|
||||
{STORY_PART_SPEECH portraits/Stalrag.png (_ "Stalrag") {SPEECH} }
|
||||
{STORY_PART_SPEECH portraits/Stalrag.png (_ "Stalrag") {SPEECH} }
|
||||
#enddef
|
||||
|
@ -301,7 +301,7 @@
|
||||
[/unit]
|
||||
[message]
|
||||
speaker=Krawg
|
||||
#po: Krawg's speech is purposely very distorted -- he has the
|
||||
#po: Krawg's speech is purposely very distorted -- he has the
|
||||
#po: vocal tract of a bird and is speaking through a beak.
|
||||
#po: "Will you speak with us?"
|
||||
message= _ "Kwill yooo spakkk wit uuus?!?" # wmllint: no spellcheck
|
||||
|
@ -292,7 +292,7 @@
|
||||
#po: "(excited bird cry) Look! Forge here!"
|
||||
message= _ "Raaaawww! Loook! Forge heeeere!" # wmllint: no spellcheck
|
||||
[/message]
|
||||
|
||||
|
||||
[message]
|
||||
speaker=Thursagan
|
||||
message= _ "It looks like a forge, heated by the lava. It looks magic, and it looks hot enough to make the Sceptre."
|
||||
|
@ -88,7 +88,7 @@
|
||||
controller=human
|
||||
[/side]
|
||||
|
||||
# Pre-declare some castle spans where allies will appear so
|
||||
# Pre-declare some castle spans where allies will appear so
|
||||
# we can make AIs avoid them. Otherwise they may be blocked
|
||||
# from appearing by stray units.
|
||||
#define CASTLE_OF_FLARTAR
|
||||
@ -782,7 +782,6 @@
|
||||
[/not]
|
||||
) side 1}
|
||||
|
||||
|
||||
{MODIFY_UNIT (id="Al'Brock") side 1}
|
||||
{MODIFY_UNIT (id="Al'Brock") canrecruit no}
|
||||
|
||||
|
@ -252,7 +252,7 @@
|
||||
|
||||
[message]
|
||||
speaker="Kapou'e"
|
||||
#po: "whupping" is not a typo for "whipping"; it ia a Southern
|
||||
#po: "whupping" is not a typo for "whipping"; it ia a Southern
|
||||
#po: American dialect word meaning "a severe beating".
|
||||
# wmllint: local spelling whupping
|
||||
message= _ "It's been a chilly winter. How about we warm ourselves up a bit by giving these traitors a good whupping, boys?"
|
||||
|
@ -209,7 +209,6 @@
|
||||
x,y=33,10
|
||||
[/recall]
|
||||
|
||||
|
||||
{MODIFY_UNIT (id="Flar'Tar") side 3}
|
||||
{MODIFY_UNIT (id="Flar'Tar") canrecruit yes}
|
||||
|
||||
|
@ -130,7 +130,7 @@
|
||||
[/if]
|
||||
[/event]
|
||||
|
||||
#define GENERALS_MUST_SURVIVE
|
||||
#define GENERALS_MUST_SURVIVE
|
||||
# It is only critical that the allied generals survive until the
|
||||
# last scenario. They can die during the last scenario without a
|
||||
# coninuity problem.
|
||||
|
@ -253,7 +253,7 @@
|
||||
[/message]
|
||||
[/event]
|
||||
|
||||
# Dulcatulos gets a castle of reinforcements about the
|
||||
# Dulcatulos gets a castle of reinforcements about the
|
||||
# time the orcs will have killed off his first wave.
|
||||
[event]
|
||||
name=turn 7
|
||||
|
@ -288,7 +288,7 @@
|
||||
message= _ "So, what is to become of me?"
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Prince Haldric
|
||||
speaker=Prince Haldric
|
||||
# wmllint: local spelling I..I
|
||||
message= _ "There are many Wesfolk amongst the remains of my people. We must stay united under one banner. I will need you by my side if there is any hope of building a true 'Kingdom of Wesnoth'. I..I think a Queen's crown would sit well upon that flame-colored hair of yours, Jessene."
|
||||
[/message]
|
||||
@ -308,7 +308,7 @@
|
||||
[message]
|
||||
speaker=narrator
|
||||
message= _ "It was never said afterwards that the marriage of Haldric and Jessene was exactly tranquil. But it was also said that neither could stand be long separated from the other, and she bore him strong children that mingled the blood of their diverse ancestries. Many followed their example, and the two refugee peoples from the Green Isles became fused into one in the new kingdom."
|
||||
image=wesnoth-icon.png
|
||||
image=wesnoth-icon.png
|
||||
[/message]
|
||||
[message]
|
||||
speaker=narrator
|
||||
|
@ -464,7 +464,6 @@
|
||||
[/story]
|
||||
#enddef
|
||||
|
||||
|
||||
#define QUEST_CONDITIONAL
|
||||
# Internal macro; simplifies all following ones
|
||||
[if]
|
||||
|
@ -993,8 +993,8 @@
|
||||
name=rogrimir
|
||||
[/fire_event]
|
||||
[/then]
|
||||
[else]
|
||||
[allow_undo]
|
||||
[else]
|
||||
[allow_undo]
|
||||
[/allow_undo]
|
||||
[/else]
|
||||
[/if]
|
||||
|
@ -602,7 +602,7 @@
|
||||
message= _ "You can choose which unit you want to take the flaming sword. If you want another unit to wield the sword, Kaleh can recruit or recall other units."
|
||||
image=wesnoth-icon.png
|
||||
[/message]
|
||||
|
||||
|
||||
# here we store the player's actual gold and set it to 100 instead,
|
||||
# since otherwise they might be unable to recruit or recall due to
|
||||
# lack of gold
|
||||
@ -610,7 +610,7 @@
|
||||
side=1
|
||||
variable=stored_side_1
|
||||
[/store_side]
|
||||
|
||||
|
||||
[modify_side]
|
||||
side=1
|
||||
gold=100
|
||||
@ -697,15 +697,15 @@
|
||||
speaker=Nym
|
||||
message= _ "This is a marvelous city, but I for one can't wait to feel the sun upon my face again and the wind in my hair."
|
||||
[/message]
|
||||
|
||||
|
||||
# let's give the player their actual starting gold back
|
||||
[modify_side]
|
||||
side=1
|
||||
gold=$stored_side_1.gold
|
||||
[/modify_side]
|
||||
|
||||
|
||||
{CLEAR_VARIABLE stored_side_1}
|
||||
|
||||
|
||||
[endlevel]
|
||||
result=victory
|
||||
carryover_report=no
|
||||
@ -716,7 +716,7 @@
|
||||
|
||||
[option]
|
||||
message= _ "No, I think someone else should wield it."
|
||||
|
||||
|
||||
[command]
|
||||
[allow_undo]
|
||||
[/allow_undo]
|
||||
|
@ -225,7 +225,7 @@
|
||||
id=Groo
|
||||
x,y=13,13
|
||||
[/recall]
|
||||
|
||||
|
||||
{MODIFY_UNIT (
|
||||
id="Thu'lok"
|
||||
[or]
|
||||
@ -601,7 +601,7 @@
|
||||
message= _ "You can choose which unit you want to take the flaming sword. If you want another unit to wield the sword, Kaleh can recruit or recall other units."
|
||||
image=wesnoth-icon.png
|
||||
[/message]
|
||||
|
||||
|
||||
# here we store the player's actual gold and set it to 100 instead,
|
||||
# since otherwise they might be unable to recruit or recall due to
|
||||
# lack of gold
|
||||
@ -609,7 +609,7 @@
|
||||
side=1
|
||||
variable=stored_side_1
|
||||
[/store_side]
|
||||
|
||||
|
||||
[modify_side]
|
||||
side=1
|
||||
gold=100
|
||||
@ -693,7 +693,7 @@
|
||||
speaker=Nym
|
||||
message= _ "This is a marvelous city, but I for one can't wait to feel the sun upon my face again and the wind in my hair."
|
||||
[/message]
|
||||
|
||||
|
||||
# let's give the player their actual starting gold back
|
||||
[modify_side]
|
||||
side=1
|
||||
@ -710,7 +710,7 @@
|
||||
|
||||
[option]
|
||||
message= _ "No, I think someone else should wield it."
|
||||
|
||||
|
||||
[command]
|
||||
[allow_undo]
|
||||
[/allow_undo]
|
||||
|
@ -51,7 +51,7 @@
|
||||
#ifdef EASY
|
||||
recruit=Spearman, Pikeman, Swordsman, Javelineer, Cavalryman, Bowman, Longbowman
|
||||
#else
|
||||
recruit=Spearman, Pikeman, Swordsman, Javelineer, Cavalryman, Bowman, Longbowman, Dragoon
|
||||
recruit=Spearman, Pikeman, Swordsman, Javelineer, Cavalryman, Bowman, Longbowman, Dragoon
|
||||
#endif
|
||||
[ai]
|
||||
recruitment_pattern=scout,fighter,archer
|
||||
@ -3651,7 +3651,7 @@
|
||||
animate,fire_event=no,no
|
||||
[/kill]
|
||||
|
||||
#TODO find a better place for the macro
|
||||
#TODO find a better place for the macro
|
||||
#define KALEH_TELEPORT X Y
|
||||
|
||||
# search adjacent hexs for one that is not cave wall or chasm or water
|
||||
@ -3694,7 +3694,6 @@
|
||||
|
||||
#enddef
|
||||
|
||||
|
||||
[event]
|
||||
name=moveto
|
||||
|
||||
@ -4124,7 +4123,6 @@
|
||||
|
||||
{REMOVE_UNIT_OVERLAY id=$ally_name misc/hero-icon.png}
|
||||
[/event]
|
||||
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
@ -4262,7 +4260,6 @@
|
||||
# the first time any unit moves into target area, I am sure there will
|
||||
# be an empty spot adjacent to the unit.
|
||||
|
||||
|
||||
# Event 14.5 Player discovers human's chest of gold at cave mouth
|
||||
|
||||
[event]
|
||||
@ -4540,9 +4537,9 @@
|
||||
#eloh appears
|
||||
|
||||
{NAMED_UNIT 2 (Divine Avatar) 30 22 (Eloh) ( _ "Eloh") (
|
||||
upkeep=free
|
||||
facing=sw
|
||||
profile=portraits/eloh.png
|
||||
upkeep=free
|
||||
facing=sw
|
||||
profile=portraits/eloh.png
|
||||
)}
|
||||
|
||||
[store_locations]
|
||||
@ -5763,7 +5760,7 @@
|
||||
terrain=Ai
|
||||
x,y=$water_x,$water_y
|
||||
[/terrain]
|
||||
{NEXT i}
|
||||
{NEXT i}
|
||||
|
||||
{CLEAR_VARIABLE shallowwater_loc}
|
||||
|
||||
@ -5815,8 +5812,8 @@
|
||||
terrain=Ww
|
||||
x,y=$water_x,$water_y
|
||||
[/terrain]
|
||||
{NEXT j}
|
||||
{NEXT i}
|
||||
{NEXT j}
|
||||
{NEXT i}
|
||||
|
||||
{CLEAR_VARIABLE ice_loc}
|
||||
|
||||
@ -5842,7 +5839,7 @@
|
||||
terrain=Wo
|
||||
x,y=$water_x,$water_y
|
||||
[/terrain]
|
||||
{NEXT i}
|
||||
{NEXT i}
|
||||
|
||||
# 4. kill any unit in deep water, destroy any items in deep water
|
||||
|
||||
@ -5945,7 +5942,7 @@
|
||||
[/set_variable]
|
||||
[/then]
|
||||
[/if]
|
||||
{NEXT i}
|
||||
{NEXT i}
|
||||
|
||||
{CLEAR_VARIABLE deepwater_loc}
|
||||
[/then]
|
||||
|
@ -981,7 +981,7 @@
|
||||
# change water terrain
|
||||
|
||||
# Note: to fit the map and storyline, it's tempting to replace these
|
||||
# river-ford (Wwf) tiles with coastal-reef (WWr) tiles. But there's a
|
||||
# river-ford (Wwf) tiles with coastal-reef (WWr) tiles. But there's a
|
||||
# problem; these terrains have different movement costs and the change
|
||||
# would slow the elves down not a good thing in thiss context. This
|
||||
# might be a job for a customized terrain type.
|
||||
@ -3265,7 +3265,6 @@
|
||||
[/if]
|
||||
[/event]
|
||||
|
||||
|
||||
# Event 9: Meeting and Death of Tanstafaal
|
||||
|
||||
[event]
|
||||
|
@ -42,10 +42,10 @@
|
||||
name=smashing frenzy
|
||||
[/filter_attack]
|
||||
start_time=-200
|
||||
[frame]
|
||||
duration=100
|
||||
image="units/monsters/flesh-golem-attack-1.png"
|
||||
[/frame]
|
||||
[frame]
|
||||
duration=100
|
||||
image="units/monsters/flesh-golem-attack-1.png"
|
||||
[/frame]
|
||||
[if]
|
||||
hits=yes
|
||||
[frame]
|
||||
@ -62,9 +62,9 @@
|
||||
image="units/monsters/flesh-golem-attack-2.png"
|
||||
[/frame]
|
||||
[/else]
|
||||
[frame]
|
||||
duration=100
|
||||
image="units/monsters/flesh-golem-attack-3.png"
|
||||
[/frame]
|
||||
[frame]
|
||||
duration=100
|
||||
image="units/monsters/flesh-golem-attack-3.png"
|
||||
[/frame]
|
||||
[/attack_anim]
|
||||
[/unit_type]
|
||||
|
@ -345,8 +345,8 @@ Enemy units cannot see this unit while it is in desert dunes, desert mountains,
|
||||
[/filter_self]
|
||||
[/hides]
|
||||
[/abilities]
|
||||
[/effect]
|
||||
) {VARIATION}}
|
||||
[/effect]
|
||||
) {VARIATION}}
|
||||
#enddef
|
||||
|
||||
#define KALEH
|
||||
|
@ -38,7 +38,7 @@
|
||||
#define CONTINUE_MSG
|
||||
_ "
|
||||
<big>Click a mouse button or press spacebar to continue...</big>"
|
||||
# Note: we would not like the user to "press any key" (for example, Esc)
|
||||
# Note: we would not like the user to "press any key" (for example, Esc)
|
||||
#enddef
|
||||
|
||||
[tutorial]
|
||||
|
@ -1356,7 +1356,7 @@ When 'n' no longer selects a new unit, you can end your turn.")}
|
||||
[else]
|
||||
{TEACHER (_"We will miss $deadguy.name| because she had $deadguy.experience experience points, meaning she would have advanced to level 2 soon.")}
|
||||
[/else]
|
||||
[/if]
|
||||
[/if]
|
||||
[/then]
|
||||
[else]
|
||||
[if]
|
||||
|
@ -13,5 +13,5 @@
|
||||
{core/editor/}
|
||||
|
||||
[lua]
|
||||
code=<< wesnoth.dofile("lua/wml-tags.lua") >>
|
||||
code=<< wesnoth.dofile("lua/wml-tags.lua") >>
|
||||
[/lua]
|
||||
|
@ -83,9 +83,9 @@
|
||||
ircuser = "BlindOracle"
|
||||
[/entry]
|
||||
[entry]
|
||||
name = "Gregory Shikhman (corn)"
|
||||
comment = "coding; upload log maintenance/improvements"
|
||||
email = "cornmander_AT_cornmander.com"
|
||||
name = "Gregory Shikhman (corn)"
|
||||
comment = "coding; upload log maintenance/improvements"
|
||||
email = "cornmander_AT_cornmander.com"
|
||||
[/entry]
|
||||
[entry]
|
||||
name = "Guillaume Melquiond (silene)"
|
||||
@ -196,7 +196,7 @@
|
||||
[/entry]
|
||||
[entry]
|
||||
name = "Yurii Chernyi (Crab)"
|
||||
comment = "AI"
|
||||
comment = "AI"
|
||||
email = "terraninfo_AT_terraninfo.net"
|
||||
[/entry]
|
||||
[entry]
|
||||
@ -844,9 +844,9 @@
|
||||
name = "J.R. Blain (Cowboy)"
|
||||
[/entry]
|
||||
[entry]
|
||||
name = "Jan Polak (benetnash)"
|
||||
comment = "Formula AI contributions"
|
||||
email = "benetnash_AT_icpnet.pl"
|
||||
name = "Jan Polak (benetnash)"
|
||||
comment = "Formula AI contributions"
|
||||
email = "benetnash_AT_icpnet.pl"
|
||||
[/entry]
|
||||
[entry]
|
||||
name = "Jan Zvánovec (jaz)"
|
||||
@ -888,7 +888,7 @@
|
||||
name = "Joshua Hudson"
|
||||
[/entry]
|
||||
[entry]
|
||||
name = "Kamil Kaczmarczyk (lampak)"
|
||||
name = "Kamil Kaczmarczyk (lampak)"
|
||||
[/entry]
|
||||
[entry]
|
||||
name = "Karl Miller (karlm)"
|
||||
|
@ -140,7 +140,7 @@
|
||||
[hotkey]
|
||||
command=preferences
|
||||
#ifdef APPLE
|
||||
key=,
|
||||
key=,
|
||||
#else
|
||||
key=p
|
||||
#endif
|
||||
@ -149,7 +149,7 @@
|
||||
[hotkey]
|
||||
command=quit
|
||||
#ifdef APPLE
|
||||
key=w
|
||||
key=w
|
||||
#else
|
||||
key=q
|
||||
#endif
|
||||
|
@ -1,243 +1,218 @@
|
||||
#textdomain wesnoth
|
||||
|
||||
|
||||
############################################################
|
||||
# MODIFY_AI - ADD
|
||||
############################################################
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_ASPECT SIDE ASPECT_ID FACET
|
||||
# modify ai, add facet to an aspect
|
||||
#
|
||||
# example: {MODIFY_AI_ADD_ASPECT 1 aggression (id=always value=0.5)}
|
||||
# example: {MODIFY_AI_ADD_ASPECT 1 leader_goal (id=always [value]x=1 y=2[/value])}
|
||||
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=add
|
||||
path=aspect[{ASPECT_ID}].facet
|
||||
{FACET}
|
||||
[/modify_ai]
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=add
|
||||
path=aspect[{ASPECT_ID}].facet
|
||||
{FACET}
|
||||
[/modify_ai]
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_STAGE SIDE STAGE
|
||||
# modify ai, add stage
|
||||
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=add
|
||||
path=stage
|
||||
{STAGE}
|
||||
[/modify_ai]
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=add
|
||||
path=stage
|
||||
{STAGE}
|
||||
[/modify_ai]
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_GOAL SIDE GOAL
|
||||
# modify ai, add goal
|
||||
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=add
|
||||
path=goal
|
||||
{GOAL}
|
||||
[/modify_ai]
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=add
|
||||
path=goal
|
||||
{GOAL}
|
||||
[/modify_ai]
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_CANDIDATE_ACTION SIDE CANDIDATE_ACTION
|
||||
# modify ai, add candidate action to a stage
|
||||
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=add
|
||||
path=stage
|
||||
{CANDIDATE_ACTION}
|
||||
[/modify_ai]
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=add
|
||||
path=stage
|
||||
{CANDIDATE_ACTION}
|
||||
[/modify_ai]
|
||||
#enddef
|
||||
|
||||
|
||||
############################################################
|
||||
# MODIFY_AI - DELETE
|
||||
############################################################
|
||||
|
||||
|
||||
#define MODIFY_AI_DELETE_ASPECT SIDE ASPECT_ID FACET_ID
|
||||
# modify ai, delete facet from aspect
|
||||
#
|
||||
# example: {MODIFY_AI_DELETE_ASPECT 1 aggression night}
|
||||
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=delete
|
||||
path=aspect[{ASPECT_ID}].facet[{FACET_ID}]
|
||||
[/modify_ai]
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=delete
|
||||
path=aspect[{ASPECT_ID}].facet[{FACET_ID}]
|
||||
[/modify_ai]
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_DELETE_STAGE SIDE STAGE_ID
|
||||
# modify ai, delete a stage
|
||||
#
|
||||
# example: {MODIFY_AI_DELETE_STAGE 1 fallback}
|
||||
# example: {MODIFY_AI_DELETE_STAGE 1 3}
|
||||
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=delete
|
||||
path=stage[{STAGE_ID}]
|
||||
[/modify_ai]
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=delete
|
||||
path=stage[{STAGE_ID}]
|
||||
[/modify_ai]
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_DELETE_GOAL SIDE GOAL_ID
|
||||
# modify ai, delete a goal
|
||||
#
|
||||
# example: {MODIFY_AI_DELETE_GOAL 1 kill_undead}
|
||||
# example: {MODIFY_AI_DELETE_GOAL 1 0}
|
||||
|
||||
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=delete
|
||||
path=goal[{GOAL_ID}]
|
||||
[/modify_ai]
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=delete
|
||||
path=goal[{GOAL_ID}]
|
||||
[/modify_ai]
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_DELETE_CANDIDATE_ACTION SIDE STAGE_ID CANDIDATE_ACTION_ID
|
||||
# modify ai, delete candidate action from a stage
|
||||
#
|
||||
# example: {MODIFY_AI_DELETE_CANDIDATE_ACTION 1 special_poisoning_formula}
|
||||
# example: {MODIFY_AI_DELETE_CANDIDATE_ACTION 1 0}
|
||||
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=delete
|
||||
path=stage[{STAGE_ID}].candidate_action[{CANDIDATE_ACTION_ID}]
|
||||
[/modify_ai]
|
||||
[modify_ai]
|
||||
side={SIDE}
|
||||
action=delete
|
||||
path=stage[{STAGE_ID}].candidate_action[{CANDIDATE_ACTION_ID}]
|
||||
[/modify_ai]
|
||||
#enddef
|
||||
|
||||
|
||||
############################################################
|
||||
# ASPECTS - DECLARATION
|
||||
############################################################
|
||||
|
||||
|
||||
#define AI_ASPECT ASPECT_ID FACET
|
||||
#macro to define a named facet of ai aspect
|
||||
[aspect]
|
||||
id={ASPECT_ID}
|
||||
{FACET}
|
||||
[/aspect]
|
||||
[aspect]
|
||||
id={ASPECT_ID}
|
||||
{FACET}
|
||||
[/aspect]
|
||||
#enddef
|
||||
|
||||
|
||||
############################################################
|
||||
# ASPECTS - SIMPLE - DECLARATION (NO PREAMBLE NEEDED)
|
||||
############################################################
|
||||
# note: simple aspects are supposed to be used without a preamble
|
||||
|
||||
|
||||
#define AI_SIMPLE_ASPECT ASPECT_ID FACET_ID VALUE
|
||||
# simple aspect with value=VALUE
|
||||
|
||||
{AI_ASPECT {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
value={VALUE}
|
||||
[/facet]
|
||||
)}
|
||||
{AI_ASPECT {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
value={VALUE}
|
||||
[/facet]
|
||||
)}
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_SIMPLE_ALWAYS_ASPECT ASPECT_ID VALUE
|
||||
# simple aspect which is always active
|
||||
|
||||
{AI_SIMPLE_ASPECT {ASPECT_ID} "always" {VALUE}}
|
||||
{AI_SIMPLE_ASPECT {ASPECT_ID} "always" {VALUE}}
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY ASPECT_ID FACET_ID TIMEOFDAY VALUE
|
||||
# simple aspect which is active during a specified time of day
|
||||
|
||||
{AI_ASPECT {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
value={VALUE}
|
||||
time_of_day={TIMEOFDAY}
|
||||
[/facet]
|
||||
)}
|
||||
{AI_ASPECT {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
value={VALUE}
|
||||
time_of_day={TIMEOFDAY}
|
||||
[/facet]
|
||||
)}
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_SIMPLE_NIGHT_ASPECT ASPECT_ID VALUE
|
||||
# simple aspect which is active during the night
|
||||
|
||||
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
||||
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_SIMPLE_DAY_ASPECT ASPECT_ID VALUE
|
||||
# simple aspect which is active during the day
|
||||
|
||||
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
||||
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_SIMPLE_ASPECT_VALUE ASPECT_ID FACET_ID VALUE
|
||||
# simple aspect
|
||||
|
||||
{AI_ASPECT {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
[value]
|
||||
{VALUE}
|
||||
[/value]
|
||||
[/facet]
|
||||
)}
|
||||
{AI_ASPECT {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
[value]
|
||||
{VALUE}
|
||||
[/value]
|
||||
[/facet]
|
||||
)}
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_SIMPLE_ALWAYS_ASPECT_VALUE ASPECT_ID VALUE
|
||||
# simple aspect which is always active
|
||||
|
||||
{AI_SIMPLE_ASPECT_VALUE {ASPECT_ID} "always" {VALUE}}
|
||||
{AI_SIMPLE_ASPECT_VALUE {ASPECT_ID} "always" {VALUE}}
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE ASPECT_ID FACET_ID TIMEOFDAY VALUE
|
||||
# simple aspect which is active during a specified time of day
|
||||
|
||||
{AI_ASPECT {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
[value]
|
||||
{VALUE}
|
||||
[/value]
|
||||
time_of_day={TIMEOFDAY}
|
||||
[/facet]
|
||||
)}
|
||||
{AI_ASPECT {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
[value]
|
||||
{VALUE}
|
||||
[/value]
|
||||
time_of_day={TIMEOFDAY}
|
||||
[/facet]
|
||||
)}
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_SIMPLE_NIGHT_ASPECT_VALUE ASPECT_ID VALUE
|
||||
# simple aspect which is active during the night
|
||||
|
||||
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
||||
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_SIMPLE_DAY_ASPECT_VALUE ASPECT_ID VALUE
|
||||
# simple aspect which is active during the day
|
||||
|
||||
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
||||
{AI_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
||||
#enddef
|
||||
|
||||
|
||||
############################################################
|
||||
# ASPECTS - SIMPLE - ADD (NO PREAMBLE NEEDED)
|
||||
############################################################
|
||||
@ -245,125 +220,111 @@
|
||||
#define MODIFY_AI_ADD_SIMPLE_ASPECT SIDE ASPECT_ID FACET_ID VALUE
|
||||
# modify ai, add simple facet to an aspect
|
||||
|
||||
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
value={VALUE}
|
||||
[/facet]
|
||||
)}
|
||||
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
value={VALUE}
|
||||
[/facet]
|
||||
)}
|
||||
#enddef
|
||||
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_SIMPLE_ALWAYS_ASPECT SIDE ASPECT_ID VALUE
|
||||
# modify ai, add simple aspect which is always active
|
||||
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT {SIDE} {ASPECT_ID} "always" {VALUE}}
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT {SIDE} {ASPECT_ID} "always" {VALUE}}
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY SIDE ASPECT_ID FACET_ID TIMEOFDAY VALUE
|
||||
# modify ai, add simple aspect which is active during a specified time of day
|
||||
|
||||
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
value={VALUE}
|
||||
time_of_day={TIMEOFDAY}
|
||||
[/facet]
|
||||
)}
|
||||
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
value={VALUE}
|
||||
time_of_day={TIMEOFDAY}
|
||||
[/facet]
|
||||
)}
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_SIMPLE_NIGHT_ASPECT SIDE ASPECT_ID VALUE
|
||||
# modify ai, add simple aspect which is active during the night
|
||||
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY {SIDE} {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY {SIDE} {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_SIMPLE_DAY_ASPECT SIDE ASPECT_ID VALUE
|
||||
# modify ai, add simple aspect which is active during the day
|
||||
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY {SIDE} {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY {SIDE} {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
||||
#enddef
|
||||
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_SIMPLE_ASPECT_VALUE SIDE ASPECT_ID FACET_ID VALUE
|
||||
# modify ai, add simple facet to an aspect
|
||||
|
||||
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
[value]
|
||||
{VALUE}
|
||||
[/value]
|
||||
[/facet]
|
||||
)}
|
||||
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
[value]
|
||||
{VALUE}
|
||||
[/value]
|
||||
[/facet]
|
||||
)}
|
||||
#enddef
|
||||
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_SIMPLE_ALWAYS_ASPECT_VALUE SIDE ASPECT_ID VALUE
|
||||
# modify ai, add simple aspect which is always active
|
||||
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT_VALUE {SIDE} {ASPECT_ID} "always" {VALUE}}
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT_VALUE {SIDE} {ASPECT_ID} "always" {VALUE}}
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE SIDE ASPECT_ID FACET_ID TIMEOFDAY VALUE
|
||||
# modify ai, add simple aspect which is active during a specified time of day
|
||||
|
||||
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
[value]
|
||||
{VALUE}
|
||||
[/value]
|
||||
time_of_day={TIMEOFDAY}
|
||||
[/facet]
|
||||
)}
|
||||
{MODIFY_AI_ADD_ASPECT {SIDE} {ASPECT_ID}
|
||||
(
|
||||
[facet]
|
||||
id={FACET_ID}
|
||||
[value]
|
||||
{VALUE}
|
||||
[/value]
|
||||
time_of_day={TIMEOFDAY}
|
||||
[/facet]
|
||||
)}
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_SIMPLE_NIGHT_ASPECT_VALUE SIDE ASPECT_ID VALUE
|
||||
# modify ai, add simple aspect which is active during the night
|
||||
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {SIDE} {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {SIDE} {ASPECT_ID} "night" "dusk,first_watch,second_watch" {VALUE} }
|
||||
#enddef
|
||||
|
||||
|
||||
#define MODIFY_AI_ADD_SIMPLE_DAY_ASPECT_VALUE SIDE ASPECT_ID VALUE
|
||||
# modify ai, add simple aspect which is active during the day
|
||||
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {SIDE} {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
||||
{MODIFY_AI_ADD_SIMPLE_ASPECT_FOR_TIME_OF_DAY_VALUE {SIDE} {ASPECT_ID} "day" "dawn,morning,afternoon" {VALUE} }
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_NO_SCOUTS
|
||||
# make the AI team not recruit scouts.
|
||||
|
||||
{AI_SIMPLE_ALWAYS_ASPECT villages_per_scout 0}
|
||||
{AI_SIMPLE_ALWAYS_ASPECT villages_per_scout 0}
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_SCALE_ATTACK_DEPTH_BY_DIFFICULTY
|
||||
# change attack depth depending on difficulty
|
||||
#ifdef EASY
|
||||
{AI_SIMPLE_ALWAYS_ASPECT attack_depth 3}
|
||||
{AI_SIMPLE_ALWAYS_ASPECT attack_depth 3}
|
||||
#endif
|
||||
|
||||
#ifdef MEDIUM
|
||||
{AI_SIMPLE_ALWAYS_ASPECT attack_depth 4}
|
||||
{AI_SIMPLE_ALWAYS_ASPECT attack_depth 4}
|
||||
#endif
|
||||
|
||||
#ifdef HARD
|
||||
{AI_SIMPLE_ALWAYS_ASPECT attack_depth 5}
|
||||
{AI_SIMPLE_ALWAYS_ASPECT attack_depth 5}
|
||||
#endif
|
||||
|
||||
#enddef
|
||||
@ -374,13 +335,13 @@
|
||||
|
||||
#define AI_NO_RECRUITMENT
|
||||
# disable recruitment
|
||||
[facet]
|
||||
id="always"
|
||||
[value]
|
||||
engine=cpp
|
||||
name=empty
|
||||
[/value]
|
||||
[/facet]
|
||||
[facet]
|
||||
id="always"
|
||||
[value]
|
||||
engine=cpp
|
||||
name=empty
|
||||
[/value]
|
||||
[/facet]
|
||||
#enddef
|
||||
|
||||
############################################################
|
||||
@ -388,43 +349,41 @@
|
||||
############################################################
|
||||
|
||||
#define AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT
|
||||
[facet]
|
||||
id="always"
|
||||
[value]
|
||||
engine=fai
|
||||
name=side_formulas
|
||||
move="{ai/formula/new_recruitment.fai}"
|
||||
[/value]
|
||||
[/facet]
|
||||
[facet]
|
||||
id="always"
|
||||
[value]
|
||||
engine=fai
|
||||
name=side_formulas
|
||||
move="{ai/formula/new_recruitment.fai}"
|
||||
[/value]
|
||||
[/facet]
|
||||
#enddef
|
||||
|
||||
#define AI_SIMPLE_FORMULA_AI_EXPERIMENTAL_RECRUITMENT
|
||||
#enable new formula-ai recruitment made by Dragonking (experimental!)
|
||||
{AI_ASPECT recruitment {AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT} }
|
||||
#enable new formula-ai recruitment made by Dragonking (experimental!)
|
||||
{AI_ASPECT recruitment {AI_FORMULA_AI_EXPERIMENTAL_RECRUITMENT} }
|
||||
#enddef
|
||||
|
||||
############################################################
|
||||
# CANDIDATE_ACTIONS
|
||||
############################################################
|
||||
|
||||
|
||||
#define AI_CANDIDATE_ACTION_POISONING
|
||||
# candidate action for poisoners to spread poison around
|
||||
|
||||
[candidate_action]
|
||||
engine=fai
|
||||
name=poisoner
|
||||
type=attack
|
||||
[filter]
|
||||
me="filter( input, 'me', filter(me.attacks,'att',filter(att.special,'spe',contains_string(spe,'poison'))))"
|
||||
target="filter( input, 'target', target.undead = 0 and target.hitpoints > 5 and index_of('poisoned',keys(target.states)) = -1)"
|
||||
[/filter]
|
||||
evaluation="{ai/formula/poisoner_eval.fai}"
|
||||
action="{ai/formula/poisoner_attack.fai}"
|
||||
[/candidate_action]
|
||||
[candidate_action]
|
||||
engine=fai
|
||||
name=poisoner
|
||||
type=attack
|
||||
[filter]
|
||||
me="filter( input, 'me', filter(me.attacks,'att',filter(att.special,'spe',contains_string(spe,'poison'))))"
|
||||
target="filter( input, 'target', target.undead = 0 and target.hitpoints > 5 and index_of('poisoned',keys(target.states)) = -1)"
|
||||
[/filter]
|
||||
evaluation="{ai/formula/poisoner_eval.fai}"
|
||||
action="{ai/formula/poisoner_attack.fai}"
|
||||
[/candidate_action]
|
||||
#enddef
|
||||
|
||||
|
||||
############################################################
|
||||
# LEADER GOALS ( aspect[leader_goal] )
|
||||
############################################################
|
||||
@ -434,35 +393,33 @@
|
||||
#
|
||||
#define _AI_ASPECT_LEADER_GOAL_MOVE_TO X Y AUTOREMOVE
|
||||
|
||||
[facet]
|
||||
id="always"
|
||||
[value]
|
||||
id="always"
|
||||
x={X}
|
||||
y={Y}
|
||||
auto_remove={AUTOREMOVE}
|
||||
[/value]
|
||||
[/facet]
|
||||
[facet]
|
||||
id="always"
|
||||
[value]
|
||||
id="always"
|
||||
x={X}
|
||||
y={Y}
|
||||
auto_remove={AUTOREMOVE}
|
||||
[/value]
|
||||
[/facet]
|
||||
#enddef
|
||||
|
||||
#define AI_ASPECT_LEADER_GOAL_MOVE_TO X Y
|
||||
# leader goal: move to X Y and be free
|
||||
|
||||
{_AI_ASPECT_LEADER_GOAL_MOVE_TO {X} {Y} "yes"}
|
||||
{_AI_ASPECT_LEADER_GOAL_MOVE_TO {X} {Y} "yes"}
|
||||
#enddef
|
||||
|
||||
|
||||
#define AI_ASPECT_LEADER_GOAL_MOVE_TO_AND_STAY_THERE X Y
|
||||
# leader goal: move to X Y and stay there
|
||||
|
||||
{_AI_ASPECT_LEADER_GOAL_MOVE_TO {X} {Y} "no"}
|
||||
{_AI_ASPECT_LEADER_GOAL_MOVE_TO {X} {Y} "no"}
|
||||
#enddef
|
||||
|
||||
|
||||
#define CLEAR_AI_ALWAYS_ASPECT_LEADER_GOAL SIDE
|
||||
# clear AI leader goal "always"
|
||||
|
||||
{MODIFY_AI_DELETE_ASPECT {SIDE} leader_goal always}
|
||||
{MODIFY_AI_DELETE_ASPECT {SIDE} leader_goal always}
|
||||
#enddef
|
||||
|
||||
############################################################
|
||||
@ -471,49 +428,48 @@
|
||||
|
||||
#define AI_CONTROLLER_ALLOW_LEADER_CONTROL SIDE_CONTROLLER SIDE_CONTROLLED
|
||||
|
||||
[store_unit]
|
||||
[filter]
|
||||
side={SIDE_CONTROLLED}
|
||||
canrecruit=yes
|
||||
[/filter]
|
||||
|
||||
[store_unit]
|
||||
[filter]
|
||||
side={SIDE_CONTROLLED}
|
||||
canrecruit=yes
|
||||
[/filter]
|
||||
kill=no
|
||||
variable=ally_leader
|
||||
[/store_unit]
|
||||
|
||||
kill=no
|
||||
variable=ally_leader
|
||||
[/store_unit]
|
||||
[if]
|
||||
[variable]
|
||||
name=ally_leader.length
|
||||
greater_than=0
|
||||
[/variable]
|
||||
[then]
|
||||
[set_menu_item]
|
||||
id=ai_controller_leader_control_{SIDE_CONTROLLED}
|
||||
description= _ "Ask $ally_leader.name (leader of side $ally_leader.side) to move here"
|
||||
[show_if]
|
||||
side={SIDE_CONTROLLER}
|
||||
#TODO: show only if ally leader is alive
|
||||
[/show_if]
|
||||
[command]
|
||||
{CLEAR_AI_ALWAYS_ASPECT_LEADER_GOAL {SIDE_CONTROLLED} }
|
||||
{MODIFY_AI_ADD_ASPECT {SIDE_CONTROLLED} leader_goal {AI_ASPECT_LEADER_GOAL_MOVE_TO $x1 $y1} }
|
||||
[/command]
|
||||
[/set_menu_item]
|
||||
[/then]
|
||||
[/if]
|
||||
|
||||
[if]
|
||||
[variable]
|
||||
name=ally_leader.length
|
||||
greater_than=0
|
||||
[/variable]
|
||||
[then]
|
||||
[event]
|
||||
name=victory #TODO: any scenario change
|
||||
[set_menu_item]
|
||||
id=ai_controller_leader_control_{SIDE_CONTROLLED}
|
||||
description= _ "Ask $ally_leader.name (leader of side $ally_leader.side) to move here"
|
||||
[show_if]
|
||||
side={SIDE_CONTROLLER}
|
||||
#TODO: show only if ally leader is alive
|
||||
[not]
|
||||
[/not]
|
||||
[/show_if]
|
||||
[command]
|
||||
{CLEAR_AI_ALWAYS_ASPECT_LEADER_GOAL {SIDE_CONTROLLED} }
|
||||
{MODIFY_AI_ADD_ASPECT {SIDE_CONTROLLED} leader_goal {AI_ASPECT_LEADER_GOAL_MOVE_TO $x1 $y1} }
|
||||
[/command]
|
||||
[/set_menu_item]
|
||||
[/then]
|
||||
[/if]
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=victory #TODO: any scenario change
|
||||
[set_menu_item]
|
||||
id=ai_controller_leader_control_{SIDE_CONTROLLED}
|
||||
[show_if]
|
||||
[not]
|
||||
[/not]
|
||||
[/show_if]
|
||||
[/set_menu_item]
|
||||
[/event]
|
||||
|
||||
{CLEAR_VARIABLE ally_leader}
|
||||
{CLEAR_VARIABLE ally_leader}
|
||||
|
||||
#enddef
|
||||
|
@ -37,10 +37,10 @@
|
||||
duration=100
|
||||
image={FULL_IMAGE}
|
||||
[/frame]
|
||||
[frame]
|
||||
duration=150
|
||||
image={FULL_IMAGE}
|
||||
[/frame]
|
||||
[frame]
|
||||
duration=150
|
||||
image={FULL_IMAGE}
|
||||
[/frame]
|
||||
[frame]
|
||||
duration=1
|
||||
image={HALFWAYS_IMAGE}
|
||||
@ -48,7 +48,6 @@
|
||||
[/leading_anim]
|
||||
#enddef
|
||||
|
||||
|
||||
#define DEFENSE_ANIM REACTION_IMAGE BASE_IMAGE HIT_SOUND
|
||||
# Define a defensive animation moving from a specified BASE_IMAGE
|
||||
# to REACTION_IMAGE, with HIT_SOUND playing only if a hit occurs.
|
||||
@ -703,47 +702,43 @@
|
||||
#define MISSILE_FRAME_FIRE_BREATH_N OFFSET
|
||||
# Animate a projectile for a fire-breath attack.
|
||||
[missile_frame]
|
||||
begin=-400
|
||||
end=100
|
||||
halo=projectiles/fire-breath-n-1.png:80,projectiles/fire-breath-n-2.png:80,projectiles/fire-breath-n-3.png:80,projectiles/fire-breath-n-4.png:80,projectiles/fire-breath-n-5.png:80
|
||||
halo_x,halo_y={OFFSET}
|
||||
begin=-400
|
||||
end=100
|
||||
halo=projectiles/fire-breath-n-1.png:80,projectiles/fire-breath-n-2.png:80,projectiles/fire-breath-n-3.png:80,projectiles/fire-breath-n-4.png:80,projectiles/fire-breath-n-5.png:80
|
||||
halo_x,halo_y={OFFSET}
|
||||
[/missile_frame]
|
||||
#enddef
|
||||
|
||||
#define MISSILE_FRAME_FIRE_BREATH_S OFFSET
|
||||
# Animate a projectile for a fire-breath attack.
|
||||
[missile_frame]
|
||||
begin=-400
|
||||
end=100
|
||||
halo=projectiles/fire-breath-s-1.png:80,projectiles/fire-breath-s-2.png:80,projectiles/fire-breath-s-3.png:80,projectiles/fire-breath-s-4.png:80,projectiles/fire-breath-s-5.png:80
|
||||
halo_x,halo_y={OFFSET}
|
||||
begin=-400
|
||||
end=100
|
||||
halo=projectiles/fire-breath-s-1.png:80,projectiles/fire-breath-s-2.png:80,projectiles/fire-breath-s-3.png:80,projectiles/fire-breath-s-4.png:80,projectiles/fire-breath-s-5.png:80
|
||||
halo_x,halo_y={OFFSET}
|
||||
[/missile_frame]
|
||||
#enddef
|
||||
|
||||
|
||||
#define MISSILE_FRAME_FIRE_BREATH_N_DIAGONAL OFFSET
|
||||
# Animate a projectile for a fire-breath attack.
|
||||
[missile_frame]
|
||||
begin=-400
|
||||
end=100
|
||||
halo=projectiles/fire-breath-ne-1.png:80,projectiles/fire-breath-ne-2.png:80,projectiles/fire-breath-ne-3.png:80,projectiles/fire-breath-ne-4.png:80,projectiles/fire-breath-ne-5.png:80
|
||||
halo_x,halo_y={OFFSET}
|
||||
begin=-400
|
||||
end=100
|
||||
halo=projectiles/fire-breath-ne-1.png:80,projectiles/fire-breath-ne-2.png:80,projectiles/fire-breath-ne-3.png:80,projectiles/fire-breath-ne-4.png:80,projectiles/fire-breath-ne-5.png:80
|
||||
halo_x,halo_y={OFFSET}
|
||||
[/missile_frame]
|
||||
#enddef
|
||||
|
||||
|
||||
#define MISSILE_FRAME_FIRE_BREATH_S_DIAGONAL OFFSET
|
||||
# Animate a projectile for a fire-breath attack.
|
||||
[missile_frame]
|
||||
begin=-400
|
||||
end=100
|
||||
halo=projectiles/fire-breath-se-1.png:80,projectiles/fire-breath-se-2.png:80,projectiles/fire-breath-se-3.png:80,projectiles/fire-breath-se-4.png:80,projectiles/fire-breath-se-5.png:80
|
||||
halo_x,halo_y={OFFSET}
|
||||
begin=-400
|
||||
end=100
|
||||
halo=projectiles/fire-breath-se-1.png:80,projectiles/fire-breath-se-2.png:80,projectiles/fire-breath-se-3.png:80,projectiles/fire-breath-se-4.png:80,projectiles/fire-breath-se-5.png:80
|
||||
halo_x,halo_y={OFFSET}
|
||||
[/missile_frame]
|
||||
#enddef
|
||||
|
||||
|
||||
|
||||
#define MISSILE_FRAME_FAERIE_FIRE
|
||||
# Animate a projectile for a faerie-fire attack.
|
||||
[missile_frame]
|
||||
@ -2196,7 +2191,7 @@
|
||||
|
||||
#define DRAKE_WEAPON_ANIM DRAKE_NAME
|
||||
[draw_weapon_anim]
|
||||
#landing, only do it when we're not already flying
|
||||
#landing, only do it when we're not already flying
|
||||
terrain_type=Wo,Ww,Ww^Vm,Chs,Chw,Ss
|
||||
[frame]
|
||||
duration=100
|
||||
@ -2216,7 +2211,7 @@
|
||||
[/frame]
|
||||
[/draw_weapon_anim]
|
||||
[sheath_weapon_anim]
|
||||
#landing, only do it when we're not already flying
|
||||
#landing, only do it when we're not already flying
|
||||
terrain_type=Wo,Ww,Ww^Vm,Chs,Chw,Ss
|
||||
[frame]
|
||||
duration=100
|
||||
|
@ -14,7 +14,6 @@
|
||||
#enddef
|
||||
#wmllint: markcheck on
|
||||
|
||||
|
||||
#define ADD_HERO_ICON FILTER
|
||||
# Add hero icon to specified units
|
||||
{DEPRECATE ADD_HERO_ICON 1.7.2}
|
||||
@ -63,4 +62,3 @@
|
||||
name=hero_removal_target
|
||||
[/clear_variable]
|
||||
#enddef
|
||||
|
||||
|
@ -510,6 +510,6 @@
|
||||
# character message dialogs are rendered. Intended for story screens
|
||||
# mainly.
|
||||
#define CAPTION TEXT
|
||||
"<span color='#bcb088'><b>" + {TEXT} + "</b></span>
|
||||
"<span color='#bcb088'><b>" + {TEXT} + "</b></span>
|
||||
|
||||
"#enddef
|
||||
|
@ -3,11 +3,11 @@
|
||||
# The Drake phoneme inventory a writing system must cover is as follows:
|
||||
#
|
||||
# Vowels: /a/ /au/ /e/ /i/ /o/ /u/
|
||||
# Consonants: /b/ /d/ /g/ /k/ /l/ /m/ /n/ /r/ /s/ /t/ /v/
|
||||
# Consonants: /b/ /d/ /g/ /k/ /l/ /m/ /n/ /r/ /s/ /t/ /v/
|
||||
# /th/ /sh/ /ch/ /'/
|
||||
#
|
||||
# The last consonant in the list is a glottal stop. Notably absent compared to
|
||||
# English and many other Indo-European languages are /f/ /h/ /j/ /p/ /w/ /y/
|
||||
# English and many other Indo-European languages are /f/ /h/ /j/ /p/ /w/ /y/
|
||||
# /z/.
|
||||
#
|
||||
# Final 'hn' is a nasalization marker. Final 'é' indicates the vowel
|
||||
|
@ -1,6 +1,6 @@
|
||||
#textdomain wesnoth
|
||||
|
||||
#define STORY_PART_SPEECH BACKGROUND SPEAKER SPEECH
|
||||
#define STORY_PART_SPEECH BACKGROUND SPEAKER SPEECH
|
||||
[part]
|
||||
background={BACKGROUND}
|
||||
scale_background=no
|
||||
|
@ -210,7 +210,7 @@
|
||||
# A substitute for [recall] that works even when there's no-one to recall
|
||||
# useful for testing scenarios out of order.
|
||||
{RECALL_OR_CREATE_UNIT (type={TYPE}
|
||||
id={ID_STRING}) {ID_STRING}}
|
||||
id={ID_STRING}) {ID_STRING}}
|
||||
#enddef
|
||||
|
||||
#define STORE_UNIT_VAR FILTER VAR TO_VAR
|
||||
|
@ -23,7 +23,7 @@
|
||||
[color_range]
|
||||
id=darkred
|
||||
rgb=8A0808,FFFFFF,000000,FF0000
|
||||
name= _ "Dark Red"
|
||||
name= _ "Dark Red"
|
||||
[/color_range]
|
||||
|
||||
[color_range]
|
||||
|
@ -574,14 +574,14 @@ While undead lords arrived on the Great Continent in considerable numbers only i
|
||||
[/movetype]
|
||||
|
||||
#define WOODLAND_RESISTANCE
|
||||
[resistance]
|
||||
blade=100
|
||||
pierce=100
|
||||
impact=100
|
||||
fire=100
|
||||
cold=100
|
||||
arcane=110
|
||||
[/resistance]
|
||||
[resistance]
|
||||
blade=100
|
||||
pierce=100
|
||||
impact=100
|
||||
fire=100
|
||||
cold=100
|
||||
arcane=110
|
||||
[/resistance]
|
||||
#enddef
|
||||
[movetype]
|
||||
name=woodland
|
||||
@ -934,38 +934,38 @@ While undead lords arrived on the Great Continent in considerable numbers only i
|
||||
[/movetype]
|
||||
|
||||
#define MOUNTAIN_MOVE
|
||||
[movement_costs]
|
||||
shallow_water=3
|
||||
reef=2
|
||||
swamp_water=3
|
||||
flat=1
|
||||
sand=1
|
||||
forest=1
|
||||
hills=1
|
||||
mountains=1
|
||||
village=1
|
||||
castle=1
|
||||
cave=1
|
||||
frozen=2
|
||||
fungus=1
|
||||
[/movement_costs]
|
||||
[movement_costs]
|
||||
shallow_water=3
|
||||
reef=2
|
||||
swamp_water=3
|
||||
flat=1
|
||||
sand=1
|
||||
forest=1
|
||||
hills=1
|
||||
mountains=1
|
||||
village=1
|
||||
castle=1
|
||||
cave=1
|
||||
frozen=2
|
||||
fungus=1
|
||||
[/movement_costs]
|
||||
#enddef
|
||||
#define MOUNTAIN_DEFENSE
|
||||
[defense]
|
||||
shallow_water=80
|
||||
reef=70
|
||||
swamp_water=80
|
||||
flat=70
|
||||
sand=70
|
||||
forest=70
|
||||
hills=40
|
||||
mountains=30
|
||||
village=50
|
||||
castle=40
|
||||
cave=50
|
||||
frozen=70
|
||||
fungus=60
|
||||
[/defense]
|
||||
[defense]
|
||||
shallow_water=80
|
||||
reef=70
|
||||
swamp_water=80
|
||||
flat=70
|
||||
sand=70
|
||||
forest=70
|
||||
hills=40
|
||||
mountains=30
|
||||
village=50
|
||||
castle=40
|
||||
cave=50
|
||||
frozen=70
|
||||
fungus=60
|
||||
[/defense]
|
||||
#enddef
|
||||
[movetype]
|
||||
name=mountainfoot
|
||||
@ -1145,7 +1145,7 @@ While undead lords arrived on the Great Continent in considerable numbers only i
|
||||
[/resistance]
|
||||
[/movetype]
|
||||
|
||||
#only used in some UMC
|
||||
#only used in some UMC
|
||||
[movetype]
|
||||
name=spirit
|
||||
flies=true
|
||||
|
@ -31,8 +31,8 @@
|
||||
mirror="true"
|
||||
image="portraits/drakes/transparent/clasher.png"
|
||||
[/portrait]
|
||||
# [death]
|
||||
# [/death]
|
||||
# [death]
|
||||
# [/death]
|
||||
[resistance]
|
||||
pierce=90
|
||||
[/resistance]
|
||||
@ -195,10 +195,6 @@
|
||||
[/else]
|
||||
[/attack_anim]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[attack_anim]
|
||||
[filter_attack]
|
||||
name=halberd
|
||||
|
@ -64,7 +64,7 @@
|
||||
offset=0.0~0.2,0.2~0.7,0.7~0.2,0.2~0.0
|
||||
start_time=-400
|
||||
[frame]
|
||||
image="units/drakes/fighter.png"
|
||||
image="units/drakes/fighter.png"
|
||||
[/frame]
|
||||
[frame]
|
||||
duration=100
|
||||
@ -103,7 +103,7 @@
|
||||
image="units/drakes/fighter-melee-6.png"
|
||||
[/frame]
|
||||
[frame]
|
||||
image="units/drakes/fighter.png"
|
||||
image="units/drakes/fighter.png"
|
||||
[/frame]
|
||||
[/attack_anim]
|
||||
[/unit_type]
|
||||
|
@ -70,45 +70,45 @@ Most often, Gliders hunt larger game like deer, swine, or dolphins; the drakes'
|
||||
name=slam
|
||||
[/filter_attack]
|
||||
offset=0.0~0.2,0.2~0.7,0.7~0.2,0.2~0.0
|
||||
start_time=-400
|
||||
start_time=-400
|
||||
[frame]
|
||||
duration=100
|
||||
duration=100
|
||||
image="units/drakes/glider-kick-1.png"
|
||||
[/frame]
|
||||
[frame]
|
||||
duration=100
|
||||
duration=100
|
||||
image="units/drakes/glider-kick-2.png"
|
||||
[/frame]
|
||||
[if]
|
||||
hits=yes
|
||||
[frame]
|
||||
duration=100
|
||||
image="units/drakes/glider-kick-3.png"
|
||||
duration=100
|
||||
image="units/drakes/glider-kick-3.png"
|
||||
sound=club.ogg
|
||||
[/frame]
|
||||
[/if]
|
||||
[else]
|
||||
hits=no
|
||||
[frame]
|
||||
duration=100
|
||||
image="units/drakes/glider-kick-3.png"
|
||||
duration=100
|
||||
image="units/drakes/glider-kick-3.png"
|
||||
sound={SOUND_LIST:MISS}
|
||||
[/frame]
|
||||
[/else]
|
||||
[frame]
|
||||
duration=100
|
||||
duration=100
|
||||
image="units/drakes/glider-kick-4.png"
|
||||
[/frame]
|
||||
[frame]
|
||||
duration=100
|
||||
duration=100
|
||||
image="units/drakes/glider-kick-5.png"
|
||||
[/frame]
|
||||
[frame]
|
||||
duration=100
|
||||
duration=100
|
||||
image="units/drakes/glider-kick-6.png"
|
||||
[/frame]
|
||||
[frame]
|
||||
duration=100
|
||||
duration=100
|
||||
image="units/drakes/glider-kick-2.png"
|
||||
[/frame]
|
||||
[/attack_anim]
|
||||
|
@ -144,7 +144,7 @@
|
||||
number=3
|
||||
[/attack]
|
||||
[draw_weapon_anim]
|
||||
#landing, only do it when we're not already flying
|
||||
#landing, only do it when we're not already flying
|
||||
[frame]
|
||||
duration=100
|
||||
image="units/drakes/hurricane-takeoff-4.png"
|
||||
@ -163,7 +163,7 @@
|
||||
[/frame]
|
||||
[/draw_weapon_anim]
|
||||
[sheath_weapon_anim]
|
||||
#landing, only do it when we're not already flying
|
||||
#landing, only do it when we're not already flying
|
||||
[frame]
|
||||
duration=100
|
||||
image="units/drakes/hurricane-takeoff-1.png"
|
||||
@ -232,5 +232,4 @@
|
||||
image="units/drakes/hurricane-kick-2.png"
|
||||
[/frame]
|
||||
[/attack_anim]
|
||||
|
||||
[/unit_type]
|
||||
|
@ -143,7 +143,7 @@
|
||||
number=3
|
||||
[/attack]
|
||||
[draw_weapon_anim]
|
||||
#landing, only do it when we're not already flying
|
||||
#landing, only do it when we're not already flying
|
||||
[frame]
|
||||
duration=100
|
||||
image="units/drakes/sky-takeoff-4.png"
|
||||
@ -162,7 +162,7 @@
|
||||
[/frame]
|
||||
[/draw_weapon_anim]
|
||||
[sheath_weapon_anim]
|
||||
#landing, only do it when we're not already flying
|
||||
#landing, only do it when we're not already flying
|
||||
[frame]
|
||||
duration=100
|
||||
image="units/drakes/sky-takeoff-1.png"
|
||||
@ -231,5 +231,4 @@
|
||||
image="units/drakes/sky-kick-2.png"
|
||||
[/frame]
|
||||
[/attack_anim]
|
||||
|
||||
[/unit_type]
|
||||
|
@ -35,8 +35,8 @@
|
||||
[resistance]
|
||||
pierce=80
|
||||
[/resistance]
|
||||
# [death]
|
||||
# [/death]
|
||||
# [death]
|
||||
# [/death]
|
||||
[attack]
|
||||
name=halberd
|
||||
description=_"halberd"
|
||||
@ -196,10 +196,6 @@
|
||||
[/else]
|
||||
[/attack_anim]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[attack_anim]
|
||||
[filter_attack]
|
||||
name=halberd
|
||||
|
@ -136,5 +136,4 @@
|
||||
image="units/dwarves/explorer-melee-6.png"
|
||||
[/frame]
|
||||
[/attack_anim]
|
||||
|
||||
[/unit_type]
|
||||
|
@ -135,5 +135,4 @@
|
||||
image="units/dwarves/pathfinder-melee-6.png"
|
||||
[/frame]
|
||||
[/attack_anim]
|
||||
|
||||
[/unit_type]
|
||||
|
@ -51,7 +51,7 @@
|
||||
[if]
|
||||
hits=yes
|
||||
[frame]
|
||||
duration=100
|
||||
duration=100
|
||||
image="units/human-outlaws/bandit-melee-2.png"
|
||||
sound=staff.wav
|
||||
[/frame]
|
||||
@ -59,7 +59,7 @@
|
||||
[else]
|
||||
hits=no
|
||||
[frame]
|
||||
duration=100
|
||||
duration=100
|
||||
image="units/human-outlaws/bandit-melee-2.png"
|
||||
sound={SOUND_LIST:MISS}
|
||||
[/frame]
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user