Compare commits

...
Sign in to create a new pull request.

876 commits
master ... 1.4

Author SHA1 Message Date
Severin Glöckner
848eb46867 better freetype check
When specifying a prefix to freetype, the check was always passing.
This removes the check, allowing to compile without specifing the option.

Adds an alternative check for freetype.
2018-12-27 23:09:40 +01:00
Severin Glöckner
3cc8ddb5a2 use pkg-config instead freetype-config
freetype-config has been removed from freetype earlier this year

This allows compiling with at least gcc 4.3
gcc 4.9 doesn't work, nor does 4.5 (due to different reasons though)
2018-12-23 20:07:55 +01:00
Severin Glöckner
746c060d2d add missing gitignore
kind of pointless nowadays, but at least it keeps the output of git status clean
2018-11-27 02:27:54 +01:00
Ignacio R. Morelle
59d29f7628 website: Delete tree, it's now split to a different repository 2013-10-03 05:35:23 -03:00
Guillaume Melquiond
c096793f08 Avoided usage of forward incompatible test. (Fix for bug #16693.) 2013-09-26 06:17:29 -03:00
Ignacio R. Morelle
0876995096 configure: Don't require game-specific cruft when using --disable-game
campaignd doesn't really need SDL_image, SDL_mixer, Ogg Vorbis or PNG
support, or freetype.
2013-09-26 06:17:29 -03:00
Groggy Dice
dafc9a5597 update changelog with wmllint bugfixes 2013-07-21 20:27:17 -04:00
Groggy Dice
746ac09b95 move upconversion of ancient abilities ahead of lifting [frame] to fix problem of weapon specials appearing after [frame] sequence
After my last change, I noticed a puzzling failure by wmllint to convert a weapon special. This special was among some attributes that followed the [frame] sequence. It seems that Python does not wait for the earlier code block to complete before running the new one, and those lines aren't passed through the new block because they've been deleted and stashed in 'postframe'. When they're spewed back out, the new block has already passed those lines by.

I was relieved to find that this was not an issue introduced by my change, but an existing one. When I ran the original wmllint on the file, I found that the special= line got deleted, without being replaced by the [special] tags and macro. The latter is supposed to appear when wmllint hits the [/attack] tag, but never triggers because [/attack] has been changed to [/attack_anim].

Moving this code block up, so that abilities and specials are transformed before the [frame] lift (and 'postframe' stash), appeared to fix the problem. Hopefully, it won't cause a new on to show up.
2013-07-14 21:22:56 -04:00
Groggy Dice
f52d3341cb fix the lifting of attack [frame]s to [attack_anim]
This code block was actually producing some horrendous output, because key values were not reset to defaults at the closing [/attack] tag, even though many units have more than one attack. Also, the conversion was done when the first [frame] tag was encountered, although most authors put the [sound] block after [frame]s. So, what would typically happen is this:

* The first attack would be converted, usually without a soundpath. If there were any attributes after the [frame] sequence, the result would be non-functional, as the comment introducing this wmllint block warned (and wmllint would crash with an assertion error if "name=" happened to be one of them).

* Subsequent attacks would be converted, inheriting the sound and [attack_filter] from the soundpath and attackname of the *first* attack.

To fix these issues, I did the following:

* In order to do the conversion at a later stage, after the soundpath would normally have been picked up, the variable 'converting' was changed from a 0/1 value to a line index position.

* This enables the opportunity to move post-[frame] lines, for which purpose the new variables in_frame and postframe are created. When encountered, these lines are deleted and appended to postframe.

* When we get to [/attack], we still look to see if we are converting. If so, we go ahead with the replacement of lines[i], before the index position gets changed. Then we carry out the conversion that was originally carried out at the first [frame], using lines[converting] to do it at the same place.

* The lines in postframe are fed back in reverse order before the new closing [/attack] tag.

* Values are cleared to defaults, ready for the next [attack].

* It is no longer true that the frame sequence has to go last in [attack], so that part of the comment can be deleted.
2013-07-14 21:22:32 -04:00
Groggy Dice
7fe4536910 bugfix insertion of attack's description= key
First, the newline is added to "description = " rather than "new_line = ". But description was only changed if it didn't begin with a quotemark, meaning that those that *did* start with a quote weren't getting a newline.

Second, new_line was supposed to inherit indentation through "leader(syntactic)", but the line had already been stripped before "syntactic", in "fields = ".
2013-07-14 21:21:42 -04:00
Groggy Dice
7ac9e55a8d bugfix newline problems in output
I had noticed that the line replacing the get_hit_sound with DEFENSE_ANIM didn't have a newline, but assumed that it was part of 'comment'. Nope!

There are also two lines where a misplaced quotation mark led to an extraneous space being added to the end of a line.
2013-07-14 21:19:32 -04:00
Groggy Dice
441854d2ac enable wmllint to convert more old abilities and specials
I noticed that there were some additional weapon specials (marksman) and abilities (nightstalk, steadfast) that also had macros. I also saw examples of ability= keys that had comma-separated multiple values.
2013-07-14 21:09:03 -04:00
Groggy Dice
4889ca1cca fix typo that prevented firststrike from being upconverted
r -> s and no more "Don't know how to convert 'firststrike'" messages.
2013-07-14 21:06:31 -04:00
Groggy Dice
1fe15fe6e9 animation conversion: add in_variation to list of variables defined at start as False
All of these variables are again defined as False when [unit] is in the line, but in_variation was missing from this earlier list. This caused wmllint to crash with an UnboundLocalError on a page of (UtBS) Kaleh-style macros that had no [unit] tag.
2013-07-14 21:06:14 -04:00
Groggy Dice
02c52deef8 skip further operations if the value is zero-length
This came to my attention because of a Dark Elves scenario with a 'description=' key that was left blank for the value, crashing wmllint with an index error. More broadly, however, the operations in this section are pointless when there is no value.
2013-07-14 21:04:52 -04:00
Groggy Dice
28f4682779 updated changelog: mostly wmllint 2013-07-01 19:48:16 -04:00
Groggy Dice
8674bd3f8a clean up get_hit_sound messages
The first message has a couple of problems. Technically, get_hit_sound is not a tag, and there is a stray quote mark at the end. Also, i+1 points to the line number of the [/unit] tag, which is not particularly helpful information. This can be changed to point to the line of the get_hit_sound attribute.

For the second message, the %d get_hit_sound is an index position, so +1 for the line number.
2013-07-01 19:47:45 -04:00
Groggy Dice
f5d3846748 print second half of "duplicated attack" warning to stderr also
This warning could become confusing if split up by stdout or stderr being redirected.
2013-07-01 17:35:07 -04:00
Groggy Dice
0b7c7033e3 THoT 06: backport fix for "event=time over" to "name="
As long as I have 1.4 checked out, I might as well fix this bug so that any remaining 1.4 players can see the 1337 writing that ESR talks about in his Campaign How-To... lol
2013-07-01 17:34:50 -04:00
Groggy Dice
1653b9f8c3 Correct "AMLA TOUGH" to "AMLA_TOUGH"
Admittedly, only a couple of campaigns have this error, but it keeps {AMLA_TOUGH 3} from being updated to {AMLA_DEFAULT}.
2013-07-01 17:32:46 -04:00
Groggy Dice
fa43e3688b insert rstrip() to fix wmllint-crashing assumption that unit files are using Unix newlines
In Linux, many 1.2 unit files would crash wmllint, with tracebacks pointing to the "assert male/female_end != -1" line. Male/female_end's value is set to -1, and when it does not meet the condition for converting to i (line index position), the assert statement fails. The "assert male_end" error crashes files with gender=male, or no gender= key (thus defaulting to male). The "assert female_end" error is the female counterpart, and also covers units with both genders.

I found that after commenting out these assert statements, wmllint no longer barfed on those files. Studying the problem for this commit, however, I saw that "endswith()" included a newline. Could it simply be choking on DOS carriage returns? Doing a dryrun in Windows, which defaults to universal newlines support, I did not get the crashes. Change to binary mode, the crashes returned. Insert rstrip() and delete the newlines, and the crashes stop!
2013-06-30 22:03:54 -04:00
Groggy Dice
caf6587318 wmllint: update old "portraits/core/" paths to "portraits/"
These portraits were moved prior to 1.1.9. That was before ESR joined Wesnoth development in April 2007, which may explain why wmllint didn't cover this change. Nevertheless, even many 1.2 campaigns still have the old "portraits/core" filepaths.

These old paths also keep post-1.4 wmllint from updating portrait paths to their current location, after they were moved again in 1.5.9.
2013-06-30 22:03:32 -04:00
Elvish_Hunter
12295c9e90 wmllint, wmlscope and wmlindent: fixed bug caused by Windows' command prompt appending double quotes to arguments
This is a backport of Elvish Hunter's 2013-02-23T13:04:12Z fix to 1.11.
2013-06-30 22:02:44 -04:00
Groggy Dice
d51c4b870b backport: removal of files on Windows before --revert and conversion file rename
Windows won't allow a rename to overwrite an existing file (without Error 183, file already exists).
2013-06-30 22:01:09 -04:00
Gunter Labes
230ebdaf44 fixed tarball creation 2009-09-09 11:28:46 +00:00
Gunter Labes
182da61ef2 cache the ignores and friends list 2009-09-09 11:28:36 +00:00
Gunter Labes
e2b087cec7 send lobby diffs separately;...
...fixes bug #13099: MP lobby player list becomes inaccurate over time
2009-03-03 09:38:03 +00:00
Daniel Franke
5e867e21f9 Reword release notes after Rhonda cleared me up about how CVEs work...
...(1.4 branch).
2009-02-24 10:33:54 +00:00
Daniel Franke
dd1d5064e3 Remove Python AI support, addressing CVE-2009-0367 2009-02-24 06:53:37 +00:00
Gunter Labes
98b9afca18 create the fifo group accessible (instead of only user accessible) 2009-02-17 19:26:11 +00:00
Gunter Labes
89fc59cff6 do the random map generation before we send next scenario data out...
...so it's in sync; fixed bug #12896: Map generator does not sync
between clients when advancing in MP campaigns
2009-02-09 13:54:57 +00:00
Benoît Timbert
b3cbc45069 Add some more modes (matching the trunk ones) 2009-02-07 17:24:31 +00:00
Benoît Timbert
5c2fc6d051 Apply patch #1108: Additional screenmodes for when SDL can't guess them 2009-02-07 17:06:46 +00:00
Benoît Timbert
4dd7159b5d Apply patch #1107 : Minimum stack cookie on AmigaOS4 to prevent stack overflow 2009-02-07 16:15:55 +00:00
Gunter Labes
3a10620fea properly consider players that have more than one side
(cherry picked from commit 2009-02-01T11:46:41Z!soliton@wesnoth.org)
2009-02-01 12:42:33 +00:00
Gunter Labes
029a6d1921 refactored code in server.cpp 2009-02-01 12:42:07 +00:00
Gunter Labes
14b5bb32ba send a server message to the client when invalid WML is received 2009-02-01 12:41:58 +00:00
Gunter Labes
1a69da5b57 increase allowed nesting level to what the client allows (1000) 2009-02-01 12:41:47 +00:00
Gunter Labes
6e07c7deac report error messages with simple_wml 2009-02-01 12:41:42 +00:00
Gunter Labes
5209493bc5 made simple WML ordered properly 2009-02-01 12:41:34 +00:00
Benoît Timbert
f07b02eb6e French translation update 2009-01-25 20:46:00 +00:00
Benoît Timbert
509bbec686 French translation update 2009-01-21 19:51:05 +00:00
Gunter Labes
04aa0b8f58 allow kick reasons 2009-01-15 22:01:20 +00:00
Gunter Labes
ac12ab186a don't check observers against observers for the same IP 2009-01-15 22:01:09 +00:00
Lari Nieminen
405499d2f0 Balancing for "Gathering Materials". 2009-01-14 10:30:23 +00:00
Thomas Baumhauer
0060d68021 backporting 2009-01-10T11:37:02Z!thomas.baumhauer@gmail.com (player list scrolling fix) 2009-01-10 11:38:00 +00:00
Thomas Baumhauer
c0850701a3 backporting 2009-01-05T21:48:12Z!thomas.baumhauer@gmail.com per Soliton's request 2009-01-06 10:44:10 +00:00
Gunter Labes
beb357a62f send a lobby update on kicks/bans 2009-01-05 02:39:41 +00:00
Gunter Labes
6866d48897 display the number of games not of game termination types 2009-01-04 17:51:19 +00:00
Nobuhito Okada
fb4a390993 updated Japanese translation (contributions from http://wikiwiki.jp/wesnoth/) 2009-01-04 15:48:09 +00:00
Nils Kneuper
7ca4d0078d updated Italian translation...
...(basically just to have an up to date manual on the website)
2008-12-19 22:01:17 +00:00
Mark de Wever
25c2e6d888 Revert 2008-12-14T14:58:42Z!koraq@xs4all.nl.
Ivanovic reminded me that it causes backwards compatibility issues.
2008-12-14 15:05:18 +00:00
Mark de Wever
86ca71e379 Allow recruiting in large castles.
It's now possible to recruit in castles more than 99 tiles away (bug
#12185).  Backport of 2008-08-20T18:57:50Z!esr@thyrsus.com upon Rhonda's request.
2008-12-14 14:58:42 +00:00
Nils Kneuper
4e414157d0 version bump to 1.4.7 2008-12-12 21:19:25 +00:00
Nils Kneuper
a14704ed90 pot-update (preparing 1.4.7, no strings should have changed) 2008-12-12 21:17:59 +00:00
Ignacio R. Morelle
9547e431b3 Update changelogs and release notes. 2008-12-12 19:05:44 +00:00
Mark de Wever
668d0f8322 Fix some formatting issues. 2008-12-12 07:53:50 +00:00
Ignacio R. Morelle
3ac1546a7d Make start-of-scenario saved games work again...
...(fix a regression from 2008-12-01T19:42:47Z!joerg.hinrichs@alice-dsl.de).

Bonus: they are also properly labelled in load-game now if your
save_index is clean.

I'll soon dcommit my stuff to trunk and fix this problem there amongst
other things, please bear with my lack of stable (own) Internet
connection...
2008-12-12 04:32:01 +00:00
Gunter Labes
36bf54d41c don't save group bans 2008-12-11 17:16:54 +00:00
David Philippi
c45f937bcf danish translation update 2008-12-10 18:08:47 +00:00
Nils Kneuper
cd3e131192 pot-update (no added/changed strings)
regenerated doc files
2008-12-09 21:15:10 +00:00
David Philippi
8c20631388 finnish translation update 2008-12-05 20:47:44 +00:00
Alexander van Gessel
40216bb964 Fixed bats crashing through ice (bug #12685) 2008-12-04 23:56:23 +01:00
Nils Kneuper
5cbd9e5b09 pot-update (no new/changed strings)
updated doc files (no changes at all)
2008-12-03 14:27:36 +00:00
David Philippi
eb04e22ced hungarian translation update 2008-12-02 20:16:54 +00:00
David Philippi
ca4b8ac770 credit update 2008-12-02 20:15:03 +00:00
Jörg Hinrichs
94bfbeee8f This makes campaign replays work again (bug #12005) for release 1.4. 2008-12-01 19:42:47 +00:00
Nils Kneuper
3b86870931 pot update (hopefully no string changes, but who knows...)
regenerated doc files
2008-11-29 11:44:38 +00:00
Gunter Labes
acda73e31a fixed a typo 2008-11-27 22:26:56 +00:00
Tomasz Śniatowski
48259abb36 backport 2008-11-26T06:55:10Z!crazy-ivanovic@gmx.net to 1.4...
...(bugfix for bug #12453 present both in 1.4 and trunk)
2008-11-25 00:56:28 +01:00
Ignacio R. Morelle
ba45177200 Mention Li'sar's idle animation in changelogs 2008-11-24 18:35:15 +00:00
Nils Kneuper
7784bcf877 updated Hungarian translation 2008-11-24 16:47:11 +00:00
Lari Nieminen
5d28dc51ad New idle animation for Li'sar (lvl2). 2008-11-24 14:27:14 +00:00
Richard Kettering
383c690af4 New images for the gryphons. 2008-11-24 09:05:46 +00:00
Alexander van Gessel
d7aaf80f57 Stop wmllint from trying to convert a portrait path. 2008-11-24 02:56:38 +01:00
David Philippi
44c16313ad danish translation update 2008-11-20 20:43:48 +00:00
Richard Kettering
4988927e8c New animation for the dwarven lord's axe attack. 2008-11-20 08:00:26 +00:00
Gunter Labes
4af68d8767 force disconnects after a couple of failed tries...
...when shutting the server down
2008-11-19 14:44:25 +00:00
Mark de Wever
4a2740384e Replace a #elif without condition with #else (debian patch #505957). 2008-11-17 18:35:16 +00:00
Nils Kneuper
82db069707 updated Finnish translation 2008-11-16 14:02:33 +00:00
David Philippi
6fa1bd0687 danish translation update 2008-11-13 00:54:35 +00:00
Gunter Labes
4b57e1d8c5 improved handling of users trying to join a full game that disallows observers 2008-11-11 22:44:20 +00:00
Gunter Labes
8e98cd3edd added missing newline 2008-11-11 22:44:15 +00:00
Nils Kneuper
cb838c4896 updated Finnish translation 2008-11-10 18:48:48 +00:00
Nils Kneuper
ddfcac15cd updated Italian translation 2008-11-08 14:09:32 +00:00
Gunter Labes
c4ee600465 send a server message when a player with the same IP...
...as an existing game member enters
2008-11-03 01:27:00 +00:00
Nils Kneuper
ee68d42529 post release version bump (to 1.4.6+svn) 2008-11-02 21:23:51 +00:00
Nils Kneuper
199c3fcc79 rollback the last wesnoth-optipng commit...
...since it saved only little while drastically increasing the xdelta
size
2008-11-02 20:19:45 +00:00
Nils Kneuper
f673644961 ported the manpages fix in a bad way 2008-11-02 19:52:49 +00:00
Nils Kneuper
63bdc6c69e version bump to 1.4.6 2008-11-02 19:34:06 +00:00
Nils Kneuper
5ffe15c991 po-update (no strings should have been changed)
regenerated doc files
2008-11-02 19:24:51 +00:00
Nils Kneuper
69c46988ee fix wrong tags which stop compiling the manpages 2008-11-02 19:18:40 +00:00
Nils Kneuper
bd4046894c running wesnoth-optipng from trunk:
Overall statistics (only for files with a smaller recompressed size):

  Original size: 23628 KB on 1279 files
  Optimized size: 23101 KB
  Total saving: 527 KB = 2% decrease
2008-11-02 14:13:56 +00:00
Nils Kneuper
19c0e2f80b updated Finnish translation 2008-11-02 13:02:20 +00:00
Richard Kettering
09b07c8ce3 New, TC frames for the naga fighter. 2008-11-02 10:02:39 +00:00
Richard Kettering
da21c52cef New, TC frames for the naga fighter. 2008-11-02 09:16:47 +00:00
Steven Panek
199c3fde98 Fixed parts of the undead flags which were not TC'd
Updated changelog
2008-11-01 17:43:08 +00:00
David Philippi
f3d92df757 hungarian translation update 2008-11-01 13:15:23 +00:00
David Philippi
e48253c780 hungarian translation update 2008-11-01 13:13:27 +00:00
Gunter Labes
afc39b880d always check for a leader when trying to rename one 2008-11-01 11:38:09 +00:00
Nils Kneuper
00e2d8655c updated German translation 2008-10-31 16:14:47 +00:00
Nils Kneuper
3228b59faa updated Galician and German translation 2008-10-31 14:34:47 +00:00
Nils Kneuper
9080c19f59 regenerate doc files (no string changes in sources) 2008-10-31 11:24:23 +00:00
Nils Kneuper
fdff24df4b backport 2008-10-28T10:34:48Z!jorda@ettin.org...
...(Check availability of manpages before installing them) by ettin to 1.4.x
2008-10-31 11:21:27 +00:00
Richard Kettering
5917758296 Added an idle animation by EELuminatus for the orcish assassin. 2008-10-31 07:14:06 +00:00
Richard Kettering
854317a29f Added idle animation to arch-mage. 2008-10-31 05:11:47 +00:00
Richard Kettering
ff89c230ba Added idle animation to deathblade. 2008-10-31 04:20:48 +00:00
Richard Kettering
0862043258 Added idle animation to deathblade. 2008-10-31 04:05:18 +00:00
Nils Kneuper
cdb32f15ec pot-update (should not change strings...) 2008-10-29 18:50:44 +00:00
Nils Kneuper
2cceaf0b5a updated Galician and German translation 2008-10-29 15:24:30 +00:00
Gunter Labes
a323ecdd53 corrected exit code handling 2008-10-28 17:24:45 +00:00
David Philippi
f8af3c190a hungarian translation update 2008-10-23 20:55:10 +00:00
Thomas Baumhauer
400507d27f Fixing chat log bug showing all lobby joins regardless to preferences 2008-10-22 12:32:51 +00:00
Gunter Labes
0ab359ffd6 changed some exit codes so the run script can dtrt 2008-10-22 12:25:19 +00:00
David Philippi
cf5020c87b danish translation update 2008-10-19 16:41:19 +00:00
Gunter Labes
446dbf63bc use cwd to find COPYING.txt 2008-10-17 20:39:08 +00:00
Gunter Labes
980236d7c2 allow out-of-turn unit renaming again 2008-10-17 20:38:49 +00:00
Nils Kneuper
c1cd4c33df pot-update (no strings should be added/changed)
regenerated doc files
2008-10-16 21:50:20 +00:00
Nils Kneuper
1dbb562d01 updated Finnish, German and Slovak translation 2008-10-16 19:42:40 +00:00
Mark de Wever
11de2f6eaa German translation update. 2008-10-14 16:18:38 +00:00
Elias Pschernig
6dd8749ac9 Backported 2008-10-13T20:30:17Z!elias@pschernig.at to 1.4. 2008-10-13 20:32:35 +00:00
Lari Nieminen
eb072aceb1 Updated the fireball miss animation to correspond with the new images. 2008-10-13 16:52:13 +00:00
Nils Kneuper
cba2d310c7 updated German translation 2008-10-13 12:45:51 +00:00
Richard Kettering
d2287a11ba New graphics for failed fireballs. 2008-10-13 06:27:27 +00:00
Elias Pschernig
1f899f654d addon_manager: Backported 2008-10-12T13:05:11Z!elias@pschernig.at to 1.4. 2008-10-12 13:12:07 +00:00
David Philippi
8848d142d9 updated danish manpages 2008-10-11 14:18:54 +00:00
Elias Pschernig
2f3b017d4f addon_manager: Backported sortable columns to 1.4. 2008-10-11 10:57:33 +00:00
Gunter Labes
a90131bbce start the timer before showing the turn dialog 2008-10-10 21:15:42 +00:00
Nils Kneuper
d4337bf544 updated Galician translation 2008-10-10 18:52:47 +00:00
Gunter Labes
c50fafa5d7 added a missing include 2008-10-10 11:26:51 +00:00
Gunter Labes
81325d7856 fix another backporting oversight 2008-10-09 20:04:04 +00:00
Gunter Labes
4d34a2b21b fix a backporting oversight 2008-10-09 19:59:15 +00:00
Gunter Labes
165bfb5921 wesnoth_addon_manager: --tar now takes a directory 2008-10-09 19:52:28 +00:00
Elias Pschernig
b08e46e6a0 Backporting 2008-10-09T19:32:18Z!elias@pschernig.at (addon_manager). 2008-10-09 19:35:06 +00:00
Elias Pschernig
0903427cbf Back-ported wesnoth_addons_manager updates to campaigns_client.py. 2008-10-09 19:25:35 +00:00
Nils Kneuper
b2ca482166 updated German translation 2008-10-08 21:05:59 +00:00
Nils Kneuper
3aac8b8cd9 pot-update (no strings should be changed)
regenerated doc files
2008-10-07 10:54:24 +00:00
Nils Kneuper
d3c3a00432 updated Galician translation 2008-10-06 20:37:34 +00:00
Gunter Labes
d8bb129102 removed an obsolete hotkey 2008-10-06 00:53:59 +00:00
Gunter Labes
89b8bed8ce now save addons under data/ so we don't mix them with config files 2008-10-06 00:53:47 +00:00
Nils Kneuper
7b60ff5ed6 regenerated doc files 2008-10-04 18:44:32 +00:00
Gunter Labes
e48fe86ee6 connect to 1.4 by default 2008-10-04 17:28:12 +00:00
Nils Kneuper
83fd82fadb updated Italian and Turkish translation 2008-10-04 17:15:28 +00:00
Gunter Labes
507e16718e catch some signals and exit properly (to get profiles) 2008-10-03 19:23:04 +00:00
David Philippi
aff327124f hungarian translation update 2008-10-03 11:56:45 +00:00
Gunter Labes
f64062ef7b various server command improvements
* added the banned nick to a ban when available

* made the sample command socket only and have it output the current
  value when no parameter is given

* made the status command report for all nicks with the same IP when
  using a simple nick as parameter (default for ordinary users)

* merged the samples command back into metrics

* actually allowed advertised commands for ordinary users

* removed a couple of extraneous newlines from command output

* fixed an improper name for a local variable
2008-10-03 02:51:33 +00:00
Nils Kneuper
c60c921864 updated Czech translation
regenerated doc files
2008-10-02 22:58:18 +00:00
Richard Kettering
81111787a1 New images for zombie/soulless swimmers. 2008-10-02 01:08:29 +00:00
Nils Kneuper
1afc66fe7b updated Galician translation 2008-10-01 12:47:56 +00:00
Nils Kneuper
0d75d02732 pot-update (no strings should be changed/new)
regenerate documentation files
2008-10-01 09:43:59 +00:00
Nils Kneuper
345550afc7 updated Galician and Polish translation 2008-09-29 17:59:41 +00:00
Gunter Labes
c664c8d215 add the title to --list output and use title rather than name in html output 2008-09-29 15:33:00 +00:00
Gunter Labes
98a59c6240 added a note on how to see the add-on descriptions 2008-09-28 13:24:46 +00:00
Gunter Labes
2841b1d2fd added a note about how to install addons 2008-09-28 13:17:06 +00:00
Gunter Labes
ff856035c0 remove some obsolete links 2008-09-28 10:44:16 +00:00
Nils Kneuper
8388b185be updated Slovak translation 2008-09-28 09:22:09 +00:00
Benoît Timbert
00c8bbe6ad French translation update 2008-09-27 20:58:47 +00:00
Nils Kneuper
8ec8a30f2e updated Finnish translation 2008-09-27 19:37:33 +00:00
Elias Pschernig
4b54a8b042 Backported --html options of addon manager to 1.4. 2008-09-27 15:58:50 +00:00
Nils Kneuper
7bbbdddfbb pot-update 2008-09-24 20:36:29 +00:00
Nils Kneuper
361b8f1f2e updated Galician, Finnish and Czech translation
regenerate doc files
2008-09-24 20:30:07 +00:00
David Philippi
b75cd1e329 valencian translation updates 2008-09-24 11:59:36 +00:00
Thomas Baumhauer
4be1765273 backporting the kicked/banned messages 2008-09-23 18:38:23 +00:00
Lari Nieminen
970aae2eda Backport the proper fix for bug #12341. 2008-09-22 18:06:06 +00:00
Eric S. Raymond
120c646c1f Backport fix for bug #12341. 2008-09-22 17:42:35 +00:00
David Philippi
43c63186c1 hungarian translation update 2008-09-21 19:06:40 +00:00
Nils Kneuper
c98e21818e updated German translation 2008-09-19 19:42:44 +00:00
Richard Kettering
ee8630eaf9 New animation for the steelclad melee attack. 2008-09-18 07:09:09 +00:00
Richard Kettering
f8fff0c213 Updated some dwarven icons, by pekka. 2008-09-18 01:51:32 +00:00
Richard Kettering
85fc736a22 New melee animation for skeleton. 2008-09-17 17:46:17 +00:00
Pauli Nieminen
67ff80767a Fixed network manager destructor not to have memory access problems. 2008-09-17 10:15:10 +00:00
Gunter Labes
4168e62d4f split parts of the metrics command into games, samples and stats commands 2008-09-16 19:03:56 +00:00
Gunter Labes
9427443283 made 'bans' into a proper command 2008-09-16 17:33:10 +00:00
David Philippi
503b9d772a valencian translation update 2008-09-16 14:02:59 +00:00
Ignacio R. Morelle
1ad8c12a69 Backport new Soulless swimmer graphics from trunk...
...and use them as WCs too (added fake n and s attack frames to
avoid... well, breaking compatability)
2008-09-16 02:23:49 +00:00
Ignacio R. Morelle
950cf8defa Backport 2008-09-12T23:55:09Z!shadowm@wesnoth.org from trunk 2008-09-12 23:57:42 +00:00
Nils Kneuper
2a26d66baa updated Finnish and Slovak translation 2008-09-12 20:21:16 +00:00
Lari Nieminen
bb63e44da4 Removed the 1000x620 [partial_resolution],
...since it's not needed for the attacks list anymore.
2008-09-10 14:27:14 +00:00
Lari Nieminen
738c28a479 Fixed bug #12297.
A small cutoff of a handful of pixels might still remain when using
intermediate resolutions.
2008-09-10 13:49:33 +00:00
Gunter Labes
c5f6abb642 make the code a bit more understandable 2008-09-07 19:38:50 +00:00
Gunter Labes
ca04341e82 Clarified some server messages (hopefully..). 2008-09-07 19:38:36 +00:00
Ignacio R. Morelle
7f1e95f9fa Backport 2008-09-07T19:08:59Z!shadowm@wesnoth.org from trunk. 2008-09-07 19:15:10 +00:00
Pauli Nieminen
f54438ce0a Fixed crash when invisibility cache wasn't cleared correctly 2008-09-07 18:06:14 +00:00
Benoît Timbert
073649f7eb Minor credit fix 2008-09-06 16:46:44 +00:00
Richard Kettering
6ddca87ec4 Added death/recruit anim to revenant. 2008-09-06 09:45:48 +00:00
Eric S. Raymond
f1f491814f Backport fix for minor logic error. 2008-09-05 16:58:44 +00:00
Richard Kettering
d30987023c New frames for the wraith, added TC macro to the Spectre and Nightgaunt. 2008-09-05 06:31:27 +00:00
Richard Kettering
ac5eeb0ed5 New frames for the wraith, and unanimated placeholders...
...for the spectre and nightgaunt.
2008-09-05 06:21:59 +00:00
Ignacio R. Morelle
6f2bc32023 Portrait fix from artist
http://www.wesnoth.org/forum/viewforum.php?f=9, optimized
2008-09-04 22:44:37 +00:00
Gunter Labes
fcdaed7aa7 documented the new 'fifo_path' config key
more documentations updates
2008-09-04 18:17:21 +00:00
Gunter Labes
e813240e4b recreate the fifo on config load 2008-09-04 13:21:25 +00:00
Pauli Nieminen
fa2c3aa134 Added automatic detection for packet_type...
...and made bandwidth monitoring always compiled
2008-09-04 09:32:38 +00:00
Gunter Labes
16576d3595 updated command help 2008-09-04 07:26:20 +00:00
Ignacio R. Morelle
2a9e130dca Backporting 2008-09-03T21:34:35Z!shadowm@wesnoth.org (optimized). 2008-09-03 21:42:30 +00:00
Pauli Nieminen
9fd2e4c203 Added start time to bans and made ban_manager store deleted bans...
...in separate list
2008-09-03 02:12:32 +00:00
Pauli Nieminen
8fdeb979ad backported: Fixed metrics compilation and added max procesing times for types 2008-09-03 02:11:39 +00:00
Nils Kneuper
4c7f4f2b83 ancient RELEASE_NOTES cleanup... 2008-09-02 22:54:50 +00:00
Nils Kneuper
252e8223ee post release (1.4.5) version bump 2008-09-02 22:53:52 +00:00
Nils Kneuper
08e353942f remove some unneeded files from the listing 2008-09-02 21:52:27 +00:00
Nils Kneuper
ead3af2bef make sure that all header files are in the tarball (ported over from trunk) 2008-09-02 21:41:40 +00:00
Nils Kneuper
8e6936eccc bump version to 1.4.5 2008-09-02 20:46:22 +00:00
Nils Kneuper
ea23d79284 pot-update and regenerating doc files (preparing for 1.4.5, no string changes) 2008-09-02 20:37:27 +00:00
Ignacio R. Morelle
570fc10239 Update chanelog 2008-09-02 19:16:39 +00:00
Ignacio R. Morelle
a398376ce7 Backported all mage portraits from trunk as requested by Jetryl. 2008-09-02 19:13:18 +00:00
David Philippi
ee75c96640 hungarian translation update 2008-09-02 14:25:12 +00:00
Nils Kneuper
9bea72416d updated Galician translation 2008-09-02 14:14:19 +00:00
Gunter Labes
4b6c5c6196 update the command help for unprivileged users 2008-09-02 10:23:49 +00:00
Gunter Labes
09537668d9 restrict shut_down and restart commands to use via the socket only 2008-09-02 10:00:11 +00:00
Gunter Labes
8b8b3e3c52 give the socket an invalid username to ensure it is unique 2008-09-02 09:49:37 +00:00
Pauli Nieminen
6365ec4411 backported: Fixed linewrapping with not to wrap markups...
...(bug #11946 and bug #11945)
2008-09-02 09:40:29 +00:00
Gunter Labes
c182bda3fe update the command help message 2008-09-02 09:16:17 +00:00
Ignacio R. Morelle
f0bc7fd585 Backported 2008-09-02T04:23:49Z!shadowm@wesnoth.org
Optimized implicit units/ image paths
2008-09-02 04:25:03 +00:00
Pauli Nieminen
acdaa4e9ad Fixed crash bug when overwriting existing ban which was permanent 2008-09-01 20:39:49 +00:00
Pauli Nieminen
edf2ab92dc Backported: Fixed MP saves to transfer correct completion state...
...to remote clients when loadin game (bug #10385)
2008-09-01 20:39:08 +00:00
Pauli Nieminen
ed2d47b6c3 Backported: Fixed loading ai parameters.
MP side defination now overwrites era values (bug #12171)
2008-09-01 17:41:59 +00:00
Pauli Nieminen
e2fbc584c9 Backported: Fixed server configuration reload...
...to trigger ban writing if filename changed
2008-09-01 17:41:51 +00:00
Pauli Nieminen
1a600bc22a Fixed crash when ai moves units next to level 0 hiden unit (bug #12252) 2008-09-01 12:53:23 +00:00
David Philippi
5815377e8e hungarian translation update 2008-08-31 21:15:50 +00:00
Nils Kneuper
a35dd86479 updated Polish translation 2008-08-31 17:05:00 +00:00
Nils Kneuper
87962871aa updated Czech and German translation 2008-08-31 11:59:34 +00:00
Nils Kneuper
321359dad9 running utils/wesnoth-optipng (trunk version)
*** Total saved: 5 KB on 73 files
2008-08-31 10:55:59 +00:00
Nils Kneuper
2b2cf70342 pot-update (no string changes)
regenerate documentation files
2008-08-31 09:47:38 +00:00
Pauli Nieminen
6bac46e285 Backported: Fixed OoS bug when giving control and having move in undo stack. 2008-08-30 16:04:46 +00:00
Richard Kettering
d4c88b577f Remade animations for the saurian oracle. 2008-08-30 07:57:31 +00:00
David Philippi
23eab78c96 hungarian translation update 2008-08-29 15:52:51 +00:00
Pauli Nieminen
743b41b145 Fixed compilarion: Added missing wesnothd namespace for server/game.c/hpp 2008-08-29 11:04:57 +00:00
Nils Kneuper
bdac100552 updated Chinese (Traditional) translation 2008-08-29 10:32:54 +00:00
Richard Kettering
a045b273cc Remade animations for the saurian soothsayer. 2008-08-29 07:10:23 +00:00
Pauli Nieminen
2beec3a977 Optimized server ban manager using integer ip for wildcard matching
Added who_banned and group fields to ban

Made reason required for banning
2008-08-28 15:36:13 +00:00
Nils Kneuper
189a1821d7 updated Chinese (Traditional) translation 2008-08-28 09:46:44 +00:00
Richard Kettering
76fc5ec459 Remade animations for the saurian augur. 2008-08-28 01:58:01 +00:00
David Philippi
53049b2e0c updated hungarian translations and manual screenshots 2008-08-27 15:18:22 +00:00
Benoît Timbert
569e67068b French translation update 2008-08-25 20:57:41 +00:00
Nils Kneuper
eb7b913141 pot-update (2 new strings in thot) 2008-08-25 13:57:27 +00:00
Nils Kneuper
6d937c5aa2 comment out death animation for troll whelp...
...since it is still based on the old base image
2008-08-25 08:12:45 +00:00
Richard Kettering
704d08807d Replaced the shadow's face with something more iconic. 2008-08-25 05:03:15 +00:00
Pauli Nieminen
2ebdce72b9 Added ban files too 2008-08-24 22:30:58 +00:00
Pauli Nieminen
fd7b6be3fe Backported timed ban system to 1.4 2008-08-24 22:30:12 +00:00
Eric S. Raymond
a0c68f1450 Backport some THot fixes. 2008-08-23 20:28:39 +00:00
Lari Nieminen
2e3d0e4dc0 Unit id typo fixes. 2008-08-21 20:20:44 +00:00
Pauli Nieminen
d9f3dfe94a Changed side_drop handling not to automaticaly assign AI for side...
...if leader is dead (bug #12186)
2008-08-20 20:31:15 +00:00
Lari Nieminen
260fb57307 Fixed a recruit list typo. 2008-08-18 14:34:55 +00:00
Lari Nieminen
1aeeade697 Updated changelogs. 2008-08-18 12:48:14 +00:00
Nils Kneuper
cb7efd4011 updated Lithuanian translation 2008-08-17 11:52:59 +00:00
Nils Kneuper
97db358924 pot-update (no strings should be changed) 2008-08-14 18:13:50 +00:00
David Philippi
9d77bb8551 spanish translation update 2008-08-14 16:23:33 +00:00
David Philippi
0793a64323 danish translation update 2008-08-13 17:45:51 +00:00
Nils Kneuper
cf66ffc73d made the default location of the add-on server add-ons.wesnoth.org...
...instead of campaigns.wesnoth.org it will point to the same machine,
just make it clear that there is more than only campaigns on the
machine
2008-08-13 14:57:04 +00:00
Nils Kneuper
9cff0de267 make sure that some "values still at initial values"...
...do not appear anymore (already done for trunk some time ago)
2008-08-13 13:27:25 +00:00
Nils Kneuper
26be201c8a regenerate Documentation files
fix error in Chinese (Traditional) manpages
2008-08-13 12:26:51 +00:00
Pauli Nieminen
987bfb1b49 Fixed variable not to use reference when copy is required 2008-08-13 11:56:37 +00:00
Nils Kneuper
1f3ec76e0e updated Chinese (Traditional) translation 2008-08-13 11:44:12 +00:00
Nils Kneuper
c1cf44ecfd updated Russian translation 2008-08-12 12:32:28 +00:00
Lari Nieminen
d34a61d16f Made it impossible to win the scenario by defeating both enemy leaders. 2008-08-10 16:04:04 +00:00
Nils Kneuper
c4e8ac32e6 updated Chinese (Traditional) translation 2008-08-10 14:07:35 +00:00
Nils Kneuper
db0f38c27d updated Chinese (Traditional) translation 2008-08-10 09:59:50 +00:00
Lari Nieminen
ab56d1cb94 Fixed a stupid coordinate bug. 2008-08-09 20:53:29 +00:00
Nils Kneuper
c3ef7fcb83 updated Chinese (Traditional) translation 2008-08-07 15:12:32 +00:00
Richard Kettering
7cb5532848 Added mistakenly omitted dragonstick SFX. 2008-08-07 05:03:21 +00:00
Pauli Nieminen
c3360d5e6a added missing bytes to kilobytes conversion 2008-08-06 16:46:45 +00:00
Pauli Nieminen
7cf6e83461 Fixed log output to include kb extension to size 2008-08-06 15:54:02 +00:00
Pauli Nieminen
1a6f3c3aa6 Fixed compilation warning about unitialized variable 2008-08-06 15:44:21 +00:00
Pauli Nieminen
49526da064 Backported campaignd send size statistics to 1.4 2008-08-06 15:28:35 +00:00
David Philippi
bf3757bf4d danish translation update 2008-08-05 22:11:10 +00:00
Richard Kettering
57a035280e cleanup of book items. 2008-08-04 07:34:24 +00:00
Nils Kneuper
7896b0a7ee ran wesnoth-optipng (script from trunk)
*** Total saved: 5 KB on 5 files
2008-08-03 10:50:55 +00:00
Nils Kneuper
3beb49ff30 pot-update 2008-08-03 09:01:43 +00:00
Nils Kneuper
2ab8c682cd updated Italian translation 2008-08-03 08:54:29 +00:00
Richard Kettering
5b48aebd33 Fixup of several item graphics. 2008-08-02 04:37:09 +00:00
David Philippi
f05dcd7322 font update 2008-07-28 00:35:01 +00:00
Tomasz Śniatowski
1f8f9671d2 backport 2008-07-25T22:16:59Z!kailoran@gmail.com to 1.4 (allow debug-level logging in wesnoth_editor) 2008-07-26 13:29:48 +01:00
Nils Kneuper
17b3d72feb post release version bump to 1.4.4+svn 2008-07-23 12:25:39 +00:00
Nils Kneuper
d0324cd608 updated Chinese (Traditional) translation 2008-07-23 12:24:40 +00:00
Nils Kneuper
1f4ae99a84 version bump to 1.4.4 2008-07-22 19:44:11 +00:00
Nils Kneuper
23eda986e5 last pot update (reference update) before releasing 2008-07-22 19:41:18 +00:00
Nils Kneuper
f34dbf7e08 updated Finnish, Galician and German translation 2008-07-22 19:36:16 +00:00
Nils Kneuper
0046ef789f updated Slovak translation (part2) 2008-07-22 10:21:42 +00:00
Nils Kneuper
9a606ef052 updated Slovak translation (more to come...) 2008-07-22 10:19:47 +00:00
Nils Kneuper
a2bb57d1a0 updated German translation 2008-07-22 10:19:07 +00:00
David Philippi
9e9498c52a japanese translation update 2008-07-21 18:57:48 +00:00
Nils Kneuper
af2fd33741 updated Polish translation 2008-07-21 14:45:36 +00:00
Nils Kneuper
1f7b5ad81a updated Latvian translation 2008-07-20 21:48:24 +00:00
Mark de Wever
3d57a72ace German translation update. 2008-07-20 17:19:19 +00:00
Nils Kneuper
dba7c22395 pot-update (no stringchanges, just reference updates)
probably the last "real" update before 1.4.4
2008-07-19 14:28:15 +00:00
David Philippi
a005dd1b3d hungarian translation update 2008-07-19 08:00:45 +00:00
David Philippi
952e4d895b danish translation update 2008-07-18 22:39:16 +00:00
Nils Kneuper
04c8bb08a2 updated Slovak translation 2008-07-18 20:50:43 +00:00
Ignacio R. Morelle
43c69d6711 Update Kitty's Elvish Fighter portrait (backport from trunk) 2008-07-18 20:29:50 +00:00
Nils Kneuper
0af1fd5c3e updated Finnish and Slovak translation 2008-07-16 08:07:58 +00:00
Jordà Polo
c00e822051 Add Marc Orcau to the credits as Catalan translator. 2008-07-13 17:15:02 +00:00
Jordà Polo
f173df078b Updated Catalan translation thanks to Marc Orcau. 2008-07-13 17:12:36 +00:00
Nils Kneuper
6b77c337d4 updated Finnish translation 2008-07-13 16:38:14 +00:00
Nils Kneuper
73eca4dd34 regenerated docs for 1.4 2008-07-13 16:27:37 +00:00
Nils Kneuper
75aee336b0 updated Lithuanian translation 2008-07-13 16:13:58 +00:00
Mark de Wever
c1297f99aa Added check whether sendfile is in glibc (debian patch #490638).
(The code in trunk already has this fix.)
2008-07-13 09:55:43 +00:00
Nils Kneuper
2fc693d1a3 updated Chinese (Traditional) translation 2008-07-12 11:40:11 +00:00
Nils Kneuper
51d5306f45 updated Slovak translation 2008-07-11 10:37:37 +00:00
Nils Kneuper
12b7c1a7a7 updated German translation 2008-07-11 10:36:16 +00:00
Nils Kneuper
6997b59efe reorder as requested by translation maintainer 2008-07-09 18:33:27 +00:00
Nils Kneuper
ad0fef7054 updated Chinese (traditional) translation 2008-07-09 18:31:57 +00:00
Nils Kneuper
4aa552622b updated Credits for Galician translation 2008-07-08 20:49:25 +00:00
Nils Kneuper
da94cdfd4c updated Chinese (traditional) translation 2008-07-08 12:39:43 +00:00
Nils Kneuper
c0bda5f174 updated Chinese (traditional) translation 2008-07-08 08:18:27 +00:00
Nils Kneuper
aae58de7b7 updated Chinese (traditional) translation 2008-07-08 05:53:55 +00:00
Gunter Labes
666e457209 used the serverN.wesnoth.org addresses for the alternate servers
removed the alternate debian server
2008-07-07 06:47:30 +00:00
Nils Kneuper
e744f4ea3f updated Russian translation 2008-07-06 22:35:17 +00:00
Nils Kneuper
f2bfad04b1 updated Chinese (Traditional) translation 2008-07-06 15:40:46 +00:00
Nils Kneuper
92a86a9bf6 updated Italian translation
regenerated doc files
2008-07-06 15:31:05 +00:00
David Philippi
4af25f59b9 danish translation update 2008-07-06 14:58:05 +00:00
Benoît Timbert
ba4de2263a Move Kitty to the main artist section.
Updated the comment (matching the trunk one)
2008-07-05 12:24:10 +00:00
Ignacio R. Morelle
a521915170 Updated wiki link since the old one was broken 2008-07-04 23:12:43 +00:00
Ignacio R. Morelle
f10b25c46b Enable Syntax_Error's additional dwarven village variations 2008-07-04 22:36:22 +00:00
Ignacio R. Morelle
dca4c53395 Add new dwarven village graphics by Syntax_Error (not yet used) 2008-07-04 22:31:41 +00:00
Nils Kneuper
01865fdd2a updated Latvian translation 2008-07-04 09:54:25 +00:00
Nils Kneuper
215ada8748 updated German and Czech translation 2008-07-03 21:57:12 +00:00
Benoît Timbert
79fbfab6d0 French translation update (catched thanks to trunk fuzzies :)) 2008-07-03 20:51:21 +00:00
Benoît Timbert
7f07e71108 French translation update 2008-07-03 20:41:36 +00:00
Nils Kneuper
469dd1f510 missing file from pot-update (should not change strings...) 2008-07-03 20:34:47 +00:00
Nils Kneuper
75194c9da3 pot-update (adding strings for translations in the credits, 5 new strings) 2008-07-03 20:22:49 +00:00
Nils Kneuper
de45a4506d make sure that all translation strings,
...even for those not really started but with existing po files,
appear in the credits (and more important: the po files for the
credits)
2008-07-03 20:21:10 +00:00
Pauli Nieminen
745971a849 Fixed Makefile.am so makefile can be generated 2008-07-03 20:17:50 +00:00
Nils Kneuper
d676208eb7 updated Latvian translation
updated Credits and added placeholders for so far missing translations
2008-07-03 18:57:15 +00:00
Nils Kneuper
62aacdce77 updated Latvian translation name 2008-07-03 06:12:13 +00:00
Nils Kneuper
f60ed5ab8c argh, copy&paste is a bad approach when not editing things afterwards
now the latvian translation is selectable when having the locale lv_LV
2008-07-03 05:47:14 +00:00
Ignacio R. Morelle
82c5d550b5 Updated female Elvish Archer portrait as per artist's request 2008-07-03 00:47:25 +00:00
Nils Kneuper
791e0d33e7 changelog update for new translation 2008-07-02 19:02:39 +00:00
Nils Kneuper
c6c304c8d0 added Latvian translation 2008-07-02 18:54:30 +00:00
Nils Kneuper
ab7d7d0b3c updated Arabic translation 2008-07-01 19:05:16 +00:00
Pauli Nieminen
4942a17f51 Fixed Makefile.am to give special CXXFLAGS for wesnothd correctly 2008-06-30 20:48:39 +00:00
Richard Kettering
c98fae081a New sounds for dwarven thundersticks and dragonsticks. 2008-06-30 03:05:55 +00:00
Richard Kettering
9ab7fa12ce Added muzzle-flash images for dwarven thunderer line. 2008-06-30 03:01:56 +00:00
Richard Kettering
8bc4926773 Added muzzle-flash images for dwarven thunderer line. 2008-06-30 02:13:04 +00:00
Nils Kneuper
4c82170add pot-update (reference update only...) 2008-06-29 10:26:43 +00:00
Nils Kneuper
ca7755cd10 regenerate doc files 2008-06-28 14:08:58 +00:00
Pauli Nieminen
9b942c5de1 Added banwidth statistics configure switch 2008-06-27 22:46:37 +00:00
Pauli Nieminen
9804410bdd improved bandwidth statistics categories 2008-06-27 21:30:26 +00:00
Pauli Nieminen
ac9aff4f39 Made server automaticaly output bandwidth profiling stats to log 2008-06-27 19:58:18 +00:00
Pauli Nieminen
6b6c963ae0 backported 2008-06-27T16:33:52Z!paniemin@cc.hut.fi to stable:
...fixes timer sound not to play in opponents turn
2008-06-27 16:44:25 +00:00
Nils Kneuper
cd16837e40 updated Serbian translation 2008-06-27 13:11:05 +00:00
David Philippi
ac438037cf danish translation update 2008-06-25 12:31:55 +00:00
Pauli Nieminen
984ae41105 backported 2008-06-25T11:28:04Z!paniemin@cc.hut.fi to stable (bug: 11207) 2008-06-25 11:44:08 +00:00
Nils Kneuper
17e7c131bf updated Greek translation 2008-06-23 21:03:21 +00:00
Pauli Nieminen
368b4718dc Fixed campaignd not exiting after fatal network error 2008-06-23 16:31:36 +00:00
Nils Kneuper
e8fa8080c1 updated Lithuanian translation 2008-06-22 13:25:18 +00:00
Nils Kneuper
a261b49409 updated Finnish translation 2008-06-22 10:07:01 +00:00
Pauli Nieminen
cd49b14af2 Added network bandwidth usage statistics collection code for server 2008-06-21 17:27:21 +00:00
Nils Kneuper
4aa84be8ec updated German translation (patches by Crommi and patch #1069) 2008-06-21 14:15:15 +00:00
Nils Kneuper
e7a1626afc updated Finnish translation 2008-06-21 07:57:43 +00:00
Eric S. Raymond
6452366e47 Backport fix for Debian bug #483893. 2008-06-20 19:58:18 +00:00
Nils Kneuper
2f96f7fd89 post release (1.4.3) version bump, yes I know that I am late... 2008-06-20 19:38:04 +00:00
Nils Kneuper
bea23aab71 another fix needed for the move from gl_ES to gl 2008-06-20 11:06:58 +00:00
Nils Kneuper
a7954e5cf0 pot-update (no stringchanges) 2008-06-20 10:56:53 +00:00
Nils Kneuper
0ddc207416 changelog update for the move from gl_ES to gl 2008-06-20 10:45:55 +00:00
Nils Kneuper
27e9b676d2 move gl_ES to gl as requested by translation maintainer 2008-06-20 10:40:26 +00:00
Richard Kettering
7a272b7086 New Kalenz portrait from kitty. 2008-06-18 04:37:20 +00:00
Piotr Cychowski
e22f46bab3 backport of #27269 2008-06-17 20:54:28 +00:00
Ali El Gariani
3e2e2887c1 Backport the fix for bug #11630
(preventing redo and rename during opponent's turn)
2008-06-17 14:35:07 +00:00
Richard Kettering
f23c94c671 New melee animation for the death knight. 2008-06-17 06:58:22 +00:00
Jérémy Rosen
cac47f3e83 disable standing animations when unit is incapacitated 2008-06-15 09:46:11 +00:00
Nils Kneuper
89164599b1 running utils/wesnoth-optipng
*** Total saved: 0 KB on 1 files
2008-06-13 12:47:15 +00:00
Pauli Nieminen
3d6b840f3a strip windows line ends from cfg files when publishing addons 2008-06-12 11:42:41 +00:00
Pauli Nieminen
004bff3eb9 Removed extra changes in previous commit 2008-06-11 08:16:47 +00:00
Pauli Nieminen
004687e060 Made campaignd to tell if connection is using gzipp 2008-06-11 08:14:42 +00:00
Pauli Nieminen
783c166b75 Fixed variable to right scope 2008-06-10 11:44:30 +00:00
Pauli Nieminen
e51f4e8bc1 Made send_file to check error code 2008-06-10 11:38:12 +00:00
Lari Nieminen
2d82024cbc Fixed a bug which caused Alanin to disappear...
...if you first took him to the castle and then defeated the enemy leader.
2008-06-09 09:43:56 +00:00
Pauli Nieminen
24275c7ec8 Fixed timeouts in networking code 2008-06-09 07:29:46 +00:00
Lari Nieminen
864668c9da New lighthouse by Syntax Error. 2008-06-08 19:32:24 +00:00
Nils Kneuper
7e3098a2f3 version bump to 1.4.3 2008-06-08 13:02:12 +00:00
Nils Kneuper
285ab943a4 pre release pot-update (no string changes) 2008-06-08 13:01:22 +00:00
Nils Kneuper
f442475d44 updated Czech translation 2008-06-07 23:09:51 +00:00
Benoît Timbert
05da05a319 French translation update 2008-06-07 21:37:45 +00:00
Nils Kneuper
c823025e63 updated Polish translation, regenerated docs 2008-06-07 20:19:45 +00:00
Benoît Timbert
ea0f24bb66 French translation update 2008-06-07 19:52:22 +00:00
Nils Kneuper
9b94d030af updated Finnish translation 2008-06-07 19:11:59 +00:00
Nils Kneuper
c0eae74405 updated Estonian translation 2008-06-07 18:23:45 +00:00
David Philippi
0a88f08bbf changelog update 2008-06-07 11:53:44 +00:00
David Philippi
d6fc1ab08d hungarian translation update 2008-06-07 11:52:17 +00:00
Nils Kneuper
9c0aec08b0 updated Russian translation 2008-06-06 22:20:39 +00:00
Nils Kneuper
2a88fc6d70 updated Finnish and Estonian translation 2008-06-06 19:40:42 +00:00
David Philippi
efac40e13c hungarian translation update 2008-06-06 19:36:05 +00:00
David Philippi
627251b87b spanish translation update 2008-06-06 19:33:02 +00:00
Mark de Wever
316f224417 German translation update. 2008-06-06 09:33:05 +00:00
Nils Kneuper
f1efa6a102 updated Estonian translation 2008-06-05 21:05:43 +00:00
Pauli Nieminen
999b5451ba Added detection if sendfile is in system 2008-06-05 20:14:48 +00:00
Pauli Nieminen
1dddfba779 merged send_file from trunk 2008-06-05 13:33:40 +00:00
Nils Kneuper
ce6239df48 correct order of items in manual and update doc files...
...(no string changes in translations)
2008-06-04 19:47:08 +00:00
Nils Kneuper
8382d1675b updated Dutch translation 2008-06-04 19:45:04 +00:00
Nils Kneuper
7c8e004832 updated German translation
added update (English) screenshots for the manual
2008-06-04 08:16:38 +00:00
Benoît Timbert
34c61385bd French translation update 2008-06-03 16:43:49 +00:00
David Philippi
3ced2e4e68 danish translation update 2008-06-02 22:42:40 +00:00
Nils Kneuper
66f9a61017 updated Czech translation 2008-06-02 18:54:40 +00:00
Nils Kneuper
9bc82f7c04 updated Finnish translation 2008-06-02 12:08:21 +00:00
Richard Kettering
35c8289c70 Updates to longbowman and master bowman sprites. 2008-06-02 06:47:31 +00:00
Nils Kneuper
9ca31457bf updated Czech translation 2008-06-01 21:55:32 +00:00
Benoît Timbert
fa093a3805 French translation update 2008-06-01 21:25:37 +00:00
Benoît Timbert
783d55b1f7 Fix some obsolete WML in the test scenario 2008-06-01 14:52:34 +00:00
Benoît Timbert
dfc3a508f7 French translation update 2008-06-01 10:12:54 +00:00
Nils Kneuper
0cb8c91063 pot-update 2008-06-01 09:44:38 +00:00
Nils Kneuper
128680a9c5 updated Turkish translation
recreated doc files

fixed *many* mistakes in various manpages translations
2008-06-01 09:37:59 +00:00
Nils Kneuper
7b381d7714 updated Finnish translation 2008-05-31 19:53:19 +00:00
Nils Kneuper
ae1a81b4e0 added arab translator to credits and some more header cleanup 2008-05-31 17:55:22 +00:00
Nils Kneuper
bdf8986326 updated arabic translation (and clean up the header in the main file) 2008-05-31 17:41:14 +00:00
Benoît Timbert
5197204b57 French translation update 2008-05-31 14:46:32 +00:00
Benoît Timbert
3cf2708e4c Better default for arabic plural forms...
...(according to http://translate.sourceforge.net/wiki/l10n/pluralforms)
2008-05-31 13:43:51 +00:00
Nils Kneuper
3c12e7502e fixed plural forms, default value is no good at all... 2008-05-31 11:19:44 +00:00
Nils Kneuper
77da0d710d added Arabic translation 2008-05-31 11:10:57 +00:00
Lari Nieminen
75e1aaae06 Fixed bug #11757 (even though there's no crash in 1.4). 2008-05-30 23:48:03 +00:00
Benoît Timbert
2cd6d127cd French translation update 2008-05-30 19:00:15 +00:00
Nils Kneuper
65ecf8b04b updated Finnish translation 2008-05-30 18:11:27 +00:00
Richard Kettering
8f5c7dd86d Corrected accidental omission of base frame for human bowman. 2008-05-30 17:13:51 +00:00
Ignacio R. Morelle
7586ad293d Fix a great mistake in the second death animation,
...that probably invalidated part of it to the engine
2008-05-28 21:24:38 +00:00
Ignacio R. Morelle
ae58a862e8 Fix a couple of typos/spelling mistakes, etc. 2008-05-28 21:23:08 +00:00
Pauli Nieminen
1a8f5adb7b Implemented send_file to reduce memory usage when sending files 2008-05-28 20:10:57 +00:00
Pauli Nieminen
75990a2e80 Fixed filesize check in campaignd 2008-05-28 16:30:29 +00:00
Pauli Nieminen
aadeae5484 Now it compiled again :( 2008-05-28 09:46:02 +00:00
Pauli Nieminen
868460a117 Fixed compilation of no_strip 2008-05-28 09:43:08 +00:00
Pauli Nieminen
c61cc8fb1d Fixed tokenizer not to strip CR from quoted string...
...because it would destroy images transfered over network
2008-05-28 09:38:05 +00:00
Richard Kettering
ae289c84de New frames for human bowman. 2008-05-28 05:52:08 +00:00
Nils Kneuper
35b2a640f4 updated Estonian translation 2008-05-27 08:00:35 +00:00
Nobuhito Okada
852a1ca01d updated Japanese translation 2008-05-27 01:04:25 +00:00
Pauli Nieminen
fc42712fef fixed schema object leak in network_worker 2008-05-26 23:58:39 +00:00
Pauli Nieminen
5a87401ed2 Fixed campaignd allways send data back using same format as client 2008-05-26 22:26:28 +00:00
Pauli Nieminen
b207268648 Fixed campaignd to always send data back using same format as client 2008-05-26 22:21:01 +00:00
Pauli Nieminen
d9cf2569eb made campaign server use gzip for storing addons
added configuraion option to choose gzip compression level
2008-05-26 21:36:58 +00:00
Ignacio R. Morelle
214da25e9d Fix issues with LIMIT_RECRUITS...
...as pointed out by user on forum thread 21547
(http://www.wesnoth.org/forum/viewtopic.php?t=21547)
2008-05-26 21:25:15 +00:00
Benoît Timbert
b241b53a5a French translation update 2008-05-26 18:31:21 +00:00
Nils Kneuper
f477e568d1 updated German translation 2008-05-26 17:57:16 +00:00
Nils Kneuper
fe5545923d pot-update (stringchanges)
added spanish manual

regenerated documentation files
2008-05-26 17:49:59 +00:00
David Philippi
2b90abd64d spanish manual update 2008-05-26 15:40:09 +00:00
Pauli Nieminen
2a9e737c4a made campaign server detect if client can receive gzipped data 2008-05-25 07:58:36 +00:00
Pauli Nieminen
85a7d66cb2 fixed parser bug that prevented loading binary data strings 2008-05-24 11:42:24 +00:00
Pauli Nieminen
6ec54c5f67 removed old todo comments from campaign server 2008-05-23 20:19:46 +00:00
Pauli Nieminen
4d5162f596 made campaign server use gzip compression for networking 2008-05-23 17:28:35 +00:00
Nils Kneuper
8b528d5753 added new translator 2008-05-22 22:21:10 +00:00
Nils Kneuper
c1cef5d2a4 updated Estonian translation 2008-05-22 20:47:06 +00:00
Nils Kneuper
d31931f031 updated Finnish translation 2008-05-22 20:30:21 +00:00
Thomas Baumhauer
c1c8a2c94c Adding double quote as illegal character in Windows file names,
...thanks to ilor for pointing this out.
2008-05-22 09:56:53 +00:00
Thomas Baumhauer
ef2b0a21c4 Fixing bug #11665:
Filename saves allow illegal characters resulting in game crash.
2008-05-22 09:45:20 +00:00
David Philippi
51728e3d2d font update 2008-05-21 11:05:58 +00:00
Richard Kettering
0f1943ec7d Revamped fighter axe animation. 2008-05-21 06:41:51 +00:00
Jörg Hinrichs
24eda6301d Updated packaging scripts and new CodeBlocks release project files...
...for wesnoth 1.4.2
2008-05-20 19:04:03 +00:00
Nils Kneuper
3eb2648abf correct encoding from windows-1251 to utf8 2008-05-20 15:10:43 +00:00
Pauli Nieminen
de7fa767b4 Fixed server networking bug 2008-05-20 11:47:58 +00:00
Gunter Labes
3db5649d77 * fixed bug #11702: wrong next_scenario references in UtBS 2008-05-19 17:33:04 +00:00
Richard Kettering
f5b675e490 Upgraded animations for the orcish assassin. 2008-05-19 07:44:23 +00:00
Pauli Nieminen
44cc304050 Improved wesnothd performace: Removed transfer stats from server 2008-05-18 18:35:43 +00:00
Nils Kneuper
3f7ed417b8 updated Serbian translation 2008-05-18 17:39:46 +00:00
Benoît Timbert
23cfad3ff4 French translation update 2008-05-18 13:59:58 +00:00
Lari Nieminen
cd06e210de Fixed a recruit list typo. 2008-05-17 10:06:07 +00:00
Benoît Timbert
9ec13d2a02 Update some information 2008-05-16 23:17:06 +00:00
Benoît Timbert
fb9d1a5268 French translation update 2008-05-16 16:41:29 +00:00
Benoît Timbert
a37f0c1c7a French translation update 2008-05-16 16:22:31 +00:00
Nils Kneuper
66b5d47457 correct version from 1.3.x to 1.5.x 2008-05-15 09:11:24 +00:00
Lari Nieminen
ed9bd501dd Fixed the distract ability. 2008-05-14 16:54:09 +00:00
David Philippi
95ed2e0752 danish translation update 2008-05-14 15:03:30 +00:00
Dimitar Ilccov
269e056d82 Same as 2008-05-14T13:08:34Z!mythological@mt.net.mk, but in 1.4 branch 2008-05-14 13:10:14 +00:00
Benoît Timbert
f54f2f786d Mention the [teleport] minor incompatiblity in RELEASE_NOTES 2008-05-13 21:37:16 +00:00
Benoît Timbert
5f0ce78901 fix [teleport] capturing villages with the wrong side (bug #11683)
Note : this might result in OOSes in some MP scenarios using
[teleport] to a village

Such scenarios a very rare (i'm not aware of any) so i guess a very
minor incompatibility is OK there.
2008-05-13 21:24:22 +00:00
Benoît Timbert
35d2e2f917 Fill default plural forms...
...(according to http://translate.sourceforge.net/wiki/l10n/pluralforms)
2008-05-13 19:57:13 +00:00
David Philippi
2e6601bcf0 added new languages 2008-05-13 19:43:15 +00:00
David Philippi
9c2d6a8cfd added friulian and macedonian languages 2008-05-13 19:00:40 +00:00
Pauli Nieminen
ad4ecd8493 backported 2008-05-12T23:34:38Z!paniemin@cc.hut.fi to stable (memory leaks fixes) 2008-05-13 11:11:38 +00:00
Richard Kettering
c246da918d New, team-colored images for the mermaid initiate. 2008-05-13 05:24:16 +00:00
Richard Kettering
bfc21d213e Added halo images for mermaids. 2008-05-13 04:41:45 +00:00
Richard Kettering
749d46ef41 Added halo images for mermaids. 2008-05-13 04:39:08 +00:00
Pauli Nieminen
8b87c3faf7 Fixed a mememory leak in networking code 2008-05-12 20:54:00 +00:00
Benoît Timbert
fb4ab15735 French translation update 2008-05-12 15:52:33 +00:00
Benoît Timbert
26eb3d5376 French trnaslation update 2008-05-12 13:38:22 +00:00
Richard Kettering
2484372df1 Added a two-frame defense animation for the Sentinel. 2008-05-12 03:09:36 +00:00
Richard Kettering
073ce2f284 Slight tweak to stalwart defense frame. 2008-05-12 03:06:27 +00:00
Richard Kettering
032e016a43 Added a two-frame defense animation for the Stalwart. 2008-05-12 02:28:18 +00:00
Richard Kettering
c345d7b4a0 Replaced two frames - I'd forgotten we're not supposed to delete them...
...in the stable branch.
2008-05-12 02:24:33 +00:00
Pauli Nieminen
736cf32e8a Improved connection stability with slow connections. 2008-05-11 23:04:26 +00:00
Richard Kettering
bfc34be48e New, 2-frame defense animation for the dwarven lord. 2008-05-11 23:00:40 +00:00
Richard Kettering
e963f6e7f8 New, 2-frame defense animation for the steelclad. 2008-05-11 21:48:58 +00:00
Gunter Labes
4cb986b0a1 polish the graceful restart feature 2008-05-10 14:43:49 +00:00
Gunter Labes
29453c961f fixed null-pointer reference in network code...
...(merged 2008-05-09T22:54:20Z!paniemin@cc.hut.fi/3 from trunk)
2008-05-10 11:30:22 +00:00
Ignacio R. Morelle
d614789fe5 Fix bug #11655 - I'll report to the Spanish translation team later 2008-05-09 20:52:31 +00:00
Pauli Nieminen
c57f1ac24e Backported graceful restart feature to server 2008-05-09 08:58:47 +00:00
Ignacio R. Morelle
69c5a288cf Fix bug #11386 on 1.4 branch. 2008-05-07 23:31:24 +00:00
Lari Nieminen
37992fe42c Fix bogus types in recruit lists. 2008-05-07 18:56:02 +00:00
Mark de Wever
dc73a970e0 Added some includes to fix compilation problems with Sun Studio 12
(patch #1066 provided by inchworm).
2008-05-07 17:35:33 +00:00
Mark de Wever
b41c77429b Rhonda pointed out that 2008-04-04T13:04:37Z!esr@thyrsus.com should be backported to 1.4.
Starting a campaign without any installed now gives an error.
2008-05-06 15:34:02 +00:00
Benoît Timbert
a8e341bf41 French translation update 2008-05-06 15:11:27 +00:00
Mark de Wever
ddf4922622 Rhonda reminded me I forgot to backport 2008-03-18T18:05:09Z!koraq@xs4all.nl.
Fixes a SIGBUS error on Sparc machines.
2008-05-06 14:57:56 +00:00
Ignacio R. Morelle
bcdebac5c8 Backport 2008-05-06T00:53:51Z!shadowm@wesnoth.org...
...I still wonder about the clumsiness of the whole event
2008-05-06 00:55:27 +00:00
Nils Kneuper
918bdbcf53 updated Russian translation 2008-05-05 17:54:42 +00:00
Nils Kneuper
67c3140fd4 updated Slovak translation 2008-05-04 22:23:03 +00:00
Nils Kneuper
387cfb744d post-release version bump 2008-05-04 22:22:19 +00:00
Ignacio R. Morelle
50054426bd Backport 2008-05-04T18:25:31Z!shadowm@wesnoth.org from trunk to 1.4 branch 2008-05-04 18:58:26 +00:00
Nils Kneuper
2318afafb1 bump version to 1.4.2 2008-05-04 16:53:26 +00:00
Nils Kneuper
42a703b753 recreated po4a based files 2008-05-04 14:23:36 +00:00
Nils Kneuper
bfe9d176f6 somehow this file slipped through in the commit... 2008-05-04 13:50:46 +00:00
Nils Kneuper
6a2b99e372 updated Italian translation 2008-05-04 13:49:05 +00:00
Nils Kneuper
7c404ce842 just another pre 1.4.2 pot-update 2008-05-04 13:47:37 +00:00
Nils Kneuper
8b290738ce updated Finnish translation 2008-05-04 12:56:27 +00:00
Lari Nieminen
d943a461c9 Fixed a clan boss dialogue filter. 2008-05-03 19:23:35 +00:00
Nils Kneuper
f2a7cae4d4 updated Russian translation 2008-05-03 12:36:08 +00:00
Nils Kneuper
c4e2a0f976 ran optipng
*** Total saved: 8 KB on 12 files
2008-05-03 12:33:55 +00:00
David Philippi
ca2e4b06ec spanish translation update 2008-05-03 11:16:14 +00:00
Nils Kneuper
c67cdae651 pot-update (just reference updates)
recreate documentation files (make update-po4a)

add all langs with manpages to the list of manpages to install
2008-05-03 11:10:06 +00:00
Nils Kneuper
935db4b6f4 fixed wrong tags 2008-05-03 11:01:33 +00:00
David Philippi
66e9d004bc spanish translation update 2008-05-02 22:37:19 +00:00
Nils Kneuper
13b0d627c7 updated German translation 2008-05-02 20:39:13 +00:00
Benoît Timbert
2efdc2e324 French translation update 2008-05-02 17:49:12 +00:00
David Philippi
fa89641aa3 hungarian translation update 2008-05-02 14:42:17 +00:00
Benoît Timbert
2ab74d8525 French translation update 2008-05-02 14:41:51 +00:00
Nils Kneuper
c7054115ab updated Finnish translation 2008-05-02 12:21:34 +00:00
Gunter Labes
a286ab14eb correct an attack image reference
remove the redundant hide_help keys
2008-05-02 09:17:41 +00:00
Ignacio R. Morelle
953a610a2e Backport 2008-05-02T01:16:17Z!shadowm@wesnoth.org (does not mess with translations, sirs) 2008-05-02 01:19:46 +00:00
David Philippi
1f610505a7 hungarian translation update 2008-05-01 23:07:56 +00:00
Nils Kneuper
3f6738a47a updated German, Polish and Russian translation 2008-05-01 22:24:09 +00:00
Benoît Timbert
094693e542 Move ranger-sword.png where it is supposed to be. 2008-05-01 20:54:07 +00:00
David Philippi
cdead0bd32 dutch translation update 2008-05-01 19:31:23 +00:00
David Philippi
d8e5e9e41e spanish translation update 2008-05-01 15:44:14 +00:00
David Philippi
6f5ac25dc9 japanese translation update 2008-05-01 12:33:00 +00:00
Ignacio R. Morelle
c37f67de1f New, less-confusing offmap tile icon for editor 2008-05-01 02:25:18 +00:00
David Philippi
72d955122e dutch translation update 2008-04-29 22:10:54 +00:00
Nils Kneuper
030fb98ab2 updated Turkish translation 2008-04-29 19:27:12 +00:00
Ignacio R. Morelle
aa73c6c97e Backport 2008-04-28T21:47:00Z!shadowm@wesnoth.org from trunk to 1.4 branch 2008-04-28 21:59:25 +00:00
Ignacio R. Morelle
114b28055d Backport 2008-04-28T20:22:56Z!shadowm@wesnoth.org from trunk to branches/1.4 2008-04-28 20:28:58 +00:00
Nils Kneuper
2d550a28e2 updated Chinese translation 2008-04-28 15:49:10 +00:00
Gunter Labes
d287c44598 revert the main menu map deletion since it breaks some UMC 2008-04-28 04:33:56 +00:00
Richard Kettering
6dd1213376 Replaced my old hack with kestenvarn's newest HttT map,
...faded slightly for readability on the main screen.
2008-04-28 03:40:34 +00:00
Benoît Timbert
18dae63294 Revert the deletion part of 2008-04-27T21:45:38Z!kettering.richard@gmail.com (breaks compatibilty) 2008-04-27 21:48:41 +00:00
Richard Kettering
a041589b24 New and improved melee animations for the banebow. 2008-04-27 21:45:38 +00:00
Richard Kettering
5aeab60048 New and improved melee animations for the banebow. 2008-04-27 21:42:26 +00:00
Benoît Timbert
66d2cef2fb Revert the compatibility breakage of 2008-04-27T20:54:00Z!kettering.richard@gmail.com 2008-04-27 21:12:54 +00:00
Richard Kettering
57966a69ce Slight tweak to ranger melee frames. 2008-04-27 21:00:42 +00:00
Richard Kettering
ee125f07c0 Slight tweak to ranger melee frames. 2008-04-27 20:54:00 +00:00
Nils Kneuper
e93abc8750 updated Russian translation 2008-04-27 19:19:39 +00:00
Benoît Timbert
374fb6d725 Revert the deletion part of 2008-04-27T02:31:12Z!kettering.richard@gmail.com...
(*Don't* remove any images in 1.4, because it breaks compatibility)
2008-04-27 09:45:26 +00:00
Gunter Labes
b6d132ac7c abort games with more than MAX_PLAYERS sides 2008-04-27 06:14:45 +00:00
Richard Kettering
c545f4df6a New images for the elven sorceress. 2008-04-27 02:41:31 +00:00
Richard Kettering
101d972638 New images for the elven sorceress. 2008-04-27 02:31:12 +00:00
Gunter Labes
7ce2521edc little tweak to the query commands 2008-04-27 00:38:45 +00:00
Nils Kneuper
afa0f8d90e updated Turkish translation 2008-04-26 22:39:09 +00:00
Benoît Timbert
e7504a677a French translation update 2008-04-26 14:23:19 +00:00
Gunter Labes
a595fd15a8 only notify an observer of his status if he wanted a slot 2008-04-26 12:42:09 +00:00
Gunter Labes
dbe75a13b9 s/id/description/ 2008-04-26 12:20:51 +00:00
David Philippi
b20e8de388 dutch translation update 2008-04-26 11:32:35 +00:00
Gunter Labes
de208c1a84 typo fix 2008-04-26 01:19:15 +00:00
Gunter Labes
90819a39e9 add a newline to log output 2008-04-26 01:09:47 +00:00
Gunter Labes
7f7f83fe83 only record server messages once the game has started
again use the [command][turn][speak]-format for server messages once
the game has started because clients can't easily handle a different
format in replays
2008-04-26 00:35:05 +00:00
Benoît Timbert
b9c75e3e36 French translation update 2008-04-25 20:47:04 +00:00
Ignacio R. Morelle
bdc16c67fa Make northern-facing animations functional 2008-04-24 19:55:03 +00:00
Ignacio R. Morelle
3ef12e6eb6 Revert 2008-04-24T18:23:39Z!shadowm@wesnoth.org as per Ivanovic's request 2008-04-24 19:40:31 +00:00
Nils Kneuper
6128cdfa06 updated Turkish translation 2008-04-24 18:59:46 +00:00
Ignacio R. Morelle
a03a50c0dd Add megane's new dreadbat graphics and set correct SVN properties for them 2008-04-24 18:42:28 +00:00
Ignacio R. Morelle
8d5f684eee Backport 2008-04-24T18:21:19Z!shadowm@wesnoth.org to 1.4 2008-04-24 18:23:39 +00:00
Gunter Labes
944fd72d3a add support for ban reasons
log output of /query commands whether issued from the fifo or not.
2008-04-24 15:11:39 +00:00
Jérémy Rosen
652a7439ae fix a crash on terror ability 2008-04-23 20:56:06 +00:00
Jérémy Rosen
1ad21a30ad fix special case where the defender had a leadership ability...
...that affected the attacker, animation glitch
2008-04-23 20:42:03 +00:00
Nils Kneuper
966ff218b9 updated traditional Chinese translation 2008-04-23 19:32:51 +00:00
Ignacio R. Morelle
42ddf49284 Use the new Dread Bat graphics (by megane) 2008-04-23 00:26:43 +00:00
Ignacio R. Morelle
e3cbfbd132 New dread bat images by megane 2008-04-22 22:08:20 +00:00
Benoît Timbert
4f86b223ee Fix leading spaces, add an extra name 2008-04-22 21:15:21 +00:00
Benoît Timbert
61f0976292 French translation update 2008-04-22 20:49:35 +00:00
Nils Kneuper
b7a256a325 updated Czech translation 2008-04-22 12:50:13 +00:00
Benoît Timbert
6789ab0145 French translation: Axe fuzzies 2008-04-21 20:43:44 +00:00
Nils Kneuper
7f2771fb5e updated Czech and Lithuanian translation 2008-04-21 20:28:09 +00:00
Benoît Timbert
a22261c679 French translation update 2008-04-21 19:05:32 +00:00
Nils Kneuper
4c94c1ec63 just another pot-update (one changed string...) 2008-04-21 16:40:30 +00:00
Lari Nieminen
8af88c5acd Applied patch #1060. 2008-04-21 16:09:25 +00:00
Ignacio R. Morelle
bb40e5bea8 Remove stray pixel 2008-04-21 14:54:41 +00:00
Ignacio R. Morelle
75a49f7f5a Update credits 2008-04-21 14:54:25 +00:00
Ignacio R. Morelle
af6c7e7622 Fix references to inexistent new images 2008-04-21 14:52:24 +00:00
Ignacio R. Morelle
8deaa0eaef Update fortunes 2008-04-21 14:51:51 +00:00
Nils Kneuper
1392302911 updated Turkish translation 2008-04-21 10:37:40 +00:00
Nils Kneuper
5b50c9ce26 do *not* use " inside strings, this is *bad*... 2008-04-21 10:31:55 +00:00
Gunter Labes
0fb8bf590b typo fix 2008-04-20 23:55:10 +00:00
Benoît Timbert
1a7851e7a4 French translation update 2008-04-20 20:25:32 +00:00
Benoît Timbert
f1c04516ca French translation update 2008-04-20 15:43:33 +00:00
Lari Nieminen
467c48ae10 Port 2008-04-20T11:14:54Z!lari.nieminen@iki.fi to 1.4. 2008-04-20 11:54:52 +00:00
Nils Kneuper
e9762e3f6a pot-update to start stringfreeze for 1.4.2 (yes, string changes in the files) 2008-04-20 11:42:02 +00:00
Benoît Timbert
6aec890353 French translation update 2008-04-19 17:28:50 +00:00
Benoît Timbert
5a7f1b9720 French translation update 2008-04-19 15:55:20 +00:00
Gunter Labes
b16b586883 disabled SDL_NODELAY (merged 2008-04-19T02:31:27Z!davewx7@gmail.com from trunk) 2008-04-19 05:47:54 +00:00
Gunter Labes
0cbc1dad2a use -l to link against libwesnoth.a rather than the exact name,
...fixes bug #11498: link failure: undefined reference to
`terrain_type::terrain_type()'
2008-04-18 21:43:28 +00:00
Gunter Labes
20ad977fd3 add missing campaign ids 2008-04-18 16:58:19 +00:00
Gunter Labes
1c53a6e391 add kickban as an alias to kban
some error message improvements
2008-04-18 00:56:24 +00:00
Nils Kneuper
9de208f405 updated Russian translation 2008-04-17 08:34:58 +00:00
Benoît Timbert
f86857d976 French translation update 2008-04-16 20:18:15 +00:00
Nils Kneuper
6c4aa646dc updated Slovak translation 2008-04-15 20:57:21 +00:00
Nils Kneuper
bfe91904b5 define encoding for Serbian (Latin version) manpages (patch #1053) 2008-04-15 20:29:16 +00:00
Benoît Timbert
efdac0fd74 Revert the deletion part of 2008-04-15T18:06:58Z!kettering.richard@gmail.com *breaks compatibility* 2008-04-15 19:57:17 +00:00
Richard Kettering
1e7ec8ac60 New melee frames for the bone shooter. 2008-04-15 18:06:58 +00:00
Richard Kettering
c7e9d4d5e1 New melee frames for the bone shooter. 2008-04-15 18:02:03 +00:00
Nils Kneuper
6790075b5a updated Croatian translation 2008-04-15 14:58:50 +00:00
Eric S. Raymond
6623c8b530 Backport fix for #11474. 2008-04-15 12:15:45 +00:00
Gunter Labes
c30d246eec replace == with = in test comparisons...
...(fixes bug #11496: Unportable test(1) construct)
2008-04-15 02:52:57 +00:00
Benoît Timbert
9d4ce13d1a French translation team 2008-04-14 19:03:50 +00:00
Benoît Timbert
aecbd7867e French translation update 2008-04-14 17:25:17 +00:00
Benoît Timbert
198615549e French translation update 2008-04-14 17:06:24 +00:00
Gunter Labes
506c99f657 add race=mechanical to the Caravan...
...(can't see any possible problem arising from this..)
2008-04-14 14:54:38 +00:00
Richard Kettering
7ac11353cf Several small tweaks to mage faces. 2008-04-14 00:50:39 +00:00
Gunter Labes
58fadc25f6 use fixed xanchor values instead of proportional 2008-04-13 23:19:44 +00:00
Benoît Timbert
c7c2644b7c French translation update 2008-04-13 22:28:54 +00:00
Benoît Timbert
fd350a3ef3 French translation update 2008-04-13 21:20:53 +00:00
Lari Nieminen
260606b682 Applied patch #1056. 2008-04-13 16:10:32 +00:00
Lari Nieminen
9a37a6e033 Ported 2008-04-13T15:59:08Z!lari.nieminen@iki.fi to 1.4. 2008-04-13 16:05:12 +00:00
Benoît Timbert
9782fc090a French translation update 2008-04-12 22:29:11 +00:00
Nils Kneuper
70b0cad7b7 updated Russian translation 2008-04-12 21:43:42 +00:00
Benoît Timbert
8e4c6ad88e Address #11473 : fix some semi-broken units 2008-04-12 14:34:22 +00:00
Nils Kneuper
9a93739673 updated Serbian translation 2008-04-12 10:34:38 +00:00
Benoît Timbert
c4c55b09e9 French translation update 2008-04-11 20:35:15 +00:00
Benoît Timbert
e5441f3b58 French translation update 2008-04-11 20:27:35 +00:00
Benoît Timbert
7b08b12f18 French translation update 2008-04-10 16:58:09 +00:00
Lari Nieminen
53de7ff3ee Rather end the scenario on attack_end than attack. 2008-04-10 09:24:15 +00:00
Lari Nieminen
38e3325e53 Allowed the lvl3 outlaws to be the outlaw advisors in Dwarven Doors. 2008-04-09 22:31:33 +00:00
Lari Nieminen
9bb10a0f42 Fixed a Li'sar duplication bug. 2008-04-09 22:28:44 +00:00
David Philippi
aa8874cf46 editing changelog is fine, adding it to the commit list is even better... 2008-04-09 21:00:14 +00:00
David Philippi
fe80b55ebe dutch translation update 2008-04-09 20:55:49 +00:00
Eric S. Raymond
99bc8807a5 Coincidence of troll leader names was suppressing an entire side (backport). 2008-04-09 15:35:20 +00:00
Lari Nieminen
d44d1d6f4f Fix a stupid WML bug. 2008-04-09 13:16:44 +00:00
Gunter Labes
5e8e814816 also mention losing not recalled units in the objectives of Evacuation 2008-04-09 11:00:57 +00:00
Gunter Labes
90bce95505 better handling of history in wesnothd (merged 2008-03-30T15:01:12Z!davewx7@gmail.com from trunk) 2008-04-08 22:49:53 +00:00
Benoît Timbert
c50a38c44f French translation update 2008-04-08 19:33:37 +00:00
Benoît Timbert
b1a3a66aae French translation update 2008-04-07 22:59:36 +00:00
Benoît Timbert
c42dfa40ea French translation update 2008-04-07 21:06:15 +00:00
Gunter Labes
29948a445e avoid now unnecessary t_string creation and remove some code duplication 2008-04-07 20:54:36 +00:00
Benoît Timbert
f2affe61fb French translation update 2008-04-07 19:12:17 +00:00
Lari Nieminen
04d29aea64 Ported 2008-04-07T15:03:22Z!lari.nieminen@iki.fi to 1.4. 2008-04-07 15:08:19 +00:00
Bruno Wolff III
43981c5b20 changelog update for 2008-04-07T14:54:07Z!bruno@wolff.to. 2008-04-07 14:56:32 +00:00
Bruno Wolff III
c1277c5543 Backport 2008-04-07T14:20:50Z!bruno@wolff.to, a fix for bug 11438. 2008-04-07 14:54:07 +00:00
Benoît Timbert
b71448f369 French translation update + report the russian translation update...
...in players_changelog
2008-04-06 17:13:07 +00:00
Nils Kneuper
e08678ad95 updated Russian translation 2008-04-06 12:47:25 +00:00
Martin Renold
7e7aa00e21 fixed bug #11440 (player availability status in the lobby not updated)
Userlist diffs were missing for players joining a game, and for the
last player leaving a game.
2008-04-06 11:39:26 +00:00
Nils Kneuper
9c849116e8 post release version bump 2008-04-06 09:22:11 +00:00
Martin Renold
5342fc0a67 this should fix bug #11281
If two players join at once the loser gets no longer kicked.

Also inform early observers via message.
2008-04-06 07:56:14 +00:00
Benoît Timbert
dc3ce43e06 Fix a typo in the changelog 2008-04-05 22:50:26 +00:00
Benoît Timbert
845026232d French translation update 2008-04-05 22:49:04 +00:00
Nils Kneuper
76e718564f add missing header file 2008-04-05 20:49:26 +00:00
Nils Kneuper
994255a796 version bump to 1.4.1 2008-04-05 20:04:28 +00:00
Nils Kneuper
3b16029736 running wesnoth-optipng (from trunk)
*** Total saved: 1 KB on 6 files
2008-04-05 20:00:15 +00:00
Lari Nieminen
ad1f0c1ee8 Fixed brokenness. 2008-04-05 19:42:44 +00:00
Nils Kneuper
3ea4e565e0 pot-update (just reference updates, no new/changed strings)
regenerate documentation files (fixed swedish and french manual files)

re-revert swedish translation update, only manual was broken and is
still at the old state
2008-04-05 19:30:14 +00:00
Nils Kneuper
3b39584dff revert 2008-04-05T19:06:36Z!david@torangan.de as requested by Tigge 2008-04-05 19:21:15 +00:00
David Philippi
f5b4100fcd swedish translation update 2008-04-05 19:06:36 +00:00
Lari Nieminen
18768ea640 Made the fireball miss animation prettier. 2008-04-05 19:03:23 +00:00
Benoît Timbert
13ca050b36 French translation update 2008-04-05 15:07:18 +00:00
David Philippi
05a98a8098 hungarian translation update 2008-04-05 14:21:19 +00:00
David Philippi
f74e49b4a6 added new swedish maintainer 2008-04-05 14:11:10 +00:00
David Philippi
993cea72ab swedish translation update 2008-04-05 14:02:58 +00:00
Gunter Labes
3b7fe8dfe3 "fix" bat corpse resistances to make 1.4+svn compatible again 2008-04-05 12:58:31 +00:00
Nils Kneuper
707ac8e70e updated Russian translation
create update doc files and add new ones
2008-04-05 11:46:12 +00:00
David Philippi
d63c5c5f11 hungarian translation update 2008-04-04 15:55:12 +00:00
David Philippi
00219d0d4c credit update 2008-04-04 13:48:11 +00:00
Nils Kneuper
9ccbbb4f87 updated Dutch translation 2008-04-04 10:38:07 +00:00
Benoît Timbert
38ed9f97aa French translation update 2008-04-03 20:11:32 +00:00
Martin Renold
4e6453a4bb let's mention wesnothd in the changelog 2008-04-03 18:44:25 +00:00
Nils Kneuper
5f7c78c1b2 updated Chinese translation 2008-04-03 17:56:07 +00:00
David Philippi
c9d35f3070 swedish translation update 2008-04-03 14:09:25 +00:00
David Philippi
f70bcb56fd valencian manpage update 2008-04-02 19:59:41 +00:00
Lari Nieminen
e382a835de Ported 2008-04-02T19:09:04Z!lari.nieminen@iki.fi to 1.4,
...and tweaked the resistances to match what the description claims
(should be changed back and the string fixed after the freeze).
2008-04-02 19:36:06 +00:00
Ignacio R. Morelle
bcaf410036 Wire WC bat graphics to Soulless and WC bat variations,
...including boucman's suggested workaround to bug #11416
2008-04-02 18:38:17 +00:00
Ignacio R. Morelle
076a2ed54b Adding megane's northern facing zombie bat graphics (reflect trunk) 2008-04-02 14:30:38 +00:00
Benoît Timbert
789a8dde4c French translation update 2008-04-01 21:56:03 +00:00
Nils Kneuper
38483e2138 added new Finnish translator 2008-04-01 21:27:15 +00:00
Nils Kneuper
5b116f5963 updated Czech and Finnish translation 2008-04-01 19:52:54 +00:00
Tommy
3b54187067 backport 2008-04-01T11:05:29Z!yobbobandana@yahoo.co.nz to 1.4 (fix for sample.py) 2008-04-01 12:06:25 +00:00
Ignacio R. Morelle
aac5fc5e74 Fix a possible NULL pointer dereference...
...when a saved game's campaign is not present (reported by UMC
Invasion from the Unknown)
2008-04-01 12:01:42 +00:00
Lari Nieminen
33bf3f6125 Ported 2008-04-01T09:43:48Z!lari.nieminen@iki.fi to 1.4. 2008-04-01 10:06:21 +00:00
Nils Kneuper
4a86412790 fix fatal error in french translation 2008-04-01 07:42:55 +00:00
Nils Kneuper
c6308406bf updated Russian translation 2008-04-01 07:35:28 +00:00
Nils Kneuper
9a3df41478 updated German translation (first translation at 100% in branches/1.4...) 2008-03-31 22:31:58 +00:00
Benoît Timbert
eb0dd90175 French translation update 2008-03-31 22:12:23 +00:00
David Philippi
245923d9ae hungarian translation update 2008-03-31 20:28:35 +00:00
Benoît Timbert
9c88ca3903 Revert the deletion part of 2008-03-31T00:12:40Z!kettering.richard@gmail.com (backwards compatibility breakage) 2008-03-31 19:44:34 +00:00
Nils Kneuper
d19e5dda80 updated Polish translation 2008-03-31 10:41:58 +00:00
Richard Kettering
08fc1c0eaa Major upgrade to the berzerker's animations. 2008-03-31 00:12:40 +00:00
Richard Kettering
d69df5d665 Major upgrade to the berzerker's animations. 2008-03-31 00:08:20 +00:00
Benoît Timbert
ae4d2a3df1 French translation update 2008-03-30 22:25:20 +00:00
Benoît Timbert
e9b547fed8 French translation update (fix bugs #11400 & #11401 (thanks dmg)) 2008-03-30 21:27:29 +00:00
Martin Renold
c3936dd8b0 backporting 2008-03-30T20:49:48Z!martinxyz@gmx.ch (do not send the full gamelist when not neccessary) 2008-03-30 21:03:54 +00:00
Martin Renold
5ce79fb85d backport 2008-03-30T19:43:02Z!martinxyz@gmx.ch (fix gamelist being sent to the kicked/banned player) 2008-03-30 19:43:33 +00:00
Martin Renold
d5adcbb738 merged 2008-03-30T18:02:36Z!davewx7@gmail.com from trunk...
...(added 'netstats' query command to wesnothd to query for current
network transfer info)
2008-03-30 18:36:18 +00:00
Nils Kneuper
edbd98f940 updated German translation 2008-03-30 13:26:12 +00:00
Martin Renold
4662ca591d changelog update & indent 2008-03-30 12:31:03 +00:00
Gunter Labes
6f99d061a7 don't do CPU time calculations on windows (merged 2008-03-20T14:08:16Z!davewx7@gmail.com from trunk) 2008-03-30 12:26:19 +00:00
Gunter Labes
9b0f29f8f4 handle non-player hosts better
consider [advance_unit] and [choose] for out-of-turn players legal
commands

send server messages always in the [message] form since the client can
handle that now

merged 2008-03-25T14:27:04Z!soliton@wesnoth.org plus some other minor tweaks from trunk
2008-03-30 12:17:59 +00:00
Nils Kneuper
3a0140536d updated German translation 2008-03-30 11:33:44 +00:00
Gunter Labes
c32e8a2505 actually remove banned players 2008-03-29 23:48:49 +00:00
Benoît Timbert
76e9a76d8b French translation update 2008-03-29 22:55:13 +00:00
Martin Renold
60c517a84a merged 2008-03-29T21:27:21Z!davewx7@gmail.com and 2008-03-29T21:54:22Z!davewx7@gmail.com from trunk...
...(made server sending diffs when a game exists more efficient)
2008-03-29 22:08:30 +00:00
Martin Renold
11732907dc die foul wesnothd bug die!!
merged from trunk:

2008-03-29T03:51:32Z!davewx7@gmail.com 
2008-03-29T07:06:33Z!davewx7@gmail.com 
2008-03-29T17:23:19Z!davewx7@gmail.com
2008-03-29 18:05:38 +00:00
David Philippi
a79b8422b6 danish translation update 2008-03-29 15:51:29 +00:00
Eric S. Raymond
bfc2369273 Revert previous fix, we're in string freeze. 2008-03-29 15:42:35 +00:00
Eric S. Raymond
d78317337d Backport a typo fix. 2008-03-29 12:06:39 +00:00
Lari Nieminen
a1c4a69d5b Ported 2008-03-24T12:43:59Z!lari.nieminen@iki.fi to 1.4. 2008-03-28 23:42:13 +00:00
Nils Kneuper
9b30c0dca2 updated German translation 2008-03-28 11:28:08 +00:00
Nils Kneuper
996a0ee3c7 updated Italian translation 2008-03-28 09:53:15 +00:00
Nils Kneuper
b3ca173596 updated German and Turkish translation
regenerate documenation via make update-po4a
2008-03-27 21:27:52 +00:00
Jan Rietema
c7e6ba4d63 Port of 2008-03-27T17:42:12Z!jan.rietema@web.de. 2008-03-27 17:43:38 +00:00
Benoît Timbert
11db06c5fd French translation update 2008-03-27 17:23:02 +00:00
Jan Rietema
fa78727b6c Long March rebalancing: port of 2008-03-27T17:07:40Z!jan.rietema@web.de. 2008-03-27 17:08:45 +00:00
Lari Nieminen
15d64a824a Ported 2008-03-09T20:08:50Z!lari.nieminen@iki.fi to 1.4. 2008-03-27 15:07:12 +00:00
Lari Nieminen
d60d810baa Ported 2008-03-26T18:38:04Z!jeremy.rosen@enst-bretagne.fr to 1.4. 2008-03-26 21:21:20 +00:00
Benoît Timbert
f343813000 French translation update 2008-03-26 19:15:13 +00:00
Gunter Labes
b78dffa4c0 fix to simple_wml on 64 bit machines (merged 2008-03-26T17:33:07Z!b.waresiak@gmail.com from trunk) 2008-03-26 17:43:35 +00:00
Ignacio R. Morelle
e4db5758a7 Fix two portraits, one 204x205 and other 206x206 pixels...
...to use the canonical portrait size
2008-03-26 16:24:15 +00:00
Ignacio R. Morelle
7241c85453 Add TC to WML so that images don't look pinky 2008-03-26 12:12:00 +00:00
Gunter Labes
28ffba52ee fix memory leak in server (merged 2008-03-26T06:37:18Z!davewx7@gmail.com from trunk) 2008-03-26 11:01:36 +00:00
Nils Kneuper
4300added6 updated Russian translation 2008-03-25 20:54:19 +00:00
Benoît Timbert
e02392d053 French translation update 2008-03-25 20:52:22 +00:00
Gunter Labes
f396416485 change the colour of side 8 from white to brown so it's easier to see on snow 2008-03-25 20:07:28 +00:00
Nils Kneuper
b01b846ebc updated Italian translation 2008-03-25 16:27:57 +00:00
Nils Kneuper
bec12e95e7 just another pot-update...
...(fixing problems listed at the respective wiki page for typos)
2008-03-25 15:33:28 +00:00
Eric S. Raymond
6c7e2133fe SpellingMistakes fixes (stable branch). 2008-03-25 14:29:41 +00:00
Ignacio R. Morelle
beaf108528 Mention the -R linker parameter removal 2008-03-25 13:56:22 +00:00
Nils Kneuper
1bb1ec6aa8 pot-update (including string changes (charge and backstab clarification)) 2008-03-25 13:38:49 +00:00
Nils Kneuper
a6935061f6 add "while attacking it" to the backstab description in the special notes 2008-03-25 13:25:10 +00:00
Nils Kneuper
223aaa1c36 updated Turkish translation 2008-03-25 10:12:55 +00:00
Ali El Gariani
f8f8405788 Fix a missing brace blocking the game start 2008-03-25 09:21:56 +00:00
Richard Kettering
13fc581e78 Added images for zombie bat. 2008-03-25 05:17:08 +00:00
Richard Kettering
9b81b174b1 New icon for music, minor tweaks to general icon. 2008-03-25 03:30:20 +00:00
Ali El Gariani
aeac0c5db5 fix a typo spotted by Sapient 2008-03-25 02:22:04 +00:00
Eric S. Raymond
fce001d991 Backport zookeeper's recent revisions from the development branch:
2008-03-15T12:31:06Z!lari.nieminen@iki.fi
2008-03-16T14:17:12Z!lari.nieminen@iki.fi
2008-03-22T11:12:10Z!lari.nieminen@iki.fi
2008-03-22T22:59:32Z!lari.nieminen@iki.fi
2008-03-23T18:03:37Z!lari.nieminen@iki.fi
2008-03-24T12:36:37Z!lari.nieminen@iki.fi
2008-03-24T12:43:59Z!lari.nieminen@iki.fi
2008-03-24T15:45:35Z!lari.nieminen@iki.fi
2008-03-24T16:21:33Z!lari.nieminen@iki.fi
2008-03-25 02:00:09 +00:00
Ali El Gariani
db9ff793fb remove a redundant and strangely placed "About the game" from the help
(it's already in the introduction section)
2008-03-25 00:06:28 +00:00
Nils Kneuper
9d3c91f493 fix bug #11279 for 1.4, *really* minor... 2008-03-24 19:34:57 +00:00
Ignacio R. Morelle
153c37002d Noone seems to need the invalid -R switch, huh 2008-03-24 17:43:24 +00:00
Benoît Timbert
4ce043a7aa French translation update 2008-03-24 14:32:48 +00:00
Ignacio R. Morelle
ec8963ef9a Added missing deathblade animation frames that were referenced by WML;...
...they were somehow skipped when svn add-ing the rest
2008-03-24 11:25:54 +00:00
Gunter Labes
8c28fa66b8 attempt to fix problem with WML ordering (merged 2008-03-23T05:33:27Z!davewx7@gmail.com from trunk) 2008-03-23 22:22:22 +00:00
Nils Kneuper
7dc1eeffe1 updated Polish translation 2008-03-23 20:50:15 +00:00
David Philippi
2b2dc7175b hungarian translation update 2008-03-23 15:22:48 +00:00
Nils Kneuper
fa40171586 updated Italian translation 2008-03-23 13:42:42 +00:00
Gunter Labes
dea04a45ba make joining players play a sound again 2008-03-23 09:58:19 +00:00
Martin Renold
052036e3b3 fixed the minimap cache...
...(it was recalculating all minimaps in the lobby every time)
2008-03-23 09:21:06 +00:00
David Philippi
2ca04119c8 danish translation update 2008-03-23 01:50:24 +00:00
Benoît Timbert
57e35453df Apply a patch from caslav.ilic: Fix the extraction of info variables...
...when the value is quoted.
2008-03-22 17:08:17 +00:00
Nils Kneuper
28be7a684d updated Chinese translation 2008-03-22 13:10:09 +00:00
Gunter Labes
56e0885562 * separate out of sync termination reasons by the era used 2008-03-22 12:12:36 +00:00
Benoît Timbert
0b7edc8e8e Revert the deletion part from 2008-03-20T06:29:33Z!kettering.richard@gmail.com since it likely break some UMC 2008-03-22 10:55:19 +00:00
Benoît Timbert
1eb3c6402b French translation update 2008-03-22 10:09:56 +00:00
Gunter Labes
6032f5ac94 added extra assertions to track causes of crash
also exit explicitely on SIGTERM

correct some server messages

(merged 2008-03-22T02:13:51Z!davewx7@gmail.com-2008-03-22T04:55:46Z!soliton@wesnoth.org from trunk)
2008-03-22 05:01:40 +00:00
Bruno Wolff III
a09236ea33 Backport 2008-03-19T16:45:50Z!bruno@wolff.to 2008-03-21 19:36:43 +00:00
Bruno Wolff III
3aabdc3420 Backport 2008-03-19T18:17:17Z!bruno@wolff.to 2008-03-21 19:30:14 +00:00
Bruno Wolff III
517d75ce1a Backport 2008-03-19T17:13:25Z!bruno@wolff.to 2008-03-21 19:28:14 +00:00
Bruno Wolff III
2da7fe853b Backport 2008-03-19T15:47:32Z!bruno@wolff.to 2008-03-21 19:23:00 +00:00
Nils Kneuper
f0906573ae updated German translation (incl. patch #1015) 2008-03-21 17:25:16 +00:00
Gunter Labes
eca16a7c3b remove {VICTORY_AND_DEFEAT_MUSIC} from non-random multiplayer maps...
...to keep the 'remote scenario' feature meaningful
2008-03-21 16:25:51 +00:00
Nils Kneuper
6e32bbbd39 pot-update (stringchanges at least in SotBE and THoT) 2008-03-21 10:39:35 +00:00
Nils Kneuper
2cf7b4e8f9 another wrong set textdomain,
...no harm since no translatable strings in the file.
2008-03-21 10:36:50 +00:00
Nils Kneuper
2be536dc15 fixed textdomain declarations for tHoT untis, reported in bug #11279 2008-03-21 10:29:04 +00:00
Gunter Labes
7c0a236bde fixed server messaging (merged 2008-03-21T05:38:26Z!davewx7@gmail.com from trunk) 2008-03-21 05:49:49 +00:00
Eric S. Raymond
a4adfa5f37 Address bug #11318. Continuity fixes for story setup. (Backport to 1.4) 2008-03-20 23:24:20 +00:00
Eric S. Raymond
426c6652d1 Name changes preparatory to adressing bug #11318. 2008-03-20 22:44:58 +00:00
Eric S. Raymond
c07aac61c2 Backport prevuis fix to 1.4. 2008-03-20 21:07:22 +00:00
Nils Kneuper
2cdffc383a updated Czech translation 2008-03-20 16:02:37 +00:00
Nils Kneuper
226e18e878 updated Turkish translation 2008-03-20 12:42:43 +00:00
David Philippi
4a12452bae lithuanian translation update 2008-03-20 10:50:53 +00:00
Richard Kettering
adc6c74a05 New attack animation for ulfzerker. 2008-03-20 06:29:33 +00:00
Richard Kettering
84e9bcbcc5 New attack animation for ulfzerker. 2008-03-20 05:56:27 +00:00
Benoît Timbert
16d9dbce0b French translation update 2008-03-19 20:19:11 +00:00
Benoît Timbert
5264f04a1f Fix a few SVN properties 2008-03-19 20:07:51 +00:00
Nils Kneuper
a938392943 running utils/wesnoth-optipng from trunk on branches/1.4
*** Total saved: 31 KB on 31 files
2008-03-19 18:37:41 +00:00
Nils Kneuper
1894d9d83e updated (simplified) Chinese translation 2008-03-19 13:00:49 +00:00
Gunter Labes
9701e777c3 catch SIGINT in order to get more gmon.out profiles (merged r 24790) 2008-03-19 07:41:20 +00:00
Gunter Labes
913d7c90ee added server profiling information for requests...
...(merged 2008-03-19T04:40:11Z!davewx7@gmail.com and 2008-03-19T05:22:54Z!davewx7@gmail.com)
2008-03-19 07:34:50 +00:00
Gunter Labes
afbb4bcebb new wesnothd implementation using simple_wml...
...(plus subsequent fixes/tweaks; merge of 2008-03-17T05:11:14Z!davewx7@gmail.com,
2008-03-17T16:31:32Z!davewx7@gmail.com, part of 2008-03-17T22:14:49Z!davewx7@gmail.com, 2008-03-17T22:33:36Z!soliton@wesnoth.org, 2008-03-18T00:40:44Z!soliton@wesnoth.org,
2008-03-18T03:07:45Z!davewx7@gmail.com, 2008-03-18T03:57:31Z!soliton@wesnoth.org, 2008-03-19T02:03:34Z!davewx7@gmail.com from trunk)
2008-03-19 04:11:40 +00:00
Nils Kneuper
84f575bd88 updated Turkish translation 2008-03-18 20:48:35 +00:00
Nils Kneuper
214732cb0e updated Russian and Chinese (Simplified) translation 2008-03-18 15:08:41 +00:00
Benoît Timbert
c443450a22 French translation update 2008-03-17 20:03:09 +00:00
Nils Kneuper
0a44af25df updated Italian and German translation 2008-03-17 19:41:40 +00:00
Ignacio R. Morelle
b1c0fa7290 Credits moved to [campaign] tag level...
...(otherwise they are just appended at the end of game credits)
2008-03-17 17:35:58 +00:00
Ignacio R. Morelle
710605a4c8 Backport from trunk 2008-03-17T17:32:26Z!shadowm@wesnoth.org 2008-03-17 17:32:53 +00:00
Ignacio R. Morelle
b6652bdda3 * New signpost item from RusHHouR (Aug. 2007) 2008-03-17 17:28:01 +00:00
Eric S. Raymond
7f0841bbed Beckport fixes notes in bug #11295. 2008-03-17 17:14:27 +00:00
Ignacio R. Morelle
0a8c9e6f73 Update 2008-03-17 16:41:41 +00:00
Nils Kneuper
e642682033 updated German translation 2008-03-17 13:06:28 +00:00
Ignacio R. Morelle
7714d0c1fa Enforce gender=female on Bona-Melodia (workarounds bug #11197) 2008-03-17 11:17:08 +00:00
Ignacio R. Morelle
4057412b53 Enforce gender=female on Eloh (workarounds bug #11197) 2008-03-17 11:15:36 +00:00
Ignacio R. Morelle
74edd48d0a Load-game dialog now displays the Campaign's name instead of its internal id;...
...also, translated

(This does not break existing translations, rather improves their
effectivity)
2008-03-17 11:09:23 +00:00
Ignacio R. Morelle
54ae7592a4 [[UtBS fixes]]
* Enforce female gender on female-only units across campaigns
(workarounds bug #11197); Note that this is intended mostly for
heroes; very little, if any, attention has been given to non-hero
units.

* Fix redundant/superfluous preprocessor directives on scenario 3, TSG

* Melusand is respawned with persistent canrecruit=yes on scenario 9, UtBS

* Fixed invalid "Mermaid Entangler" move-unit-fake on scenario 9, UtBS
2008-03-17 11:08:24 +00:00
Nils Kneuper
c3ba008154 pot-update, new/changed strings 2008-03-17 09:34:01 +00:00
Eric S. Raymond
e8958536f7 Fix bugs #11263 and #11268 (1.4 backport). 2008-03-17 05:08:46 +00:00
Eric S. Raymond
5cd572b16a Address bug #11287 (1.4 backport). 2008-03-17 05:00:53 +00:00
Nils Kneuper
a7432b5df1 patch by Andrius Štikonas to add plural support for a string 2008-03-16 18:43:57 +00:00
Nils Kneuper
e60c7368ba updated German translation 2008-03-16 15:27:52 +00:00
David Philippi
174ee43fb7 hungarian translation update 2008-03-16 13:17:20 +00:00
Nils Kneuper
566834ea1f pot-update
stringchanges at least in thot (one new string)
reference/comment update, latest version of wmlxgettext used
2008-03-16 11:14:31 +00:00
Benoît Timbert
81fb2a3a3d Merge 2008-03-16T10:44:50Z!benoit.timbert@free.fr: XP wasn't defined 2008-03-16 10:45:51 +00:00
Nils Kneuper
cac85fc9f4 updated Italian translation 2008-03-16 09:17:55 +00:00
Eric S. Raymond
5f0edccf1a Address bug #11267 (1.4 backport). 2008-03-16 03:47:21 +00:00
Benoît Timbert
b6a7604f17 Even more robust version...
...(see http://www.wesnoth.org/forum/viewtopic.php?f=7&t=20198)
2008-03-16 00:48:41 +00:00
Benoît Timbert
6b9fa3b1bb French translation update 2008-03-16 00:25:07 +00:00
Nils Kneuper
cd80a3323b updated Italian translation 2008-03-15 23:16:39 +00:00
Nils Kneuper
ab318d8378 updated Greek translation 2008-03-15 22:42:55 +00:00
Benoît Timbert
4e1c420b2a Merge 2008-03-15T18:06:34Z!benoit.timbert@free.fr:
Apply a fix from caslav.ilic: now the context analyser parse the
entire file and no longer crash if #textdomain is not used at the top
level (see http://forum.wesnoth.org/viewtopic.php?f=7&t=20198 for full
details)
2008-03-15 18:08:12 +00:00
Benoît Timbert
d52c338cef Also learn the underlaying terrain...
...so it will add a line in the help for an encountered terrain type
but not the main terrain of this type.

This is a rather improbable bug 1.4, but it can happen if you start to
play UtBS as your very first campaign (for roads with the "grassland"
terrain type).
2008-03-14 22:26:46 +00:00
Nils Kneuper
01506a8873 updated Russian translation 2008-03-14 19:26:40 +00:00
David Philippi
0192d84a24 swedish translation update 2008-03-14 13:23:43 +00:00
Ignacio R. Morelle
f39c086d40 Backport of trunk; 2008-03-14T11:06:35Z!shadowm@wesnoth.org (I'm 100% sure it doesn't harm) 2008-03-14 11:13:37 +00:00
Nils Kneuper
2ace5a29cb updated Italian translation 2008-03-14 08:07:05 +00:00
Benoît Timbert
65e5df2c31 French translation update 2008-03-13 19:55:39 +00:00
Gunter Labes
2d1de6ce2e fixed a logic error 2008-03-13 18:57:00 +00:00
Ignacio R. Morelle
fba3dd795c New fortune 2008-03-13 18:47:42 +00:00
Ignacio R. Morelle
aa856ce8ef Fixed transport-galleon's TC 2008-03-13 13:43:39 +00:00
David Philippi
e6aa904de3 swedish translation update 2008-03-13 12:00:48 +00:00
Ignacio R. Morelle
0792d109ca Fixed TC of Walking Corpse - drake variation 2008-03-13 10:22:11 +00:00
Nils Kneuper
ea63abd5af updated Czech translation 2008-03-12 22:40:06 +00:00
Nils Kneuper
05a91b1dc4 added Croatian translation 2008-03-12 22:25:49 +00:00
Nils Kneuper
5037b65ca0 add missing translation marker in THoT,
already included in trunkt due to 2008-03-09T18:05:18Z!esr@thyrsus.com, forgotten to backport
to 1.4
2008-03-12 21:27:33 +00:00
Nils Kneuper
227f75a92e updated Italian translation, regenerate doc files 2008-03-12 21:24:16 +00:00
Ignacio R. Morelle
d4050055d9 Destroy entry which referred to bugfix...
...that was reverted to avoid MP OOS in 1.4 (deja vu; hadn't I already
done it?)
2008-03-12 16:09:55 +00:00
Gunter Labes
4c1ef50b4b fixed gamelist diff calculations to be O(1) instead of O(n)...
...(merged 2008-03-12T04:59:47Z!davewx7@gmail.com)

optimized networking code to elide unnecessary copy of outgoing config
objects (merged 2008-03-12T06:21:57Z!davewx7@gmail.com)
2008-03-12 15:14:54 +00:00
David Philippi
ba65d275d2 swedish translation update 2008-03-11 18:02:46 +00:00
Mark de Wever
5b464ef2b6 Remove some debug output, since the called funtion is no longer available...
...and the output isn't that important. (Ported from trunk 2008-03-11T17:54:03Z!koraq@xs4all.nl.)
2008-03-11 17:54:43 +00:00
Gunter Labes
63eb8eebca use 4 threads now because of the sharded network worker threads...
...but keep 30 for 1.2
2008-03-11 16:58:41 +00:00
Nils Kneuper
ca033029e9 updated Polish translation
ran make update-po4a to regenerate doc files
2008-03-11 16:54:11 +00:00
Gunter Labes
f63be8d61f attempt to improve efficiency of server...
...by not waking worker threads unless a socket is actually ready to
process data (merged 2008-03-11T01:34:01Z!davewx7@gmail.com) further improvements to decrease
contention on the server (merged 2008-03-11T02:54:38Z!davewx7@gmail.com) sharded network worker
threads to reduce contention (merged 2008-03-11T04:40:20Z!davewx7@gmail.com)
2008-03-11 16:52:25 +00:00
Ignacio R. Morelle
704a1922d2 * Update (megane) 2008-03-11 14:43:29 +00:00
David Philippi
4cd3966023 hungarian translation update 2008-03-11 13:26:46 +00:00
Ignacio R. Morelle
bf1a931b30 Megane's corrected dice icon. (Reflected trunk) 2008-03-11 13:07:19 +00:00
David Philippi
582f3d0267 swedish translation update 2008-03-11 13:00:41 +00:00
Richard Kettering
14626e7976 New, TC images for the Shadow. 2008-03-11 08:45:02 +00:00
Richard Kettering
b4275fd22e New, TC images for the Shadow. 2008-03-11 08:34:00 +00:00
David Philippi
ca09db3de9 spanish translation update 2008-03-10 23:13:30 +00:00
Benoît Timbert
0e23249c85 Address bug #11237 2008-03-10 19:38:48 +00:00
Nils Kneuper
f411cc7dcd credtis update as requested by Noy 2008-03-10 19:13:06 +00:00
Nils Kneuper
04bde2e73f updated Russian translation 2008-03-10 17:29:39 +00:00
Nils Kneuper
c5c641a563 updated German translation 2008-03-10 17:24:14 +00:00
Mark de Wever
9ce03680a4 Allow configure to be started from directories other as the top dir
(patch #1002). (Ported 2008-03-10T17:04:26Z!koraq@xs4all.nl from trunk).
2008-03-10 17:10:19 +00:00
Nils Kneuper
38957fcadc now fix the problem with the hero marker for real...
recreated manual files
2008-03-10 17:05:29 +00:00
Nils Kneuper
27948e5096 pot-update, fixing one more location problem (east/west) 2008-03-10 15:38:53 +00:00
Nils Kneuper
e0261ac156 fix another location problem in the tutorial 2008-03-10 15:22:15 +00:00
Nils Kneuper
861eea521d fix mistake in description of manual, regenerate po and html files 2008-03-10 13:15:13 +00:00
Ignacio R. Morelle
009c64d55b Shadow updates for various units:
Skeleton, Dwarvish Steelclad, Dwarvish Thunderer animation frames.
2008-03-10 11:24:36 +00:00
Nils Kneuper
15154be635 pot-update for 1.4, stringchanges in the tutorial
adding context information to strings, thanks to Chusslove Illich for
this addition
2008-03-10 10:48:12 +00:00
Eric S. Raymond
fcd447fa5c Backport previous fix. 2008-03-10 08:51:40 +00:00
Benoît Timbert
9bb72bc9cd merge 2008-03-10T00:23:03Z!benoit.timbert@free.fr: Fix #11230: Incorrect instructions in Tutorial Part II 2008-03-10 00:24:36 +00:00
Benoît Timbert
0fd5151050 Merge 2008-03-09T23:26:32Z!benoit.timbert@free.fr: Apply patch #993 by caslav.ilic : wmlxgettext improvements 2008-03-09 23:36:39 +00:00
Nils Kneuper
40b5166e23 updated german translation, apply patch #999
thanks to Ronny Standtke
2008-03-09 23:17:05 +00:00
Gunter Labes
92b4a20cf9 improved efficiency of network code...
...by avoiding deep copy of every incoming config object (merge of
2008-03-09T20:43:37Z!davewx7@gmail.com from Dave)
2008-03-09 22:08:50 +00:00
David Philippi
82cc16857f spanish translation update 2008-03-09 20:22:30 +00:00
Nils Kneuper
1c349b7948 fxied really stupid mistake in the german translation 2008-03-09 19:51:20 +00:00
Nils Kneuper
14eb48d7be updated German translation 2008-03-09 16:37:23 +00:00
David Philippi
75076d9579 danish translation update 2008-03-09 14:38:26 +00:00
Nils Kneuper
5028630659 ignore doc/doxygen/html in 1.4, too 2008-03-09 12:49:08 +00:00
Benoît Timbert
37a4ed6ae3 Merge 2008-03-08T22:32:31Z!benoit.timbert@free.fr: Add and wire the Elvish sorceress portrait 2008-03-08 22:35:47 +00:00
Benoît Timbert
4f9b606e91 French translation update 2008-03-08 21:10:13 +00:00
Lari Nieminen
cdedcada95 Ported 2008-03-08T08:27:21Z!lari.nieminen@iki.fi to 1.4. 2008-03-08 19:30:32 +00:00
Mark de Wever
d53f808979 After discussing with esr we decided to revert 2008-03-06T10:50:06Z!esr@thyrsus.com
since it might cause incompatibilities between 1.4 version.
2008-03-08 17:56:16 +00:00
Gunter Labes
9775869479 merge 2008-03-06T16:21:48Z!lari.nieminen@iki.fi, 2008-03-07T11:52:23Z!lari.nieminen@iki.fi and 2008-03-08T11:23:45Z!lari.nieminen@iki.fi from trunk 2008-03-08 15:35:45 +00:00
Ignacio R. Morelle
a76d4f2e3e Revert backport fix for bug #11197 (2008-03-06T11:17:05Z!esr@thyrsus.com) 2008-03-07 18:06:00 +00:00
Ignacio R. Morelle
946e4e27ab Update with bugfixes 2008-03-07 14:32:49 +00:00
Ignacio R. Morelle
42438d06e5 Reflect changes in trunk due to new Deathblade graphics 2008-03-07 14:30:59 +00:00
Nils Kneuper
5bec40f9c2 updated Turkish translation 2008-03-07 09:06:03 +00:00
Nils Kneuper
4fd3215134 updated Chinese (simplified) translation 2008-03-06 13:49:37 +00:00
Nils Kneuper
9384bf35cd updated Czech translation 2008-03-06 13:33:11 +00:00
Nils Kneuper
0021fb6918 pot-update for 1.4, getting in changed strings
fixing bug #11208 for 1.4, please check if your translations of sotbe
are at least as complete as they were before the 1.4
2008-03-06 11:56:33 +00:00
Eric S. Raymond
0b2dd31a22 Backport fix for bug #11197. 2008-03-06 11:17:05 +00:00
Eric S. Raymond
419e554e98 Backport fixes for bugs #11202, #11208. 2008-03-06 11:03:04 +00:00
Eric S. Raymond
9effd2768b Backport fix for bug #11034. 2008-03-06 10:50:06 +00:00
Nils Kneuper
5124cb3145 updated Russian translation 2008-03-06 10:05:23 +00:00
David Philippi
8fbe2a37d2 spanish translation update 2008-03-05 19:06:50 +00:00
David Philippi
e30deb94c5 hungarian translation update 2008-03-05 19:01:16 +00:00
Ignacio R. Morelle
6b13a2751a Update to reflect trunk 2008-03-05 18:01:56 +00:00
Gunter Labes
cfa96aaead hardcode check for 1.4* when loading savegames...
...since those should all be compatible
2008-03-05 17:42:18 +00:00
Ignacio R. Morelle
eed4c46003 Reflects changes of 2008-03-05T11:42:06Z!shadowm@wesnoth.org (backport to 1.4).
This is supposed to fix issues with canrecruit="yes". Currently the
engine checked in most locations only for canrecruit == "0" or "1",
and skipped the standard WML boolean syntax (which is achieved with
utils::string_bool()).

Code which already did assignments of the canrecruit attribute to 0 or
1 have been left untouched; they should still work
2008-03-05 17:22:35 +00:00
Ali El Gariani
8d5043491a map editor:
* Fixed not working "Update transition" and make "Delay transition update"
  directly trigger an update when toggled off.
2008-03-05 03:20:26 +00:00
Ali El Gariani
58c9472193 Fix the "Delay transition update" option of the editor
(directly update the map when setting it off, don't wait a draw operation)
Also fix the "Update transition" (was not working, which is more annoying).
It was still usable but less handy to switch between 2 modes (builded or not)
2008-03-05 02:37:45 +00:00
Gunter Labes
cf72d395ae refactor filter_commands() and process_commands() into process_turn();...
...makes it a bit more efficient and also detects illegal commands better
2008-03-04 23:06:52 +00:00
Richard Kettering
a42c1c7e78 Added an entry. 2008-03-04 22:44:48 +00:00
David Philippi
5cbf86d193 spanish translation update 2008-03-04 17:38:22 +00:00
Nils Kneuper
cfdbd73a9b updated Credits for Chinese (Taiwan) translation 2008-03-04 16:11:24 +00:00
Gunter Labes
613985026b add some missing includes to allow compiling with gcc 4.3 (patch by Bircoph) 2008-03-04 00:03:37 +00:00
Benoît Timbert
3f787327ae French translation update 2008-03-03 19:02:38 +00:00
Jan Rietema
7fd8f9001c Adding victory/defeat music to changelog (don't forget the changelog!). 2008-03-03 18:53:12 +00:00
Jan Rietema
9ed8827ff6 Added VICTORY_AND_DEFEAT_MUSIC macro...
...and wired it in all mainline scenarios except epilogues/pure
dialogue scenarios, DiD's last scenario, and benchmarks.
2008-03-03 18:32:50 +00:00
Nils Kneuper
c7ed22e5c5 updated Galician translation 2008-03-03 17:52:05 +00:00
Ignacio R. Morelle
ef8faeacf4 Fix probably the oldest bug ever;...
...unit advancement may consider female units' generic profile a
custom one due to a flaw (i.e. happens currently with female Elvish
Archer portraits; they are conserved along the entire unit tree)
2008-03-03 14:53:54 +00:00
Nils Kneuper
f346d61cd4 updated Dutch translation 2008-03-03 12:08:11 +00:00
Nils Kneuper
fb484d95ff post release version bump to 1.4,
...should not really be needed for branches/1.4, but at least for the
first version it makes a little sense...
2008-03-02 22:51:03 +00:00
2112 changed files with 1455078 additions and 497482 deletions

View file

@ -14,12 +14,20 @@ if LITE
exclude=| egrep -v '(/sounds|/music)'
endif
# List all datafiles, ignoring junk
finddata=(cd $(top_srcdir) && find data fonts icons images sounds $(findfilterflags) -print ) $(exclude)
# List all data subdirectories
finddatadirs=(cd $(top_srcdir) && find data fonts icons images sounds -type d \! \( -name .svn -prune \) -print ) $(exclude)
# List non-installable utility files
findnoinst=(cd $(top_srcdir) && find utils $(findfilterflags) -print )
# List all Header files
findnoinst_headers=(cd $(top_srcdir) && find src -name "*.hpp" -print && find src -name "*.h" -print && find src -name "*.ii" -print && find src -name "*.i" -print )
# Find files derived from the manual that should go in a distribution
finddocdist=(cd $(top_srcdir) && find doc/manual -name "*.html" -o -name "*.css" -o -name "*.jpg" -o -name "*.txt")
# Same list as previous, but with doc/ stripped off the front
finddoc=($(finddocdist) | sed -e 's:doc/manual:manual:g' )
# List all document directories
finddocdirs=(cd $(top_srcdir)/doc && find manual -type d \! \( -name .svn -prune \) -print; )
# This is a workaround to include manpage and manual translation files in the
@ -145,7 +153,7 @@ endif
dist-hook:
srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
( $(finddata); $(finddocdist); $(findnoinst); $(findextrapo) ) | (cd $(top_srcdir) && tar cf - -T -) | (cd $(distdir) && tar xf -)
( $(finddata); $(finddocdist); $(findnoinst); $(findnoinst_headers); $(findextrapo) ) | (cd $(top_srcdir) && tar cf - -T -) | (cd $(distdir) && tar xf -)
dist_noinst_DATA = copyright changelog players_changelog wesnoth.dev editor.dev server.dev wesnoth.kdevelop campaign_server.dsp map_editor.dsp server.dsp wesnoth.dsp wesnoth.dsw

View file

@ -11,3 +11,23 @@ is making sure that spelling/grammer/whatever is usable and that you are using
The release team should empty this file after each release.
***
Replays work again for single-player campaign scenarios.
***
This release contains an important security update, fixing a
vulnerability that could allow third-party content (such as campaigns
downloaded from the add-on server) to execute arbitrary code with user
account privileges. See bug #31048 for details. All content
currently on the official add-on server has been inspected to confirm
that none of it exploits this vulnerability, and the add-on server
itself has been patched to ensure that exploits can no longer be
uploaded. Therefore, users of previous versions of Battle for Wesnoth
who have received user-made content through the official add-on server
and no other distribution channel need not fear that their system has
been compromised.
CVE-2009-0367 has been assigned to this vulnerability and may provide
further information.

179
changelog
View file

@ -1,6 +1,175 @@
Post 1.4:
* language and i18n:
* updated translations: Japanese
Version 1.4.7+dev:
* campaigns:
* Descent into Darkness:
* Removed the custom python AI used in 'A Haunting in Winter'
* The Hammer of Thursagan:
* fixed "time over" event so dialog displays in 'High Pass'
* language and i18n:
* updated translations: French, Italian, Japanese
* multiplayer:
* server:
* create the fifo group accessible (instead of only user accessible)
* fixed bug #13099: MP lobby player list becomes inaccurate over time
* miscellaneous and bug fixes:
* AmigaOS4: Minimum stack cookie to prevent stack overflow (patch #1107)
* Additional screenmodes for when SDL can't guess them (patch #1108)
* Fixed bug #12896: Map generator does not sync between clients when
advancing in MP campaigns
* Removed support for PythonAI to handle CVE-2009-0367
* Backported fix for wmllint, wmlscope and wmlindent not working correctly
on Windows if a command line argument ends with a backslash
* wmllint: update paths from "portraits/core/" to "portraits/", clean up
get_hit_sound messages, fix endswith()s that presumed unit files use UNIX
newlines, backport fix for Windows files refusing to be overwritten by
a rename, fix second half of "duplicated attack" warning printing to
stdout, enable more abilities and weapon specials to be updated, fix
creation of unit description= and DEFENSE_ANIM lines, fix lifing of frames
to [attack_anim]
Version 1.4.7:
* campaigns:
* Descent into Darkness
* fixed bats crashing through the ice in 'Beginning of Revenge' (bug
#12685)
* Heir to the Throne:
* Added an idle animation for L2 Princess.
* graphics:
* new or updated unit frames: Gryphon Rider, Gryphon Master
* language and i18n:
* updated translations: Danish, Finnish, Hungarian, Italian
* miscellaneous and bug fixes:
* replace a #elif without condition with #else (debian patch #505957)
* fixed campaign replays (bug #12005)
* start-of-scenario saves are properly marked as such
Version 1.4.6:
* language and i18n:
* updated translations: Czech, Danish, Finnish, French, Galician, German,
Hungarian, Italian, Polish, Slovak, Turkish, Valencian
* graphics
* fixed the parts of the undead flags which were not TC'd
Version 1.4.5:
* campaigns:
* Sceptre of Fire
* Fixed a coordinate bug that caused 'Hills of the Shorbear Clan' to not
end when it was supposed to.
* Fixed a bug that allowed one to finish 'The Dragon' by defeating both
enemy leaders.
* graphics:
* new portraits: Silver Mages, White Mages, female Mage of Light, Arch Mages,
Red Mages, Dark Adepts, female Necromancer/Dark Sorceress, L1 Mages, Lich
* language and i18n:
* updated translations: Chinese (Traditional), Czech, Danish, French,
Galician, German, Hungarian, Italian, Lithuanian, Polish, Russian,
Spanish
* updated manpages: Hungarian
* updated manual: Hungarian
* fonts: DejaVuSans 2.26
* miscellaneous and bug fixes:
* Fixed linewrapping with not to wrap markups (bug #11946 and bug #11945)
* Fixed OOS bug when giving control and having move in undo stack.
* Fixed crash when ai moves units next to level 0 hiden unit (bug #12252)
* Fixed loading ai parameters. MP side defination now overwrites
era values (bug #12171)
* Fixed MP saves to transfer correct completion state to remote clients
when loadin game (bug #10385)
* Fixed the list of the unit's attacks getting cut off in the right panel
(bug #12297).
Version 1.4.4:
* language and i18n:
* new translation: Latvian
* updated translations: Arabic, Catalan, Chinese (Traditional), Czech,
Danish, Finnish, French, Galician, German, Greek, Hungarian, Italian,
Japanese, Lithuanian, Polish, Russian, Serbian, Slovak
* langcode change: moved gl_ES to gl
* miscellaneous and bug fixes:
* Fixed timer end warning not to play in opponents turn (bug: #11517)
* fix bug #11630 (preventing redo and rename during opponent's turn)
* Added recursion preventarion to [kill] fire_event=yes [/kill]
* Added check whether sendfile is in glibc (debian patch #490638)
Version 1.4.3:
* campaigns:
* The Rise of Wesnoth:
* fixed the Wesfolk Outcast line's distract ability not working
* language and i18n:
* new translations: Arabic, Friulian, Macedonian
* updated translations: Czech, Danish, Dutch, Estonian, Finnish, French,
German, Hungarian, Japanese, Polish, Russian, Serbian, Slovak, Spanish
* fonts: DejaVuSans 2.25
* manual: updated screenshots to match UI rearrangements
* WML engine:
* fix [teleport] capturing villages with the wrong side (bug #11683)
* campaignd
* made campaign server use gzip compression for networking
* made campaign server detect if client can receive gzipped data
* made campaign server use gzip for storing addons
* added configuraion option to choose gzip compression level
* miscellaneous and bug fixes:
* fixed parser bug that prevented loading binary data strings
* starting a campaign without any installed now gives an error.
* fixed issues with campaign info in non-compressed saved games
(bug #11386)
* Backported graceful restart feature to server
* Improved connection stability with slow connections.
* Implemented send_file to reduce memory usage when sending files
* Fixed a mememory leak in networking code
* fixed an alignement issue which caused a SIGBUS on a Sparc
(debian bug #426318)
* Fixed tokenizer not to strip CR from quoted string becaue it would destroy
images transfered over network
* added some includes to fix compilation problems with Sun Studio 12
(patch #1066)
* fixed null-pointer reference in network code
Version 1.4.2:
* campaigns
* Liberty
* Backport r25650 to fix graphics glitch (bug 11438)
* language and i18n:
* updated translations: Chinese, Chinese (Traditional), Croatian, Czech,
Dutch, Finnish, French, German, Hungarian, Italian, Japanese, Lithuanian,
Polish, Russian, Serbian, Slovak, Spanish, Turkish
Version 1.4.1:
* campaigns:
* Fixed/enforced internal gender id of various female heroes/foes
(bug #11197)
* Under the Burning Suns:
* Minor cosmetic fixes
* graphics:
* Fixed broken TC on transport-galleon and drake walking corpse graphics
* New portraits: Elvish Sorceress
* language and i18n:
* new translation: Croatian
* updated translations: Chinese, Czech, Danish, Dutch, Finnish, French,
Galician, German, Greek, Hungarian, Italian, Lithuanian, Japanese, Polish,
Russian, Spanish, Swedish, Turkish, Valencian
* map editor:
* fixed not working "Update transition" and make "Delay transition update"
directly trigger an update when toggled off.
* miscellaneous and bug fixes:
* Removed spurious -R linker switch from command line generated by the Boost
M4 macros
* Load-game dialog displays a scenario campaign's translated name rather than
its internal id now
* wmlxgettext now print some context information about the strings
extracted (patch #993)
* added VICTORY_AND_DEFEAT_MUSIC macro and wired it in all mainline
scenarios that warrant such effects
* Fixed a border case of unit portrait advancement on which generic portraits
would be treated as character-specific (affected female Elvish Archer line;
it also theoretically affected units with [variation]s using different
portraits)
* allow configure to be started from directories other as the top dir
(patch #1002)
* learn the underlaying terrain so you'll not have a blank like in the unit
stats if you encounter a terain aliased to a unencountered terrain
* multiplayer:
* fixed minimap caching in the lobby screen, resulting in faster refreshs
* a lot work has gone into optimizing wesnothd to allow more players
Version 1.4:
* language and i18n:
@ -44,9 +213,9 @@ Version 1.4:
(bug #11150)
* Fixed UI sounds toggle crash on Windows
* when a new unit is spawned when the attacker dies and the new unit has
a lower number of weapons then the weapon number used in the attack an
a lower number of weapons then the weapon number used in the attack an
wml_exception was thrown (bug #10926).
* truncate names in the load dialog utf8 aware, might be related to
* truncate names in the load dialog utf8 aware, might be related to
bug #11186
* fix bug #11187 play_once=yes and fix musical cross-fading

View file

@ -9,13 +9,13 @@
#define PACKAGE_NAME "Battle for Wesnoth"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "Battle for Wesnoth 1.4"
#define PACKAGE_STRING "Battle for Wesnoth 1.4.7"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "wesnoth"
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.4"
#define PACKAGE_VERSION "1.4.7"
/* Version number of package */
#define VERSION "1.4"
#define VERSION "1.4.7"

View file

@ -6,7 +6,7 @@
AC_PREREQ([2.60])
define([WESNOTH_VERSION],[1.4])
define([WESNOTH_VERSION],[1.4.7])
AC_INIT([Battle for Wesnoth], WESNOTH_VERSION, [isaac@warp.es], [wesnoth])
@ -104,7 +104,7 @@ fi
# Make tests default in svn version
svn_in_version=`expr match "$WESNOTH_VERSION" '.*svn'`
test_build=yes
if test $svn_in_version == 0
if test $svn_in_version = 0
then
#disabling building tests for release version
test_build=no
@ -120,11 +120,6 @@ AC_ARG_ENABLE([static],
[static=$enableval],
[static=no])
AC_ARG_ENABLE([python],
AS_HELP_STRING([--disable-python], [disable Python support]),
[python=$enableval],
[python=yes])
AC_ARG_ENABLE([python_install],
AS_HELP_STRING([--enable-python-install], [enable installation of Python developer tools]),
[python_install=$enableval],
@ -309,12 +304,6 @@ AC_ARG_ENABLE([display-revision],
[svnrev=no])
if test "x$game" = "xno"
then
python=no
AC_MSG_WARN([*** Game build disabled, suppressing Python support.])
fi
if test "x$python" = "xno"
then
python_install=no
@ -326,6 +315,11 @@ AC_ARG_ENABLE([raw-sockets],
[raw_sockets=$enableval],
[raw_sockets=no])
AC_ARG_ENABLE([bandwidth-monitor],
AS_HELP_STRING([--enable-bandwidth-monitor], [Enable bandwidth monitoring for server]),
[bandwidth_monitor=$enableval],
[bandwidth_monitor=no])
if test "x$raw_sockets" = "xyes"
then
CPPFLAGS="$CPPFLAGS -DNETWORK_USE_RAW_SOCKETS"
@ -341,6 +335,7 @@ AM_CONDITIONAL([EDITOR], [test x$editor = xyes])
AM_CONDITIONAL([USESVN], [test x$svnrev = xyes])
AM_CONDITIONAL([TOOLS], [test x$tools = xyes])
AM_CONDITIONAL([GCC], [test x$GXX = xyes])
AM_CONDITIONAL([BANDWIDTH_MONITOR], [test x$bandwidth_monitor = xyes])
AM_CONDITIONAL([INCLUDEDINTL], [test x$nls_cv_use_gnu_gettext = xyes])
AM_CONDITIONAL([INSTALLDATA], [test x$game = xyes || x$editor = xyes])
AM_CONDITIONAL([DUMMYLOCALES], [test x$dummylocales = xyes])
@ -474,19 +469,6 @@ if test "x$python" = "xyes"; then
if test "x$pythonfound" = "xyes"; then
AC_MSG_RESULT(yes)
PYTHON_CFLAGS="-DHAVE_PYTHON -I$PYTHON_PREFIX/include/python$PYTHON_VERSION"
OLD_CPPFLAGS="$CPPFLAGS"
OLD_CXXFLAGS="$CXXFLAGS"
CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
CXXFLAGS="$CXXFLAGS $PYTHON_CFLAGS"
AC_CHECK_HEADER([Python.h],
[],
[AC_MSG_WARN([*** Python include files not found! You should install Python development package. Python support disabled]); pythonfound=no])
CPPFLAGS="$OLD_CPPFLAGS"
CXXFLAGS="$OLD_CXXFLAGS"
if test "x$pythonfound" = "xyes"; then
AC_SUBST([PYTHON_CFLAGS])
@ -705,6 +687,10 @@ LIBS="$LIBS $SDL_LIBS"
# so recommend using fink sdl packages as a workaround
ac_link="$LDPREFIX $ac_link"
if test "x$game" = "xyes"
then
AC_CHECK_LIB([SDL_image],
[IMG_Load],
[if test -n "$LDPREFIX" -a -r `$SDL_CONFIG --prefix`/lib/libSDL_image.la
@ -723,6 +709,9 @@ fi],
[AC_MSG_ERROR([*** SDL_mixer lib not found! Get SDL_mixer from
http://www.libsdl.org/projects/SDL_mixer/index.html])])
fi
# test "x$game" = "xyes"
AC_CHECK_LIB([SDL_net],
[SDLNet_Init],
[if test -n "$LDPREFIX" -a -r `$SDL_CONFIG --prefix`/lib/libSDL_net.la
@ -739,44 +728,30 @@ AC_SUBST([SDL_IMAGE_LIBS])
AC_SUBST([SDL_MIXER_LIBS])
AC_SUBST([SDL_NET_LIBS])
# Checking for the freetype library. This was copied from the
# config script of SDL_ttf, modified for CPPFLAGS
# Checking for the freetype library.
dnl Get the cflags and libraries from the freetype-config script
if test "x$game" = "xyes"
then
AC_ARG_WITH([freetype-prefix],
AS_HELP_STRING([--with-freetype-prefix=PFX], [Prefix where FREETYPE is installed (optional)]),
[freetype_prefix="$withval"],
[freetype_prefix=""])
AC_ARG_WITH([freetype-exec-prefix],
AS_HELP_STRING([--with-freetype-exec-prefix=PFX], [Exec prefix where FREETYPE is installed (optional)]),
[freetype_exec_prefix="$withval"],
[freetype_exec_prefix=""])
if test x$freetype_exec_prefix != x ; then
freetype_args="$freetype_args --exec-prefix=$freetype_exec_prefix"
if test x${FREETYPE_CONFIG+set} != xset ; then
FREETYPE_CONFIG=$freetype_exec_prefix/bin/freetype-config
fi
AC_PATH_PROG([PKG_CONFIG], [pkg-config], [none])
if test "x$PKG_CONFIG" = "xnone"; then
AC_MSG_ERROR([*** Please install pkg-config or pkgconf])
fi
if test x$freetype_prefix != x ; then
freetype_args="$freetype_args --prefix=$freetype_prefix"
if test x${FREETYPE_CONFIG+set} != xset ; then
FREETYPE_CONFIG=$freetype_prefix/bin/freetype-config
fi
fi
AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
no_freetype=""
if test "$FREETYPE_CONFIG" = "no" ; then
AC_MSG_ERROR([
*** Unable to find FreeType2 library (http://www.freetype.org/)
])
AC_MSG_CHECKING(for freetype2)
$PKG_CONFIG --exists freetype2
if test $? != 0 ; then
AC_MSG_RESULT(no)
AC_MSG_ERROR([*** Unable to find FreeType2 library (https://www.freetype.org/)])
else
CPPFLAGS="$CPPFLAGS `$FREETYPE_CONFIG $freetypeconf_args --cflags`"
FREETYPE_LIBS=`$FREETYPE_CONFIG $freetypeconf_args --libs`
AC_MSG_RESULT(yes)
CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags freetype2`"
FREETYPE_LIBS="`$PKG_CONFIG --libs freetype2`"
fi
fi
# test "x$game" = "xyes"
AC_SUBST([FREETYPE_LIBS])
#######################################################################
@ -800,6 +775,9 @@ AC_CHECK_HEADER([SDL.h],
[AC_MSG_ERROR([*** SDL include files not found!
You should install SDL development package.])])
if test "x$game" = "xyes"
then
AC_CHECK_HEADER([SDL_image.h],
[],
[AC_MSG_ERROR([*** SDL_image include files not found!
@ -810,6 +788,9 @@ AC_CHECK_HEADER([SDL_mixer.h],
[AC_MSG_ERROR([*** SDL_mixer include files not found!
You should install development package.])])
fi
# test "x$game" = "xyes"
AC_CHECK_HEADER([SDL_net.h],
[],
[AC_MSG_ERROR([*** SDL_net include files not found!
@ -845,6 +826,9 @@ AC_CHECK_FUNCS([floor socket strtoul])
# Check for PNG support in SDL_image #
#######################################################################
if test "x$game" = "xyes"
then
AC_LANG([C])
AC_MSG_CHECKING([for PNG support in SDL_image])
@ -864,7 +848,7 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([
int main(int argc, char **argv)
{
SDL_RWops *src;
char *testimage = "images/buttons/button-pressed.png";
char *testimage = "${srcdir}/images/buttons/button-pressed.png";
src = SDL_RWFromFile(testimage, "rb");
if (src == NULL) {
@ -882,11 +866,16 @@ CPPFLAGS=$OLD_CPPFLAGS
CFLAGS=$OLD_CFLAGS
LIBS=$OLD_LIBS
fi
# test "x$game" = "xyes"
#######################################################################
# Check for OGG support in SDL_mixer #
#######################################################################
if test "x$game" = "xyes"
then
if test "x$lite" = "xno"; then
if test -e "data/core/music/main_menu.ogg" ; then
AC_LANG([C])
@ -926,6 +915,9 @@ if test "x$lite" = "xno"; then
fi
fi
fi
# test "x$game" = "xyes"
#######################################################################
# Check for boost iostreams #
#######################################################################

View file

@ -81,11 +81,11 @@
[/server]
[server]
name=_"Alternate Wesnoth Server"
address=games.tuxfamily.org:15000
address=server2.wesnoth.org:15000
[/server]
[server]
name=_"Alternate Wesnoth Server"
address=wesnoth.debian.net:15000
address=server3.wesnoth.org:15000
[/server]
base_income=2
@ -95,7 +95,7 @@
recall_cost=20
kill_experience=8
title="maps/mainmenu.png"
title="maps/mainmenu.jpg"
logo="misc/logo.png"
icon="wesnoth-icon.png"
title_music="main_menu_new.ogg"

View file

@ -1,531 +0,0 @@
#!WPY
import wesnoth, random
## Copyright 2006 by Michael Schmahl
## This code is available under the latest version of the GNU Public License.
## See COPYING for details. Some inspiration and code derived from "sample.py"
## by allefant.
##
## This is my attempt at a 'chess-like' AI. All moves are motivated by
## an underlying evaluation function. The actual eval function doesn't
## need to be coded, because moves can be scored and ranked based on the
## incremental change in the evaluation. Unlike a chess-playing program,
## though, this program does no lookahead, because the branching factor
## is prohibitively high (potentially in the thousands), and because then
## the script would have to create an internal model of the game state.
##
## Despite the lack of any lookahead, I still consider this AI to be
## chess-like because it evaluates every possible move and attack, even
## those that are obviously (to a human) bad. How can a computer know
## that these are bad moves unless it actually checks?
##
## The evaluation function is:
##
## (1) side_score = village_score
## + sum(unit_score, over all units)
## + positional_score
##
## The value of a unit can be highly subjective, but to simplify, assume
## that any level-1 unit is just as valuable as any other level-1 unit.
## Specifically, the value of a unit will be:
##
## (2) unit_score = (1 + level + %xp)(1 + %hp)
##
## Leaders are be considered three levels higher than their actual level.
## So a freshly-recruited level-1 unit is worth 4.0 points. And a level-2
## unit with half its hitpoints remaining, but halfway to level 3, is
## worth 6.75 points.
##
## One question is: How much is a village worth, compared to a (typical)
## unit? A typical unit is worth 15 to 20 gold, because that is how much
## we paid for it. A village is worth two or three gold *per turn* as
## long as it is held. (The village is worth three gold when it offsets
## a unit's upkeep.) So we must make some assumptions as to the value of
## a present gold piece, compared to a future gold piece. Assume a decay
## rate of 1.5 (i.e. a gold piece one turn from now is worth two-thirds
## of a gold piece now). This makes the present value of a village equal
## to twice its income. If we set the value of a typical unit at 16 gold,
## we get that an upkeep-offsetting village is worth 1.5 points, and a
## supernumerary village is worth 1.0 points. For simplicity, the value
## of each village is set at 1.0.
##
## (3) village_score = number of villages
##
## The positional score is the most interesting term of equation (1),
## because that, more than anything else, will guide the AI's behavior.
##
## First, we want the AI to expand to capture villages. So, for each unit,
## it is scored based on how far it is from the nearest unowned or enemy
## village. If the distance is zero, the unit has actually captured the
## village, so in that limit, the value should be equal to the village
## value. As the distance approaces infinity, the score should tend
## toward zero. This suggests something like:
##
## (4) village_proximity = c / (c + distance)
##
## I have selected c to be equal to equal to the unit's movement. This
## means that (approximately) a unit one turn away from capturing a village
## gets 0.5 points; two turns, 0.33 points, etc. Although an exponential
## relationship would be more accurate, exponentiation is expensive, and
## better avoided, since thousands of moves are evaluated per turn.
##
## Second, we want units to stand on defensive terrain when within range
## of the enemy. The 'right' way to do this would be to count up all the
## potential attackers at the destination square, see how much damage they
## might do, and score the move based on how much damage would be dealt/
## prevented. Again, this is much too slow. I have found a reasonable
## approximation is:
##
## (5) exposure_penalty = -defense_modifier / 10
##
## Maybe much too simple, but easy to calculate! In future editions, perhaps
## I should take into account how damaged the unit is, or at least make some
## attempt to count the attackers.
##
## Third, we want units to heal when damaged or poisoned. Referring to
## equation (2), we can see that the value of healing is:
##
## (6) healing_score = healing / max_hitpoints * (1 + level + %xp)
##
## We consider poison, which does 8 damage *per turn*, to be equivalent to
## 16 points of actual damage, for the same reason a village's real value is
## twice its income (see above).
##
## Fourth, we want units to guard villages if the enemy is in range to take
## them. If, by stationing a unit on a village, we prevent the enemy from
## taking it, we have prevented a 2-point swing in the enemy's favor. Again
## considering a decay rate of 2/3 per turn, this means the garrison value
## is 4/3. But since there is no guarantee that our garrison will be
## successful (perhaps the enemy will take the village anyway; perhaps it is
## not possible to garrison all threatened villages), we will cut this in half.
##
## (7) garrison_score = 2/3
##
## Fifth, we want our leader to stay near a keep. Otherwise, any gold we
## might have accumulated will be wasted. And finally, we want units to move
## toward the enemy leader. These are accomplished by treating keeps as
## if they were unowned villages (for our leader), and the enemy leader
## as if it were a village (for everyone else).
##
## This should be all that is required to play a decent game of Wesnoth.
## This AI scores quite well against the Wesnoth default AI, which may be
## surprising, because it uses no sophisticated tools. There is no attempt
## to use any of the path-finding tools made available by the API (which
## would be too slow to be used thousands of times every turn). There is
## no attempt to use combination attacks (meaning, that even though none of
## several units can favorably attack a certain target, if they all attack
## in the same turn, the result is likely to be favorable). No attempt is
## made to assign units individually to targets.
##
## Some bad behaviors may result from these shortcomings:
##
## If the map is maze-like, or simply has a few corners surrounded by
## impassable terrain, units may get stuck. On Cynsaun Battlefield, for
## example, a group of units got stuck in the middle of the river, trying
## to capture a village on the other side of the deep-water hexes.
##
## An enemy unit may get completely surrounded by friendly units, who are
## weak in comparison to the enemy, and our AI will make no attempt to kill
## the enemy unit. (Think six Wolf Riders surrounding an Orcish Grunt.)
## Usually one or more of these units will find something else to do, allowing
## a few Archers to take their place and start to wear down the Grunt. Or
## the Grunt will attack, getting damaged in the process, and creating a
## chance-to-kill for one of the Wolves.
##
## If there is an unoccupied village in a corner of the map, our AI will
## send every unit that is closer to the village than any other, to that
## village. Often, only one unit is necessary. Thus, harassing villages
## with scouts may be a much more viable strategy against this AI than
## against human players, or against the default AI.
##
## For those interested in results, I have set up a tournament between my
## AI and the default AI. The tournament consists of one match on each of
## the mainline two-player maps (except Wesbowl, naturally). In each map,
## each opponent is allowed to be player 1 once. If there is no decision
## after two games, two more games are played, repeating as necessary until
## one opponent has won the match. All games are played with a 50-turn
## limit, 2 gold per village, 70% experience, and no fog. (I think there
## is a bug (feature?) that AIs ignore fog, so I disabled it to improve the
## observer's (my) experience.) Factions are chosen randomly.
##
## Map W-L-D %Win Match result
## Blitz 2-0-0 100 Win
## Caves of the Basilisk 4-2-0 67 Win
## Charge 3-1-0 75 Win
## Cynsaun Battlefield (1gpv) 2-0-0 100 Win
## Den of Onis 4-2-0 67 Win
## Hamlets 2-0-0 100 Win
## Hornshark Island 0-2-0 0 Loss
## Meteor Lake 2-0-0 100 Win
## Sablestone Delta 2-0-0 100 Win
## Silverhead Crossing 3-1-0 75 Win
## Sulla's Ruins 2-0-0 100 Win
## ** Overall 25-8-0 76 10 Wins, 1 Loss (91%)
# UNIT SCORE MODIFIERS
BASE_UNIT_SCORE = 1 # Base worth of a unit
LEVEL_SCORE = 1 # Worth/level
LEADER_SCORE = 3 # Leader worth
FULL_XP_SCORE = 1 # How much is partial XP worth (1 is 100% XP = 1 pt)
# This score is then multiplied by a factor dependant on the price of the unit
# this makes expensive units worth more to the AI
COST_SCORE = 0 #
BASE_COST_SCORE = 1 #
# Formula:
# Base_Score = BASE_UNIT_SCORE + level * LEVEL_SCORE + is_leader * LEADER_SCORE + xp/max_xp * FULL_XP_SCORE
# Cost_Modifier = BASE_COST_SCORE + price * COST_SCORE
# Unit_Score(unit_k) = Base_Score * Cost_Modifier
# POSITION SCORE MODIFIERS
NO_MOVE_PEN = 0 # Penalty for not moving (doesn't quite work)
NEXT_TO_ENEMY_PEN = 0 # Penalty for moving next to an enemy and not attacking
STAND_NEXT_TO_ENEMY_PEN = 0 # Penalty for standing next to an enemy without moving or attacking
# MISC SCORE MODIFIERS
LEVEL_CHANCE_BONUS = 0 # How much a level-up is worth
VILLAGE_SCORE = 1 # How much capturing a village is worth
ENEMY_VILLAGE_BONUS = 1 # How much extra is an enemy village worth
GARRISON_SCORE = 2.0/3 # How much defending a village is worth
DEFENSE_FACTOR = 1.0/1000 # How much to penalize a unit for being in an attackable position
HEAL_FACTOR = 1 # How much is healing worth
HEAL_ATTACKABLE = .5 # How much relative to healing is healing when attackable worth
HEAL_POISON = 16 # How much is healing from poison worth
HP_SCALE = .1 # Unit HP/turn (for recruitment)
def pos(p):
if p==None: return ("Nowhere")
return ("(%s,%s)"%(p.x+1,p.y+1))
class AI:
def __init__(self):
self.get_villages()
self.get_keeps()
self.mapsize = max((wesnoth.get_map().x,wesnoth.get_map().y)) / 30.0
self.stats = [0,0]
def report_stats(self):
wesnoth.log_message("%d moves, %d fights evaluated" % (self.stats[0],self.stats[1]))
def get_villages(self):
self.notmyvillages = []
m = wesnoth.get_map()
for x in range(m.x):
for y in range(m.y):
loc = wesnoth.get_location(x,y)
if m.is_village(loc):
for team in wesnoth.get_teams():
if team.owns_village(loc) and not team.is_enemy:
break
else:
self.notmyvillages.append(loc)
def get_keeps(self):
self.keeps = []
m = wesnoth.get_map()
for x in range(m.x):
for y in range(m.y):
loc = wesnoth.get_location(x,y)
if m.is_keep(loc):
# If the enemy is occupying the keep, it is "off-limits" to our leader.
# Otherwise, if our leader has strayed too far, it might attempt to go
# to the enemy keep, which basically means we lose.
if loc not in wesnoth.get_enemy_destinations_by_unit().keys():
self.keeps.append(loc)
def recruit(self):
# I haven't discussed this at all. Perhaps a few paragraphs would be in order.
if wesnoth.get_current_team().gold < 16: return
# find our leader
leaderpos = None
for location,unit in wesnoth.get_units().iteritems():
if unit.can_recruit and unit.side == wesnoth.get_current_team().side:
leaderpos = location
break
# no leader? can't recruit
if leaderpos == None: return
# is our leader on a keep? If not, move to a keep
# Maybe should always go to nearest keep
if not leaderpos in self.keeps:
for dest in wesnoth.get_destinations_by_unit().get(leaderpos,[]):
if dest in self.keeps:
leaderpos = wesnoth.move_unit(leaderpos,dest)
break
# is our leader on a keep now? If not, can't recruit
if leaderpos not in self.keeps: return
# build up a list of recruits and scores for each
recruit_list = []
sumweights = 0
for recruit in wesnoth.get_current_team().recruits():
weight = self.recruit_score(recruit)
if weight < 0.01: weight = 0.01
recruit_list.append((recruit.name,weight))
sumweights += weight
# repeatedly recruit until we fail
while 1:
# pick a random recruit in proportion to the weights
r = random.uniform(0,sumweights)
for recruit,weight in recruit_list:
r -= weight
if r < 0: break
# just use leaderpos for the location; wesnoth will always
# recruit on the nearest adjacent tile
if not wesnoth.recruit_unit(recruit,leaderpos): break
def map_score(self,recruit):
# calculate average speed in hexes/turn
# and average defense in effective hp
m = wesnoth.get_map()
n = m.x * m.y
speed = 0.0
defense = 0.0
for x in range(m.x):
for y in range(m.y):
loc = wesnoth.get_location(x,y)
speed += 1.0 / recruit.movement_cost(loc)
defense += 100.0 / recruit.defense_modifier(loc) - 1
# speed is more important on larger maps
speed *= self.mapsize * recruit.movement / n
# scaled down because effective hp is over the lifetime of the unit,
# while other scores are based on per-turn quantities
defense *= HP_SCALE * recruit.hitpoints / n
return speed,defense
def combat_score(self,recruit):
# combat advantage, in hp/turn, averaged over all enemy units
tot = 0.0
n = 0
for loc,enem in wesnoth.get_units().iteritems():
if not enem.is_enemy: continue
n += 1
tot += self.combat_advantage(recruit,enem)
tot -= self.combat_advantage(enem,recruit)
return tot/n
def combat_advantage(self,attacker,defender):
# combat advantage for attacker attacking defender
best = 0.0
for weapon in attacker.attacks():
damage = weapon.damage * weapon.num_attacks * defender.damage_from(weapon) / 100.0
best_retal = 0.0
for retaliation in defender.attacks():
if weapon.range == retaliation.range:
retal = retaliation.damage * retaliation.num_attacks * attacker.damage_from(retaliation) / 100.0
if retal > best_retal: best_retal = retal
damage -= best_retal
if damage > best: best = damage
# scale down because not every attack hits
return best/2
def recruit_score(self,recruit):
speed,defense = self.map_score(recruit)
combat = self.combat_score(recruit)
rval = (speed + defense + combat)/recruit.cost
# only report "interesting" results
if rval > 0:
wesnoth.log_message("%s: (%.2f + %.2f + %.2f) / %d = %.3f" % (recruit.name,speed,defense,combat,recruit.cost,rval))
return rval
def do_one_move(self):
enemlocs = wesnoth.get_enemy_destinations_by_unit().keys()
self.enemdests = wesnoth.get_enemy_units_by_destination().keys()
bestmove = (0,None,None,None) # score,orig,dest,target
# find the best move
for orig in wesnoth.get_destinations_by_unit().keys():
# get a baseline score for this unit "standing pat"
base_score = self.eval_move(orig,orig)
for dest in wesnoth.get_destinations_by_unit()[orig]:
# Bug workaround -- if we have recruited this turn,
# get_destinations_by_unit() is incorrect
if dest in wesnoth.get_units().keys() and dest != orig: continue
score = self.eval_move(orig,dest) - base_score
if score > bestmove[0]:
bestmove = (score,orig,dest,dest)
for target in wesnoth.get_adjacent_tiles(dest):
if target in enemlocs:
fight = self.eval_fight(wesnoth.get_units()[orig],dest,target)+score
if orig == dest:
fight += STAND_NEXT_TO_ENEMY_PEN + NO_MOVE_PEN
else:
fight += NEXT_TO_ENEMY_PEN
if fight > bestmove[0]:
bestmove = (fight,orig,dest,target)
if bestmove[1] == None:
# no move improved the position, therefore we are done
return False
score,orig,dest,target = bestmove
wesnoth.log_message("%.3f: %s->%s@%s"%(score,pos(orig),pos(dest),pos(target)))
if dest != orig: wesnoth.move_unit(orig,dest)
if dest in self.notmyvillages: self.notmyvillages.remove(dest)
if target != dest: wesnoth.attack_unit(dest,target)
return True
def eval_fight(self,unit,dest,target):
self.stats[1] += 1
enem = wesnoth.get_units().get(target,None)
if not enem: return 0
# the base value for each unit:
# I should give more weight to defeating a garrison
unit_k = (LEVEL_SCORE*unit.type().level + BASE_UNIT_SCORE + LEADER_SCORE*unit.can_recruit\
+ FULL_XP_SCORE * unit.experience * 1.0 / unit.max_experience) * (BASE_COST_SCORE + unit.type().cost * COST_SCORE)
enem_k = (LEVEL_SCORE*enem.type().level + BASE_UNIT_SCORE + LEADER_SCORE*enem.can_recruit\
+ FULL_XP_SCORE * enem.experience * 1.0 / enem.max_experience) * (BASE_COST_SCORE + enem.type().cost * COST_SCORE)
unit_hp,enem_hp = unit.attack_statistics(dest,target)
score = 0.0
for hp,p in enem_hp.iteritems():
score += p * (enem.hitpoints - hp) * enem_k / enem.max_hitpoints
if hp<=0: score += p * enem_k
for hp,p in unit_hp.iteritems():
score -= p * (unit.hitpoints - hp) * unit_k / unit.max_hitpoints
if hp<=0: score -= p * unit_k
enem_xp = 8*enem.type().level
if enem.type().level == 0:
enem_xp = 4
unit_xp = 8*unit.type().level
if unit.type().level == 0:
unit_xp = 4
if enem.type().level >= unit.max_experience - unit.experience:
for hp, p in unit_hp.iteritems():
if hp > 0: score += LEVEL_CHANCE_BONUS * p * unit_k
elif enem_xp >= unit.max_experience - unit.experience:
for hp, p in enem_hp.iteritems():
if hp <= 0: score += LEVEL_CHANCE_BONUS * p * unit_k
if unit.type().level >= enem.max_experience - enem.experience:
for hp, p in enem_hp.iteritems():
if hp > 0: score -= LEVEL_CHANCE_BONUS * p * enem_k
elif unit_xp >= enem.max_experience - enem.experience:
for hp, p in unit_hp.iteritems():
if hp <= 0: score += LEVEL_CHANCE_BONUS * p * enem_k
return score
def eval_move(self,orig,dest):
enemlocs = wesnoth.get_enemy_destinations_by_unit().keys()
self.stats[0] += 1
score = 0.0
unit = wesnoth.get_units().get(orig,None)
if not unit: return
unit_k = (LEVEL_SCORE*unit.type().level + BASE_UNIT_SCORE + LEADER_SCORE*unit.can_recruit\
+ FULL_XP_SCORE * unit.experience * 1.0 / unit.max_experience) * (BASE_COST_SCORE + unit.type().cost * COST_SCORE)
# subtract 1 because terrain might be a factor
speed = unit.type().movement - 1
attackable=False
if dest in self.enemdests:
attackable = True
else:
for adj in wesnoth.get_adjacent_tiles(dest):
if adj in self.enemdests:
attackable = True
break
# capture villages
if dest in self.notmyvillages:
score += VILLAGE_SCORE
for team in wesnoth.get_teams():
if team.owns_village(dest) and team.is_enemy:
score += ENEMY_VILLAGE_BONUS
bestdist=100
if unit.can_recruit:
# leader stays near keep
for keep in self.keeps:
dist=dest.distance_to(keep)
if dist<bestdist:
bestdist=dist
if dist<=1: break
else:
# everyone else moves toward enemy leader
for loc,enem in wesnoth.get_units().iteritems():
if enem.is_enemy and enem.can_recruit:
dist=dest.distance_to(loc)
if dist<bestdist:
bestdist=dist
if dist<=1: break
if bestdist > 1:
for vil in self.notmyvillages:
if dest==vil: continue
dist=dest.distance_to(vil)
if dist<bestdist:
bestdist=dist
if dist<=1: break
score += (1.0 * speed) / (bestdist + speed)
# healing
# I am ignoring the value of healers, and regenerating units. I don't think unit abilities
# are correctly reported by the API, anyway.
if (unit.poisoned or unit.hitpoints<unit.max_hitpoints) and wesnoth.get_map().is_village(dest):
if unit.poisoned: healing = HEAL_POISON
else:
healing = unit.max_hitpoints-unit.hitpoints
if healing > 8: healing = 8
# reduce the healing bonus if we might get killed first
if attackable: healing *= HEAL_ATTACKABLE
score += HEAL_FACTOR * healing * unit_k / unit.max_hitpoints
if attackable:
# defense
score -= unit.defense_modifier(dest) * DEFENSE_FACTOR
# garrison
if wesnoth.get_map().is_village(dest): score += GARRISON_SCORE
# reduce chances of standing next to a unit without attacking for a whole turn
if dest == orig:
score -= NO_MOVE_PEN
for target in wesnoth.get_adjacent_tiles(dest):
if target in enemlocs:
score -= STAND_NEXT_TO_ENEMY_PEN
break
else:
for target in wesnoth.get_adjacent_tiles(dest):
if target in enemlocs:
score -= NEXT_TO_ENEMY_PEN
break
# end mod
return score
ai = AI()
ai.recruit()
while 1:
if not ai.do_one_move():
break
ai.recruit()
ai.report_stats()

View file

@ -1,91 +0,0 @@
#!/usr/bin/python
# This is *not* a python AI, it's just run as AI so it can get access to
# Python's runtime documentation. This documentation then simply is dumped to
# stdout in a format ready to be pasted to the wiki.
def myhelp(topic, topics):
"""Collect all the help topics into the given list."""
doc = getattr(eval(topic), "__doc__")
subtopics = []
for subtopic in getattr(eval(topic), "__dict__", []):
if subtopic.startswith("_"): continue
myhelp(topic + "." + subtopic, subtopics)
tc = getattr(eval(topic), "__class__", None)
tt = getattr(tc, "__name__", None)
if topic != "wesnoth.error":
topics.append((topic, tt, doc, subtopics))
def output(topics, level):
"""Output the given topics in wiki format, in a given heading level."""
color = 0
topics.sort()
for topic, tt, doc, subtopics in topics:
dot = topic.rfind(".")
if level == 1:
print "==", topic[dot + 1:], "module reference =="
print "''This is an automatically generated reference, but feel " +\
"free to edit it - changes will not be overwritten but " +\
"instead reviewed and included in the next version.''"
print doc or "..."
if subtopics:
funcs = []
others = []
for s in subtopics:
if s[1] == "builtin_function_or_method":
funcs.append(s)
else:
others.append(s)
if funcs:
print "=== Functions ==="
print "{|"
output(funcs, 3)
print "|}"
output(others, 2)
elif level == 2:
print "===", topic[dot + 1:], "==="
print doc or "..."
if subtopics:
print "{|"
output(subtopics, 3)
print "|}"
elif level == 3:
options = " valign='top'"
if color: options += " bgcolor='#FBF5EA'"
print "|-" + options
color = not color
if tt in ["method_descriptor", "builtin_function_or_method"]:
suffix = ""
prefix = ""
if doc and doc.startswith("Parameters:"):
l = doc.find("\n")
if l == -1: l = len(doc) - 1
suffix = "(" + doc[11:l].strip() + ")"
doc = doc[l + 1:]
else:
suffix = "()"
if doc and doc.startswith("Returns:"):
l = doc.find("\n")
if l == -1: l = len(doc) - 1
prefix = doc[8:l].strip() + " = "
doc = doc[l + 1:]
print "|'''%s()'''" % topic[dot + 1:]
print "|<code>%s%s%s</code>\n\n" % (prefix, topic[dot + 1:], suffix) +\
(doc and doc.replace("\n", "\n\n") or "...")
else:
print "|'''%s'''\n|%s" % (topic[dot + 1:],
(doc and doc.replace("\n", "\n\n") or "..."))
if __name__ == "__main__":
import os
# If we are run as script, run wesnoth with the --python-api switch.
os.system("src/wesnoth --python-api")
else:
# If we are run as a python script, output the documentation to stdout.
import wesnoth
topics = []
myhelp("wesnoth", topics)
output(topics, 1)

View file

@ -1,50 +0,0 @@
import re, os, safe
whitelisted = ["wesnoth", "heapq", "random", "math", "string", "re"]
rex = re.compile(r"^import\s+(.*)", re.M)
modules = {}
def include(matchob):
"""
Regular expression callback. Handles a single import statement, returning
the included code.
"""
names = [x.strip() for x in matchob.group(1).split(",")]
r = ""
for name in names:
if name in whitelisted:
modules[name] = __import__(name)
continue
for path in pathes:
includefile = os.path.join(path, name)
try:
code = parse_file(includefile + ".py")
break
except IOError:
pass
else:
raise safe.SafeException("Could not include %s." % name)
return None
r += code
return r
def parse_file(name):
"""
Simple pre-parsing of scripts, all it does is allow importing other scripts.
"""
abspath = os.path.abspath(name)
if abspath in already: return ""
already[abspath] = 1
code = file(abspath).read().replace(chr(13), "")
code = rex.sub(include, code)
return code
# If you want to disable safe python, use this instead:
#
# def parse(name): return open(name).read(), {}
def parse(name):
global already, modules
already = {}
modules = {}
return parse_file(name), modules

View file

@ -1,134 +0,0 @@
"""An attempt at creating a safe_exec for python.
This file is public domain and is not suited for any serious purpose.
This code is not guaranteed to work. Use at your own risk!
Beware! Trust no one!
Please e-mail philhassey@yahoo.com if you find any security holes.
svn://www.imitationpickles.org/pysafe/trunk
See README.txt, NOTES.txt, CHANGES.txt for more details.
"""
import compiler
import __builtin__
class SafeException(Exception):
"""Base class for Safe Exceptions"""
def __init__(self,*value):
self.value = str(value)
def __str__(self):
return self.value
class CheckNodeException(SafeException):
"""AST Node class is not in the whitelist."""
pass
class CheckStrException(SafeException):
"""A string in the AST looks insecure."""
pass
class RunBuiltinException(SafeException):
"""During the run a non-whitelisted builtin was called."""
pass
_NODE_CLASS_OK = [
'Add', 'And', 'AssAttr', 'AssList', 'AssName', 'AssTuple',
'Assert', 'Assign','AugAssign', 'Bitand', 'Bitor', 'Bitxor', 'Break',
'CallFunc', 'Class', 'Compare', 'Const', 'Continue',
'Dict', 'Discard', 'Div', 'Ellipsis', 'Expression', 'FloorDiv',
'For', 'Function', 'Getattr', 'If', 'Keyword',
'LeftShift', 'List', 'ListComp', 'ListCompFor', 'ListCompIf', 'Mod',
'Module', 'Mul', 'Name', 'Node', 'Not', 'Or', 'Pass', 'Power',
'Print', 'Printnl', 'Return', 'RightShift', 'Slice', 'Sliceobj',
'Stmt', 'Sub', 'Subscript', 'Tuple', 'UnaryAdd', 'UnarySub', 'While',
]
_NODE_ATTR_OK = []
_STR_OK = ['__init__']
_STR_NOT_CONTAIN = ['__']
_STR_NOT_BEGIN = ['im_','func_','tb_','f_','co_',]
## conservative settings
#_NODE_ATTR_OK = ['flags']
#_STR_NOT_CONTAIN = ['_']
#_STR_NOT_BEGIN = []
def _check_node(node):
if node.__class__.__name__ not in _NODE_CLASS_OK:
raise CheckNodeException(node.lineno,node.__class__.__name__)
for k,v in node.__dict__.items():
if k in _NODE_ATTR_OK: continue
if v in _STR_OK: continue
if type(v) not in [str,unicode]: continue
for s in _STR_NOT_CONTAIN:
if s in v: raise CheckStrException(node.lineno,k,v)
for s in _STR_NOT_BEGIN:
if v[:len(s)] == s: raise CheckStrException(node.lineno,k,v)
for child in node.getChildNodes():
_check_node(child)
def _check_ast(code):
ast = compiler.parse(code)
_check_node(ast)
_BUILTIN_OK = [
'__debug__','quit','exit',
'Warning',
'None','True','False',
'abs', 'bool', 'callable', 'cmp', 'complex', 'dict', 'divmod', 'filter',
'float', 'frozenset', 'hex', 'int', 'isinstance', 'issubclass', 'len',
'list', 'long', 'map', 'max', 'min', 'object', 'oct', 'pow', 'range',
'repr', 'round', 'set', 'slice', 'str', 'sum', 'tuple', 'xrange', 'zip',
]
_BUILTIN_STR = [
'copyright','credits','license','__name__','__doc__',
]
def _builtin_fnc(k):
def fnc(*vargs,**kargs):
raise RunBuiltinException(k)
return fnc
_builtin_globals = None
_builtin_globals_r = None
def _builtin_init():
global _builtin_globals, _builtin_globals_r
if _builtin_globals != None: return
_builtin_globals_r = __builtin__.__dict__.copy()
r = _builtin_globals = {}
for k in __builtin__.__dict__.keys():
v = None
if k in _BUILTIN_OK: v = __builtin__.__dict__[k]
elif k in _BUILTIN_STR: v = ''
else: v = _builtin_fnc(k)
r[k] = v
def _builtin_destroy():
_builtin_init()
for k,v in _builtin_globals.items():
__builtin__.__dict__[k] = v
def _builtin_restore():
for k,v in _builtin_globals_r.items():
__builtin__.__dict__[k] = v
def safe_check(code):
"""Check the code to be safe."""
return _check_ast(code)
def safe_run(code,context=None):
"""Exec code with only safe builtins on."""
if context == None: context = {}
_builtin_destroy()
try:
#exec code in _builtin_globals,context
context['__builtins__'] = _builtin_globals
exec code in context
_builtin_restore()
except:
_builtin_restore()
raise
# If you want to disable safe python, use this instead:
#
# def safe_exec(code, context = None): exec code in context
def safe_exec(code, context = None):
"""Check the code to be safe, then run it with only safe builtins on."""
safe_check(code)
safe_run(code,context)

View file

@ -1,396 +0,0 @@
#!WPY
"""This is a rather simple minded example of a python AI."""
import wesnoth, heapq, random
def pos(location):
"""Just a helper function for printing positions in debug messages."""
return "(%d, %d)" % (1 + location.x, 1 + location.y)
def debug(string):
pass
class AI:
"""A class representing our AI."""
def __init__(self):
"""This class is constructed once for each turn of the AI. To get
persistent variables across terms, which also are saved when the game is
saved, use set_variable and get_variable."""
self.team = wesnoth.get_current_team()
self.village_radius = 25
self.scout_villages = 3
self.recruit()
self.fight()
self.conquer()
def conquer(self):
"""Try to capture villages."""
villages = self.find_villages()
units = wesnoth.get_destinations_by_unit().keys()
# Construct a sorted list of (distance, unit, village) triples.
queue = []
for village in villages:
for unit in units:
d = self.get_distance(unit, village)
if d != None: heapq.heappush(queue, (d, unit, village))
# Now assign units to villages, and move them.
while queue:
d, unit, village = heapq.heappop(queue)
if unit in units and village in villages:
units.remove(unit)
villages.remove(village)
self.go_to(unit, village)
if not units: break
if not villages: break
def cumulate_damage(self, cumulated, hitpoints, new_damage):
cumulated2 = {}
for already, ap in cumulated.iteritems():
for hp, probability in new_damage.iteritems():
damage = int(already + hitpoints - hp)
cumulated2[damage] = cumulated2.get(damage, 0) + ap * probability
return cumulated2
def danger_estimate(self, unit, where, enemy):
"""Get some crude indication about how unsafe it is for unit to get
attacked by enemy at where."""
scores = []
u = wesnoth.get_units()[unit]
e = wesnoth.get_units()[enemy]
u_defense = u.defense_modifier(wesnoth.get_map(), where)
e_defense = e.defense_modifier(wesnoth.get_map(), enemy)
u_bonus = 100 - (u.type().alignment - 1) * wesnoth.get_gamestatus().lawful_bonus
e_bonus = 100 - (e.type().alignment - 1) * wesnoth.get_gamestatus().lawful_bonus
for attack in e.attacks():
score = attack.damage * attack.num_attacks * e_bonus / 100
score *= u_defense
score *= u.damage_against(attack) / 100
back = []
for retaliation in u.attacks():
if attack.range == retaliation.range:
x = retaliation.damage * retaliation.num_attacks * u_bonus / 100
x *= e_defense
x *= e.damage_against(retaliation) / 100
back.append(x)
if back:
r = max(back)
score -= r
heapq.heappush(scores, score)
return scores[0]
def danger(self, unit, location):
"""Try to estimate danger of moving unit to location."""
attackers = []
for enemy, destinations in wesnoth.get_enemy_destinations_by_unit():
for tile in wesnoth.get_adjacent_tiles(unit):
if tile in destinations:
heuristic = danger_estimate(unitm, location, enemy)
if heuristic > 0:
heapq.heappush(attackers, (-heuristic, enemy, tile))
result = 0
already = {}
while attackers:
danger, enemy, tile = heapq.heappop(attackers)
if not already[enemy] and not already[tile]:
danger = -danger
result += danger
already[enemy] = 1
already[tile] = 1
return result
def fight(self):
"""Attack enemies."""
enemies = wesnoth.get_enemy_destinations_by_unit().keys()
units = wesnoth.get_destinations_by_unit().keys()
# Get a list of all units we can possibly kill and their chance to kill.
# This is just a heuristic, ignoring ZoC and unit placement.
kills = []
for enemy in enemies:
e = wesnoth.get_units()[enemy]
k = {0: 1.0}
for unit, destinations in wesnoth.get_destinations_by_unit().iteritems():
u = wesnoth.get_units()[unit]
for tile in wesnoth.get_adjacent_tiles(enemy):
if tile in destinations:
own_hp, enemy_hp = u.attack_statistics(tile, enemy)
k = self.cumulate_damage(k, e.hitpoints, enemy_hp)
ctk = 0
for damage, p in k.iteritems():
if damage >= e.hitpoints:
ctk += p
if ctk:
heapq.heappush(kills, (-ctk, enemy))
# Now find positions from where own units can attack the to be killed
# enemies.
attacks = []
while kills:
ctk, enemy = heapq.heappop(kills)
e = wesnoth.get_units()[enemy]
ctk = -ctk
for tile in wesnoth.get_adjacent_tiles(enemy):
for unit in wesnoth.get_units_by_destination().get(tile, []):
u = wesnoth.get_units()[unit]
own_hp, enemy_hp = u.attack_statistics(tile, enemy)
score = e.hitpoints - sum([x[0] * x[1] for x in enemy_hp.iteritems()])
score -= u.hitpoints - sum([x[0] * x[1] for x in own_hp.iteritems()])
# This is so if there are two equally good attack
# possibilities, we chose the one on better terrain.
score *= 50 / u.defense_modifier(tile)
heapq.heappush(attacks, (-score, unit, tile, enemy))
#print own_hp, enemy_hp
debug("Score for %s at %s: %s<->%s: %f [%s]" % (u.name,
pos(unit), pos(tile), pos(enemy), score, e.name))
# Now assign units to enemies, and move and attack.
while attacks:
score, unit, tile, enemy = heapq.heappop(attacks)
score = -score
if unit in units and enemy in enemies:
#try:
loc = wesnoth.move_unit(unit, tile)
#except ValueError:
# loc = None
if loc == tile:
e = wesnoth.get_units()[enemy]
wesnoth.attack_unit(tile, enemy)
if not e.is_valid:
enemies.remove(enemy)
units.remove(unit)
if not units: break
def recruit(self):
"""Recruit units."""
# Check if there is any gold left first.
cheapest = min([x.cost for x in self.team.recruits()])
if self.team.gold < cheapest: return
# Find all keeps in the map.
keeps = self.find_keeps()
# Find our leader.
leader = None
for location, unit in wesnoth.get_units().iteritems():
if unit.side == self.team.side and unit.can_recruit:
leader = location
break
# Get number of villages to capture near to the leader.
villages = len([x for x in self.find_villages()
if leader.distance_to(x) < self.village_radius])
units_recruited = int(wesnoth.get_variable("units_recruited") or 0)
def attack_score(u1, u2):
"""Some crude score of u1 attacking u2."""
maxdeal = 0
for attack in u1.attacks():
deal = attack.damage * attack.num_attacks
deal *= u2.damage_from(attack) / 100.0
for defense in u2.attacks():
if attack.range == defense.range:
receive = defense.damage * defense.num_attacks
receive *= u1.damage_from(defense) / 100.0
deal -= receive
if deal > maxdeal: maxdeal = deal
return maxdeal
def recruit_score(recruit, speed, defense, aggression, resistance):
"""Score for recruiting the given unit type."""
need_for_speed = 3 * (villages / self.scout_villages -
units_recruited)
if need_for_speed < 0: need_for_speed = 0
v = speed * need_for_speed + defense * 0.1 + aggression + resistance
v += 1
if v < 1: v = 1
return v
# Try to figure out which units are good in this map.
map = wesnoth.get_map()
recruits = self.team.recruits()
recruits_list = []
for recruit in recruits:
speed = 0.0
defense = 0.0
n = map.x * map.y
for y in range(map.y):
for x in range(map.x):
location = wesnoth.get_location(x, y)
speed += recruit.movement_cost(location)
defense += 100 - recruit.defense_modifier(location)
speed = recruit.movement * n / speed
defense /= n
aggression = 0.0
resistance = 0.0
enemies = wesnoth.get_enemy_destinations_by_unit().keys()
n = len(enemies)
for location in enemies:
enemy = wesnoth.get_units()[location]
aggression += attack_score(recruit, enemy)
resistance -= attack_score(enemy, recruit)
aggression /= n
resistance /= n
debug("%s: speed: %f, defense: %f, aggression: %f, resistance: %f" %
(recruit.name, speed, defense, aggression, resistance)
recruits_list.append((recruit, speed, defense, aggression, resistance))
# Now recruit.
for location, unit in wesnoth.get_units().iteritems():
if unit.side == self.team.side and unit.can_recruit:
keepsort = []
for keep in keeps:
heapq.heappush(keepsort, (location.distance_to(keep), keep))
keep = keepsort[0][1]
self.go_to(location, keep)
for i in range(6): # up to 6 units (TODO: can be more)
# Get a random, weighted unit type from the available.
heap = []
total_v = 0
for r in recruits_list:
v = recruit_score(*r)
v *= v * v
total_v += v
heapq.heappush(heap, (-v, r[0]))
r = random.uniform(0, total_v)
while 1:
v, recruit = heapq.heappop(heap)
debug("%d %d" % % (r, v))
r += v
if r <= 0: break
# Try to recruit it on the adjacent tiles
# TODO: actually, it should just use the nearest possible
# location
for position in wesnoth.get_adjacent_tiles(location):
if wesnoth.recruit_unit(recruit.name, position):
break
else:
# was not possible -> we're done
break
units_recruited += 1
wesnoth.set_variable("units_recruited", str(units_recruited))
def find_villages(self):
"""Find all villages which are unowned or owned by enemies."""
villages = []
m = wesnoth.get_map()
for x in range(m.x):
for y in range(m.y):
location = wesnoth.get_location(x, y)
if wesnoth.get_map().is_village(location):
for team in wesnoth.get_teams():
# does it alreadey belong to use or an ally?
if team.owns_village(location) and not team.is_enemy:
break
else:
# no, either it belongs to an enemy or to nobody
villages.append(location)
return villages
def find_keeps(self):
"""Find keep locations."""
keeps = []
m = wesnoth.get_map()
for x in range(m.x):
for y in range(m.y):
location = wesnoth.get_location(x, y)
if wesnoth.get_map().is_keep(location):
keeps.append(location)
return keeps
def get_distance(self, location, target, must_reach = False):
"""Find out how many turns it takes the unit at location to reach target."""
if location == target: return 0
unit = wesnoth.get_units()[location]
path = unit.find_path(location, target, 100)
extra = 0
if not path:
extra = 1
if must_reach: return None
for adjacent in wesnoth.get_adjacent_tiles(target):
# Consider 5 turns worth of movement of this unit.
path = unit.find_path(location, adjacent,
unit.type().movement * 5)
if path: break
else:
return None
l = 0
for location in path:
l += unit.movement_cost(location)
l -= unit.movement_left
l /= unit.type().movement
l += 1 + extra
return l
def attack(self, location, enemy):
"""Attack an enemy unit."""
wesnoth.attack_unit(location, enemy)
def go_to(self, location, target, must_reach = False):
"""Make a unit at the given location go to the given target.
Returns the reached position.
"""
if location == target: return location
# If target is occupied, try to go near it
unit_locations = wesnoth.get_units().keys()
if target in unit_locations:
if must_reach: return location
adjacent = wesnoth.get_adjacent_tiles(target)
targets = [x for x in adjacent if not x in unit_locations]
if targets:
target = targets[0]
else:
return location
# find a path
for l, unit in wesnoth.get_units().iteritems():
if location == l:
path = unit.find_path(location, target, unit.type().movement * 5)
break
else:
return location
if path:
possible_destinations = wesnoth.get_destinations_by_unit().get(location, [])
if must_reach:
if not target in path: return location
if not target in possible_destinations: return location
# find first reachable position in reversed path
path.reverse()
for p in path:
if p in possible_destinations and not p in unit_locations:
location = wesnoth.move_unit(location, p)
return location
return location
AI()

View file

@ -20,32 +20,31 @@
description=_"Defend the forests of the elves against the first orcs to reach the Great Continent, learning valuable tactics as you do so.
(Novice level, 7 scenarios.)"
# Geographical and historical assumptions (ESR):
#
# As originally written by Josh Parsons, this campaign was not set in
# any particular time or place. I changed it to a few years after the
# arrival of orcs on the Great Continent, and pinned it to the
# northern marches of Wesmere. Erlornas and his troops were originally
# professional guards, but I've changed them to a scratch force of
# civilians raused by a local noble and gradually militarizing. Thus,
# this becomes a story of how elves learned the nature of orcs and how
# to cope.
[about]
title = _ "Campaign Design"
[entry]
name = "Josh Parsons"
[/entry]
[/about]
[about]
title = _ "Adaptation for mainline"
[entry]
name = "Eric S. Raymond"
[/entry]
[/about]
[/campaign]
# Geographical and historical assumptions (ESR):
#
# As originally written by Josh Parsons, this campaign was not set in
# any particular time or place. I changed it to a few years after the
# arrival of orcs on the Great Continent, and pinned it to the
# northern marches of Wesmere. Erlornas and his troops were originally
# professional guards, but I've changed them to a scratch force of
# civilians raused by a local noble and gradually militarizing. Thus,
# this becomes a story of how elves learned the nature of orcs and how
# to cope.
[about]
title = _ "Campaign Design"
[entry]
name = "Josh Parsons"
[/entry]
[/about]
[about]
title = _ "Adaptation for mainline"
[entry]
name = "Eric S. Raymond"
[/entry]
[/about]
#ifdef CAMPAIGN_AN_ORCISH_INCURSION
[binary_path]
path="data/campaigns/An_Orcish_Incursion"

View file

@ -5,6 +5,7 @@
map_data="{campaigns/An_Orcish_Incursion/maps/defend_the_forest.map}"
{DEFAULT_SCHEDULE}
{VICTORY_AND_DEFEAT_MUSIC}
[side]
type="Elvish Lord"

View file

@ -5,6 +5,7 @@
map_data="{campaigns/An_Orcish_Incursion/maps/assassins.map}"
{DEFAULT_SCHEDULE}
{VICTORY_AND_DEFEAT_MUSIC}
[side]
type="Elvish Lord"

View file

@ -5,6 +5,7 @@
map_data="{campaigns/An_Orcish_Incursion/maps/wasteland.map}"
{DEFAULT_SCHEDULE}
{VICTORY_AND_DEFEAT_MUSIC}
[side]
type="Elvish Lord"

View file

@ -5,6 +5,7 @@
map_data="{campaigns/An_Orcish_Incursion/maps/valley_of_trolls.map}"
{DEFAULT_SCHEDULE}
{VICTORY_AND_DEFEAT_MUSIC}
#define AVOID_CAVEDOORS
# The edges of the cave passages and mountains on both troll lairs.

View file

@ -5,6 +5,7 @@
map_data="{campaigns/An_Orcish_Incursion/maps/linaera_the_quick.map}"
{DEFAULT_SCHEDULE}
{VICTORY_AND_DEFEAT_MUSIC}
[side]
type="Elvish Lord"

View file

@ -5,6 +5,7 @@
map_data="{campaigns/An_Orcish_Incursion/maps/a_detour_through_the_swamp.map}"
{DEFAULT_SCHEDULE}
{VICTORY_AND_DEFEAT_MUSIC}
[side]
type="Elvish Lord"

View file

@ -5,6 +5,7 @@
map_data="{campaigns/An_Orcish_Incursion/maps/showdown.map}"
{DEFAULT_SCHEDULE}
{VICTORY_AND_DEFEAT_MUSIC}
[side]
type="Elvish Lord"

View file

@ -1,68 +0,0 @@
#!WPY
import wesnoth
class AI:
def __init__(self):
self.do()
def do(self):
# loop over all enemy units
for enemy_loc, ed in wesnoth.get_enemy_destinations_by_unit().iteritems():
target_unit = wesnoth.get_units()[enemy_loc]
# see if unit is the leader of player's side
if target_unit.side == 1 and target_unit.can_recruit == 1:
# if so, get adjacent locations
for unit_loc, destinations in wesnoth.get_destinations_by_unit().iteritems():
attacked_flag = False
for destination in destinations:
if destination.adjacent_to(enemy_loc):
wesnoth.move_unit(unit_loc, destination)
wesnoth.attack_unit(destination, enemy_loc)
attacked_flag = True
break
if (not attacked_flag):
new_loc = self.go_to(unit_loc, enemy_loc, False)
if new_loc.adjacent_to(enemy_loc):
wesnoth.attack_unit(new_loc, enemy_loc)
def go_to(self, location, target, must_reach = False):
"""Make a unit at the given location go to the given target.
Returns the reached position.
"""
if location == target: return location
# If target is occupied, try to go near it
unit_locations = wesnoth.get_units().keys()
if target in unit_locations:
if must_reach: return location
adjacent = wesnoth.get_adjacent_tiles(target)
targets = [x for x in adjacent if not x in unit_locations]
if targets:
target = targets[0]
else:
return location
# find a path
for l, unit in wesnoth.get_units().iteritems():
if location == l:
path = unit.find_path(location, target, 1000)
break
else:
return location
if path:
possible_destinations = wesnoth.get_destinations_by_unit().get(location, [])
if must_reach:
if not target in path: return location
if not target in possible_destinations: return location
# find first reachable position in reversed path
path.reverse()
for p in path:
if p in possible_destinations and not p in unit_locations:
location = wesnoth.move_unit(location, p)
return location
return location
AI()

View file

@ -8,6 +8,7 @@
turns=15
victory_when_enemies_defeated=no
{VICTORY_AND_DEFEAT_MUSIC}
{STORY_SAVING_HALAL}

View file

@ -8,6 +8,7 @@
{TURNS 29 26 23}
victory_when_enemies_defeated=no
{VICTORY_AND_DEFEAT_MUSIC}
{STORY_PEACEFUL_VALLEY}
@ -107,7 +108,7 @@
[/event]
# Generate a random number of guards between 0 and 2 around X,Y
#define RANDOM_GUARDS TYPE DESCRIPTION USER_DESCRIPTION SIDE X Y
#define RANDOM_GUARDS TYPE NAME_STRING SIDE X Y
{VARIABLE_OP number_of_guards random 0..2}
{REPEAT $number_of_guards (
@ -136,8 +137,7 @@
[/move_unit_fake]
[unit]
description={DESCRIPTION}
user_description={USER_DESCRIPTION} # wmllint: ignore
user_description={NAME_STRING} # wmllint: ignore
type={TYPE}
side={SIDE}
x,y=$possible_guard_locations[$random_location_index].x,$possible_guard_locations[$random_location_index].y
@ -169,11 +169,11 @@
side=1
[/filter]
{IF_VAR village_$x1,$y1|_cleared not_equals yes (
{IF_VAR village_$x1|_$y1|_cleared not_equals yes (
[then]
{RANDOM_GUARDS (Goblin Spearman) Villager (_ "Villager") 2 $x1 $y1}
{RANDOM_GUARDS (Goblin Spearman) (_ "Villager") 2 $x1 $y1}
{VARIABLE village_$x1,$y1|_cleared yes}
{VARIABLE village_$x1|_$y1|_cleared yes}
[/then]
[else]
@ -260,7 +260,7 @@
[/store_villages]
{FOREACH villages i}
{VARIABLE_OP village_var format "village_$villages[$i].x,$villages[$i].y|_cleared"}
{VARIABLE_OP village_var format "village_$villages[$i].x|_$villages[$i].y|_cleared"}
{CLEAR_VARIABLE $village_var}
{NEXT i}

View file

@ -8,6 +8,7 @@
{TURNS 36 34 32}
victory_when_enemies_defeated=yes
{VICTORY_AND_DEFEAT_MUSIC}
{STORY_A_HAUNTING_IN_WINTER}
@ -76,11 +77,6 @@
no_leader=yes
fog=no
shroud=no
# kamikaze.py heads straight for the leader of side 1 and attacks
[ai]
ai_algorithm=python_ai
python_script="../campaigns/Descent_Into_Darkness/ais/kamikaze.py"
[/ai]
[/side]
[event]

View file

@ -8,6 +8,7 @@
turns=36
victory_when_enemies_defeated=yes
{VICTORY_AND_DEFEAT_MUSIC}
{STORY_BEGINNING_OF_THE_REVENGE}
@ -173,6 +174,9 @@
[filter_location]
terrain=Ai
[/filter_location]
[not]
race=bats
[/not]
[not]
race=undead
[/not]

View file

@ -8,6 +8,7 @@
turns=30
victory_when_enemies_defeated=yes
{VICTORY_AND_DEFEAT_MUSIC}
{STORY_ORC_WAR}

View file

@ -8,6 +8,7 @@
turns=-1
victory_when_enemies_defeated=no
{VICTORY_AND_DEFEAT_MUSIC}
{STORY_RETURN_TO_HALAL}
@ -47,7 +48,7 @@
user_description=_ "Drogan"
{GOLD 16 30 45}
canrecruit=yes
recruit=Spearman,Archer
recruit=Spearman,Bowman
[ai]
aggression=0.2
caution=0.5
@ -63,10 +64,11 @@
type=Frontier Baroness
description=Dela Keshar
user_description=_ "Dela Keshar"
gender=female
gold=200
income=25
canrecruit=yes
recruit=Spearman,Archer,Swordsman,Pikeman,Longbowman,Thug,Poacher,Footpad
recruit=Spearman,Bowman,Swordsman,Pikeman,Longbowman,Thug,Poacher,Footpad
profile=portraits/dela.png
[ai]
[protect_unit]

View file

@ -8,6 +8,7 @@
{TURNS 28 26 22}
victory_when_enemies_defeated=no
{VICTORY_AND_DEFEAT_MUSIC}
{STORY_A_SMALL_FAVOR}

View file

@ -8,6 +8,7 @@
{TURNS 30 27 25}
victory_when_enemies_defeated=no
{VICTORY_AND_DEFEAT_MUSIC}
# no story -- this occurs immediately after the previous scenario

View file

@ -8,6 +8,7 @@
{TURNS 30 27 25}
victory_when_enemies_defeated=no
{VICTORY_AND_DEFEAT_MUSIC}
# no story -- this occurs immediately after the previous scenario

View file

@ -8,6 +8,7 @@
turns=-1
victory_when_enemies_defeated=no
{VICTORY_AND_DEFEAT_MUSIC}
{STORY_ALONE_AT_LAST}
@ -270,6 +271,7 @@
[/move_unit_fake]
[unit]
type=Frontier Baroness
gender=female
side=4
x,y=21,4
description=Dela Keshar

View file

@ -8,6 +8,7 @@
turns=-1
victory_when_enemies_defeated=no
{VICTORY_AND_DEFEAT_MUSIC}
{STORY_DESCENT_INTO_DARKNESS}

View file

@ -53,11 +53,6 @@
# {SCATTER_IMAGE (terrain=Uu) 3 scenery/rubble.png}
[music]
name=knolls.ogg
ms_after=5000
[/music]
[objectives]
side=1
[objective]
@ -69,8 +64,68 @@
description=_ "Destruction of Mal Keshar"
[/objective]
[/objectives]
[if]
[variable]
name=timesForever
greater_than=0
[/variable]
[then]
# after the first repetition, we'll let the campaign really end
# when Malin dies
[event]
name=die
[filter]
description="Mal Keshar"
[/filter]
[role]
side=2
[not]
canrecruit=yes
[/not]
role=second
[/role]
[music]
name=elvish-theme.ogg
immediate=yes
append=no
[/music]
{DIALOGUE_FAEA_END}
[endlevel]
result=continue_no_save
next_scenario=null
[/endlevel]
[/event]
{VARIABLE previous_randomHero $randomHero}
[/then]
[else]
# Normal defeat condition on the first repeat
{MAL_DEATH}
{VARIABLE previous_randomHero -1}
[/else]
[/if]
# let's pick a random hero type...
{VARIABLE_OP randomHero random (0..4)}
# and make sure it's not the same as last time
[while]
[variable]
name=randomHero
equals=$previous_randomHero
[/variable]
[do]
{VARIABLE_OP randomHero random (0..4)}
[/do]
[/while]
[if]
[variable]
name=randomHero
@ -85,7 +140,17 @@
x,y=20,3
canrecruit=yes
[/unit]
{ALLOW_RECRUIT (Spearman,Swordsman,Pikeman,Bowman,Longbowman,Heavy Infantry,Shock Trooper,Mage,Red Mage,White Mage,Horseman,Knight,Lancer)}
{ALLOW_RECRUIT (Spearman,Swordsman,Pikeman,Bowman,Longbowman,Heavy Infantryman,Shock Trooper,Mage,Red Mage,White Mage,Horseman,Knight,Lancer)}
[music]
name=loyalists.ogg
immediate=yes
append=no
[/music]
[music]
name=the_city_falls.ogg
append=yes
[/music]
[/then]
[/if]
[if]
@ -103,6 +168,11 @@
canrecruit=yes
[/unit]
{ALLOW_RECRUIT (Thug,Bandit,Footpad,Outlaw,Poacher,Trapper,Thief,Rogue)}
[music]
name=battle.ogg
append=no
[/music]
[/then]
[/if]
[if]
@ -119,7 +189,17 @@
x,y=20,3
canrecruit=yes
[/unit]
{ALLOW_RECRUIT (Elvish Figher,Elvish Hero,Elvish Captain,Elvish Archer,Elvish Ranger,Elvish Marksman,Elvish Shaman,Elvish Sorceress,Elvish Druid,Elvish Scout,Elvish Rider,Wose)}
{ALLOW_RECRUIT (Elvish Fighter,Elvish Hero,Elvish Captain,Elvish Archer,Elvish Ranger,Elvish Marksman,Elvish Shaman,Elvish Sorceress,Elvish Druid,Elvish Scout,Elvish Rider,Wose)}
[music]
name=knolls.ogg
immediate=yes
append=no
[/music]
[music]
name=the_city_falls.ogg
append=yes
[/music]
[/then]
[/if]
[if]
@ -136,7 +216,17 @@
x,y=20,3
canrecruit=yes
[/unit]
{ALLOW_RECRUIT (Dwarvish Figher,Dwarvish Steelclad,Dwarvish Thunderer,Dwarvish Thunderguard,Dwarvish Stalwart,Dwarvish Guardsman,Dwarvish Ulfserker,Dwarvish Berserker,Gryphon Rider,Gryphon Master)}
{ALLOW_RECRUIT (Dwarvish Fighter,Dwarvish Steelclad,Dwarvish Thunderer,Dwarvish Thunderguard,Dwarvish Stalwart,Dwarvish Guardsman,Dwarvish Ulfserker,Dwarvish Berserker,Gryphon Rider,Gryphon Master)}
[music]
name=battle.ogg
immediate=yes
append=no
[/music]
[music]
name=underground.ogg
append=yes
[/music]
[/then]
[/if]
[if]
@ -154,6 +244,16 @@
canrecruit=yes
[/unit]
{ALLOW_RECRUIT (Orcish Warrior,Orcish Slayer,Orcish Crossbowman,Troll,Troll Rocklobber)}
[music]
name=northerners.ogg
immediate=yes
append=no
[/music]
[music]
name=battle.ogg
append=yes
[/music]
[/then]
[/if]
@ -167,49 +267,26 @@
[/gold]
{CLEAR_VARIABLE heroGold}
# play only sad music after a few repetitions
[if]
[variable]
name=timesForever
greater_than=0
greater_than=4
[/variable]
[then]
[event]
name=attack_end
first_time_only=no
[store_unit]
variable=deathTest
[filter]
description="Mal Keshar"
[/filter]
kill=no
[/store_unit]
[if]
[variable]
name=deathTest.hitpoints
less_than_equal_to=0
[/variable]
[then]
[role]
side=2
[not]
canrecruit=yes
[/not]
role=second
[/role]
[music]
name=elf-land.ogg
play_once=yes
immediate=yes
ms_after=10000
[/music]
{DIALOGUE_FAEA_END}
[endlevel]
result=victory
next_scenario=null
[/endlevel]
[/then]
[/if]
[/event]
[music]
name=the_king_is_dead.ogg
immediate=yes
append=no
[/music]
[music]
name=elvish-theme.ogg
append=yes
[/music]
[music]
name=nunc_dimittis.ogg
append=yes
[/music]
[/then]
[/if]
[/event]
@ -276,13 +353,9 @@
# In-scenario events defined within the prestart event
# Defeat Conditions
{MAL_DEATH}
[event]
name=victory
{VARIABLE_OP timesForever add 1}
{CLEAR_VARIABLE randomHero}
[/event]
{@campaigns/Descent_Into_Darkness/utils/global-events.cfg}

View file

@ -5,6 +5,7 @@
# wmlscope: set export=no
[campaign]
id=Eastern_Invasion
rank=130
icon=units/human-loyalists/general.png~RC(magenta>red)
name= _ "The Eastern Invasion"

View file

@ -11,6 +11,7 @@
next_scenario=Escape_Tunnel
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -10,6 +10,7 @@
next_scenario=Unexpected_Appearance
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -9,6 +9,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -9,6 +9,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -8,6 +8,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -18,6 +18,7 @@
next_scenario=Northern_Outpost
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -7,6 +7,8 @@
next_scenario=Two_Paths
victory_when_enemies_defeated=no
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{DEFAULT_SCHEDULE}

View file

@ -4,6 +4,7 @@
name= _ "Two Paths"
map_data="{campaigns/Eastern_Invasion/maps/Two_Paths.map}"
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
next_scenario=Crossing
{TURNS 18 16 14}

View file

@ -9,6 +9,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -8,6 +8,7 @@
{DEFAULT_MUSIC_PLAYLIST}
{DEFAULT_SCHEDULE}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -11,6 +11,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
victory_when_enemies_defeated=no
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -9,6 +9,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -15,6 +15,7 @@
next_scenario=Captured
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -11,6 +11,7 @@
next_scenario=Evacuation
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -9,6 +9,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}
@ -173,7 +174,7 @@
description= _ "Death of Owaec"
condition=lose
[/objective]
note= _ "Note: every unit not on the south side of the river when the bridge is destroyed will be lost"
note= _ "Note: every unit not on the south side of the river when the bridge is destroyed will be lost (including not recalled units)"
[/objectives]
[/event]

View file

@ -9,6 +9,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -9,6 +9,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -27,6 +27,7 @@
next_scenario=Duel
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -9,6 +9,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
[side]
type=Lieutenant

View file

@ -9,6 +9,7 @@
{DEFAULT_SCHEDULE}
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{campaigns/Eastern_Invasion/utils/deaths.cfg}

View file

@ -7,10 +7,11 @@
hitpoints=64
movement_type=mounted
movement=7
experience=
experience=150
level=3
alignment=lawful
advanceto=
advanceto=null
{AMLA_DEFAULT}
undead_variation=mounted
cost=50
usage=fighter

View file

@ -1,4 +1,4 @@
#textdomain wesnoth-httt
#textdomain wesnoth-ei
# Macros for decorating the throneroom map.
#define LEFT_PIKE X Y

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 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.2 KiB

View file

@ -10,6 +10,7 @@
next_scenario=02_Blackwater_Port
victory_when_enemies_defeated=no
{VICTORY_AND_DEFEAT_MUSIC}
[event]
name=prestart
@ -207,6 +208,7 @@
type=Elvish Druid
description=Chantal
user_description= _ "Chantal"
gender=female
side=6
canrecruit=yes
recruit=Elvish Shaman,Elvish Archer,Elvish Fighter

View file

@ -4,6 +4,7 @@
name= _ "Blackwater Port"
map_data="{campaigns/Heir_To_The_Throne/maps/02_Blackwater_Port.map}"
{SCENARIO_MUSIC "loyalists.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 12 12 9}
{DEFAULT_SCHEDULE}

View file

@ -4,6 +4,7 @@
name= _ "The Isle of Alduin"
map_data="{campaigns/Heir_To_The_Throne/maps/03_The_Isle_of_Alduin.map}"
{SCENARIO_MUSIC "wanderer.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 34 24 21}
{AFTERNOON}

View file

@ -4,6 +4,7 @@
name= _ "The Bay of Pearls"
map_data="{campaigns/Heir_To_The_Throne/maps/04_The_Bay_of_Pearls.map}"
{SCENARIO_MUSIC "battle.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 27 24 21}
{DEFAULT_SCHEDULE}
@ -250,26 +251,30 @@
description=Bugg
[/have_unit]
[then]
#override kills being processed after
#units being created if they're in the same event
[command]
[kill]
description=Bugg
[/kill]
{LOYAL_UNIT 2 (Sea Orc) 16 18 (Bugg) ( _ "Bugg")}
[store_unit]
variable=bugg_flip
[filter]
description=Bugg
[/filter]
kill=yes
[/store_unit]
[message]
description=Bugg
message= _ "Ha ha ha! Now orcs will rule over land and sea!"
[/message]
{LOYAL_UNIT 2 (Sea Orc) $bugg_flip.x $bugg_flip.y (Bugg) ( _ "Bugg")}
{CLEAR_VARIABLE bugg_flip}
[message]
description=Bugg
message= _ "Ha ha ha! Now orcs will rule over land and sea!"
[/message]
[message]
description=Dwaba-Kukai
image=portraits/James_Woo/orc-warlord2.png
message= _ "(Sigh) Will someone kill this idiot for me, please?"
[/message]
[message]
description=Dwaba-Kukai
image=portraits/James_Woo/orc-warlord2.png
message= _ "(Sigh) Will someone kill this idiot for me, please?"
[/message]
[/command]
[/then]
[/if]
[/event]

View file

@ -4,6 +4,7 @@
name= _ "Muff Malal's Peninsula"
map_data="{campaigns/Heir_To_The_Throne/maps/05a_Muff_Malal_Peninsula.map}"
{SCENARIO_MUSIC "revelation.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 27 24 21}
{DEFAULT_SCHEDULE}

View file

@ -5,6 +5,7 @@
name= _ "Isle of the Damned"
map_data="{campaigns/Heir_To_The_Throne/maps/05b_Isle_of_the_Damned.map}"
{SCENARIO_MUSIC "revelation.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 27 24 21}
{DEFAULT_SCHEDULE}

View file

@ -4,6 +4,7 @@
name= _ "The Siege of Elensefar"
map_data="{campaigns/Heir_To_The_Throne/maps/06_The_Siege_of_Elensefar.map}"
{SCENARIO_MUSIC "knolls.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 40 32 29}
{DEFAULT_SCHEDULE}

View file

@ -4,6 +4,7 @@
name= _ "Crossroads"
map_data="{campaigns/Heir_To_The_Throne/maps/07_Crossroads.map}"
{SCENARIO_MUSIC "battle.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 37 34 31}
next_scenario=08_The_Princess_of_Wesnoth

View file

@ -4,6 +4,7 @@
name= _ "The Princess of Wesnoth"
map_data="{campaigns/Heir_To_The_Throne/maps/08_The_Princess_of_Wesnoth.map}"
{SCENARIO_MUSIC "wanderer.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 31 28 25}
{DEFAULT_SCHEDULE}
@ -81,6 +82,7 @@
type=Princess
description="Li'sar"
user_description= _ "Li'sar"
gender=female
unrenamable=yes
side=2
canrecruit=yes

View file

@ -4,6 +4,7 @@
name= _ "The Valley of Death - The Princess's Revenge"
map_data="{campaigns/Heir_To_The_Throne/maps/09_The_Valley_of_Death.map}"
{SCENARIO_MUSIC "northerners.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
turns=12
{DEFAULT_SCHEDULE}

View file

@ -4,6 +4,7 @@
name= _ "Gryphon Mountain"
map_data="{campaigns/Heir_To_The_Throne/maps/10_Gryphon_Mountain.map}"
{SCENARIO_MUSIC "knolls.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 27 24 21}
{DEFAULT_SCHEDULE}

View file

@ -4,6 +4,7 @@
name= _ "The Ford of Abez"
map_data="{campaigns/Heir_To_The_Throne/maps/11_The_Ford_of_Abez.map}"
{SCENARIO_MUSIC "loyalists.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 27 24 21}
{DEFAULT_SCHEDULE}
@ -52,6 +53,7 @@
type=Princess
description="Li'sar"
user_description= _ "Li'sar"
gender=female
side=2
canrecruit=yes
recruit=Cavalryman,Swordsman,Spearman,Red Mage,Ogre,Duelist

View file

@ -4,6 +4,7 @@
name= _ "Northern Winter"
map_data="{campaigns/Heir_To_The_Throne/maps/12_Northern_Winter.map}"
{SCENARIO_MUSIC "wanderer.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 50 40 40}
{DEFAULT_SCHEDULE}

View file

@ -4,6 +4,7 @@
name= _ "The Dwarven Doors"
map_data="{campaigns/Heir_To_The_Throne/maps/13_The_Dwarven_Doors.map}"
{SCENARIO_MUSIC "battle.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 26 20 15}
victory_when_enemies_defeated=no
@ -213,36 +214,38 @@
# find a special unit
#
[role]
type=Footpad,Thug,Poacher,Outlaw,Trapper,Bandit
type=Footpad,Thug,Poacher,Outlaw,Trapper,Bandit,Fugitive,Ranger,Huntsman,Highwayman
role=Outlaw_Advisor
[/role]
[recall]
role=Outlaw_Advisor
[/recall]
[redraw]
[/redraw]
[message]
role=Outlaw_Advisor
message= _ "My uncle used to smuggle... err... I mean... trade food for the dwarves. He could get grain carts in under the very noses of those ugly orcs."
[/message]
[message]
role=Outlaw_Advisor
message= _ "He must be hiding in one of those villages."
[/message]
[if]
[have_unit]
role=Outlaw_Advisor
[/have_unit]
[then]
{TALK_ABOUT_UNCLE}
[store_unit]
variable=outlaw_advisor_store
[filter]
role=Outlaw_Advisor
[/filter]
kill=no
variable=outlaw_advisor_store
[/store_unit]
{VARIABLE outlaw_name $outlaw_advisor_store.user_description}
{CLEAR_VARIABLE outlaw_advisor_store}
[message]
role=Outlaw_Advisor
message= _ "My uncle used to smuggle... err... I mean... trade food for the dwarves. He could get grain carts in under the very noses of those ugly orcs."
[/message]
[message]
role=Outlaw_Advisor
message= _ "He must be hiding in one of those villages."
[/message]
[/then]
[/if]
[/event]
@ -278,6 +281,8 @@
description=Kalenz
message= _ "I would settle for escape, though I know not which I dread more: foul orcs or fetid caves."
[/message]
[allow_undo][/allow_undo]
[/event]
[event]
@ -290,93 +295,7 @@
message= _ "Back to the abyss, spawn of filth!"
[/message]
[/event]
[event]
name=moveto
first_time_only=no
[filter]
description=Uncle Somf
[/filter]
[store_unit]
variable=outlaw_advisor_store
[filter]
role=Outlaw_Advisor
[/filter]
[/store_unit]
# proximity check
[store_locations]
x=$x1
y=$y1
variable=uncle_check_loc
radius=1
[/store_locations]
# The unit we want to be next to
[store_unit]
variable=outlaw_advisor_store
[filter]
role=Outlaw_Advisor
[/filter]
[/store_unit]
# Iterate over each location checking to see if the outlaw
# target is standing next to Uncle Somf
{FOREACH uncle_check_loc i}
{VARIABLE_OP temp_x format $uncle_check_loc[$i].x}
{VARIABLE_OP temp_x multiply -1}
{VARIABLE_OP temp_x add $outlaw_advisor_store.x}
{VARIABLE_OP temp_y format $uncle_check_loc[$i].y}
{VARIABLE_OP temp_y multiply -1}
{VARIABLE_OP temp_y add $outlaw_advisor_store.y}
[if]
[variable]
name=temp_x
numerical_equals=0
[/variable]
[then]
[if]
[variable]
name=temp_y
numerical_equals=0
[/variable]
[then]
[if]
[variable]
name=outlaw_repartee
numerical_equals=0
[/variable]
[then]
{VARIABLE_OP message_text format (_ "How are we doing, $outlaw_name|?")}
[message]
description=Uncle Somf
message=$message_text
[/message]
[message]
description=$outlaw_name
message= _ "The same as always, Uncle!"
[/message]
[message]
description=Uncle Somf
message= _ "That bad, huh?"
[/message]
{VARIABLE outlaw_repartee 1}
[/then]
[/if]
[/then]
[/if]
[/then]
[/if]
{NEXT i}
{CLEAR_VARIABLE temp_x}
{CLEAR_VARIABLE temp_y}
{CLEAR_VARIABLE outlaw_advisor_store}
{CLEAR_VARIABLE uncle_check_loc}
[/event]
#
# Finding the bandit uncle who gives you a big hint about the true exit
#
@ -388,58 +307,46 @@
y=24
[/filter]
[if]
[variable]
name=uncle_smuggler
numerical_equals=1
[/variable]
[have_unit]
role=Outlaw_Advisor
[/have_unit]
[then]
{LOYAL_UNIT 1 (Bandit) 18 24 (Uncle Somf) ( _ "Uncle Somf")}
[redraw]
[/redraw]
#
# The bandit's speech depends on who finds him
#
[store_unit]
variable=outlaw_advisor_store
[filter]
role=Outlaw_Advisor
[/filter]
[/store_unit]
[if]
[variable]
name=outlaw_advisor_store.x
numerical_equals=18
[/variable]
[then]
[if]
[variable]
name=outlaw_advisor_store.y
numerical_equals=24
[/variable]
[then]
{VARIABLE_OP message_text format (_ "$outlaw_name|! How have you been? I haven't seen you in years.")}
[/then]
[/if]
[/then]
[else]
{VARIABLE_OP message_text format (_ "Haw! Any friend of $outlaw_name is a friend of mine too.")}
[/else]
[/if]
[message]
speaker=unit
message= _ "Who... who's here?"
[/message]
#
# The bandit's speech depends on who finds him
#
[if]
[have_unit]
role=Outlaw_Advisor
x,y=18,24
[/have_unit]
# the outlaw advisor finds Uncle Somf
[then]
[message]
speaker=Uncle Somf
message= _ "$outlaw_name|! How have you been? I haven't seen you in years."
[/message]
[/then]
# ...or someone else finds him
[else]
[message]
speaker=Uncle Somf
message= _ "Haw! Any friend of $outlaw_name is a friend of mine too."
[/message]
[/else]
[/if]
[message]
description=Uncle Somf
message=$message_text
[/message]
{CLEAR_VARIABLE message_text}
{CLEAR_VARIABLE outlaw_advisor_store}
[message]
description=Konrad
speaker=Konrad
message= _ "We need to make it into the caves of the dwarves."
[/message]
#
# The bandit divulges the true location of the entrance
#
@ -450,26 +357,60 @@
[/variable]
[then]
[message]
description=Uncle Somf
speaker=Uncle Somf
message= _ "The mine entrances were all collapsed intentionally during the fighting. The doors, while heavily defended, remain accessible. The orcish hordes that assault them are repulsed, but you may be able to sneak in unnoticed."
[/message]
[/then]
[else]
[message]
description=Uncle Somf
speaker=Uncle Somf
message= _ "The best way is through the mine tunnels. The orcs have never found all the mine entrances, and many still lead deep underground."
[/message]
[/else]
[/if]
[set_variable]
name=uncle_smuggler
value=2
[/set_variable]
[/then]
[else]
[allow_undo][/allow_undo]
[/else]
[/if]
[/event]
[event]
name=moveto
[filter]
description=Uncle Somf
[filter_adjacent]
role=Outlaw_Advisor
[/filter_adjacent]
[or]
role=Outlaw_Advisor
[filter_adjacent]
description=Uncle Somf
[/filter_adjacent]
[/or]
[/filter]
[message]
speaker=Uncle Somf
message= _ "How are we doing, $outlaw_name|?"
[/message]
[message]
speaker=$outlaw_advisor_store.description
message= _ "The same as always, Uncle!"
[/message]
[message]
speaker=Uncle Somf
message= _ "That bad, huh?"
[/message]
[allow_undo][/allow_undo]
[/event]
#
# When any side 1 unit reaches a possible exit, we find out if it
# is the correct one. We don't know who will reach the exit,
@ -702,7 +643,10 @@
[/message]
{LOYAL_UNIT 2 (Princess) 8 44 (Li'sar) ( _ "Li'sar")}
# wmllint: recognize Li'sar
[+unit]
gender=female
[/unit]
# wmllint: recognize Li'sar
{LISAR_GUARD_DOORS}
{LISAR_GUARD_DOORS}
{LISAR_GUARD_DOORS}
@ -714,9 +658,8 @@
message= _ "Whew! We make our way through the dangerous fog of the mountains, and now there is all this chaos before us! Come on, men! We must make it to the caves that lie ahead of us!"
[/message]
{CLEAR_VARIABLE true_entrance_location}
{CLEAR_VARIABLE outlaw_advisor_store}
{CLEAR_VARIABLE outlaw_name}
{CLEAR_VARIABLE outlaw_repartee}
{CLEAR_VARIABLE message_text}
[/event]
{campaigns/Heir_To_The_Throne/utils/deaths.cfg}

View file

@ -6,6 +6,7 @@
[music]
name="battle.ogg"
[/music]
{VICTORY_AND_DEFEAT_MUSIC}
victory_when_enemies_defeated=no
{TURNS 19 16 13}

View file

@ -4,6 +4,7 @@
name= _ "The Lost General"
map_data="{campaigns/Heir_To_The_Throne/maps/15_The_Lost_General.map}"
{SCENARIO_MUSIC "underground.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 64 60 54}
{UNDERGROUND}

View file

@ -4,6 +4,7 @@
name= _ "Hasty Alliance"
map_data="{campaigns/Heir_To_The_Throne/maps/16_Hasty_Alliance.map}"
{SCENARIO_MUSIC "underground.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 33 30 27}
{DEEP_UNDERGROUND}
@ -76,6 +77,7 @@
controller=ai
type=Princess
gender=female
description="Li'sar"
user_description= _ "Li'sar"
facing=sw
@ -352,7 +354,7 @@
description=Li'sar
[/filter]
kill=no
kill=yes
variable=stored_Lisar
[/store_unit]
@ -362,6 +364,7 @@
user_description= _ "Li'sar"
unrenamable=yes
type=$stored_Lisar.type
gender=female
experience=$stored_Lisar.experience
{IS_HERO}
random_traits=no

View file

@ -32,6 +32,7 @@
[settings]
name= _ "The Scepter of Fire"
{DEFAULT_MUSIC_PLAYLIST}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 50 45 35}
victory_when_enemies_defeated=no
next_scenario=18_A_Choice_Must_Be_Made

View file

@ -4,6 +4,7 @@
name= _ "A Choice Must Be Made"
map_data="{campaigns/Heir_To_The_Throne/maps/18_A_Choice_Must_Be_Made.map}"
{SCENARIO_MUSIC "knolls.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 33 30 27}
next_scenario=19a_Snow_Plains

View file

@ -4,6 +4,7 @@
name= _ "Snow Plains"
map_data="{campaigns/Heir_To_The_Throne/maps/19a_Snow_Plains.map}"
{SCENARIO_MUSIC "wanderer.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 43 40 37}
next_scenario="20a_North_Elves"
@ -161,13 +162,5 @@
[/message]
[/event]
[event]
name=moveto
[filter]
side=1
x=29
y=9
[/filter]
{OBJ_SWORD_FIRE 29 9 flame_sword}
[/event]
{OBJ_SWORD_FIRE 29 9 flame_sword}
[/scenario]

View file

@ -4,6 +4,7 @@
name= _ "Swamp Of Dread"
map_data="{campaigns/Heir_To_The_Throne/maps/19b_Swamp_Of_Dread.map}"
{SCENARIO_MUSIC "wanderer.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 33 30 27}
next_scenario=20a_North_Elves

View file

@ -5,6 +5,7 @@
map_data="{campaigns/Heir_To_The_Throne/maps/19c_Cliffs_of_Thoria.map}"
{SCENARIO_MUSIC "battle.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 55 45 35}
next_scenario="20b_Underground_Channels"

View file

@ -4,6 +4,7 @@
name= _ "Home of the North Elves"
map_data="{campaigns/Heir_To_The_Throne/maps/20a_North_Elves.map}"
{SCENARIO_MUSIC "revelation.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 21 18 15}
{DEFAULT_SCHEDULE}

View file

@ -5,6 +5,7 @@
map_data="{campaigns/Heir_To_The_Throne/maps/20b_Underground_Channels.map}"
{SCENARIO_MUSIC "battle.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 80 70 60}
next_scenario="21_Elven_Council"
@ -126,6 +127,7 @@
type=Elvish Sylph
description=Bona-Melodia
user_description= _ "Bona-Melodia"
gender=female
controller=ai
canrecruit=yes
team_name=elves

View file

@ -37,6 +37,7 @@
[/side]
[side]
type=Elvish Lady
gender=female
description=Parandra
user_description= _ "Parandra"
side=3

View file

@ -4,6 +4,7 @@
name= _ "Return to Wesnoth"
map_data="{campaigns/Heir_To_The_Throne/maps/22_Return_to_Wesnoth.map}"
{SCENARIO_MUSIC "knolls.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 31 28 25}
next_scenario=23_Test_of_the_Clans

View file

@ -4,6 +4,7 @@
name= _ "Test of the Clan"
map_data="{campaigns/Heir_To_The_Throne/maps/23_Test_of_the_Clans.map}"
{SCENARIO_MUSIC "northerners.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
{TURNS 53 50 47}
{DEFAULT_SCHEDULE}

View file

@ -4,6 +4,7 @@
name= _ "The Battle for Wesnoth"
map_data="{campaigns/Heir_To_The_Throne/maps/24_Battle_for_Wesnoth.map}"
# Music is defined in prestart due to a story music key
{VICTORY_AND_DEFEAT_MUSIC}
turns=60
{DEFAULT_SCHEDULE}
@ -43,7 +44,7 @@
[story]
[part]
music =main_menu.ogg
music=main_menu.ogg
story= _ "Here we overlook the city of Weldyn. The great city. The ancient city. The city of evil. The city of good. The city of men."
background=story/arrival_of_the_heir.png
[/part]
@ -142,6 +143,7 @@
[side]
type=Dark Queen
gender=female
description=Asheviere
user_description= _ "Asheviere"
side=5
@ -163,7 +165,7 @@
# {SCATTER_IMAGE (terrain=Gg) 12 scenery/oak-leaning.png}
[music]
name="revelation.ogg"
name="battle.ogg"
[/music]
[if]
[variable]
@ -224,7 +226,7 @@
message= _ "So, these rebels come at last to face me, while most of my army is off fighting the fickle clans."
[/message]
[message]
speaker=clanboss
role=clanboss
message= _ "Wretched wench. Your army is tasting death as we speak. The clans have arrived to unseat you, pretender!"
[/message]
[message]

View file

@ -37,6 +37,46 @@
damage=11
number=4
[/attack]
[idle_anim]
{STANDARD_IDLE_FILTER}
start_time=0
[frame]
duration=100
image="human-princess-idle-1.png"
[/frame]
[frame]
duration=100
image="human-princess-idle-2.png"
[/frame]
[frame]
duration=100
image="human-princess-idle-3.png"
[/frame]
[frame]
duration=100
image="human-princess-idle-4.png"
[/frame]
[frame]
duration=150
image="human-princess-idle-5.png"
[/frame]
[frame]
duration=100
image="human-princess-idle-3.png"
[/frame]
[frame]
duration=100
image="human-princess-idle-4.png"
[/frame]
[frame]
duration=200
image="human-princess-idle-5.png"
[/frame]
[frame]
duration=100
image="human-princess-idle-6.png"
[/frame]
[/idle_anim]
[attack_anim]
[attack_filter]
name=sabre

View file

@ -11,8 +11,18 @@
#
#define OBJ_SWORD_FIRE X Y ID
{PLACE_IMAGE items/flame-sword.png ({X}) ({Y})}
{VARIABLE sword_taken 0}
[event]
name=moveto
[filter]
side=1
x={X}
y={Y}
[/filter]
{PLACE_IMAGE items/flame-sword.png ({X}) ({Y})}
{VARIABLE sword_taken 0}
[/event]
[event]
name=moveto
first_time_only=no
@ -106,11 +116,22 @@
[/object]
[/command]
[/option]
[option]
message= _ "No"
[command]
[allow_undo]
[/allow_undo]
[/command]
[/option]
[/message]
[/then]
[else]
[allow_undo]
[/allow_undo]
[/else]
[/if]
[/event]
#enddef
@ -160,59 +181,56 @@
image="wesnoth-icon.png"
message= _ "You struggle to lift and don the heavy plate. Once worn, however, it is amazingly comfortable. You have increased resistance to all physical damage!"
[/message]
{VARIABLE armor_taken 1}
[store_unit]
[filter]
x,y={X},{Y}
x,y=$x1,$y1
[/filter]
kill=yes
variable=void_armor_taker
[/store_unit]
{VARIABLE void_armor_taker_heals $void_armor_taker.abilities.heals.length}
{VARIABLE armor_taken 1}
{VARIABLE_OP void_armor_heals_temp format "void_armor_taker.abilities.heals[$void_armor_taker_heals].id"}
{VARIABLE $void_armor_heals_temp "void_armor"}
{VARIABLE void_armor_trait_i $void_armor_taker.modifications.trait.length}
{VARIABLE_OP void_armor_heals_temp format "void_armor_taker.abilities.heals[$void_armor_taker_heals].name"}
{VARIABLE_OP $void_armor_heals_temp format ( _ "void armor")}
{VARIABLE_OP void_armor_heals_temp format "void_armor_taker.abilities.heals[$void_armor_taker_heals].name_inactive"}
{VARIABLE_OP $void_armor_heals_temp format ( _ "void armor")}
{VARIABLE_OP void_armor_trait format "void_armor_taker.modifications.trait[$void_armor_trait_i].id"}
{VARIABLE $void_armor_trait "void_armor"}
{VARIABLE_OP void_armor_heals_temp format "void_armor_taker.abilities.heals[$void_armor_taker_heals].description"}
{VARIABLE_OP $void_armor_heals_temp format ( _ "The Void Armor grants the following resistances:
{VARIABLE_OP void_armor_trait format "void_armor_taker.modifications.trait[$void_armor_trait_i].name"}
{VARIABLE_OP $void_armor_trait format ( _ "void armor")}
{VARIABLE_OP void_armor_trait format "void_armor_taker.modifications.trait[$void_armor_trait_i].description"}
{VARIABLE_OP $void_armor_trait format ( _ "The Void Armor grants the following resistances:
blade: 50%
pierce: 50%
impact: 60%
fire: +10%")}
{VARIABLE_OP void_armor_heals_temp format "void_armor_taker.abilities.heals[$void_armor_taker_heals].description_inactive"}
{VARIABLE_OP $void_armor_heals_temp format ( _ "The Void Armor grants the following resistances:
blade: 50%
pierce: 50%
impact: 60%
fire: +10%")}
{CLEAR_VARIABLE $void_armor_temp}
{CLEAR_VARIABLE void_armor_temp}
[unstore_unit]
variable=void_armor_taker
find_vacant=no
[/unstore_unit]
{CLEAR_VARIABLE void_armor_trait}
{CLEAR_VARIABLE void_armor_trait_i}
{CLEAR_VARIABLE void_armor_taker}
{CLEAR_VARIABLE void_armor_heals_temp}
[/then]
#
# Set physical resistance to 50/40/40
# FIXME: they are now temporarily 50/50/60
# because that's what the description string
# claims. Should be changed back to 50/40/40
# when string freezes permit.
#
[effect]
apply_to=resistance
replace=true
[resistance]
blade=50
pierce=60
impact=60
pierce=50
impact=40
[/resistance]
[/effect]
#
@ -320,42 +338,42 @@ _f, _f, _f, _f, _f, _f, Re, _f, _f, _f, _f, _f,
_f, _f, _f, _f, Re, _f, _f, _f, _f, _f, _f, Re, Re, Re, Re, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, Re, _f, _f, _f, _f, _f, _f, Re, _f, _f, _f, _f, _f, Re, _f, _f, Re
_f, Re, _f, _f, Re, _f, _f, _f, Re, Re, _f, _f, Re, _f, Uu^Vud, _f, Re, Re, _f, _f, _f, Re, _f, Re, _f, _f, _f, Uu^Vud, Re, Uu^Uf, _f, _f, _f, Uu^Uf, Re, _f, _f, Re, _f, Re, _f, Uu^Vud, Re, _f, Re, Re, Re, Re, _f, Uu^Uf
"
[rule] # Make sure your castle is not converted
[rule] # Make sure your castle is not converted
old=Cud
new=Re, Uu^Vud, Uh, Uu^Uf
terrain=Cud
[/rule]
[rule] # Make sure cave walls are not converted
[rule] # Make sure cave walls are not converted
old=Xu
new=Re, Uu^Vud, Uh, Uu^Uf
terrain=Xu
[/rule]
[rule] # Make sure the keep is not converted
[rule] # Make sure the keep is not converted
old=Kud
new=Re, Uu^Vud, Uh, Uu^Uf
terrain=Kud
[/rule]
[rule] # Convert cave villages to stone villages
[rule] # Convert cave villages to stone villages
old=Vu
new=_f, Re, Uu^Vud, Uh, Uu^Uf # wmllint: ignore
new=_f, Re, Uu^Vud, Uh, Uu^Uf # wmllint: ignore
terrain=Uu^Vud
[/rule]
[rule] # Add stone villages
[rule] # Add stone villages
old=Uu
new=Uu^Vud
terrain=Uu^Vud
[/rule]
[rule] # Add roads
[rule] # Add roads
old=Uu
new=Re
terrain=Re
[/rule]
[rule] # Add hilly caves
[rule] # Add hilly caves
old=Uu
new=Uh
terrain=Uh
[/rule]
[rule] # Add a mushroom forest
[rule] # Add a mushroom forest
old=Uu
new=Uu^Uf
terrain=Uu^Uf

View file

@ -8,6 +8,7 @@
next_scenario=civil_disobedience
{SCENARIO_MUSIC "northerners.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
victory_when_enemies_defeated=no
[label]

View file

@ -8,6 +8,7 @@
next_scenario=a_strategy_of_hope
{SCENARIO_MUSIC "loyalists.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
victory_when_enemies_defeated=no
[story]
@ -265,15 +266,15 @@
message= _ "Today we may no longer be citizens of Wesnoth. I wish it could be otherwise, but we are now outlaws."
[/message]
{CHG_TYPE type=Footpad_Peasant Footpad}
{CHG_TYPE type=Outlaw_Peasant Outlaw}
{CHG_TYPE type=Fugitive_Peasant Fugitive}
{CHG_TYPE type=Thug_Peasant Thug}
{CHG_TYPE type=Bandit_Peasant Bandit}
{CHG_TYPE type=Highwayman_Peasant Highwayman}
{CHG_TYPE type=Poacher_Peasant Poacher}
{CHG_TYPE type=Trapper_Peasant Trapper}
{CHG_TYPE type=Huntsman_Peasant Huntsman}
{CHG_TYPE type=Footpad_Peasant Footpad chaotic}
{CHG_TYPE type=Outlaw_Peasant Outlaw chaotic}
{CHG_TYPE type=Fugitive_Peasant Fugitive chaotic}
{CHG_TYPE type=Thug_Peasant Thug chaotic}
{CHG_TYPE type=Bandit_Peasant Bandit chaotic}
{CHG_TYPE type=Highwayman_Peasant Highwayman chaotic}
{CHG_TYPE type=Poacher_Peasant Poacher chaotic}
{CHG_TYPE type=Trapper_Peasant Trapper chaotic}
{CHG_TYPE type=Huntsman_Peasant Huntsman chaotic}
# Changing the unit type clobbers its portrait pointer if the new
# type has a unit portrait. Make sure Baldras and Harper keep theirs.

View file

@ -8,6 +8,7 @@
next_scenario=unlawful_orders
{SCENARIO_MUSIC "wanderer.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
victory_when_enemies_defeated=yes
[story]
@ -69,7 +70,7 @@
side=3
canrecruit=yes
controller=ai
recruit=Orcish Grunt,Wolf Rider,Orcish Archer,Troll Whelp,Troll Grunt
recruit=Orcish Grunt,Wolf Rider,Orcish Archer,Troll Whelp
[village]
x,y=45,32
[/village]

View file

@ -8,6 +8,7 @@
next_scenario=hide_and_seek
{SCENARIO_MUSIC "knolls.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
victory_when_enemies_defeated=yes
[label]
@ -261,25 +262,25 @@
[/unstore_unit]
{NEXT i}
{CHG_TYPE side,type=3,Spearman Skeleton}
{CHG_TYPE side,type=3,Swordsman Deathblade}
{CHG_TYPE side,type=3,Pikeman Revenant}
{CHG_TYPE side,type=3,Bowman (Skeleton Archer)}
{CHG_TYPE side,type=3,Longbowman (Bone Shooter)}
{CHG_TYPE (side,type=3,Heavy Infantryman) Ghoul}
{CHG_TYPE (side,type=3,Shock Trooper) Necrophage}
{CHG_TYPE side,type=3,Mage (Dark Adept)}
{CHG_TYPE (side,type=3,White Mage) (Dark Sorcerer)}
{CHG_TYPE (side,type=3,Red Mage) (Dark Sorcerer2)}
{CHG_TYPE (side,type=3,Arch Mage) Lich}
{CHG_TYPE (side,type=3,Mage of Light) Necromancer}
{CHG_TYPE side,type=3,Cavalryman (Skeleton Rider)}
{CHG_TYPE side,type=3,Dragoon (Bone Knight)}
{CHG_TYPE side,type=3,Horseman (Skeleton Rider2)}
{CHG_TYPE side,type=3,Lancer (Bone Knight2)}
{CHG_TYPE side,type=3,Knight (Bone Knight3)}
{CHG_TYPE side,type=3,Lieutenant (Death Squire)}
{CHG_TYPE side,type=3,General (Death Knight)}
{CHG_TYPE side,type=3,Spearman Skeleton chaotic}
{CHG_TYPE side,type=3,Swordsman Deathblade chaotic}
{CHG_TYPE side,type=3,Pikeman Revenant chaotic}
{CHG_TYPE side,type=3,Bowman (Skeleton Archer) chaotic}
{CHG_TYPE side,type=3,Longbowman (Bone Shooter) chaotic}
{CHG_TYPE (side,type=3,Heavy Infantryman) Ghoul chaotic}
{CHG_TYPE (side,type=3,Shock Trooper) Necrophage chaotic}
{CHG_TYPE side,type=3,Mage (Dark Adept) chaotic}
{CHG_TYPE (side,type=3,White Mage) (Dark Sorcerer) chaotic}
{CHG_TYPE (side,type=3,Red Mage) (Dark Sorcerer2) chaotic}
{CHG_TYPE (side,type=3,Arch Mage) Lich chaotic}
{CHG_TYPE (side,type=3,Mage of Light) Necromancer chaotic}
{CHG_TYPE side,type=3,Cavalryman (Skeleton Rider) chaotic}
{CHG_TYPE side,type=3,Dragoon (Bone Knight) chaotic}
{CHG_TYPE side,type=3,Horseman (Skeleton Rider2) chaotic}
{CHG_TYPE side,type=3,Lancer (Bone Knight2) chaotic}
{CHG_TYPE side,type=3,Knight (Bone Knight3) chaotic}
{CHG_TYPE side,type=3,Lieutenant (Death Squire) chaotic}
{CHG_TYPE side,type=3,General (Death Knight) chaotic}
[store_unit]
[filter]
@ -348,25 +349,25 @@
[/unstore_unit]
{NEXT i}
{CHG_TYPE side,type=3,Skeleton Spearman}
{CHG_TYPE side,type=3,Deathblade Swordsman}
{CHG_TYPE side,type=3,Revenant Pikeman}
{CHG_TYPE (side,type=3,Skeleton Archer) Bowman}
{CHG_TYPE (side,type=3,Bone Shooter) Longbowman}
{CHG_TYPE side,type=3,Ghoul (Heavy Infantryman)}
{CHG_TYPE side,type=3,Necrophage (Shock Trooper)}
{CHG_TYPE (side,type=3,Dark Adept) Mage}
{CHG_TYPE (side,type=3,Dark Sorcerer) (White Mage)}
{CHG_TYPE (side,type=3,Dark Sorcerer2) (Red Mage)}
{CHG_TYPE side,type=3,Lich (Arch Mage)}
{CHG_TYPE side,type=3,Necromancer (Mage of Light)}
{CHG_TYPE (side,type=3,Skeleton Rider) Cavalryman}
{CHG_TYPE (side,type=3,Bone Knight) Dragoon}
{CHG_TYPE (side,type=3,Skeleton Rider2) Horseman}
{CHG_TYPE (side,type=3,Bone Knight2) Lancer}
{CHG_TYPE (side,type=3,Bone Knight3) Knight}
{CHG_TYPE (side,type=3,Death Squire) Lieutenant}
{CHG_TYPE (side,type=3,Death Knight) General}
{CHG_TYPE side,type=3,Skeleton Spearman lawful}
{CHG_TYPE side,type=3,Deathblade Swordsman lawful}
{CHG_TYPE side,type=3,Revenant Pikeman lawful}
{CHG_TYPE (side,type=3,Skeleton Archer) Bowman lawful}
{CHG_TYPE (side,type=3,Bone Shooter) Longbowman lawful}
{CHG_TYPE side,type=3,Ghoul (Heavy Infantryman) lawful}
{CHG_TYPE side,type=3,Necrophage (Shock Trooper) lawful}
{CHG_TYPE (side,type=3,Dark Adept) Mage lawful}
{CHG_TYPE (side,type=3,Dark Sorcerer) (White Mage) lawful}
{CHG_TYPE (side,type=3,Dark Sorcerer2) (Red Mage) lawful}
{CHG_TYPE side,type=3,Lich (Arch Mage) lawful}
{CHG_TYPE side,type=3,Necromancer (Mage of Light) lawful}
{CHG_TYPE (side,type=3,Skeleton Rider) Cavalryman lawful}
{CHG_TYPE (side,type=3,Bone Knight) Dragoon lawful}
{CHG_TYPE (side,type=3,Skeleton Rider2) Horseman lawful}
{CHG_TYPE (side,type=3,Bone Knight2) Lancer lawful}
{CHG_TYPE (side,type=3,Bone Knight3) Knight lawful}
{CHG_TYPE (side,type=3,Death Squire) Lieutenant lawful}
{CHG_TYPE (side,type=3,Death Knight) General lawful}
[store_unit]
[filter]

View file

@ -8,6 +8,7 @@
next_scenario=the_gray_woods
{SCENARIO_MUSIC "loyalists.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
victory_when_enemies_defeated=no
[story]

View file

@ -8,6 +8,7 @@
next_scenario=the_hunters
{SCENARIO_MUSIC "underground.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
victory_when_enemies_defeated=yes
[story]
@ -205,10 +206,7 @@
#
# Create a goodie for you to find
# This macro creates an moveto event that gives you an object
# Highlight it with a glowing circle that will remain even
# after the item is taken.
#
{PLACE_IMAGE scenery/circle-magic-glow.png 19 30}
{OBJ_HOLY_ANKH 19 30 ankh1}
#

View file

@ -8,6 +8,7 @@
next_scenario=glory
{SCENARIO_MUSIC "breaking_the_chains.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
victory_when_enemies_defeated=no
[story]
@ -124,8 +125,8 @@
[recall]
description=Harper
[/recall]
{LOYAL_UNIT 1 Outlaw Jingo ( _ "Jingo") 30 17}
{LOYAL_UNIT 1 Outlaw Majel ( _ "Majel") 32 17}
{LOYAL_UNIT 1 Outlaw 30 17 Jingo ( _ "Jingo")}
{LOYAL_UNIT 1 Outlaw 32 17 Majel ( _ "Majel")}
# wmllint: recognize Jingo
# wmllint: recognize Majel
[/event]
@ -154,7 +155,7 @@
message= _ "The garrison. The towers of Halstead are more than a garrison, nephew, they are a fortress. They used to protect this area from the enemies of Wesnoth; I never imagined they would house the enemies of Wesnoth."
[/message]
{LOYAL_UNIT 1 Dragoon Pitcher ( _ "Pitcher") 11 1}
{LOYAL_UNIT 1 Dragoon 11 1 (Pitcher) ( _ "Pitcher")}
# wmllint: recognize Pitcher
{MOVE_UNIT description=Pitcher 20 14}

View file

@ -8,6 +8,7 @@
next_scenario=epilog
{SCENARIO_MUSIC "battle.ogg"}
{VICTORY_AND_DEFEAT_MUSIC}
victory_when_enemies_defeated=no
[story]

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