This commit is contained in:
uid66289 2003-12-23 21:12:41 +00:00
parent 5c890a420f
commit 9b8c265f6f
43 changed files with 1125 additions and 630 deletions

18
MANUAL
View file

@ -122,8 +122,24 @@ Injured units in villages will recover 8 hitpoints every turn. Injured units tha
'Heal' prevents poisoning to cause damage while 'cure' removes poisoning. When poisoning is cured unit does not gain hitpoints on that turn.
Experience
Units are awarded experience for fighting, and after obtaining enough experience, they will advance a level, and become more powerful.
Multiplayer
There are a number of ways to play a multiplayer game of Wesnoth. The simplest way is a 'hotseat' game: Multiple players on one computer, each player takes the 'hotseat' when it is their turn. To start a 'hotseat' game, select 'Multiplayer' from the main menu -> 'Host Multiplayer Game'. After selecting your map, change all the names in 'Player/Type' to be human players or computer players (i.e. no 'Network Players'), and then start your game.
You can also play networked games of Wesnoth. One player 'hosts' a game on their computer, and other players join. Select 'Multiplayer' -> 'Host Multiplayer Game', and then change some of the 'Player/Type' entries to 'Network Player'. Once you start the game, it will wait for other players to connect. The other players must select 'Multiplayer' -> 'Join Game', and then type the host name or ip address of the player who is hosting the game.
Once all players have joined the game, the game will start. The player hosting the game must be able to receive connections on port 15000. The other players must be able to connect to port 15000 on a remote machine. You can only play network games against players who have exactly the same version of the game as you.
You can also play games over the Wesnoth server. Wesnoth has two public servers:
server.wesnoth.org: for releases of the game devsrv.wesnoth.org: for CVS versions of the game
To connect to a server, select 'Multiplayer' -> 'Join Game' and then type in the host name of the server. You must be using the exact version of the game the server is intended to be used with to be allowed onto the server.
Once you are on the server, you will be placed in the 'lobby' areas. The lobby is where you can see which other players are online, see the games currently open, and create new games. One player should create the game, and other players can join the game.
It is possible to simply observe an ongoing game, by joining the game as an 'Observer'.

View file

@ -4,6 +4,7 @@ Version 0.6:
* enemy units do not vanish anymore when enemy leader is killed
* new scenarios for 'Heir to the Throne' (Konrad's Tale):
* Isle of the Damned
* Crossroads
* Northern Winter
* The Lost General
* Hasty Alliance
@ -17,6 +18,7 @@ Version 0.6:
* Dwarven Doors
* Mountain Pass
* Valley of Death
* Ford of Abez
* support for multiple campaigns
* new campaign started: 'Hordes of the Undead'
* multiplayer improvements:
@ -39,6 +41,7 @@ Version 0.6:
* income calculations are now done at the beginning of each player's turn
* made it so units that can no longer advance have experience needed displayed as '-'
* allow use of escape to exit out of ok/cancel and yes/no dialogs with negative results
* double-click support in menus
* new units:
* Heavy Infantry
* Shock Trooper
@ -54,12 +57,14 @@ Version 0.6:
* reduced cost of Mage
* changed Mage attack to fire based
* 'Mage of Light' has now both cure and illumination
* changed Shaman slowing attack to 3-2 from 4-1, and reduced cost from 21 to 18
* Increased shaman slowing attack damage, decreased unit cost
* changed 'Red Mage' to neutral alignment
* removed 'Elvish Outrider' as evolution from Horseman
* Scout has been renamed to Cavalry
* Cavalry stats adjusted, increased cost by one, reduced movement by one,
reduced experience needed to advance
* Cavalry stats adjusted, increased cost by one, reduced movement by one, reduced experience needed to advance
* Horseman now needs more experience to advance
* 'Vampire Bat' now needs more experience to advance and costs more
* 'Mage of Light' attack is now a bit more powerful
* fixed max experience for Orcish Warlord.
* 'Blood Bat' unit description clarified
* Halberdier changed to 3rd level unit
@ -86,6 +91,10 @@ Version 0.6:
* fixed problem with stripping of non-latin characters at end of string in config files
* allow internationalization of traits
* made AI more intelligent
* scenario building:
* added [remove_shroud]
* added [allow_recruit]
* added [teleport]
* added in support for some special effects: flashing and scrolling/tremors
* added coding support for displaying different terrain images (particularly useful for villages) at different times of the day
* fixed minor bugs in unit configuration files for Elvish Sharpshooter and Fencer
@ -129,6 +138,7 @@ Version 0.6:
* added error logging and correction for combat related syncing errors
* client_type=ai in preferences-file make player join networked multiplayer games as AI player
* added some comments to code
* added icon to Windows distribution
Version 0.5.1:
* more and improved unit graphics and animations

2
configure vendored
View file

@ -1337,7 +1337,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
PACKAGE=wesnoth
MAJOR_VERSION="0"
MINOR_VERSION="6RC3"
MINOR_VERSION="6"
MICRO_VERSION=""
if test "x$MICRO_VERSION" = "x"; then

View file

@ -6,7 +6,7 @@ AC_INIT(wesnoth, 0.5, davidnwhite@optusnet.com.au, Battle for Wesnoth)
AC_REVISION($Version: 0.5$)
PACKAGE=wesnoth
MAJOR_VERSION="0"
MINOR_VERSION="6RC3"
MINOR_VERSION="6"
MICRO_VERSION=""
if test "x$MICRO_VERSION" = "x"; then

View file

@ -43,14 +43,17 @@
[race]
name=dwarf
num_traits=2
{DWARVISH_NAMES}
[/race]
[race]
name=orc
num_traits=2
{ORCISH_NAMES}
[/race]
[race]
name=goblin
num_traits=2
{ORCISH_NAMES}
[/race]
[race]
name=undead
@ -64,6 +67,7 @@
[race]
name=merman
num_traits=2
{MERMAN_NAMES}
[/race]
[race]
name=naga

View file

@ -63,7 +63,7 @@
id=intro_11
story="Hearing of the orders of Asheviere, Delfador entered the palace by stealth, and stole away Konrad, the youngest of Garard's nephews, saving him from death."
delay=4000
image=misc/story6.png
image=misc/story5.png
[/part]
[part]
id=intro_12

View file

@ -1,8 +1,8 @@
ggggggfffffffffffffggggtgggcs
fffffhfffggfftgggrgrffffggggc
ffffffggghggghgrrgfgrrfffgggf
ffthgggffgggtrrgggfftgrrrggff
fffgggfgfgCChCgghhgggffgfrggf
ffthgggffggggrrgggfftgrrrggff
fffgggfgfggghCgghhgggffgfrggf
fffgggffggtCC1gggggffffggrggf
fffffgggggggCCCggfffffffggrgg
ccccftffffgghhgffffftffcccrgt
@ -15,12 +15,12 @@ sscccchhhtfmfhhhfgcccsstssscr
ccccgthmmmhhhmmfffcsssssssccr
tcggggghmmmtmmmhhggcccccsscrg
ccsggggfffhhhmmmthgggcgcsccrt
gggtggfffhhmmmmhhfffggccccRhh
gggtggfffhhmmmmhhfffggccccrhh
gggggfffhmmmhmmmmmfffgtcc//gf
chhgggfffmhhhhmmhffffRc//cgtf
chhgggfffmhhhhmmhffffrc//cgtf
sccfgfffhhhmmmhhhhffgr/cccgff
ccgggggfffffhhfffffrrggccgggf
tggggffffCfhfmfrtrrggtgcggfff
ccgggggffggfhhfffffrrggccgggf
tggggfffgCgfghgrtrrggtgcggfff
gggffhhfCC2Chhrfrgggggcctggfh
ggtggftfhgCCrrrhhffccccsscghm
ggggffhhggggggggmmcccssssschm

41
data/maps/undmap2 Normal file
View file

@ -0,0 +1,41 @@
ggggggffggggggggtDvcsssggggggggggggggggggggggggg
gggggfffffggggggRRRcsgcggggggggggggggggggggggggg
ggvggfggfffgggggRRR\cggggggggggggggggggggggggggg
ggggCCgggffggggcRc\Rggggggggtggggggtgggggggggggg
ggffC1Cggggggtcc|ccgRRgggggggggggtgggggggggggggg
gggfffCffggghhggccggRRgggggggggggggggggggggggggg
ggggfffffgghhggccggggRRggggggggCCCgggggggggggggg
ccggggggghhggccgggggggRtgggggggC3ggggggggggggggg
ccccgcchhgcccggggggggrrrggggggghCggggggggggggggg
gvccccctgccggggggggggggrrrgggggtgggggggggggfffff
ggggggcccggggvgggggggmggggrggggggggggggggggggggg
gggggggggggggggggggmhhhgggrggggggggggggggggggggg
ggggggvgggggggggghghhfgffgrrgvgggggggggggggggggg
gggggggggggggggggggffffffhgrggggggtggggggggggggg
gggggggggggggggggffffhfghhmrfggggggggggggggggggg
gggggggtgggggggggffhfffghgggrrgggggggggggggggggg
ggggggggggggggggggfffffvggggvgrrgggvgggggggggggg
ggtgggggggggggggggggfggggggggggrgggggggggggggggg
gggggggggggggggggggggggggggggggrggggggCggggggggg
ggggggggggDggtgggggggggggggggggrgggggCCCgggggggg
ggggggggggggmumugggggggggggggrrvgggggC2ggggggggg
gggggggggggguuuuuugggggggggrrgggggggggCCgggggggg
ggggggggggmguuDumuugmggggrrggggggggggggggggggggg
gggtggggggmmmuuuumummrrrrggggtgggggggggggggggggg
ggggggggggguuuugmggrrgggggggggggggggggggggghfggg
gmggggggDgggggDgggggggggDcccggggggggvgggggfghggg
hhfhhggggggggggggggggggggggcc/ggtgggggggggfhfhff
tmmgggggggggghmmgfmggggtggggcgccccggggggtggtffgf
hhghhgggggggggfghfgmgfgggggggggcscccggggggffhggg
ggggggggggggggggfgggtggggggggggcsscccgggggfghgfg
ggggggtgggggggggmggggggggggggtgccsscgggggggggggg
ggggggggggCCgtggggggggggggggggggcccggggggggggggg
gggggggggm4CCggggggggggggggggggggggggggggggggggg
ggggggggggCggggggggggggtggggggggggggggggtggggggg
gggggggggggggggggggggggggggggghgffffgggggggggggg
ggggggtggggggggggggggggggggghgffffgghggggggggggg
ggggggggggggggggggggggggggggfffmffffghhgggggtggg
ggggggggggggggtgggggggggggffffghfggffmfffggggggg
ggggggggggggggggggggggggggggfhfggthggggtgggggggg
ggggggggggggggggggggggggggfffghhggggggggggtggggg
gggggggggggggggggggggggggggggggggggtgggggggggggg

View file

@ -7,3 +7,15 @@ female_names="Vil-Gandra,Legaraclya,Tin
male_names="Cunry,Bluran,Marcyn,Addraenvan,Gudd,Aetheollyn,Rhenyc,Gyllyn,Dircyn,Owaecyn,Blollyn,Glyran,Vygwyn,Yracyn,Rhaecyn,Rheor,Aethagwyn,Vennyn,Yryrcyn,Glynvan,Ryddry,Saemyr,Dibryn,Owuddry,Gloddyn,Gladoc,Yroddry,Bladoc,Addreonyc,Rheoran,Tiryn,Glynry,Rhaemyr,Gweddyn,Cemyr,Mimyr,Caraennyn,Careorraent,Gwor,Cin,Goc,Glydd,Oweomyr,Carraent,Gubryn,Gannyn,Aethadry,Aethonnyn,Blygwyn,Laellyn,Carudoc,Ladoc,Blercyn,Carocyn,Aetheoc,Rumyr,Gaercyn,Careogwyn,Caryn,Careddry,Owarcyn,Daeddry,Mubryn,Gwymyr,Blaedry,Owaryn,Addreddry,Owaryn,Taedoc,Addraecyn,Morcyn,Vugwyn,Rhenry,Blullyn,Dycyn,Daeddry,Blydd,Seddyn,Teoddyn,Gwaec,Rycyn,Rhobryn,Gwyddry,Tudoc,Roddyn,Oweran,Ceoddyn,Blubryn,Glonry,Sedry,Owecyn,Blydd,Owinyc,Gwuran,Yryllyn,Tunvan,Gwan,Carac,Cebryn,Murcyn,Ronry,Geodry,Midry,Gweogwyn,Aethec,Blinvan,Rhyrraent,Aethaeryn,Seoddry,Caradoc,Aethenvan,Sanyc,Aethaec,Gwumyr,Teorcyn,Lenvan,Rabryn,Yrynyc,Murcyn,Mydoc,Yrannyn,Rhobryn,Oworraent,Owac,Vuddyn,Gwellyn,Glaercyn,Yregwyn,Oweorcyn,Addrenyc,Rhaedoc,Carocyn,Rhonvan,Owercyn,Dadd,Corcyn,Addrocyn,Yreryn,Tinry,Rharcyn,Gweddry,Rar,Addroryn,Tabryn,Blinvan,Addrunvan,Derraent,Leogwyn,Virraent,Gwudoc,Lercyn,Glarraent,Caren,Liryn,Gwegwyn,Ligwyn,Gwybryn,Lin,Veoddyn,Owodd,Cariddry,Glonvan,Gymyr,Aethuc,Careonvan,Aethudry,Addreoddyn,Gweocyn,Vonry,Rhygwyn,Rhyrcyn,Rhur,Deonyc,Veocyn,Siryn,Teobryn,Yraec,Gweodry,Caroran,Caraedry,Vaennyn,Moddry,Vaeddyn,Caredd,Siddry,Aethyr,Aethacyn,Rheorraent,Rhubryn,Addrurcyn,Sodry,Rhunyc,Gweodd,Reoddyn,Vinyc,Glydoc,Sodd,Dyddyn,Dinnyn,Ruddry,Addraryn,Gwollyn,Rurcyn,Glinry,Blyr,Aetharcyn,Blybryn,Addraercyn,Cararyn,Carygwyn,Menvan,Caric,Turraent,Oworcyn,Gwennyn,Meorraent,Ludoc,Aethoddyn,Glyc,Oworan,Simyr,Aethugwyn,Gwynnyn,Glunry,Cynyc,Addregwyn,Maddyn,Gecyn,Deollyn,Gwidoc,Meon,Goc,Sudd,Yredd,Addredry,Caeran,Vobryn,Saellyn,Surcyn,Taercyn,Labryn,Yran,Ceomyr,Caroddyn,Deodd,Glunvan,Gwoddyn,Addrocyn,Aethydry,Carygwyn,Aethynyc,Aetheorcyn,Taec,Rocyn,Laellyn,Tinvan,Owaedry,Teor,Ceonnyn,Rynry,Lunnyn,Myn,Rynnyn,Dac,Owaddyn,Vyc,Bliddry,Gur,Gwumyr,Owinvan,Maennyn,Veogwyn,Blenvan,Owur,Curyn,Gleoddyn,Aethec,Aethanry,Lec,Blanry,Vaddyn,Modd,Gaddry,Yrinvan,Blidd,Rheran,Veomyr,Owadd,Saran,Gullyn,Owollyn,Aethiddry,Gloddry,Carullyn,Secyn,Manyc,Romyr,Vinvan,Careoryn,Gegwyn,Gleddry,Tennyn,Manry,Syran,Gor,Ceoddry,Aethobryn,Yrunvan,Yraryn,Oweor,Daellyn,Mec,Lannyn,Owyran,Lemyr,Rhaedoc,Yrullyn,Syryn,Bludry,Bledoc,Addroran,Caregwyn,Tuddry,Careobryn,Addrenyc,Aethellyn,Veodry,Meonnyn,Myrraent,Addraer,Aethun,Coc,Sarraent,Rheollyn,Reodry,Blucyn,Caedry,Mudoc,Sydd,Carygwyn,Cadry,Gwucyn,Ten,Ron,Lan,Owoddry,Owugwyn,Tarcyn,Owuddyn,Rhenvan,Tanry,Aetheonyc,Caraddry,Blaec,Yrunnyn,Glircyn,Aetherraent,Rheoddyn,Cennyn,Ginvan,Gweoran,Gumyr,Blymyr,Rygwyn,Gagwyn,Addrynvan,Rherraent,Yrymyr,Laran,Rubryn,Ceoc,Gwodd,Gwadoc,Gwenyc,Corcyn,Gaebryn,Gwydoc,Yrumyr,Caregwyn,Rheollyn,Rhollyn,Gliddyn,Owedry,Aethercyn,Caryn,Saec,Vogwyn,Lorraent,Mygwyn,Cac,Mac,Tarcyn,Deoran,Tenvan,Ronry,Gwaec,Seorcyn,Soran,Luddry,Addreran,Yranvan,Gwidoc,Ceonry,Glacyn,Varcyn,Vyrcyn,Terraent,Blillyn,Run,Ligwyn,Rhyllyn,Sercyn,Denvan,Convan,Owogwyn,Gar,Glumyr,Rheodd,Cicyn,Blac,Daedoc,Gweodoc,Addreorcyn,Caercyn,Rhynyc,Lunnyn,Dadoc,Sellyn,Aethaeran,Gydoc,Sodry,Tyddyn,Rhaerraent,Gan,Lunvan,Saercyn,Gaedry,Rhodry,Taenvan,Radd,Caror,Monry,Mugwyn,Meollyn,Glun,Moran,Rybryn,Aethibryn,Gwaec,Addryllyn,Caebryn,Cinry,Ranvan,Blemyr,Addriddyn,Rhugwyn,Gwycyn,Blebryn,Yranvan,Teddyn,Vaedry,Addreoddry,Taedd,Cyryn,Yrirraent,Aethercyn,Middry,Lurraent,Bleollyn,Aethircyn,Ven,Modd,Ceoryn,Carercyn,Lonnyn,Car,Taemyr,Owidry,Geddyn,Aethunry,Yreddyn,Addribryn,Suc,Gleran,Addredry,Cubryn,Veocyn,Caryn,Demyr,Tudd,Romyr,Lenvan,Glillyn,Sennyn,Rhanry,Blennyn,Gwaeddyn,Saenvan,Todd,Tegwyn"
female_names="Jongwen,Dullyra,Alena,Nwryan,Elycla,Sulonna,Bruryan,Caengwen,Nwvyan,Lwcla,Jarka,Rwlla,Alwcla,Breall,Nylyan,Cylyan,Syssa,Jolla,Gwoll,Lynoic,Elwllyra,Clarka,Clwlla,Cira,Lylla,Elavyan,Meroniver,Lwlla,Reacla,Neallyra,Mudda,Brirka,Alyryan,Reangwen,Sorka,Nalyan,Ysilyan,Realla,Lyna,Rwllyra,Elyrka,Nera,Gwwcla,Caella,Jevyan,Gwwvyan,Nuvyan,Sona,Merolla,Nyssa,Sera,Lwryan,Ysell,Elulonna,Raerka,Saell,Dwnoic,Clissa,Medda,Lessa,Rwllyra,Ledda,Jeabrylla,Brera,Meanoic,Lelyan,Clobrylla,Brellyra,Nucla,Jalyan,Dydda,Cyvyan,Revyan,Nyll,Clillyra,Langwen,Jyvyan,Saellyra,Sera,Sara,Rucla,Ryngwen,Cicla,Lolonna,Lycla,Merydda,Naecla,Aleara,Rwlla,Curyan,Lina,Mylla,Rarka,Merubrylla,Clwdda,Gwerka,Saessa,Brungwen,Jonoic,Elalonna,Elwlonna,Lidda,Dyssa,Cassa,Relyan,Gworyan,Dwdda,Alengwen,Lill,Raebrylla,Elwra,Joll,Brerka,Mengwen,Caevyan,Mwnoic,Nivyan,Merina,Rilonna,Gwangwen,Gwussa,Lealonna,Cwdda,Jaerka,Jassa,Sassa,Elerka,Elaedda,Sull,Elyngwen,Mwbrylla,Livyan,Maecla,Cwlonna,Ysodda,Elurka,Clylla,Clilyan,Daenoic,Naell,Brynoic,Syssa,Nulla,Merebrylla,Breabrylla,Call,Jycla,Dulonna,Gwirka,Dollyra,Alybrylla,Elaell,Jura,Dalla,Mereangwen,Cinoic,Naell,Ysyrka,Alearka,Jiryan,Ysonoic,Ysycla,Merilyan,Brorka,Jull,Alwllyra,Cealonna,Gwonoic,Gwobrylla,Brellyra,Curyan,Moniver,Cleall,Elara,Lylyan,Daelyan,Relyan,Sallyra,Cleacla,Alalonna,Elealla,Ysyssa,Clacla,Rilyan,Jeniver,Aleaniver,Meraelyan,Gweacla,Jwll,Elealla,Lirka,Milonna,Lealyan,Messa,Nabrylla,Lollyra,Merona,Meressa,Bravyan,Elaevyan,Ceryan,Mereaniver,Ysaenoic,Gwaessa,Alearka,Myra,Nobrylla,Jona,Jyrka,Cyniver,Lulyan,Rerka,Swlla,Nybrylla,Yswniver,Dangwen,Gwicla,Yseacla,Eleanoic,Mwngwen,Neavyan,Larka,Brealonna,Gwycla,Aluryan,Meacla,Brona,Jyvyan,Brwra,Coryan,Cudda,Elivyan,Nyryan,Alyra,Alilonna,Merana,Merylyan,Cydda,Diniver,Merolyan,Myll,Rwlonna,Gweacla,Ysylla,Alaebrylla,Naebrylla,Clenoic,Daengwen,Reana,Alynoic,Jissa,Myvyan,Brora,Alaryan,Rengwen,Clavyan,Ryna,Jull,Brollyra,Brobrylla,Ysedda,Alingwen,Ysell,Jealla,Liryan,Merurka,Elallyra,Clinoic,Ninoic,Merudda,Gwongwen,Jacla,Nungwen,Clalla,Gwona,Gwaera,Rora,Ninoic,Brycla,Clwvyan,Clurka,Clill,Merella,Ysylyan,Rwdda,Lelonna,Yselonna,Claella,Clallyra,Dassa,Clealyan,Merydda,Cibrylla,Deanoic,Claenoic,Rassa,Gwwvyan,Cucla,Lwnoic,Aluniver,Dwbrylla,Dybrylla,Merissa,Ysealyan,Clydda,Maeniver,Dallyra,Nessa,Gwydda,Merall,Clill,Clungwen,Ysongwen,Cucla,Jora,Elyniver,Meana,Sallyra,Ysinoic,Clara,Meradda,Dwra,Nolla,Nera,Merealonna,Clibrylla,Alaeniver,Nonoic,Jacla,Rara,Cwngwen,Dara,Ysura,Sulonna,Dissa,Clona,Ralonna,Cwvyan,Mulyan,Lungwen,Mwlyan,Meralonna,Lerka,Noryan,Curyan,Mealyan,Nera,Sylyan,Merivyan,Lwnoic,Sanoic,Ysanoic,Cyllyra,Ysyrka,Cleanoic,Bronoic,Devyan,Ysaerka,Rwngwen,Nwllyra,Ysycla,Swngwen,Nyvyan,Cleana,Merylyan,Alwlyan,Lassa,Locla,Meniver,Laenoic,Mullyra,Judda,Mycla,Brassa,Ysacla,Elacla,Muryan,Clollyra,Ysanoic,Senoic,Rwngwen,Merwlla,Brera,Saeniver,Deassa,Meranoic,Bronoic,Aleacla,Mavyan,Alora,Jarka,Elaelonna,Merwryan,Lengwen,Alilonna,Meangwen,Claelyan,Silonna,Ysealyan,Alora,Revyan,Cera,Merwnoic,Dicla,Laeryan,Alubrylla,Lycla,Mavyan,Jull,Syllyra,Swlyan,Elaessa,Caena,Cluvyan,Breryan,Laeniver,Jorka,Raera,Gwedda,Lodda,Brell,Rybrylla,Meanoic,Niryan,Cylla,Bricla,Cudda,Alabrylla,Nealonna,Alolla,Rirka,Jyniver,Elearka,Jaevyan,Melonna,Alengwen,Sura,Cissa,Mossa,Norka,Nangwen,Saerka,Elycla,Della,Merallyra,Elyllyra,Elenoic,Alussa,Elwngwen,Calla,Merina,Jynoic,Ysealonna,Sussa,Sulyan,Mossa,Dissa,Daedda,Merinoic,Searka,Rella,Sira,Clillyra,Alwna,Lulla,Nulyan,Jwlyan,Swnoic,Clongwen,Alalla,Siryan,Braedda,Jealla,Gwwna,Gwullyra,Merengwen,Molyan,Dwna,Lunoic,Brealla,Ruryan,Alabrylla,Deassa,Jovyan,Subrylla,Breana,Ysura,Alolonna,Nealla,Nessa,Swvyan,Cora,Luryan,Jana,Meraecla,Jeanoic,Sena,Alolla,Jaena,Julonna"
#enddef
#define MERMAN_NAMES
male_names="Neptune,Poseidon,Triton,Oceanus,Nereus,Pontus,Phorcys,Scylla,Thaumas,Tangaroa,Tangaloa,Kulullu,Nethuns,Proteus,Okeanos,Maui,Ryujin,Njord,Barinthus,Llyr,Lir,Aigaion,Melicertes,Dylan,Tanaoa,Tikitiki,Typhon,Alastyn,Apam,Natat,Vourukasa,Vodnik,Faro,Nun,Habaek,Apsu,Abzu,Absu,Sisiutl,Atlaua,Atlahua,Jamm,Vizi,Ember,Toniwha,Apalala,Dhakhan,Nechtan,Elcmar,Mimir,Enki,Makara,Aremata,Rorua,Popoa,Tinirau,Tini,Rau,Kinilau,Sinilau,Tinilau,Nudimmud,Tagaloa,Labuna,Jin,Laut,Raja,Ikatere,Nuada,Nudd,Ludd"
#enddef
#define ORCISH_NAMES
male_names="Erang,Bugdish,Eradash,Vrigor,Gruol,Gugdush,Gort,Grunk,Rurag,Poshnak,Goshnak,Rarbag,Prirbag,Biol,Vridish,Erok,Grurt,Vrorg,Grirk,Rodush,Pruk,Hunk,Goshnak,Bogor,Varbag,Hort,Graol,Gork,Vrugdush,Gagor,Gadash,Prong,Prodush,Pidush,Grorag,Grolg,Pung,Hurbag,Bink,Grort,Erugar,Vilo,Pagor,Vak,Prarg,Hurag,Eragdush,Gulg,Pragdush,Grugdush,Erirg,Gridush,Hulo,Vrogar,Eronk,Erulo,Rok,Prurk,Prurg,Grulo,Prirg,Prugar,Bogar,Prudish,Prunk,Groshnak,Eronk,Prilg,Erik,Rodush,Vulo,Pork,Prilo,Horbag,Bong,Prarag,Vourk,Vrik,Boshnak,Prong,Rugdish,Erulo,Palo,Vrik,Hak,Vrurg,Gurbag,Vrang,Pilg,Bogdush,Erurag,Vadush,Eruurk,Vank,Ruk,Vrogor,Vrurg,Bagar,Vink,Prinak,Vraurk,Prarbag,Hidush,Ruol,Grugdish,Prodash,Gridish,Pulo,Bik,Rinak,Halg,Erudish,Pirbag,Gank,Galo,Burk,Hunk,Bagdish,Pink,Bort,Gridash,Valo,Eruol,Radash,Erarg,Vigor,Vudish,Vak,Grirg,Groshnak,Pronak,Punk,Grigar,Prolg,Pigdush,Ging,Vong,Hulg,Bashnak,Vork,Ruol,Vogdish,Rinak,Gagar,Borg,Virt,Bunak,Hushnak,Ganak,Barbag,Vralo,Hidash,Vrirt,Gurt,Erarag,Rugar,Pridish,Prugdish,Eruol,Vriurk,Grudash,Vurg,Eriol,Bok,Granak,Vrodish,Hoshnak,Grogdish,Bork,Hushnak,Hagdush,Parag,Eriurk,Vuk,Rirg,Rok,Bolg,Vrishnak,Vilo,Vragar,Budush,Gruk,Bidish,Praurk,Gunak,Hinak,Hak,Grork,Grong,Erogdish,Rolo,Vadash,Pulg,Vilg,Vrodash,Vurg,Gink,Grilg,Birt,Biol,Vrudish,Hagor,Vragdush,Vogor,Vulg,Erong,Rashnak,Garag,Grink,Vogdish,Badush,Rodish,Gradash,Erart,Purbag,Pralo,Grigar,Badush,Priurk,Rink,Puurk,Vonak,Eradish,Vridash,Podush,Pruurk,Pronk,Hiol,Gushnak,Gugdish,Hashnak,Eragor,Rarbag,Gagdush,Granak,Budush,Vilg,Hort,Pulg,Gaol,Podash,Punak,Gogdush,Porg,Pogdish,Prigar,Gushnak,Prarbag,Gagar,Bogor,Gogdish,Eranak,Gralo,Palg,Virag,Grishnak,Rank,Hing,Grak,Pirbag,Prarag,Virag,Hink,Buk,Burg,Prodish,Prashnak,Ragar,Purag,Bugdish,Vigdish,Grogdish,Huol,Hank,Gruurk,Rak,Rudash,Ginak,Huol,Erigdush,Vraurk,Prool,Pragor,Grirag,Vishnak,Grorg,Eronk,Vraurk,Erishnak,Erunk,Bilo,Hodush,Vrork,Eriurk,Vrarbag,Hagar,Vorg,Pidush,Pigdish,Bidush,Prashnak,Virag,Bunk,Vrurg,Hong,Rik,Hirg,Rushnak,Gink,Hadish,Vilo,Vrork,Rak,Huk,Ronak,Vrulg,Vilg,Rogdish,Prodash,Erirt,Gragar,Gigor,Burag,Priol,Rodush,Rirg,Vruurk,Barag,Podish,Vunak,Hork,Grilg,Bogdish,Vadash,Raurk,Puurk,Rark,Ronak,Grogar,Hashnak,Bink,Grodish,Hidish,Bagar,Erinak,Vrugdush,Rarag,Eragdish,Hirag,Vrolo,Hogor,Erirbag,Vruol,Gulg,Pralo,Hogar,Hadush,Budush,Hadash,Gigor,Goshnak,Hugor,Hudash,Biol,Vrurg,Pradish,Pralg,Bilg,Vrart,Prunak,Prigdish,Vrung,Vrugdush,Grudash,Ging,Puk,Graol,Prigor,Buurk,Pagdish,Hirg,Prang,Eragor,Gralg,Prart,Vrolo,Prark,Pashnak,Pradish,Vilg,Pulo,Gunak,Paol,Gridash,Erirag,Bart,Burag,Vrinak,Vushnak,Prilo,Vragor,Rigor,Bung,Prourk,Vrork,Burg,Erugdush,Bogdish,Prurg,Prigor,Binak,Vadish,Grilo,Ruol,Vrodish,Pinak,Pradish,Eragor,Higdush,Parag,Pink,Vrong,Port,Bok,Porbag,Grilo,Bung,Grugar,Rak,Gulo,Grork,Bik,Grodish,Polg,Pung,Grarbag,Vurg,Vurbag,Pung,Prolo,Voshnak,Ruk,Vigdish,Vradash,Vrarg,Gong,Gragor,Varbag,Erogdush,Erorbag,Bidish,Prirt,Hadush,Rirk,Vrurt,Hing,Gronk,Rung,Girt,Gronk,Vigar,Prugar,Raol,Eronk,Hurk,Purg,Hilg,Vrudish,Grurk,Gigor,Grurg,Polg,Erurag,Erudush,Vadush,Vrulg,Varag,Huurk,Vadush,Grok,Rank,Bashnak,Praol,Vrarg,Grigor,Hank,Hool,Rang,Grolg,Hudish,Gashnak,Ragdish,Pidush,Pulg,Vring,Vurag,Vrurg,Rilg,Pigdush,Hagor"
#enddef
#define DWARVISH_NAMES
male_names="Althaas,Glamcatus,Trithaithis,Gomdrol,Andurus,Pelaithol,Trithaithus,Andris,Trithatsol,Gomcatis,Pelcatol,Augcatil,Alating,Augaithing,Anthaas,Gomaithsol,Trithaithas,Aigdris,Althalos,Analil,Trithdurol,Glamcatil,Augthail,Trithduril,Dulthalos,Glamthasol,Aldrsol,Glamaithol,Glamalil,Analus,Nardril,Augating,Dulaithsol,Aldrlos,Alalus,Aigcatsol,Ancatas,Trithdris,Pelatol,Aigthasil,Anthais,Narcatis,Trithatil,Aigaithing,Althail,Trithaithil,Naraithol,Duldrlos,Gomatas,Alcatis,Naraithsil,Althalos,Aigdursol,Glamalsil,Nardrus,Aigalis,Aldurlos,Augcatsil,Aigthaing,Augduril,Aigaithas,Anthais,Glamthaas,Dulcatsol,Gomatil,Gomcatlos,Augdrsil,Trithdril,Duldrsil,Duldrol,Peldrsol,Pelalsol,Gomthaas,Dulcatsil,Aigcating,Aldril,Glamcating,Anatsol,Augdris,Anthasol,Glamcatsil,Aldras,Aigatsol,Naraithol,Anthaus,Gomdrsil,Pelalis,Gomatlos,Narcating,Trithdrlos,Aigdrlos,Narcatsil,Glamdras,Aigthaing,Gomcatil,Andurus,Pelthail,Triththaus,Augalas,Alalol,Aigalas,Pelatis,Anating,Alaithsol,Andrus,Aigalsil,Dulatil,Aigdris,Augatsil,Glamduring,Trithduril,Trithdrsol,Alalus,Glamatus,Aldrol,Glamdril,Pelcatsil,Glamaithis,Trithdring,Peldril,Trithdurus,Gomaithil,Trithcatsol,Glamdrsol,Augthais,Dulaithlos,Althasil,Aigaithil,Andrlos,Dulatil,Dulalas,Dulatsol,Analol,Trithcatlos,Althasol,Alcatis,Glamduril,Peldursol,Pelalus,Glamthaas,Aldurol,Aigatsil,Aigatus,Trithduril,Pelaithsol,Aigcatis,Andursol,Naralsil,Althaol,Aldrsol,Dulalas,Triththaas,Augatol,Pelaling,Dulcatlos,Augduril,Glamthaol,Ancatus,Augcatol,Peldrus,Pelatil,Gomcatil,Anallos,Anaithing,Naraithsil,Aldris,Gomdris,Andril,Naratsil,Aigcating,Triththaas,Narduril,Aigdurlos,Aigaithol,Glamaithol,Pelatil,Nardris,Augthaol,Augatol,Glamallos,Anthaing,Aigcatis,Pelthasil,Dulcatil,Dulatol,Dulduring,Alalil,Peldrus,Gomdursil,Nardras,Peldril,Gomcatlos,Gomalis,Glamthaus,Duldurus,Dulcating,Anatol,Augdrsil,Analsil,Trithdrus,Augaithus,Trithaithsol,Aigcatus,Augaling,Alating,Glamatil,Anaithus,Gomatis,Augdris,Pelaithing,Augaithing,Gomdursol,Naraithus,Trithatsol,Ancatil,Glamaithil,Augdurus,Gomalus,Aigduras,Nardrol,Nardurol,Pelalil,Gomalil,Aigatis,Analil,Dulthaus,Gomaithil,Alduras,Trithduril,Ancatol,Alduras,Pelduril,Narcatsol,Pelating,Dulcatsil,Augatol,Glamthasil,Gomthasol,Naraithsil,Alatsil,Dulcatol,Gomthalos,Aigaling,Aigcatas,Pelalus,Augcatsil,Trithatas,Aigthais,Gomaithas,Alcatsil,Ancatus,Pelatis,Ancatas,Dulating,Gomdras,Naraithsol,Augcatis,Alaithis,Pelalsol,Duldursil,Pelcating,Dulaling,Gomating,Aigaithol,Alaithas,Peldras,Triththaing,Augdurol,Augaithas,Augcatsil,Glamdrlos,Peldurol,Aigdris,Pelaithas,Augcatas,Alalas,Anthaing,Naratlos,Augdursol,Gomdril,Dulcatlos,Anthasil,Triththasol,Naralus,Pelthaas,Augcatsil,Anaithis,Andurus,Gomdring,Glamduras,Pelalsil,Augthalos,Augduras,Pelaling,Gomalis,Augalol,Gomdris,Glamalis,Augdrus,Alatlos,Trithdril,Augthalos,Glamdril,Aigatlos,Alatas,Pelaithsol,Anthaus,Trithdril,Aldrsol,Triththail,Glamaithsol,Augduring,Aigthaus,Anaithsil,Pelatus,Naratol,Glamalsil,Trithcatus,Trithatil,Anallos,Augdras,Trithaithsil,Narduril,Dulatsol,Naralus,Narcatol,Alcatlos,Trithalol,Dulthasil,Andrus,Pelduring,Naraithil,Aigatsil,Trithdurlos,Augdursol,Trithaithol,Gomatol,Aigcatas,Pelcatlos,Glamduris,Anaithas,Peldurus,Glamduris,Naralil,Trithdursil,Pelthasil,Gomatis,Aldril,Augatol,Anaithus,Anatsol,Trithaithlos,Duldrus,Narduras,Dulaithlos,Duldris,Dulaithsil,Anthais,Gomduris,Narthalos,Ancatus,Anduril,Alaithol,Aigalis,Trithaithas,Aigcatil,Trithaithil,Naraithing,Augatsol,Trithaithol,Dulalsil,Dulthasol,Glamcatas,Glamthaol,Gomaithsol,Dulaithing,Naratlos,Naraithol,Gomthasol,Ancatas,Aigcatsil,Pelduris,Trithdrus,Andurus,Trithdring,Glamthaas,Aigcating,Nardrsol,Glamaithol,Dulaithsol,Althaus,Augduras,Aigaithas,Gomdurlos,Glamalus,Gomdrsil,Trithdrol,Pelating,Pelatus,Aigdrsol,Trithdurol,Glamaling,Dulduras,Dulating,Naraithing,Dulalis,Alaithus,Gomdurus,Glamcatus,Trithduring,Anatis,Anaithsil,Glamduril,Gomdursol,Narcatol,Trithaithis,Naratlos,Nardring,Aigalol,Althail,Anatas,Anthasol,Aigatus,Dulaithil,Althalos,Aldring,Glamalil,Anating,Aigdring,Duldril,Andurol,Pelaithsil,Gomdurus,Gomcatil,Glamthaas,Alalsol,Augdurus,Trithduril,Anthaol,Augalas,Pelcatol,Nardrsil,Alatil,Glamdrsol,Alaithlos,Pelatsil,Gomdurus,Dulatus,Alalsol,Glamaling,Dulatus,Alcatil,Aigthaus,Duldril,Pelaithlos,Pelaithis,Dulatil,Trithalis,Naraithol,Pelating,Augcatol,Gomatis,Andrus,Pelduris,Aigdrsil,Alatlos,Augdrsil,Anduril,Gomaithol,Glamdursol,Trithaithil,Gomdril,Glamcatil,Trithdrus,Naralas,Dulatol,Anaithil,Anatol,Augating,Peldursol,Narcatis,Glamatus,Aigaithas,Aigatas,Trithatlos,Gomatil,Gomthalos,Dulaling,Aigatsil,Augcatus,Trithaithus,Gomcatlos,Aigaithol,Naratsil,Narthaol,Narcatol,Augatlos,Pelaithil,Gomaithsol,Augaithsil"
#enddef

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
[scenario]
name="The Bay of Pearls"
map=map2
turns=28
turns=24
{DAWN}
@ -507,6 +507,14 @@ The main cage where they keep most of the mermen is in the south-east!"
image=galleon.png
[/item]
#if victorious, the player can henceforth recruit mermen
[event]
name=victory
[allow_recruit]
type=Merman
[/allow_recruit]
[/event]
#define BAY_OF_PEARLS_VICTORY
[message]
id=msg3_16

View file

@ -108,7 +108,7 @@ Defeat:
[/recall]
[message]
id=msg1b_1
description=Delfaldor
description=Delfador
message="We should be able to board a ship at Blackwater Port, but it seems the Orcs are heading there too. One of my old apprentices has settled in these lands - I am sure he will help us!"
[/message]
[message]

View file

@ -1,8 +1,8 @@
[scenario]
name="Brother Against Brother"
id=Brother_Against_Brother
id="Brother_Against_Brother"
map=undmap1
turns=32
turns=28
{DUSK}
@ -18,7 +18,7 @@
{MORNING}
{AFTERNOON}
next_scenario=Skull_Agarash
next_scenario="Skull_Agarash"
music="wesnoth-2.ogg"
@ -49,6 +49,9 @@ Defeat:
description=Nati Ha'atel
side=2
canrecruit=1
#ifdef HARD
recruit=Dark Adept,Ghost,Blood Bat,Skeleton,Boneshooter
#else
recruit=Dark Adept,Ghost,Walking Corpse,Vampire Bat,Skeleton,Skeleton Archer
#ifdef EASY
gold=120
@ -68,32 +71,32 @@ Defeat:
name=start
[message]
id=und1_1
id=msg2_1_1
speaker=narrator
message="As the sun set over a land far removed from the war that was happening in Wesnoth, a new war was brewing, between brothers..."
[/message]
[message]
id=und1_2
id=msg2_1_2
description=Gwiti Ha'atel
message="Ah, hated brother mine. Look well upon the setting sun, for you shall not live to see another."
[/message]
[message]
id=und1_3
id=msg2_1_3
description=Nati Ha'atel
message="I did not live to see this one either. I gave up my life for necromancy, same as you, do you remember?"
[/message]
[message]
id=und1_4
id=msg2_1_4
description=Gwiti Ha'atel
message="How well I do. But either way, prepare to die... again."
[/message]
[message]
id=und1_5
id=msg2_1_5
description=Nati Ha'atel
message="I will fight you with all my strength to prevent that, and I was always the stronger of us. Flee now and save your miserable hide before I make it a carpet."
[/message]
[message]
id=und1_6
id=msg2_1_6
description=Gwiti Ha'atel
message="Don't be silly! I'm not hairy enough to be a carpet! But your scalp would make a good pillow."
[/message]
@ -106,17 +109,17 @@ Defeat:
description=Gwiti Ha'atel
[/filter]
[message]
id=und1_7
id=msg2_1_7
speaker=unit
message="What? I can't die! I've done so already! Noooo!"
[/message]
[message]
id=und1_8
id=msg2_1_8
description=Nati Ha'atel
message="Ha ha ha, did I not tell you it would be so? Perhaps I shall summon your shade to serve me one day... Until then, farewell!"
[/message]
[message]
id=und1_9
id=msg2_1_9
speaker=unit
message="It is over, I am doomed...."
[/message]
@ -131,18 +134,17 @@ Defeat:
description=Nati Ha'atel
[/filter]
[message]
id=und1_10
id=msg2_1_10
speaker=unit
message="I... have failed to win this battle, I am defeated. I will not believe it."
[/message]
[message]
id=und1_11
id=msg2_1_11
description=Gwiti Ha'atel
message="Die, yes die, and go to the Land of the Dead. Perhaps one day you will be back under my command!"
[/message]
[endlevel]
result=victory
bonus=yes
[/endlevel]
[/event]
@ -154,7 +156,7 @@ Defeat:
description=Gwiti Ha'atel
[/filter_second]
[message]
id=und1_12
id=msg2_1_12
speaker=second_unit
message="Didn't I tell you so?!"
[/message]
@ -166,7 +168,7 @@ Defeat:
description=Nati Ha'atel
[/filter_second]
[message]
id=und1_13
id=msg2_1_13
speaker=second_unit
message="And by my own hands you died!"
[/message]
@ -180,7 +182,7 @@ Defeat:
description=Gwiti Ha'atel
[/filter]
[message]
id=und1_14
id=msg2_1_14
description=Gwiti Ha'atel
message="I am Gwiti the Mighty, prepare to die!"
[/message]
@ -192,7 +194,7 @@ Defeat:
description=Nati Ha'atel
[/filter]
[message]
id=und1_15
id=msg2_1_15
description=Nati Ha'atel
message="Now you shall die!"
[/message]

View file

@ -1,10 +1,19 @@
[scenario]
name="Crossroads"
map=crossroads
turns=28
turns=24
id=Crossroads
next_scenario=""
next_scenario=The_Princess_of_Wesnoth
[bigmap]
image=misc/map.png
{DOT 128 297}
{DOT 144 292}
{DOT 154 284}
{DOT 173 283}
{CROSS 189 282}
[/bigmap]
{DAWN}
{MORNING}
@ -20,8 +29,7 @@
canrecruit=1
controller=human
hitpoints=80
recruit=Elvish Scout,Elvish Hero,Elvish Fighter,Elvish Archer,Horseman,Mage,Elvish Shaman,Red Mage,Spearman,Swordsman,Duelist,Fencer,Elvish Captain,Elvish Ranger,Elvish Shyde,Thief,Rogue,Merman,Elvish Lord,White Mage,Mage of Light,Elvish Sharpshooter
gold=800
gold=100
enemy=2,3
[/side]
@ -33,15 +41,7 @@
controller=ai
canrecruit=1
recruit=Orcish Grunt,Wolf Rider,Orcish Archer,Troll Whelp
#ifdef HARD
gold=400
#endif
#ifdef MEDIUM
gold=320
#endif
#ifdef EASY
gold=200
#endif
{GOLD 200 320 400}
enemy=1
[/side]
@ -53,18 +53,51 @@
controller=ai
canrecruit=1
recruit=Orcish Grunt,Wolf Rider,Orcish Archer,Troll Whelp
#ifdef HARD
gold=400
#endif
#ifdef MEDIUM
gold=320
#endif
#ifdef EASY
gold=200
#endif
{GOLD 200 320 400}
enemy=1
[/side]
#signs at the crossroads for decoration
[item]
x=24
y=18
image=terrain/signpost.png
[/item]
[event]
name=start
[recall]
description=Delfador
[/recall]
[recall]
description=Kalenz
[/recall]
[message]
id=msgcrossroads3
description=Delfador
message="Here we come to the great cross-roads. We want to go North-East."
[/message]
[message]
id=msgcrossroads4
description=Kalenz
message="Beware! These forests are not safe! Asheviere has hired Orcs to guard these roads, because of their strategic important. We shall have to fight to get by here."
[/message]
[message]
id=msgcrossroads5
description=Konrad
message="Then fight we shall! Let it begin."
[/message]
[/event]
[event]
name=victory
[message]
description=Konrad
id=msgcrossroads6
message="Victory is ours men. Let us proceed North-East!"
[/message]
[/event]
[event]
name=moveto
[filter]
@ -80,26 +113,17 @@
[unit]
side=1
type=Elvish Archer
description=Archer
description=Niodien
x=27
y=28
[/unit]
[message]
id=msgcrossroads1
description=Archer
message="Stay on the path!"
description=Nioden
message="Stay on the path! The forests here are not safe!"
[/message]
#[kill]
#description=Archer
#[/kill]
#[move_unit_fake]
#type=Elvish Archer
#x=27,27,26,26,25,25,24,24,23,23,22,22
#y=28,28,28,28,29,29,29,29,29,29,28,28
#[/move_unit_fake]
[/event]
[event]
name=moveto
[filter]
@ -115,23 +139,15 @@
[unit]
side=1
type=Elvish Fighter
description=Fighter
description=Loflar
x=36
y=26
[/unit]
[message]
description=Loflar
id=msgcrossroads2
description=Fighter
message="Stay out of the forrest!"
message="Beware of the forest! There are many Orcs hiding there, preparing to ambush you!"
[/message]
#[kill]
#description=Fighter
#[/kill]
#[move_unit_fake]
#type=Elvish Fighter
#x=36,36,35,35,35,35,35,35,35,35
#y=26,26,27,27,28,28,29,29,30,30
#[/move_unit_fake]
[/event]
#define TRAP1 X Y S

View file

@ -139,7 +139,7 @@ Defeat:
side=5
canrecruit=1
recruit=Elvish Fighter,Elvish Archer,Elvish Ranger
recruitment_pattern=fighter,scout
recruitment_pattern=fighter,archer
gold=200
enemy=2,3,4
[/side]
@ -150,7 +150,7 @@ Defeat:
side=6
canrecruit=1
recruit=Elvish Shaman,Elvish Archer,Elvish Fighter
recruitment_pattern=archer,fighter,scout
recruitment_pattern=archer,fighter
gold=200
enemy=2,3,4
[/side]

View file

@ -195,7 +195,7 @@ Defeat:
[message]
id=msg9_a6
description=Li'sar
message="They have made it away! I cannot believe it! We must make chase after them over the river! We will meet again, foul imposter!"
message="I cannot believe it, they have made it away! We must make chase. After them men, let us cross the river too! We will meet again, foul imposter."
[/message]
[message]

View file

@ -47,6 +47,7 @@ Defeat:
hitpoints=45
experience=0
side=1
gold=60
canrecruit=1
recruit=Elvish Scout,Elvish Fighter,Elvish Archer,Horseman,Mage,Elvish Shaman
enemy=2
@ -62,17 +63,7 @@ Defeat:
canrecruit=1
recruit=Orcish Grunt,Wolf Rider,Orcish Archer,Troll Whelp
recruitment_pattern=scout,scout,fighter,fighter,archer
#ifdef HARD
gold=240
#endif
#ifdef NORMAL
gold=120
#endif
#ifdef EASY
gold=60
#endif
{GOLD 60 120 240}
enemy=1
[/side]
@ -85,6 +76,7 @@ Defeat:
y=8,9,10
[/filter]
[message]
id=return_to_vessel
description=Konrad
message="This is no time to return to our vessel! We must take control of the island!"
[/message]
@ -181,7 +173,7 @@ Defeat:
[message]
id=msg2_7
description=Konrad
message="It was our duty, friend. I hope you will grant us refuge here now"
message="It was our duty, friend. I hope you will grant us refuge here now."
[/message]
[message]

View file

@ -136,6 +136,7 @@ Defeat:
name=enemies defeated
[command]
[message]
id=isle_wrested_control
description=Konrad
message="We have wrested control of the island from the evil undead! Now all we have to do is wait for the ship to arrive, so we can make our way to Elensefar!"
[/message]
@ -150,6 +151,7 @@ Defeat:
{ISLE_GALLEON_ARRIVE}
[command]
[message]
id=isle_damned_found1
speaker=narrator
image=elvish-fighter.png
message="Thank goodness we have found you, sir! Come aboard quickly, we shall take you away from this horrible island!"
@ -157,6 +159,7 @@ Defeat:
[/command]
[command]
[message]
id=isle_damned_found2
description=Konrad
message="It is a shame complete victory could not be ours, but thank goodness I am rescued! On to Elensefar!"
[/message]

View file

@ -157,7 +157,7 @@ Defeat:
[/terrain]
[message]
description=Konrad
msg=nw_8
id=msg_nw_8
message="More snow is falling. We must finish this battle quickly. Onward men!"
[/message]
[/event]

View file

@ -17,13 +17,12 @@
{FIRST_WATCH}
{SECOND_WATCH}
id=The_Princess_of_Wesnoth
next_scenario=The_Valley_of_Death-The_Princesss_Revenge
id=The_Princess_of_Wesnoth
next_scenario=The_Valley_of_Death-The_Princesss_Revenge
music="wesnoth-2.ogg"
music="wesnoth-2.ogg"
objectives="
objectives="
Victory:
@Force Li'sar's surrender
Defeat:
@ -32,19 +31,15 @@ Defeat:
#Death of Kalenz
#Turns run out"
[bigmap]
image=misc/map.png
{DOT 128 297}
{DOT 144 292}
{DOT 154 284}
{DOT 173 283}
{DOT 189 282}
{DOT 205 282}
{DOT 219 280}
{DOT 231 274}
{DOT 240 270}
{CROSS 250 264}
[/bigmap]
[bigmap]
image=misc/map.png
{DOT 189 282}
{DOT 205 282}
{DOT 219 280}
{DOT 231 274}
{DOT 240 270}
{CROSS 250 264}
[/bigmap]
[side]
race=Elves
@ -110,16 +105,21 @@ Defeat:
message="The Queen has sent me to stop you, you imposter!"
[/message]
[message]
id=msg6_3
id=msg6_3
role=Advisor
message="That's the princess, Li'sar. The daughter of the Queen, and her successor!"
[/message]
[message]
id=msg6_4
id=msg6_4
description=Konrad
message="I'm no imposter, it seems that your mother has lied to you about it."
[/message]
[message]
id=msg6_4b
description=Li'sar
message=Don't tell me such treason. Your lies will perish with you!
[/message]
[message]
id=msg6_5
description=Delfador
message=It's no use reasoning. There is only one thing she will understand. To arms!

View file

@ -11,7 +11,7 @@
{SECOND_WATCH}
id=The_Siege_of_Elensefar
next_scenario=The_Princess_of_Wesnoth
next_scenario=Crossroads
music="wesnoth-2.ogg"

View file

@ -119,15 +119,28 @@ Defeat
[/message]
[/event]
#define SWAMP_GET_GOLD AMOUNT
[command]
[gold]
side=1
amount={AMOUNT}
[/gold]
[/command]
[command]
[message]
id=msg_get_gold_swamp
speaker=narrator
message=You loot {AMOUNT} pieces of gold from the corpse!
[/message]
[/command]
#enddef
[event]
name=die
[filter]
description=Clarustus
[/filter]
[gold]
side=1
amount=100
[/gold]
{SWAMP_GET_GOLD 100}
[/event]
[event]
@ -135,10 +148,7 @@ Defeat
[filter]
description=Merlunius
[/filter]
[gold]
side=1
amount=100
[/gold]
{SWAMP_GET_GOLD 100}
[/event]
[event]
@ -146,10 +156,7 @@ Defeat
[filter]
description=Aimucasur
[/filter]
[gold]
side=1
amount=150
[/gold]
{SWAMP_GET_GOLD 150}
[/event]
[event]
@ -157,10 +164,7 @@ Defeat
[filter]
description=Secadius
[/filter]
[gold]
side=1
amount=100
[/gold]
{SWAMP_GET_GOLD 100}
[/event]
[event]
@ -168,9 +172,6 @@ Defeat
[filter]
description=Dafeis
[/filter]
[gold]
side=1
amount=100
[/gold]
{SWAMP_GET_GOLD 100}
[/event]
[/scenario]

View file

@ -1,21 +1,15 @@
[scenario]
name="The Skull of Agarash"
map=undmap1
turns=28
map=undmap2
turns=32
{DUSK}
{DUSK}
{FIRST_WATCH}
{FIRST_WATCH}
{FIRST_WATCH}
{SECOND_WATCH}
{SECOND_WATCH}
{SECOND_WATCH}
{DAWN}
{DAWN}
{MORNING}
{AFTERNOON}
{DUSK}
{FIRST_WATCH}
{SECOND_WATCH}
{DAWN}
id="Skull_Agarash"
next_scenario=null
@ -36,7 +30,7 @@ Defeat:
side=1
canrecruit=1
controller=human
recruit=Dark Adept,Ghost,Walking Corpse,Vampire Bat,Skeleton,Skeleton Archer
recruit= Dark Adept,Ghost,Walking Corpse,Skeleton,Skeleton Archer
enemy=2
gold=120
[/side]
@ -58,7 +52,7 @@ Defeat:
[side]
race=Orcs
type=Dark Apprentice
type=Orcish Warrior
description=Isidal B'Tai
side=3
canrecruit=1
@ -78,7 +72,7 @@ Defeat:
[side]
race=Orcs
type=Dark Apprentice
type=Orcish Warrior
description=Nakur Kimoni
side=4
canrecruit=1
@ -98,47 +92,62 @@ Defeat:
[event]
name=start
[command]
[message]
id=und2_2_1
speaker=narrator
message="After Gwiti destroyed his brother, he was planning a march upon Wesnoth. But a Dark Spirit came to him, counselling him..."
[/message]
[/command]
[message]
id=msg2_1
speaker=narrator
message="After Gwiti destroyed his brother, he was planning a march upon Wesnoth. But a Dark Spirit came to him, counselling him..."
[/message]
[message]
id=msg2_2
description=Dark Spirit
message="Gwiitii... Gwiti!"
[/message]
[message]
id=msg2_3
description=Gwiti Ha'atel
message="A Dark Spirit? Surely this is my token of mastery of the undead!"
[/message]
[message]
id=msg2_4
description=Dark Spirit
message="Gwiti, do not yet march upon Wesnoth. First, you shall go north, and there find the Skull of Agarash."
[/message]
[message]
id=msg2_5
description=Gwiti Ha'atel
message="What is the Skull of Agarash? Tell me more."
[/message]
[message]
id=msg2_6
description=Dark Spirit
message="Do you see the three orc clans of this land? Their banners are topped with skulls, as is their custom. But one of these is the Skull of Agarash - which once was mine. Take it and your power will grow greater by far."
[/message]
[command]
[move_unit_fake]
type=Wraith
x=1,2,3,4,5,6,7
y=4,4,4,4,4,4,4
[/move_unit_fake]
[/command]
[command]
[unit]
description=Dark Spirit
type=Wraith
x=7
y=4
side=1
[/unit]
[/command]
[command]
[message]
id=und2_2_2
description=Dark Spirit
message="Gwiti... Gwiti!"
[/message]
[message]
id=und2_2_3
description=Gwiti Ha'atel
message="A Dark Spirit? Surely this is my token of mastery of the undead!"
[/message]
[message]
id=und2_2_4
description=Dark Spirit
message="Gwiti, do not yet march upon Wesnoth. First, you shall go south, against the orcs, and there find the Skull of Agarash."
[/message]
[message]
id=und2_2_5
description=Gwiti Ha'atel
message="What is the Skull of Agarash? Tell me more."
[/message]
[message]
id=und2_2_6
description=Dark Spirit
message="Do you see the three orc clans of this land? Their banners are topped with skulls, as is their custom. But one of these is the Skull of Agarash - which once was mine. Take it and your power will grow greater by far."
[/message]
[/command]
[/event]
[event]
name=turn 4
[message]
id=msg2_7
description=Konrad
message="Haha, some of the orcish clans are fighting each other!"
[/message]
[/event]
[event]
name=die
@ -146,7 +155,7 @@ Defeat:
description=Gwiti Ha'atel
[/filter]
[message]
id=msg2_8
id=und2_2_8
speaker=unit
message="What? I can't die! I've done so already! Noooo!"
[/message]
@ -161,14 +170,19 @@ Defeat:
description=Karz Gholum
[/filter]
[message]
id=msg2_9
id=und2_2_9
speaker=unit
message="Oh no! They undead hordes have taken my banner!"
[/message]
[/message]
[message]
id=msg2_10
id=und2_2_10
description=Gwiti Ha'atel
message="It is not your banner, and it never was! That skull marked it mine since long ago."
[/message]
[message]
id=und2_2_11
description=Gwiti Ha'atel
message="Argh! This is only half of the skull!"
[/message]
[endlevel]
result=victory
@ -182,7 +196,7 @@ Defeat:
description=Nakur Kimoni
[/filter]
[message]
id=msg2_11
id=und2_2_12
description=Gwiti Ha'atel
message="This skull is powerless!"
[/message]
@ -194,7 +208,7 @@ Defeat:
description=Isidal B'tai
[/filter]
[message]
id=msg2_12
id=und2_2_13
description=Gwiti Ha'atel
message="That is not the skull of Agarash!"
[/message]
@ -207,9 +221,9 @@ Defeat:
description=Gwiti Ha'atel
[/filter]
[message]
id=msg2_13
id=und2_14
speaker=unit
message="I am dying, and mya rmy is defeated! This is the end...!"
message="I am dying, and my army is defeated! This is the end...!"
[/message]
[endlevel]
result=defeat
@ -225,9 +239,9 @@ Defeat:
description=Gwiti Ha'atel
[/filter]
[message]
id=msg2_14
id=und2_2_15
description=Gwiti Ha'atel
message="I am Gwiti the Mighty, prepare to die!"
message="It's been a long time since I fought anything myself!"
[/message]
[/event]

View file

@ -5,7 +5,7 @@ image=horseman.png
hitpoints=38
movement_type=mounted
movement=8
experience=38
experience=44
level=1
alignment=lawful
advanceto=Knight

View file

@ -31,7 +31,7 @@ get_hit_sound=groan.wav
type=holy
range=long
special=magical
damage=10
damage=11
number=4
[missile_frame]
begin=-100

View file

@ -5,11 +5,11 @@ image=undead-bat.png
hitpoints=16
movement_type=undeadfly
movement=8
experience=10
experience=14
level=0
alignment=chaotic
advanceto=Blood Bat
cost=8
cost=11
usage=scout
unit_description="An undead flying beast, it attacks by biting its target. While the Vampire Bat fangs are not very powerful, they drain the blood of the victim, giving some of its health to the monster."
get_hit_sound=groan.wav

BIN
images/icon.png Normal file

Binary file not shown.

View file

@ -53,12 +53,15 @@ void pump()
static std::pair<int,int> resize_dimensions(0,0);
//used to keep track of double click events
static int last_mouse_down = -1;
static int last_click_x = -1, last_click_y = -1;
SDL_Event event;
while(SDL_PollEvent(&event)) {
//events may cause more event handlers to be added and/or removed,
//so we must use indexes instead of iterators here.
for(size_t i1 = 0, i2 = event_handlers.size(); i1 != i2; ++i1) {
assert(i1 < event_handlers.size());
for(size_t i1 = 0, i2 = event_handlers.size(); i1 != i2 && i1 < event_handlers.size(); ++i1) {
event_handlers[i1]->handle_event(event);
}
@ -77,10 +80,32 @@ void pump()
break;
}
//mouse wheel support
case SDL_MOUSEBUTTONDOWN: {
if(event.button.button == 4) {
if(event.button.button == SDL_BUTTON_LEFT) {
static const int DoubleClickTime = 500;
static const int DoubleClickMaxMove = 3;
const int current_ticks = ::SDL_GetTicks();
if(last_mouse_down >= 0 && current_ticks - last_mouse_down < DoubleClickTime &&
abs(event.button.x - last_click_x) < DoubleClickMaxMove &&
abs(event.button.y - last_click_y) < DoubleClickMaxMove) {
SDL_UserEvent user_event;
user_event.type = DOUBLE_CLICK_EVENT;
user_event.code = 0;
user_event.data1 = reinterpret_cast<void*>(event.button.x);
user_event.data2 = reinterpret_cast<void*>(event.button.y);
::SDL_PushEvent(reinterpret_cast<SDL_Event*>(&user_event));
}
last_mouse_down = current_ticks;
last_click_x = event.button.x;
last_click_y = event.button.y;
}
//mouse wheel support
else if(event.button.button == 4) {
gui::scroll_dec();
} else if(event.button.button == 5) {
gui::scroll_inc();

View file

@ -3,6 +3,9 @@
#include "SDL.h"
//our user-defined double-click event type
#define DOUBLE_CLICK_EVENT SDL_USEREVENT
namespace events
{

View file

@ -81,18 +81,7 @@ void get_files_in_dir(const std::string& directory,
#endif
if(DIR_INVALID(dir)) {
//try to make the directory
const int res = mkdir(directory.c_str(),AccessMode);
if(res == 0) {
#ifdef _WIN32
dir = _findfirst((directory + "/*.*").c_str(),&fileinfo);
#else
dir = opendir(directory.c_str());
#endif
}
if(DIR_INVALID(dir))
return;
return;
}
#ifdef _WIN32

View file

@ -229,7 +229,7 @@ int play_game(int argc, char** argv)
int video_flags = preferences::fullscreen() ? FULL_SCREEN : 0;
const std::pair<int,int>& resolution = preferences::resolution();
std::pair<int,int> resolution = preferences::resolution();
std::cerr << "checking mode possible...\n";
const int bpp = video.modePossible(resolution.first,resolution.second,
@ -238,18 +238,32 @@ int play_game(int argc, char** argv)
std::cerr << bpp << "\n";
if(bpp == 0) {
std::cerr << "The required video mode, " << resolution.first
<< "x" << resolution.second << "x16 "
<< "is not supported\n";
//Video mode not supported, maybe from bad prefs.
std::cerr << "The video mode, " << resolution.first
<< "x" << resolution.second << "x16 "
<< "is not supported\nAttempting 1024x768x16...\n";
//Attempt 1024x768.
resolution.first = 1024;
resolution.second = 768;
if((video_flags&FULL_SCREEN) != 0 && argc == 0)
std::cerr << "Try running the program with the -windowed option "
<< "using a 16bpp X windows setting\n";
const int bpp = video.modePossible(resolution.first,resolution.second,16,video_flags);
if(bpp == 0) {
//couldn't do 1024x768 either
if((video_flags&FULL_SCREEN) == 0 && argc == 0)
std::cerr << "Try running with the -fullscreen option\n";
std::cerr << "The required video mode, " << resolution.first
<< "x" << resolution.second << "x16 "
<< "is not supported\n";
return 0;
if((video_flags&FULL_SCREEN) != 0 && argc == 0)
std::cerr << "Try running the program with the -windowed option "
<< "using a 16bpp X windows setting\n";
if((video_flags&FULL_SCREEN) == 0 && argc == 0)
std::cerr << "Try running with the -fullscreen option\n";
return 0;
}
}
if(bpp != 16) {

View file

@ -22,7 +22,7 @@ namespace game_config
const int cure_amount = 8;
const int curer_heals_per_turn = 18;
const int recall_cost = 20;
const std::string version = "0.6RC3";
const std::string version = "0.6";
bool debug = false;
#ifdef WESNOTH_PATH

View file

@ -233,6 +233,50 @@ void event_handler::handle_event(const queued_event& event_info, const config* c
handle_event(event_info,*i);
}
//reveal sections of the map that would otherwise be under shroud
const config::child_list& remove_shroud = cfg->get_children("remove_shroud");
for(i = remove_shroud.begin(); i != remove_shroud.end(); ++i) {
const size_t index = maximum<int>(1,atoi((**i)["side"].c_str())) - 1;
if(index < teams->size()) {
const std::vector<gamemap::location>& locs = multiple_locs(**i);
for(std::vector<gamemap::location>::const_iterator j = locs.begin(); j != locs.end(); ++j) {
(*teams)[index].clear_shroud(j->x,j->y);
}
}
screen->invalidate_all();
}
//teleport a unit from one location to another
const config::child_list& teleports = cfg->get_children("teleport");
for(i = teleports.begin(); i != teleports.end(); ++i) {
//search for a valid unit filter, and if we have one, look for the matching unit
const config* const filter = (*i)->child("filter");
if(filter != NULL) {
unit_map::iterator u;
for(u = units->begin(); u != units->end(); ++u){
if(u->second.matches_filter(*filter))
break;
}
//we have found a unit that matches the filter
if(u != units->end()) {
const gamemap::location dst(**i);
if(game_map->on_board(dst)) {
const gamemap::location vacant_dst = find_vacant_tile(*game_map,*units,dst,(*game_map)[dst.x][dst.y]);
if(game_map->on_board(vacant_dst)) {
//note that inserting into a map does NOT invalidate iterators
//into the map, so this sequence is fine.
units->insert(std::pair<gamemap::location,unit>(vacant_dst,u->second));
units->erase(u);
}
}
}
}
}
//allow a side to recruit a new type of unit
const config::child_list& allow_recruit = cfg->get_children("allow_recruit");
for(i = allow_recruit.begin(); i != allow_recruit.end(); ++i) {

View file

@ -135,11 +135,11 @@ manager::~manager()
void set_wm_icon()
{
//this code seems to only display the top part of the icon in Windows XP
// SDL_Surface* const icon = scale_surface(get_image("icon.png",UNSCALED),32,32);
// if(icon != NULL) {
// std::cerr << "setting icon...\n";
// ::SDL_WM_SetIcon(icon,NULL);
// }
SDL_Surface* const icon = get_image("icon.png",UNSCALED);
if(icon != NULL) {
std::cerr << "setting icon...\n";
::SDL_WM_SetIcon(icon,NULL);
}
}
void set_pixel_format(SDL_PixelFormat* format)

View file

@ -1,12 +0,0 @@
SDL_CFLAGS = `sdl-config --cflags` `freetype-config --cflags`
SDL_LIBS = `sdl-config --libs` -lSDL_ttf -lSDL_mixer -lSDL_image -lSDL_net `freetype-config --libs`
OBJS= editor.o ../actions.o ../ai.o ../ai_attack.o ../ai_move.o ../config.o ../dialogs.o ../display.o ../events.o ../filesystem.o ../font.o ../game_config.o ../game_events.o ../gamestatus.o ../hotkeys.o ../image.o ../intro.o ../key.o ../language.o ../log.o ../map.o ../show_dialog.o ../mouse.o ../network.o ../pathfind.o ../playlevel.o ../playturn.o ../preferences.o ../replay.o ../sdl_utils.o ../sound.o ../team.o ../terrain.o ../tooltips.o ../unit.o ../unit_types.o ../video.o ../widgets/button.o ../widgets/menu.o ../widgets/textbox.o ../widgets/slider.o
editor: $(OBJS)
gcc -lstdc++ ${SDL_CFLAGS} -o $@ ${OBJS} ${SDL_LIBS}
.cpp.o:
gcc ${SDL_CFLAGS} -c $< -o $*.o
clean:
-rm -f *.o ../*.o editor

View file

@ -1,171 +0,0 @@
/*
Copyright (C) 2003 by David White <davidnwhite@optusnet.com.au>
Part of the Battle for Wesnoth Project http://wesnoth.whitevine.net
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/
#include "SDL.h"
#include "SDL_keysym.h"
#include "../actions.hpp"
#include "../ai.hpp"
#include "../config.hpp"
#include "../dialogs.hpp"
#include "../display.hpp"
#include "../events.hpp"
#include "../font.hpp"
#include "../game_config.hpp"
#include "../gamestatus.hpp"
#include "../key.hpp"
#include "../language.hpp"
#include "../widgets/menu.hpp"
#include "../pathfind.hpp"
#include "../playlevel.hpp"
#include "../team.hpp"
#include "../unit_types.hpp"
#include "../unit.hpp"
#include "../video.hpp"
#include <cctype>
#include <iostream>
#include <map>
#include <string>
// I just not have time now to search if there are any versions
// of SDL that needs uppercase. So both is supported... --Sofronius
#ifndef SDLK_X
#define SDLK_X SDLK_x
#define SDLK_D SDLK_d
#define SDLK_Z SDLK_z
#endif
int main(int argc, char** argv)
{
const double scroll_speed = 30.0;
const double zoom_amount = 5.0;
if(argc == 1) {
std::cout << "usage: " << argv[0] << " map-name\n";
return 0;
}
preproc_map defines_map;
defines_map["MEDIUM"] = preproc_symbol;
config cfg(preprocess_file("data/game.cfg",&defines_map));
set_language("English", cfg);
std::cout << "a\n";
std::string mapdata = read_file(argv[1]);
if(mapdata.empty()) {
for(int i = 0; i != 30; ++i) {
mapdata = mapdata + "gggggggggggggggggggggggggggggggggggggg\n";
}
}
std::cout << "b\n";
gamemap map(cfg,mapdata);
CVideo video;
video.setMode(1024,768,16,0);
CKey key;
gamestatus status(cfg,0);
std::vector<team> teams;
std::map<gamemap::location,unit> units;
display gui(units,video,map,status,teams);
gui.draw_terrain_palette(gui.mapx()+10,142,0);
gamemap::TERRAIN selected_terrain = 0;
bool first_time = true;
const font::manager font_manager;
std::cerr << "starting for(;;)\n";
for(;;) {
if(key[SDLK_ESCAPE])
break;
int mousex, mousey;
const int mouse_flags = SDL_GetMouseState(&mousex,&mousey);
const bool new_left_button = mouse_flags & SDL_BUTTON_LMASK;
const bool new_right_button = mouse_flags & SDL_BUTTON_RMASK;
if(key[SDLK_UP] || mousey == 0)
gui.scroll(0.0,-scroll_speed);
if(key[SDLK_DOWN] || mousey == gui.y()-1)
gui.scroll(0.0,scroll_speed);
if(key[SDLK_LEFT] || mousex == 0)
gui.scroll(-scroll_speed,0.0);
if(key[SDLK_RIGHT] || mousex == gui.x()-1)
gui.scroll(scroll_speed,0.0);
if(key[SDLK_Z])
gui.zoom(zoom_amount);
if(key[SDLK_X])
gui.zoom(-zoom_amount);
if(key[SDLK_D])
gui.default_zoom();
gui.highlight_hex(gui.hex_clicked_on(mousex,mousey));
if(new_left_button) {
const gamemap::TERRAIN terrain_on =
gui.get_terrain_on(gui.mapx()+10,142,mousex,mousey);
if(terrain_on && terrain_on != selected_terrain) {
selected_terrain = terrain_on;
gui.draw_terrain_palette(gui.mapx()+10,142,selected_terrain);
}
const gamemap::location hex = gui.hex_clicked_on(mousex,mousey);
if(map.on_board(hex)) {
const gamemap::TERRAIN terrain = map[hex.x][hex.y];
if(selected_terrain && selected_terrain != terrain) {
map.set_terrain(hex,selected_terrain);
gui.recalculate_minimap();
gamemap::location locs[7];
locs[0] = hex;
get_adjacent_tiles(hex,locs+1);
for(int i = 0; i != 7; ++i) {
gui.draw_tile(locs[i].x,locs[i].y);
}
}
}
}
gui.draw();
if(first_time) {
std::cerr << "drawing terrain pallette...\n";
gui.draw_terrain_palette(gui.mapx()+10,142,0);
first_time = false;
}
SDL_Delay(20);
events::pump();
}
system("pwd");
int res = gui::show_dialog(gui,NULL,"Save?","Do you want to save changes?",
gui::YES_NO);
if(res == 0) {
write_file(argv[1],map.write());
}
return 0;
}

View file

@ -89,6 +89,8 @@ void set_fullscreen(bool ison)
if(video.modePossible(res.first,res.second,16,flags)) {
video.setMode(res.first,res.second,16,flags);
disp->redraw_everything();
} else if(video.modePossible(1024,768,16,flags)) {
set_resolution(std::pair<int,int>(1024,768));
} else {
gui::show_dialog(*disp,NULL,"",string_table["video_mode_fail"],
gui::MESSAGE);
@ -125,7 +127,7 @@ void set_resolution(const std::pair<int,int>& resolution)
res.second &= ~1;
CVideo& video = disp->video();
const int flags = video.isFullScreen() ? FULL_SCREEN : 0;
const int flags = fullscreen() ? FULL_SCREEN : 0;
if(video.modePossible(res.first,res.second,16,flags)) {
video.setMode(res.first,res.second,16,flags);

View file

@ -589,7 +589,7 @@ bool do_replay(display& disp, const gamemap& map, const game_data& gameinfo,
advancing_units.push_back(tgt->first);
}
} else {
std::cerr << "unrecognized action\n";
std::cerr << "unrecognized action: '" << cfg->write() << "'\n";
throw replay::error();
}
}

View file

@ -353,8 +353,9 @@ int show_dialog(display& disp, SDL_Surface* image,
const int image_h_padding = image != NULL ? 10 : 0;
const int top_padding = 10;
const int bottom_padding = 10;
const int menu_hpadding = text_size.h > 0 && menu_.height() > 0 ? 10 : 0;
const int padding_width = left_padding + right_padding + image_h_padding;
const int padding_height = top_padding + bottom_padding;
const int padding_height = top_padding + bottom_padding + menu_hpadding;
const int caption_width = caption_size.w;
const int image_width = image != NULL ? image->w : 0;
const int total_image_width = caption_width > image_width ?
@ -407,10 +408,10 @@ int show_dialog(display& disp, SDL_Surface* image,
}
}
const int button_hpadding = total_width - button_widths;
const int button_wpadding = total_width - button_widths;
int button_offset = 0;
for(size_t button_num = 0; button_num != buttons.size(); ++button_num) {
const int padding_amount = button_hpadding/(buttons.size()+1);
const int padding_amount = button_wpadding/(buttons.size()+1);
buttons[button_num].set_x(xloc + padding_amount*(button_num+1) +
button_offset);
buttons[button_num].set_y(yloc + total_height - button_heights);
@ -425,7 +426,7 @@ int show_dialog(display& disp, SDL_Surface* image,
if(menu_.height() > 0)
menu_.set_loc(xloc+total_image_width+left_padding+image_h_padding,
yloc+top_padding+text_size.h);
yloc+top_padding+text_size.h+menu_hpadding);
if(image != NULL) {
const int x = xloc + left_padding;
@ -453,7 +454,7 @@ int show_dialog(display& disp, SDL_Surface* image,
yloc+top_padding);
const int image_h = image != NULL ? image->h : 0;
const int text_widget_y = yloc+top_padding+image_h-6+text_size.h;
const int text_widget_y = yloc+top_padding+image_h-6+text_size.h+menu_hpadding;
if(use_textbox) {
text_widget.set_location(xloc + left_padding +
@ -468,7 +469,7 @@ int show_dialog(display& disp, SDL_Surface* image,
//set the position of any tick boxes. they go right below the menu, slammed against
//the right side of the dialog
if(options != NULL) {
int options_y = text_widget_y + (use_textbox ? text_widget.height() : 0) + menu_.height() + button_height_padding;
int options_y = text_widget_y + (use_textbox ? text_widget.height() : 0) + menu_.height() + button_height_padding + menu_hpadding;
for(size_t i = 0; i != check_buttons.size(); ++i) {
check_buttons[i].set_x(xloc + total_width - padding_width - check_buttons[i].width());
check_buttons[i].set_y(options_y);
@ -518,8 +519,8 @@ int show_dialog(display& disp, SDL_Surface* image,
select_item = item;
}
if(!key_down && key[SDLK_RETURN] &&
(type == YES_NO || type == OK_CANCEL)) {
if((!key_down && key[SDLK_RETURN] || menu_.double_clicked()) &&
(type == YES_NO || type == OK_CANCEL || type == OK_ONLY)) {
if(text_widget_text != NULL && use_textbox)
*text_widget_text = text_widget.text();

View file

@ -68,48 +68,13 @@ unit::unit(const unit_type* t, int side, bool use_traits) :
backupAttacks_(t->attacks()),
guardian_(false), upkeep_(UPKEEP_FULL_PRICE)
{
//units that don't have traits generated are just generic
//units, so they shouldn't get a description either.
if(use_traits) {
//units that don't have traits generated are just generic
//units, so they shouldn't get a description either.
description_ = t->generate_description();
generate_traits();
}
//calculate the unit's traits
const std::vector<config*> traits = t->possible_traits();
const size_t num_traits = type_->num_traits();
if(use_traits && traits.size() >= num_traits) {
std::set<int> chosen_traits;
for(size_t i = 0; i != num_traits; ++i) {
int num = get_random()%(traits.size()-i);
while(chosen_traits.count(num)) {
++num;
}
chosen_traits.insert(num);
add_modification("trait",*traits[num]);
}
//build the traits description, making sure the traits are always
//in the same order.
for(std::set<int>::const_iterator itor = chosen_traits.begin();
itor != chosen_traits.end(); ++itor) {
const std::string& trait_name = (*traits[*itor])["name"];
const std::string& lang_trait = string_table["trait_"+trait_name];
if(lang_trait.empty() == false)
traitsDescription_ += lang_trait;
else
traitsDescription_ += trait_name;
traitsDescription_ += ",";
}
//get rid of the trailing comma
if(!traitsDescription_.empty())
traitsDescription_.resize(traitsDescription_.size()-1);
}
}
//constructor for advancing a unit from a lower level
@ -136,6 +101,48 @@ unit::unit(const unit_type* t, const unit& u) :
new_level();
}
void unit::generate_traits()
{
if(!traitsDescription_.empty())
return;
//calculate the unit's traits
const std::vector<config*> traits = type().possible_traits();
const size_t num_traits = type().num_traits();
if(traits.size() >= num_traits) {
std::set<int> chosen_traits;
for(size_t i = 0; i != num_traits; ++i) {
int num = get_random()%(traits.size()-i);
while(chosen_traits.count(num)) {
++num;
}
chosen_traits.insert(num);
add_modification("trait",*traits[num]);
}
//build the traits description, making sure the traits are always
//in the same order.
for(std::set<int>::const_iterator itor = chosen_traits.begin();
itor != chosen_traits.end(); ++itor) {
const std::string& trait_name = (*traits[*itor])["name"];
const std::string& lang_trait = string_table["trait_"+trait_name];
if(lang_trait.empty() == false)
traitsDescription_ += lang_trait;
else
traitsDescription_ += trait_name;
traitsDescription_ += ",";
}
//get rid of the trailing comma
if(!traitsDescription_.empty())
traitsDescription_.resize(traitsDescription_.size()-1);
}
}
const unit_type& unit::type() const
{
return *type_;

View file

@ -154,6 +154,7 @@ private:
UPKEEP_COST upkeep_;
void apply_modifications();
void generate_traits();
};
//object which temporarily resets a unit's movement

View file

@ -22,7 +22,8 @@ menu::menu(display& disp, const std::vector<std::string>& items,
previous_button_(true), drawn_(false), show_result_(false),
height_(-1), width_(-1), first_item_on_screen_(0),
uparrow_(disp,"",gui::button::TYPE_PRESS,"uparrow"),
downarrow_(disp,"",gui::button::TYPE_PRESS,"downarrow")
downarrow_(disp,"",gui::button::TYPE_PRESS,"downarrow"),
double_clicked_(false)
{
for(std::vector<std::string>::const_iterator item = items.begin();
item != items.end(); ++item) {
@ -182,9 +183,19 @@ void menu::handle_event(const SDL_Event& event)
if(event.type == SDL_KEYDOWN) {
key_press(event.key.keysym.sym);
} else if(event.type == SDL_MOUSEBUTTONDOWN &&
event.button.button == SDL_BUTTON_LEFT) {
event.button.button == SDL_BUTTON_LEFT ||
event.type == DOUBLE_CLICK_EVENT) {
int x = 0;
int y = 0;
if(event.type == SDL_MOUSEBUTTONDOWN) {
x = event.button.x;
y = event.button.y;
} else {
x = reinterpret_cast<int>(event.user.data1);
y = reinterpret_cast<int>(event.user.data2);
}
const int item = hit(event.button.x,event.button.y);
const int item = hit(x,y);
if(item != -1) {
selected_ = item;
drawn_ = false;
@ -192,6 +203,10 @@ void menu::handle_event(const SDL_Event& event)
if(click_selects_) {
show_result_ = true;
}
if(event.type == DOUBLE_CLICK_EVENT) {
double_clicked_ = true;
}
}
} else if(event.type == SDL_MOUSEMOTION && click_selects_) {
@ -250,6 +265,11 @@ int menu::process(int x, int y, bool button,bool up_arrow,bool down_arrow,
}
}
bool menu::double_clicked() const
{
return double_clicked_;
}
const std::vector<int>& menu::column_widths() const
{
if(column_widths_.empty()) {

View file

@ -36,6 +36,8 @@ public:
int process(int x, int y, bool button,bool up_arrow,bool down_arrow,
bool page_up, bool page_down, int select_item=-1);
bool double_clicked() const;
private:
void calculate_position();
void key_press(SDLKey key);
@ -61,6 +63,8 @@ private:
mutable int first_item_on_screen_;
gui::button uparrow_, downarrow_;
bool double_clicked_;
const std::vector<int>& column_widths() const;
void draw_item(int item);
void draw();