Merge branch 'master' into sdl2
This commit is contained in:
commit
2c1f3ef540
1717 changed files with 426045 additions and 366895 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -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*
|
||||
|
|
2
Doxyfile
2
Doxyfile
|
@ -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.
|
||||
|
|
|
@ -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]
|
||||
[*]It’s 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
107
changelog
|
@ -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 |
|
@ -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]
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")}
|
||||
|
|
|
@ -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..."
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -21,8 +21,6 @@
|
|||
{EXTRA_SCENARIO_MUSIC battle.ogg}
|
||||
#TODO redo music playlist
|
||||
|
||||
# {LOW_PRESTART}
|
||||
|
||||
[story]
|
||||
#ifdef MULTIPLAYER
|
||||
[part]
|
||||
|
|
|
@ -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..."
|
||||
|
|
|
@ -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..."
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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 necromancer’s 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 necromancer’s 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]
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@
|
|||
|
||||
[gold_carryover]
|
||||
bonus=no
|
||||
carryover_percentage=80
|
||||
carryover_percentage=40
|
||||
[/gold_carryover]
|
||||
[/objectives]
|
||||
|
||||
|
|
|
@ -547,6 +547,7 @@
|
|||
[endlevel]
|
||||
result=victory
|
||||
bonus=no
|
||||
{NEW_GOLD_CARRYOVER 40}
|
||||
[/endlevel]
|
||||
[/event]
|
||||
|
||||
|
|
|
@ -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 let’s 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
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
|
||||
[gold_carryover]
|
||||
bonus=yes
|
||||
carryover_percentage=80
|
||||
carryover_percentage=40
|
||||
[/gold_carryover]
|
||||
[/objectives]
|
||||
[/event]
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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
|
@ -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= _ "Al’Mar"
|
||||
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= _ "Ha’Tang"
|
||||
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}
|
||||
|
||||
# Here’s 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= _ "It’s 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! DON’T 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= _ "Ro’Arthian, send a message to Hamel. Tell him it’s 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= _ "It’s done."
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
speaker=Tallin
|
||||
message= _ "Very well. Forward! Victory or death!"
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
speaker=Krash
|
||||
message= _ "Come on boys, let’s 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, aren’t 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]
|
||||
|
|
|
@ -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 Hidel’s 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= _ "Ha’Tuil"
|
||||
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}
|
||||
|
||||
# Here’s 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}
|
||||
|
||||
# Here’s 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 hero’s 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 HIDEL’S NAME!"
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
id="Ha'Tuil"
|
||||
# wmllint: local spelling Grrr
|
||||
message= _ "Grrr, Ha’Tuil 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 won’t 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 let’s crush the rest of this scum and report back to the Master."
|
||||
[/message]
|
||||
|
||||
[message]
|
||||
id=Eryssa
|
||||
message= _ "I don’t 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 let’s 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]
|
||||
|
|
|
@ -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 |
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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. It’s 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]
|
||||
|
|
|
@ -1299,6 +1299,9 @@
|
|||
name = "Paŭlo Ebermann (Pauxlo)"
|
||||
wikiuser = "Pauxlo"
|
||||
[/entry]
|
||||
[entry]
|
||||
name = "Peter Elmers"
|
||||
[/entry]
|
||||
[entry]
|
||||
name = "Peter Mawhorter (solsword)"
|
||||
wikiuser = "solsword"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
BIN
data/core/music/frantic-old.ogg
Normal file
BIN
data/core/music/frantic-old.ogg
Normal file
Binary file not shown.
Binary file not shown.
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
|
||||
[/state_pressed]
|
||||
|
||||
[state_focussed]
|
||||
[state_focused]
|
||||
|
||||
[draw]
|
||||
|
||||
|
@ -96,7 +96,7 @@
|
|||
|
||||
[/draw]
|
||||
|
||||
[/state_focussed]
|
||||
[/state_focused]
|
||||
|
||||
[/resolution]
|
||||
#enddef
|
||||
|
|
|
@ -69,7 +69,7 @@
|
|||
|
||||
[/state_pressed]
|
||||
|
||||
[state_focussed]
|
||||
[state_focused]
|
||||
|
||||
[draw]
|
||||
|
||||
|
@ -83,7 +83,7 @@
|
|||
|
||||
[/draw]
|
||||
|
||||
[/state_focussed]
|
||||
[/state_focused]
|
||||
|
||||
[/resolution]
|
||||
#enddef
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
|
||||
[/state_pressed]
|
||||
|
||||
[state_focussed]
|
||||
[state_focused]
|
||||
|
||||
[draw]
|
||||
|
||||
|
@ -96,7 +96,7 @@
|
|||
|
||||
[/draw]
|
||||
|
||||
[/state_focussed]
|
||||
[/state_focused]
|
||||
|
||||
[/resolution]
|
||||
#enddef
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -136,7 +136,7 @@
|
|||
|
||||
[/state_disabled]
|
||||
|
||||
[state_focussed]
|
||||
[state_focused]
|
||||
|
||||
[draw]
|
||||
|
||||
|
@ -150,7 +150,7 @@
|
|||
|
||||
[/draw]
|
||||
|
||||
[/state_focussed]
|
||||
[/state_focused]
|
||||
|
||||
[/resolution]
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -409,10 +409,10 @@
|
|||
[/draw]
|
||||
[/state_pressed]
|
||||
|
||||
[state_focussed]
|
||||
[state_focused]
|
||||
[draw]
|
||||
[/draw]
|
||||
[/state_focussed]
|
||||
[/state_focused]
|
||||
|
||||
[/resolution]
|
||||
|
||||
|
|
|
@ -79,8 +79,6 @@
|
|||
|
||||
[grid]
|
||||
|
||||
id = "preview_pane"
|
||||
|
||||
[row]
|
||||
grow_factor = 1
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
>>
|
||||
|
|
|
@ -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=""
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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"}
|
||||
)}
|
||||
)}
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -106,4 +106,5 @@ revert:
|
|||
./wmllint --revert $(MAINLINE) $(UMC)
|
||||
clean:
|
||||
./wmllint --clean $(MAINLINE) $(UMC)
|
||||
rm -f macro-reference.html
|
||||
|
||||
|
|
|
@ -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čí.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 dell’utente 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 dell’utente ed esce.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
Loading…
Add table
Reference in a new issue