Merge branch 'master' into sdl2

This commit is contained in:
Andreas Löf 2015-12-19 12:03:12 +13:00
commit 2c1f3ef540
1717 changed files with 426045 additions and 366895 deletions

2
.gitignore vendored
View file

@ -124,7 +124,7 @@ merge_translations
*.gmo
po/**/[a-z][a-z]
po/**/[a-z][a-z]_[GB]R
po/**/POTFILES
po/wesnoth*/POTFILES*
po/**/pot-update.sh
po/**/stamp-po
po/**/remove-potcdate.s*

View file

@ -31,7 +31,7 @@ PROJECT_NAME = "The Battle for Wesnoth"
# This could be handy for archiving the generated documentation or
# if some version control system is used.
PROJECT_NUMBER = 1.13.1+dev
PROJECT_NUMBER = 1.13.2+dev
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.

View file

@ -76,18 +76,85 @@ It is now possible to load an autosave in an networked mp game: when an autosave
[/rasection]
[rasection="Default values for variables"]
In variable substitution it's now posible to specify default values for example name="$player_name?Klaus|" will evaluate to 'Klaus' in case the variable player_name is not set.
In variable substitution it's now possible to specify default values for example [tt]name="$player_name?Klaus|"[/tt] will evaluate to 'Klaus' in case the variable [tt]player_name[/tt] is not set.
[/rasection]
[rasection="Custom [effect]s"]
It is now possible to create custom effects with the wesnoth.effects lua table.
It is now possible to create custom effects with the [tt]wesnoth.effects[/tt] lua table.
[/rasection]
[rasection="New [resource] tag similar to mp [modification]s"]
A new tag [resource] was introduced which can contain [event] and [lua] similar to [modification] but its hidden from the user.
[/rasection]
[rasection="New $other_unit variable for some filters"]
A new [tt]$other_unit[/tt] variable is accessible in some unit filters. This can be used in [tt][filter_adjacent][/tt] and similar contexts to create filters that are relative to the main unit. The backstab and leadership abilities have been rewritten to take advantage of this feature, which allows leadership to be implemented by a single macro, [tt]{ABILITY_LEADERSHIP}[/tt]. Although the old [tt]{ABILITY_LEADERSHIP_LEVEL_3}[/tt] etc macros are still available, they merely point to the new one. As a result, anyone who used a leadership level not matching the unit's level (for example, level 4 leadership on a level 3 unit) will find that this no longer works as expected.
[/rasection]
[rasection="New looping and flow control tags"]
A number of new WML tags have been added for different types of loops as well as loop flow control. The new looping tags are [tt][for][/tt], [tt][foreach][/tt], and [tt][repeat][/tt], while the flow control tags are [tt][continue][/tt], [tt][break][/tt], and [tt][return][/tt]. The [tt]{FOREACH}[/tt] and [tt]{REPEAT}[/tt] macros have been altered to make use of these new loops, which fixes an issue whereby the [tt]{REPEAT}[/tt] macro would not work correctly if nested in itself.
[/rasection]
[rasection="WML/Lua compatibility changes and deprecations"]
[list]
[*][tt][advance][/tt] was changed to [tt][advancement][/tt] in modifications; as a result, AMLA definition macros (such as [tt]{AMLA_DEFAULT}[/tt]) can now be used to create units that have already taken certain advancements
[*][tt]{FOREACH}[/tt] and [tt]{NEXT}[/tt] now use [tt][for][/tt] tags; this is only important for users who used one of these tags without the other, such as a custom loop macro closed by [tt]{NEXT}[/tt]
[*]The interface of [tt]wesnoth.synchronize_choice[/tt] for choices from multiple sides (which was introduced in wesnoth 1.13.0) has changed.
[*][tt]wesnoth.get_unit(underlying_id)[/tt] was removed; this was pretty useless since there was no reliable way to obtain the underlying_id
[*]Changed [tt]wesnoth.put_unit[/tt] so that the unit is passed as the first parameter; the original order is still supported, but is deprecated. In addition, calling [tt]wesnoth.put_unit[/tt] without a unit (ie, with just a location) is deprecated in favor of a new [tt]wesnoth.erase_unit[/tt] function.
[*][side] share_view=yes/no, share_maps=yes/no were replaced with share_vision=all/shroud/none
[*]The menu item syntax (eg [tt]&image.png=Peasant=Easy[/tt]) in campaign difficulty and in [message][option] is now deprecated
[/list]
[/rasection]
==========
KNOWN BUGS
==========
[raissue="Newly introduced in 1.13.x"]
[b]General bugs:[/b]
[list]
[*] The mp server has trouble with "Local" player types in campaigns. We have decided to postpone dealing with this. In the meantime, you might try assigning such sides to the host, or running multiple instances of wesnoth. https://gna.org/bugs/?21965
[*] Text for entry2.
[*]The MP server has trouble with Local player types in campaigns (bug [bug]21965[/bug]). We have decided to postpone dealing with this. In the meantime, you might try assigning such sides to the host, or running multiple instances of Wesnoth.
[*]Replaying turns during MP games with the new feature causes OOS in multiplayer games if side controllers changed during the game.
[*]The game can crash when planning recruits in Planning Mode.
[*][tt][event][/tt] in [tt][unit][/tt], [tt][unit_type][/tt] or [tt][side][/tt] does not work as expected.
[*]Using [tt][set_menu_item][/tt] to change an existing menu items fails in some cases.
[/list]
[/raissue]
[raissue="Carried over from 1.12.x"]
[b]General bugs:[/b]
[list]
[*]Its not possible to clear some default hotkeys with the Clear Hotkey option (bug [bug]21983[/bug]).
[*]Attempting to assign hotkeys including both the Ctrl and Alt modifiers does not work (bug [bug]22219[/bug]).
[/list]
[b]Bugs specific to Microsoft Windows:[/b]
[list]
[*]ClearType font rendering is disabled as it causes glitches (bug [bug]21648[/bug]).
This is likely caused by outdated libraries in the packaging process.
[*]Consecutive line breaks (paragraph breaks) are not rendered as expected (bug [bug]21649[/bug]).
This is likely caused by outdated libraries in the packaging process. There is no built-in workaround available yet.
[/list]
[b]Bugs specific to Apple OS X:[/b]
The following issues affecting Wesnoth on Apple OS X are known and they are pending fixes. Many of them require significant re-engineering that can only be done in 1.13.x development releases later, or cannot be properly addressed due to a lack of experienced OS X coders in our team. Thus, unless someone can contribute patches to address them, it is unlikely that these bugs will be fixed.
[list]
[*]Color cursors are forcibly disabled on this platform due to severe performance issues (bug [bug]18112[/bug]).
[*]The default variable-width font is used instead of a monospace font even where a monospace font is required (bug [bug]23628[/bug]).
[*]Helvetica is used as the default variable-width font instead of DejaVu Sans (bug [bug]23560[/bug]).
[*]Fullscreen mode does not fill the entire screen when maximum resolution is selected in Preferences → Display, and user interface elements are scaled and distorted.
[*]System commands do not work while Wesnoth is running in fullscreen mode (bug [bug]21943[/bug]).
[*]The mouse cursor is not mapped correctly to the game screen contents on Retina displays due to problems with detected vs. real screen resolution mismatches (bug [bug]20332[/bug]).
A workaround is in place making Wesnoth default to 800x600 on OS X regardless of the incorrectly-detected maximum resolution.
[*]Trackpad tap clicking is sometimes not recognized ([url=http://forums.wesnoth.org/viewtopic.php?f=4&t=39788]forum post[/url]).
[*]Unofficial builds with OpenMP support enabled randomly freeze (bug [bug]18144[/bug]).
[*]Consecutive line breaks (paragraph breaks) are not rendered as expected (bug [bug]21649[/bug]).
This is likely caused by outdated libraries in the packaging process. There is no built-in workaround available yet.
[/list]
[/raissue]

107
changelog
View file

@ -1,4 +1,14 @@
Version 1.13.1+dev:
Version 1.13.2+dev:
* Language and i18n:
* Updated translations:
* Miscellaneous and bug fixes:
* Fix the new log code on Windows to actually use Unicode-aware functions
in a couple of places so Wesnoth does not quit on startup when trying to
relocate the log file to a path with Unicode characters (bug #22897,
definitely fixed this time).
* Fix bug #23108: exclude aborted attacks from statistics
Version 1.13.2:
* Add-ons client:
* Warn user if attempting to upload an addon with a version lesser than or
equal to a published version.
@ -25,6 +35,7 @@ Version 1.13.1+dev:
* New animated water.
* New standing animation for the Dwarvish Runesmith
* New generic portraits for the Troll and Troll Whelp
* New game logo
* Language and i18n:
* Updated translations: British English, French, Galician, Hungarian,
Italian, Japanese, Latvian, Polish, RACV, Scottish Gaelic, Slovak, Spanish
@ -36,6 +47,7 @@ Version 1.13.1+dev:
* Changed interface for the wesnoth.synchronize_choice function
* Added support for unit.level field (read only)
* Added support for unit.advancements field (bug #23677)
* Added support for unit.parry and unit.accuracy fields
* Added support for current.event_context.unit_x/y fields (bug #23507)
* Added wesnoth.set_dialog_focus function
* Added wesnoth.set_dialog_visible function
@ -50,7 +62,8 @@ Version 1.13.1+dev:
* Add wesnoth.get_unit(string_id)
* Change wesnoth.message so that it can display translatable strings
* Change wesnoth.put_unit so that the unit is passed as the first parameter
* Add wesnoth.erase_unit, which replaces wesnoth.put_unit when called without a unit
* Add wesnoth.erase_unit, which replaces wesnoth.put_unit when called without
a unit
* Add wesnoth.unit_vision_cost
* Add wesnoth.unit_jamming_cost
* Add methods to proxy unit metatable:
@ -60,6 +73,8 @@ Version 1.13.1+dev:
unit:fcn_name(arguments) instead of as wesnoth.fcn_name(unit, arguments)
* Add wesnoth.races[race_id].traits
* Add wesnoth.unit_types[unit_type_id].traits
* Add optional third argument to wesnoth.match_unit, which is used for
the $other_unit variable in the filter.
* pairs() and ipairs() now work on vconfig userdata objects
* Add helper.get_nth_child
* Add helper.child_count
@ -67,7 +82,12 @@ Version 1.13.1+dev:
* wesnoth.remove_time_area no longer takes a comma-separated list of time
area ids.
* wesnoth.add_time_area no longer warns about commas in time area ids
* unit.variables can now access sub variables.
* Added wesnoth.get/set_side_variable to store variables in a [side]-
* Added read/write fields carryover_bonus/carryover_add/carryover_percentage
in lua sides.
* Music and sound effects:
* Updated music track "Frantic", new one by Stephen Rozanc.
* New sounds: dwarf hit and die, ink, mud fist and glob.
* Terrains:
* Removed unit elevation from N-S hanging bridges
@ -80,8 +100,10 @@ Version 1.13.1+dev:
by terrains without a minimap image (symbol_image) such as those from the
Special category in the editor (Impassable Overlay, etc.).
* User interface:
* It is now possible to switch from replay directly into normal play (bug #23833).
* The game now shows a notification on remote clients if a sides takes very long to do a local choice (bug #23297).
* It is now possible to switch from replay directly into normal play
(bug #23833).
* The game now shows a notification on remote clients if a sides takes very
long to do a local choice (bug #23297).
* It is now possible to replay a turn in mp games by loading autosaves.
* The game now asks for confirmation when attempting to quit during the game.
* Add "unit status=..." command to debug console to add/remove unit statuses
@ -91,7 +113,8 @@ Version 1.13.1+dev:
* Widgets which are children of invisible or hidden parents can no longer
be interacted with even if the children themselves are still internally
visible.
* Added support for tristate buttons/toggle panels or more generally n-state buttons/toggle panels
* Added support for tristate buttons/toggle panels or more generally
n-state buttons/toggle panels
* Added a version dialog button to the title screen, replacing the Paths
option previously found in Preferences -> General.
* WML engine:
@ -100,21 +123,31 @@ Version 1.13.1+dev:
* Added enable_if= to mod and era events
* Added $varname?default_value| in variable substitution
* Fixed side_for= parameter in [message]s with input
* New actionwml tag [on_undo] contains actionswml that is executed when the current action is undone
* New actionwml tag [unsynced] executes its contents in an unsynced context where for example [set_variable]rand= will return unsynced results
* [campaign] now supports [event] subtags which are added to every scenario of the campaign similar to [modification] [event]s
* New actionwml tag [on_undo] contains actionswml that is executed when the
current action is undone
* New actionwml tag [unsynced] executes its contents in an unsynced context
where for example
[set_variable]rand= will return unsynced results
* [campaign] now supports [event] subtags which are added to every scenario
of the campaign similar to [modification] [event]s
* Added support for mod_x,mod_y= in [terrain_graphics].
* Added support for has_flag= in terrain graphics [variant].
* Added category= to [label] - allows grouping labels so that players can
show/hide them
* Add female_text= to [animate_unit] and [unstore_unit] for easier translating
* AMLAs in [modifications] now use [advancement] tags instead of [advance] tags.
This means you can add an AMLA to placed unit by simply using its definition macro,
for example {AMLA_DEFAULT}.
* [get/set_global_variable]'s side= attribute now defaults to "global" (bug #23686)
* [team] share_view=yes/no, share_maps=yes/no was replaced with share_vision=all/shroud/none
* Add exclude_amla= key in [advancement] which disables the advancment if the unit
has already taken certain other advancements.
* Add female_text= to [animate_unit] and [unstore_unit] for easier
translating
* Add female_message= to [message] for easier translating of lines spoken by
generic units
* AMLAs in [modifications] now use [advancement] tags instead of [advance]
tags.
This means you can add an AMLA to a placed unit by simply using its
definition macro, for example {AMLA_DEFAULT}.
* [get/set_global_variable]'s side= attribute now defaults to "global"
(bug #23686)
* [team] share_view=yes/no, share_maps=yes/no was replaced with
share_vision=all/shroud/none
* Add exclude_amla= key in [advancement] which disables the advancment if the
unit has already taken certain other advancements.
* The WML preprocessor now writes warnings to stderr for macros redefined
without #undef, to help detect unintentional name clashes.
* Fix macro definition line numbers being offset by 1 in WML preprocessor
@ -125,22 +158,24 @@ Version 1.13.1+dev:
containers/arrays).
* Added new possibilities for [effect]:
* apply_to=alignment - change a unit's alignment
* apply_to=attacks_left - change a unit's attacks per turn
* apply_to=max_attacks - change a unit's attacks per turn
* apply_to=recall_cost - change a unit's recall cost
* apply_to=vision, apply_to=jamming - change a unit's vision/jamming points
* apply_to=new_advancement - add new advancement possibilities (either units
or AMLAs)
* apply_to=remove_advancement - remove advancement possibilities (either units
or AMLAs)
* apply_to=new_advancement - add new advancement possibilities (either
units or AMLAs)
* apply_to=remove_advancement - remove advancement possibilities (either
units or AMLAs)
* apply_to=attack - add set_ versions of all existing increase_ keys
* apply_to=attack - add increase_movement_used and set_movement_used to change the
number of movement points the attack consumes
* apply_to=attack - add increase_movement_used and set_movement_used to
change the number of movement points the attack consumes
* Ability to patch movetypes to account for custom terrains or damage types
* Removed y offset by -1 from [message]'s scroll-to-unit logic.
* Add [found_item] ConditionalWML to check if an [object]id= ActionWML has been taken
* Add [found_item] ConditionalWML to check if an [object]id= ActionWML has
been taken
* New auto-stored WML variable $other_unit usable in the following contexts:
* [filter_adjacent] - $other_unit refers to the $this_unit of the enclosing filter
(In weapon specials and unit abilities, the unit owning the ability.)
* [filter_adjacent] - $other_unit refers to the $this_unit of the enclosing
filter (In weapon specials and unit abilities, the unit owning the
ability.)
* [filter_self/opponent/attacker/defender] (weapon specials)
$other_unit refers to the other unit in the attack
(eg in [filter_self], it's the opponent)
@ -150,18 +185,31 @@ Version 1.13.1+dev:
(This is useful mostly in conjunction with variable substitution.)
These operators are applied after the existing '-' operator that takes the
opposite direction.
* Adjacency filters in abilities and weapon specials now support count= and is_enemy=
* Adjacency filters in abilities and weapon specials now support count= and
is_enemy=
* New implementations of backstab and leadership specials using $other_unit.
In particular, leadership is now a single macro and it is not supported to
give a unit a leadership ability of a different level (eg level 4
leadership on level 2 unit). The backstab= key is deprecated.
* Add new looping tags: [for], [foreach], [repeat]
* Add new flow control tags: [break], [continue], [return]
* Added a new [difficulty] tag for defining a campaign's difficulty level
* Add new syntax for [option], similar to the new difficulty syntax
* Add [test_condition] ActionWML that tells why a conditional failed (for debugging)
* Add [test_condition] ActionWML that tells why a conditional failed (for
debugging)
* Add [remove_time_area] WML tag which takes a comma-separated list of time
area ids.
* [time_area] no longer warns about commas in ids when not using remove=yes.
* Add [random_placement] ActionWML
* In [set_variables] you can now mix [value] and [literal], and even [split]
* Add [resource] tag which contains [event] and [lua] tags smimilar to
[modification] but hidden from the user.
* Removed name= attribute in [side].
* Add support for [endlevel] bonus=<number>
* Editor:
* Added Category field and color sliders to the Edit Label panel.
* Miscellaneous and bug fixes:
* Fix $this_unit auto-stored variable not working correctly in most SUFs
* Made Documents\My Games\WesnothX.Y the default user config+data dir on
Windows to replace the broken <current working dir>\userdata default that
has never been acceptable practice. Portable installs are now required to
@ -200,7 +248,8 @@ Version 1.13.1+dev:
eg if an add-on tries to set an invalid variable
* Fixed bug 23060: unit stat tooltips do not show.
* wmllint, wmlscope, wmlindent and wmllint-1.4 now run on Python 3
* Text boxes tab completion now lists friends and whisperer nicks for easier answer (bug #9742)
* Text boxes tab completion now lists friends and whisperer nicks for easier
answer (bug #9742)
* Avoid crash when planning moves on planned recruits (bug #18637)
* Fixed cases of wrong unit type used in planning moves (bug #20299)
* Fixed hang when attempting to make a screenshot from a non-existent map via

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 92 KiB

View file

@ -169,56 +169,38 @@
boolean_not_equals=yes
[/variable]
[/filter_condition]
{VARIABLE_OP number_of_guards rand "0..2"}
{VARIABLE guard_i 1}
[while]
[variable]
name=guard_i
less_than_equal_to=$number_of_guards
[/variable]
[do]
[store_locations]
[filter_adjacent_location]
x,y=$x1,$y1
[/filter_adjacent_location]
[not]
[filter]
[/filter]
[/not]
variable=possible_guard_locations
[/store_locations]
{IF_VAR possible_guard_locations.length greater_than 0 (
[then]
{VARIABLE_OP random_location_index rand "0..$($possible_guard_locations.length - 1)"}
[move_unit_fake]
side=2
type=Goblin Spearman
x=$x1,$possible_guard_locations[$random_location_index].x
y=$y1,$possible_guard_locations[$random_location_index].y
[/move_unit_fake]
[unit]
id=guard_$x1|_$y1|_$guard_i
name= _ "Villager"
type=Goblin Spearman
side=2
x,y=$possible_guard_locations[$random_location_index].x,$possible_guard_locations[$random_location_index].y
random_traits=yes
[/unit]
[/then]
)}
{VARIABLE_OP guard_i add 1}
[/do]
[/while]
[random_placement]
num_items="$number_of_guards"
allow_less=yes
variable=guard_location
[filter_location]
[filter_adjacent_location]
x,y=$x1,$y1
[/filter_adjacent_location]
[not]
[filter]
[/filter]
[/not]
[/filter_location]
[command]
[move_unit_fake]
side=2
type=Goblin Spearman
x=$x1,$guard_location.x
y=$y1,$guard_location.y
[/move_unit_fake]
[unit]
id=guard_$x1|_$y1|_$guard_location.n
name= _ "Villager"
type=Goblin Spearman
side=2
x,y=$guard_location.x,$guard_location.y
random_traits=yes
[/unit]
[/command]
[/random_placement]
{VARIABLE village_$x1|_$y1|_cleared yes}
# Trigger an easter egg sometime after a third of villages have been taken
@ -268,7 +250,7 @@
[/then]
[/if]
{CLEAR_VARIABLE number_of_guards,guard_i,possible_guard_locations,random_location_index}
{CLEAR_VARIABLE number_of_guards,guard_i,guard_location,random_location_index}
[/event]
[event]

View file

@ -220,74 +220,29 @@
# clump all the ambushers into a single corner of the map.
#define UNDEAD_AMBUSH_AREA SIDE X_SPAN Y_SPAN NUMBER
[store_locations]
x={X_SPAN}
y={Y_SPAN}
terrain=Ss
[random_placement]
variable=ambush_location
num_items={NUMBER}
[filter_location]
x={X_SPAN}
y={Y_SPAN}
terrain=Ss
[filter_adjacent_location]
[not]
terrain=Ss
[/not]
[not]
[filter]
[/filter]
[/not]
[/filter_adjacent_location]
variable=possible_ambush_locations
[/store_locations]
{VARIABLE ambusher 0}
[while]
[variable]
name=ambusher
less_than={NUMBER}
[/variable]
[do]
{RANDOM 1..$possible_ambush_locations.length}
{VARIABLE_OP random sub 1}
# Check if the random location picked already contains an ambusher
# and if it does, we loop again to pick another one until an empty
# one is found.
[if]
[have_unit]
x,y=$possible_ambush_locations[$random].x,$possible_ambush_locations[$random].y
[/have_unit]
[else]
# random_ambusher_type_i is just a counter variable with
# which we point to a given element of the
# random_ambusher_type_table array. Here we make it loop
# over the array continuously.
[if]
[variable]
name=random_ambusher_type_i
less_than=4
[/variable]
[then]
{VARIABLE_OP random_ambusher_type_i add 1}
[/then]
[else]
{VARIABLE random_ambusher_type_i 0}
[/else]
[/if]
# And here we place an ambusher of a type specified by the
# random_ambusher_type_table and random_ambusher_type_i
# variables, thus always having the same ratio of different
# types.
[filter_adjacent_location]
[not]
terrain=Ss
[/not]
[not]
[filter]
[/filter]
[/not]
[/filter_adjacent_location]
[/filter_location]
[command]
{VARIABLE random_ambusher_type_i ("$(($random_ambusher_type_i + 1) % $random_ambusher_type_table.length)")}
[unit]
x,y=$possible_ambush_locations[$random].x,$possible_ambush_locations[$random].y
x,y=$ambush_location.x,$ambush_location.y
type=$random_ambusher_type_table[$random_ambusher_type_i].type
side={SIDE}
role=ambusher
@ -299,7 +254,7 @@
silent=yes
[filter]
x,y=$possible_ambush_locations[$random].x,$possible_ambush_locations[$random].y
x,y=$ambush_location.x,$ambush_location.y
[/filter]
[effect]
@ -321,12 +276,8 @@
[/abilities]
[/effect]
[/object]
{VARIABLE_OP ambusher add 1}
[/else]
[/if]
[/do]
[/while]
[/command]
[/random_placement]
#enddef
# Only the number of ambushers differs by difficulty here.

View file

@ -284,8 +284,10 @@
#define ORC_AMBUSH_AREA SIDE X_SPAN Y_SPAN NUMBER
# Any hill that's completely surrounded by other hills, mountains or
# forest is eligible as an ambush location.
[store_locations]
[random_placement]
variable=ambush_location
num_items={NUMBER}
[filter_location]
x={X_SPAN}
y={Y_SPAN}
terrain=Hh
@ -297,37 +299,8 @@
[/not]
[/filter_adjacent_location]
[/not]
variable=possible_ambush_locations
[/store_locations]
{VARIABLE ambusher 0}
[while]
[variable]
name=ambusher
less_than={NUMBER}
[/variable]
[do]
{RANDOM 1..$possible_ambush_locations.length}
{VARIABLE_OP random sub 1}
# Check if the random location picked already contains an ambusher
# and if it does, we loop again to pick another one until an empty
# one is found.
[if]
[have_unit]
x,y=$possible_ambush_locations[$random].x,$possible_ambush_locations[$random].y
[/have_unit]
[else]
# random_ambusher_type_i is just a counter variable with
# which we point to a given element of the
# random_ambusher_type_table array. Here we make it loop
# over the array continuously.
[/filter_location]
[command]
[if]
[variable]
name=random_ambusher_type_i
@ -349,7 +322,7 @@
# types.
[unit]
x,y=$possible_ambush_locations[$random].x,$possible_ambush_locations[$random].y
x,y=$ambush_location.x,$ambush_location.y
type=$random_ambusher_type_table[$random_ambusher_type_i].type
side={SIDE}
facing=sw
@ -366,7 +339,7 @@
silent=yes
[filter]
x,y=$possible_ambush_locations[$random].x,$possible_ambush_locations[$random].y
x,y=$ambush_location.x,$ambush_location.y
[/filter]
[effect]
@ -388,12 +361,9 @@
[/abilities]
[/effect]
[/object]
{VARIABLE_OP ambusher add 1}
[/else]
[/if]
[/do]
[/while]
[/command]
[/random_placement]
#enddef
# Only the number of ambushers differs by difficulty here.

View file

@ -32,10 +32,7 @@ function wesnoth.wml_actions.replace_map(cfg)
local x1,x2 = string.match(cfg.x, "(%d+)-(%d+)")
local y1,y2 = string.match(cfg.y, "(%d+)-(%d+)")
local header,map = string.match(cfg.map_data, "(.-)\n\n(.*)")
if not map then
map = cfg.map_data
end
local map = cfg.map_data
x1 = tonumber(x1)
y1 = tonumber(y1)

View file

@ -27,17 +27,6 @@
[event]
name=prestart
#ifdef DEBUG_MODE
[set_menu_item]
description="let kalenz arrive" #wmllint: ignore
[command]
[fire_event]
name=kalenz_arrives
[/fire_event]
[/command]
[/set_menu_item]
#endif
[replace_map]
x=9-53
y=9-53
@ -100,18 +89,6 @@
share_view=yes
{PLAYER_GOLD}
[/side]
{STARTING_VILLAGES_ALL 3}
#ifdef MULTIPLAYER
[event]
name=prestart
[capture_village]
side=7
x=26-999
y=1-999
[/capture_village]
[/event]
#endif
{MP_SIDE 2 (
no_leader=yes
@ -255,6 +232,19 @@
[/ai]
[/side]
{STARTING_VILLAGES_ALL 3}
#ifdef MULTIPLAYER
[event]
name=prestart
[capture_village]
side=4
x=1-26
y=1-999
[/capture_village]
[/event]
#endif
# wmllint: recognize Urudin
[event]
name=last breath

View file

@ -1,4 +1,15 @@
#textdomain wesnoth-low
#ifndef MULTIPLAYER
#define PLAYER_GOLD
{GOLD 280 250 220}
{INCOME -2 -2 -2}
#enddef
#else
#define PLAYER_GOLD
{GOLD 90 80 70}
{INCOME -2 -2 -2}
#enddef
#endif
[scenario]
name= _ "The Elvish Treasury"
id=04_The_Elvish_Treasury
@ -51,14 +62,13 @@ Chapter Two"
side=1
{KALENZ}
{PLAYABLE}
# no_leader=yes
type=Elvish Captain
save_id=Kalenz
fog=no
shroud=no
recruit=""
{PLAYER_GOLD}
#ifndef MULTIPLAYER
{PLAYER_GOLD_04}
[unit]
{LANDAR}
extra_recruit=Elvish Fighter, Elvish Archer, Elvish Scout
@ -66,35 +76,31 @@ Chapter Two"
y=29
[/unit]
#else
{MULTIPLAYER_GOLD_04}
#endif
[/side]
#Landar's side
{MP_SIDE 2 (
no_leader=yes
{LANDAR}
type=Elvish Ranger
fog=no
shroud=no
save_id=Landar
{PLAYABLE}
{MULTIPLAYER_GOLD_04}
{PLAYER_GOLD}
extra_recruit=Elvish Fighter, Elvish Archer, Elvish Scout
)}
{MP_SIDE 3 (
no_leader=yes
{CLEODIL}
# {CLEODIL}
type=Elvish Shyde
save_id=Cleodil
{PLAYABLE}
fog=no
shroud=no
#TODO maybe give Cleodil less money in that scenario?
{MULTIPLAYER_GOLD_04}
extra_recruit=Elvish Shaman, Elvish Scout, Wose
{PLAYER_GOLD}
)}
[side]
@ -180,7 +186,6 @@ Chapter Two"
description= _ "Death of Landar"
condition=lose
[/objective]
{TURNS_RUN_OUT}
[gold_carryover]
@ -190,7 +195,6 @@ Chapter Two"
#enddef
[event]
#Used this instead of prestart since global variables aren't synced before
name=start
[objectives]
{OBJECTIVES}
@ -202,52 +206,6 @@ Chapter Two"
{GET_PERSISTENT_RECALLS_FROM2 4 1 LoW_Chapter_One landar}
{GET_PERSISTENT_GOLD_FROM2 4 1 LoW_Chapter_One landar_gold}
#endif
[recall]
id=Kalenz
x=7
y=29
[/recall]
[if]
[not]
[have_unit]
id=Kalenz
[/have_unit]
[/not]
[then]
[unit]
{KALENZ}
extra_recruit=Elvish Fighter, Elvish Archer, Elvish Scout
type=Elvish Captain
x=7
y=29
[/unit]
[/then]
[/if]
[recall]
id=Landar
x=16
y=29
[/recall]
[if]
[not]
[have_unit]
id=Landar
[/have_unit]
[/not]
[then]
[unit]
{LANDAR}
extra_recruit=Elvish Fighter, Elvish Archer, Elvish Scout
side=4
type=Elvish Ranger
x=16
y=29
[/unit]
[/then]
[/if]
# wmllint: who RECALL_LOYALS is Huraldur
#{RECALL_LOYALS}
# Kalenz's pals
@ -277,15 +235,17 @@ Chapter Two"
[/recall]
#ifdef MULTIPLAYER
# TODO: this is the only unit that player3 controls until
# Cleodil is freed by the other players. We should make this
# scenario more intesting for player 3 during this time.
# Maybe give him some units that managed to escape and want to help?
{UNIT 3 (Elvish Ranger) 23 24 (role=liberator)}
#else
#endif
[allow_extra_recruit]
id=Kalenz,Landar
extra_recruit=Elvish Scout
[/allow_extra_recruit]
#endif
[redraw]
[/redraw]
@ -387,7 +347,7 @@ Chapter Two"
[event]
name=moveto
[filter]
side=1,4
side=1,2
x=11
y=11
[/filter]
@ -464,3 +424,4 @@ Chapter Two"
{campaigns/Legend_of_Wesmere/utils/deaths.cfg}
[/scenario]
#undef PLAYER_GOLD

View file

@ -33,10 +33,8 @@
{EXTRA_SCENARIO_MUSIC the_city_falls.ogg}
{EXTRA_SCENARIO_MUSIC knolls.ogg}
{STARTING_VILLAGES_ALL 2}
{STARTING_VILLAGES 3 20}
# {LOW_PRESTART}
{STARTING_VILLAGES_ALL 4}
{STARTING_VILLAGES 5 20}
[story]
[part]
@ -211,7 +209,7 @@
#TODO maybe switch the both win objectivs
[objective]
description= _ "Enter the Saurian Treasury and leave with the gold"
description= _ "Enter the Saurian Treasury with a horse and leave with the gold"
condition=win
[/objective]
{ALTERNATIVE_OBJECTIVE (_ "Defeat all enemy leaders")}

View file

@ -19,8 +19,6 @@
{EXTRA_SCENARIO_MUSIC legends_of_the_north.ogg}
{EXTRA_SCENARIO_MUSIC northerners.ogg}
# {LOW_PRESTART}
[story]
[part]
story= _ "To evade the saurians blocking the eastern approaches to Wesmere, Kalenz and his war-band moved to enter Wesmere Forest from a different direction..."

View file

@ -189,7 +189,7 @@
previous_save_id=Landar
x=29
y=32
{GOLD 400 300 200}
{GOLD 133 100 65}
)}
{MP_SIDE 6 (
@ -199,7 +199,7 @@
previous_save_id=Cleodil
x=7
y=36
{GOLD 400 300 200}
{GOLD 133 100 65}
)}
[event]

View file

@ -21,8 +21,6 @@
{EXTRA_SCENARIO_MUSIC battle.ogg}
#TODO redo music playlist
# {LOW_PRESTART}
[story]
#ifdef MULTIPLAYER
[part]

View file

@ -22,8 +22,6 @@
{EXTRA_SCENARIO_MUSIC northern_mountains.ogg}
{EXTRA_SCENARIO_MUSIC wanderer.ogg}
# {LOW_PRESTART}
[story]
[part]
story= _ "Leaving Arkan-Thoria behind, Kalenz and his band ventured into the dangerous mountains of Thoria..."

View file

@ -19,8 +19,6 @@
{EXTRA_SCENARIO_MUSIC suspense.ogg}
{EXTRA_SCENARIO_MUSIC into_the_shadows.ogg}
# {LOW_PRESTART}
[story]
[part]
story= _ "Quickening their pace, the elves and dwarves raced towards the smoke..."

View file

@ -40,7 +40,7 @@
share_view=yes
no_leader=yes
{PLAYER_TEAM}
save_id=Kalenz
[unit]
{KALENZ}
x=12
@ -66,40 +66,40 @@
[side]
side=2
no_leader=yes
save_id=Landar
{PLAYABLE}
[unit]
{LANDAR}
x=11
y=1
[/unit]
fog=yes
share_view=yes
{PLAYER_TEAM}
[/side]
[side]
side=3
no_leader=yes
save_id=Olurf
{PLAYABLE}
[unit]
{OLURF}
x=11
y=1
[/unit]
fog=yes
share_view=yes
{PLAYER_TEAM}
[/side]
[side]
side=4
no_leader=yes
save_id=Cleodil
{PLAYABLE}
[unit]
{CLEODIL}
x=11
y=1
[/unit]
fog=yes
share_view=yes
{PLAYER_TEAM}
[/side]
#endif

View file

@ -32,16 +32,6 @@
[/event]
#enddef
#define PLAYER_GOLD_04
{GOLD 280 250 220}
{INCOME -2 -2 -2}
#enddef
#define MULTIPLAYER_GOLD_04
{GOLD 90 80 70}
{INCOME -2 -2 -2}
#enddef
#define FILTER_LOYALS
[filter_wml]
upkeep="loyal"

View file

@ -14,7 +14,7 @@
{CAMPAIGN_DIFFICULTY EASY "units/human-loyalists/spearman.png~RC(magenta>red)" ( _ "Spearman") ( _ "Challenging")} {DEFAULT_DIFFICULTY}
{CAMPAIGN_DIFFICULTY NORMAL "units/human-loyalists/swordsman.png~RC(magenta>red)" ( _ "Swordsman") ( _ "Difficult")}
{CAMPAIGN_DIFFICULTY HARD "units/human-loyalists/royalguard.png~RC(magenta>red)" ( _ "Royal Guarde") ( _ "Nightmare")}
{CAMPAIGN_DIFFICULTY HARD "units/human-loyalists/royalguard.png~RC(magenta>red)" ( _ "Royal Guard") ( _ "Nightmare")}
description= _ "For the people of Dwarven Doors the choice was stark: either drudge as downtrodden slaves for the orcs until the end of their brief and miserable lives, or risk all for freedom and rise up against their cruel overlords. Little did they suspect that their struggle would be the hinge of great events that might restore the Northlands to the glory they had once known.

View file

@ -2,8 +2,8 @@ Mm, Mm, Mm, Mm, Mm, Hh^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^F
Mm, Mm, Mm, Mm^Vhh, Mm, Hh^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gg^Efm, Ce, Gg^Efm, Gs^Fp, Gs^Fp, Gs^Fp, Gg^Efm, Gg^Efm
Mm, Mm, Mm, Mm, Hh, Hh^Fp, Gs^Fp, Gg^Ve, Gs^Fp, Gs^Fp, Gg^Fet, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gg^Fet, Gs^Fp, Gs^Fp, Ce, 1 Ke, Ce, Gs^Fp, Gs^Fp, Gg^Ve, Gs^Fp, Gs^Fp
Mm, Mm, Mm, Mm, Ce, Ce, Ce, Gs^Fp, Gg^Efm, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Gg^Ve, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Ce, Ce, Ce, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp
Mm, Mm, Mm, Mm^Vhh, Ce, 7 Ke, Ce, Gg^Efm, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Ce, Ce, Ce, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Ce, Gs^Fp, Ce, Gs^Fp, Gs^Fp, Hh^Fp, Hh, Hh^Fp
Mm, Mm, Mm, Hh, Ce, Ce, Ce, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Ce, 9 Ke, Ce, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gg, Gg, Hh, Hh, Hh, Hh, Hh
Mm, Mm, Mm, Mm^Vhh, Ce, 4 Ke, Ce, Gg^Efm, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Ce, Ce, Ce, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Ce, Gs^Fp, Ce, Gs^Fp, Gs^Fp, Hh^Fp, Hh, Hh^Fp
Mm, Mm, Mm, Hh, Ce, Ce, Ce, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Ce, 5 Ke, Ce, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gg, Gg, Hh, Hh, Hh, Hh, Hh
Mm, Mm, Hh, Hh, Gg, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gg^Fet, Gs^Fp, Ce, Ce, Ce, Gs^Fp, Gg, Gg, Gg, Gg, Gs^Fp, Gg, Mm, Mm, Mm, Mm^Vhh, Mm
Mm, Mm^Vhh, Hh, Hh, Gg, Gs^Fp, Gs^Fp, Gs^Fp, Gg^Fet, Gs^Fp, Gs^Fp, Gs^Fp, Gg^Ve, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Gg^Fet, Gs^Fp, Hh, Mm, Mm, Mm, Mm
Hh^Fp, Hh^Fp, Gs^Fp, Gg, Gs^Fp, Gg, Gs^Fp, Gs^Fp, Gs^Fp, Gg^Fet, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gg^Fet, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Gs^Fp, Hh, Mm, Mm, Mm, Mm

View file

@ -223,7 +223,7 @@
[gold_carryover]
bonus=yes
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]
@ -349,6 +349,7 @@
[endlevel]
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]

View file

@ -210,7 +210,7 @@
[gold_carryover]
bonus=no
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
@ -669,7 +669,7 @@
{TURNS_RUN_OUT}
[gold_carryover]
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]
@ -712,6 +712,7 @@
[endlevel]
result=victory
bonus=no
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]

View file

@ -104,7 +104,7 @@
[gold_carryover]
bonus=no
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]
@ -151,6 +151,7 @@
[endlevel]
result=victory
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]

View file

@ -213,7 +213,7 @@
[gold_carryover]
bonus=yes
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]
@ -552,7 +552,7 @@
# TODO: Camerin might be dead by now
[message]
speaker=Camerin
message= _ "Out of all of a necromancers creations, I must say those things are the most tortured and vile. They have an insatiable hunger for flesh and mindlessly shrug of all manner of damage to get it. Even my fire bolts have a slightly lesser effect on them."
message= _ "Out of all of a necromancers creations, I must say those things are the most tortured and vile. They have an insatiable hunger for flesh and mindlessly shrug off all manner of damage to get it. Even my fire bolts have a slightly lesser effect on them."
[/message]
[message]
@ -664,6 +664,7 @@
[endlevel]
result=victory
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
# [/then]
# [/if]

View file

@ -366,7 +366,7 @@
[gold_carryover]
bonus=no
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]
@ -423,7 +423,7 @@
[gold_carryover]
bonus=no
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[note]
@ -2691,6 +2691,7 @@
[endlevel]
result=victory
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]

View file

@ -92,7 +92,7 @@
[gold_carryover]
bonus=no
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]

View file

@ -547,6 +547,7 @@
[endlevel]
result=victory
bonus=no
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]

View file

@ -337,7 +337,7 @@
[gold_carryover]
bonus=yes
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]
@ -709,7 +709,7 @@
[gold_carryover]
bonus=yes
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]
@ -880,6 +880,12 @@
speaker=Tallin
message= _ "Great. Now lets get back to the caves and start planning the best way teach those orcs a lesson they will never forget!"
[/message]
[endlevel]
result=victory
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]
# And if the allied AI dies player loses

View file

@ -45,7 +45,7 @@
[gold_carryover]
bonus=yes
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]

View file

@ -276,7 +276,7 @@
[gold_carryover]
bonus=yes
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[note]
@ -365,6 +365,7 @@
[endlevel]
result=victory
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]

View file

@ -417,7 +417,7 @@
[gold_carryover]
bonus=yes
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]
@ -459,6 +459,7 @@
[endlevel]
result=victory
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]

File diff suppressed because it is too large Load diff

View file

@ -1,115 +1,139 @@
#textdomain wesnoth-nr
[scenario]
# Basic scenario data, music, turn limit, default time schedule
id=11a_The_Eastern_Flank
name= _ "The Eastern Flank"
map_data="{campaigns/Northern_Rebirth/maps/11a_The_Eastern_Flank.map}"
{DEFAULT_SCHEDULE}
{TURNS 53 50 47}
next_scenario=12a_Get_the_Gold
{INTRO_AND_SCENARIO_MUSIC "northerners.ogg" "loyalists.ogg"}
{EXTRA_SCENARIO_MUSIC "battle.ogg"}
{EXTRA_SCENARIO_MUSIC "frantic.ogg"}
{DEFAULT_SCHEDULE}
{INTRO_AND_SCENARIO_MUSIC "northerners.ogg" "loyalists.ogg"}
{EXTRA_SCENARIO_MUSIC "battle.ogg"}
{EXTRA_SCENARIO_MUSIC "frantic.ogg"}
# Short story introduction
# wmllint: local spelling Angthurim
[story]
[part]
story= _ "After breaking out of their encirclement, the party continued in pursuit of the trolls."
[/part]
[part]
# wmllint: local spelling Angthurim
story= _ "Following the bank of a river, they soon entered a valley. At the mouth of the valley there loomed the massive orcish fortress of Angthurim."
[/part]
[/story]
{NR_TRACK {RECOVERY_STAGE5}}
# Players side
# wmllint: validate-off
[side]
type=Lieutenant
id=Tallin
name=_ "Tallin"
canrecruit=yes
side=1
controller=human
recruit=Peasant,Woodsman,Thug,Poacher,Spearman,Bowman,Gryphon,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Footpad
team_name=knalgans
user_team_name=_"Alliance"
[/side]
user_team_name= _ "Alliance"
# wmllint: recognize Tallin
{CHARACTER_STATS_TALLIN}
[/side]
# wmllint: validate-on
{STARTING_VILLAGES 1 6}
# Opposing AIs, trolls, [ai] keys force it to utilise full recall list
[side]
side=2
controller=ai
recruit=Troll Whelp,Troll,Troll Rocklobber
{GOLD 600 700 800}
{INCOME 35 45 55}
team_name=orcs
user_team_name= _ "Orcs"
type=Troll Warrior
name= _ "Gore"
id=Gore
canrecruit=yes
side=2
{GOLD 600 700 800}
{INCOME 35 45 55}
recruit=Troll Whelp,Troll,Troll Rocklobber
team_name=orcs
user_team_name=_"Orcs"
[ai]
recruitment_ignore_bad_movement=yes
recruitment_ignore_bad_combat=yes
[/ai]
[unit]
type=Orcish Sovereign
id=Rakshas
profile=portraits/Rakshas.png
name= _ "Rakshas"
x,y=7,15
[/unit]
{GENERIC_UNIT () "Orcish Warlord" 8 14}
{GENERIC_UNIT () "Orcish Warlord" 6 14}
[/side]
# Orcs
[side]
side=3
controller=ai
recruit=Orcish Grunt,Orcish Warrior,Orcish Archer,Orcish Crossbowman,Wolf Rider,Orcish Assassin
{GOLD 500 600 700}
{INCOME 35 45 55}
team_name=orcs
user_team_name= _ "Orcs"
{FLAG_VARIANT6 ragged}
type=Orcish Warlord
id=Carron
name= _ "Carron"
canrecruit=yes
side=3
[/side]
[side]
side=4
controller=ai
recruit=Orcish Grunt,Orcish Warrior,Orcish Archer,Orcish Crossbowman,Wolf Rider,Orcish Assassin
{GOLD 500 600 700}
{INCOME 35 45 55}
team_name=orcs
user_team_name=_"Orcs"
user_team_name= _ "Orcs"
{FLAG_VARIANT6 ragged}
[/side]
[side]
type=Orcish Warlord
id=Rash
name= _ "Rash"
canrecruit=yes
side=4
[/side]
[side]
side=5
controller=ai
recruit=Orcish Grunt,Orcish Warrior,Orcish Archer,Orcish Crossbowman,Wolf Rider,Orcish Assassin
{GOLD 500 600 700}
{INCOME 35 45 55}
team_name=orcs
user_team_name=_"Orcs"
user_team_name= _ "Orcs"
{FLAG_VARIANT6 ragged}
[/side]
[side]
type=Orcish Warlord
id="Al'Mar"
name= _ "AlMar"
canrecruit=yes
side=5
[/side]
[side]
side=6
controller=ai
recruit=Orcish Grunt,Orcish Warrior,Orcish Archer,Orcish Crossbowman,Wolf Rider,Orcish Assassin
{GOLD 500 600 700}
{INCOME 35 45 55}
team_name=orcs
user_team_name=_"Orcs"
user_team_name= _ "Orcs"
{FLAG_VARIANT6 ragged}
[/side]
[side]
type=Orcish Warlord
id="Ha'Tang"
name= _ "HaTang"
canrecruit=yes
side=6
recruit=Orcish Grunt,Orcish Warrior,Orcish Archer,Orcish Crossbowman,Wolf Rider,Orcish Assassin
{GOLD 500 600 700}
{INCOME 35 45 55}
team_name=orcs
user_team_name=_"Orcs"
{FLAG_VARIANT6 ragged}
[/side]
# Krash may not actually still be alive at this point, but setting up
@ -117,18 +141,21 @@
# list if he is.
[side]
side=7
type=Drake Burner
id=Krash
name= _ "Krash"
canrecruit=yes
controller=human
save_id=Krash
{GOLD 250 200 150}
recruit=Drake Fighter,Drake Glider,Drake Burner,Drake Clasher
team_name=knalgans
user_team_name=_"Alliance"
controller=human
user_team_name= _ "Alliance"
type=Drake Burner
id=Krash
name= _ "Krash"
canrecruit=yes
[/side]
{STARTING_VILLAGES 1 6}
# Heres where we edit out Krash's side if he's dead.
[event]
name=prestart
@ -143,11 +170,13 @@
[kill]
side=7
[/kill]
[terrain]
x=29,29,30,30,30,31,31,31,32,32
y=6,7,5,6,7,6,7,8,6,7
terrain=Mm
[/terrain]
[gold]
side=1
amount=200
@ -164,49 +193,48 @@
name=start
{RECALL_SUPPORTER}
[recall]
id=Abhai
[/recall]
[recall]
id=Camerin
[/recall]
[recall]
id=Father Morvin
[/recall]
[recall]
id=Sister Thera
[/recall]
[recall]
id=Elenia
[/recall]
[recall]
id=Eryssa
[/recall]
[recall]
id=Stalrag
[/recall]
[recall]
id="Ro'Arthian"
[/recall]
[recall]
id="Ro'Sothian"
[/recall]
[unit]
type=Orcish Sovereign
id=Rakshas
profile=portraits/Rakshas.png
name= _ "Rakshas"
x=7
y=15
side=2
[/unit]
{GENERIC_UNIT 2 "Orcish Warlord" 8 14}
{GENERIC_UNIT 2 "Orcish Warlord" 6 14}
[message]
speaker=Tallin
message= _ "Gods of Light! Look at that fortress. The castle Angthurim is even grimmer than its reputation."
[/message]
# Hidel part takes place only if Eryssa is alive
[if]
[have_unit]
@ -217,14 +245,14 @@
speaker=Eryssa
message= _ "I was not idle in my captivity; I watched, and listened, and learned. The hints I got from my guards boastings and foul jests have been confirmed by our scouts; Angthurim is the linchpin of their entire eastern flank. If we could reduce it, their defense would be near to collapse."
[/message]
[unit]
side=1
type=Elvish Marshal
id=Hidel
name= _ "Hidel"
profile=portraits/Hidel.png
x=33
y=13
x,y=33,13
[/unit]
[/then]
[else]
@ -234,73 +262,89 @@
[/message]
[/else]
[/if]
[message]
role=Supporter
message= _ "Hey, look who is here!"
[/message]
[message]
speaker=Rakshas
message= _ "Where is my gold?!"
[/message]
[message]
speaker=Tallin
message= _ "Its Rakshas!"
[/message]
[message]
speaker=Gore
message= _ "Right here, Master."
[/message]
[message]
speaker=Rakshas
message= _ "Ahhhhh, very good, my loyal servant. You will be richly rewarded for this! Tell me, what news do you have on that human vermin that has so persistently evaded my clutches?"
[/message]
[message]
speaker=Gore
message= _ "We trapped him and his pitiful band of followers. By now they will have been mashed to paste and fed to the whelps."
[/message]
[message]
speaker=Rakshas
message= _ "Hahahaha! Very g—"
[/message]
[message]
speaker=Tallin
message= _ "<big>RAKSHAS!!</big>"
[/message]
[message]
speaker=Rakshas
message= _ "What?! YOU! YOU ANNOYING, DISGUSTING LITTLE VERMIN! DONT YOU KNOW HOW TO DIE?!"
[/message]
[message]
speaker=Tallin
message= _ "Foul one, the only one who will be dying here is you and anyone who comes between us. Stand and fight!"
[/message]
[message]
speaker=Rakshas
message= _ "Bah! I have better things to do than stamp out your insignificant life. Generals, kill him and bring me his head!"
[/message]
[kill]
race=orc
side=2
fire_event=no
[/kill]
[move_unit_fake]
type=Orcish Sovereign
side=2
x=7,7,7,7,7,7,8,8,8,7,7,8,9,9,9.9,10,10
y=16,17,18,19,20,21,21,22,23,24,25,25,26,27,28.29,29,30
[/move_unit_fake]
[move_unit_fake]
type=Orcish Warlord
side=2
x=7,7,7,7,7,7,8,8,8,7,7,8,9,9,9.9,10,10
y=16,17,18,19,20,21,21,22,23,24,25,25,26,27,28.29,29,30
[/move_unit_fake]
[move_unit_fake]
type=Orcish Warlord
side=2
x=7,7,7,7,7,7,8,8,8,7,7,8,9,9,9.9,10,10
y=16,17,18,19,20,21,21,22,23,24,25,25,26,27,28.29,29,30
[/move_unit_fake]
[if]
[have_unit]
id=Eryssa
@ -310,45 +354,55 @@
speaker=Tallin
message= _ "Blast it! The coward has fled. Eryssa, your elves are good at moving quickly through the forests. Do you think they can overtake and pin him down while we deal with this fortress?"
[/message]
[message]
speaker=Eryssa
message= _ "Hidel?"
[/message]
[message]
speaker=Hidel
message= _ "Easily, princess. We shall move unseen through the trees, overtake him, and put an end to his flight."
[/message]
[message]
speaker=Eryssa
message= _ "Then do it. I shall stay with Tallin and... um... because he could use my assistance."
[/message]
[message]
speaker=Tallin
message= _ "(<i>Blushes slightly</i>)"
[/message]
[message]
speaker=Sister Thera
message= _ "(<i>Wink wink</i>)"
[/message]
[message]
speaker=Hidel
message= _ "(<i>Raises eyebrow</i>) Very well, princess."
[/message]
[kill]
id=Hidel
[/kill]
[move_unit_fake]
type=Elvish Marshal
side=1
x=32,31,30,29,28,27,26,26,26,26,26,26,25,24,23,23,23,23,23,23,23,23,23
y=13,14,14,14,14,15,15,16,17,18,19,20,21,21,22,23,24,25,26,27,28,29,30
[/move_unit_fake]
[move_unit_fake]
type=Elvish Scout
side=1
x=32,31,30,29,28,27,26,26,26,26,26,26,25,24,23,23,23,23,23,23,23,23,23
y=13,14,14,14,14,15,15,16,17,18,19,20,21,21,22,23,24,25,26,27,28,29,30
[/move_unit_fake]
[move_unit_fake]
type=Elvish Avenger
side=1
@ -361,6 +415,7 @@
speaker=Tallin
message= _ "Blast it. The coward has fled. Quickly men, we must storm this fortress before he can spend that gold."
[/message]
[message]
speaker=Stalrag
message= _ "Aye! Down wi the orcs!"
@ -372,12 +427,14 @@
speaker=Tallin
message= _ "RoArthian, send a message to Hamel. Tell him its time."
[/message]
[move_unit_fake]
type=Gryphon
side=1
x=32,31
y=9,1
[/move_unit_fake]
[delay]
time=500
[/delay]
@ -387,15 +444,19 @@
x=31,31,31,31,31,31,31,31,31,32
y=1,2,3,4,5,6,7,8,9,9
[/move_unit_fake]
{GENERIC_UNIT 1 "Gryphon" 32 9}
[message]
speaker="Ro'Arthian"
message= _ "Its done."
[/message]
[message]
speaker=Tallin
message= _ "Very well. Forward! Victory or death!"
[/message]
[message]
speaker=Krash
message= _ "Come on boys, lets give it to em!"
@ -425,12 +486,11 @@
[gold_carryover]
bonus=yes
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]
# Flavour event
[event]
name=turn 2
@ -438,14 +498,17 @@
speaker=Gore
message= _ "Move, you stupid orcs! I am trying to recruit here!"
[/message]
[message]
speaker=Rash
message= _ "Suit yourself, you dumb troll!"
[/message]
[message]
speaker=Sister Thera
message= _ "Awww, arent they the most loving, sharing bunch of orcs you have ever seen?"
[/message]
[message]
speaker=Eryssa
message= _ "(<i>Snicker</i>)"
@ -470,8 +533,10 @@
speaker=Tallin
message= _ "Now let us make haste to rescue Hidel. I am uneasy for him; some of those bodyguards Rakshas keeps are fell fighters."
[/message]
[endlevel]
result=victory
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/then]
[else]
@ -479,9 +544,11 @@
speaker=Tallin
message= _ "Now to settle scores with Rakshas once and for all!"
[/message]
[endlevel]
result=victory
next_scenario=13a_Showdown
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/else]
[/if]

View file

@ -1,22 +1,21 @@
#textdomain wesnoth-nr
[scenario]
# Basic scenario data, music, default time schedule, length
id=12a_Get_the_Gold
name= _ "Get the Gold"
map_data="{campaigns/Northern_Rebirth/maps/12a_Get_the_Gold.map}"
{DEFAULT_SCHEDULE}
{TURNS 35 30 25}
next_scenario=13a_Showdown
{INTRO_AND_SCENARIO_MUSIC "revelation.ogg" "breaking_the_chains.ogg"}
{EXTRA_SCENARIO_MUSIC "elvish-theme.ogg"}
{EXTRA_SCENARIO_MUSIC "the_king_is_dead.ogg"}
{DEFAULT_SCHEDULE}
# Story
# wmllint: local spelling Angthurim
{INTRO_AND_SCENARIO_MUSIC "revelation.ogg" "breaking_the_chains.ogg"}
{EXTRA_SCENARIO_MUSIC "elvish-theme.ogg"}
{EXTRA_SCENARIO_MUSIC "the_king_is_dead.ogg"}
[story]
[part]
# wmllint: local spelling Angthurim
story= _ "After reducing Castle Angthurim, the party set off after Rakshas, hoping that Hidels elves had been able to hold him."
music=sad.ogg
[/part]
@ -88,36 +87,47 @@
music=vengeful.ogg
[/part]
[part]
#po: "espied" is correct here, it's a deliberate archaism
# po: "espied" is correct here, it's a deliberate archaism
story= _ "Moments later a gryphon swooped down from overhead and reported battle in a forest just a few leagues south of their position. The remainder of the elvish forces had been espied fighting a desperate battle with the orcs."
[/part]
[part]
story= _ "It seemed to the gryphon that the elves were sore beset. The party quickly turned south and plunged into the forest."
[/part]
[/story]
{NR_TRACK ({RECOVERY_COMPLETE} {ELVES_STAGE1}) }
# Players side - Tallin
# wmllint: validate-off
[side]
type=Lieutenant
id=Tallin
name=_ "Tallin"
canrecruit=yes
side=1
controller=human
recruit=Peasant,Woodsman,Thug,Poacher,Spearman,Bowman,Dwarvish Fighter,Dwarvish Thunderer,Dwarvish Ulfserker,Dwarvish Scout,Gryphon,Footpad
team_name=knalgans
user_team_name=_"Alliance"
user_team_name= _ "Alliance"
# wmllint: recognize Tallin
{CHARACTER_STATS_TALLIN}
[/side]
# wmllint: validate-on
# Allied AI - Sisal, set to play cautiously
[side]
side=2
controller=ai
recruit=Elvish Fighter,Elvish Archer,Elvish Captain,Elvish Hero,Elvish Ranger,Elvish Marksman
{GOLD 350 300 250}
team_name=knalgans
user_team_name= _ "Alliance"
{FLAG_VARIANT wood-elvish}
type=Elvish Avenger
gender=female
id=Sisal
name= _ "Sisal"
profile=portraits/Sisal.png
canrecruit=yes
side=2
[ai]
aggression=0.3
caution=0.7
@ -126,232 +136,72 @@
terrain=D*,W*
[/avoid]
[/ai]
recruit=Elvish Fighter,Elvish Archer,Elvish Captain,Elvish Hero,Elvish Ranger,Elvish Marksman
{GOLD 350 300 250}
team_name=knalgans
user_team_name=_"Alliance"
{FLAG_VARIANT wood-elvish}
# Place Sisal troops
{GENERIC_UNIT 2 "Elvish Archer" 9 20}
[+unit]
hitpoints=18
[/unit]
{GENERIC_UNIT 2 "Elvish Fighter" 10 20}
[+unit]
hitpoints=24
[/unit]
{GENERIC_UNIT 2 "Elvish Shaman" 9 21}
{GENERIC_UNIT 2 "Elvish Captain" 11 21}
[+unit]
hitpoints=39
[/unit]
{GENERIC_UNIT 2 "Elvish Shaman" 20 21}
{GENERIC_UNIT 2 "Elvish Fighter" 21 21}
[/side]
{AI_CONTROLLER () 1 2 ()}
# Enemy AI - set to be agressive
[side]
side=3
controller=ai
recruit=Orcish Warrior,Orcish Slayer,Troll,Troll Rocklobber,Orcish Crossbowman
{GOLD 1500 2000 2500}
team_name=orcs
user_team_name= _ "Orcs"
{FLAG_VARIANT6 ragged}
type=Orcish Warlord
id="Ha'Tuil"
name= _ "HaTuil"
canrecruit=yes
side=3
recruit=Orcish Warrior,Orcish Slayer,Troll,Troll Rocklobber,Orcish Crossbowman
[ai]
aggression=1.0
caution=-1.0
leader_value=50
[/ai]
{GOLD 1500 2000 2500}
team_name=orcs
user_team_name=_"Orcs"
{FLAG_VARIANT6 ragged}
[/side]
# Empty sides - to ensure proper recall lists carryover
[side]
side=4
no_leader=yes
[/side]
[side]
side=5
no_leader=yes
[/side]
[side]
side=6
no_leader=yes
[/side]
# Krash may not actually still be alive at this point, but setting up
# his side this way is the only way to reliably pick up his recall
# list if he is.
[side]
side=7
type=Drake Burner
id=Krash
name= _ "Krash"
canrecruit=yes
save_id=Krash
{GOLD 250 200 150}
recruit=Drake Fighter,Drake Glider,Drake Burner,Drake Clasher
team_name=knalgans
user_team_name=_"Alliance"
controller=human
[/side]
# Empty side - to ensure proper recall list carryover
[side]
side=8
no_leader=yes
[/side]
# Empty side - player will assume control of it if Eryssa is alive
[side]
side=9
save_id=Elves
persistent=yes
{GOLD 400 350 300}
recruit=Elvish Fighter,Elvish Archer,Elvish Shaman,Elvish Scout,Elvish Captain,Elvish Hero,Elvish Ranger,Elvish Marksman,Elvish Rider,Elvish Druid,Elvish Sorceress
team_name=knalgans
user_team_name=_"Alliance"
controller=human
no_leader=yes
{FLAG_VARIANT long}
[/side]
[event]
name=prestart
{RECALL_SUPPORTER}
# Heres where we edit out Krash's side if he's dead.
[if]
[not]
[have_unit]
id=Krash
[/have_unit]
[/not]
[then]
[kill]
side=7
[/kill]
[terrain]
x=4,4,4,5,5,5,6,6,6
y=3,4,5,3,4,5,3,4,5
terrain=Gs^Fp
[/terrain]
[/then]
[/if]
# If Eryssa is alive change her to recruiting leader of side 9 and
# place on that keep. This method works because, unlike Krash, she
# has no recall list of followers to preserve.
[recall]
id=Eryssa
[/recall]
[if]
[have_unit]
id=Eryssa
[/have_unit]
[then]
# remove loyalty overlay
[remove_unit_overlay]
id=Eryssa
image=misc/loyal-icon.png
[/remove_unit_overlay]
# give expendable overlay
[unit_overlay]
id=Eryssa
image=misc/leader-expendable.png
[/unit_overlay]
[store_starting_location]
side=9
variable=eryssa_starts_at
[/store_starting_location]
[store_unit]
[filter]
id=Eryssa
[/filter]
variable=place_eryssa_at
kill=yes
fire_event=no
[/store_unit]
{VARIABLE place_eryssa_at.side 9}
{VARIABLE place_eryssa_at.x $eryssa_starts_at.x}
{VARIABLE place_eryssa_at.y $eryssa_starts_at.y}
{VARIABLE place_eryssa_at.canrecruit yes}
[unstore_unit]
variable=place_eryssa_at
[/unstore_unit]
{CLEAR_VARIABLE place_eryssa_at}
{CLEAR_VARIABLE eryssa_starts_at}
[/then]
[/if]
[/event]
[event]
name=start
# remember we went this way
[set_variable]
name=path_get_the_gold
value=yes
[/set_variable]
# Recall heroes
#TODO what does this?
[role]
[filter_wml]
[variables]
role=Supporter
[/variables]
[/filter_wml]
role=Supporter
[/role]
[recall]
role=Supporter
[/recall]
[recall]
id=Camerin
[/recall]
[recall]
id=Father Morvin
[/recall]
[recall]
id=Sister Thera
[/recall]
[recall]
id=Elenia
[/recall]
[recall]
id=Stalrag
[/recall]
[recall]
id="Ro'Sothian"
[/recall]
[recall]
id="Ro'Arthian"
[/recall]
[recall]
id=Abhai
[/recall]
# Place Sisal troops
{GENERIC_UNIT 2 "Elvish Archer" 9 20}
[+unit]
hitpoints=18
[/unit]
{GENERIC_UNIT 2 "Elvish Fighter" 10 20}
[+unit]
hitpoints=24
[/unit]
{GENERIC_UNIT 2 "Elvish Shaman" 9 21}
{GENERIC_UNIT 2 "Elvish Captain" 11 21}
[+unit]
hitpoints=39
[/unit]
{GENERIC_UNIT 2 "Elvish Shaman" 20 21}
{GENERIC_UNIT 2 "Elvish Fighter" 21 21}
# Place enemy troops
{GENERIC_UNIT 3 "Orcish Crossbowman" 10 19}
[+unit]
hitpoints=30
[/unit]
{GENERIC_UNIT 3 "Orcish Slayer" 11 20}
[+unit]
hitpoints=25
[/unit]
{GENERIC_UNIT 3 "Orcish Crossbowman" 14 17}
[+unit]
hitpoints=3
[/unit]
{GENERIC_UNIT 3 "Orcish Crossbowman" 23 19}
[+unit]
hitpoints=30
[/unit]
{GENERIC_UNIT 3 "Orcish Warrior" 17 17}
{GENERIC_UNIT 3 "Orcish Warrior" 15 15}
{GENERIC_UNIT 3 "Orcish Warrior" 14 14}
@ -366,6 +216,7 @@
{GENERIC_UNIT 3 "Orcish Warrior" 15 17}
{GENERIC_UNIT 3 "Orcish Warrior" 20 18}
{GENERIC_UNIT 3 "Orcish Warrior" 19 18}
{GENERIC_UNIT 3 "Orcish Slayer" 17 17}
{GENERIC_UNIT 3 "Orcish Slayer" 17 17}
{GENERIC_UNIT 3 "Orcish Slayer" 15 15}
@ -376,6 +227,7 @@
{GENERIC_UNIT 3 "Orcish Slayer" 18 13}
{GENERIC_UNIT 3 "Orcish Slayer" 18 13}
{GENERIC_UNIT 3 "Orcish Slayer" 21 17}
{GENERIC_UNIT 3 "Orcish Crossbowman" 18 13}
{GENERIC_UNIT 3 "Orcish Crossbowman" 18 13}
{GENERIC_UNIT 3 "Orcish Crossbowman" 18 13}
@ -385,53 +237,217 @@
{GENERIC_UNIT 3 "Orcish Crossbowman" 17 15}
{GENERIC_UNIT 3 "Orcish Crossbowman" 18 14}
{GENERIC_UNIT 3 "Orcish Crossbowman" 16 14}
# Initial dialogue
[/side]
# Krash may not actually still be alive at this point, but setting up
# his side this way is the only way to reliably pick up his recall
# list if he is.
[side]
side=4
controller=human
save_id=Krash
recruit=Drake Fighter,Drake Glider,Drake Burner,Drake Clasher
{GOLD 250 200 150}
team_name=knalgans
user_team_name= _ "Alliance"
type=Drake Burner
id=Krash
name= _ "Krash"
canrecruit=yes
[/side]
# Empty side - player will assume control of it if Eryssa is alive
[side]
side=5
controller=human
save_id=Elves
persistent=yes
no_leader=yes
recruit=Elvish Fighter,Elvish Archer,Elvish Shaman,Elvish Scout,Elvish Captain,Elvish Hero,Elvish Ranger,Elvish Marksman,Elvish Rider,Elvish Druid,Elvish Sorceress
{GOLD 400 350 300}
team_name=knalgans
user_team_name= _ "Alliance"
{FLAG_VARIANT long}
[/side]
[event]
name=prestart
# Remember we went this way
{VARIABLE path_get_the_gold yes}
# Heres where we edit out Krash's side if he's dead.
[if]
[not]
[have_unit]
id=Krash
[/have_unit]
[/not]
[then]
[kill]
side=4
[/kill]
[terrain]
x=4,4,4,5,5,5,6,6,6
y=3,4,5,3,4,5,3,4,5
terrain=Gs^Fp
[/terrain]
[/then]
[/if]
# If Eryssa is alive change her to recruiting leader of side 5 and
# place on that keep. This method works because, unlike Krash, she
# has no recall list of followers to preserve.
[if]
[have_unit]
id=Eryssa
search_recall_list=yes
[/have_unit]
[then]
[store_starting_location]
side=5
variable=eryssa_starts_at
[/store_starting_location]
[recall]
id=Eryssa
x=$eryssa_starts_at.x
y=$eryssa_starts_at.y
[/recall]
# Remove loyalty overlay
[remove_unit_overlay]
id=Eryssa
image=misc/loyal-icon.png
[/remove_unit_overlay]
# Give expendable overlay
[unit_overlay]
id=Eryssa
image=misc/leader-expendable.png
[/unit_overlay]
[store_unit]
[filter]
id=Eryssa
[/filter]
variable=place_eryssa_at
kill=yes
fire_event=no
[/store_unit]
{VARIABLE place_eryssa_at.side 5}
{VARIABLE place_eryssa_at.x $eryssa_starts_at.x}
{VARIABLE place_eryssa_at.y $eryssa_starts_at.y}
{VARIABLE place_eryssa_at.canrecruit yes}
[unstore_unit]
variable=place_eryssa_at
[/unstore_unit]
{CLEAR_VARIABLE place_eryssa_at}
{CLEAR_VARIABLE eryssa_starts_at}
[/then]
[/if]
# Recall heroes
{RECALL_SUPPORTER}
[recall]
id=Camerin
[/recall]
[recall]
id=Father Morvin
[/recall]
[recall]
id=Sister Thera
[/recall]
[recall]
id=Elenia
[/recall]
[recall]
id=Stalrag
[/recall]
[recall]
id="Ro'Sothian"
[/recall]
[recall]
id="Ro'Arthian"
[/recall]
[recall]
id=Abhai
[/recall]
[/event]
[event]
name=start
[message]
speaker=narrator
message= _ "After making haste through the forest for most of a watch, the party arrived at the battle scene."
image=wesnoth-icon.png
message= _ "After making haste through the forest for most of a watch, the party arrived at the battle scene."
[/message]
[message]
id=Eryssa
message= _ "Sisal, how do you fare?"
[/message]
[message]
id=Sisal
message= _ "Princess! You are here! How fares Hidel?"
[/message]
[message]
id=Eryssa
message= _ "(<i>Sheds a tear</i>)"
[/message]
[message]
id=Tallin
message= _ "Hidel... died a heros death, one worthy to be sung forever."
[/message]
[message]
id=Sisal
message= _ "The dung-spawned bastards! Verily, Tallin, had it not been for Hidel we would all be dead and Rakshas would be gleefully counting his gold."
[/message]
[message]
id=Sisal
message= _ "Hidel and a handful of elves held off the orcs for more than an hour. That was enough time for us to make off with the gold and rally here at these ruins."
[/message]
[message]
id=Tallin
message= _ "So you have the gold?"
[/message]
[message]
id=Sisal
message= _ "We have the gold, and now we shall have the blood of these orcs! IN HIDELS NAME!"
[/message]
[message]
id="Ha'Tuil"
# wmllint: local spelling Grrr
message= _ "Grrr, HaTuil has never failed in his mission. I will soon lay your severed heads at the feet of the Master!"
[/message]
[message]
id=Sisal
message= _ "You will eat cold steel and whimper your way to hell, foul wretch of an orc!"
[/message]
[objectives]
side=0
[objective]
@ -457,7 +473,7 @@
[gold_carryover]
bonus=yes
carryover_percentage=80
carryover_percentage=40
[/gold_carryover]
[/objectives]
[/event]
@ -473,6 +489,7 @@
id="Ha'Tuil"
message= _ "Argh! I have failed!"
[/message]
[message]
id=Sisal
message= _ "Cheer up — you wont have to live with your failure for long... (<i>Snicker</i>)"
@ -487,28 +504,43 @@
[/filter]
{INCIDENTAL_MUSIC "sad.ogg"}
[message]
id=Sisal
message= _ "Ahhhh! Farewell, friends. I now go to join Hidel."
[/message]
[message]
id=Eryssa
message= _ "Sisal! Noooo!"
[/message]
[message]
speaker=second_unit
message= _ "Haha! We got the gold now!"
[/message]
[message]
id="Ha'Tuil"
message= _ "Hahaha! Mission accomplished, men! Now lets crush the rest of this scum and report back to the Master."
[/message]
[message]
id=Eryssa
message= _ "I dont think so, you bastard orcs! That gold belongs to us. Besides, we now have a few scores to settle with you. Take them, troops — I want no orc left alive!"
[/message]
[/event]
[event]
name=enemies defeated
[endlevel]
result=victory
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]
# Victory
[event]
name=victory
@ -519,6 +551,7 @@
[/have_unit]
[then]
{MODIFY_UNIT id=Sisal canrecruit no}
[message]
id=Tallin
message= _ "Thanks to Hidel and the elves, we have recovered our gold. Now lets run down Rakshas and settle up with him once and for all."
@ -531,13 +564,19 @@
[/message]
[/else]
[/if]
# Make veteran elves available for
# the Elf side in Showdown.
# Make veteran elves available for the Elf side in Showdown.
{MODIFY_UNIT (side=2) side 9}
# Sisal and Eryssa need to be recallable.
{MODIFY_UNIT id=Sisal side 1}
{MODIFY_UNIT id=Eryssa side 1}
[modify_unit]
[filter]
id=Sisal,Eryssa
[/filter]
side=1
[/modify_unit]
[/event]
# Load death events
{HERODEATH_EVERYONE}
[/scenario]

View file

@ -965,6 +965,16 @@
message= _ "Sisal! Noooo! Not you too!"
[/message]
[/event]
[event]
name=enemies defeated
[endlevel]
result=victory
bonus=yes
{NEW_GOLD_CARRYOVER 40}
[/endlevel]
[/event]
# Load death events
{HERODEATH_EVERYONE}
[/scenario]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -3,6 +3,7 @@
id=Caravan
name= _ "Caravan"
image=units/dwarves/caravan.png
{MAGENTA_IS_THE_TEAM_COLOR}
hitpoints=45
race=mechanical
movement_type=smallfoot

View file

@ -1392,55 +1392,36 @@
speaker=Lich-Lord Jevyan
message= _ "Rise, rise from the ground!"
[/message]
[random_placement]
variable=wc_loc
allow_less=yes
num_items={ON_DIFFICULTY 3 6 9}
[filter_location]
terrain=S*
[store_locations]
terrain=S*
[and]
x,y=42,40
radius=14
[/and]
[not]
[filter]
[/filter]
[/not]
variable=possible_wc_locs
[/store_locations]
{VARIABLE wc_counter 0}
[while]
[variable]
name=possible_wc_locs.length
greater_than_equal_to=1
[/variable]
[variable]
name=wc_counter
less_than={ON_DIFFICULTY 3 6 9}
[/variable]
[do]
{RANDOM "0..$($possible_wc_locs.length - 1)"}
[and]
x,y=42,40
radius=14
[/and]
[not]
[filter]
[/filter]
[/not]
[/filter_location]
[command]
[sound]
name={SOUND_LIST:ZOMBIE_HIT}
[/sound]
{LOYAL_UNIT 2 (Walking Corpse) $possible_wc_locs[$random].x $possible_wc_locs[$random].y}
{LOYAL_UNIT 2 (Walking Corpse) $wc_loc.x $wc_loc.y}
[+unit]
animate=yes
[/unit]
[/command]
[/random_placement]
{CLEAR_VARIABLE possible_wc_locs[$random]}
{VARIABLE_OP wc_counter add 1}
[/do]
[/while]
{CLEAR_VARIABLE possible_wc_locs,wc_counter}
{CLEAR_VARIABLE wc_loc}
[/event]
# This event spawns skeletons to shallow water bordering deep water.
@ -1452,26 +1433,12 @@
speaker=Lich-Lord Jevyan
message= _ "Come in from the deep my loyal soldiers!"
[/message]
[store_locations]
terrain=Ww
[not]
[filter]
[/filter]
[/not]
[not]
[filter]
side=1
[/filter]
radius=1
[/not]
[filter_adjacent_location]
terrain=Wo
adjacent=nw,sw
[random_placement]
variable=skele_loc
allow_less=yes
num_items={ON_DIFFICULTY 3 4 5}
[filter_location]
terrain=Ww
[not]
[filter]
@ -1485,26 +1452,26 @@
radius=1
[/not]
[/filter_adjacent_location]
variable=possible_skele_locs
[/store_locations]
[filter_adjacent_location]
terrain=Wo
adjacent=nw,sw
{VARIABLE skele_counter 0}
[while]
[variable]
name=possible_skele_locs.length
greater_than_equal_to=1
[/variable]
[not]
[filter]
[/filter]
[/not]
[variable]
name=skele_counter
less_than={ON_DIFFICULTY 3 4 5}
[/variable]
[do]
{RANDOM "0..$($possible_skele_locs.length - 1)"}
[not]
[filter]
side=1
[/filter]
radius=1
[/not]
[/filter_adjacent_location]
[/filter_location]
[command]
[store_locations]
terrain=Wo
@ -1522,7 +1489,7 @@
[/not]
[filter_adjacent_location]
x,y=$possible_skele_locs[$random].x,$possible_skele_locs[$random].y
x,y=$skele_loc.x,$skele_loc.y
[/filter_adjacent_location]
variable=skele_from
@ -1550,8 +1517,8 @@
[/switch]
[scroll_to]
x=$possible_skele_locs[$random].x
y=$possible_skele_locs[$random].y
x=$skele_loc.x
y=$skele_loc.y
[/scroll_to]
[sound]
@ -1565,19 +1532,14 @@
[move_unit_fake]
side=2
type=$skele_type
x=$skele_from.x,$possible_skele_locs[$random].x
y=$skele_from.y,$possible_skele_locs[$random].y
x=$skele_from.x,$skele_loc.x
y=$skele_from.y,$skele_loc.y
[/move_unit_fake]
{LOYAL_UNIT 2 $skele_type $possible_skele_locs[$random].x $possible_skele_locs[$random].y}
{CLEAR_VARIABLE possible_skele_locs[$random]}
{VARIABLE_OP skele_counter add 1}
[/do]
[/while]
{CLEAR_VARIABLE possible_skele_locs,skele_counter,skele_from}
{LOYAL_UNIT 2 $skele_type $skele_loc.x $skele_loc.y}
[/command]
[/random_placement]
{CLEAR_VARIABLE (skele_loc,skele_from,skele_type)}
[/event]
# This triggers on turns 2,9,16,23,... and sets the next corpse spawn turn

View file

@ -54,7 +54,7 @@
name=glaive
[/filter_attack]
[frame]
image="units/infantry-commander.png:[100*8]"
image="units/infantry-lieutenant-attack-[1~8].png:100"
[/frame]
{SOUND:HIT_AND_MISS {SOUND_LIST:SWORD_SWISH} {SOUND_LIST:MISS} -100}
[/attack_anim]

View file

@ -613,8 +613,7 @@
[event]
name=create_minion
first_time_only=no
[store_locations]
{SCATTER_UNITS 1 (Crawling Horror) 0 (
x=6-14
y=7-14
terrain=Rr,Uu
@ -622,25 +621,11 @@
[not]
[filter]
[/filter]
[/not]
variable=possible_spawn_locations
[/store_locations]
[if]
[variable]
name=possible_spawn_locations.length
greater_than_equal_to=1
[/variable]
[then]
{VARIABLE_OP new_minion_loc_i rand "1..$possible_spawn_locations.length"}
{VARIABLE_OP new_minion_loc_i sub 1}
{UNIT 2 (Crawling Horror) $possible_spawn_locations[$new_minion_loc_i].x $possible_spawn_locations[$new_minion_loc_i].y (upkeep=free)}
[/then]
[/if]
{CLEAR_VARIABLE possible_spawn_locations}
[/not]
) (
side=2
upkeep=free
)}
[/event]
# Event 1: The Death of Eloh and the revealing of the true monster

View file

@ -236,8 +236,9 @@
[/filter]
[message]
speaker=Galdrad
speaker=narrator
image=$unit.profile
caption= _ "Elvish Shaman"
message= _ "The Shaman is a fairly weak unit, but she has the ability to <i>heal</i> friendly units around her. She also has a special attack which <i>slows</i> enemies, halving the damage they do for one turn."
[/message]
@ -262,8 +263,9 @@ A full list of abilities and weapons specials, along with traits, may be found i
[/filter]
[message]
speaker=Galdrad
speaker=narrator
image=$unit.profile
caption= _ "Elvish Archer"
message= _ "Unlike the Elvish Fighter, which has strong melee attacks, the Elvish Archer has strong ranged attacks. Its useful to attack enemy units with strong melee attacks with strong ranged attacks, and vice versa. This allows your units to take less damage when your enemy counterattacks."
[/message]
[/event]
@ -323,7 +325,7 @@ A full list of abilities and weapons specials, along with traits, may be found i
speaker=narrator
caption= _ "Income and Upkeep"
image=wesnoth-icon.png
message= _ "Each turn, you will gain 2 gold plus one for each village you own. However, <i>upkeep</i> is subtracted for that. You can support as many levels worth of units as the number of villages you own; beyond that, you must pay 1 gold per turn. Be careful, as owning too many units can cause you to have negative income and lose gold each turn!"
message= _ "Each turn, you will gain 2 gold plus one for each village you own. However, <i>upkeep</i> is subtracted from that. You can support as many levels worth of units as the number of villages you own; beyond that, you must pay 1 gold per turn. Be careful, as owning too many units can cause you to have negative income and lose gold each turn!"
[/message]
[allow_end_turn][/allow_end_turn]

View file

@ -1299,6 +1299,9 @@
name = "Paŭlo Ebermann (Pauxlo)"
wikiuser = "Pauxlo"
[/entry]
[entry]
name = "Peter Elmers"
[/entry]
[entry]
name = "Peter Mawhorter (solsword)"
wikiuser = "solsword"

View file

@ -10,17 +10,15 @@
#enddef
#define COLOR_HEAL
green=255
color="0,255,0"
#enddef
#define COLOR_HARM
red=255
color="255,0,0"
#enddef
#define COLOR_WHITE
red=255
green=255
blue=255
color="255,255,255"
#enddef
#define IS_HERO

View file

@ -31,42 +31,21 @@
#
# This call will scatter 20 copies of a pine-tree graphic over grassland:
#! {SCATTER_IMAGE (terrain=Gg) 20 scenery/pine1.png}
[store_locations]
{FILTER}
variable=random_placement_locations
[/store_locations]
{VARIABLE REPEAT_i 0}
[while]
[variable]
name=REPEAT_i
less_than={NUMBER}
[/variable]
[variable]
name=random_placement_locations.length
greater_than=0
[/variable]
[do]
[set_variable]
name=random_subscript
rand="0..$($random_placement_locations.length - 1)"
[/set_variable]
[random_placement]
num_items={NUMBER}
variable=random_placement_location
allow_less=yes
[filter_location]
{FILTER}
[/filter_location]
[command]
[item]
image={IMAGE}
x,y=$random_placement_locations[$random_subscript].x,$random_placement_locations[$random_subscript].y
x,y=$random_placement_location.x,$random_placement_location.y
[/item]
{CLEAR_VARIABLE random_placement_locations[$random_subscript]}
{VARIABLE_OP REPEAT_i add 1}
[/do]
[/while]
{CLEAR_VARIABLE REPEAT_i}
{CLEAR_VARIABLE random_subscript}
{CLEAR_VARIABLE random_placement_locations}
[/command]
[/random_placement]
{CLEAR_VARIABLE random_placement_location}
#enddef
#define SCATTER_EMBELLISHMENTS TERRAINLIST EMBELLISHMENT_NAME PERCENTAGE
@ -75,39 +54,20 @@
#
# For example, this will add flowers to 5% of all grassland:
#! {SCATTER_EMBELLISHMENTS G* ^Efm 5}
[store_locations]
terrain={TERRAINLIST}
variable=terrain_variation_locations
[/store_locations]
{VARIABLE terrain_variations_to_place {PERCENTAGE}}
# TODO: change back to 100.0 once it no longer causes a crash
{VARIABLE_OP terrain_variations_to_place divide 100.0}
{VARIABLE_OP terrain_variations_to_place multiply $terrain_variation_locations.length}
{VARIABLE_OP terrain_variations_to_place round ceil}
[while]
[variable]
name=terrain_variations_to_place
greater_than=0
[/variable]
[do]
{VARIABLE_OP terrain_variation_i rand "0..$($terrain_variation_locations.length - 1)"}
[random_placement]
num_items="size * ({PERCENTAGE} / 100)"
variable=random_placement_location
allow_less=yes
[filter_location]
terrain={TERRAINLIST}
[/filter_location]
[command]
[terrain]
x,y=$terrain_variation_locations[$terrain_variation_i].x,$terrain_variation_locations[$terrain_variation_i].y
x,y=$random_placement_location.x,$random_placement_location.y
terrain={EMBELLISHMENT_NAME}
layer=overlay
[/terrain]
{VARIABLE_OP terrain_variations_to_place sub 1}
{CLEAR_VARIABLE terrain_variation_locations[$terrain_variation_i]}
[/do]
[/while]
{CLEAR_VARIABLE terrain_variation_locations,terrain_variations_to_place,terrain_variation_i}
[/command]
[/random_placement]
{CLEAR_VARIABLE random_placement_location}
#enddef

View file

@ -462,15 +462,6 @@
#! {TRAIT_LOYAL}
#! [/modifications]
#! )}
[store_locations]
{FILTER}
# Exclude border hexes
include_borders=no
variable=possible_unit_locations
[/store_locations]
[set_variables]
name=unit_type_table
@ -482,65 +473,27 @@
[/set_variables]
{VARIABLE unit_type_table_i 0}
{VARIABLE units_to_place {NUMBER}}
[while]
[variable]
name=units_to_place
greater_than=0
[/variable]
[do]
[set_variable]
name=random_subscript
rand=1..$possible_unit_locations.length
[/set_variable]
{VARIABLE_OP random_subscript sub 1}
[random_placement]
num_items={NUMBER}
variable=random_placement_location
allow_less=yes
min_distance={PADDING_RADIUS}
[filter_location]
{FILTER}
include_borders=no
[/filter_location]
[command]
[unit]
type=$unit_type_table[$unit_type_table_i].type
x,y=$possible_unit_locations[$random_subscript].x,$possible_unit_locations[$random_subscript].y
x,y=$random_placement_location.x,$random_placement_location.y
{UNIT_WML}
[/unit]
{VARIABLE unit_type_table_i ("$(($unit_type_table_i + 1) % $unit_type_table.length)")}
[/command]
[/random_placement]
[store_locations]
find_in=possible_unit_locations
[not]
x,y=$possible_unit_locations[$random_subscript].x,$possible_unit_locations[$random_subscript].y
radius={PADDING_RADIUS}
[/not]
variable=possible_unit_locations
[/store_locations]
[if]
[variable]
name=possible_unit_locations.length
less_than=1
[/variable]
[then]
{VARIABLE units_to_place 0}
[/then]
[/if]
{VARIABLE_OP unit_type_table_i add 1}
[if]
[variable]
name=unit_type_table_i
numerical_equals=$unit_type_table.length
[/variable]
[then]
{VARIABLE unit_type_table_i 0}
[/then]
[/if]
{VARIABLE_OP units_to_place sub 1}
[/do]
[/while]
{CLEAR_VARIABLE unit_type_table,unit_type_table_i,possible_unit_locations,random_subscript,units_to_place}
{CLEAR_VARIABLE unit_type_table,unit_type_table_i,random_placement_location}
#enddef
#define FORCE_CHANCE_TO_HIT FILTER SECOND_FILTER CTH_NUMBER EXTRA_CONDITIONS_WML

Binary file not shown.

Binary file not shown.

View file

@ -4,6 +4,7 @@
name= _ "Elder Mage"
race=human
image="units/human-magi/elder-mage.png"
profile="portraits/humans/mage-arch.png"
{MAGENTA_IS_THE_TEAM_COLOR}
{DEFENSE_ANIM "units/human-magi/elder-mage-defend.png" "units/human-magi/elder-mage.png" {SOUND_LIST:HUMAN_OLD_HIT} }
hitpoints=60

View file

@ -14,7 +14,7 @@
advances_to=Shuja
cost=38
usage=fighter
description= _ "Armed with their sword, shield and faith, Ghazis are warriors of some renown among the Khalifate armies. They have further refined their combat arts, adding a powerful shield bash to knock back unsuspecting enemies. Though few in number, their presence can be decisive in dislodging even the most hardened redoubt."+{SPECIAL_NOTES}+{SPECIAL_NOTES_MARKSMAN}+{SPECIAL_NOTES_SLOW}
description= _ "Armed with their sword, shield and faith, Ghazi are warriors of some renown among the Khalifate armies. They have further refined their combat arts, adding a powerful shield bash to knock back unsuspecting enemies. Though few in number, their presence can be decisive in dislodging even the most hardened redoubt."+{SPECIAL_NOTES}+{SPECIAL_NOTES_MARKSMAN}+{SPECIAL_NOTES_SLOW}
die_sound={SOUND_LIST:ELF_HIT}
{DEFENSE_ANIM "units/khalifate/ghazi.png" "units/khalifate/ghazi.png" {SOUND_LIST:ELF_HIT} }
[attack]

View file

@ -18,7 +18,7 @@
cost=17
usage=healer
{MAGENTA_IS_THE_TEAM_COLOR}
description= _ "Hakim are learned individuals who have given up their urban life in order to assist the Khalifate armies in their travels. Their motivations are many; some look to it as an adventure or as a steady source of pay, while others feel it to be a requirement of their faith. Regardless, Hakims are highly respected by all. They are trained with the advanced medical techniques and possess a potent clutch of medicines and herbs, which allows them to quickly heal even the most gravely wounded allies."+{SPECIAL_NOTES}+{SPECIAL_NOTES_EXTRA_HEAL}
description= _ "Hakim are learned individuals who have given up their urban life in order to assist the Khalifate armies in their travels. Their motivations are many; some look to it as an adventure or as a steady source of pay, while others feel it to be a requirement of their faith. Regardless, Hakim are highly respected by all. They are trained with the advanced medical techniques and possess a potent clutch of medicines and herbs, which allows them to quickly heal even the most gravely wounded allies."+{SPECIAL_NOTES}+{SPECIAL_NOTES_EXTRA_HEAL}
die_sound={SOUND_LIST:HUMAN_DIE}
{DEFENSE_ANIM "units/khalifate/hakim.png" "units/khalifate/hakim.png" {SOUND_LIST:HUMAN_HIT} }
[attack]

View file

@ -14,7 +14,7 @@
advances_to=Rasikh
cost=38
usage=fighter
description= _ "Although the Khalifate armies are known for their astonishing mobility and fierce attack, they can be able defenders. Mudafis excel at holding their ground, keeping opponents at bay with long, razor sharp spears. Their preferred strategy is to gradually wear down enemies, until they can be defeated in a vicious counter stroke."+{SPECIAL_NOTES}+{SPECIAL_NOTES_FIRSTSTRIKE}
description= _ "Although the Khalifate armies are known for their astonishing mobility and fierce attack, they can be able defenders. Mudafi excel at holding their ground, keeping opponents at bay with long, razor sharp spears. Their preferred strategy is to gradually wear down enemies, until they can be defeated in a vicious counter stroke."+{SPECIAL_NOTES}+{SPECIAL_NOTES_FIRSTSTRIKE}
die_sound={SOUND_LIST:ELF_HIT}
{DEFENSE_ANIM "units/khalifate/mudafi.png" "units/khalifate/mudafi.png" {SOUND_LIST:ELF_HIT} }
[attack]

View file

@ -15,7 +15,7 @@
usage=archer
undead_variation=mounted
{MAGENTA_IS_THE_TEAM_COLOR}
description= _ "Rami who demonstrate exceptional skill with the bow are made into Saree, spending hours every day practicing and building a rapport with their steed. This has made them the fastest riders in the Khalifate armies, and a wise Khalid uses to this advantage."
description= _ "Rami who demonstrate exceptional skill with the bow are made into Saree, spending hours every day practicing and building a rapport with their steed. This has made them the fastest riders in the Khalifate armies, and a wise Khalid uses this to their advantage."
die_sound=horse-die.ogg
{DEFENSE_ANIM "units/khalifate/saree.png" "units/khalifate/saree.png" {SOUND_LIST:HORSE_HIT} }
[attack]

View file

@ -15,7 +15,7 @@
{AMLA_DEFAULT}
cost=58
usage=fighter
description= _ "Distinguished for their bravery and skill, Shujas are the leaders among the Khalif's ranks. Their exploits are well known among their cohorts, inspiring soldiers to fight for their cause. Despite this, they are often found leading from the front, taking down their foes with sword and shield."+{SPECIAL_NOTES}+{SPECIAL_NOTES_MARKSMAN}+{SPECIAL_NOTES_SLOW}
description= _ "Distinguished for their bravery and skill, Shuja are the leaders among the Khalif's ranks. Their exploits are well known among their cohorts, inspiring soldiers to fight for their cause. Despite this, they are often found leading from the front, taking down their foes with sword and shield."+{SPECIAL_NOTES}+{SPECIAL_NOTES_MARKSMAN}+{SPECIAL_NOTES_SLOW}
die_sound={SOUND_LIST:ELF_HIT}
{DEFENSE_ANIM "units/khalifate/shuja.png" "units/khalifate/shuja.png" {SOUND_LIST:ELF_HIT} }
[attack]

View file

@ -59,7 +59,7 @@
[/specials]
[/attack]
{DEFENSE_ANIM "units/orcs/nightblade-defend-se2-1.png" "units/orcs/nightblade-defend-se2-2.png" {SOUND_LIST:ORC_SMALL_HIT}}
{DEFENSE_ANIM "units/orcs/nightblade-defend-se2-2.png" "units/orcs/nightblade-defend-se2-1.png" {SOUND_LIST:ORC_SMALL_HIT}}
[defend]
start_time=-150

View file

@ -78,7 +78,7 @@
[/state_pressed]
[state_focussed]
[state_focused]
[draw]
@ -96,7 +96,7 @@
[/draw]
[/state_focussed]
[/state_focused]
[/resolution]
#enddef

View file

@ -69,7 +69,7 @@
[/state_pressed]
[state_focussed]
[state_focused]
[draw]
@ -83,7 +83,7 @@
[/draw]
[/state_focussed]
[/state_focused]
[/resolution]
#enddef

View file

@ -96,9 +96,9 @@ if(positioner_length - {POSITIONER_LEFT} - {POSITIONER_RIGHT} < 0
{_GUI_STATE ({GROOVE_LEFT}) ({GROOVE_RIGHT}) ({POSITIONER_LEFT}) ({POSITIONER_RIGHT}) "-pressed.png" ({IPF}) }
[/state_pressed]
[state_focussed]
[state_focused]
{_GUI_STATE ({GROOVE_LEFT}) ({GROOVE_RIGHT}) ({POSITIONER_LEFT}) ({POSITIONER_RIGHT}) "-active.png" ({IPF}) }
[/state_focussed]
[/state_focused]
[/resolution]
#enddef

View file

@ -78,7 +78,7 @@
[/state_pressed]
[state_focussed]
[state_focused]
[draw]
@ -96,7 +96,7 @@
[/draw]
[/state_focussed]
[/state_focused]
[/resolution]
#enddef

View file

@ -107,7 +107,7 @@
}
[/state_pressed]
[state_focussed]
[state_focused]
{_GUI_STATE
"-active.png"
({GUI__FONT_COLOR_ENABLED__DEFAULT})
@ -117,7 +117,7 @@
({TEXT_WIDTH})
({FONT_SIZE})
}
[/state_focussed]
[/state_focused]
[/resolution]
#enddef

View file

@ -76,12 +76,12 @@
}
[/state_pressed]
[state_focussed]
[state_focused]
{_GUI_STATE
"-active.png"
({GUI__FONT_COLOR_ENABLED__DEFAULT})
}
[/state_focussed]
[/state_focused]
[/resolution]
#enddef

View file

@ -136,7 +136,7 @@
[/state_disabled]
[state_focussed]
[state_focused]
[draw]
@ -150,7 +150,7 @@
[/draw]
[/state_focussed]
[/state_focused]
[/resolution]

View file

@ -62,7 +62,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -74,7 +74,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
###
@ -110,7 +110,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -122,7 +122,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
[/resolution]

View file

@ -69,7 +69,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -85,7 +85,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
###
@ -129,7 +129,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -145,7 +145,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
[/resolution]

View file

@ -54,7 +54,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -70,7 +70,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
###
@ -116,7 +116,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -138,7 +138,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
###
@ -183,7 +183,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -205,7 +205,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
[/resolution]

View file

@ -69,7 +69,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -78,7 +78,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
###
@ -108,7 +108,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -117,7 +117,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
[/resolution]

View file

@ -78,7 +78,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -88,7 +88,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
###
@ -120,7 +120,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -130,7 +130,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
[/resolution]

View file

@ -61,7 +61,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -73,7 +73,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
###
@ -109,7 +109,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -121,7 +121,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
[/resolution]

View file

@ -46,7 +46,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -56,7 +56,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
###
@ -88,7 +88,7 @@
[/disabled]
[focussed]
[focused]
[draw]
@ -98,7 +98,7 @@
[/draw]
[/focussed]
[/focused]
[/state]
[/resolution]

View file

@ -49,13 +49,13 @@
[/disabled]
[focussed]
[focused]
[draw]
{_GUI_RECT ({GUI__BACKGROUND_COLOR_ENABLED}) }
[/draw]
[/focussed]
[/focused]
[/state]
###
@ -79,13 +79,13 @@
[/disabled]
[focussed]
[focused]
[draw]
{GUI__LISTBOX_SELECTED_CELL}
[/draw]
[/focussed]
[/focused]
[/state]
[/resolution]

View file

@ -102,12 +102,12 @@
[/disabled]
[focussed]
[focused]
[draw]
[/draw]
[/focussed]
[/focused]
[/state]
###
@ -132,13 +132,13 @@
[/disabled]
[focussed]
[focused]
[draw]
{_GUI__LISTBOX_SELECTED_CELL ({LINE_OFFSET_SIDE}) ({LINE_OFFSET_TOTAL}) ({LINE_HEIGHT}) ({BACKGROUND_OFFSET}) ("~O(65%)")}
[/draw]
[/focussed]
[/focused]
[/state]
[/resolution]

View file

@ -95,9 +95,9 @@ if(positioner_length - {POSITIONER_TOP} - {POSITIONER_BOTTOM} < 0
{_GUI_STATE ({GROOVE_TOP}) ({GROOVE_BOTTOM}) ({POSITIONER_TOP}) ({POSITIONER_BOTTOM}) "-pressed.png" ({IPF}) }
[/state_pressed]
[state_focussed]
[state_focused]
{_GUI_STATE ({GROOVE_TOP}) ({GROOVE_BOTTOM}) ({POSITIONER_TOP}) ({POSITIONER_BOTTOM}) "-active.png" ({IPF}) }
[/state_focussed]
[/state_focused]
[/resolution]
#enddef

View file

@ -409,10 +409,10 @@
[/draw]
[/state_pressed]
[state_focussed]
[state_focused]
[draw]
[/draw]
[/state_focussed]
[/state_focused]
[/resolution]

View file

@ -79,8 +79,6 @@
[grid]
id = "preview_pane"
[row]
grow_factor = 1

View file

@ -187,9 +187,9 @@
{GAMELISTBOX_BODY_IMAGE "vision_icon" "" ""}
{GAMELISTBOX_BODY_IMAGE "gold_icon" "themes/gold.png" _"Gold per village"}
{GAMELISTBOX_BODY_LABEL_TINY "gold_text" "265"}
{GAMELISTBOX_BODY_IMAGE "xp_icon" "themes/units-t.png" _"Experience modifier"}
{GAMELISTBOX_BODY_IMAGE "xp_icon" "themes/units.png" _"Experience modifier"}
{GAMELISTBOX_BODY_LABEL_TINY "xp_text" "70%"}
{GAMELISTBOX_BODY_IMAGE "time_limit_icon" "themes/sand-clock-t.png" _"Time limit"}
{GAMELISTBOX_BODY_IMAGE "time_limit_icon" "themes/sand-clock.png" _"Time limit"}
{GAMELISTBOX_BODY_LABEL_TINY "time_limit_text" ""}
[/row]
[/grid]

View file

@ -571,7 +571,7 @@
super="generic/state"
[/tag]
[tag]
name="state_focussed"
name="state_focused"
min="0"
max="1"
super="generic/state"
@ -631,7 +631,7 @@
super="generic/state"
[/tag]
[tag]
name="state_focussed"
name="state_focused"
min="0"
max="1"
super="generic/state"
@ -895,7 +895,7 @@
super="generic/state"
[/tag]
[tag]
name="state_focussed"
name="state_focused"
min="0"
max="1"
super="generic/state"
@ -1037,7 +1037,7 @@
super="generic/state"
[/tag]
[tag]
name="state_focussed"
name="state_focused"
min="0"
max="1"
super="generic/state"
@ -1114,7 +1114,7 @@
super="generic/state"
[/tag]
[tag]
name="state_focussed"
name="state_focused"
min="0"
max="1"
super="generic/state"
@ -1173,7 +1173,7 @@
super="generic/state"
[/tag]
[tag]
name="focussed"
name="focused"
min="0"
max="1"
super="generic/state"
@ -1208,7 +1208,7 @@
super="generic/state"
[/tag]
[tag]
name="focussed"
name="focused"
min="0"
max="1"
super="generic/state"
@ -1286,7 +1286,7 @@
super="generic/state"
[/tag]
[tag]
name="state_focussed"
name="state_focused"
min="0"
max="1"
super="generic/state"

View file

@ -1172,7 +1172,6 @@ function wml_actions.store_side(cfg)
income = t.total_income,
village_gold = t.village_gold,
village_support = t.village_support,
name = t.name,
team_name = t.team_name,
user_team_name = t.user_team_name,
color = t.color,
@ -1476,9 +1475,9 @@ function wml_actions.endlevel(cfg)
local there_is_a_local_human_defeat = false
local bool_int = function(b)
if b == true then
return 0
elseif b == false then
return 1
elseif b == false then
return 0
else
return b
end
@ -1643,3 +1642,75 @@ function wml_actions.unsynced(cfg)
wml_actions.command(cfg)
end)
end
wesnoth.wml_actions.random_placement = function(cfg)
local dist_le = nil
local parsed = helper.shallow_parsed(cfg)
local filter = helper.get_child(parsed, "filter_location") or {}
local command = helper.get_child(parsed, "command") or helper.wml_error("[random_placement] missing required [command] subtag")
local distance = cfg.min_distance or 0
local num_items = cfg.num_items or helper.wml_error("[random_placement] missing required 'num_items' attribute")
local variable = cfg.variable or helper.wml_error("[random_placement] missing required 'variable' attribute")
local allow_less = cfg.allow_less == true
local variable_previous = utils.start_var_scope(variable)
if distance < 0 then
-- optimisation for distance = -1
dist_le = function() return false end
elseif distance == 0 then
-- optimisation for distance = 0
dist_le = function(x1,y1,x2,y2) return x1 == x2 and y1 == y2 end
else
-- optimisation: cloasure is faster than string lookups.
local math_abs = math.abs
-- same effect as helper.distance_between(x1,y1,x2,y2) <= distance but faster.
dist_le = function(x1,y1,x2,y2)
local d_x = math_abs(x1-x2)
if d_x > distance then
return false
end
if d_x % 2 ~= 0 then
if x1 % 2 == 0 then
y2 = y2 - 0.5
else
y2 = y2 + 0.5
end
end
local d_y = math_abs(y1-y2)
return d_x + 2*d_y <= 2*distance
end
end
local locs = wesnoth.get_locations(filter)
if type(num_items) == "string" then
num_items = math.floor(loadstring("local size = " .. #locs .. "; return " .. num_items)())
print("num_items=" .. num_items .. ", #locs=" .. #locs)
end
local size = #locs
for i = 1, num_items do
if size == 0 then
if allow_less then
print("placed only " .. i .. " items")
return
else
helper.wml_error("[random_placement] failed to place items. only " .. i .. " items were placed")
end
end
local index = wesnoth.random(size)
local point = locs[index]
wesnoth.set_variable(variable .. ".x", point[1])
wesnoth.set_variable(variable .. ".y", point[2])
wesnoth.set_variable(variable .. ".n", i)
for j = size, 1, -1 do
if dist_le(locs[j][1], locs[j][2], point[1], point[2]) then
-- optimisation: swapping elements and storing size in an extra variable is faster than table.remove(locs, j)
locs[j] = locs[size]
size = size - 1
end
end
wesnoth.wml_actions.command (command)
end
utils.end_var_scope(variable, variable_previous)
end

View file

@ -268,7 +268,7 @@ Xu, Xu, Qxu, Qxu, Ql, Ql, Ql, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Xu, Gg, Gg, Gg, Gg, Gg
[/trait]
[trait]
id=overpowered
name= _ "overpowered"
name="overpowered"
availability=musthave
[effect]
apply_to=attack
@ -2977,7 +2977,7 @@ For game purposes, the races group into factions; for example, orcs often cooper
local l = wesnoth.get_units { side = 1, canrecruit = true }[1]
local x, y = wesnoth.find_vacant_tile(l.x, l.y, u)
u.side = 3
wesnoth.put_unit(x, y, u)
wesnoth.put_unit(u, x, y)
local ul = wesnoth.get_recall_units()
local t = {}
for i,u in ipairs(ul) do table.insert(t, u.type) end
@ -3615,7 +3615,7 @@ unplagueable: $wml_unit.status.unplagueable"
code = <<
local helper = wesnoth.require "lua/helper.lua"
for i, v in ipairs(helper.get_variable_proxy_array "temp_villages_area") do
wesnoth.put_unit(v.x, v.y, { type = "Goblin Spearman", side = 2 })
wesnoth.put_unit({ type = "Goblin Spearman", side = 2 }, v.x, v.y)
end
wesnoth.set_variable "temp_villages_area"
>>

View file

@ -132,8 +132,8 @@ victory_when_enemies_defeated=yes
share_view=no
shroud=no
side=1
team_id=1
team_name=""
team_name=1
user_team_name=""
[unit]
canrecruit=no
extra_recruit=""
@ -884,8 +884,8 @@ victory_when_enemies_defeated=yes
share_view=no
shroud=no
side=2
team_id=2
team_name=""
team_name=2
user_team_name=""
[unit]
canrecruit=no
extra_recruit=""

View file

@ -20,7 +20,7 @@
type = Elvish Archer
id=alice
fog=yes
team_id=West
team_name=West
share_vision=shroud
[/side]
[side]
@ -30,7 +30,7 @@
type = Orcish Grunt
id=bob
fog=yes
team_id=East
team_name=East
share_vision=shroud
[/side]
[side]
@ -40,7 +40,7 @@
type = Dwarvish Fighter
id=dave
fog=yes
team_id=East
team_name=East
share_vision=shroud
[/side]
[side]
@ -50,7 +50,7 @@
type = Chocobone
id=charlie
fog=yes
team_id=West
team_name=West
share_vision=shroud
[/side]

View file

@ -17,7 +17,7 @@
type = Elvish Archer
id=alice
fog=no
team_id=West
team_name=West
[/side]
[side]
side=2
@ -26,7 +26,7 @@
type = Orcish Grunt
id=bob
fog=no
team_id=East
team_name=East
[/side]
[side]
side=3
@ -35,7 +35,7 @@
type = Dwarvish Fighter
id=dave
fog=no
team_id=East
team_name=East
[/side]
[side]
side=4
@ -44,7 +44,7 @@
type = Chocobone
id=charlie
fog=no
team_id=West
team_name=West
[/side]
{EVENTS}

View file

@ -27,7 +27,7 @@
type = Orcish Grunt
id=bob
fog=yes
team_id=East
team_name=East
share_view={SHARE_VIEW}
[/side]
[side]
@ -37,7 +37,7 @@
type = Dwarvish Fighter
id=dave
fog=yes
team_id=East
team_name=East
share_view={SHARE_VIEW}
[/side]

View file

@ -18,7 +18,7 @@
type = Elvish Archer
id=alice
fog=no
team_id=West
team_name=West
defeat_condition={DC1}
{UNIT 1 "Elvish Fighter" 1 1 (id=t1)}
[/side]
@ -29,7 +29,7 @@
type = Orcish Grunt
id=bob
fog=no
team_id=East
team_name=East
defeat_condition={DC2}
{UNIT 2 "Orcish Archer" 1 2 (id=t2)}
[/side]
@ -40,7 +40,7 @@
type = Dwarvish Fighter
id=dave
fog=no
team_id=East
team_name=East
defeat_condition={DC3}
{UNIT 3 "Dwarvish Thunderer" 1 3 (id=t3)}
[/side]
@ -51,7 +51,7 @@
type = Chocobone
id=charlie
fog=no
team_id=West
team_name=West
defeat_condition={DC4}
{UNIT 4 "Dark Adept" 1 4 (id=t4)}
[/side]
@ -60,7 +60,7 @@
[/test]
#enddef
#define KILL_ SIDE CR
#define KILL_SIDE SIDE CR
[kill]
side={SIDE}
canrecruit={CR}
@ -84,13 +84,13 @@
#define TEST_KILL_SIDES_TWO_THREE ID ID_yes ID_no ID_yesno DC1 DC2 DC3 DC4 CON VWED
{TEST_CHECK_VICTORY_SCEN ({ID} {ID_yes}) {DC1} {DC2} {DC3} {DC4} {CON} {VWED} (
{FAIL_IF_NO_END (
{KILL_ "2,3" "yes"} #kill leaders of side 2,3
{KILL_SIDE "2,3" "yes"} #kill leaders of side 2,3
)}
)}
{TEST_CHECK_VICTORY_SCEN ({ID} {ID_no}) {DC1} {DC2} {DC3} {DC4} {CON} {VWED} (
{FAIL_IF_NO_END (
{KILL_ "2,3" "no"} #kill units but not leaders of side 2,3
{KILL_SIDE "2,3" "no"} #kill units but not leaders of side 2,3
)}
)}
@ -115,12 +115,12 @@
{TEST_CHECK_VICTORY_SCEN check_victory_always_one "always" "no_leader_left" "no_leader_left" "always" "human" "yes" ()}
{TEST_CHECK_VICTORY_SCEN check_victory_always_two "always" "no_leader_left" "no_leader_left" "no_leader_left" "human" "yes" (
{FAIL_IF_NO_END (
{KILL_ "4" "yes"}
{KILL_SIDE "4" "yes"}
)}
)}
{TEST_CHECK_VICTORY_SCEN check_victory_always_no_units_fail "always" "no_leader_left" "no_leader_left" "no_units_left" "human" "yes" (
{FAIL_IF_NO_END (
{KILL_ "4" "yes"}
{KILL_SIDE "4" "yes"}
)}
)}
{TEST_CHECK_VICTORY_SCEN check_victory_always_no_units "always" "no_leader_left" "no_leader_left" "no_units_left" "human" "yes" (
@ -136,12 +136,12 @@
{TEST_KILL_SIDES_TWO_THREE check_victory_never_fail "_one" "_two" "_three" "no_leader_left" "never" "no_leader_left" "no_leader_left" "human" "yes"}
{TEST_CHECK_VICTORY_SCEN check_victory_never_pass "no_leader_left" "always" "never" "no_leader_left" "human" "yes" (
{FAIL_IF_NO_END (
{KILL_ "1,4" "yes"}
{KILL_SIDE "1,4" "yes"}
)}
)}
{TEST_CHECK_VICTORY_SCEN check_victory_never_ai_fail "no_leader_left" "always" "never" "no_leader_left" "ai" "yes" (
{FAIL_IF_NO_END (
{KILL_ "1,4" "yes"}
{KILL_SIDE "1,4" "yes"}
)}
)}

View file

@ -3,7 +3,7 @@
name = prestart
[lua]
code = << local s = wesnoth.get_sides({})
local result = (s[1].side == 1) and (s[1].name == "Alice") and (s[2].side == 2) and (s[2].name == "Bob")
local result = (s[1].side == 1) and (s[2].side == 2)
wesnoth.set_variable("result", result) >>
[/lua]

View file

@ -26,7 +26,7 @@
type = Orcish Grunt
id=bob
fog=yes
team_id=East
team_name=East
share_view=no
[/side]
[side]
@ -36,7 +36,7 @@
type = Dwarvish Fighter
id=dave
fog=yes
team_id=East
team_name=East
share_view=no
[/side]

View file

@ -106,4 +106,5 @@ revert:
./wmllint --revert $(MAINLINE) $(UMC)
clean:
./wmllint --clean $(MAINLINE) $(UMC)
rm -f macro-reference.html

View file

@ -180,11 +180,13 @@ chyby validace jsou brány jako fatální.
spouští hru v malém testovacím scénáři.
.TP
\fB\-\-userconfig\-dir\fP\fI\ name\fP
nastaví adresář s uživatelskými daty na \fIjméno\fP v $HOME nebo "Dokumenty\eMy
Games" pod windows. Můžete však také použít absolutní cestu pro adresář s
nastavením mmio $HOME nebo "Dokumenty\eMyGames". Pod X11 je výchozí
$XDG_CONFIG_HOME nebo $HOME/.config/wesnoth, na ostatních systémech v
uživatelských adresářích.
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
\fB\-\-userconfig\-path\fP
pouze zobrazí cestu k adresáři s konfiguračními soubory a skončí.
@ -192,7 +194,9 @@ pouze zobrazí cestu k adresáři s konfiguračními soubory a skončí.
\fB\-\-userdata\-dir\fP\fI\ jméno\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
pouze zobrazí cestu k adresáři s konfiguračními soubory a skončí.

View file

@ -195,7 +195,9 @@ Startet das Programm mit einem kleinen Testszenario.
\fB\-\-userconfig\-dir\fP\fI\ name\fP
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy Games".
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
@ -205,7 +207,9 @@ Zeigt an, wo sich das Verzeichnis für die Nutzereinstellungen befindet.
\fB\-\-userdata\-dir\fP\fI\ name\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
prints the path of the userdata directory and exits.

View file

@ -65,7 +65,7 @@ scenario.
overrides the data directory with the one specified
.TP
\fB\-\-data\-path\fP
path the path of the data directory and exits.
prints the path of the data directory and exits.
.TP
\fB\-d, \-\-debug\fP
enables additional command mode options in\-game (see the wiki page at
@ -184,7 +184,9 @@ runs the game in a small test scenario.
\fB\-\-userconfig\-dir\fP\fI\ name\fP
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy Games".
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
@ -194,7 +196,9 @@ prints the path of the user configuration directory and exits.
\fB\-\-userdata\-dir\fP\fI\ name\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
prints the path of the userdata directory and exits.
@ -234,7 +238,7 @@ era. The era is chosen by an id. Eras are described in the
.TP
\fB\-\-exit\-at\-end\fP
exits once the scenario is over, without displaying victory/defeat dialog
which requires the user to click OK. This is also used for scriptable
which requires the user to click OK. This is also used for script\-based
benchmarking.
.TP
\fB\-\-ignore\-map\-settings\fP
@ -242,7 +246,7 @@ do not use map settings, use default values instead.
.TP
\fB\-\-multiplayer\-repeat=\fP\fIvalue\fP
repeats a multiplayer game \fIvalue\fP times. Best to use with \fB\-\-nogui\fP for
scriptable benchmarking.
script\-based benchmarking.
.TP
\fB\-\-nogui\fP
runs the game without the GUI. Must appear before \fB\-\-multiplayer\fP to have

View file

@ -102,16 +102,16 @@ and write. Bans will be saved to this file and read again on server start.
.TP
\fBcompress_stored_rooms\fP
Determines whether the rooms file should be read and written to in
compressed form. Defaults to \fByes\fP.
compressed form. Default value is \fByes\fP.
.TP
\fBconnections_allowed\fP
The number of allowed connections from the same IP. \fB0\fP means
infinite. (default: \fB5\fP)
.TP
\fBdisallow_names\fP
Names/nicks that are not accepted by the server. \fB*\fP and \fB?\fP from wildcard
patterns are supported. See \fBglob\fP(7) for more details. Default values
(used if nothing is specified) are:
Names/nicks that are not accepted by the server. \fB*\fP and \fB?\fP from
wild\-card patterns are supported. See \fBglob\fP(7) for more details. Default
values (used if nothing is specified) are:
\fB*admin*,*admln*,*server*,ai,ai?,computer,human,network,player\fP.
.TP
\fBfifo_path\fP
@ -151,7 +151,7 @@ The command that the server uses to start a new server process via the
.TP
\fBroom_save_file\fP
Path to a file where the room info should be stored. This file is read on
server startup and written to later. If empty or not set, rooms are not
server start\-up and written to later. If empty or not set, rooms are not
loaded and not saved.
.TP
\fBsave_replays\fP
@ -160,7 +160,7 @@ games. (default: \fBfalse\fP)
.TP
\fBversions_accepted\fP
A comma separated list of version strings to be accepted by the server. \fB*\fP
and \fB?\fP from wildcard patterns are supported. (defaults to the
and \fB?\fP from wild\-card patterns are supported. (defaults to the
corresponding wesnoth version)
.br
Example: \fBversions_accepted="*"\fP accepts any version string.
@ -187,7 +187,7 @@ The port to connect to.
.TP
\fBversion\fP
A comma separated list of versions to redirect. Behaves the same way as
\fBversions_accepted\fP in regard to wildcard patterns.
\fBversions_accepted\fP in regard to wild\-card patterns.
.RE
.P
\fB[ban_time]\fP A tag to define convenient keywords for temporary ban time
@ -260,7 +260,7 @@ The user name under which to log into the mail server.
This user's password.
.TP
\fBfrom_address\fP
The reply\-to address of you mail.
The reply\-to address of your mail.
.TP
\fBmail_port\fP
The port on which your mail server is running. Default is 25.

View file

@ -190,12 +190,13 @@ trata los errores de validación como fatales.
inicia el juego en un pequeño escenario de prueba.
.TP
\fB\-\-userconfig\-dir\fP\fI\ name\fP
establece el directorio de configuración del usuario como \fInombre\fP en $HOME
o "Mis documentos\eMis juegos" en Windows. También es posible especificar
una ruta absoluta para el directorio de configuración fuera de $HOME o "Mis
documentos\eMis juegos". Con X11 está predeterminado como $XDG_CONFIG_HOME o
$HOME/.config/wesnoth, en otros sistemas para la ruta de los datos de
usuario.
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
\fB\-\-userconfig\-path\fP
muestra la ruta del directorio de la configuración del usuario y regresa.
@ -203,7 +204,9 @@ muestra la ruta del directorio de la configuración del usuario y regresa.
\fB\-\-userdata\-dir\fP\fI\ nombre\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
muestra la ruta del directorio de datos del usuario y regresa.

View file

@ -181,7 +181,9 @@ käivitab mängu ja väikese testistsenaariumi.
\fB\-\-userconfig\-dir\fP\fI\ name\fP
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy Games".
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
@ -191,7 +193,9 @@ kirjutab ekraaanile kasutajasätete kataloogi nime ja väljub programmist.
\fB\-\-userdata\-dir\fP\fI\ name\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
prints the path of the userdata directory and exits.

View file

@ -182,7 +182,9 @@ Käynnistää pelin pienessä testiskenaariossa.
\fB\-\-userconfig\-dir\fP\fI\ name\fP
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy Games".
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
@ -192,7 +194,9 @@ Näyttää käyttäjän asetushakemiston polun ja lopettaa.
\fB\-\-userdata\-dir\fP\fI\ name\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
prints the path of the userdata directory and exits.

View file

@ -187,12 +187,13 @@ Les erreurs de validation sont traitées comme des erreurs fatales.
Lance le jeu avec un petit scénario de test.
.TP
\fB\-\-userconfig\-dir\fP\fI\ name\fP
Définit le répertoire de configuration de l'utilisateur à \fInom\fP dans $HOME
ou dans "Mes Documents\eMes Jeux" pour Windows. Vous pouvez aussi indiquer
un chemin absolu pour un dossier de configuration situé en dehors de $HOME
ou de "Mes Documents\eMes Jeux". Sous X11 le répertoire par défaut est
$XDG_CONFIG_HOME ou $HOME/.config/wesnoth. Sur les autres systèmes le
répertoire par défaut est le répertoire de données.
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
\fB\-\-userconfig\-path\fP
Affiche le nom du répertoire de configuration utilisateur et quitte le
@ -201,7 +202,9 @@ programme.
\fB\-\-userdata\-dir\fP\fI\ nom\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
Affiche le nom du répertoire de données et quitte le programme.

View file

@ -185,13 +185,14 @@ Os erros de corrección trátanse coma erros graves.
\fB\-t, \-\-test\fP
Executa o xogo nun pequeno escenario de proba.
.TP
\fB\-\-userconfig\-dir\fP\fI\ name\fP
Define \fInome\fP coma o nome do cartafol da configuración do usuario no seu
directorio persoal («$HOME») ou «Os meus documentos\eOs meus xogos» en
Windows. Tamén podes indicar unha ruta absoluta para o directorio da
configuración fóra dos antes mencionados. En X11 o cartafol predeterminado é
«$XDG_CONFIG_HOME» ou «$HOME/.config/wesnoth», noutros sistemas é a ruta de
datos do usuario.
\fB\-\-userconfig\-dir\fP\fI\ nome\fP
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
\fB\-\-userconfig\-path\fP
Devolve a ruta do directorio da configuración do usuario.
@ -199,7 +200,9 @@ Devolve a ruta do directorio da configuración do usuario.
\fB\-\-userdata\-dir\fP\fI\ nome\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
Devolve a ruta do directorio dos datos do usuario.

View file

@ -189,7 +189,9 @@ elindítja a játékot és betölt egy kis teszthadjáratot.
\fB\-\-userconfig\-dir\fP\fI\ name\fP
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy Games".
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
@ -200,7 +202,9 @@ kilép.
\fB\-\-userdata\-dir\fP\fI\ name\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
prints the path of the userdata directory and exits.

View file

@ -185,7 +185,9 @@ jalankan permainan pada pengujian skenario kecil\-kecilan.
\fB\-\-userconfig\-dir\fP\fI\ name\fP
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy Games".
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
@ -195,7 +197,9 @@ mencetak alur direktori konfigurasi pengguna dan keluar.
\fB\-\-userdata\-dir\fP\fI\ name\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
prints the path of the userdata directory and exits.

View file

@ -188,12 +188,13 @@ errori di validazione sono trattati come errori fatali.
esegue il gioco con un piccolo scenario di test.
.TP
\fB\-\-userconfig\-dir\fP\fI\ name\fP
imposta la directory di configurazione dellutente a \fInome\fP sotto $HOME o
"My Documents\eMy Games" per Windows. Puoi anche specificare un percorso
assoluto per la directory di configurazione al di fuori di $HOME o "My
Documents\eMy Games". In ambiente X11 lo la directory standard è
$XDG_CONFIG_HOME o $HOME/.config/wesnoth, in altri ambienti corrisponde alla
directory contenente i dati utente.
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
\fB\-\-userconfig\-path\fP
stampa il percorso della cartella di configurazione ed esce.
@ -201,7 +202,9 @@ stampa il percorso della cartella di configurazione ed esce.
\fB\-\-userdata\-dir\fP\fI\ nome\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
stampa il percorso della cartella di configurazione dellutente ed esce.

View file

@ -190,7 +190,9 @@ uruchamia grę z małym scenariuszem testowym.
\fB\-\-userconfig\-dir\fP\fI\ name\fP
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy Games".
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
@ -200,7 +202,9 @@ wyświetla ścieżkę katalogu konfiguracyjnego użytkownika i kończy działani
\fB\-\-userdata\-dir\fP\fI\ name\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
prints the path of the userdata directory and exits.

View file

@ -185,12 +185,13 @@ erros de validação são tratados como fatais.
inicia o jogo com um pequeno cenário de teste.
.TP
\fB\-\-userconfig\-dir\fP\fI\ name\fP
define o diretório \fInome\fP do utilizador em $HOME ou “Os meus Documentos\Os
Meus Jogos” em Windows. Também podes especificar o caminho absoluto para as
configurações fora de $HOME ou “Os meus Documentos\Os Meus Jogos”. Em
sistemas X11 este indica por predefinição até $XDG_CONFIG_HOME ou
$HOME/.config/wesnoth, nos outros sistemas operativos ao diretório do
utilizador.
sets the user configuration directory to \fIname\fP under $HOME or "My
Documents\eMy Games" for windows. You can also specify an absolute path for
the configuration directory outside the $HOME or "My Documents\eMy
Games". On Windows it is also possible to specify a directory relative to
the process working directory by using path starting with ".\e" or "..\e".
Under X11 this defaults to $XDG_CONFIG_HOME or $HOME/.config/wesnoth, on
other systems to the userdata path.
.TP
\fB\-\-userconfig\-path\fP
imprime o caminho da pasta de configurações de usuário e sai.
@ -198,7 +199,9 @@ imprime o caminho da pasta de configurações de usuário e sai.
\fB\-\-userdata\-dir\fP\fI\ nome\fP
sets the userdata directory to \fIname\fP under $HOME or "My Documents\eMy
Games" for windows. You can also specify an absolute path for the userdata
directory outside the $HOME or "My Documents\eMy Games".
directory outside the $HOME or "My Documents\eMy Games". On Windows it is
also possible to specify a directory relative to the process working
directory by using path starting with ".\e" or "..\e".
.TP
\fB\-\-userdata\-path\fP
imprime o caminho da pasta de configurações de usuário e termina.

Some files were not shown because too many files have changed in this diff Show more