Reindent mainline.

This commit is contained in:
Eric S. Raymond 2009-11-23 14:39:03 +00:00
parent a1605bd14f
commit 0aa99781cf
118 changed files with 1072 additions and 1195 deletions

View File

@ -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'

View File

@ -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]

View File

@ -1,2 +1,2 @@
#textdomain wesnoth
{ai/dev/testing_ai_default_test_targeting.cfg}
{ai/dev/testing_ai_default_test_targeting.cfg}

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]
)}

View File

@ -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

View File

@ -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]

View File

@ -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}

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -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"

View File

@ -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]

View File

@ -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]

View File

@ -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}

View File

@ -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]

View File

@ -83,7 +83,6 @@
[/part]
[/story]
[story]
[part]
background=story/landscape-battlefield.jpg

View File

@ -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
#############################

View File

@ -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

View File

@ -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."

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -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}

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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!"

View File

@ -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]

View File

@ -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]

View File

@ -359,7 +359,6 @@
{AI_CONTROLLER_ALLOW_LEADER_CONTROL 1 2}
{AI_CONTROLLER_ALLOW_LEADER_CONTROL 1 3}
[/event]
[event]
name=victory

View File

@ -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]

View File

@ -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

View File

@ -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 ####

View File

@ -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 ()}

View File

@ -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

View File

@ -238,7 +238,6 @@
[/message]
{AI_CONTROLLER_ALLOW_LEADER_CONTROL 1 2}
[/event]
[event]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -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}

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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?")}

View File

@ -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}

View File

@ -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]

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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."

View File

@ -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}

View File

@ -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?"

View File

@ -209,7 +209,6 @@
x,y=33,10
[/recall]
{MODIFY_UNIT (id="Flar'Tar") side 3}
{MODIFY_UNIT (id="Flar'Tar") canrecruit yes}

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -464,7 +464,6 @@
[/story]
#enddef
#define QUEST_CONDITIONAL
# Internal macro; simplifies all following ones
[if]

View File

@ -993,8 +993,8 @@
name=rogrimir
[/fire_event]
[/then]
[else]
[allow_undo]
[else]
[allow_undo]
[/allow_undo]
[/else]
[/if]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -13,5 +13,5 @@
{core/editor/}
[lua]
code=<< wesnoth.dofile("lua/wml-tags.lua") >>
code=<< wesnoth.dofile("lua/wml-tags.lua") >>
[/lua]

View File

@ -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)"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -23,7 +23,7 @@
[color_range]
id=darkred
rgb=8A0808,FFFFFF,000000,FF0000
name= _ "Dark Red"
name= _ "Dark Red"
[/color_range]
[color_range]

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -136,5 +136,4 @@
image="units/dwarves/explorer-melee-6.png"
[/frame]
[/attack_anim]
[/unit_type]

View File

@ -135,5 +135,4 @@
image="units/dwarves/pathfinder-melee-6.png"
[/frame]
[/attack_anim]
[/unit_type]

View File

@ -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