Compare commits
56 commits
gfgtdf-rem
...
master
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2bbcd5f814 | ||
![]() |
6d97ac494e | ||
![]() |
5b63155a23 | ||
![]() |
392b8dc9fb | ||
![]() |
ec0e0992b6 | ||
![]() |
f360e781c7 | ||
![]() |
78e6bdaa29 | ||
![]() |
4593921b67 | ||
![]() |
fafa0e7b13 | ||
![]() |
96a2ff69c9 | ||
![]() |
507e84e8cb | ||
![]() |
e586f2bcf5 | ||
![]() |
d9ef464b1e | ||
![]() |
0badadaffe | ||
![]() |
4475260e68 | ||
![]() |
868cb845f0 | ||
![]() |
a74b39da25 | ||
![]() |
f73e2b641b | ||
![]() |
001c90c1fc | ||
![]() |
11eaca1277 | ||
![]() |
c9da910fb8 | ||
![]() |
920e155ef6 | ||
![]() |
36fa52fc1a | ||
![]() |
9b0430e1f7 | ||
![]() |
19be417a05 | ||
![]() |
6d10d919d5 | ||
![]() |
e8a3e3fcef | ||
![]() |
8210f33a7b | ||
![]() |
352157d593 | ||
![]() |
10364b169b | ||
![]() |
a6954bd56e | ||
![]() |
6a18a37afe | ||
![]() |
d191109bb4 | ||
![]() |
0c1357b594 | ||
![]() |
f7dc6ebaeb | ||
![]() |
4a689a687d | ||
![]() |
144fa9c71a | ||
![]() |
f5ab5620e2 | ||
![]() |
5e5fc1db5d | ||
![]() |
2be41a4f85 | ||
![]() |
edb4331d56 | ||
![]() |
e037694945 | ||
![]() |
f113b2b7a7 | ||
![]() |
e64283534f | ||
![]() |
f2bcc997b8 | ||
![]() |
782ab2df3e | ||
![]() |
79798b9f2b | ||
![]() |
c1c0111d3c | ||
![]() |
06d1fade32 | ||
![]() |
f29f8fb368 | ||
![]() |
893b31e769 | ||
![]() |
e8af57e3ab | ||
![]() |
f3c48ab8ce | ||
![]() |
a7d3db9cf7 | ||
![]() |
bf4ad3bb42 | ||
![]() |
c762c01924 |
119
add_source_file
|
@ -81,7 +81,7 @@ code_blocks_target_translations = {
|
|||
# XCode #
|
||||
#=======#
|
||||
|
||||
def add_to_xcode(filename, targets):
|
||||
def modify_xcode(filename, targets, remove):
|
||||
"""Add the given file to the specified targets.
|
||||
"""
|
||||
projectfile = rootdir.joinpath(
|
||||
|
@ -121,24 +121,29 @@ def add_to_xcode(filename, targets):
|
|||
raise Exception(f"problem finding '{d}' group in '{groupname}'")
|
||||
parent_group = found_groups[0]
|
||||
|
||||
# if the group already has an entry with the same filename, loudly skip.
|
||||
# note: this doesn't allow adding to targets one at a time.
|
||||
# a new file should be added to all targets at once...
|
||||
# or maybe targets could be checked somehow,
|
||||
# or maybe the file could simply be completely removed and readded.
|
||||
if project.get_files_by_name(filename.name, parent=parent_group):
|
||||
print(" '"+filename.name+"' already found in Xcode project '"+",".join(translated_targets)+"', skipping")
|
||||
return
|
||||
if remove :
|
||||
# Remove from all targets if we want to remove
|
||||
for file in project.get_files_by_name(filename.name, parent=parent_group):
|
||||
project.remove_file_by_id(file.get_id())
|
||||
else:
|
||||
# if the group already has an entry with the same filename, loudly skip.
|
||||
# note: this doesn't allow adding to targets one at a time.
|
||||
# a new file should be added to all targets at once...
|
||||
# or maybe targets could be checked somehow,
|
||||
# or maybe the file could simply be completely removed and readded.
|
||||
if project.get_files_by_name(filename.name, parent=parent_group):
|
||||
print(" '"+filename.name+"' already found in Xcode project '"+",".join(translated_targets)+"', skipping")
|
||||
return
|
||||
|
||||
# force is True here because otherwise a duplicate filename in
|
||||
# a different place will block addition of the new file.
|
||||
# the rest is just to match existing project file structure.
|
||||
project.add_file(filename.name,
|
||||
force=True,
|
||||
tree="<group>",
|
||||
parent=parent_group,
|
||||
target_name=translated_targets,
|
||||
)
|
||||
# force is True here because otherwise a duplicate filename in
|
||||
# a different place will block addition of the new file.
|
||||
# the rest is just to match existing project file structure.
|
||||
project.add_file(filename.name,
|
||||
force=True,
|
||||
tree="<group>",
|
||||
parent=parent_group,
|
||||
target_name=translated_targets,
|
||||
)
|
||||
|
||||
# that's done, save the file
|
||||
project.save()
|
||||
|
@ -148,7 +153,7 @@ def add_to_xcode(filename, targets):
|
|||
# source_lists #
|
||||
#==============#
|
||||
|
||||
def add_to_source_list(filename, source_list):
|
||||
def modify_source_list(filename, source_list, remove):
|
||||
source_list_file = rootdir.joinpath("source_lists", source_list)
|
||||
sl_lines = open(source_list_file).readlines()
|
||||
file_line = filename.as_posix() + '\n'
|
||||
|
@ -157,12 +162,16 @@ def add_to_source_list(filename, source_list):
|
|||
if filename.suffix != ".cpp":
|
||||
return
|
||||
|
||||
# if the target already has an entry with the same filename, loudly skip
|
||||
if file_line in sl_lines:
|
||||
print(f" '{filename}' already found in '{source_list}', skipping")
|
||||
return
|
||||
if remove:
|
||||
if file_line in sl_lines: sl_lines.remove(file_line)
|
||||
else:
|
||||
# if the target already has an entry with the same filename, loudly skip
|
||||
if file_line in sl_lines:
|
||||
print(f" '{filename}' already found in '{source_list}', skipping")
|
||||
return
|
||||
|
||||
sl_lines.append(file_line)
|
||||
|
||||
sl_lines.append(file_line)
|
||||
sl_lines.sort()
|
||||
open(source_list_file, 'w').writelines(sl_lines)
|
||||
|
||||
|
@ -170,13 +179,18 @@ def add_to_source_lists(filename, targets):
|
|||
translated_targets = [source_list_target_translations[t] for t in targets]
|
||||
print(" source_list targets:", translated_targets)
|
||||
for t in translated_targets:
|
||||
add_to_source_list(filename, t)
|
||||
modify_source_list(filename, t, False)
|
||||
|
||||
def remove_from_source_lists(filename):
|
||||
# remove from all tagerts if -r was specified.
|
||||
for t in source_list_target_translations.values():
|
||||
modify_source_list(filename, t, True)
|
||||
|
||||
#==============#
|
||||
# Code::Blocks #
|
||||
#==============#
|
||||
|
||||
def add_to_code_blocks_target(filename, target):
|
||||
def modify_code_blocks_target(filename, target, remove):
|
||||
cbp_file = rootdir.joinpath(
|
||||
"projectfiles",
|
||||
"CodeBlocks",
|
||||
|
@ -190,30 +204,33 @@ def add_to_code_blocks_target(filename, target):
|
|||
|
||||
elem = f"\t\t<Unit filename=\"{filename_for_cbp}\" />\n"
|
||||
|
||||
# if the target already has an entry with the same filename, loudly skip
|
||||
if elem in cbp_lines:
|
||||
print(f" '{filename}' already found in '{target}.cbp', skipping")
|
||||
return
|
||||
if remove:
|
||||
if elem in cbp_lines: cbp_lines.remove(elem)
|
||||
else:
|
||||
# if the target already has an entry with the same filename, loudly skip
|
||||
if elem in cbp_lines:
|
||||
print(f" '{filename}' already found in '{target}.cbp', skipping")
|
||||
return
|
||||
|
||||
# find an appropriate line to add before/after
|
||||
index = 0
|
||||
for line in cbp_lines:
|
||||
if line.startswith("\t\t<Unit "):
|
||||
if elem < line:
|
||||
# find an appropriate line to add before/after
|
||||
index = 0
|
||||
for line in cbp_lines:
|
||||
if line.startswith("\t\t<Unit "):
|
||||
if elem < line:
|
||||
break
|
||||
elif line.startswith("\t\t<Extensions>"):
|
||||
# we must be the last entry, as this comes after the Unit section
|
||||
break
|
||||
elif line.startswith("\t\t<Extensions>"):
|
||||
# we must be the last entry, as this comes after the Unit section
|
||||
break
|
||||
index += 1
|
||||
cbp_lines.insert(index, elem)
|
||||
index += 1
|
||||
cbp_lines.insert(index, elem)
|
||||
|
||||
open(cbp_file, 'w').writelines(cbp_lines)
|
||||
|
||||
def add_to_code_blocks(filename, targets):
|
||||
translated_targets = [code_blocks_target_translations[t] for t in targets]
|
||||
def modify_code_blocks(filename, targets, remove):
|
||||
translated_targets = code_blocks_target_translations.values() if remove else [code_blocks_target_translations[t] for t in targets]
|
||||
print(" code::blocks targets:", translated_targets)
|
||||
for t in translated_targets:
|
||||
add_to_code_blocks_target(filename, t)
|
||||
modify_code_blocks_target(filename, t, remove)
|
||||
|
||||
def sanity_check_existing_cpp_hpp(filenames):
|
||||
"""
|
||||
|
@ -285,6 +302,8 @@ if __name__ == "__main__":
|
|||
help="which build targets to add the file to")
|
||||
ap.add_argument("--no-checks", action="store_true",
|
||||
help="do not check whether the files exist, etc")
|
||||
ap.add_argument("-r", "--remove", action="store_true",
|
||||
help="remove the specified files from projectfiles instead of adding them, --target is then ignored")
|
||||
# By default, recognise --help too
|
||||
options = ap.parse_args()
|
||||
|
||||
|
@ -301,7 +320,13 @@ if __name__ == "__main__":
|
|||
sanity_check_existing_cpp_hpp(filenames)
|
||||
|
||||
for filename in filenames:
|
||||
print(f"adding '{filename}' to targets: {options.target}")
|
||||
add_to_xcode(filename, options.target)
|
||||
add_to_source_lists(filename, options.target)
|
||||
add_to_code_blocks(filename, options.target)
|
||||
if options.remove:
|
||||
print(f"removing '{filename}' from all targets")
|
||||
modify_xcode(filename, options.target, True)
|
||||
remove_from_source_lists(filename)
|
||||
modify_code_blocks(filename, options.target, True)
|
||||
else:
|
||||
print(f"adding '{filename}' to targets: {options.target}")
|
||||
modify_xcode(filename, options.target, False)
|
||||
add_to_source_lists(filename, options.target)
|
||||
modify_code_blocks(filename, options.target, False)
|
||||
|
|
21
changelog.md
|
@ -1,4 +1,4 @@
|
|||
## Version 1.19.6+dev
|
||||
## Version 1.19.7+dev
|
||||
### Add-ons client
|
||||
### Add-ons server
|
||||
### Campaigns
|
||||
|
@ -6,16 +6,33 @@
|
|||
### Multiplayer
|
||||
### Lua API
|
||||
### Packaging
|
||||
* Windows 10 or later is now required
|
||||
### Terrain
|
||||
### Translations
|
||||
* Updated translations: Bengali, British English, Hungarian
|
||||
### Units
|
||||
### User interface
|
||||
### WML Engine
|
||||
* [variables] in [side] no longer sets variables of the implicit leader unit (it now only sets the sides variables), to create a leader unit with variables, [leader] must be used instead. (issue #3742)
|
||||
### Miscellaneous and Bug Fixes
|
||||
|
||||
## Version 1.19.7
|
||||
### Multiplayer
|
||||
* Implemented an attempt to fix the multiplayer server crashing if someone requested game history and then disconnected before receiving the results
|
||||
### Translations
|
||||
* Updated translations: Bengali, British English, Chinese (Simplified), Czech, Hungarian, Italian
|
||||
### Units
|
||||
* Dawarf - Decreased Cost from 17 to 12, Decreased Level from 1 to 0, and Decreased XP from 50 to 25
|
||||
* Elvish Champion: HP 72 -> 70, cost 61 -> 60, accuracy bonus is now explained via a weapon special
|
||||
### User interface
|
||||
* The `screen_pitch_microns` variable is no longer available for UI formulas
|
||||
* Added a red line to the bottom of chat window when entering lobby
|
||||
### WML Engine
|
||||
* [stacked_widget] no longer accepts the long-deprecated [stack] tag
|
||||
* The author attribute is now again a display only attribute. Instead the primary_authors attribute should be used, which supports specifying multiple primary authors.
|
||||
* [side]'s `leader` attribute has been removed
|
||||
### Miscellaneous and Bug Fixes
|
||||
* Fixed the game quitting at scenario end when loading a mp campaign game in singleplayer in debug mode
|
||||
* Fixed map editor crashing when creating or opening scenario after having played a local scenario before opening the map editor
|
||||
|
||||
## Version 1.19.6
|
||||
### Add-ons client
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
### Units
|
||||
* Dawarf - Decreased Cost from 17 to 12, Decreased Level from 1 to 0, and Decreased XP from 50 to 25
|
2
changelog_entries/dune_warmaster.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
### Units
|
||||
* Dune Warmaster: HP 59 -> 61 scimitar damage 9 -> 10
|
5
changelog_entries/ei-dialogue-fixes.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
### Campaigns
|
||||
* Eastern Invasion
|
||||
* S04c: give Mal-Ravanal gold to recruit more units when their army becomes too small
|
||||
* forbid all Dunefolk units to take the Plague Staff
|
||||
* fix minor bugs with dialogues
|
|
@ -1,2 +0,0 @@
|
|||
### Units
|
||||
* Elvish Champion: HP 72 -> 70, cost 61 -> 60, accuracy bonus is now explained via a weapon special
|
2
changelog_entries/explorer_resistance_nerf.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
### Units
|
||||
* Dwarvish Explorer: physical resists reduced from 20% to 10%, melee damage increased from 10 to 11.
|
3
changelog_entries/fire_guardian_resistances.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
### Units
|
||||
* Fire Wisps and Guardian - Fire Resistance changed from 50% to 70%
|
||||
* Fire Wraith - Fire Resistance changed from 50% to 80%
|
2
changelog_entries/orcish_xbowman_nerf.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
### Units
|
||||
* Orcish Crossbowman: melee 6-3 -> 4-3, experience to level 43 -> 57
|
|
@ -21,6 +21,14 @@
|
|||
[/option]
|
||||
[/advanced_preference]
|
||||
|
||||
[advanced_preference]
|
||||
field=addon_icons
|
||||
name= _ "Whether to show icons in the add-ons list on the add-ons manager"
|
||||
description= _ "Disabling saves bandwidth by not sending icons for the add-ons list in the add-ons manager"
|
||||
type=boolean
|
||||
default=yes
|
||||
[/advanced_preference]
|
||||
|
||||
[advanced_preference]
|
||||
field=ask_delete
|
||||
name= _ "Confirm deleting saves"
|
||||
|
|
|
@ -665,6 +665,12 @@
|
|||
side=4
|
||||
amount={ON_DIFFICULTY 15 45 75} # otherwise his armies start to feel a little thin around now
|
||||
[/gold]
|
||||
[fire_event]
|
||||
name=dacyn_warning
|
||||
[/fire_event]
|
||||
[/event]
|
||||
[event]
|
||||
name=dacyn_warning
|
||||
[message]
|
||||
speaker=Dacyn
|
||||
message= _ "Gweddry, we should not be here. They are merely toying with us right now, but all will be lost if Mal-Ravanal finds me amongst you!"
|
||||
|
@ -688,6 +694,9 @@
|
|||
[event]
|
||||
name=ravanal_gets_serious
|
||||
|
||||
[fire_event]
|
||||
name=dacyn_warning
|
||||
[/fire_event]
|
||||
{REPLACE_SCENARIO_MUSIC silence.ogg}
|
||||
[message] # if you change this, also change 06b_Soradoc
|
||||
speaker=Mal-Ravanal
|
||||
|
@ -915,7 +924,7 @@
|
|||
[/then]
|
||||
|
||||
[else]
|
||||
{FIND_NEARBY (type,side=Knight,1) 36 15 99}
|
||||
{FIND_NEARBY (trait,side=survivor,1) 36 15 99}
|
||||
[/else]
|
||||
[/if]
|
||||
[message]
|
||||
|
@ -924,7 +933,6 @@
|
|||
[/message]
|
||||
|
||||
{FIND_NEARBY (
|
||||
type=Knight,Terraent
|
||||
side=8
|
||||
) 36 15 99}
|
||||
[message]
|
||||
|
|
|
@ -516,6 +516,38 @@
|
|||
{MODIFY_UNIT id=Dacyn attacks_left 0}
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=owaec_joins
|
||||
|
||||
[capture_village]
|
||||
owner_side=2
|
||||
side=1
|
||||
[/capture_village]
|
||||
[modify_unit]
|
||||
[filter]
|
||||
side=2
|
||||
[/filter]
|
||||
|
||||
side=1
|
||||
moves=$($this_unit.max_moves)
|
||||
attacks_left=1
|
||||
{TEAM_COLOR_OVERRIDE () blue}
|
||||
[/modify_unit]
|
||||
[message]
|
||||
speaker=narrator
|
||||
image=wesnoth-icon.png
|
||||
message= _ "(You may now recruit Horsemen and Cavalrymen!)"
|
||||
[/message]
|
||||
[set_extra_recruit] # need to set recruits per-unit (instead of per-side) so we don't mess up the plague staff
|
||||
id=Gweddry
|
||||
extra_recruit={REGULAR_RECRUIT_LIST}
|
||||
[/set_extra_recruit]
|
||||
[set_extra_recruit]
|
||||
id=Owaec
|
||||
extra_recruit={REGULAR_RECRUIT_LIST}
|
||||
[/set_extra_recruit]
|
||||
[/event]
|
||||
|
||||
[event]
|
||||
name=capture
|
||||
first_time_only=no
|
||||
|
@ -718,34 +750,9 @@
|
|||
speaker=Owaec
|
||||
message= _ "Huzzah!! At last, these villagers are liberated! Gweddry, thank you for your aid. I place my Clansmen and myself at your service."
|
||||
[/message]
|
||||
[capture_village]
|
||||
owner_side=2
|
||||
side=1
|
||||
[/capture_village]
|
||||
[modify_unit]
|
||||
[filter]
|
||||
side=2
|
||||
[/filter]
|
||||
|
||||
side=1
|
||||
moves=$($this_unit.max_moves)
|
||||
attacks_left=1
|
||||
{TEAM_COLOR_OVERRIDE () blue}
|
||||
[/modify_unit]
|
||||
[message]
|
||||
speaker=narrator
|
||||
image=wesnoth-icon.png
|
||||
message= _ "(You may now recruit Horsemen and Cavalrymen!)"
|
||||
[/message]
|
||||
[set_extra_recruit] # need to set recruits per-unit (instead of per-side) so we don't mess up the plague staff
|
||||
id=Gweddry
|
||||
extra_recruit={REGULAR_RECRUIT_LIST}
|
||||
[/set_extra_recruit]
|
||||
[set_extra_recruit]
|
||||
id=Owaec
|
||||
extra_recruit={REGULAR_RECRUIT_LIST}
|
||||
[/set_extra_recruit]
|
||||
|
||||
[fire_event]
|
||||
name=owaec_joins
|
||||
[/fire_event]
|
||||
[if]
|
||||
[not]
|
||||
[have_unit]
|
||||
|
@ -879,33 +886,9 @@
|
|||
speaker=Owaec
|
||||
message= _ "Huzzah!! May these be the first of many undead to fall before our hooves! Gweddry, thank you for your aid. I place my Clansmen and myself at your service."
|
||||
[/message]
|
||||
[capture_village]
|
||||
owner_side=2
|
||||
side=1
|
||||
[/capture_village]
|
||||
[modify_unit]
|
||||
[filter]
|
||||
side=2
|
||||
[/filter]
|
||||
|
||||
side=1
|
||||
moves=$($this_unit.max_moves)
|
||||
attacks_left=1
|
||||
{TEAM_COLOR_OVERRIDE () blue}
|
||||
[/modify_unit]
|
||||
[message]
|
||||
speaker=narrator
|
||||
image=wesnoth-icon.png
|
||||
message= _ "(You may now recruit Horsemen and Cavalrymen!)"
|
||||
[/message]
|
||||
[set_extra_recruit] # need to set recruits per-unit (instead of per-side) so we don't mess up the plague staff
|
||||
id=Gweddry
|
||||
extra_recruit={REGULAR_RECRUIT_LIST}
|
||||
[/set_extra_recruit]
|
||||
[set_extra_recruit]
|
||||
id=Owaec
|
||||
extra_recruit={REGULAR_RECRUIT_LIST}
|
||||
[/set_extra_recruit]
|
||||
[fire_event]
|
||||
name=owaec_joins
|
||||
[/fire_event]
|
||||
[message]
|
||||
speaker=Owaec
|
||||
message= _ "Now let us free these villagers from the outlaws terrorizing them!"
|
||||
|
|
|
@ -315,50 +315,30 @@
|
|||
time=750
|
||||
[/delay]
|
||||
|
||||
[message]
|
||||
speaker=Konrad
|
||||
image=portraits/konrad_II.webp
|
||||
message= _ "Dolburras, Owaec has told me of the help you provided his men; both your skill at arms and your tenacious spirit. We wish to offer you this finely crafted shield — an heirloom of my line — and an honor guard as you return to Knalga."
|
||||
[/message]
|
||||
[if]
|
||||
{VARIABLE_CONDITIONAL plague_staff_wielder_id equals Dolburras}
|
||||
[have_unit]
|
||||
id=Owaec
|
||||
[/have_unit]
|
||||
|
||||
[then]
|
||||
[message]
|
||||
speaker=Konrad
|
||||
image=portraits/konrad_II.webp
|
||||
#po: the player chose to give Dolburras the plague staff
|
||||
message= _ "Dwarf, <i>necromancer</i>, know that Wesnoth will never tolerate your kind. You shall surrender that accursed stave to be destroyed, you shall foreswear the practice of all magic on penalty of death, and you are hereby exiled from Wesnoth. Be grateful for Our mercy."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Dolburras
|
||||
#po: "Yeah, fair enough. I don't think my kinsmen will look kindly upon necromancies either."
|
||||
message= _ "Aye, fair enough. I dinnae think my kinsmen will look kindly upon necromancies either."
|
||||
#po: "Aye, I am honored. You have my sincerest thanks, your Majesty."
|
||||
message= _ "Aye, I be honored. Ye have my sincerest thanks, yer Majesty."
|
||||
[/message]
|
||||
{CLEAR_VARIABLE plague_staff_wielder_id}
|
||||
[/then]
|
||||
|
||||
[else]
|
||||
[message]
|
||||
speaker=Konrad
|
||||
image=portraits/konrad_II.webp
|
||||
message= _ "Dolburras, Owaec has told me of the help you provided his men; both your skill at arms and your tenacious spirit. We wish to offer you this finely crafted shield — an heirloom of my line — and an honor guard as you return to Knalga."
|
||||
speaker=Dolburras
|
||||
#po: Owaec's dead
|
||||
message= _ "Aye, I be honored. I only wish he were here to see the Clans avenged."
|
||||
[/message]
|
||||
[if]
|
||||
[have_unit]
|
||||
id=Owaec
|
||||
[/have_unit]
|
||||
|
||||
[then]
|
||||
[message]
|
||||
speaker=Dolburras
|
||||
#po: "Aye, I am honored. You have my sincerest thanks, your Majesty."
|
||||
message= _ "Aye, I be honored. Ye have my sincerest thanks, yer Majesty."
|
||||
[/message]
|
||||
[/then]
|
||||
|
||||
[else]
|
||||
[message]
|
||||
speaker=Dolburras
|
||||
#po: Owaec's dead
|
||||
message= _ "Aye, I be honored. I only wish he were here to see the Clans avenged."
|
||||
[/message]
|
||||
[/else]
|
||||
[/if]
|
||||
[/else]
|
||||
[/if]
|
||||
[/then]
|
||||
|
@ -423,34 +403,15 @@
|
|||
time=750
|
||||
[/delay]
|
||||
|
||||
[if]
|
||||
{VARIABLE_CONDITIONAL plague_staff_wielder_id equals "Hahid al-Ali"}
|
||||
[then]
|
||||
[message]
|
||||
speaker=Konrad
|
||||
image=portraits/konrad_II.webp
|
||||
#po: the player chose to give Hahid the plague staff
|
||||
message= _ "Southerner, <i>necromancer</i>, know that Wesnoth will never tolerate your kind. You shall surrender that accursed stave to be destroyed, you shall foreswear the practice of all magic on penalty of death, and you are hereby exiled back to the desert wastes. Be grateful for Our mercy."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Hahid al-Ali
|
||||
message= _ "Bah, I save you barbarians from an invasion, and this is the thanks I get! What happened to being paid thrice what I’m owed? So much for northerner generosity!"
|
||||
[/message]
|
||||
{CLEAR_VARIABLE plague_staff_wielder_id}
|
||||
[/then]
|
||||
|
||||
[else]
|
||||
[message]
|
||||
speaker=Konrad
|
||||
image=portraits/konrad_II.webp
|
||||
message= _ "Hahid al-Ali, We know of your far-off people, but great distance has caused little contact between us. May it be thus no longer. If you accept, We would appoint you as ambassador between our two realms."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Hahid al-Ali
|
||||
message= _ "Me, ambassador to the barbarian kingdoms, what a thought! I am honored, and would be even more honored to learn that the job comes with... excellent pay I hope?"
|
||||
[/message]
|
||||
[/else]
|
||||
[/if]
|
||||
[message]
|
||||
speaker=Konrad
|
||||
image=portraits/konrad_II.webp
|
||||
message= _ "Hahid al-Ali, We know of your far-off people, but great distance has caused little contact between us. May it be thus no longer. If you accept, We would appoint you as ambassador between our two realms."
|
||||
[/message]
|
||||
[message]
|
||||
speaker=Hahid al-Ali
|
||||
message= _ "Me, ambassador to the barbarian kingdoms, what a thought! I am honored, and would be even more honored to learn that the job comes with... excellent pay I hope?"
|
||||
[/message]
|
||||
[/then]
|
||||
[/if]
|
||||
|
||||
|
|
|
@ -70,10 +70,7 @@
|
|||
[/then]
|
||||
|
||||
[else]
|
||||
[message]
|
||||
speaker=unit
|
||||
message={INVALID_DESC}
|
||||
[/message]
|
||||
{INVALID_DESC}
|
||||
[/else]
|
||||
[/if]
|
||||
[/event]
|
||||
|
@ -139,7 +136,7 @@ crystal_quiver #enddef
|
|||
_"Crystal Quiver"
|
||||
_"Arrows from this crystalline quiver glimmer with a pale magical light, <i><b>illuminating</b></i> the surrounding area and making your bow or crossbow attacks <i><b>arcane</b></i>."
|
||||
{NOTE_REUSEABLE}
|
||||
""
|
||||
()
|
||||
(
|
||||
[effect]
|
||||
apply_to=new_ability
|
||||
|
@ -181,7 +178,7 @@ holy_amulet_3 #enddef
|
|||
_"Holy Amulet"
|
||||
_"Engraved with a consecrated symbol, this amulet will bless both your <i><b>melee</b></i> and <i><b>ranged</b></i> attacks with <i><b>arcane</b></i> damage."
|
||||
{NOTE_REUSEABLE}
|
||||
""
|
||||
()
|
||||
(
|
||||
[effect]
|
||||
apply_to=new_ability
|
||||
|
@ -216,7 +213,7 @@ sentinel #enddef
|
|||
_"Shield of the Sentinel"
|
||||
_"Deep within this shield’s towering bulk, enchanted machinery whirrs faintly. Whenever an adjacent ally is hit by an attack, <i><b>this shield’s bearer is hit instead</b></i>."
|
||||
{NOTE_REUSEABLE}
|
||||
""
|
||||
()
|
||||
(
|
||||
[effect]
|
||||
apply_to=overlay
|
||||
|
@ -568,7 +565,7 @@ yeti_steak #enddef
|
|||
_"Yetiburger"
|
||||
_"Eating this funny tasting meat <i><b>doubles your hitpoints</b></i> and grants <i><b>immunity to cold</b></i>."
|
||||
{NOTE_SINGLE_USE}
|
||||
""
|
||||
()
|
||||
(
|
||||
[effect]
|
||||
apply_to=hitpoints
|
||||
|
@ -598,7 +595,7 @@ yeti_steak #enddef
|
|||
|
||||
<i><b><span color='#FF0000'>-1</span> damage, <span color='#FF0000'>-1</span> movement, <span color='#00FF00'>+10</span> hitpoints</b></i>."
|
||||
{NOTE_SINGLE_USE}
|
||||
""
|
||||
()
|
||||
(
|
||||
[effect]
|
||||
apply_to=movement
|
||||
|
@ -631,7 +628,7 @@ baneblade #enddef
|
|||
_"This incorporeal sword resembles those wielded by undead wraiths. Any mortal brave enough to wield it becomes <i><b>chaotic</b></i> and lashes out at their foes with reckless abandon.
|
||||
<i><b>6x4 arcane</b></i> damage, <i><b>drains</b></i>, <i><b>berserk</b></i>."
|
||||
{NOTE_REUSEABLE}
|
||||
""
|
||||
()
|
||||
(
|
||||
[effect]
|
||||
apply_to=attack
|
||||
|
@ -696,7 +693,7 @@ potion_of_barkskin #enddef
|
|||
_"Potion of Barkskin"
|
||||
_"This potion bubbles as though over an open flame, yet is cool to the touch. Its drinker gains the <i><b>steadfast</b></i> ability and can <i><b>heal 2 hitpoints each turn</b></i>, like dwarves with the ‘healthy’ trait."
|
||||
{NOTE_SINGLE_USE}
|
||||
""
|
||||
()
|
||||
(
|
||||
[effect]
|
||||
apply_to=new_ability
|
||||
|
@ -728,7 +725,7 @@ ring_of_invisibility #enddef
|
|||
_"Ring of Invisibility"
|
||||
_"This plain gold ring looks unremarkable, but its wearer gains <i><b>skirmisher</b></i> and <i><b>nightstalk</b></i>, becoming invisible in the dark."
|
||||
{NOTE_REUSEABLE}
|
||||
""
|
||||
()
|
||||
(
|
||||
[effect]
|
||||
apply_to=new_ability
|
||||
|
@ -767,15 +764,15 @@ plague_staff #enddef
|
|||
{ID_PLAGUE_STAFF} _"staff" items/plague-staff.png {X} {Y}
|
||||
(
|
||||
[not]
|
||||
type_adv_tree=White Mage,Paladin
|
||||
|
||||
[not]
|
||||
id=Dacyn
|
||||
[/not]
|
||||
race=dunefolk
|
||||
[/not]
|
||||
|
||||
[not]
|
||||
id=Owaec,Gweddry,Dacyn,Hahid al-Ali,Terraent,Konrad
|
||||
type_adv_tree=White Mage,Paladin
|
||||
[/not]
|
||||
|
||||
[not]
|
||||
id=Owaec,Gweddry,Dacyn,Terraent,Konrad
|
||||
[/not]
|
||||
# messes with existing recruiting, and messes with the S18 cutscene
|
||||
# if Dacyn gets this, it also breaks his scripted advancements (and his S17a recruitment)
|
||||
|
@ -784,8 +781,83 @@ plague_staff #enddef
|
|||
_"Looted from a dead necromancer, the wielder of this dark staff becomes <i><b>chaotic</b></i>, and can <i><b>recruit and recall</b></i> Walking Corpses and Soulless.
|
||||
<i><b>6x3 impact</b></i> damage, <i>plague</i>."
|
||||
{NOTE_REUSEABLE}
|
||||
_"I will not wield such a dark magical artifact, though I shall not begrudge its use by my companions."
|
||||
# this message makes no sense for Dacyn (his entire quest is to get a dark magical artifact), but I couldn't think of something good and generic that works for everyone.
|
||||
(
|
||||
[switch]
|
||||
variable=unit.id
|
||||
[case]
|
||||
value=Owaec
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"Do not insult me! No clansman will ever stoop to such black magic."
|
||||
[/message]
|
||||
[/case]
|
||||
[case]
|
||||
value=Gweddry
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"I already have an army of human soldiers — living soldiers. Let someone else use this staff."
|
||||
[/message]
|
||||
[/case]
|
||||
[case]
|
||||
value=Dacyn
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"Tempting! Most tempting... but I fear it would be unwise for me to wield such a thing. That privilege passes onto another."
|
||||
[/message]
|
||||
[/case]
|
||||
[case]
|
||||
value=Hahid al-Ali
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"Ha! Good joke! I’m not about to mess around with any of your foul northerner magic; necromancy was the cause of all this trouble in the first place."
|
||||
[/message]
|
||||
[/case]
|
||||
[case]
|
||||
value=Terraent
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"I serve the light, not this staff of foul darkness! We should cast away this thing and be done with it."
|
||||
[/message]
|
||||
[/case]
|
||||
[case]
|
||||
value=Konrad
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"...what foul thing is this? Remove it from my presence; necromancy shall not take root in Wesnoth, not under my watch."
|
||||
[/message]
|
||||
[/case]
|
||||
[else]
|
||||
[switch]
|
||||
variable=unit.type
|
||||
[case]
|
||||
value=White Mage,Mage of Light,Paladin
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"No. I serve that which is good and light, and will not wield such a dark magical artifact."
|
||||
[/message]
|
||||
[/case]
|
||||
[else]
|
||||
[switch]
|
||||
variable=unit.race
|
||||
[case]
|
||||
value=dunefolk
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"Fighting your northerners’ foul magic is bad enough. Don’t expect me to wield that — civilized cultures don’t mess around with magic."
|
||||
[/message]
|
||||
[/case]
|
||||
[else]
|
||||
[message]
|
||||
speaker=unit
|
||||
message=_"I will not wield such a dark magical artifact, though I shall not begrudge its use by my companions."
|
||||
[/message]
|
||||
[/else]
|
||||
[/switch]
|
||||
[/else]
|
||||
[/switch]
|
||||
[/else]
|
||||
[/switch]
|
||||
)
|
||||
(
|
||||
[effect]
|
||||
apply_to=new_attack
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
--<<
|
||||
local _ = wesnoth.textdomain 'wesnoth-wc'
|
||||
local _wesnoth = wesnoth.textdomain "wesnoth"
|
||||
|
||||
local wc2_scenario = {}
|
||||
local on_event = wesnoth.require("on_event")
|
||||
local carryover = wesnoth.require("carryover_gold.lua")
|
||||
|
||||
function wc2_scenario.is_human_side(side_num)
|
||||
return side_num <= wml.variables.wc2_player_count
|
||||
|
@ -42,18 +46,52 @@ function wesnoth.wml_actions.wc2_start_units(cfg)
|
|||
end
|
||||
end
|
||||
|
||||
function wesnoth.wml_actions.wc2_store_carryover(cfg)
|
||||
local human_sides = wesnoth.sides.find(wml.get_child(cfg, "sides"))
|
||||
--use an the average amount of villages for this scenario to stay independent of map generator results.
|
||||
local nvillages = cfg.nvillages
|
||||
local turns_left = math.max(wesnoth.scenario.turns - wesnoth.current.turn, 0)
|
||||
local player_gold = 0
|
||||
function wc2_scenario.average_gold()
|
||||
local total_gold = 0
|
||||
local nsides = 0
|
||||
|
||||
for side_num, side in ipairs(human_sides) do
|
||||
player_gold = player_gold + side.gold
|
||||
for i, s in ipairs(wesnoth.sides) do
|
||||
if wc2_scenario.is_human_side(i) then
|
||||
nsides = nsides + 1
|
||||
total_gold = total_gold + s.gold
|
||||
end
|
||||
end
|
||||
player_gold = math.max(player_gold / #human_sides, 0)
|
||||
wml.variables.wc2_carryover = math.ceil( (nvillages*turns_left + player_gold) * 0.15)
|
||||
return math.floor(total_gold / nsides + 0.5)
|
||||
end
|
||||
|
||||
-- overwrite parts of the carryover gold implementation.
|
||||
function carryover.set_side_carryover_gold(side)
|
||||
local turns_left = carryover.turns_left()
|
||||
-- make the carryover bonus independent of the map generation.
|
||||
local num_villages = wml.variables.wc2_nvillages or carryover.get_num_villages()
|
||||
|
||||
local finishing_bonus_per_turn = wml.variables.wc2_early_victory_bonus or num_villages * side.village_gold + side.base_income
|
||||
local finishing_bonus = finishing_bonus_per_turn * turns_left
|
||||
local avg_gold = wc2_scenario.average_gold()
|
||||
|
||||
side.carryover_gold = math.ceil((avg_gold + finishing_bonus) * side.carryover_percentage / 100)
|
||||
|
||||
return {
|
||||
turns_left = turns_left,
|
||||
avg_gold = avg_gold,
|
||||
finishing_bonus = finishing_bonus,
|
||||
finishing_bonus_per_turn = finishing_bonus_per_turn,
|
||||
}
|
||||
end
|
||||
|
||||
---@param side side
|
||||
---@param info table
|
||||
---@return string
|
||||
function carryover.remaining_gold_message(side, info)
|
||||
return "<small>\n" .. _wesnoth("Remaining gold: ") .. carryover.half_signed_value(side.gold) .. "</small>"
|
||||
.. "<small>\n" .. _("Average remaining gold: ") .. carryover.half_signed_value(info.avg_gold) .. "</small>"
|
||||
end
|
||||
|
||||
---@param side side
|
||||
---@param info table
|
||||
---@return string
|
||||
function carryover.total_gold_message(side, info)
|
||||
return "<small>" .. _wesnoth("Total gold: ") .. carryover.half_signed_value(info.avg_gold + info.finishing_bonus) .. "</small>"
|
||||
end
|
||||
|
||||
-- carryover handling: we use a custom carryover machnics that
|
||||
|
@ -81,11 +119,10 @@ on_event("wc2_start", function(cx)
|
|||
end
|
||||
end
|
||||
|
||||
local gold = (wml.variables.wc2_carryover or 0) + (wml.variables["wc2_difficulty.extra_gold"] or 0)
|
||||
local gold = (wml.variables["wc2_difficulty.extra_gold"] or 0)
|
||||
for i = 1, wml.variables.wc2_player_count do
|
||||
wesnoth.sides[i].gold = wesnoth.sides[i].gold + gold
|
||||
end
|
||||
wml.variables.wc2_carryover = nil
|
||||
end)
|
||||
|
||||
-- our victory condition
|
||||
|
@ -96,9 +133,7 @@ on_event("enemies defeated", function(cx)
|
|||
wesnoth.audio.play("ambient/ship.ogg")
|
||||
wesnoth.wml_actions.endlevel {
|
||||
result = "victory",
|
||||
carryover_percentage = 0,
|
||||
carryover_add = false,
|
||||
carryover_report = false,
|
||||
carryover_report = true,
|
||||
}
|
||||
end)
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ wesnoth.dofile("./scenario_utils/plot.lua")
|
|||
wesnoth.dofile("./scenario_utils/side_definitions.lua")
|
||||
settings = globals.settings or {}
|
||||
|
||||
local n_villages = {27, 40, 53, 63}
|
||||
local early_victory_bonus = {27, 40, 53, 63}
|
||||
|
||||
local function get_map_generator(scenario_data)
|
||||
if globals.settings.default_id then
|
||||
|
@ -45,7 +45,9 @@ function wc_ii_generate_scenario(nplayers, gen_args)
|
|||
std_print("test_nplayers", wml.variables.test_nplayers)
|
||||
local scenario_data = get_scenario_data(nplayers, scenario_num)
|
||||
|
||||
local prestart_event = { name = "prestart" }
|
||||
local prestart_event = {
|
||||
name = "prestart",
|
||||
}
|
||||
-- our [scenario] skeleton
|
||||
local scenario = {
|
||||
event = {
|
||||
|
@ -71,6 +73,7 @@ function wc_ii_generate_scenario(nplayers, gen_args)
|
|||
description="enables the buildin mod to mark units, disable this to be compatible with other mods that do the same thing",
|
||||
},
|
||||
},
|
||||
-- note: in later scenarios these variables will probably be overwritten by whatever is present in the carryover.
|
||||
variables = {
|
||||
wc2_scenario = scenario_num,
|
||||
wc2_player_count = nplayers,
|
||||
|
@ -81,6 +84,8 @@ function wc_ii_generate_scenario(nplayers, gen_args)
|
|||
description = "WC_II_" .. nplayers .. "p_desc",
|
||||
modify_placing = false,
|
||||
turns = scenario_data.turns,
|
||||
carryover_percentage = 15,
|
||||
carryover_add = true,
|
||||
}
|
||||
|
||||
-- add [side]s to the [scenario]
|
||||
|
@ -90,21 +95,6 @@ function wc_ii_generate_scenario(nplayers, gen_args)
|
|||
-- add plot (that is [event] with [message]s)
|
||||
add_plot(scenario, scenario_num, nplayers)
|
||||
|
||||
-- add the gold carryover event
|
||||
if scenario_num < #n_villages then
|
||||
table.insert(scenario.event, {
|
||||
name = "victory",
|
||||
wml.tag.wc2_store_carryover {
|
||||
nvillages = n_villages[scenario_num] + 2 * nplayers,
|
||||
wml.tag.sides {
|
||||
side="1,2,3",
|
||||
wml.tag.has_unit {
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
-- add some wc2 specific wml [event]s
|
||||
for side_num = 1, nplayers do
|
||||
table.insert(scenario.event, {
|
||||
|
@ -117,19 +107,28 @@ function wc_ii_generate_scenario(nplayers, gen_args)
|
|||
})
|
||||
end
|
||||
|
||||
if early_victory_bonus[scenario_num] then
|
||||
table.insert(prestart_event,
|
||||
wml.tag.set_variable {
|
||||
name = "wc2_early_victory_bonus",
|
||||
value = early_victory_bonus[scenario_num] + 2 * nplayers,
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
-- generate the map. (this also adds certain events for example to create [item]s or [sound_source]s)
|
||||
local mapgen_func = get_map_generator(scenario_data)
|
||||
mapgen_func(scenario, nplayers)
|
||||
|
||||
-- set the correct scenario name.
|
||||
if scenario_num == 1 then --first map
|
||||
scenario.name = "WC_II_" .. nplayers .. " - " .. _"Start"
|
||||
scenario.name = _"Start"
|
||||
else
|
||||
local scenario_desc = _ "Scenario" .. scenario_num
|
||||
local scenario_desc = _ "Scenario " .. scenario_num
|
||||
if scenario_num == 5 then
|
||||
scenario_desc = _"Final Battle"
|
||||
end
|
||||
scenario.name = "WC_II_" .. nplayers .. " " .. scenario_desc .. " - "--.. scenario.map_name
|
||||
scenario.name = scenario_desc
|
||||
end
|
||||
|
||||
local res = wc2_convert.lon_to_wml(scenario, "scenario")
|
||||
|
|
|
@ -13,6 +13,18 @@ _ "World Conquest 3p" #enddef
|
|||
#define WC_II_CAMPAIGN_NAME_4P
|
||||
_ "World Conquest 4p" #enddef
|
||||
|
||||
#define WC_II_ABBREV_1P
|
||||
_ "WC1p" #enddef
|
||||
|
||||
#define WC_II_ABBREV_2P
|
||||
_ "WC2p" #enddef
|
||||
|
||||
#define WC_II_ABBREV_3P
|
||||
_ "WC3p" #enddef
|
||||
|
||||
#define WC_II_ABBREV_4P
|
||||
_ "WC4p" #enddef
|
||||
|
||||
#define WC_II_CAMPAIGN_DESC_1P
|
||||
_ "A randomly generated campaign for 1 player. It has 6 levels of difficulty.
|
||||
(Expert level, 5 scenarios.)" #enddef
|
||||
|
@ -101,7 +113,7 @@ _ "World Conquest 4p" #enddef
|
|||
icon = {ICON}
|
||||
image = {IMAGE_ONE}
|
||||
type = mp
|
||||
abbrev = _ "WC" + {PLAYERS}\
|
||||
abbrev = {WC_II_ABBREV_{PLAYERS}P}
|
||||
{WC2_CAMPAIGN_DIFFICULTY VERY_EASY {WC2_HUMAN_DIFFICULTY human-peasants/peasant purple} _"Peasant" _"Beginner" 6 2 2 10 yes 0}
|
||||
{WC2_CAMPAIGN_DIFFICULTY EASY {WC2_HUMAN_DIFFICULTY human-loyalists/sergeant black} _"Sergeant" _"Easy" 7 3 2 7 yes 5}
|
||||
{WC2_CAMPAIGN_DIFFICULTY NORMAL {WC2_HUMAN_DIFFICULTY human-loyalists/lieutenant brown} _"Lieutenant" _"Medium" 8 4 2 5 yes 10} {DEFAULT_DIFFICULTY}
|
||||
|
|
|
@ -9,6 +9,7 @@ wesnoth.dofile 'lua/wml-tags.lua'
|
|||
wesnoth.dofile 'lua/feeding.lua'
|
||||
wesnoth.dofile 'lua/diversion.lua'
|
||||
wesnoth.dofile 'lua/stun.lua'
|
||||
wesnoth.dofile 'lua/scenario_end_events.lua'
|
||||
>>
|
||||
[/lua]
|
||||
|
||||
|
|
BIN
data/core/images/attacks/naval_ram.png
Normal file
After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 4.6 KiB |
BIN
data/core/images/portraits/transport/mechanical-raider.webp
Normal file
After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 1,010 B After Width: | Height: | Size: 998 B |
BIN
data/core/images/units/transport/raider/bob1.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/core/images/units/transport/raider/bob2.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/units/transport/raider/bob3.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/core/images/units/transport/raider/bob4.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/units/transport/raider/bob5.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/core/images/units/transport/raider/bob6.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/core/images/units/transport/raider/bob7.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/units/transport/raider/coastal-raider.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/units/transport/raider/die-1.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/units/transport/raider/die-10.png
Normal file
After Width: | Height: | Size: 1,004 B |
BIN
data/core/images/units/transport/raider/die-11.png
Normal file
After Width: | Height: | Size: 917 B |
BIN
data/core/images/units/transport/raider/die-12.png
Normal file
After Width: | Height: | Size: 823 B |
BIN
data/core/images/units/transport/raider/die-2.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/units/transport/raider/die-3.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/core/images/units/transport/raider/die-4.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/core/images/units/transport/raider/die-5.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
data/core/images/units/transport/raider/die-6.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/core/images/units/transport/raider/die-7.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/core/images/units/transport/raider/die-8.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
data/core/images/units/transport/raider/die-9.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
data/core/images/units/transport/raider/flag1.png
Normal file
After Width: | Height: | Size: 752 B |
BIN
data/core/images/units/transport/raider/flag2.png
Normal file
After Width: | Height: | Size: 745 B |
BIN
data/core/images/units/transport/raider/flag3.png
Normal file
After Width: | Height: | Size: 746 B |
BIN
data/core/images/units/transport/raider/hit-a.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/units/transport/raider/hit-b.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/units/transport/raider/hit-c.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/units/transport/raider/iron-bob1.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
data/core/images/units/transport/raider/iron-bob2.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
data/core/images/units/transport/raider/iron-bob3.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
data/core/images/units/transport/raider/iron-bob4.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
data/core/images/units/transport/raider/iron-bob5.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
data/core/images/units/transport/raider/iron-bob6.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
data/core/images/units/transport/raider/iron-bob7.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
data/core/images/units/transport/raider/iron-die1.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
data/core/images/units/transport/raider/iron-die10.png
Normal file
After Width: | Height: | Size: 1 KiB |
BIN
data/core/images/units/transport/raider/iron-die11.png
Normal file
After Width: | Height: | Size: 973 B |
BIN
data/core/images/units/transport/raider/iron-die12.png
Normal file
After Width: | Height: | Size: 834 B |
BIN
data/core/images/units/transport/raider/iron-die2.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
data/core/images/units/transport/raider/iron-die3.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
data/core/images/units/transport/raider/iron-die4.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
data/core/images/units/transport/raider/iron-die5.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/core/images/units/transport/raider/iron-die6.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/core/images/units/transport/raider/iron-die7.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/core/images/units/transport/raider/iron-die8.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/core/images/units/transport/raider/iron-die9.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
data/core/images/units/transport/raider/iron-flag1.png
Normal file
After Width: | Height: | Size: 781 B |
BIN
data/core/images/units/transport/raider/iron-flag2.png
Normal file
After Width: | Height: | Size: 783 B |
BIN
data/core/images/units/transport/raider/iron-flag3.png
Normal file
After Width: | Height: | Size: 784 B |
BIN
data/core/images/units/transport/raider/iron-hit-b.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
data/core/images/units/transport/raider/iron-move-a.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
data/core/images/units/transport/raider/iron-move-b.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
data/core/images/units/transport/raider/iron-raider.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
data/core/images/units/transport/raider/move-a.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/core/images/units/transport/raider/move-b.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
|
@ -115,6 +115,33 @@
|
|||
[/chance_to_hit]
|
||||
#enddef
|
||||
|
||||
#define WEAPON_SPECIAL_NAVAL_RAM
|
||||
# Canned definition of the Naval Ram ability to be included in a
|
||||
# [specials] clause.
|
||||
[disable]
|
||||
id=naval_ram
|
||||
name=_"naval ram"
|
||||
description=_"This attack can only be used against units in water terrain."
|
||||
[filter_opponent]
|
||||
[filter_location]
|
||||
[not]
|
||||
terrain="W*,S*"
|
||||
[/not]
|
||||
[/filter_location]
|
||||
[/filter_opponent]
|
||||
special_note=_ "This unit has an attack that can only be used against units in watery terrain."
|
||||
[/disable]
|
||||
[damage]
|
||||
id=charge
|
||||
name= _ "charge"
|
||||
description= _ "When used offensively, this attack deals double damage to the target. It also causes this unit to take double damage from the target’s counterattack."
|
||||
special_note={INTERNAL:SPECIAL_NOTES_CHARGE}
|
||||
multiply=2
|
||||
apply_to=both
|
||||
active_on=offense
|
||||
[/damage]
|
||||
#enddef
|
||||
|
||||
#define WEAPON_SPECIAL_HONED
|
||||
# Canned definition of the Honed ability to be included in a
|
||||
# [specials] clause.
|
||||
|
|
|
@ -289,7 +289,7 @@ Saurians live spectacularly short lives by comparison to most of the other races
|
|||
[/race]
|
||||
|
||||
[race]
|
||||
id=transport
|
||||
id=ship
|
||||
help_taxonomy=mechanical
|
||||
name= _ "race^Ship"
|
||||
plural_name= _ "race+plural^Ships"
|
||||
|
@ -1562,6 +1562,37 @@ The life span of the wose is unknown, although the most ancient members of this
|
|||
[/resistance]
|
||||
[/movetype]
|
||||
|
||||
[movetype]
|
||||
name=flamefly
|
||||
flying=yes
|
||||
{DRAKEFLY_MOVE}
|
||||
[defense]
|
||||
deep_water=80
|
||||
shallow_water=80
|
||||
reef=70
|
||||
swamp_water=70
|
||||
flat=70
|
||||
sand=60
|
||||
forest=60
|
||||
hills=60
|
||||
mountains=60
|
||||
village=60
|
||||
castle=60
|
||||
cave=70
|
||||
fungus=60
|
||||
frozen=80
|
||||
unwalkable=60
|
||||
[/defense]
|
||||
[resistance]
|
||||
blade=100
|
||||
pierce=100
|
||||
impact=100
|
||||
fire=30
|
||||
cold=150
|
||||
arcane=110
|
||||
[/resistance]
|
||||
[/movetype]
|
||||
|
||||
[movetype]
|
||||
name=dunefoot
|
||||
[movement_costs]
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
[unit_type]
|
||||
id=Derelict Hulk
|
||||
name= _ "Derelict Hulk"
|
||||
race=transport
|
||||
race=ship
|
||||
profile="portraits/transport/derelict-hulk.webp"
|
||||
image="units/transport/derelict-galleon.png"
|
||||
hitpoints=24
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
[unit_type]
|
||||
id=Fireship
|
||||
name= _ "Fireship"
|
||||
race=transport
|
||||
race=ship
|
||||
image="halo/transport/fireship-back-glow.png~BLIT(units/transport/fireship.png)~BLIT(units/transport/flames/fireship-2.png)"
|
||||
profile="portraits/transport/fireship.webp"
|
||||
hitpoints=12
|
||||
|
@ -48,6 +48,36 @@
|
|||
layer=42
|
||||
[/flames_frame]
|
||||
[/standing_anim]
|
||||
[standing_anim]
|
||||
start_time=0
|
||||
terrain_type=S*,*^V*
|
||||
boat_start_time=0
|
||||
boat_y=-1:250,-1~0:490,0:250,0~-1:490
|
||||
flames_start_time=0
|
||||
flames_y=-1:250,-1~0:490,0:250,0~-1:490
|
||||
flames_directional_x=1:350,0:390,-1:350,0:390
|
||||
[frame]
|
||||
image="halo/transport/fireship-back-glow.png:1480"
|
||||
layer=9
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/fireship-[port,mid,starboard,mid].png:[350,390,350,390]"
|
||||
auto_vflip=no
|
||||
image_mod=~MASK(units/transport/pirate-galleon-mask.png)
|
||||
primary=yes
|
||||
layer=40
|
||||
[/boat_frame]
|
||||
[fire_frame]
|
||||
image="units/transport/fireship-back-fire[1,2,1,2,1,2,1,2].png:[185*8]"
|
||||
auto_vflip=no
|
||||
layer=41
|
||||
[/fire_frame]
|
||||
[flames_frame]
|
||||
image="units/transport/flames/fireship-[1~9,1~9].png:[82*10,86,82*7]"
|
||||
auto_vflip=no
|
||||
layer=42
|
||||
[/flames_frame]
|
||||
[/standing_anim]
|
||||
[movement_anim]
|
||||
start_time=0
|
||||
boat_start_time=0
|
||||
|
@ -146,9 +176,9 @@
|
|||
type=fire
|
||||
range=melee
|
||||
[specials]
|
||||
{WEAPON_SPECIAL_CHARGE}
|
||||
{WEAPON_SPECIAL_NAVAL_RAM}
|
||||
[/specials]
|
||||
damage=5
|
||||
damage=6
|
||||
number=1
|
||||
[/attack]
|
||||
[attack_anim]
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
[unit_type]
|
||||
id=Pirate Galleon
|
||||
name= _ "Pirate Galleon"
|
||||
race=transport
|
||||
race=ship
|
||||
image="units/transport/pirate-galleon.png"
|
||||
# ideally, we have "crew" that make sense for dialogs, and "mechanical" that depicts the transport
|
||||
# but for now, we just have "crew"
|
||||
# small_profile="portraits/transport/mechanical-pirate_galleon.png"
|
||||
# small_profile="portraits/transport/mechanical-pirate_galleon.webp"
|
||||
profile="portraits/transport/crew-pirate_galleon.webp"
|
||||
hitpoints=35
|
||||
movement_type=ship
|
||||
|
|
169
data/core/units/boats/Raider_Coastal.cfg
Normal file
|
@ -0,0 +1,169 @@
|
|||
#textdomain wesnoth-units
|
||||
[unit_type]
|
||||
id=Coastal Raider
|
||||
name= _ "Coastal Raider"
|
||||
race=ship
|
||||
image="units/transport/raider/coastal-raider.png"
|
||||
# ideally, we have "crew" that make sense for dialogs, and "mechanical" that depicts the transport
|
||||
# but for now, we just have "crew"
|
||||
small_profile="portraits/transport/mechanical-raider.webp"
|
||||
profile="portraits/transport/crew-boat.webp"
|
||||
hitpoints=36
|
||||
movement_type=ship
|
||||
[movement_costs]
|
||||
deep_water=2
|
||||
village=1
|
||||
[/movement_costs]
|
||||
[defense]
|
||||
deep_water=50
|
||||
shallow_water=40
|
||||
village=50
|
||||
[/defense]
|
||||
movement=5
|
||||
experience=50
|
||||
level=1
|
||||
alignment=lawful
|
||||
advances_to=null
|
||||
{AMLA_DEFAULT}
|
||||
cost=15
|
||||
usage=null
|
||||
description= _"While many larger ships rely on impressive sails to harness the power of the wind, galleys and raiders are propelled by muscle-power of the crew manning the oars. This has the disadvantage of requiring a larger crew, and it does limit the speed and efficiency of transport. But these seeming weaknesses also make the vessel less vulnerable to the whims of weather and the predations of pirates.
|
||||
|
||||
Coastal raider ships are a very basic warship, used by several races to move armed forces rapidly through shallow and coastal water. They do not possess any specific armaments, but there are always archers amongst the crew."
|
||||
|
||||
[standing_anim]
|
||||
start_time=0
|
||||
terrain_type=Wo*
|
||||
boat_start_time=0
|
||||
flag_start_time=0
|
||||
boat_y=-3:200,-3~3:440,3:300,3~-2:440
|
||||
flag_y=-3:200,-3~3:440,3:300,3~-2:440
|
||||
flag_directional_x=-2:540,-1:250,0:340,-1:150
|
||||
[frame]
|
||||
image="misc/blank-hex.png:1380"
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/bob[1~7,6~2].png:[210,120,80*3,120,210,120,80*3,120]"
|
||||
auto_vflip=no
|
||||
#image_mod=~MASK(units/transport/raider/mask.png)
|
||||
[/boat_frame]
|
||||
[flag_frame]
|
||||
image="units/transport/raider/flag[1~3,2,1~3,2].png:[200*3,110,190*3,100]"
|
||||
auto_vflip=no
|
||||
[/flag_frame]
|
||||
[/standing_anim]
|
||||
[standing_anim]
|
||||
start_time=0
|
||||
terrain_type=Ww*,Wr*
|
||||
boat_start_time=0
|
||||
flag_start_time=0
|
||||
boat_y=-2:200,-2~1:440,1:300,1~-2:440
|
||||
flag_y=-2:200,-2~1:440,1:300,1~-2:440
|
||||
flag_directional_x=-2:540,-1:250,0:340,-1:150
|
||||
[frame]
|
||||
image="misc/blank-hex.png:1380"
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/bob[1~7,6~2].png:[210,120,80*3,120,210,120,80*3,120]"
|
||||
auto_vflip=no
|
||||
#image_mod=~MASK(units/transport/raider/mask.png)
|
||||
[/boat_frame]
|
||||
[flag_frame]
|
||||
image="units/transport/raider/flag[1~3,2,1~3,2].png:[200*3,110,190*3,100]"
|
||||
auto_vflip=no
|
||||
[/flag_frame]
|
||||
[/standing_anim]
|
||||
[standing_anim]
|
||||
start_time=0
|
||||
terrain_type=S*,*^V*
|
||||
boat_start_time=0
|
||||
flag_start_time=0
|
||||
flag_directional_x=-2:640,-1:300,0:390,-1:250
|
||||
[frame]
|
||||
image="misc/blank-hex.png:1680"
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/bob[1~7,6~2].png:[260,170,80*3,170,260,170,80*3,170]"
|
||||
auto_vflip=no
|
||||
#image_mod=~MASK(units/transport/raider/mask.png)
|
||||
[/boat_frame]
|
||||
[flag_frame]
|
||||
image="units/transport/raider/flag[1~3,2,1~3,2].png:[200*3,110,190*3,100]"
|
||||
auto_vflip=no
|
||||
[/flag_frame]
|
||||
[/standing_anim]
|
||||
[defend]
|
||||
hits=hit,kill
|
||||
start_time=-120
|
||||
boat_start_time=-120
|
||||
boat_y=0:100,0~-3:140,-3:60,-3~0:310
|
||||
[frame]
|
||||
image="misc/blank-hex.png:600"
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/coastal-raider.png:120"
|
||||
auto_vflip=no
|
||||
[/boat_frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/hit-[b,c,b,a].png:[70,150,100,140]"
|
||||
auto_vflip=no
|
||||
[/boat_frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/coastal-raider.png:20"
|
||||
auto_vflip=no
|
||||
[/boat_frame]
|
||||
[/defend]
|
||||
[death]
|
||||
start_time=0
|
||||
alpha=1.0:800,1.0~0.0:280,0.0:1
|
||||
[frame]
|
||||
image="units/transport/raider/die-[1~12].png:[90*12]"
|
||||
[/frame]
|
||||
[/death]
|
||||
[movement_anim]
|
||||
start_time=0
|
||||
boat_start_time=0
|
||||
boat_y=0~-2:320,-2~0:320,0~2:320,2~0:320
|
||||
boat_offset="0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200"
|
||||
[frame]
|
||||
image="misc/blank-hex.png:1600"
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/move-[a,b,a,b,a,b,a,b].png:[200*8]"
|
||||
auto_vflip=no
|
||||
#image_mod=~MASK(units/transport/raider/mask.png)
|
||||
[/boat_frame]
|
||||
[/movement_anim]
|
||||
[attack]
|
||||
name=bow
|
||||
description=_"bow"
|
||||
icon=attacks/bow.png
|
||||
type=pierce
|
||||
range=ranged
|
||||
# maybe this should be swarm
|
||||
damage=5
|
||||
number=4
|
||||
[/attack]
|
||||
[attack_anim]
|
||||
[filter_attack]
|
||||
name=bow
|
||||
[/filter_attack]
|
||||
start_time=-200
|
||||
missile_start_time=-150
|
||||
boat_start_time=-200
|
||||
boat_y=0~2:80,2~-2:140,-2~0:80
|
||||
[missile_frame]
|
||||
duration=150
|
||||
image="projectiles/missile-n.png"
|
||||
image_diagonal="projectiles/missile-ne.png"
|
||||
[/missile_frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/coastal-raider.png:300"
|
||||
auto_vflip=no
|
||||
# image_mod=~MASK(units/transport/raider/mask.png)
|
||||
[/boat_frame]
|
||||
[frame]
|
||||
image="misc/blank-hex.png:300"
|
||||
[/frame]
|
||||
[/attack_anim]
|
||||
[/unit_type]
|
205
data/core/units/boats/Raider_Iron.cfg
Normal file
|
@ -0,0 +1,205 @@
|
|||
#textdomain wesnoth-units
|
||||
[unit_type]
|
||||
id=Iron Raider
|
||||
name= _ "Iron Raider"
|
||||
race=ship
|
||||
image="units/transport/raider/iron-raider.png"
|
||||
# ideally, we have "crew" that make sense for dialogs, and "mechanical" that depicts the transport
|
||||
# but for now, we just have "crew"
|
||||
small_profile="portraits/transport/mechanical-raider.webp"
|
||||
profile="portraits/transport/crew-boat.webp"
|
||||
hitpoints=57
|
||||
movement_type=ship
|
||||
[movement_costs]
|
||||
deep_water=2
|
||||
village=1
|
||||
[/movement_costs]
|
||||
[defense]
|
||||
deep_water=50
|
||||
shallow_water=40
|
||||
village=50
|
||||
[/defense]
|
||||
[resistance]
|
||||
blade=90
|
||||
pierce=70
|
||||
impact=100
|
||||
fire=110
|
||||
[/resistance]
|
||||
movement=5
|
||||
experience=50
|
||||
level=2
|
||||
alignment=lawful
|
||||
advances_to=null
|
||||
{AMLA_DEFAULT}
|
||||
cost=35
|
||||
usage=null
|
||||
description= _"While Galleons and Cogs rely on impressive sails to harness the power of the wind, galleys and raiders are propelled by muscle-power of the crew manning the oars. This has the disadvantage of requiring a larger crew, and it does limit the speed and efficiency of transport. But these seeming weaknesses also make the vessel less vulnerable to the whims of weather and the predations of pirates.
|
||||
|
||||
Iron Raiders are Coastal Raiders that have been hardened to become tougher targets and harder hitters, at the expense of speed. They are often used as front-line escorts of slower cargo ships in rivers and coasts."
|
||||
|
||||
[standing_anim]
|
||||
start_time=0
|
||||
terrain_type=Wo*
|
||||
boat_start_time=0
|
||||
flag_start_time=0
|
||||
boat_y=-3:200,-3~3:440,3:300,3~-2:440
|
||||
flag_y=-3:200,-3~3:440,3:300,3~-2:440
|
||||
flag_directional_x=-2:540,-1:250,0:340,-1:150
|
||||
[frame]
|
||||
image="misc/blank-hex.png:1380"
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/iron-bob[1~7,6~2].png:[210,120,80*3,120,210,120,80*3,120]"
|
||||
auto_vflip=no
|
||||
#image_mod=~MASK(units/transport/raider/mask.png)
|
||||
[/boat_frame]
|
||||
[flag_frame]
|
||||
image="units/transport/raider/iron-flag[1~3,2,1~3,2].png:[200*3,110,190*3,100]"
|
||||
auto_vflip=no
|
||||
[/flag_frame]
|
||||
[/standing_anim]
|
||||
[standing_anim]
|
||||
start_time=0
|
||||
terrain_type=Ww*,Wr*
|
||||
boat_start_time=0
|
||||
flag_start_time=0
|
||||
boat_y=-2:200,-2~1:440,1:300,1~-2:440
|
||||
flag_y=-2:200,-2~1:440,1:300,1~-2:440
|
||||
flag_directional_x=-2:540,-1:250,0:340,-1:150
|
||||
[frame]
|
||||
image="misc/blank-hex.png:1380"
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/iron-bob[1~7,6~2].png:[210,120,80*3,120,210,120,80*3,120]"
|
||||
auto_vflip=no
|
||||
#image_mod=~MASK(units/transport/raider/mask.png)
|
||||
[/boat_frame]
|
||||
[flag_frame]
|
||||
image="units/transport/raider/iron-flag[1~3,2,1~3,2].png:[200*3,110,190*3,100]"
|
||||
auto_vflip=no
|
||||
[/flag_frame]
|
||||
[/standing_anim]
|
||||
[standing_anim]
|
||||
start_time=0
|
||||
terrain_type=S*,*^V*
|
||||
boat_start_time=0
|
||||
flag_start_time=0
|
||||
flag_directional_x=-2:640,-1:300,0:390,-1:250
|
||||
[frame]
|
||||
image="misc/blank-hex.png:1680"
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/iron-bob[1~7,6~2].png:[260,170,80*3,170,260,170,80*3,170]"
|
||||
auto_vflip=no
|
||||
#image_mod=~MASK(units/transport/raider/mask.png)
|
||||
[/boat_frame]
|
||||
[flag_frame]
|
||||
image="units/transport/raider/iron-flag[1~3,2,1~3,2].png:[200*3,110,190*3,100]"
|
||||
auto_vflip=no
|
||||
[/flag_frame]
|
||||
[/standing_anim]
|
||||
[defend]
|
||||
hits=hit,kill
|
||||
start_time=-120
|
||||
boat_start_time=-120
|
||||
boat_y=0:100,0~-3:140,-3:60,-3~0:310
|
||||
boat_offset=0.0:120,0.0~-0.1:180,-0.1~0.0:300
|
||||
[frame]
|
||||
image="misc/blank-hex.png:600"
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/iron-raider.png:120"
|
||||
auto_vflip=no
|
||||
[/boat_frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/iron-hit-b.png:220"
|
||||
auto_vflip=no
|
||||
[/boat_frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/iron-raider.png:260"
|
||||
auto_vflip=no
|
||||
[/boat_frame]
|
||||
[/defend]
|
||||
[death]
|
||||
start_time=0
|
||||
alpha=1.0:800,1.0~0.0:280,0.0:1
|
||||
[frame]
|
||||
image="units/transport/raider/iron-die[1~12].png:[90*12]"
|
||||
[/frame]
|
||||
[/death]
|
||||
[movement_anim]
|
||||
start_time=0
|
||||
boat_start_time=0
|
||||
boat_y=0~-2:320,-2~0:320,0~2:320,2~0:320
|
||||
boat_offset="0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200,0~1:200"
|
||||
[frame]
|
||||
image="misc/blank-hex.png:1600"
|
||||
[/frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/iron-move-[a,b,a,b,a,b,a,b].png:[200*8]"
|
||||
auto_vflip=no
|
||||
#image_mod=~MASK(units/transport/raider/mask.png)
|
||||
[/boat_frame]
|
||||
[/movement_anim]
|
||||
[attack]
|
||||
name=bow
|
||||
description=_"bow"
|
||||
icon=attacks/bow.png
|
||||
type=pierce
|
||||
range=ranged
|
||||
# maybe this should be swarm
|
||||
damage=6
|
||||
number=5
|
||||
[/attack]
|
||||
[attack]
|
||||
name=ram
|
||||
description=_"naval ram"
|
||||
icon=attacks/naval_ram.png
|
||||
type=impact
|
||||
range=melee
|
||||
damage=12
|
||||
number=1
|
||||
[specials]
|
||||
{WEAPON_SPECIAL_NAVAL_RAM}
|
||||
[/specials]
|
||||
[/attack]
|
||||
[attack_anim]
|
||||
[filter_attack]
|
||||
name=bow
|
||||
[/filter_attack]
|
||||
start_time=-200
|
||||
missile_start_time=-150
|
||||
boat_start_time=-200
|
||||
boat_y=0~2:80,2~-2:140,-2~0:80
|
||||
[missile_frame]
|
||||
duration=150
|
||||
image="projectiles/missile-n.png"
|
||||
image_diagonal="projectiles/missile-ne.png"
|
||||
[/missile_frame]
|
||||
[boat_frame]
|
||||
image="units/transport/raider/iron-raider.png:300"
|
||||
auto_vflip=no
|
||||
# image_mod=~MASK(units/transport/raider/mask.png)
|
||||
[/boat_frame]
|
||||
[frame]
|
||||
image="misc/blank-hex.png:300"
|
||||
[/frame]
|
||||
[/attack_anim]
|
||||
[attack_anim]
|
||||
[filter_attack]
|
||||
name=ram
|
||||
[/filter_attack]
|
||||
# placeholder anim
|
||||
start_time=-200
|
||||
boat_start_time=-200
|
||||
boat_y=0~2:80,2~-4:340,-4~0:180
|
||||
boat_offset=0.0~-0.05:100,-0.05~0.8:200,0.8~0.0:300
|
||||
[boat_frame]
|
||||
image="units/transport/raider/iron-move-[a,b,a,b,a,b].png:[100*6]"
|
||||
auto_vflip=no
|
||||
[/boat_frame]
|
||||
[frame]
|
||||
image="misc/blank-hex.png:600"
|
||||
[/frame]
|
||||
[/attack_anim]
|
||||
[/unit_type]
|
|
@ -2,7 +2,7 @@
|
|||
[unit_type]
|
||||
id=Transport Galleon
|
||||
name= _ "Transport Galleon"
|
||||
race=transport
|
||||
race=ship
|
||||
image="units/transport/transport-galleon.png"
|
||||
# ideally, we have "crew" that make sense for dialogs, and "mechanical" that depicts the transport
|
||||
# but for now, we just have "crew"
|
||||
|
|
|
@ -8,7 +8,7 @@ units/dunefolk/soldier/#enddef
|
|||
name= _ "Dune Warmaster"
|
||||
race=dunefolk
|
||||
image="{PATH_TEMP}warmaster.png"
|
||||
hitpoints=59
|
||||
hitpoints=61
|
||||
movement_type=dunearmoredfoot
|
||||
movement=5
|
||||
experience=150
|
||||
|
@ -31,7 +31,7 @@ units/dunefolk/soldier/#enddef
|
|||
description= _ "scimitar"
|
||||
type=blade
|
||||
range=melee
|
||||
damage=9
|
||||
damage=10
|
||||
number=4
|
||||
icon=attacks/scimitar.png
|
||||
[/attack]
|
||||
|
|
|
@ -7,6 +7,11 @@
|
|||
profile="portraits/dwarves/explorer.webp"
|
||||
hitpoints=60
|
||||
movement_type=dwarvishfoot
|
||||
[resistance]
|
||||
blade=90
|
||||
pierce=90
|
||||
impact=90
|
||||
[/resistance]
|
||||
movement=5
|
||||
experience=150
|
||||
level=3
|
||||
|
@ -14,17 +19,16 @@
|
|||
advances_to=null
|
||||
{AMLA_DEFAULT}
|
||||
cost=51
|
||||
usage=scout
|
||||
usage=mixed fighter
|
||||
description= _ "Dwarvish Explorers are peerless survivalists. Using only the equipment they carry, they can range for months around the forests and mountains looking for new seams of ore and deposits of minerals. Whilst their skill in a melee is less than some other dwarves, they are unmatched with throwing axes, having practiced this skill hunting in the mountains. Their maneuverability makes them dangerous and tricky foes."
|
||||
die_sound={SOUND_LIST:DWARF_DIE}
|
||||
#weakened from 12 damage to 10 damage
|
||||
{DEFENSE_ANIM "units/dwarves/explorer-defend-2.png" units/dwarves/explorer-defend-1.png {SOUND_LIST:DWARF_HIT} }
|
||||
[attack]
|
||||
name=battle axe
|
||||
description= _"battle axe"
|
||||
type=blade
|
||||
range=melee
|
||||
damage=10
|
||||
damage=11
|
||||
number=3
|
||||
icon=attacks/battleaxe.png
|
||||
[/attack]
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
alignment=neutral
|
||||
advances_to=Dwarvish Explorer
|
||||
cost=24
|
||||
usage=scout
|
||||
usage=mixed fighter
|
||||
description= _ "These hardy dwarves are sometimes away from their caves for long periods, scouting and patrolling the borders. They spend this time watching for invaders, and fighting bandits and thieves who encroach on dwarvish territory. They are powerful fighters in a melee, and from a distance their deftly thrown axes can rival the power and accuracy of a human archer."
|
||||
die_sound={SOUND_LIST:DWARF_DIE}
|
||||
#weakened from 9 damage to 8 damage
|
||||
|
|
|
@ -8,12 +8,7 @@
|
|||
profile="portraits/monsters/fire_guardian.webp"
|
||||
{DEFENSE_ANIM "units/monsters/fireghost-defend.png" "units/monsters/fireghost.png" {SOUND_LIST:DRAKE_HIT} }
|
||||
hitpoints=25
|
||||
movement_type=drakefly
|
||||
[resistance]
|
||||
blade=100
|
||||
pierce=100
|
||||
impact=100
|
||||
[/resistance]
|
||||
movement_type=flamefly
|
||||
movement=6
|
||||
experience=24
|
||||
level=1
|
||||
|
|
|
@ -7,12 +7,7 @@
|
|||
image="units/monsters/firewisp.png"
|
||||
profile="portraits/monsters/fire_guardian.webp" # temporary portrait
|
||||
hitpoints=13
|
||||
movement_type=drakefly
|
||||
[resistance]
|
||||
blade=100
|
||||
pierce=100
|
||||
impact=100
|
||||
[/resistance]
|
||||
movement_type=flamefly
|
||||
movement=6
|
||||
experience=18
|
||||
level=0
|
||||
|
|
|
@ -29,11 +29,12 @@ units/monsters/firewraith#enddef
|
|||
[/frame]
|
||||
[/movement_anim]
|
||||
hitpoints=41
|
||||
movement_type=drakefly
|
||||
movement_type=flamefly
|
||||
[resistance]
|
||||
blade=90
|
||||
pierce=90
|
||||
impact=90
|
||||
fire=20
|
||||
[/resistance]
|
||||
movement=6
|
||||
experience=100
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
hitpoints=46
|
||||
movement_type=orcishfoot
|
||||
movement=5
|
||||
experience=43
|
||||
experience=57
|
||||
level=2
|
||||
alignment=chaotic
|
||||
advances_to=Orcish Slurbow
|
||||
|
@ -33,7 +33,7 @@
|
|||
icon=attacks/sword-orcish.png
|
||||
type=blade
|
||||
range=melee
|
||||
damage=6
|
||||
damage=4
|
||||
number=3
|
||||
[/attack]
|
||||
[attack]
|
||||
|
|
|
@ -211,6 +211,7 @@
|
|||
{ROW text_box _"Forum thread:" "forum_thread" _"The numeric topic ID of a thread on the Wesnoth forums where players can post feedback."}
|
||||
{ROW label _"Forum URL" "forum_url" _"The full URL of your feedback thread on the forums."}
|
||||
{ROW toggle_button _"Forum Authentication:" "forum_auth" _"Whether to use your forum username and password when uploading or to store your password and email address in the add-on’s _server.pbl."}
|
||||
{ROW text_box _"Primary Authors:" "primary_authors" _"Comma delimited list of forum usernames of other people who are allowed to upload updates for this add-on or delete this add-on."}
|
||||
{ROW text_box _"Secondary Authors:" "secondary_authors" _"Comma delimited list of forum usernames of other people who are allowed to upload updates for this add-on."}
|
||||
{ROW text_box _"Email:" "email" _"An email address you can be contacted at in case of issues with your add-on."}
|
||||
{ROW text_box _"Password:" "password" _"The add-on’s current password. Using forum authentication is recommended instead since this password is not stored securely."}
|
||||
|
|
|
@ -103,7 +103,7 @@
|
|||
[resolution]
|
||||
definition = "default"
|
||||
|
||||
{GUI_WINDOW_FIXED_SIZE_CENTERED 1300 800}
|
||||
{GUI_WINDOW_FIXED_SIZE_CENTERED 1350 800}
|
||||
|
||||
[tooltip]
|
||||
id = "tooltip_large"
|
||||
|
@ -259,7 +259,7 @@
|
|||
vertical_grow = true
|
||||
|
||||
[rich_label]
|
||||
width = 700
|
||||
width = 750
|
||||
id = "topic_text"
|
||||
[/rich_label]
|
||||
[/column]
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
name="Čeština"
|
||||
sort_name = "Cestina"
|
||||
locale=cs_CZ
|
||||
percent=98
|
||||
percent=99
|
||||
[/locale]
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
name="Deutsch"
|
||||
locale=de_DE
|
||||
alternates=de_LI, de_LU, de_CH, de_AT
|
||||
percent=94
|
||||
percent=98
|
||||
[/locale]
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
sort_name = "English (·𐑖𐑭𐑝𐑾𐑯)"
|
||||
locale=en@shaw
|
||||
alternates=en_AG@shaw, en_AU@shaw, en_CA@shaw, en_BW@shaw, en_DK@shaw, en_GB@shaw, en_HK@shaw, en_IE@shaw, en_IN@shaw, en_NG@shaw, en_NZ@shaw, en_PH@shaw, en_SG@shaw, en_US@shaw, en_ZA@shaw, en_ZW@shaw
|
||||
percent=30
|
||||
percent=29
|
||||
[/locale]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[locale]
|
||||
name="Magyar"
|
||||
locale=hu_HU
|
||||
percent=78
|
||||
percent=90
|
||||
[/locale]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[locale]
|
||||
name="Italiano"
|
||||
locale=it_IT
|
||||
percent=96
|
||||
percent=99
|
||||
[/locale]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[locale]
|
||||
name="Latviešu"
|
||||
locale=lv_LV
|
||||
percent=50
|
||||
percent=49
|
||||
[/locale]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[locale]
|
||||
name="Norsk bokmål"
|
||||
locale=nb_NO
|
||||
percent=69
|
||||
percent=68
|
||||
[/locale]
|
||||
|
|