Compare commits

..

56 commits

Author SHA1 Message Date
Charles Dang
2bbcd5f814 Clean up and expand ranges compat layer 2024-12-26 22:11:34 -05:00
Charles Dang
6d97ac494e GUI2/Dispatcher: remove connect_signal_on_draw
We no longer use the GUI2 draw events. We should implement the appropriate interface provided by top_level_drawable instead. DRAW is still a valid event for now, but would probably be removed in the future.
2024-12-26 16:27:11 -05:00
gfgtdf
5b63155a23
Update changelog.md 2024-12-26 20:25:48 +01:00
gfgtdf
392b8dc9fb
Use [leader] in the c++ code (#9660)
Added code to convert all  `[side]type=` to `[side][leader]` when the `[scenario]` is read, and the rest of the engine code to only work with [leader], this should fix all possible problems with `[leader]` and also simplify the code a bit

Fixes #7985
Fixes #3742
2024-12-26 20:22:09 +01:00
Subhraman Sarkar
ec0e0992b6 help topic generator: fix typo
also make the help browser a bit wider, otherwise images overlap with text
2024-12-26 12:21:09 +05:30
Wedge009
f360e781c7 Replace non-standard spacing.
[ci skip]
2024-12-26 17:02:14 +11:00
gfgtdf
78e6bdaa29 remove variable that was always false 2024-12-26 03:31:47 +01:00
gfgtdf
4593921b67 fix error in invalid [side]ai_config= 2024-12-26 03:31:47 +01:00
doofus-01
fafa0e7b13
1.19 - Coastal Raider (new ship) (#9616)
* add new ship 'coastal raider', sprite and standing/moving animations mostly by Vilaliy Bakal

* fix raider portrait

* add WEAPON_SPECIAL_NAVAL_RAM

* Iron Raider variant

* better halo glow for fireship

* change race=transport to race=ship
2024-12-25 17:53:26 -08:00
Thewodoros
96a2ff69c9
EI S05: Reduce code duplication when Owaec's side joins (#9678)
Move the code for Owaec's side joining you into a custom event. This code doesn't contain any dialogue, which stays in the enemy leaders' die events.
2024-12-25 12:25:27 -06:00
Thewodoros
507e84e8cb
EI S04c: Fix warning message by Dacyn (#9677)
Avoid the case when Dacyn says the warning after Ravanal already noticed him.
2024-12-25 08:56:49 -06:00
Dalas121
e586f2bcf5
Dwarvish Explorer: reduce resistances from 20% to 10% (#9666)
* Dwarvish Explorer: physical resists reduced from 20% to 10%, melee damage increased from 10 to 11.
2024-12-24 11:35:02 -06:00
Pentarctagon
d9ef464b1e
add validation for icons that are too large (#9667) 2024-12-23 23:12:52 -06:00
Charles Dang
0badadaffe GUI2/Text Box Base: remove manual callback handling
Instead, register a NOTIFY_MODIFIED handler. Note I need to fix said event not firing when cutting text from the box.
2024-12-23 14:30:25 -05:00
Discontinuum
4475260e68
Nerf of Orcish Crossbowman (#9509)
* Orcish Crossbowman: melee 6-3 -> 4-3, experience to level 43 -> 57
2024-12-23 12:30:24 -06:00
Thewodoros
868cb845f0
EI S04c: Improve unit filters in scenario end dialogue (#9671)
Use the survivor trait instead of the type in case the unit has advanced a level.
Also remove unit type filter for side 8 because it's redundant.
2024-12-23 11:53:57 -06:00
Gothyoba
a74b39da25
Buff Dune Warmaster (#9534)
* Dune Warmaster: HP 59 -> 61, scimitar damage 9 -> 10
2024-12-23 08:38:10 -06:00
Charles Dang
f73e2b641b Game Board: remove non-const overload of get_visible_unit
This was unique to this class, since the base class only implemented the const version. It was only needed for the whiteboard, and on closer inspection none of of the mutable references therein actually needed to be mutable. Marked them all const and removed the offending getter from game_board.

Note that the non-const overload had the same functionality as the const overload in the base class, only implemented via `find_visible_unit`.
2024-12-22 09:45:10 -05:00
Charles Dang
001c90c1fc GUI2/Listbox: add header/footer size only if visible
Little hacky, since this supports the case of manually hiding the grids instead of simply not populating them (see #9499), but it prevents needing to change widget::get_best_size while I figure out a more comprehensive solution.
2024-12-22 08:18:36 -05:00
Nils Kneuper
11eaca1277 updated Hungarian translation 2024-12-22 00:34:36 +01:00
Nils Kneuper
c9da910fb8 updated Bengali translation 2024-12-22 00:33:14 +01:00
Subhraman Sarkar
920e155ef6 game_version_dialog: use boost::filesystem::path for path calculations 2024-12-21 17:42:07 +05:30
Nils Kneuper
36fa52fc1a updated British English translation 2024-12-21 09:37:08 +01:00
ZombieKnight
9b0430e1f7 Update message.lua 2024-12-20 20:57:48 -05:00
Thewodoros
19be417a05
EI: forbid dunefolk from taking the Plague Staff and add custom rejection messages (#9654)
Fixes #9627
2024-12-20 07:56:53 -06:00
Wedge009
6d10d919d5 Correct manual directory broken in #9664. 2024-12-20 18:26:51 +11:00
Wedge009
e8a3e3fcef View Manual: Avoid crash from indexing an empty vector. Resolves #9661.
Empty vector occurs when using System Language.
2024-12-20 08:34:21 +05:30
pentarctagon
8210f33a7b add preference to not get addon icons
also skip if DataURI is too large
2024-12-19 11:54:14 -06:00
pentarctagon
352157d593 remove inaccurate changelog entry 2024-12-19 09:31:35 -06:00
Gothyoba
10364b169b
Increase Fire Resistances of the Fire Guardian Line (#9438)
* Fire Wisps and Guardian - Fire Resistance changed from 50% to 70%
  * Fire Wraith - Fire Resistance changed from 50% to 80%
2024-12-19 09:24:41 -06:00
Charles Dang
a6954bd56e Prefs: reduce excessive indent (no content changes) 2024-12-19 00:35:18 -05:00
Charles Dang
6a18a37afe Prefs: advance preference access should not be mutable 2024-12-19 00:18:32 -05:00
Severin Glöckner
d191109bb4 German translation edits 2024-12-19 03:49:23 +01:00
Wuzzy
0c1357b594 German translation update
merges #9625
2024-12-19 02:19:20 +01:00
pentarctagon
f7dc6ebaeb 1.19.7+dev 2024-12-18 16:58:02 -06:00
pentarctagon
4a689a687d 1.19.7 2024-12-18 16:57:02 -06:00
pentarctagon
144fa9c71a pot-update and regenerate doc files 2024-12-18 16:55:39 -06:00
pentarctagon
f5ab5620e2 changelog_entries 2024-12-18 16:49:30 -06:00
gfgtdf
5e5fc1db5d remove [side] leader=
previously the leader= attribute in [side] could be used to
make the engine choose a faction by its leader, similar to how
[side]faction_from_recruit worked.

However this was not documented in the wiki, and the name clash
with the [side][leader] subtag could also cause problems
and is also a litte confusing.

So it was decided to remove it. an alternative approach to fix the
name clash would be to rename it, but i can't think of
real usecases of this feature currently.
2024-12-18 18:48:41 +01:00
Charles Dang
2be41a4f85 GUI2/Listbox: remove any_rows_shown
Instead, return the number of rows shown from filter_rows_by. We might re-add any_rows_shown in the future, but for now this covers the intended usecase.
2024-12-18 02:45:26 -05:00
Charles Dang
edb4331d56 GUI2: use more nested namespaces 2024-12-18 02:44:28 -05:00
Charles Dang
e037694945
GUI2: simplify various dialog's filter handling (#9650)
Closes #7868. This implements a farther-reaching cleanup without the regex, though I might revisit the regex method again later.
2024-12-18 02:01:05 -05:00
gfgtdf
f113b2b7a7 Fix #9651 Error in u:extract()
This logic seems inverted, this probably happened while the lua attributes were converted to use the LATTR_SETTER macros.
2024-12-16 19:10:53 -05:00
gfgtdf
e64283534f wesnothd: update current turn in init_side instead of end_turn
This matches the behavior on the client where the events that
happen after end_turn (the "turn end" wml events) happen during
the last sides turn not the next sides turn. In particular this
fixes #2563. It also fixes #3899 because the new logic
automaticially skips empty sides already in init_side and not on
end_turn.

It also changes how description is updated, since carrying that
return value arround specifying whether it was updated was becoming
annoying.

With a few code improvements from soliton.
2024-12-16 00:20:40 +01:00
gfgtdf
f2bcc997b8 add simple_wml child_or_add() 2024-12-16 00:20:40 +01:00
Bernhard Rosenkränzer
782ab2df3e Fix build with boost >= 1.87.0
Boost 1.87.0 removes some functions that have been deprecated for a few
releases, but are still used in wesnoth.
2024-12-15 16:29:11 +11:00
gfgtdf
79798b9f2b remove unused cpp file 2024-12-15 05:24:12 +01:00
gfgtdf
c1c0111d3c WC: New carryover implementation.
We now use a modified default carryover calculation,
the main advantage is it now uses the normal carryover
message on endlevel, and shows how it is calculated.
2024-12-15 05:17:57 +01:00
gfgtdf
06d1fade32 split gold_carryover into smaller functions
this way the functions can easily be reused for alternative
carryover implementations.
2024-12-15 05:17:57 +01:00
gfgtdf
f29f8fb368 move the carryover gold handling and dialog to lua
The idea is to make it easier for umc devs to implement
their own carryover / early finish bonus mechanics. Maybe
we can also make use of it in Worls Conquest.
2024-12-15 05:17:57 +01:00
pentarctagon
893b31e769 return pbl author attribute to its original usage
and use the new primary_authors attribute instead

Fixes #9547
2024-12-14 18:49:32 -06:00
gfgtdf
e8af57e3ab remove some unneeded catch { ... }
these catch were once added to put a send_data() there
now they are no longer needed.

Also calling saved_game_.clear(); is not needed there either.
2024-12-15 00:51:29 +01:00
gfgtdf
f3c48ab8ce luaapi: fix wesnoth.current.user_is_replaying 2024-12-14 23:30:16 +01:00
gfgtdf
a7d3db9cf7 Fix source_lists order 2024-12-14 23:07:10 +01:00
gfgtdf
bf4ad3bb42 WC: fix campaign abbrev
previously it was unclear what the trailing number meant,
also the order couldn't be changed in the translation.

Also the player number was shown 2 times in the savefile name,
resulting in names like 'WC1-WCII 1 -Start-Auto-Save.gz' so i
removed it from the scenario name.
2024-12-14 22:53:12 +01:00
gfgtdf
c762c01924
Add -r option to add_source_file fix #8733 (#9033) 2024-12-14 22:39:12 +01:00
613 changed files with 58354 additions and 53867 deletions

View file

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

View file

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

View file

@ -0,0 +1,2 @@
### Units
* Dune Warmaster: HP 59 -> 61 scimitar damage 9 -> 10

View 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

View file

@ -1,2 +0,0 @@
### Units
* Elvish Champion: HP 72 -> 70, cost 61 -> 60, accuracy bonus is now explained via a weapon special

View file

@ -0,0 +1,2 @@
### Units
* Dwarvish Explorer: physical resists reduced from 20% to 10%, melee damage increased from 10 to 11.

View 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%

View file

@ -0,0 +1,2 @@
### Units
* Orcish Crossbowman: melee 6-3 -> 4-3, experience to level 43 -> 57

View file

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

View file

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

View file

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

View file

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

View file

@ -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 shields towering bulk, enchanted machinery whirrs faintly. Whenever an adjacent ally is hit by an attack, <i><b>this shields 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! Im 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. Dont expect me to wield that — civilized cultures dont 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

View file

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

View file

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

View file

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

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,010 B

After

Width:  |  Height:  |  Size: 998 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,004 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 917 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 823 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 745 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 973 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 834 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

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

View file

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

View file

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

View file

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

View file

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

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

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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-ons _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-ons current password. Using forum authentication is recommended instead since this password is not stored securely."}

View file

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

View file

@ -2,5 +2,5 @@
name="Čeština"
sort_name = "Cestina"
locale=cs_CZ
percent=98
percent=99
[/locale]

View file

@ -2,5 +2,5 @@
name="Deutsch"
locale=de_DE
alternates=de_LI, de_LU, de_CH, de_AT
percent=94
percent=98
[/locale]

View file

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

View file

@ -1,5 +1,5 @@
[locale]
name="Magyar"
locale=hu_HU
percent=78
percent=90
[/locale]

View file

@ -1,5 +1,5 @@
[locale]
name="Italiano"
locale=it_IT
percent=96
percent=99
[/locale]

View file

@ -1,5 +1,5 @@
[locale]
name="Latviešu"
locale=lv_LV
percent=50
percent=49
[/locale]

View file

@ -1,5 +1,5 @@
[locale]
name="Norsk bokmål"
locale=nb_NO
percent=69
percent=68
[/locale]

View file

@ -2,5 +2,5 @@
name="Русский (Russkij)"
sort_name = "Russkij"
locale=ru_RU
percent=93
percent=92
[/locale]

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