diff --git a/lang/cs.lang b/lang/cs.lang index df04649..4b46056 100644 --- a/lang/cs.lang +++ b/lang/cs.lang @@ -64,6 +64,7 @@ msg.flag_removed = Útočná vlajka odstraněna. Tví tvorové se vracejí. msg.flag_set = Útočná vlajka vztyčena! Bojeschopní tvorové se u ní shromáždí. msg.creature_leaves = Nespokojený tvor opouští tvou říši: {0}! msg.no_gold = Nedostatek zlata! +msg.no_wood = Nedostatek dřeva! Pokácej obří houby (nebo stromy) krumpáčem. msg.sold = Místnosti prodány: +{0} zlata. msg.no_mana_bolt = Nedostatek many na blesk. msg.no_mana_heal = Nedostatek many na léčení. @@ -124,6 +125,7 @@ ui.key = Klávesa: {0} # ---- HUD hud.gold = Zlato +hud.wood = Dřevo hud.mana = Mana hud.core = Jádro hud.gate = Brána @@ -402,7 +404,8 @@ tool.bridge.desc = Postaví most přes vodu nebo lávu. Táhni z vlastní země tool.drawbridge.label = Padací most tool.drawbridge.name = Postavit padací most tool.drawbridge.desc = Most, který můžeš vytáhnout: táhni přes řeku a postav ho, kliknutím přepínáš: dole, nahoře, automaticky (zvedne se, když se blíží nepřátelé). Dřevo nad vodou hoří, kámen nad lávou ne. -cost.bridge = {0} zlata/políčko přes vodu, {1} přes lávu +cost.bridge = {0} zlata + {1} dřeva/pole nad vodou, {2} zlata nad lávou +cost.drawbridge = {0} zlata + {1} dřeva/pole nad vodou, {2} zlata nad lávou hint.bridge_where = Mosty musí začínat na tvé zemi: táhni ze svého území přes řeku. hint.bridge_fire = Dřevěné mosty hoří: drž ohnivé pasti, ohnivý dech a blesky dál od nich – kamenné mosty nad lávou nehoří. hint.bridge_river = Mosty lze stavět jen přes vodu nebo lávu. @@ -414,6 +417,9 @@ tile.lava = Láva tile.lava_info = Co do ní spadne, shoří. Přecházejí ji kamenné mosty. tile.bridge = Dřevěný most tile.lavabridge = Kamenný most +tile.mushroom = Obří houba +tile.tree = Strom +tile.plant_info = Označ krumpáčem: skřítek ho pokácí za {0} dřeva. tile.drawbridge = Padací most tile.drawbridge_up = Vytažený tile.drawbridge_down = Spuštěný @@ -1198,6 +1204,7 @@ ed.terrain.silver = Stříbrná žíla ed.terrain.ruby = Rubínová žíla ed.terrain.diamond = Diamantová žíla ed.terrain.steel = Ocelová zeď +ed.terrain.mushroom = Obří houba ed.place.core = Jádro duše ed.place.portal = Portál ed.place.gate = Brána hrdinů diff --git a/lang/da.lang b/lang/da.lang index d9ea900..bf3da35 100644 --- a/lang/da.lang +++ b/lang/da.lang @@ -64,6 +64,7 @@ msg.flag_removed = Angrebsflaget er fjernet. Dine væsner vender tilbage. msg.flag_set = Angrebsflaget er sat! Kampklare væsner samles der. msg.creature_leaves = En utilfreds {0} forlader dit rige! msg.no_gold = Ikke nok guld! +msg.no_wood = Ikke nok træ! Fæld kæmpesvampe (eller træer) med hakken. msg.sold = Rum solgt: +{0} guld. msg.no_mana_bolt = Ikke nok mana til Lyn. msg.no_mana_heal = Ikke nok mana til Helbred. @@ -124,6 +125,7 @@ ui.key = Tast: {0} # ---- HUD hud.gold = Guld +hud.wood = Træ hud.mana = Mana hud.core = Kerne hud.gate = Port @@ -401,7 +403,8 @@ tool.bridge.desc = Bygger en bro over vand eller lava. Træk fra din egen jord h tool.drawbridge.label = Vindebro tool.drawbridge.name = Byg vindebro tool.drawbridge.desc = En bro du kan hejse op: træk over floden for at bygge den, klik for at skifte: nede, oppe, automatisk (hejses når fjender nærmer sig). Træ over vand brænder, sten over lava gør ikke. -cost.bridge = {0} guld/felt over vand, {1} over lava +cost.bridge = {0} guld + {1} træ/felt over vand, {2} guld over lava +cost.drawbridge = {0} guld + {1} træ/felt over vand, {2} guld over lava hint.bridge_where = Broer skal starte på din egen jord: træk fra dit område hen over floden. hint.bridge_fire = Træbroer brænder: hold ildfælder, ildånde og lyn væk fra dem – stenbroer over lava er brandsikre. hint.bridge_river = Broer kan kun bygges over vand eller lava. @@ -413,6 +416,9 @@ tile.lava = Lava tile.lava_info = Hvad der falder i, brænder. Stenbroer fører over. tile.bridge = Træbro tile.lavabridge = Stenbro +tile.mushroom = Kæmpesvamp +tile.tree = Træ +tile.plant_info = Markér med hakken: en imp fælder den for {0} træ. tile.drawbridge = Vindebro tile.drawbridge_up = Hejst op tile.drawbridge_down = Sænket @@ -1197,6 +1203,7 @@ ed.terrain.silver = Sølvåre ed.terrain.ruby = Rubinåre ed.terrain.diamond = Diamantåre ed.terrain.steel = Stålmur +ed.terrain.mushroom = Kæmpesvamp ed.place.core = Sjælekerne ed.place.portal = Portal ed.place.gate = Helteport diff --git a/lang/de.lang b/lang/de.lang index bc86274..da17bfd 100644 --- a/lang/de.lang +++ b/lang/de.lang @@ -63,6 +63,7 @@ msg.flag_removed = Angriffsflagge entfernt. Deine Kreaturen kehren zurück. msg.flag_set = Angriffsflagge gesetzt! Kampfbereite Kreaturen sammeln sich dort. msg.creature_leaves = Ein unzufriedener {0} verlässt dein Reich! msg.no_gold = Nicht genug Gold! +msg.no_wood = Nicht genug Holz! Fälle Riesenpilze (oder Bäume) mit der Spitzhacke. msg.sold = Räume verkauft: +{0} Gold. msg.no_mana_bolt = Nicht genug Mana für den Blitz. msg.no_mana_heal = Nicht genug Mana für die Heilung. @@ -123,6 +124,7 @@ ui.key = Taste: {0} # ---- Anzeige hud.gold = Gold +hud.wood = Holz hud.mana = Mana hud.core = Kern hud.gate = Tor @@ -401,7 +403,8 @@ tool.bridge.desc = Baut eine Brücke über Wasser oder Lava. Ziehe von deinem Ge tool.drawbridge.label = Zugbrücke tool.drawbridge.name = Zugbrücke bauen tool.drawbridge.desc = Eine Brücke, die du hochziehen kannst: Ziehe über den Fluss, um sie zu bauen, klicke sie an zum Umschalten: unten, oben, automatisch (hebt sich, wenn Feinde nahen). Holz über Wasser brennt, Stein über Lava nicht. -cost.bridge = {0} Gold/Feld über Wasser, {1} über Lava +cost.bridge = {0} Gold + {1} Holz/Kachel über Wasser, {2} Gold über Lava +cost.drawbridge = {0} Gold + {1} Holz/Kachel über Wasser, {2} Gold über Lava hint.bridge_where = Brücken müssen an deinem Gebiet beginnen: Ziehe von deinem Reich aus über den Fluss. hint.bridge_fire = Holzbrücken brennen: Halte Feuerfallen, Feueratem und Blitze von ihnen fern – Steinbrücken über Lava sind feuerfest. hint.bridge_river = Brücken lassen sich nur über Wasser oder Lava bauen. @@ -413,6 +416,9 @@ tile.lava = Lava tile.lava_info = Was hineinfällt, verbrennt. Steinbrücken führen hinüber. tile.bridge = Holzbrücke tile.lavabridge = Steinbrücke +tile.mushroom = Riesenpilz +tile.tree = Baum +tile.plant_info = Mit der Spitzhacke markieren: Ein Imp fällt ihn für {0} Holz. tile.drawbridge = Zugbrücke tile.drawbridge_up = Hochgezogen tile.drawbridge_down = Herabgelassen @@ -1197,6 +1203,7 @@ ed.terrain.silver = Silberader ed.terrain.ruby = Rubinader ed.terrain.diamond = Diamantader ed.terrain.steel = Stahlwand +ed.terrain.mushroom = Riesenpilz ed.place.core = Seelenkern ed.place.portal = Portal ed.place.gate = Heldentor diff --git a/lang/el.lang b/lang/el.lang index 9ec07ff..8a187c7 100644 --- a/lang/el.lang +++ b/lang/el.lang @@ -64,6 +64,7 @@ msg.flag_removed = Η σημαία επίθεσης αφαιρέθηκε. Τα msg.flag_set = Η σημαία επίθεσης στήθηκε! Τα μάχιμα πλάσματα μαζεύονται εκεί. msg.creature_leaves = Δυσαρεστημένο πλάσμα εγκαταλείπει το βασίλειό σου: {0}! msg.no_gold = Δεν φτάνει ο χρυσός! +msg.no_wood = Δεν φτάνει το ξύλο! Κόψε γιγάντια μανιτάρια (ή δέντρα) με την αξίνα. msg.sold = Δωμάτια πουλήθηκαν: +{0} χρυσός. msg.no_mana_bolt = Δεν φτάνει το μάνα για Κεραυνό. msg.no_mana_heal = Δεν φτάνει το μάνα για Ίαση. @@ -124,6 +125,7 @@ ui.key = Πλήκτρο: {0} # ---- HUD hud.gold = Χρυσός +hud.wood = Ξύλο hud.mana = Μάνα hud.core = Πυρήνας hud.gate = Πύλη @@ -402,7 +404,8 @@ tool.bridge.desc = Χτίζει γέφυρα πάνω από νερό ή λάβ tool.drawbridge.label = Κινητή γέφυρα tool.drawbridge.name = Χτίσε κινητή γέφυρα tool.drawbridge.desc = Γέφυρα που μπορείς να σηκώσεις: σύρε πάνω από το ποτάμι για να τη χτίσεις, κάνε κλικ για αλλαγή: κάτω, πάνω, αυτόματα (σηκώνεται όταν πλησιάζουν εχθροί). Το ξύλο πάνω από νερό καίγεται, η πέτρα πάνω από λάβα όχι. -cost.bridge = {0} χρυσός/πλακίδιο πάνω από νερό, {1} πάνω από λάβα +cost.bridge = {0} χρυσός + {1} ξύλο/πλακίδιο πάνω από νερό, {2} χρυσός πάνω από λάβα +cost.drawbridge = {0} χρυσός + {1} ξύλο/πλακίδιο πάνω από νερό, {2} χρυσός πάνω από λάβα hint.bridge_where = Οι γέφυρες ξεκινούν από το δικό σου έδαφος: σύρε από την επικράτειά σου πέρα από το ποτάμι. hint.bridge_fire = Οι ξύλινες γέφυρες καίγονται: κράτα μακριά παγίδες φωτιάς, πύρινη ανάσα και κεραυνούς – οι πέτρινες γέφυρες πάνω από λάβα δεν καίγονται. hint.bridge_river = Γέφυρες χτίζονται μόνο πάνω από νερό ή λάβα. @@ -414,6 +417,9 @@ tile.lava = Λάβα tile.lava_info = Ό,τι πέφτει μέσα καίγεται. Οι πέτρινες γέφυρες την περνούν. tile.bridge = Ξύλινη γέφυρα tile.lavabridge = Πέτρινη γέφυρα +tile.mushroom = Γιγάντιο μανιτάρι +tile.tree = Δέντρο +tile.plant_info = Σημάδεψέ το με την αξίνα: ένα διαβολάκι το κόβει για {0} ξύλο. tile.drawbridge = Κινητή γέφυρα tile.drawbridge_up = Σηκωμένη tile.drawbridge_down = Κατεβασμένη @@ -1198,6 +1204,7 @@ ed.terrain.silver = Φλέβα ασημιού ed.terrain.ruby = Φλέβα ρουμπινιού ed.terrain.diamond = Φλέβα διαμαντιού ed.terrain.steel = Ατσάλινος τοίχος +ed.terrain.mushroom = Γιγάντιο μανιτάρι ed.place.core = Πυρήνας ψυχής ed.place.portal = Πύλη μετάβασης ed.place.gate = Πύλη ηρώων diff --git a/lang/en.lang b/lang/en.lang index 83f46b1..c631989 100644 --- a/lang/en.lang +++ b/lang/en.lang @@ -64,6 +64,7 @@ msg.flag_removed = Attack flag removed. Your creatures return. msg.flag_set = Attack flag set! Battle-ready creatures gather there. msg.creature_leaves = An unhappy {0} leaves your realm! msg.no_gold = Not enough gold! +msg.no_wood = Not enough wood! Fell giant mushrooms (or trees) with the pick. msg.sold = Rooms sold: +{0} gold. msg.no_mana_bolt = Not enough mana for Lightning. msg.no_mana_heal = Not enough mana for Heal. @@ -124,6 +125,7 @@ ui.key = Key: {0} # ---- HUD hud.gold = Gold +hud.wood = Wood hud.mana = Mana hud.core = Core hud.gate = Gate @@ -402,7 +404,8 @@ tool.bridge.desc = Builds a bridge over water or lava. Drag from your own ground tool.drawbridge.label = Drawbridge tool.drawbridge.name = Build Drawbridge tool.drawbridge.desc = A bridge you can raise: drag across the river to build it, click it to switch: down, up, automatic (rises when enemies come near). Wood over water burns, stone over lava does not. -cost.bridge = {0} gold/tile over water, {1} over lava +cost.bridge = {0} gold + {1} wood/tile over water, {2} gold over lava +cost.drawbridge = {0} gold + {1} wood/tile over water, {2} gold over lava hint.bridge_where = Bridges must start at your own ground: drag from your territory across the river. hint.bridge_fire = Wooden bridges burn: keep fire traps, fire breath and lightning away from them – stone bridges over lava are fireproof. hint.bridge_river = Bridges can only be built over water or lava. @@ -414,6 +417,9 @@ tile.lava = Lava tile.lava_info = Whatever falls in burns. Stone bridges cross it. tile.bridge = Wooden bridge tile.lavabridge = Stone bridge +tile.mushroom = Giant mushroom +tile.tree = Tree +tile.plant_info = Mark it with the pick: an imp fells it for {0} wood. tile.drawbridge = Drawbridge tile.drawbridge_up = Raised tile.drawbridge_down = Lowered @@ -1198,6 +1204,7 @@ ed.terrain.silver = Silver vein ed.terrain.ruby = Ruby vein ed.terrain.diamond = Diamond vein ed.terrain.steel = Steel wall +ed.terrain.mushroom = Giant mushroom ed.place.core = Soul core ed.place.portal = Portal ed.place.gate = Hero gate diff --git a/lang/es.lang b/lang/es.lang index eb00f3d..960a21f 100644 --- a/lang/es.lang +++ b/lang/es.lang @@ -64,6 +64,7 @@ msg.flag_removed = Bandera de ataque retirada. Tus criaturas regresan. msg.flag_set = ¡Bandera de ataque colocada! Las criaturas listas para luchar se reúnen allí. msg.creature_leaves = ¡Un {0} descontento abandona tu reino! msg.no_gold = ¡No hay oro suficiente! +msg.no_wood = ¡No hay madera suficiente! Tala setas gigantes (o árboles) con el pico. msg.sold = Salas vendidas: +{0} de oro. msg.no_mana_bolt = No hay maná suficiente para el Rayo. msg.no_mana_heal = No hay maná suficiente para Curar. @@ -124,6 +125,7 @@ ui.key = Tecla: {0} # ---- HUD hud.gold = Oro +hud.wood = Madera hud.mana = Maná hud.core = Núcleo hud.gate = Puerta @@ -402,7 +404,8 @@ tool.bridge.desc = Construye un puente sobre agua o lava. Arrastra desde tu prop tool.drawbridge.label = Levadizo tool.drawbridge.name = Construir puente levadizo tool.drawbridge.desc = Un puente que puedes alzar: arrástralo sobre el río para construirlo y haz clic para cambiar: abajo, arriba, automático (se alza cuando se acercan enemigos). La madera sobre agua arde, la piedra sobre lava no. -cost.bridge = {0} de oro/casilla sobre agua, {1} sobre lava +cost.bridge = {0} oro + {1} madera/casilla sobre agua, {2} oro sobre lava +cost.drawbridge = {0} oro + {1} madera/casilla sobre agua, {2} oro sobre lava hint.bridge_where = Los puentes deben empezar en tu propio suelo: arrastra desde tu territorio a través del río. hint.bridge_fire = Los puentes de madera arden: aleja de ellos las trampas de fuego, el aliento de fuego y los rayos; los puentes de piedra sobre lava son ignífugos. hint.bridge_river = Los puentes solo pueden construirse sobre agua o lava. @@ -414,6 +417,9 @@ tile.lava = Lava tile.lava_info = Lo que cae dentro arde. Los puentes de piedra lo cruzan. tile.bridge = Puente de madera tile.lavabridge = Puente de piedra +tile.mushroom = Seta gigante +tile.tree = Árbol +tile.plant_info = Márcalo con el pico: un diablillo lo tala por {0} de madera. tile.drawbridge = Puente levadizo tile.drawbridge_up = Alzado tile.drawbridge_down = Bajado @@ -1190,6 +1196,7 @@ ed.terrain.silver = Veta de plata ed.terrain.ruby = Veta de rubíes ed.terrain.diamond = Veta de diamantes ed.terrain.steel = Muro de acero +ed.terrain.mushroom = Seta gigante ed.place.core = Núcleo de alma ed.place.portal = Portal ed.place.gate = Puerta de héroes diff --git a/lang/fi.lang b/lang/fi.lang index 1b04aae..42d5199 100644 --- a/lang/fi.lang +++ b/lang/fi.lang @@ -64,6 +64,7 @@ msg.flag_removed = Hyökkäyslippu poistettu. Olentosi palaavat. msg.flag_set = Hyökkäyslippu asetettu! Taisteluvalmiit olennot kokoontuvat sinne. msg.creature_leaves = Tyytymätön olento lähtee valtakunnastasi: {0}! msg.no_gold = Kulta ei riitä! +msg.no_wood = Ei tarpeeksi puuta! Kaada jättisieniä (tai puita) hakulla. msg.sold = Huoneita myyty: +{0} kultaa. msg.no_mana_bolt = Mana ei riitä salamaan. msg.no_mana_heal = Mana ei riitä parannukseen. @@ -124,6 +125,7 @@ ui.key = Näppäin: {0} # ---- HUD hud.gold = Kulta +hud.wood = Puu hud.mana = Mana hud.core = Ydin hud.gate = Portti @@ -402,7 +404,8 @@ tool.bridge.desc = Rakentaa sillan veden tai laavan yli. Vedä omalta maaltasi j tool.drawbridge.label = Laskusilta tool.drawbridge.name = Rakenna laskusilta tool.drawbridge.desc = Silta, jonka voit nostaa: vedä joen yli rakentaaksesi, napsauta vaihtaaksesi: alhaalla, ylhäällä, automaattinen (nousee vihollisten lähestyessä). Puu veden yllä palaa, kivi laavan yllä ei. -cost.bridge = {0} kultaa/ruutu veden yli, {1} laavan yli +cost.bridge = {0} kultaa + {1} puuta/ruutu veden yllä, {2} kultaa laavan yllä +cost.drawbridge = {0} kultaa + {1} puuta/ruutu veden yllä, {2} kultaa laavan yllä hint.bridge_where = Siltojen on alettava omalta maaltasi: vedä alueeltasi joen yli. hint.bridge_fire = Puusillat palavat: pidä tuliansat, tulihenkäys ja salamat loitolla – kivisillat laavan yllä eivät pala. hint.bridge_river = Siltoja voi rakentaa vain veden tai laavan yli. @@ -414,6 +417,9 @@ tile.lava = Laava tile.lava_info = Mikä sinne putoaa, se palaa. Kivisillat ylittävät sen. tile.bridge = Puusilta tile.lavabridge = Kivisilta +tile.mushroom = Jättisieni +tile.tree = Puu +tile.plant_info = Merkitse hakulla: piru kaataa sen {0} puusta. tile.drawbridge = Laskusilta tile.drawbridge_up = Nostettu tile.drawbridge_down = Laskettu @@ -1198,6 +1204,7 @@ ed.terrain.silver = Hopeasuoni ed.terrain.ruby = Rubiinisuoni ed.terrain.diamond = Timanttisuoni ed.terrain.steel = Teräsmuuri +ed.terrain.mushroom = Jättisieni ed.place.core = Sieluydin ed.place.portal = Portaali ed.place.gate = Sankariportti diff --git a/lang/hr.lang b/lang/hr.lang index f24374d..311feaf 100644 --- a/lang/hr.lang +++ b/lang/hr.lang @@ -64,6 +64,7 @@ msg.flag_removed = Zastava napada uklonjena. Stvorenja se vraćaju. msg.flag_set = Zastava napada postavljena! Stvorenja spremna za boj okupljaju se ondje. msg.creature_leaves = Nezadovoljno stvorenje napušta tvoje carstvo: {0}! msg.no_gold = Nema dovoljno zlata! +msg.no_wood = Nema dovoljno drva! Sruši divovske gljive (ili stabla) krampom. msg.sold = Prostorije prodane: +{0} zlata. msg.no_mana_bolt = Nema dovoljno mane za Munju. msg.no_mana_heal = Nema dovoljno mane za Liječenje. @@ -124,6 +125,7 @@ ui.key = Tipka: {0} # ---- HUD hud.gold = Zlato +hud.wood = Drvo hud.mana = Mana hud.core = Jezgra hud.gate = Vrata @@ -402,7 +404,8 @@ tool.bridge.desc = Gradi most preko vode ili lave. Povuci sa svog tla preko rije tool.drawbridge.label = Pokretni most tool.drawbridge.name = Izgradi pokretni most tool.drawbridge.desc = Most koji možeš podići: povuci preko rijeke da ga izgradiš, klikni za promjenu: dolje, gore, automatski (diže se kad se neprijatelji približe). Drvo nad vodom gori, kamen nad lavom ne. -cost.bridge = {0} zlata/polje preko vode, {1} preko lave +cost.bridge = {0} zlata + {1} drva/polje nad vodom, {2} zlata nad lavom +cost.drawbridge = {0} zlata + {1} drva/polje nad vodom, {2} zlata nad lavom hint.bridge_where = Mostovi moraju početi na tvom tlu: povuci sa svog teritorija preko rijeke. hint.bridge_fire = Drveni mostovi gore: drži vatrene zamke, vatreni dah i munje podalje – kameni mostovi nad lavom ne gore. hint.bridge_river = Mostovi se grade samo preko vode ili lave. @@ -414,6 +417,9 @@ tile.lava = Lava tile.lava_info = Što god upadne, izgori. Kameni mostovi je premošćuju. tile.bridge = Drveni most tile.lavabridge = Kameni most +tile.mushroom = Divovska gljiva +tile.tree = Stablo +tile.plant_info = Označi krampom: vražić je sruši za {0} drva. tile.drawbridge = Pokretni most tile.drawbridge_up = Podignut tile.drawbridge_down = Spušten @@ -1198,6 +1204,7 @@ ed.terrain.silver = Žila srebra ed.terrain.ruby = Žila rubina ed.terrain.diamond = Žila dijamanata ed.terrain.steel = Čelični zid +ed.terrain.mushroom = Divovska gljiva ed.place.core = Jezgra duše ed.place.portal = Portal ed.place.gate = Vrata junaka diff --git a/lang/hu.lang b/lang/hu.lang index 0cf922d..a6d7f16 100644 --- a/lang/hu.lang +++ b/lang/hu.lang @@ -64,6 +64,7 @@ msg.flag_removed = Támadási zászló eltávolítva. A lényeid visszatérnek. msg.flag_set = Támadási zászló kitűzve! A harcra kész lények ott gyülekeznek. msg.creature_leaves = Egy elégedetlen lény elhagyja a birodalmadat: {0}! msg.no_gold = Nincs elég arany! +msg.no_wood = Nincs elég fa! Vágj ki óriásgombákat (vagy fákat) a csákánnyal. msg.sold = Szobák eladva: +{0} arany. msg.no_mana_bolt = Nincs elég mana a Villámhoz. msg.no_mana_heal = Nincs elég mana a Gyógyításhoz. @@ -124,6 +125,7 @@ ui.key = Gomb: {0} # ---- HUD hud.gold = Arany +hud.wood = Fa hud.mana = Mana hud.core = Mag hud.gate = Kapu @@ -402,7 +404,8 @@ tool.bridge.desc = Hidat épít víz vagy láva fölé. Húzd a saját földedr tool.drawbridge.label = Felvonóhíd tool.drawbridge.name = Felvonóhíd építése tool.drawbridge.desc = Felhúzható híd: húzd át a folyón az építéshez, kattints rá a váltáshoz: lent, fent, automatikus (felemelkedik, ha ellenség közeledik). A víz feletti fa ég, a láva feletti kő nem. -cost.bridge = {0} arany/mező víz fölött, {1} láva fölött +cost.bridge = {0} arany + {1} fa/mező víz fölött, {2} arany láva fölött +cost.drawbridge = {0} arany + {1} fa/mező víz fölött, {2} arany láva fölött hint.bridge_where = A hídnak a saját földedről kell indulnia: húzd a területedről a folyón át. hint.bridge_fire = A fahidak égnek: tartsd távol tőlük a tűzcsapdákat, a tűzleheletet és a villámokat – a láva feletti kőhidak tűzállók. hint.bridge_river = Hidat csak víz vagy láva fölé lehet építeni. @@ -414,6 +417,9 @@ tile.lava = Láva tile.lava_info = Ami beleesik, elég. Kőhidak vezetnek át rajta. tile.bridge = Fahíd tile.lavabridge = Kőhíd +tile.mushroom = Óriásgomba +tile.tree = Fa +tile.plant_info = Jelöld meg a csákánnyal: egy manó kivágja {0} fáért. tile.drawbridge = Felvonóhíd tile.drawbridge_up = Felhúzva tile.drawbridge_down = Leeresztve @@ -1198,6 +1204,7 @@ ed.terrain.silver = Ezüstér ed.terrain.ruby = Rubinér ed.terrain.diamond = Gyémántér ed.terrain.steel = Acélfal +ed.terrain.mushroom = Óriásgomba ed.place.core = Lélekmag ed.place.portal = Portál ed.place.gate = Hőskapu diff --git a/lang/it.lang b/lang/it.lang index ba711f2..cc6c652 100644 --- a/lang/it.lang +++ b/lang/it.lang @@ -64,6 +64,7 @@ msg.flag_removed = Bandiera d'attacco rimossa. Le creature tornano indietro. msg.flag_set = Bandiera d'attacco piantata! Le creature pronte alla lotta si radunano lì. msg.creature_leaves = Una creatura scontenta lascia il tuo regno: {0}! msg.no_gold = Oro insufficiente! +msg.no_wood = Legno insufficiente! Abbatti funghi giganti (o alberi) con il piccone. msg.sold = Stanze vendute: +{0} oro. msg.no_mana_bolt = Mana insufficiente per il Fulmine. msg.no_mana_heal = Mana insufficiente per la Cura. @@ -124,6 +125,7 @@ ui.key = Tasto: {0} # ---- HUD hud.gold = Oro +hud.wood = Legno hud.mana = Mana hud.core = Nucleo hud.gate = Porta @@ -402,7 +404,8 @@ tool.bridge.desc = Costruisce un ponte su acqua o lava. Trascina dal tuo suolo a tool.drawbridge.label = Levatoio tool.drawbridge.name = Costruisci ponte levatoio tool.drawbridge.desc = Un ponte che puoi sollevare: trascina sul fiume per costruirlo, clicca per cambiare: giù, su, automatico (si alza quando arrivano nemici). Il legno sull'acqua brucia, la pietra sulla lava no. -cost.bridge = {0} oro/casella sull'acqua, {1} sulla lava +cost.bridge = {0} oro + {1} legno/casella sull'acqua, {2} oro sulla lava +cost.drawbridge = {0} oro + {1} legno/casella sull'acqua, {2} oro sulla lava hint.bridge_where = I ponti devono partire dal tuo suolo: trascina dal tuo territorio attraverso il fiume. hint.bridge_fire = I ponti di legno bruciano: tieni lontani trappole di fuoco, soffio infuocato e fulmini; i ponti di pietra sulla lava sono ignifughi. hint.bridge_river = I ponti si costruiscono solo su acqua o lava. @@ -414,6 +417,9 @@ tile.lava = Lava tile.lava_info = Ciò che ci cade brucia. I ponti di pietra la attraversano. tile.bridge = Ponte di legno tile.lavabridge = Ponte di pietra +tile.mushroom = Fungo gigante +tile.tree = Albero +tile.plant_info = Segnalo col piccone: un diavoletto lo abbatte per {0} legno. tile.drawbridge = Ponte levatoio tile.drawbridge_up = Sollevato tile.drawbridge_down = Abbassato @@ -1190,6 +1196,7 @@ ed.terrain.silver = Vena d'argento ed.terrain.ruby = Vena di rubini ed.terrain.diamond = Vena di diamanti ed.terrain.steel = Muro d'acciaio +ed.terrain.mushroom = Fungo gigante ed.place.core = Nucleo dell'Anima ed.place.portal = Portale ed.place.gate = Porta degli Eroi diff --git a/lang/nl.lang b/lang/nl.lang index 2aabc80..b7c9b4b 100644 --- a/lang/nl.lang +++ b/lang/nl.lang @@ -64,6 +64,7 @@ msg.flag_removed = Aanvalsvlag verwijderd. Je wezens keren terug. msg.flag_set = Aanvalsvlag geplaatst! Strijdklare wezens verzamelen zich daar. msg.creature_leaves = Een ontevreden {0} verlaat je rijk! msg.no_gold = Niet genoeg goud! +msg.no_wood = Niet genoeg hout! Kap reuzenpaddenstoelen (of bomen) met het houweel. msg.sold = Kamers verkocht: +{0} goud. msg.no_mana_bolt = Niet genoeg mana voor Bliksem. msg.no_mana_heal = Niet genoeg mana voor Genezen. @@ -124,6 +125,7 @@ ui.key = Toets: {0} # ---- HUD hud.gold = Goud +hud.wood = Hout hud.mana = Mana hud.core = Kern hud.gate = Poort @@ -402,7 +404,8 @@ tool.bridge.desc = Bouwt een brug over water of lava. Sleep vanaf je eigen grond tool.drawbridge.label = Ophaalbrug tool.drawbridge.name = Ophaalbrug bouwen tool.drawbridge.desc = Een brug die je kunt ophalen: sleep over de rivier om hem te bouwen, klik om te wisselen: omlaag, omhoog, automatisch (gaat omhoog als vijanden naderen). Hout boven water brandt, steen boven lava niet. -cost.bridge = {0} goud/vak over water, {1} over lava +cost.bridge = {0} goud + {1} hout/tegel boven water, {2} goud boven lava +cost.drawbridge = {0} goud + {1} hout/tegel boven water, {2} goud boven lava hint.bridge_where = Bruggen moeten op je eigen grond beginnen: sleep vanuit je gebied over de rivier. hint.bridge_fire = Houten bruggen branden: houd vuurvallen, vuuradem en bliksem uit de buurt – stenen bruggen over lava zijn vuurvast. hint.bridge_river = Bruggen kun je alleen over water of lava bouwen. @@ -414,6 +417,9 @@ tile.lava = Lava tile.lava_info = Wat erin valt, verbrandt. Stenen bruggen gaan eroverheen. tile.bridge = Houten brug tile.lavabridge = Stenen brug +tile.mushroom = Reuzenpaddenstoel +tile.tree = Boom +tile.plant_info = Markeer met het houweel: een duiveltje kapt hem voor {0} hout. tile.drawbridge = Ophaalbrug tile.drawbridge_up = Opgehaald tile.drawbridge_down = Neergelaten @@ -1198,6 +1204,7 @@ ed.terrain.silver = Zilverader ed.terrain.ruby = Robijnader ed.terrain.diamond = Diamantader ed.terrain.steel = Stalen muur +ed.terrain.mushroom = Reuzenpaddenstoel ed.place.core = Zielenkern ed.place.portal = Portaal ed.place.gate = Heldenpoort diff --git a/lang/no.lang b/lang/no.lang index b18a062..a0f1b7e 100644 --- a/lang/no.lang +++ b/lang/no.lang @@ -64,6 +64,7 @@ msg.flag_removed = Angrepsflagget er fjernet. Skapningene dine vender tilbake. msg.flag_set = Angrepsflagget er satt! Kampklare skapninger samles der. msg.creature_leaves = En misfornøyd {0} forlater riket ditt! msg.no_gold = Ikke nok gull! +msg.no_wood = Ikke nok tre! Felle kjempesopper (eller trær) med hakka. msg.sold = Rom solgt: +{0} gull. msg.no_mana_bolt = Ikke nok mana til Lyn. msg.no_mana_heal = Ikke nok mana til Helbred. @@ -124,6 +125,7 @@ ui.key = Tast: {0} # ---- HUD hud.gold = Gull +hud.wood = Tre hud.mana = Mana hud.core = Kjerne hud.gate = Port @@ -401,7 +403,8 @@ tool.bridge.desc = Bygger en bro over vann eller lava. Dra fra din egen grunn ov tool.drawbridge.label = Vindebro tool.drawbridge.name = Bygg vindebro tool.drawbridge.desc = En bro du kan heise opp: dra over elva for å bygge den, klikk for å bytte: nede, oppe, automatisk (heises når fiender nærmer seg). Tre over vann brenner, stein over lava gjør ikke. -cost.bridge = {0} gull/rute over vann, {1} over lava +cost.bridge = {0} gull + {1} tre/rute over vann, {2} gull over lava +cost.drawbridge = {0} gull + {1} tre/rute over vann, {2} gull over lava hint.bridge_where = Broer må starte på din egen grunn: dra fra området ditt over elven. hint.bridge_fire = Trebroer brenner: hold ildfeller, ildpust og lyn unna dem – steinbroer over lava er brannsikre. hint.bridge_river = Broer kan bare bygges over vann eller lava. @@ -413,6 +416,9 @@ tile.lava = Lava tile.lava_info = Det som faller i, brenner. Steinbroer fører over. tile.bridge = Trebro tile.lavabridge = Steinbro +tile.mushroom = Kjempesopp +tile.tree = Tre +tile.plant_info = Merk med hakka: en imp feller den for {0} tre. tile.drawbridge = Vindebro tile.drawbridge_up = Heist opp tile.drawbridge_down = Senket @@ -1197,6 +1203,7 @@ ed.terrain.silver = Sølvåre ed.terrain.ruby = Rubinåre ed.terrain.diamond = Diamantåre ed.terrain.steel = Stålvegg +ed.terrain.mushroom = Kjempesopp ed.place.core = Sjelekjerne ed.place.portal = Portal ed.place.gate = Helteport diff --git a/lang/pt.lang b/lang/pt.lang index 020c070..f936260 100644 --- a/lang/pt.lang +++ b/lang/pt.lang @@ -64,6 +64,7 @@ msg.flag_removed = Bandeira de ataque retirada. As tuas criaturas regressam. msg.flag_set = Bandeira de ataque colocada! As criaturas prontas para combate reúnem-se ali. msg.creature_leaves = Um {0} descontente abandona o teu reino! msg.no_gold = Ouro insuficiente! +msg.no_wood = Madeira insuficiente! Abate cogumelos gigantes (ou árvores) com a picareta. msg.sold = Salas vendidas: +{0} de ouro. msg.no_mana_bolt = Mana insuficiente para o Relâmpago. msg.no_mana_heal = Mana insuficiente para Curar. @@ -124,6 +125,7 @@ ui.key = Tecla: {0} # ---- HUD hud.gold = Ouro +hud.wood = Madeira hud.mana = Mana hud.core = Núcleo hud.gate = Portão @@ -402,7 +404,8 @@ tool.bridge.desc = Constrói uma ponte sobre água ou lava. Arrasta a partir do tool.drawbridge.label = Levadiça tool.drawbridge.name = Construir ponte levadiça tool.drawbridge.desc = Uma ponte que podes levantar: arrasta sobre o rio para a construir, clica para mudar: em baixo, em cima, automática (sobe quando os inimigos se aproximam). Madeira sobre água arde, pedra sobre lava não. -cost.bridge = {0} de ouro/casa sobre água, {1} sobre lava +cost.bridge = {0} ouro + {1} madeira/casa sobre água, {2} ouro sobre lava +cost.drawbridge = {0} ouro + {1} madeira/casa sobre água, {2} ouro sobre lava hint.bridge_where = As pontes têm de começar no teu chão: arrasta a partir do teu território através do rio. hint.bridge_fire = As pontes de madeira ardem: mantém armadilhas de fogo, sopro de fogo e relâmpagos longe delas – as pontes de pedra sobre lava não ardem. hint.bridge_river = Só se podem construir pontes sobre água ou lava. @@ -414,6 +417,9 @@ tile.lava = Lava tile.lava_info = O que cai lá dentro arde. As pontes de pedra atravessam-na. tile.bridge = Ponte de madeira tile.lavabridge = Ponte de pedra +tile.mushroom = Cogumelo gigante +tile.tree = Árvore +tile.plant_info = Marca-o com a picareta: um diabrete abate-o por {0} de madeira. tile.drawbridge = Ponte levadiça tile.drawbridge_up = Levantada tile.drawbridge_down = Baixada @@ -1198,6 +1204,7 @@ ed.terrain.silver = Veio de prata ed.terrain.ruby = Veio de rubis ed.terrain.diamond = Veio diamantes ed.terrain.steel = Parede de aço +ed.terrain.mushroom = Cogumelo gigante ed.place.core = Núcleo de alma ed.place.portal = Portal ed.place.gate = Portão heróis diff --git a/lang/ro.lang b/lang/ro.lang index f85398f..b2f85a0 100644 --- a/lang/ro.lang +++ b/lang/ro.lang @@ -64,6 +64,7 @@ msg.flag_removed = Steagul de atac a fost scos. Creaturile tale se întorc. msg.flag_set = Steag de atac plantat! Creaturile pregătite de luptă se adună acolo. msg.creature_leaves = Un {0} nemulțumit îți părăsește tărâmul! msg.no_gold = Nu ai destul aur! +msg.no_wood = Nu ai destul lemn! Doboară ciuperci uriașe (sau copaci) cu târnăcopul. msg.sold = Camere vândute: +{0} aur. msg.no_mana_bolt = Nu ai destulă mana pentru Fulger. msg.no_mana_heal = Nu ai destulă mana pentru Vindecare. @@ -124,6 +125,7 @@ ui.key = Tasta: {0} # ---- HUD hud.gold = Aur +hud.wood = Lemn hud.mana = Mana hud.core = Miez hud.gate = Poartă @@ -402,7 +404,8 @@ tool.bridge.desc = Construiește un pod peste apă sau lavă. Trage de pe terenu tool.drawbridge.label = Pod mobil tool.drawbridge.name = Construiește pod mobil tool.drawbridge.desc = Un pod pe care îl poți ridica: trage peste râu ca să-l construiești, dă clic pentru a schimba: jos, sus, automat (se ridică atunci când se apropie dușmanii). Lemnul peste apă arde, piatra peste lavă nu. -cost.bridge = {0} aur/dală peste apă, {1} peste lavă +cost.bridge = {0} aur + {1} lemn/pătrat peste apă, {2} aur peste lavă +cost.drawbridge = {0} aur + {1} lemn/pătrat peste apă, {2} aur peste lavă hint.bridge_where = Podurile trebuie să pornească de pe terenul tău: trage de pe teritoriul tău peste râu. hint.bridge_fire = Podurile de lemn ard: ține capcanele de foc, suflarea de foc și fulgerele departe de ele – podurile de piatră peste lavă nu ard. hint.bridge_river = Podurile se pot construi doar peste apă sau lavă. @@ -414,6 +417,9 @@ tile.lava = Lavă tile.lava_info = Ce cade înăuntru arde. Podurile de piatră o traversează. tile.bridge = Pod de lemn tile.lavabridge = Pod de piatră +tile.mushroom = Ciupercă uriașă +tile.tree = Copac +tile.plant_info = Marchează-l cu târnăcopul: un drăcușor îl doboară pentru {0} lemn. tile.drawbridge = Pod mobil tile.drawbridge_up = Ridicat tile.drawbridge_down = Coborât @@ -1198,6 +1204,7 @@ ed.terrain.silver = Filon de argint ed.terrain.ruby = Filon de rubine ed.terrain.diamond = Filon de diamante ed.terrain.steel = Zid de oțel +ed.terrain.mushroom = Ciupercă uriașă ed.place.core = Miezul sufletului ed.place.portal = Portal ed.place.gate = Poarta eroilor diff --git a/lang/ru.lang b/lang/ru.lang index f5f59f1..99bc71d 100644 --- a/lang/ru.lang +++ b/lang/ru.lang @@ -64,6 +64,7 @@ msg.flag_removed = Флаг атаки убран. Существа возвра msg.flag_set = Флаг атаки установлен! Готовые к бою существа собираются там. msg.creature_leaves = Недовольное существо ({0}) покидает твои владения! msg.no_gold = Не хватает золота! +msg.no_wood = Мало дерева! Рубите гигантские грибы (или деревья) киркой. msg.sold = Комнаты проданы: +{0} золота. msg.no_mana_bolt = Не хватает маны для молнии. msg.no_mana_heal = Не хватает маны для лечения. @@ -124,6 +125,7 @@ ui.key = Клавиша: {0} # ---- HUD hud.gold = Золото +hud.wood = Дерево hud.mana = Мана hud.core = Ядро hud.gate = Врата @@ -402,7 +404,8 @@ tool.bridge.desc = Строит мост через воду или лаву. Т tool.drawbridge.label = Подъёмный tool.drawbridge.name = Построить подъёмный мост tool.drawbridge.desc = Мост, который можно поднять: протяните через реку, чтобы построить, щёлкните, чтобы переключить: опущен, поднят, автоматически (поднимается при приближении врагов). Дерево над водой горит, камень над лавой — нет. -cost.bridge = {0} золота/клетка над водой, {1} над лавой +cost.bridge = {0} золота + {1} дерева/клетка над водой, {2} золота над лавой +cost.drawbridge = {0} золота + {1} дерева/клетка над водой, {2} золота над лавой hint.bridge_where = Мост должен начинаться у твоей земли: тяни от своей территории через реку. hint.bridge_fire = Деревянные мосты горят: держите огненные ловушки, огненное дыхание и молнии подальше; каменные мосты над лавой не горят. hint.bridge_river = Мосты строятся только над водой или лавой. @@ -414,6 +417,9 @@ tile.lava = Лава tile.lava_info = Всё, что туда падает, сгорает. Её пересекают каменные мосты. tile.bridge = Деревянный мост tile.lavabridge = Каменный мост +tile.mushroom = Гигантский гриб +tile.tree = Дерево +tile.plant_info = Отметьте киркой: бес срубит его за {0} дерева. tile.drawbridge = Подъёмный мост tile.drawbridge_up = Поднят tile.drawbridge_down = Опущен @@ -1190,6 +1196,7 @@ ed.terrain.silver = Серебряная жила ed.terrain.ruby = Рубиновая жила ed.terrain.diamond = Алмазная жила ed.terrain.steel = Стальная стена +ed.terrain.mushroom = Гигантский гриб ed.place.core = Ядро души ed.place.portal = Портал ed.place.gate = Врата героев diff --git a/lang/sk.lang b/lang/sk.lang index 240ae74..e978e78 100644 --- a/lang/sk.lang +++ b/lang/sk.lang @@ -64,6 +64,7 @@ msg.flag_removed = Útočná vlajka odstránená. Tvoje tvory sa vracajú. msg.flag_set = Útočná vlajka vztýčená! Bojaschopné tvory sa pri nej zhromaždia. msg.creature_leaves = Nespokojný tvor opúšťa tvoju ríšu: {0}! msg.no_gold = Nedostatok zlata! +msg.no_wood = Nedostatok dreva! Vyrúbaj obrie huby (alebo stromy) krompáčom. msg.sold = Miestnosti predané: +{0} zlata. msg.no_mana_bolt = Nedostatok many na blesk. msg.no_mana_heal = Nedostatok many na liečenie. @@ -124,6 +125,7 @@ ui.key = Kláves: {0} # ---- HUD hud.gold = Zlato +hud.wood = Drevo hud.mana = Mana hud.core = Jadro hud.gate = Brána @@ -402,7 +404,8 @@ tool.bridge.desc = Postaví most cez vodu alebo lávu. Ťahaj z vlastnej zeme ce tool.drawbridge.label = Padací most tool.drawbridge.name = Postaviť padací most tool.drawbridge.desc = Most, ktorý môžeš vytiahnuť: potiahni cez rieku a postav ho, kliknutím prepínaš: dole, hore, automaticky (zdvihne sa, keď sa blížia nepriatelia). Drevo nad vodou horí, kameň nad lávou nie. -cost.bridge = {0} zlata/políčko cez vodu, {1} cez lávu +cost.bridge = {0} zlata + {1} dreva/pole nad vodou, {2} zlata nad lávou +cost.drawbridge = {0} zlata + {1} dreva/pole nad vodou, {2} zlata nad lávou hint.bridge_where = Mosty musia začínať na tvojej zemi: ťahaj zo svojho územia cez rieku. hint.bridge_fire = Drevené mosty horia: drž ohnivé pasce, ohnivý dych a blesky ďalej od nich – kamenné mosty nad lávou nehoria. hint.bridge_river = Mosty sa dajú stavať len cez vodu alebo lávu. @@ -414,6 +417,9 @@ tile.lava = Láva tile.lava_info = Čo do nej spadne, zhorí. Prechádzajú ju kamenné mosty. tile.bridge = Drevený most tile.lavabridge = Kamenný most +tile.mushroom = Obria huba +tile.tree = Strom +tile.plant_info = Označ krompáčom: škriatok ho vyrúbe za {0} dreva. tile.drawbridge = Padací most tile.drawbridge_up = Vytiahnutý tile.drawbridge_down = Spustený @@ -1198,6 +1204,7 @@ ed.terrain.silver = Strieborná žila ed.terrain.ruby = Rubínová žila ed.terrain.diamond = Diamantová žila ed.terrain.steel = Oceľová stena +ed.terrain.mushroom = Obria huba ed.place.core = Jadro duše ed.place.portal = Portál ed.place.gate = Brána hrdinov diff --git a/lang/sr.lang b/lang/sr.lang index aea2cd8..af3880e 100644 --- a/lang/sr.lang +++ b/lang/sr.lang @@ -64,6 +64,7 @@ msg.flag_removed = Застава напада уклоњена. Створењ msg.flag_set = Застава напада постављена! Створења спремна за бој окупљају се тамо. msg.creature_leaves = Незадовољно створење напушта твоје царство: {0}! msg.no_gold = Нема довољно злата! +msg.no_wood = Нема довољно дрва! Сруши џиновске печурке (или стабла) крампом. msg.sold = Просторије продате: +{0} злата. msg.no_mana_bolt = Нема довољно мане за Муњу. msg.no_mana_heal = Нема довољно мане за Лечење. @@ -124,6 +125,7 @@ ui.key = Тастер: {0} # ---- HUD hud.gold = Злато +hud.wood = Дрво hud.mana = Мана hud.core = Језгро hud.gate = Капија @@ -402,7 +404,8 @@ tool.bridge.desc = Гради мост преко воде или лаве. Пр tool.drawbridge.label = Покретни мост tool.drawbridge.name = Изгради покретни мост tool.drawbridge.desc = Мост који можеш подићи: повуци преко реке да га изградиш, кликни за промену: доле, горе, аутоматски (диже се кад се непријатељи приближе). Дрво над водом гори, камен над лавом не. -cost.bridge = {0} злата/поље преко воде, {1} преко лаве +cost.bridge = {0} злата + {1} дрва/поље над водом, {2} злата над лавом +cost.drawbridge = {0} злата + {1} дрва/поље над водом, {2} злата над лавом hint.bridge_where = Мостови морају да почну на твом тлу: превуци са своје територије преко реке. hint.bridge_fire = Дрвени мостови горе: држи ватрене замке, ватрени дах и муње подаље – камени мостови над лавом не горе. hint.bridge_river = Мостови се граде само преко воде или лаве. @@ -414,6 +417,9 @@ tile.lava = Лава tile.lava_info = Шта год упадне, изгори. Камени мостови је премошћују. tile.bridge = Дрвени мост tile.lavabridge = Камени мост +tile.mushroom = Џиновска печурка +tile.tree = Стабло +tile.plant_info = Означи крампом: враг је сруши за {0} дрва. tile.drawbridge = Покретни мост tile.drawbridge_up = Подигнут tile.drawbridge_down = Спуштен @@ -1198,6 +1204,7 @@ ed.terrain.silver = Жила сребра ed.terrain.ruby = Жила рубина ed.terrain.diamond = Жила дијаманата ed.terrain.steel = Челични зид +ed.terrain.mushroom = Џиновска печурка ed.place.core = Језгро душе ed.place.portal = Портал ed.place.gate = Капија хероја diff --git a/lang/sv.lang b/lang/sv.lang index 9ee5a5c..6766c8e 100644 --- a/lang/sv.lang +++ b/lang/sv.lang @@ -64,6 +64,7 @@ msg.flag_removed = Anfallsflaggan borttagen. Dina varelser återvänder. msg.flag_set = Anfallsflaggan satt! Stridsredo varelser samlas där. msg.creature_leaves = En olycklig {0} lämnar ditt rike! msg.no_gold = Inte tillräckligt med guld! +msg.no_wood = Inte nog med trä! Fäll jättesvampar (eller träd) med hackan. msg.sold = Rum sålda: +{0} guld. msg.no_mana_bolt = Inte tillräckligt med mana för Blixt. msg.no_mana_heal = Inte tillräckligt med mana för Läk. @@ -124,6 +125,7 @@ ui.key = Tangent: {0} # ---- HUD hud.gold = Guld +hud.wood = Trä hud.mana = Mana hud.core = Kärna hud.gate = Port @@ -402,7 +404,8 @@ tool.bridge.desc = Bygger en bro över vatten eller lava. Dra från din egen mar tool.drawbridge.label = Vindbrygga tool.drawbridge.name = Bygg vindbrygga tool.drawbridge.desc = En bro du kan hissa upp: dra över floden för att bygga den, klicka för att växla: nere, uppe, automatisk (hissas när fiender närmar sig). Trä över vatten brinner, sten över lava gör det inte. -cost.bridge = {0} guld/ruta över vatten, {1} över lava +cost.bridge = {0} guld + {1} trä/ruta över vatten, {2} guld över lava +cost.drawbridge = {0} guld + {1} trä/ruta över vatten, {2} guld över lava hint.bridge_where = Broar måste börja vid din egen mark: dra från ditt territorium över floden. hint.bridge_fire = Träbroar brinner: håll eldfällor, eldande och blixtar borta från dem – stenbroar över lava är brandsäkra. hint.bridge_river = Broar kan bara byggas över vatten eller lava. @@ -414,6 +417,9 @@ tile.lava = Lava tile.lava_info = Det som faller i brinner upp. Stenbroar korsar den. tile.bridge = Träbro tile.lavabridge = Stenbro +tile.mushroom = Jättesvamp +tile.tree = Träd +tile.plant_info = Markera med hackan: en imp fäller den för {0} trä. tile.drawbridge = Vindbrygga tile.drawbridge_up = Uppdragen tile.drawbridge_down = Nedsänkt @@ -1198,6 +1204,7 @@ ed.terrain.silver = Silveråder ed.terrain.ruby = Rubinåder ed.terrain.diamond = Diamantåder ed.terrain.steel = Stålvägg +ed.terrain.mushroom = Jättesvamp ed.place.core = Själskärna ed.place.portal = Portal ed.place.gate = Hjälteport diff --git a/src/editor/map.rs b/src/editor/map.rs index 212e091..0f000e5 100644 --- a/src/editor/map.rs +++ b/src/editor/map.rs @@ -35,7 +35,7 @@ enum Cat { const CATS: [Cat; 9] = [Cat::Terrain, Cat::Rooms, Cat::Places, Cat::Units, Cat::Towers, Cat::Traps, Cat::Forts, Cat::Zones, Cat::Erase]; -const TERRAIN: [&str; 13] = ["floor", "earth", "reinforced", "rock", "water", "lava", "bridge", "lavabridge", "gold", "silver", "ruby", "diamond", "steel"]; +const TERRAIN: [&str; 14] = ["floor", "earth", "reinforced", "rock", "water", "lava", "bridge", "lavabridge", "gold", "silver", "ruby", "diamond", "steel", "mushroom"]; const PLACES: [&str; 7] = ["core", "portal", "gate", "spring", "shard", "chest", "chained"]; const OWNERS: [Owner; 6] = [Owner::Player, Owner::Hero, Owner::Rival1, Owner::Rival2, Owner::Rival3, Owner::None]; const ZONE_SHAPES: [&str; 4] = ["rect", "circle", "tiles", "line"]; @@ -75,6 +75,7 @@ fn kind_of_terrain(t: &str) -> (Kind, bool) { "lava" => (Kind::Lava, false), "bridge" => (Kind::Bridge, false), "lavabridge" => (Kind::LavaBridge, false), + "mushroom" => (Kind::Mushroom, false), "gold" => (Kind::Gold, false), "silver" => (Kind::Silver, false), "ruby" => (Kind::Ruby, false), @@ -216,6 +217,9 @@ impl MapEdit { tl.reinforced = reinforced; tl.owner = if reinforced && owner == Owner::None { Owner::Player } else { owner }; tl.marked = false; + if tl.plant() { + tl.hp = crate::wood::MUSHROOM_HP; + } tl.gold = match k { Kind::Gold => 1200, Kind::Silver => 900, diff --git a/src/game.rs b/src/game.rs index 0457945..a84b259 100644 --- a/src/game.rs +++ b/src/game.rs @@ -462,6 +462,7 @@ pub struct MasterState { pub core: (i32, i32), pub core_hp: f32, pub gold: f32, + pub wood: f32, pub mana: f32, pub payday: f32, pub payday_warned: bool, @@ -586,6 +587,10 @@ pub struct Game { #[serde(default)] pub bridgework: crate::bridges::BridgeWork, // burning and worn bridges #[serde(default)] + pub wood: f32, // the second resource (see wood.rs) + #[serde(default)] + pub woodwork: crate::wood::WoodWork, // felled mushrooms growing back + #[serde(default)] pub dwarf_t: f32, #[serde(default)] pub rune_free: u32, // rune forge towers that can be built for free (from chests) @@ -749,9 +754,9 @@ pub const ROOM_NAMES: [&str; N_ROOMS] = [ ]; // bridge cost per tile: over water, over lava -pub const BRIDGE_COST: [i32; 2] = [30, 75]; -// a drawbridge tile (over water or lava) -pub const DRAWBRIDGE_COST: i32 = 150; +pub const BRIDGE_COST: [i32; 2] = [10, 75]; +// a drawbridge tile: over water (and wood, see wood.rs), over lava +pub const DRAWBRIDGE_COST: [i32; 2] = [120, 150]; // steel wall cost per tile: from earth, from a reinforced wall pub const STEEL_COST: [i32; 2] = [80, 40]; pub const STEEL_HP: f32 = 40.0; @@ -904,6 +909,8 @@ impl Game { vrng: crate::particles::vrng(), dwarf_caves: Vec::new(), bridgework: Default::default(), + wood: crate::wood::WOOD_START, + woodwork: Default::default(), dwarf_t: 30.0, rune_free: 0, rune_final: 0, @@ -1394,6 +1401,7 @@ impl Game { core: self.map.core, core_hp: self.core_hp, gold: self.gold, + wood: self.wood, mana: self.mana, payday: self.payday, payday_warned: self.payday_warned, @@ -1423,6 +1431,7 @@ impl Game { self.map.core = m.core; self.core_hp = m.core_hp; self.gold = m.gold; + self.wood = m.wood; self.mana = m.mana; self.payday = m.payday; self.payday_warned = m.payday_warned; @@ -1657,6 +1666,7 @@ impl Game { } self.update_dwarves(dt); self.update_bridges(dt); + self.update_wood(dt); // fallen hearts of a match are shared state: every client marks them in the same step self.update_fallen_masters(); // the end of the game and the fog are about the master at this computer @@ -2896,7 +2906,7 @@ impl Game { } pub fn build_bridges_of(&mut self, x0: i32, y0: i32, x1: i32, y1: i32, draw: bool) { - let (mut built, mut broke, mut any_river) = (0, false, false); + let (mut built, mut broke, mut any_river, mut no_wood) = (0, false, false, false); loop { let mut add = Vec::new(); for y in y0.min(y1)..=y0.max(y1) { @@ -2917,12 +2927,19 @@ impl Game { let mut progress = false; for i in add { let lava = self.map.t[i].kind == Kind::Lava; - let cost = if draw { DRAWBRIDGE_COST } else { BRIDGE_COST[lava as usize] } as f32; + let cost = if draw { DRAWBRIDGE_COST[lava as usize] } else { BRIDGE_COST[lava as usize] } as f32; + // wooden bridges also cost wood + let wood = if lava { 0.0 } else if draw { crate::wood::DRAWBRIDGE_WOOD } else { crate::wood::BRIDGE_WOOD }; if self.gold < cost { broke = true; continue; } + if self.wood + 1e-3 < wood { + no_wood = true; + continue; + } self.gold -= cost; + self.wood -= wood; let t = &mut self.map.t[i]; t.kind = if draw { Kind::Drawbridge @@ -2948,6 +2965,9 @@ impl Game { if broke { self.msg("msg.no_gold", vec![]); self.sfx_ui(Sfx::Error); + } else if no_wood { + self.msg("msg.no_wood", vec![]); + self.sfx_ui(Sfx::Error); } else if built == 0 { self.hint(21, if any_river { "hint.bridge_where" } else { "hint.bridge_river" }); } @@ -3300,6 +3320,9 @@ impl Game { self.sfx(Sfx::Dig, fxx, fxy); } if done { + if self.map.t[t].plant() { + self.felled(t); + } self.dig_out(t); e.job = Job::None; } @@ -4728,7 +4751,7 @@ impl Game { } if t.owner == self.me && t.bridge() { let lava = t.river() == Some(Kind::Lava); - let cost = if t.kind == Kind::Drawbridge { DRAWBRIDGE_COST } else { BRIDGE_COST[lava as usize] }; + let cost = if t.kind == Kind::Drawbridge { DRAWBRIDGE_COST[lava as usize] } else { BRIDGE_COST[lava as usize] }; t.kind = if lava { Kind::Lava } else { Kind::Water }; t.owner = Owner::None; t.reserved = 0; diff --git a/src/gfx.rs b/src/gfx.rs index 0388258..02b3173 100644 --- a/src/gfx.rs +++ b/src/gfx.rs @@ -83,6 +83,11 @@ pub const T_RIVAL3: u32 = 189; // 4 variants: floor of the yellow master pub const I_DRAWBRIDGE: u32 = 193; // drawbridge tool: a raised flap on chains pub const I_FREEZE: u32 = 194; // frost spell: a snowflake pub const T_OBSIDIAN: u32 = 195; // 4 variants: cooled lava, dark glass with glowing seams +pub const T_STEM: u32 = 199; // giant mushroom stem +pub const T_CAP: u32 = 200; // giant mushroom cap, glowing spots +pub const T_BARK: u32 = 201; // tree trunk +pub const T_LEAVES: u32 = 202; // 2 variants: tree crown +pub const T_GRASS: u32 = 204; // 4 variants: grass above ground pub struct Gfx { pub atlas: Texture2D, @@ -835,6 +840,39 @@ fn gen_atlas() -> Image { None } }); + // giant mushroom: pale ribbed stem, a violet cap with glowing spots + cv.cell(T_STEM, |x, y| { + let r = hash(x, y, 410); + Some(if x % 4 == 0 { c(150, 140, 130) } else if r % 9 == 0 { c(170, 160, 150) } else { c(200, 192, 178) }) + }); + cv.cell(T_CAP, |x, y| { + let spot = |cx: i32, cy: i32| (x - cx).pow(2) + (y - cy).pow(2) <= 2; + if spot(4, 4) || spot(11, 6) || spot(6, 11) || spot(12, 12) { + Some(c(150, 255, 230)) + } else if (x + y) % 5 == 0 { + Some(c(90, 50, 130)) + } else { + Some(c(120, 66, 170)) + } + }); + // tree: bark and two kinds of crown + cv.cell(T_BARK, |x, y| { + let r = hash(x, y, 420); + Some(if x % 5 == 0 || r % 7 == 0 { c(60, 40, 24) } else { c(96, 66, 40) }) + }); + for v in 0..2u32 { + cv.cell(T_LEAVES + v, |x, y| { + let r = hash(x, y, 430 + v); + Some(if r % 5 == 0 { c(30, 70, 30) } else if r % 7 == 0 { c(110, 160, 60) } else if v == 0 { c(56, 110, 44) } else { c(70, 120, 40) }) + }); + } + // grass above ground + for v in 0..4u32 { + cv.cell(T_GRASS + v, |x, y| { + let r = hash(x, y, 440 + v); + Some(if r % 11 == 0 { c(120, 170, 70) } else if r % 6 == 0 { c(50, 96, 40) } else if r % 23 == 0 { c(200, 190, 90) } else { c(74, 126, 52) }) + }); + } // obsidian: cooled lava, dark glass with a few glowing seams for v in 0..4u32 { cv.cell(T_OBSIDIAN + v, |x, y| { @@ -1976,6 +2014,8 @@ impl Gfx { Kind::Lava => T_LAVA + v, Kind::Bridge | Kind::Drawbridge => T_BRIDGE + (v & 1), Kind::Obsidian => T_OBSIDIAN + v, + Kind::Mushroom => T_FLOOR + v, + Kind::Tree => T_GRASS + v, Kind::LavaBridge => T_STONEBRIDGE + (v & 1), Kind::Shard => T_HEROFLOOR + v, Kind::Aerie => T_AERIE + v, diff --git a/src/main.rs b/src/main.rs index e6607b6..69447f7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -42,6 +42,7 @@ mod touch; mod ui; mod voice; mod wilds; +mod wood; mod xm; use cloud::{Cloud, CloudEvent}; diff --git a/src/map.rs b/src/map.rs index 98dffc1..b1e998e 100644 --- a/src/map.rs +++ b/src/map.rs @@ -70,6 +70,8 @@ pub enum Kind { Altar, // room: sacrifices Drawbridge, // bridge that can be raised (res: see DB_RAISED, DB_AUTO, DB_LAVA) Obsidian, // lava cooled by frost: walkable until it melts again + Mushroom, // giant mushroom on open ground: imps fell it for wood (grows back) + Tree, // tree above ground: imps fell it for wood } // drawbridge state in Tile::res @@ -103,7 +105,7 @@ pub struct River { } // order matters for the packed savegame codec: only append new kinds -const KINDS: [Kind; 36] = [ +const KINDS: [Kind; 38] = [ Kind::Rock, Kind::Earth, Kind::Gold, @@ -140,6 +142,8 @@ const KINDS: [Kind; 36] = [ Kind::Altar, Kind::Drawbridge, Kind::Obsidian, + Kind::Mushroom, + Kind::Tree, ]; // treasures (veins, treasury content, imp loads): 0 gold, 1 silver, 2 ruby, 3 diamond @@ -223,7 +227,11 @@ impl Tile { matches!(self.kind, Kind::Rock | Kind::Earth | Kind::Gold | Kind::Silver | Kind::Ruby | Kind::Diamond | Kind::Steel) } pub fn diggable(&self) -> bool { - matches!(self.kind, Kind::Earth | Kind::Gold | Kind::Silver | Kind::Ruby | Kind::Diamond | Kind::Steel) + matches!(self.kind, Kind::Earth | Kind::Gold | Kind::Silver | Kind::Ruby | Kind::Diamond | Kind::Steel | Kind::Mushroom | Kind::Tree) + } + // a giant mushroom or a tree: felled like a wall is dug, gives wood + pub fn plant(&self) -> bool { + matches!(self.kind, Kind::Mushroom | Kind::Tree) } // the treasure of a vein (None for everything else) pub fn vein(&self) -> Option { @@ -751,6 +759,8 @@ impl Map { Kind::Gold | Kind::Silver | Kind::Ruby | Kind::Diamond => Some(12), Kind::Rock | Kind::Core | Kind::Tower | Kind::Water | Kind::Lava => None, Kind::Door => Some(10), + Kind::Mushroom | Kind::Tree => Some(6), + Kind::Drawbridge if tl.res & DB_RAISED != 0 => None, _ => Some(1), } } diff --git a/src/render3d.rs b/src/render3d.rs index 5544431..6faf3e3 100644 --- a/src/render3d.rs +++ b/src/render3d.rs @@ -401,6 +401,17 @@ impl MB { ); } } + // An axis-aligned box without its bottom (plants: stems, caps, trunks, crowns) + fn boxy(&mut self, lo: Vec3, hi: Vec3, cell: u32, c: [u8; 4], top: [u8; 4]) { + let (a, b) = cell_uv(cell); + let uv = [vec2(a.x, b.y), vec2(b.x, b.y), vec2(b.x, a.y), vec2(a.x, a.y)]; + let (x0, y0, z0, x1, y1, z1) = (lo.x, lo.y, lo.z, hi.x, hi.y, hi.z); + self.quad([vec3(x0, y1, z0), vec3(x1, y1, z0), vec3(x1, y1, z1), vec3(x0, y1, z1)], uv, [top; 4], [Vec3::Y; 4]); + self.quad([vec3(x0, y0, z0), vec3(x1, y0, z0), vec3(x1, y1, z0), vec3(x0, y1, z0)], uv, [c; 4], [-Vec3::Z; 4]); + self.quad([vec3(x1, y0, z1), vec3(x0, y0, z1), vec3(x0, y1, z1), vec3(x1, y1, z1)], uv, [c; 4], [Vec3::Z; 4]); + self.quad([vec3(x0, y0, z1), vec3(x0, y0, z0), vec3(x0, y1, z0), vec3(x0, y1, z1)], uv, [c; 4], [-Vec3::X; 4]); + self.quad([vec3(x1, y0, z0), vec3(x1, y0, z1), vec3(x1, y1, z1), vec3(x1, y1, z0)], uv, [c; 4], [Vec3::X; 4]); + } // Thin strip lying on a surface (normal n) from p to q, used for tile outlines fn strip(&mut self, p: Vec3, q: Vec3, n: Vec3, w: f32, c: [u8; 4]) { let side = (q - p).cross(n).normalize_or_zero() * (w * 0.5); @@ -834,6 +845,31 @@ fn build_chunk(map: &Map, amb: &[f32], glow: &[f32], cx: i32, cz: i32, atlas: &T } // room decor let dc = col(lava_lit(Vec3::splat(amb_at(amb, xf + 0.5, zf + 0.5)), lava_at(glow, xf + 0.5, zf + 0.5)), 1.0); + if t.plant() { + // a giant mushroom or a tree (marked for felling: a yellow tint) + let (cx, cz) = (xf + 0.5, zf + 0.5); + let a = amb_at(amb, cx, cz); + let lg = lava_at(glow, cx, cz); + let tint = |v: Vec3| col(lava_lit(if t.marked { v * vec3(1.3, 1.15, 0.5) } else { v }, lg), 1.0); + let s = 0.85 + 0.1 * (t.var & 3) as f32; + if t.kind == Kind::Mushroom { + let h = 0.75 * s; + let sc = tint(Vec3::splat(a.max(0.35))); + mb.boxy(vec3(cx - 0.12, 0.0, cz - 0.12), vec3(cx + 0.12, h, cz + 0.12), T_STEM, sc, sc); + // the cap glows a little in the dark + let cc = tint(Vec3::splat(a.max(0.7))); + mb.boxy(vec3(cx - 0.42 * s, h, cz - 0.42 * s), vec3(cx + 0.42 * s, h + 0.26, cz + 0.42 * s), T_CAP, cc, cc); + mb.boxy(vec3(cx - 0.26 * s, h + 0.26, cz - 0.26 * s), vec3(cx + 0.26 * s, h + 0.38, cz + 0.26 * s), T_CAP, cc, cc); + } else { + let tc = tint(Vec3::splat(a.max(0.3))); + mb.boxy(vec3(cx - 0.12, 0.0, cz - 0.12), vec3(cx + 0.12, 0.9 * s, cz + 0.12), T_BARK, tc, tc); + let lc = tint(Vec3::splat(a.max(0.3) * 0.9)); + let top = tint(Vec3::splat(a.max(0.3) * 1.1)); + let leaves = T_LEAVES + (t.var as u32 & 1); + mb.boxy(vec3(cx - 0.48, 0.75 * s, cz - 0.48), vec3(cx + 0.48, 1.55 * s, cz + 0.48), leaves, lc, top); + mb.boxy(vec3(cx - 0.3, 1.55 * s, cz - 0.3), vec3(cx + 0.3, 1.95 * s, cz + 0.3), leaves, lc, top); + } + } // wear and tear: grit and cracks on plain floors if matches!(t.kind, Kind::Floor) { let hsh = (x as u32).wrapping_mul(2654435761) ^ (z as u32).wrapping_mul(2246822519); @@ -3083,6 +3119,8 @@ pub fn minimap_color(tile: &Tile) -> [u8; 4] { Kind::LavaBridge => [130, 120, 115, 255], Kind::Drawbridge => [120, 80, 50, 255], Kind::Obsidian => [60, 40, 70, 255], + Kind::Mushroom => [150, 90, 200, 255], + Kind::Tree => [40, 100, 40, 255], Kind::Shard => [255, 60, 120, 255], Kind::Aerie => [170, 140, 90, 255], Kind::Steel => [150, 160, 180, 255], diff --git a/src/traps.rs b/src/traps.rs index 6f5c645..a41a7c1 100644 --- a/src/traps.rs +++ b/src/traps.rs @@ -178,6 +178,12 @@ impl Game { self.sfx_ui(Sfx::Error); return; } + // a wooden door costs wood + if kind == TrapKind::WoodDoor && !self.spend_wood(crate::wood::DOOR_WOOD) { + self.msg("msg.no_wood", vec![]); + self.sfx_ui(Sfx::Error); + return; + } let id = self.next_id; self.next_id += 1; self.traps.push(Trap { id, kind, tile: i, stage: ORDERED, crate_tile: 0, progress: 0.0, cd: 0.0, hp: kind.hp(), locked: false, carrier: 0, fired: 99.0, aim: 0.0, revealed: false, sprung: false }); diff --git a/src/ui.rs b/src/ui.rs index eacd4f2..973d641 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -288,8 +288,8 @@ pub fn tool_cost_static(t: Tool) -> String { match t { Tool::Spell(sp) => trf("cost.mana", &[(sp.cost() as i32).to_string()]), Tool::Trap(k) => trf("cost.work", &[(k.work() as i32).to_string()]), - Tool::Bridge => trf("cost.bridge", &[BRIDGE_COST[0].to_string(), BRIDGE_COST[1].to_string()]), - Tool::Drawbridge => trf("cost.gold_tile", &[DRAWBRIDGE_COST.to_string()]), + Tool::Bridge => trf("cost.bridge", &[BRIDGE_COST[0].to_string(), (crate::wood::BRIDGE_WOOD as i32).to_string(), BRIDGE_COST[1].to_string()]), + Tool::Drawbridge => trf("cost.drawbridge", &[DRAWBRIDGE_COST[0].to_string(), (crate::wood::DRAWBRIDGE_WOOD as i32).to_string(), DRAWBRIDGE_COST[1].to_string()]), Tool::Steel => trf("cost.steel", &[STEEL_COST[0].to_string(), STEEL_COST[1].to_string()]), Tool::Tower(TowerKind::Rune) => { let s = tower_stats(TowerKind::Rune); @@ -314,8 +314,8 @@ pub fn tool_cost(t: Tool, g: &Game) -> String { Tool::Lightning => trf("cost.mana", &["50".into()]), Tool::Heal => trf("cost.mana", &["60".into()]), Tool::Summon => trf("cost.mana", &[(g.summon_cost() as i32).to_string()]), - Tool::Bridge => trf("cost.bridge", &[BRIDGE_COST[0].to_string(), BRIDGE_COST[1].to_string()]), - Tool::Drawbridge => trf("cost.gold_tile", &[DRAWBRIDGE_COST.to_string()]), + Tool::Bridge => trf("cost.bridge", &[BRIDGE_COST[0].to_string(), (crate::wood::BRIDGE_WOOD as i32).to_string(), BRIDGE_COST[1].to_string()]), + Tool::Drawbridge => trf("cost.drawbridge", &[DRAWBRIDGE_COST[0].to_string(), (crate::wood::DRAWBRIDGE_WOOD as i32).to_string(), DRAWBRIDGE_COST[1].to_string()]), Tool::Steel => trf("cost.steel", &[STEEL_COST[0].to_string(), STEEL_COST[1].to_string()]), Tool::Tower(TowerKind::Rune) => { let s = tower_stats(TowerKind::Rune); @@ -622,6 +622,7 @@ impl Ui { } let mut segs: Vec> = vec![ gold_seg, + vec![txt(tr("hud.wood"), WOOD_C), Part::Gap, txt((g.wood.floor() as i32).to_string(), TXT)], vec![txt(tr("hud.mana"), MANA), Part::Gap, Part::Bar(g.mana / g.mana_max(), MANA), Part::Gap, txt(format!("{:<3}", g.mana as i32), TXT)], vec![txt(tr("hud.core"), RED), Part::Gap, Part::Bar(g.core_hp / CORE_HP, RED)], vec![txt(tr("hud.creatures"), TXT), Part::Gap, txt(format!("{}/{}", g.creature_count(), cap), TXT)], @@ -1418,6 +1419,9 @@ impl Ui { } // Info text for the unit or tile under the mouse (first line = title) +// the colour of wood in the interface +const WOOD_C: Color = Color::new(0.78, 0.56, 0.32, 1.0); + // fire and wear of a bridge tile fn bridge_state(g: &Game, i: usize, out: &mut Vec<(String, Color)>) { if g.burning(i) { @@ -1565,6 +1569,12 @@ pub fn hover_info(g: &Game, ent: Option, tile: Option<(i32, i32)>) -> Vec out.push((tr(state), BLUE)); bridge_state(g, i, &mut out); } + Kind::Mushroom | Kind::Tree => { + let tree = t.kind == Kind::Tree; + out.push((tr(if tree { "tile.tree" } else { "tile.mushroom" }), WOOD_C)); + let wood = if tree { crate::wood::WOOD_TREE } else { crate::wood::WOOD_MUSHROOM }; + out.push((trf("tile.plant_info", &[(wood as i32).to_string()]), DIM)); + } Kind::Obsidian => { out.push((tr("tile.obsidian"), FRAME_HI)); let left = g.bridgework.cooled.iter().find(|c| c.0 == i).map_or(0.0, |c| c.1); diff --git a/src/wilds.rs b/src/wilds.rs index 0e21469..c93b0fe 100644 --- a/src/wilds.rs +++ b/src/wilds.rs @@ -71,6 +71,8 @@ impl Game { } self.carve_cavern(x, y, &keep, &mut rng); } + // giant mushrooms in the open: the underground's little wood + self.grow_mushrooms(seed); } // a cavern: a few overlapping blobs, ragged edges diff --git a/src/wood.rs b/src/wood.rs new file mode 100644 index 0000000..8efafd4 --- /dev/null +++ b/src/wood.rs @@ -0,0 +1,156 @@ +// Wood, the second resource. Underground it comes from giant mushrooms (few, growing back +// slowly), above ground from trees (many). Pit imps fell them like they dig (mark them with the +// pick); the wood goes to the master at once. Wooden bridges, wooden drawbridges and wooden +// doors cost wood; stone bridges, iron and magic doors do not. + +use crate::game::*; +use crate::map::*; +use serde::{Deserialize, Serialize}; + +// every master starts with a little wood +pub const WOOD_START: f32 = 12.0; +// wood from one giant mushroom / one tree +pub const WOOD_MUSHROOM: f32 = 4.0; +pub const WOOD_TREE: f32 = 3.0; +// strikes a plant takes +pub const MUSHROOM_HP: f32 = 4.0; +#[allow(dead_code)] // trees come with the surface world +pub const TREE_HP: f32 = 6.0; +// seconds until a felled giant mushroom grows back +pub const REGROW: f32 = 240.0; +// wood a wooden bridge tile, a wooden drawbridge tile and a wooden door cost +pub const BRIDGE_WOOD: f32 = 2.0; +pub const DRAWBRIDGE_WOOD: f32 = 4.0; +pub const DOOR_WOOD: f32 = 3.0; +// giant mushrooms in a cavern of a random map: one per this many open tiles +const MUSHROOM_SHARE: usize = 70; + +#[derive(Clone, Debug, Default, Serialize, Deserialize)] +pub struct WoodWork { + pub regrow: Vec<(usize, f32)>, // felled mushroom tile, seconds until it grows back +} + +// a tile where a plant stands alone: all eight neighbours open ground, no other plant next to +// it (so a plant never closes a corridor) +fn lonely_spot(map: &Map, x: i32, y: i32) -> bool { + if !inb(x, y) || map.t[idx(x, y)].kind != Kind::Floor || map.t[idx(x, y)].owner != Owner::None { + return false; + } + DIR8.iter().all(|&(dx, dy)| map.get(x + dx, y + dy).map_or(false, |n| n.walkable() && !n.bridge() && n.kind != Kind::Door)) + && (-2..=2).all(|dy| (-2..=2).all(|dx| !map.get(x + dx, y + dy).map_or(false, |n| n.plant()))) +} + +impl Game { + // giant mushrooms in the open caverns of a random map (deterministic, from the seed) + pub fn grow_mushrooms(&mut self, seed: u32) { + let mut rng = Rng(seed.wrapping_mul(0x9e37_79b9) ^ 0x6d2b_79f5 | 1); + let (cx, cy) = (self.map.core.0 + 1, self.map.core.1 + 1); + let open: Vec = (0..self.map.t.len()) + .filter(|&i| { + let (x, y) = xy(i); + (x - cx).abs().max((y - cy).abs()) > 10 && lonely_spot(&self.map, x, y) + }) + .collect(); + let want = (open.len() / MUSHROOM_SHARE).max(6); + let mut placed = 0; + let mut tries = 0; + while placed < want && tries < want * 20 && !open.is_empty() { + tries += 1; + let i = open[(rng.next() as usize) % open.len()]; + let (x, y) = xy(i); + if self.ents.iter().any(|e| e.alive && e.tile() == i) || !lonely_spot(&self.map, x, y) { + continue; + } + self.plant_mushroom(i); + placed += 1; + } + } + + pub fn plant_mushroom(&mut self, i: usize) { + let t = &mut self.map.t[i]; + t.kind = Kind::Mushroom; + t.owner = Owner::None; + t.hp = MUSHROOM_HP; + t.marked = false; + } + + // an imp felled the plant at tile i: wood for its master, a mushroom grows back later + pub(crate) fn felled(&mut self, i: usize) { + let kind = self.map.t[i].kind; + let wood = if kind == Kind::Tree { WOOD_TREE } else { WOOD_MUSHROOM }; + self.wood += wood; + if kind == Kind::Mushroom { + self.woodwork.regrow.push((i, REGROW)); + } + let (x, y) = xy(i); + self.fx(5, x as f32 + 0.5, y as f32 + 0.5, 0.0, 0.0, 0.5, 0xff3070a0); + } + + // pays wood; false (and nothing paid) if there is not enough + pub fn spend_wood(&mut self, n: f32) -> bool { + if self.wood + 1e-3 < n { + return false; + } + self.wood = (self.wood - n).max(0.0); + true + } + + // the shared step: felled mushrooms grow back where there is room + pub(crate) fn update_wood(&mut self, dt: f32) { + let mut k = 0; + while k < self.woodwork.regrow.len() { + self.woodwork.regrow[k].1 -= dt; + if self.woodwork.regrow[k].1 > 0.0 { + k += 1; + continue; + } + let i = self.woodwork.regrow[k].0; + let (x, y) = xy(i); + if lonely_spot(&self.map, x, y) && !self.ents.iter().any(|e| e.alive && e.tile() == i) { + self.plant_mushroom(i); + self.woodwork.regrow.swap_remove(k); + } else if self.map.t[i].kind != Kind::Floor || self.map.t[i].owner != Owner::None { + // built over or claimed: it does not come back + self.woodwork.regrow.swap_remove(k); + } else { + self.woodwork.regrow[k].1 = 30.0; + k += 1; + } + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn random_maps_have_lonely_giant_mushrooms() { + let g = Game::new(9, 96, 96); + let n = g.map.t.iter().filter(|t| t.kind == Kind::Mushroom).count(); + assert!(n >= 6, "{} mushrooms", n); + assert!((g.wood - WOOD_START).abs() < 1e-3); + // none closes a corridor: every neighbour is open ground + for i in 0..g.map.t.len() { + if g.map.t[i].kind == Kind::Mushroom { + let (x, y) = xy(i); + assert!(DIR8.iter().all(|&(dx, dy)| g.map.get(x + dx, y + dy).map_or(false, |n| n.walkable() || n.plant()))); + } + } + } + + #[test] + fn felling_gives_wood_and_mushrooms_grow_back() { + let mut g = Game::new(9, 96, 96); + let i = g.map.t.iter().position(|t| t.kind == Kind::Mushroom).unwrap(); + let w0 = g.wood; + g.felled(i); + g.dig_out(i); + assert_eq!(g.wood, w0 + WOOD_MUSHROOM); + assert_eq!(g.map.t[i].kind, Kind::Floor); + g.woodwork.regrow[0].1 = 0.01; + g.update_wood(0.05); + assert_eq!(g.map.t[i].kind, Kind::Mushroom, "grown back"); + assert!(g.spend_wood(3.0) && !g.spend_wood(1000.0)); + } +}