diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index b6fcf3e..7b418c2 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -76,7 +76,9 @@ and loot), statistics (`src/stats.rs`: counters and a chart at the end of a game login; the menu page *Achievements*), room levels 2 and 3 (researched in the library once every tool is known: +25% per level, brighter, gold trim) and random events (`src/events.rs`: earthquake, lava or water over the banks, a new gold vein; every 8-12 minutes in free games and versus matches, switch in the game settings; the -host's choice goes to every client with `"events"` in the create message). +host's choice goes to every client with `"events"` in the create message) and wild beasts (`src/beasts.rs`: +dens of cave bears and giant beetles in the caverns of bigger random maps; neutral like the dwarves; beaten while +a prison has room, a beast gives in and joins). 1. **Random events** – earthquake (tunnels cave in), lava eruption, flood, gold vein found. Rare (every 8–12 minutes), free play and multiplayer only, can be switched off in the menu; in diff --git a/lang/cs.lang b/lang/cs.lang index e1084ce..d275695 100644 --- a/lang/cs.lang +++ b/lang/cs.lang @@ -331,6 +331,7 @@ unit.jailer = Žalářník unit.priestess = Plamenná kněžka msg.hero_captured = Omráčen a zajat: {0}! Kořist: {1} zlata. msg.defected = Přeběhl na tvou stranu: {0}! +msg.beast_tamed = Divoký {0} se vzdává a přidává se k tvé kobce! msg.prisoner_died = Zemřel na mučidlech: {0}. job.carry = Nese zajatce job.pray = Modlí se @@ -1037,6 +1038,8 @@ tool.arena.desc = Tvorové spolu zápasí ve dvojicích: dvakrát víc zkušenos tool.altar.label = Oltář tool.altar.desc = Polož tvora na oltář a obětuj ho. Určité dvojice obětí přinesou vzácného tvora, jinak je podzemí požehnáno: lepší nálada a mana. unit.revenant = Navrátilec +unit.cavebear = Jeskynní medvěd +unit.beetle = Obří brouk job.guard_post = Na stráži job.spar = Zápasí msg.revenant_rises = Ze hřbitova vstává navrátilec a slouží ti! @@ -1045,6 +1048,10 @@ msg.altar_gift = Oltář přijímá dvojici: objevuje se {0}! msg.altar_blessing = Obětován: {0}. Podzemí je požehnáno. best.revenant.lure = vstává ze hřbitova best.revenant.text = Navrátilec nejí, nespí a nestěžuje si - dokonalý zaměstnanec, pokud sneseš ten zápach. | Jakmile má trochu zkušeností, pije sílu těch, které zasáhne. S kněžkou si nerozumí, z pochopitelných důvodů. +best.cavebear.lure = poraz ho v doupěti, dokud máš vězení +best.cavebear.text = Medvěd, který nikdy neviděl slunce a nechybí mu. Huňatý, silný a mrzutý až do snídaně. | Poraz ho v doupěti, dokud je ve vězení místo, a vzdá se a přidá se k tobě. Má rád houbovou zahradu – a pavouky, jako svačinu. +best.beetle.lure = poraz ho v doupěti, dokud máš vězení +best.beetle.text = Brouk velký jako sud, obrněný jako rytíř a dvakrát zdvořilejší. | Poraz ho v doupěti, dokud je ve vězení místo, a přidá se k tobě. Spí v doupěti a nesnáší netopýry. best.b.prison.text = Řady cel. Hrdinové tu potichu hnijí, dokud někdo nerozhodne, co s nimi. best.b.graveyard.text = Mech, kameny a čerstvá hlína. Tady dole nikdo nezůstane dlouho mrtvý. best.b.guardpost.text = Žároviště, prapor a znuděný tvor s ostrýma očima. diff --git a/lang/da.lang b/lang/da.lang index 637c833..4cba200 100644 --- a/lang/da.lang +++ b/lang/da.lang @@ -331,6 +331,7 @@ unit.jailer = Fangevogter unit.priestess = Flammepræstinde msg.hero_captured = {0} slået bevidstløs og taget til fange! Bytte: {1} guld. msg.defected = {0} er gået over til din side! +msg.beast_tamed = En vild {0} overgiver sig og slutter sig til dit fangehul! msg.prisoner_died = {0} døde under torturen. job.carry = Bærer en fange job.pray = Beder @@ -1036,6 +1037,8 @@ tool.arena.desc = Væsner sparrer parvis: dobbelt så meget erfaring som trænin tool.altar.label = Alter tool.altar.desc = Slip et væsen på alteret for at ofre det. Visse par af ofre giver et sjældent væsen, ellers velsignes dungeonet: bedre humør og mana. unit.revenant = Genfærd +unit.cavebear = Hulebjørn +unit.beetle = Kæmpebille job.guard_post = På vagt job.spar = Sparrer msg.revenant_rises = Et genfærd rejser sig fra kirkegården og tjener dig! @@ -1044,6 +1047,10 @@ msg.altar_gift = Alteret tager imod parret: en {0} dukker op! msg.altar_blessing = {0} er ofret. Dungeonet er velsignet. best.revenant.lure = rejser sig fra kirkegården best.revenant.text = Et genfærd spiser ikke, sover ikke og klager ikke - den perfekte medarbejder, hvis du kan holde lugten ud. | Det suger styrken fra dem, det rammer, når det har fået lidt erfaring. Præstinden og det kommer ikke godt ud af det med hinanden, af indlysende grunde. +best.cavebear.lure = besejr den i dens hule, mens du har et fængsel +best.cavebear.text = En bjørn, der aldrig har set solen og ikke savner den. Laset, stærk og gnaven indtil morgenmaden. | Besejr den i dens hule, mens der er plads i et fængsel, så overgiver den sig og slutter sig til dig. Den kan lide svampehaven – og edderkopper som snack. +best.beetle.lure = besejr den i dens hule, mens du har et fængsel +best.beetle.text = En bille på størrelse med en tønde, pansret som en ridder og dobbelt så høflig. | Besejr den i dens hule, mens der er plads i et fængsel, så slutter den sig til dig. Den sover i hulen og kan ikke fordrage flagermus. best.b.prison.text = Rækker af celler. Helte rådner stille her, til nogen beslutter, hvad der skal ske med dem. best.b.graveyard.text = Mos, sten og frisk jord. Ingen forbliver død ret længe hernede. best.b.guardpost.text = Et fyrfad, et banner og et kedet væsen med skarpe øjne. diff --git a/lang/de.lang b/lang/de.lang index d8132d4..98d72ee 100644 --- a/lang/de.lang +++ b/lang/de.lang @@ -330,6 +330,7 @@ unit.jailer = Kerkermeister unit.priestess = Flammenpriesterin msg.hero_captured = {0} bewusstlos geschlagen und gefangen genommen! Beute: {1} Gold. msg.defected = {0} ist zu dir übergelaufen! +msg.beast_tamed = Ein wilder {0} ergibt sich und schließt sich deinem Kerker an! msg.prisoner_died = {0} ist unter der Folter gestorben. job.carry = Trägt einen Gefangenen job.pray = Betet @@ -1036,6 +1037,8 @@ tool.arena.desc = Kreaturen kämpfen paarweise zur Übung: doppelt so viel Erfah tool.altar.label = Altar tool.altar.desc = Lass eine Kreatur auf den Altar fallen, um sie zu opfern. Bestimmte Opferpaare bringen eine seltene Kreatur, sonst wird das Verlies gesegnet: bessere Laune und Mana. unit.revenant = Wiedergänger +unit.cavebear = Höhlenbär +unit.beetle = Riesenkäfer job.guard_post = Hält Wache job.spar = Übungskampf msg.revenant_rises = Ein Wiedergänger erhebt sich vom Friedhof und dient dir! @@ -1044,6 +1047,10 @@ msg.altar_gift = Der Altar nimmt das Paar an: ein {0} erscheint! msg.altar_blessing = {0} wird geopfert. Das Verlies ist gesegnet. best.revenant.lure = erhebt sich vom Friedhof best.revenant.text = Ein Wiedergänger isst nicht, schläft nicht und beschwert sich nicht - der perfekte Angestellte, wenn man den Geruch aushält. | Mit etwas Erfahrung trinkt er die Kraft derer, die er trifft. Mit der Priesterin versteht er sich aus naheliegenden Gründen nicht. +best.cavebear.lure = in seinem Bau besiegen, solange du ein Gefängnis hast +best.cavebear.text = Ein Bär, der nie die Sonne gesehen hat und sie nicht vermisst. Zottelig, stark und bis zum Frühstück schlecht gelaunt. | Besiege ihn in seinem Bau, solange ein Gefängnis Platz hat, und er ergibt sich und schließt sich dir an. Er mag den Pilzgarten – und Spinnen, als Snack. +best.beetle.lure = in seinem Bau besiegen, solange du ein Gefängnis hast +best.beetle.text = Ein Käfer so groß wie ein Fass, gepanzert wie ein Ritter und doppelt so höflich. | Besiege ihn in seinem Bau, solange ein Gefängnis Platz hat, und er schließt sich dir an. Er schläft im Lager und kann Fledermäuse nicht ausstehen. best.b.prison.text = Zellenreihen. Helden verrotten hier in Ruhe, bis jemand entscheidet, was mit ihnen geschieht. best.b.graveyard.text = Moos, Steine und frische Erde. Hier unten bleibt niemand lange tot. best.b.guardpost.text = Ein Feuerbecken, ein Banner und eine gelangweilte Kreatur mit scharfen Augen. diff --git a/lang/el.lang b/lang/el.lang index 24596d5..0eb4b91 100644 --- a/lang/el.lang +++ b/lang/el.lang @@ -331,6 +331,7 @@ unit.jailer = Δεσμοφύλακας unit.priestess = Ιέρεια της Φλόγας msg.hero_captured = Αναίσθητος και αιχμάλωτος: {0}! Λάφυρα: {1} χρυσός. msg.defected = Αυτομόλησε στο πλευρό σου: {0}! +msg.beast_tamed = Ένα άγριο ον ({0}) παραδίνεται και μπαίνει στο μπουντρούμι σου! msg.prisoner_died = Πέθανε στα βασανιστήρια: {0}. job.carry = Μεταφέρει αιχμάλωτο job.pray = Προσεύχεται @@ -1037,6 +1038,8 @@ tool.arena.desc = Τα πλάσματα παλεύουν ανά ζεύγη: δι tool.altar.label = Βωμός tool.altar.desc = Άφησε ένα πλάσμα στον βωμό για να το θυσιάσεις. Ορισμένα ζεύγη θυσιών φέρνουν ένα σπάνιο πλάσμα, αλλιώς το μπουντρούμι ευλογείται: καλύτερη διάθεση και μάνα. unit.revenant = Βρικόλακας +unit.cavebear = Αρκούδα σπηλαίων +unit.beetle = Γιγάντιο σκαθάρι job.guard_post = Σε φρουρά job.spar = Προπονείται msg.revenant_rises = Ένας βρικόλακας σηκώνεται από το νεκροταφείο και σε υπηρετεί! @@ -1045,6 +1048,10 @@ msg.altar_gift = Ο βωμός δέχεται το ζεύγος: εμφανίζ msg.altar_blessing = Θυσιάστηκε: {0}. Το μπουντρούμι ευλογείται. best.revenant.lure = σηκώνεται από το νεκροταφείο best.revenant.text = Ένας βρικόλακας δεν τρώει, δεν κοιμάται και δεν παραπονιέται - ο τέλειος υπάλληλος, αν αντέχεις τη μυρωδιά. | Όταν αποκτήσει λίγη εμπειρία, πίνει τη δύναμη όσων χτυπά. Αυτός και η ιέρεια δεν τα πάνε καλά, για προφανείς λόγους. +best.cavebear.lure = νίκησέ το στη φωλιά του όσο έχεις φυλακή +best.cavebear.text = Μια αρκούδα που δεν είδε ποτέ τον ήλιο και δεν της λείπει. Μαλλιαρή, δυνατή και γκρινιάρα ως το πρωινό. | Νίκησέ την στη φωλιά της όσο υπάρχει χώρος σε φυλακή, και παραδίνεται και σε ακολουθεί. Της αρέσει ο κήπος μανιταριών – και οι αράχνες, για σνακ. +best.beetle.lure = νίκησέ το στη φωλιά του όσο έχεις φυλακή +best.beetle.text = Ένα σκαθάρι όσο ένα βαρέλι, θωρακισμένο σαν ιππότης και διπλά ευγενικό. | Νίκησέ το στη φωλιά του όσο υπάρχει χώρος σε φυλακή, και σε ακολουθεί. Κοιμάται στη φωλιά και δεν αντέχει τις νυχτερίδες. best.b.prison.text = Σειρές από κελιά. Οι ήρωες σαπίζουν εδώ ήσυχα ώσπου κάποιος να αποφασίσει τι θα γίνει μαζί τους. best.b.graveyard.text = Βρύα, πέτρες και φρέσκο χώμα. Κανείς δεν μένει νεκρός για πολύ εδώ κάτω. best.b.guardpost.text = Ένα μαγκάλι, ένα λάβαρο κι ένα βαριεστημένο πλάσμα με κοφτερά μάτια. diff --git a/lang/en.lang b/lang/en.lang index f965ee1..af97191 100644 --- a/lang/en.lang +++ b/lang/en.lang @@ -331,6 +331,7 @@ unit.jailer = Jailer unit.priestess = Flame Priestess msg.hero_captured = {0} knocked out and taken prisoner! Loot: {1} gold. msg.defected = {0} has defected to your side! +msg.beast_tamed = A wild {0} gives in and joins your dungeon! msg.prisoner_died = {0} died under torture. job.carry = Carrying a prisoner job.pray = Praying @@ -1037,6 +1038,8 @@ tool.arena.desc = Creatures spar in pairs: twice as much experience as training tool.altar.label = Altar tool.altar.desc = Drop a creature on the altar to sacrifice it. Certain pairs of sacrifices bring a rare creature, otherwise the dungeon is blessed: better mood and mana. unit.revenant = Revenant +unit.cavebear = Cave bear +unit.beetle = Giant beetle job.guard_post = On guard job.spar = Sparring msg.revenant_rises = A revenant rises from the graveyard and serves you! @@ -1045,6 +1048,10 @@ msg.altar_gift = The altar accepts the pair: a {0} appears! msg.altar_blessing = The {0} is sacrificed. The dungeon is blessed. best.revenant.lure = rises from the graveyard best.revenant.text = A revenant does not eat, does not sleep and does not complain - the perfect employee, if you can stand the smell. | It drinks the strength of those it strikes once it has some experience. The priestess and it do not get along, for obvious reasons. +best.cavebear.lure = beat it in its den while you have a prison +best.cavebear.text = A bear that never saw the sun and does not miss it. Shaggy, strong and grumpy until breakfast. | Beat it in its den while a prison has room, and it gives in and joins you. It likes the mushroom garden, and spiders - as a snack. +best.beetle.lure = beat it in its den while you have a prison +best.beetle.text = A beetle the size of a barrel, armoured like a knight and twice as polite. | Beat it in its den while a prison has room, and it joins you. It sleeps in the lair and cannot stand bats. best.b.prison.text = Rows of cells. Heroes rot here quietly until somebody decides what to do with them. best.b.graveyard.text = Moss, stones and fresh earth. Nobody stays dead for long down here. best.b.guardpost.text = A brazier, a banner and a bored creature with sharp eyes. diff --git a/lang/es.lang b/lang/es.lang index 8570212..e88dac0 100644 --- a/lang/es.lang +++ b/lang/es.lang @@ -331,6 +331,7 @@ unit.jailer = Carcelero unit.priestess = Sacerdotisa de llamas msg.hero_captured = ¡{0} noqueado y hecho prisionero! Botín: {1} de oro. msg.defected = ¡{0} se ha pasado a tu bando! +msg.beast_tamed = ¡Un {0} salvaje se rinde y se une a tu mazmorra! msg.prisoner_died = {0} ha muerto bajo tortura. job.carry = Llevando a un prisionero job.pray = Rezando @@ -1029,6 +1030,8 @@ tool.arena.desc = Las criaturas combaten por parejas: el doble de experiencia qu tool.altar.label = Altar tool.altar.desc = Suelta una criatura sobre el altar para sacrificarla. Ciertas parejas de sacrificios traen una criatura rara; si no, la mazmorra queda bendecida: mejor ánimo y maná. unit.revenant = Aparecido +unit.cavebear = Oso cavernario +unit.beetle = Escarabajo gigante job.guard_post = De guardia job.spar = Combatiendo msg.revenant_rises = ¡Un aparecido se levanta del cementerio y te sirve! @@ -1037,6 +1040,10 @@ msg.altar_gift = El altar acepta la pareja: ¡aparece un {0}! msg.altar_blessing = El {0} ha sido sacrificado. La mazmorra queda bendecida. best.revenant.lure = se levanta del cementerio best.revenant.text = Un aparecido no come, no duerme y no se queja: el empleado perfecto, si soportas el olor. | Con algo de experiencia, absorbe la fuerza de aquellos a quienes golpea. Él y la sacerdotisa no se llevan bien, por razones obvias. +best.cavebear.lure = vencerlo en su guarida teniendo una prisión +best.cavebear.text = Un oso que nunca vio el sol y no lo echa de menos. Peludo, fuerte y gruñón hasta el desayuno. | Véncelo en su guarida mientras haya sitio en una prisión: se rinde y se une a ti. Le gusta el huerto de setas, y las arañas, de tentempié. +best.beetle.lure = vencerlo en su guarida teniendo una prisión +best.beetle.text = Un escarabajo del tamaño de un barril, acorazado como un caballero y el doble de educado. | Véncelo en su guarida mientras haya sitio en una prisión y se unirá a ti. Duerme en la guarida y no soporta a los murciélagos. best.b.prison.text = Hileras de celdas. Los héroes se pudren aquí en silencio hasta que alguien decide qué hacer con ellos. best.b.graveyard.text = Musgo, lápidas y tierra fresca. Aquí abajo nadie sigue muerto mucho tiempo. best.b.guardpost.text = Un brasero, un estandarte y una criatura aburrida de vista aguda. diff --git a/lang/fi.lang b/lang/fi.lang index d710750..a549c7c 100644 --- a/lang/fi.lang +++ b/lang/fi.lang @@ -331,6 +331,7 @@ unit.jailer = Vanginvartija unit.priestess = Liekkipapitar msg.hero_captured = {0} tyrmätty ja otettu vangiksi! Saalis: {1} kultaa. msg.defected = {0} on loikannut puolellesi! +msg.beast_tamed = Villi {0} antautuu ja liittyy luolastoosi! msg.prisoner_died = {0} kuoli kidutuksessa. job.carry = Kantaa vankia job.pray = Rukoilee @@ -1037,6 +1038,8 @@ tool.arena.desc = Olennot ottelevat pareittain: kaksi kertaa niin paljon kokemus tool.altar.label = Alttari tool.altar.desc = Pudota olento alttarille uhrataksesi sen. Tietyt uhriparit tuovat harvinaisen olennon, muuten luolasto siunataan: parempi mieliala ja manaa. unit.revenant = Haamu +unit.cavebear = Luolakarhu +unit.beetle = Jättikuoriainen job.guard_post = Vartiossa job.spar = Ottelee msg.revenant_rises = Haamu nousee hautausmaalta ja palvelee sinua! @@ -1045,6 +1048,10 @@ msg.altar_gift = Alttari hyväksyy parin: ilmestyy {0}! msg.altar_blessing = Uhrattu: {0}. Luolasto on siunattu. best.revenant.lure = nousee hautausmaalta best.revenant.text = Haamu ei syö, ei nuku eikä valita - täydellinen työntekijä, jos kestät hajun. | Kun sillä on vähän kokemusta, se juo lyömiensä voimaa. Papitar ja se eivät tule toimeen, ilmeisistä syistä. +best.cavebear.lure = voita se pesässään, kun sinulla on vankila +best.cavebear.text = Karhu, joka ei ole koskaan nähnyt aurinkoa eikä kaipaa sitä. Takkuinen, vahva ja kiukkuinen aamiaiseen asti. | Voita se pesässään, kun vankilassa on tilaa, niin se antautuu ja liittyy sinuun. Se pitää sienitarhasta – ja hämähäkeistä välipalana. +best.beetle.lure = voita se pesässään, kun sinulla on vankila +best.beetle.text = Tynnyrin kokoinen kuoriainen, panssaroitu kuin ritari ja kaksi kertaa kohteliaampi. | Voita se pesässään, kun vankilassa on tilaa, niin se liittyy sinuun. Se nukkuu pesässä eikä siedä lepakoita. best.b.prison.text = Rivittäin sellejä. Sankarit mätänevät täällä hiljaa, kunnes joku päättää, mitä heille tehdään. best.b.graveyard.text = Sammalta, kiviä ja tuoretta multaa. Kukaan ei pysy täällä kuolleena kauan. best.b.guardpost.text = Hiiliastia, viiri ja tylsistynyt olento tarkoin silmin. diff --git a/lang/hr.lang b/lang/hr.lang index 4c864fe..1e8973a 100644 --- a/lang/hr.lang +++ b/lang/hr.lang @@ -331,6 +331,7 @@ unit.jailer = Tamničar unit.priestess = Svećenica plamena msg.hero_captured = Onesviješten i zarobljen: {0}! Plijen: {1} zlata. msg.defected = Prebjegao je na tvoju stranu: {0}! +msg.beast_tamed = Divlji {0} se predaje i pridružuje tvojoj tamnici! msg.prisoner_died = Umro je pod mučenjem: {0}. job.carry = Nosi zarobljenika job.pray = Moli se @@ -1037,6 +1038,8 @@ tool.arena.desc = Stvorenja se spariraju u parovima: dvostruko više iskustva ne tool.altar.label = Žrtvenik tool.altar.desc = Spusti stvorenje na žrtvenik da ga žrtvuješ. Određeni parovi žrtava donose rijetko stvorenje, inače je tamnica blagoslovljena: bolje raspoloženje i mana. unit.revenant = Povratnik +unit.cavebear = Špiljski medvjed +unit.beetle = Divovski kukac job.guard_post = Na straži job.spar = Spara se msg.revenant_rises = Povratnik ustaje iz groblja i služi ti! @@ -1045,6 +1048,10 @@ msg.altar_gift = Žrtvenik prihvaća par: pojavljuje se {0}! msg.altar_blessing = Žrtvovano: {0}. Tamnica je blagoslovljena. best.revenant.lure = ustaje iz groblja best.revenant.text = Povratnik ne jede, ne spava i ne žali se - savršen zaposlenik, ako podnosiš smrad. | Kad stekne malo iskustva, pije snagu onih koje udari. Svećenica i on se ne slažu, iz očitih razloga. +best.cavebear.lure = pobijedi ga u brlogu dok imaš zatvor +best.cavebear.text = Medvjed koji nikad nije vidio sunce i ne nedostaje mu. Čupav, snažan i mrzovoljan do doručka. | Pobijedi ga u brlogu dok u zatvoru ima mjesta i predat će se i pridružiti ti. Voli vrt gljiva – i pauke, za užinu. +best.beetle.lure = pobijedi ga u brlogu dok imaš zatvor +best.beetle.text = Kukac velik poput bačve, oklopljen kao vitez i dvaput pristojniji. | Pobijedi ga u brlogu dok u zatvoru ima mjesta i pridružit će ti se. Spava u brlogu i ne podnosi šišmiše. best.b.prison.text = Redovi ćelija. Junaci ovdje tiho trunu dok netko ne odluči što s njima. best.b.graveyard.text = Mahovina, kamenje i svježa zemlja. Ovdje dolje nitko ne ostaje dugo mrtav. best.b.guardpost.text = Žeravnik, zastava i stvorenje koje se dosađuje, oštra oka. diff --git a/lang/hu.lang b/lang/hu.lang index f4046e2..bf9ea21 100644 --- a/lang/hu.lang +++ b/lang/hu.lang @@ -331,6 +331,7 @@ unit.jailer = Börtönőr unit.priestess = Lángpapnő msg.hero_captured = Kiütve és foglyul ejtve: {0}! Zsákmány: {1} arany. msg.defected = Átállt hozzád: {0}! +msg.beast_tamed = Egy vad {0} megadja magát, és csatlakozik a kazamatádhoz! msg.prisoner_died = Belehalt a kínzásba: {0}. job.carry = Foglyot cipel job.pray = Imádkozik @@ -1037,6 +1038,8 @@ tool.arena.desc = A lények párban edzenek: kétszer annyi tapasztalat, mint a tool.altar.label = Oltár tool.altar.desc = Dobj egy lényt az oltárra, hogy feláldozd. Bizonyos áldozatpárok ritka lényt hoznak, különben a kazamata áldást kap: jobb hangulat és mana. unit.revenant = Visszajáró +unit.cavebear = Barlangi medve +unit.beetle = Óriásbogár job.guard_post = Őrt áll job.spar = Edz msg.revenant_rises = Egy visszajáró kel ki a temetőből, és téged szolgál! @@ -1045,6 +1048,10 @@ msg.altar_gift = Az oltár elfogadja a párt, és megjelenik: {0}! msg.altar_blessing = Feláldozva: {0}. A kazamata áldást kapott. best.revenant.lure = a temetőből kel ki best.revenant.text = A visszajáró nem eszik, nem alszik és nem panaszkodik - a tökéletes alkalmazott, ha bírod a szagát. | Ha már van némi tapasztalata, kiszívja az erejét azoknak, akiket megüt. Ő és a papnő nem jönnek ki egymással, nyilvánvaló okokból. +best.cavebear.lure = győzd le az odújában, amíg van börtönöd +best.cavebear.text = Egy medve, amely sosem látta a napot, és nem is hiányzik neki. Bozontos, erős és reggeliig mogorva. | Győzd le az odújában, amíg van hely egy börtönben, és megadja magát, csatlakozik hozzád. Szereti a gombakertet – és a pókokat, nassolnivalónak. +best.beetle.lure = győzd le az odújában, amíg van börtönöd +best.beetle.text = Egy hordónyi bogár, páncélos, mint egy lovag, és kétszer olyan udvarias. | Győzd le az odújában, amíg van hely egy börtönben, és csatlakozik hozzád. Az odúban alszik, és ki nem állhatja a denevéreket. best.b.prison.text = Cellasorok. A hősök itt csendben rothadnak, amíg valaki el nem dönti, mi legyen velük. best.b.graveyard.text = Moha, kövek és friss föld. Idelent senki sem marad sokáig halott. best.b.guardpost.text = Egy parázstartó, egy zászló és egy unatkozó, éles szemű lény. diff --git a/lang/it.lang b/lang/it.lang index 0494295..d70c2df 100644 --- a/lang/it.lang +++ b/lang/it.lang @@ -331,6 +331,7 @@ unit.jailer = Carceriere unit.priestess = Sacerdotessa della Fiamma msg.hero_captured = {0} stordito e fatto prigioniero! Bottino: {1} oro. msg.defected = {0} è passato dalla tua parte! +msg.beast_tamed = Un {0} selvatico si arrende e si unisce al tuo dungeon! msg.prisoner_died = {0} è morto sotto tortura. job.carry = Trasporta un prigioniero job.pray = Prega @@ -1029,6 +1030,8 @@ tool.arena.desc = Le creature si sfidano a coppie: il doppio dell'esperienza del tool.altar.label = Altare tool.altar.desc = Posa una creatura sull'altare per sacrificarla. Certe coppie di sacrifici portano una creatura rara, altrimenti il dungeon viene benedetto: umore migliore e mana. unit.revenant = Redivivo +unit.cavebear = Orso delle caverne +unit.beetle = Scarabeo gigante job.guard_post = Di guardia job.spar = Si allena in coppia msg.revenant_rises = Un redivivo risorge dal cimitero e ti serve! @@ -1037,6 +1040,10 @@ msg.altar_gift = L'altare accetta la coppia: appare {0}! msg.altar_blessing = Sacrificio compiuto: {0}. Il dungeon è benedetto. best.revenant.lure = risorge dal cimitero best.revenant.text = Un redivivo non mangia, non dorme e non si lamenta - il dipendente perfetto, se sopporti l'odore. | Con un po' di esperienza beve la forza di chi colpisce. Lui e la sacerdotessa non vanno d'accordo, per ovvi motivi. +best.cavebear.lure = sconfiggerlo nella sua tana avendo una prigione +best.cavebear.text = Un orso che non ha mai visto il sole e non gli manca. Irsuto, forte e scontroso fino a colazione. | Sconfiggilo nella sua tana finché una prigione ha posto: si arrende e si unisce a te. Ama l'orto di funghi, e i ragni, come spuntino. +best.beetle.lure = sconfiggerlo nella sua tana avendo una prigione +best.beetle.text = Uno scarabeo grande come una botte, corazzato come un cavaliere e due volte più educato. | Sconfiggilo nella sua tana finché una prigione ha posto e si unirà a te. Dorme nella tana e non sopporta i pipistrelli. best.b.prison.text = File di celle. Qui gli eroi marciscono in silenzio finché qualcuno non decide cosa farne. best.b.graveyard.text = Muschio, lapidi e terra fresca. Quaggiù nessuno resta morto a lungo. best.b.guardpost.text = Un braciere, uno stendardo e una creatura annoiata dagli occhi acuti. diff --git a/lang/nl.lang b/lang/nl.lang index 8860042..f856ed9 100644 --- a/lang/nl.lang +++ b/lang/nl.lang @@ -331,6 +331,7 @@ unit.jailer = Cipier unit.priestess = Vlampriesteres msg.hero_captured = {0} knock-out en gevangengenomen! Buit: {1} goud. msg.defected = {0} is naar jouw kant overgelopen! +msg.beast_tamed = Een wilde {0} geeft zich over en sluit zich aan bij je kerker! msg.prisoner_died = {0} is bezweken onder de marteling. job.carry = Draagt een gevangene job.pray = Bidt @@ -1037,6 +1038,8 @@ tool.arena.desc = Wezens sparren in paren: twee keer zoveel ervaring als trainin tool.altar.label = Altaar tool.altar.desc = Zet een wezen op het altaar om het te offeren. Bepaalde paren offers brengen een zeldzaam wezen, anders wordt de kerker gezegend: betere stemming en mana. unit.revenant = Wederkeerder +unit.cavebear = Holenbeer +unit.beetle = Reuzenkever job.guard_post = Op wacht job.spar = Spart msg.revenant_rises = Een wederkeerder rijst op uit het kerkhof en dient jou! @@ -1045,6 +1048,10 @@ msg.altar_gift = Het altaar aanvaardt het paar: er verschijnt een {0}! msg.altar_blessing = De {0} is geofferd. De kerker is gezegend. best.revenant.lure = rijst op uit het kerkhof best.revenant.text = Een wederkeerder eet niet, slaapt niet en klaagt niet - de perfecte werknemer, als je de geur verdraagt. | Zodra hij wat ervaring heeft, drinkt hij de kracht van wie hij raakt. De priesteres en hij kunnen niet met elkaar opschieten, om voor de hand liggende redenen. +best.cavebear.lure = verslaan in zijn hol terwijl je een gevangenis hebt +best.cavebear.text = Een beer die nooit de zon heeft gezien en hem niet mist. Ruig, sterk en chagrijnig tot het ontbijt. | Versla hem in zijn hol terwijl er plaats is in een gevangenis, en hij geeft zich over en sluit zich aan. Hij houdt van de paddenstoelentuin – en van spinnen, als hapje. +best.beetle.lure = verslaan in zijn hol terwijl je een gevangenis hebt +best.beetle.text = Een kever zo groot als een ton, gepantserd als een ridder en twee keer zo beleefd. | Versla hem in zijn hol terwijl er plaats is in een gevangenis, en hij sluit zich aan. Hij slaapt in het hol en kan vleermuizen niet uitstaan. best.b.prison.text = Rijen cellen. Helden rotten hier rustig weg tot iemand beslist wat er met ze moet gebeuren. best.b.graveyard.text = Mos, stenen en verse aarde. Hier beneden blijft niemand lang dood. best.b.guardpost.text = Een vuurkorf, een banier en een verveeld wezen met scherpe ogen. diff --git a/lang/no.lang b/lang/no.lang index 5bb22ef..c91cdb6 100644 --- a/lang/no.lang +++ b/lang/no.lang @@ -331,6 +331,7 @@ unit.jailer = Fangevokter unit.priestess = Flammeprestinne msg.hero_captured = {0} slått bevisstløs og tatt til fange! Bytte: {1} gull. msg.defected = {0} har gått over til din side! +msg.beast_tamed = En vill {0} overgir seg og slutter seg til fangehullet ditt! msg.prisoner_died = {0} døde under torturen. job.carry = Bærer en fange job.pray = Ber @@ -1036,6 +1037,8 @@ tool.arena.desc = Skapninger sparrer parvis: dobbelt så mye erfaring som trenin tool.altar.label = Alter tool.altar.desc = Slipp en skapning på alteret for å ofre den. Visse par av ofre gir en sjelden skapning, ellers velsignes dungeonet: bedre humør og mana. unit.revenant = Gjenganger +unit.cavebear = Hulebjørn +unit.beetle = Kjempebille job.guard_post = På vakt job.spar = Sparrer msg.revenant_rises = En gjenganger reiser seg fra kirkegården og tjener deg! @@ -1044,6 +1047,10 @@ msg.altar_gift = Alteret tar imot paret: en {0} dukker opp! msg.altar_blessing = {0} er ofret. Dungeonet er velsignet. best.revenant.lure = reiser seg fra kirkegården best.revenant.text = En gjenganger spiser ikke, sover ikke og klager ikke - den perfekte medarbeideren, hvis du tåler lukten. | Den suger styrken fra dem den treffer, når den har fått litt erfaring. Prestinnen og den kommer ikke godt overens, av åpenbare grunner. +best.cavebear.lure = beseir den i hiet mens du har et fengsel +best.cavebear.text = En bjørn som aldri har sett sola og ikke savner den. Raggete, sterk og gretten til frokost. | Beseir den i hiet mens det er plass i et fengsel, så overgir den seg og slutter seg til deg. Den liker soppehagen – og edderkopper som snacks. +best.beetle.lure = beseir den i hiet mens du har et fengsel +best.beetle.text = En bille på størrelse med en tønne, pansret som en ridder og dobbelt så høflig. | Beseir den i hiet mens det er plass i et fengsel, så slutter den seg til deg. Den sover i hiet og tåler ikke flaggermus. best.b.prison.text = Rader med celler. Helter råtner stille her til noen bestemmer hva som skal skje med dem. best.b.graveyard.text = Mose, steiner og fersk jord. Ingen forblir død lenge her nede. best.b.guardpost.text = Et fyrfat, et banner og en kjedelig skapning med skarpe øyne. diff --git a/lang/pt.lang b/lang/pt.lang index a3bdfa9..520b31e 100644 --- a/lang/pt.lang +++ b/lang/pt.lang @@ -331,6 +331,7 @@ unit.jailer = Carcereiro unit.priestess = Sacerdotisa das Chamas msg.hero_captured = {0} ficou inconsciente e foi feito prisioneiro! Saque: {1} de ouro. msg.defected = {0} desertou para o teu lado! +msg.beast_tamed = Um {0} selvagem rende-se e junta-se à tua masmorra! msg.prisoner_died = {0} morreu sob tortura. job.carry = A carregar um prisioneiro job.pray = A rezar @@ -1037,6 +1038,8 @@ tool.arena.desc = As criaturas treinam combate aos pares: o dobro da experiênci tool.altar.label = Altar tool.altar.desc = Larga uma criatura no altar para a sacrificar. Certos pares de sacrifícios trazem uma criatura rara; caso contrário, a masmorra é abençoada: melhor humor e mana. unit.revenant = Espectro +unit.cavebear = Urso das cavernas +unit.beetle = Escaravelho gigante job.guard_post = De guarda job.spar = A treinar combate msg.revenant_rises = Um espectro ergue-se do cemitério e serve-te! @@ -1045,6 +1048,10 @@ msg.altar_gift = O altar aceita o par: aparece um {0}! msg.altar_blessing = O {0} é sacrificado. A masmorra é abençoada. best.revenant.lure = ergue-se do cemitério best.revenant.text = Um espectro não come, não dorme e não se queixa - o empregado perfeito, se aguentares o cheiro. | Bebe a força daqueles em quem bate, quando já tem alguma experiência. Ele e a sacerdotisa não se dão bem, por razões óbvias. +best.cavebear.lure = vencê-lo no covil tendo uma prisão +best.cavebear.text = Um urso que nunca viu o sol e não sente a falta. Peludo, forte e rabugento até ao pequeno-almoço. | Vence-o no covil enquanto houver lugar numa prisão: rende-se e junta-se a ti. Gosta da horta de cogumelos – e de aranhas, como petisco. +best.beetle.lure = vencê-lo no covil tendo uma prisão +best.beetle.text = Um escaravelho do tamanho de um barril, blindado como um cavaleiro e duas vezes mais educado. | Vence-o no covil enquanto houver lugar numa prisão e junta-se a ti. Dorme no covil e não suporta morcegos. best.b.prison.text = Filas de celas. Os heróis apodrecem aqui em silêncio até alguém decidir o que fazer com eles. best.b.graveyard.text = Musgo, pedras e terra fresca. Aqui em baixo ninguém fica morto por muito tempo. best.b.guardpost.text = Um braseiro, um estandarte e uma criatura aborrecida de olhar afiado. diff --git a/lang/ro.lang b/lang/ro.lang index 79965ac..ead6eda 100644 --- a/lang/ro.lang +++ b/lang/ro.lang @@ -331,6 +331,7 @@ unit.jailer = Temnicer unit.priestess = Preoteasa Flăcării msg.hero_captured = {0} doborât și luat prizonier! Pradă: {1} aur. msg.defected = {0} a trecut de partea ta! +msg.beast_tamed = Un {0} sălbatic se predă și se alătură temniței tale! msg.prisoner_died = {0} a murit sub tortură. job.carry = Duce un prizonier job.pray = Se roagă @@ -1037,6 +1038,8 @@ tool.arena.desc = Creaturile se antrenează în perechi: de două ori mai multă tool.altar.label = Altar tool.altar.desc = Lasă o creatură pe altar ca s-o sacrifici. Anumite perechi de sacrificii aduc o creatură rară, altfel temnița e binecuvântată: moral mai bun și mana. unit.revenant = Strigoi +unit.cavebear = Urs de peșteră +unit.beetle = Gândac uriaș job.guard_post = De pază job.spar = Se duelează msg.revenant_rises = Un strigoi se ridică din cimitir și te servește! @@ -1045,6 +1048,10 @@ msg.altar_gift = Altarul acceptă perechea: apare un {0}! msg.altar_blessing = {0} e sacrificat. Temnița e binecuvântată. best.revenant.lure = se ridică din cimitir best.revenant.text = Un strigoi nu mănâncă, nu doarme și nu se plânge - angajatul perfect, dacă suporți mirosul. | Odată ce are ceva experiență, bea puterea celor pe care îi lovește. El și preoteasa nu se înțeleg, din motive evidente. +best.cavebear.lure = învinge-l în bârlog cât ai o închisoare +best.cavebear.text = Un urs care n-a văzut niciodată soarele și nu-i duce dorul. Zbârlit, puternic și morocănos până la micul dejun. | Învinge-l în bârlog cât timp e loc într-o închisoare și se predă și ți se alătură. Îi place grădina de ciuperci – și păianjenii, ca gustare. +best.beetle.lure = învinge-l în bârlog cât ai o închisoare +best.beetle.text = Un gândac cât un butoi, blindat ca un cavaler și de două ori mai politicos. | Învinge-l în bârlog cât timp e loc într-o închisoare și ți se alătură. Doarme în bârlog și nu suportă liliecii. best.b.prison.text = Șiruri de celule. Eroii putrezesc aici în liniște până decide cineva ce să facă cu ei. best.b.graveyard.text = Mușchi, pietre și pământ proaspăt. Nimeni nu rămâne mort prea mult pe aici. best.b.guardpost.text = Un mangal, un stindard și o creatură plictisită cu ochi ageri. diff --git a/lang/ru.lang b/lang/ru.lang index 8acbbce..5d7afd6 100644 --- a/lang/ru.lang +++ b/lang/ru.lang @@ -331,6 +331,7 @@ unit.jailer = Тюремщик unit.priestess = Жрица пламени msg.hero_captured = {0} оглушён и взят в плен! Добыча: {1} золота. msg.defected = {0} переходит на твою сторону! +msg.beast_tamed = Дикий {0} сдаётся и присоединяется к твоему подземелью! msg.prisoner_died = {0} не пережил пыток. job.carry = Несёт пленника job.pray = Молится @@ -1029,6 +1030,8 @@ tool.arena.desc = Существа дерутся парами: вдвое бо tool.altar.label = Алтарь tool.altar.desc = Опусти существо на алтарь, чтобы принести его в жертву. Некоторые пары жертв приносят редкое существо, иначе подземелье получает благословение: лучше настроение и мана. unit.revenant = Восставший +unit.cavebear = Пещерный медведь +unit.beetle = Гигантский жук job.guard_post = На страже job.spar = Спаррингует msg.revenant_rises = С кладбища встаёт восставший и служит тебе! @@ -1037,6 +1040,10 @@ msg.altar_gift = Алтарь принимает пару: появляется msg.altar_blessing = Принесён в жертву: {0}. Подземелье благословлено. best.revenant.lure = встаёт с кладбища best.revenant.text = Восставший не ест, не спит и не жалуется - идеальный работник, если вытерпишь запах. | Набравшись опыта, пьёт силу тех, кого бьёт. Со жрицей они не ладят, по понятным причинам. +best.cavebear.lure = победить в логове, имея тюрьму +best.cavebear.text = Медведь, который никогда не видел солнца и не скучает. Лохматый, сильный и ворчливый до завтрака. | Победи его в логове, пока в тюрьме есть место, — он сдастся и присоединится к тебе. Любит грибной сад и пауков — на закуску. +best.beetle.lure = победить в логове, имея тюрьму +best.beetle.text = Жук размером с бочку, бронированный, как рыцарь, и вдвое вежливее. | Победи его в логове, пока в тюрьме есть место, — и он присоединится к тебе. Спит в логове и терпеть не может летучих мышей. best.b.prison.text = Ряды камер. Герои тихо гниют здесь, пока кто-нибудь не решит, что с ними делать. best.b.graveyard.text = Мох, камни и свежая земля. Здесь, внизу, никто не остаётся мёртвым надолго. best.b.guardpost.text = Жаровня, знамя и скучающее существо с острым взглядом. diff --git a/lang/sk.lang b/lang/sk.lang index 4139cf2..5ba9931 100644 --- a/lang/sk.lang +++ b/lang/sk.lang @@ -331,6 +331,7 @@ unit.jailer = Žalárnik unit.priestess = Plamenná kňažka msg.hero_captured = Omráčený a zajatý: {0}! Korisť: {1} zlata. msg.defected = Prebehol na tvoju stranu: {0}! +msg.beast_tamed = Divoký {0} sa vzdáva a pridáva sa k tvojej kobke! msg.prisoner_died = Zomrel pri mučení: {0}. job.carry = Nesie zajatca job.pray = Modlí sa @@ -1037,6 +1038,8 @@ tool.arena.desc = Tvory spolu zápasia vo dvojiciach: dvakrát viac skúseností tool.altar.label = Oltár tool.altar.desc = Polož tvora na oltár a obetuj ho. Určité dvojice obetí prinesú vzácneho tvora, inak je podzemie požehnané: lepšia nálada a mana. unit.revenant = Navrátilec +unit.cavebear = Jaskynný medveď +unit.beetle = Obrovský chrobák job.guard_post = Na stráži job.spar = Zápasí msg.revenant_rises = Z cintorína vstáva navrátilec a slúži ti! @@ -1045,6 +1048,10 @@ msg.altar_gift = Oltár prijíma dvojicu: objavuje sa {0}! msg.altar_blessing = Obetovaný: {0}. Podzemie je požehnané. best.revenant.lure = vstáva z cintorína best.revenant.text = Navrátilec neje, nespí a nesťažuje sa - dokonalý zamestnanec, ak znesieš ten zápach. | Keď má trochu skúseností, pije silu tých, ktorých zasiahne. S kňažkou si nerozumie, z pochopiteľných dôvodov. +best.cavebear.lure = poraz ho v brlohu, kým máš väzenie +best.cavebear.text = Medveď, ktorý nikdy nevidel slnko a nechýba mu. Strapatý, silný a mrzutý až do raňajok. | Poraz ho v brlohu, kým je vo väzení miesto, a vzdá sa a pridá sa k tebe. Má rád hubovú záhradu – a pavúky, ako desiatu. +best.beetle.lure = poraz ho v brlohu, kým máš väzenie +best.beetle.text = Chrobák veľký ako sud, obrnený ako rytier a dvakrát zdvorilejší. | Poraz ho v brlohu, kým je vo väzení miesto, a pridá sa k tebe. Spí v brlohu a neznáša netopiere. best.b.prison.text = Rady ciel. Hrdinovia tu potichu hnijú, kým niekto nerozhodne, čo s nimi. best.b.graveyard.text = Mach, kamene a čerstvá hlina. Tu dole nikto nezostane dlho mŕtvy. best.b.guardpost.text = Ohnisko, zástava a znudený tvor s ostrými očami. diff --git a/lang/sr.lang b/lang/sr.lang index 17c8279..c678ec3 100644 --- a/lang/sr.lang +++ b/lang/sr.lang @@ -331,6 +331,7 @@ unit.jailer = Тамничар unit.priestess = Свештеница пламена msg.hero_captured = Онесвешћен и заробљен: {0}! Плен: {1} злата. msg.defected = Пребегао је на твоју страну: {0}! +msg.beast_tamed = Дивљи {0} се предаје и придружује твојој тамници! msg.prisoner_died = Умро је под мучењем: {0}. job.carry = Носи заробљеника job.pray = Моли се @@ -1037,6 +1038,8 @@ tool.arena.desc = Створења спарингују у паровима: д tool.altar.label = Жртвеник tool.altar.desc = Спусти створење на жртвеник да га жртвујеш. Одређени парови жртава доносе ретко створење, иначе је тамница благословена: боље расположење и мана. unit.revenant = Повратник +unit.cavebear = Пећински медвед +unit.beetle = Џиновски инсект job.guard_post = На стражи job.spar = Спаринг msg.revenant_rises = Повратник устаје из гробља и служи ти! @@ -1045,6 +1048,10 @@ msg.altar_gift = Жртвеник прихвата пар: појављује с msg.altar_blessing = Жртвовано: {0}. Тамница је благословена. best.revenant.lure = устаје из гробља best.revenant.text = Повратник не једе, не спава и не жали се - савршен запосленик, ако подносиш смрад. | Кад стекне мало искуства, пије снагу оних које удари. Свештеница и он се не слажу, из очигледних разлога. +best.cavebear.lure = победи га у јазбини док имаш затвор +best.cavebear.text = Медвед који никад није видео сунце и не недостаје му. Чупав, снажан и мрзовољан до доручка. | Победи га у јазбини док у затвору има места и предаће се и придружити ти се. Воли врт печурака – и пауке, за ужину. +best.beetle.lure = победи га у јазбини док имаш затвор +best.beetle.text = Инсект велик као буре, оклопљен као витез и дупло учтивији. | Победи га у јазбини док у затвору има места и придружиће ти се. Спава у јазбини и не подноси слепе мишеве. best.b.prison.text = Редови ћелија. Хероји овде тихо труну док неко не одлучи шта ће с њима. best.b.graveyard.text = Маховина, камење и свежа земља. Овде доле нико не остаје дуго мртав. best.b.guardpost.text = Мангал, застава и створење које се досађује, оштрог ока. diff --git a/lang/sv.lang b/lang/sv.lang index 2e5ccf8..70433cf 100644 --- a/lang/sv.lang +++ b/lang/sv.lang @@ -331,6 +331,7 @@ unit.jailer = Fångvaktare unit.priestess = Flamprästinna msg.hero_captured = {0} utslagen och tagen till fånga! Byte: {1} guld. msg.defected = {0} har gått över till din sida! +msg.beast_tamed = En vild {0} ger sig och ansluter sig till din fängelsehåla! msg.prisoner_died = {0} dog under tortyren. job.carry = Bär en fånge job.pray = Ber @@ -1037,6 +1038,8 @@ tool.arena.desc = Varelser tränar parvis: dubbelt så mycket erfarenhet som tr tool.altar.label = Altare tool.altar.desc = Släpp en varelse på altaret för att offra den. Vissa par av offer ger en sällsynt varelse, annars välsignas hålan: bättre humör och mana. unit.revenant = Gengångare +unit.cavebear = Grottbjörn +unit.beetle = Jätteskalbagge job.guard_post = På vakt job.spar = Sparrar msg.revenant_rises = En gengångare reser sig från kyrkogården och tjänar dig! @@ -1045,6 +1048,10 @@ msg.altar_gift = Altaret tar emot paret: en {0} dyker upp! msg.altar_blessing = {0} offras. Hålan är välsignad. best.revenant.lure = reser sig från kyrkogården best.revenant.text = En gengångare äter inte, sover inte och klagar inte - den perfekta anställda, om du står ut med lukten. | Den dricker styrkan ur dem den slår när den har lite erfarenhet. Prästinnan och den kommer inte överens, av uppenbara skäl. +best.cavebear.lure = besegra den i dess ide medan du har ett fängelse +best.cavebear.text = En björn som aldrig sett solen och inte saknar den. Lurvig, stark och grinig fram till frukost. | Besegra den i idet medan ett fängelse har plats, så ger den sig och ansluter sig till dig. Den gillar svampträdgården – och spindlar som mellanmål. +best.beetle.lure = besegra den i dess ide medan du har ett fängelse +best.beetle.text = En skalbagge stor som en tunna, bepansrad som en riddare och dubbelt så artig. | Besegra den i idet medan ett fängelse har plats, så ansluter den sig till dig. Den sover i lyan och tål inte fladdermöss. best.b.prison.text = Rader av celler. Hjältar ruttnar här i stillhet tills någon bestämmer vad som ska göras med dem. best.b.graveyard.text = Mossa, stenar och färsk jord. Ingen förblir död länge här nere. best.b.guardpost.text = En glödpanna, ett baner och en uttråkad varelse med skarpa ögon. diff --git a/src/beasts.rs b/src/beasts.rs new file mode 100644 index 0000000..4dd9ebf --- /dev/null +++ b/src/beasts.rs @@ -0,0 +1,113 @@ +// Wild beasts: cave bears and giant beetles live in the open caverns of random maps. They defend +// their den like the dwarves defend their cave (they never stray far) and count for nobody. A +// master with room in a prison tames a beast he beats: instead of dying it gives in and joins. + +use crate::game::*; +use crate::map::*; + +pub fn beast(k: EK) -> bool { + matches!(k, EK::CaveBear | EK::Beetle) +} + +impl Game { + // a few dens in the caverns of a random map (deterministic, from the seed) + pub fn place_beasts(&mut self, seed: u32) { + let mut rng = Rng(seed.wrapping_mul(0x85eb_ca6b) ^ 0x27d4_eb2f | 1); + let (cx, cy) = (self.map.core.0 + 1, self.map.core.1 + 1); + let area = (mw() * mh()) as f32; + // none on small maps (no room), one per ~95x95 tiles on bigger ones + let dens = (area / 9000.0) as usize; + let open: Vec = (0..self.map.t.len()) + .filter(|&i| { + let (x, y) = xy(i); + let t = &self.map.t[i]; + t.kind == Kind::Floor && t.owner == Owner::None && !self.map.sky(i) && (x - cx).abs().max((y - cy).abs()) > 18 + && DIR8.iter().all(|&(dx, dy)| self.map.walk(x + dx, y + dy)) + && !self.dwarf_caves.iter().any(|c| (c.at.0 - x).abs() + (c.at.1 - y).abs() < 12) + }) + .collect(); + if open.is_empty() { + return; + } + let mut placed: Vec<(i32, i32)> = Vec::new(); + for _ in 0..dens * 6 { + if placed.len() >= dens { + break; + } + let i = open[(rng.next() as usize) % open.len()]; + let (x, y) = xy(i); + if placed.iter().any(|&(px, py)| (px - x).abs() + (py - y).abs() < 20) { + continue; + } + placed.push((x, y)); + let kind = if rng.f() < 0.5 { EK::CaveBear } else { EK::Beetle }; + let n = 1 + (rng.next() % 2) as usize; + for k in 0..n { + let level = 2 + rng.next() % 3; + let id = self.spawn(kind, false, x as f32 + 0.5 + k as f32 * 0.6, y as f32 + 0.5, level); + if let Some(e) = self.ents.iter_mut().find(|e| e.id == id) { + e.side = crate::dwarves::DWARF_SIDE; + e.home = Some((x as f32 + 0.5, y as f32 + 0.5)); + e.settled = true; + } + } + } + } + + // a beaten wild beast: with room in a prison it is tamed instead of killed (true) + pub(crate) fn try_tame(&mut self, j: usize) -> bool { + let e = &self.ents[j]; + if !beast(e.kind) || e.side != crate::dwarves::DWARF_SIDE || self.prison_space() == 0 { + return false; + } + let side = self.me_side; + let e = &mut self.ents[j]; + e.side = side; + e.home = None; + e.guard = false; + e.hp = e.max_hp * 0.4; + e.happy = 0.6; + e.hunger = 0.5; + e.energy = 0.5; + e.job = Job::None; + e.path.clear(); + e.bed = None; + e.settled = false; + let (x, y, kind) = (e.x, e.y, e.kind); + self.fx(7, x, y, 0.0, 0.0, 1.0, 0xff40c0ff); + self.sfx(Sfx::Convert, x, y); + self.msg("msg.beast_tamed", vec![format!("@{}", st(kind).name)]); + true + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn beasts_live_in_caverns_and_can_be_tamed() { + let g0 = Game::new(9, 128, 96); + let beasts: Vec<&Ent> = g0.ents.iter().filter(|e| e.alive && beast(e.kind)).collect(); + assert!(!beasts.is_empty(), "a den on a bigger map"); + assert!(beasts.iter().all(|e| e.dwarf() && e.home.is_some()), "neutral, at home"); + let mut g = g0; + let j = g.ents.iter().position(|e| e.alive && beast(e.kind)).unwrap(); + // without a prison the beast dies + assert!(!g.try_tame(j)); + // a prison: the beaten beast joins + let (cx, cy) = g.map.core; + g.build_rect(9, cx - 6, cy - 6, cx - 3, cy - 4); + g.gold = 99999.0; + let t = &mut g.map.t[idx(cx - 5, cy - 5)]; + if t.kind != Kind::Prison { + t.kind = Kind::Prison; + t.owner = Owner::Player; + } + g.recount(); + assert!(g.prison_space() > 0); + g.ents[j].hp = 0.0; + g.kill(j); + assert!(g.ents[j].alive && g.ents[j].side == 0 && !g.ents[j].dwarf(), "tamed"); + } +} diff --git a/src/blocks.rs b/src/blocks.rs index f63715f..c07c40f 100644 --- a/src/blocks.rs +++ b/src/blocks.rs @@ -10,9 +10,9 @@ use serde::{Deserialize, Serialize}; pub const SIDES: [i32; 6] = [-1, 0, 1, 2, 3, 4]; // creature and hero kinds a block may name ("" = any) -pub const KINDS: [&str; 24] = [ +pub const KINDS: [&str; 26] = [ "Worker", "Kobold", "Spider", "Mage", "Ogre", "Jailer", "Priestess", "Chainbreaker", "Bat", "Gargoyle", "Owl", "Wyrm", "Cogling", "Revenant", "Knight", "Archer", "Priest", "Dwarf", "Paladin", "Giant", "Fairy", - "BattleMage", "Ram", "Catapult", + "BattleMage", "Ram", "Catapult", "CaveBear", "Beetle", ]; // ground a Terrain block can make diff --git a/src/game.rs b/src/game.rs index 14bb1f5..60aa572 100644 --- a/src/game.rs +++ b/src/game.rs @@ -127,6 +127,9 @@ pub enum EK { // siege engines (heroes bring them; a master can build his own, see siege.rs) Ram, // smashes doors, walls and towers, ignores creatures Catapult, // hurls stones at towers from afar + // wild beasts of the caverns (beasts.rs): neutral until tamed + CaveBear, // strong and shaggy, likes the mushroom garden + Beetle, // a giant armoured beetle, likes the lair } pub struct St { @@ -171,6 +174,8 @@ pub fn st(k: EK) -> St { EK::BattleMage => s("unit.battlemage", 120.0, 18.0, 5.0, 1.8, 1.8, 120, 250), EK::Ram => s("unit.ram", 900.0, 45.0, 1.1, 1.0, 1.8, 0, 200), EK::Catapult => s("unit.catapult", 320.0, 40.0, 7.5, 0.9, 3.5, 0, 200), + EK::CaveBear => s("unit.cavebear", 420.0, 24.0, 1.0, 1.9, 1.4, 110, 0), + EK::Beetle => s("unit.beetle", 300.0, 13.0, 1.0, 1.7, 1.1, 70, 0), } } @@ -2782,6 +2787,9 @@ impl Game { pub(crate) fn kill(&mut self, j: usize) { self.boss_loot(j); + if self.try_tame(j) { + return; + } let e = &self.ents[j]; if e.hero && e.captive == 0 && self.prison_space() > 0 { // knocked out instead of killed: imps carry the hero to the torture chamber diff --git a/src/gfx.rs b/src/gfx.rs index bb820d6..e2fa9c2 100644 --- a/src/gfx.rs +++ b/src/gfx.rs @@ -1553,6 +1553,32 @@ fn sprite_rows(k: EK) -> [&'static str; 10] { "...y..y...", "..........", ], + // cave bear: shaggy brown fur, small yellow eyes + EK::CaveBear => [ + ".kk....kk.", + "kBBk..kBBk", + "kBBBBBBBBk", + "kBeBBBBeBk", + "kBBBkkBBBk", + ".kBBffBBk.", + "kBBBBBBBBk", + "kBbBBBBbBk", + ".kBBkkBBk.", + ".kkk..kkk.", + ], + // giant beetle: a shiny dark-green shell, mandibles, six legs + EK::Beetle => [ + "..k....k..", + "...k..k...", + "..kGGGGk..", + ".kGeGGeGk.", + "kGGgGGgGGk", + "kGgGGGGgGk", + "kGGgGGgGGk", + ".kGGGGGGk.", + "k.kGGGGk.k", + ".k.k..k.k.", + ], // battering ram: a roofed frame on wheels, an iron-capped trunk EK::Ram => [ "..........", @@ -1661,7 +1687,7 @@ fn pal(ch: char) -> Option { }) } -pub const SPRITE_KINDS: [EK; 24] = [ +pub const SPRITE_KINDS: [EK; 26] = [ EK::Worker, EK::Kobold, EK::Spider, @@ -1686,6 +1712,8 @@ pub const SPRITE_KINDS: [EK; 24] = [ EK::BattleMage, EK::Ram, EK::Catapult, + EK::CaveBear, + EK::Beetle, ]; // width of the sprite texture in pixels pub const SPRITE_TEX_W: f32 = (SPRITE_KINDS.len() * 12) as f32; diff --git a/src/main.rs b/src/main.rs index 4c182ca..89b1c91 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,6 +31,7 @@ mod rooms; mod save; #[cfg(test)] mod scenes; +mod beasts; mod blocks; mod bosses; mod bridges; diff --git a/src/menu/bestiary.rs b/src/menu/bestiary.rs index bff24a5..022f3a8 100644 --- a/src/menu/bestiary.rs +++ b/src/menu/bestiary.rs @@ -7,7 +7,7 @@ use crate::ui::{tool_cost_static, BLUE as BLUE_C, GREEN as GREEN_C, RED as RED_C pub const TABS: [&str; 4] = ["best.tab.creatures", "best.tab.humans", "best.tab.dungeon", "best.tab.ranks"]; -const CREATURES: [EK; 14] = [EK::Worker, EK::Kobold, EK::Spider, EK::Mage, EK::Ogre, EK::Jailer, EK::Priestess, EK::Chainbreaker, EK::Cogling, EK::Revenant, EK::Bat, EK::Gargoyle, EK::Owl, EK::Wyrm]; +const CREATURES: [EK; 16] = [EK::Worker, EK::Kobold, EK::Spider, EK::Mage, EK::Ogre, EK::Jailer, EK::Priestess, EK::Chainbreaker, EK::Cogling, EK::Revenant, EK::Bat, EK::Gargoyle, EK::Owl, EK::Wyrm, EK::CaveBear, EK::Beetle]; const HUMANS: [EK; 10] = [EK::Knight, EK::Archer, EK::Priest, EK::Dwarf, EK::Fairy, EK::BattleMage, EK::Giant, EK::Paladin, EK::Ram, EK::Catapult]; // buildings: indices into ui::TOOLS const BUILDINGS: [usize; 32] = [2, 3, 4, 5, 6, 12, 40, 13, 18, 21, 41, 42, 43, 44, 17, 47, 49, 19, 14, 15, 16, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]; diff --git a/src/netplay.rs b/src/netplay.rs index cad0aea..e13a1d2 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -755,6 +755,8 @@ mod tests { e.side = 3; } assert_eq!(g.nearest_enemy(&red_e, 3.0), Some(blue), "the other team is"); + // the blue test unit next to green's heart has done its job (it would see the heart) + g.ents.retain(|e| e.id != blue); } for _ in 0..40 { turn_all(&mut games, &[]); diff --git a/src/personality.rs b/src/personality.rs index bfa2442..c85c20c 100644 --- a/src/personality.rs +++ b/src/personality.rs @@ -28,6 +28,8 @@ pub fn persona(k: EK) -> Persona { EK::Wyrm => p(Kind::Treasury, &[EK::Bat], Some((7, "inferno"))), EK::Cogling => p(Kind::Forge, &[EK::Ogre], Some((4, "bomb"))), EK::Revenant => p(Kind::Graveyard, &[EK::Priestess], Some((5, "drain"))), + EK::CaveBear => p(Kind::Farm, &[EK::Spider], None), + EK::Beetle => p(Kind::Lair, &[EK::Bat], None), _ => p(Kind::Lair, &[], None), } } diff --git a/src/wilds.rs b/src/wilds.rs index c93b0fe..f0aeb9b 100644 --- a/src/wilds.rs +++ b/src/wilds.rs @@ -73,6 +73,8 @@ impl Game { } // giant mushrooms in the open: the underground's little wood self.grow_mushrooms(seed); + // and now and then a den of wild beasts + self.place_beasts(seed); } // a cavern: a few overlapping blobs, ragged edges