diff --git a/.gitignore b/.gitignore index 42a0d08ab9..39d0121c62 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .project project.properties proguard.cfg +lint.xml # Built application files *.apk @@ -26,3 +27,6 @@ local.properties # Proguard folder generated by Eclipse proguard/ + +# .settings folder generated by Eclipse +.settings/ diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c941f22f1c..bc364785c4 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,15 +1,15 @@ - + android:targetSdkVersion="21"/> @@ -24,7 +24,7 @@ android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" - android:allowBackup="false"> + android:allowBackup="true"> - \ No newline at end of file + diff --git a/README.md b/README.md index 8b60303977..59c0504b74 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,56 @@ Pixel Dungeon Traditional roguelike game with pixel-art graphics and simple interface. Pixel Dungeon on GooglePlay: -https://play.google.com/store/apps/details?id=com.watabou.pixeldungeon +https://play.google.com/store/apps/details?id=br.com.rodriformiga.pixeldungeon Official web-site: http://pixeldungeon.watabou.ru/ -Developer's blog: +Developer's Official blog: http://pixeldungeon.tumblr.com/ To build the game you will need my unnamed game library: -https://github.com/watabou/PD-classes +https://github.com/rodriformiga/PD-classes + + + +Translating Pixel Dungeon +============= + +> **It was a great mission, but with much effort, all texts, phrases, words and other strings were copied all the source code of the game and grouped into a single file. The ```string.xml``` file.** + +By grouping all the strings of the game, it becomes possible to take advantage of translation support android as described in [Andoid Guide](http://developer.android.com/training/basics/supporting-devices/languages.html). + + +----- +##### To translate the game in [Transifex](https://www.transifex.com/pixel-dungeon/pixel-1/) + +* You can make or help translate the online game, accessed the website: + * https://www.transifex.com/pixel-dungeon/pixel-1/ +* It is very simple to use, especially for those without programming skills. If you have questions on how to use the program or want me to generate a version for testing, you can contact me via e-mail rodriformiga@gmail.com +* When a translation is done into any language, the translation is downloaded, reviewed and compiled, and a new Pixel version is released. This normally occurs once every 2 months. + + +----- +##### To translate the game in Eclipse: + +1. Copy the contents of the folder [/res/values](res/values/) to a new directory with the corresponding site to be translated like as [/res/values-fr](res/values-fr) for a translation into French. +2. After making the copy, simply translating the content of all tags within the [strings.xml](res/values/strings.xml) file in your new directory. +3. After that, please test your game translated. :wink::video_game: + +----- + +**NOTE:** Currently, the font files have the characters below. Any character other than those below, will _**not appear in the game**_. +Following valid characters: +``` + !¡\"#$%&'()*+,-./0123456789:;<=>?¿@ +ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` +abcdefghijklmnopqrstuvwxyz{|}~\u007F +àáâäãąèéêëęìíîïòóôöõùúûüñńçćłśźż +ÀÁÂÄÃĄÈÉÊËĘÌÍÎÏÒÓÔÖÕÙÚÛÜÑŃÇĆŁŚŹŻºß +Б ГДЖЗИЙЛ П УФЦЧШЩЪЫЬЭЮЯ +бвгджзийлмнптуфцчшщъыьэюя +``` + + +**Help us make the Pixel Dungeon best and join the translations of the game** diff --git a/assets/arcs1.png b/assets/arcs1.png index 900b52e137..b1cd6bf678 100644 Binary files a/assets/arcs1.png and b/assets/arcs1.png differ diff --git a/assets/arcs2.png b/assets/arcs2.png index 1c57482827..fc0cd146d4 100644 Binary files a/assets/arcs2.png and b/assets/arcs2.png differ diff --git a/assets/avatars.png b/assets/avatars.png index 3562b773c8..56c1a0a2d8 100644 Binary files a/assets/avatars.png and b/assets/avatars.png differ diff --git a/assets/buffs.png b/assets/buffs.png index 8473921209..8e9ca23ef8 100644 Binary files a/assets/buffs.png and b/assets/buffs.png differ diff --git a/assets/chrome.png b/assets/chrome.png index 3f89fd979a..bebbead8c6 100644 Binary files a/assets/chrome.png and b/assets/chrome.png differ diff --git a/assets/font15x.png b/assets/font15x.png index 2e0d7320be..921b3a1668 100644 Binary files a/assets/font15x.png and b/assets/font15x.png differ diff --git a/assets/font1x.png b/assets/font1x.png index 7106aafc13..39cbb38141 100644 Binary files a/assets/font1x.png and b/assets/font1x.png differ diff --git a/assets/font25x.png b/assets/font25x.png index d39d4cf60c..9a92663806 100644 Binary files a/assets/font25x.png and b/assets/font25x.png differ diff --git a/assets/font2x.png b/assets/font2x.png index adc6f614b3..ef2a186a26 100644 Binary files a/assets/font2x.png and b/assets/font2x.png differ diff --git a/assets/font3x.png b/assets/font3x.png index 87011cdda8..de191cd7fc 100644 Binary files a/assets/font3x.png and b/assets/font3x.png differ diff --git a/assets/hp_bar.png b/assets/hp_bar.png index fa3197e073..519a27805a 100644 Binary files a/assets/hp_bar.png and b/assets/hp_bar.png differ diff --git a/assets/icons.png b/assets/icons.png index 7b65f8872d..080ee3cc8b 100644 Binary files a/assets/icons.png and b/assets/icons.png differ diff --git a/assets/items.png b/assets/items.png index bb96a04217..e0eaa3c53e 100644 Binary files a/assets/items.png and b/assets/items.png differ diff --git a/assets/large_buffs.png b/assets/large_buffs.png index e225a36f8a..464ced2520 100644 Binary files a/assets/large_buffs.png and b/assets/large_buffs.png differ diff --git a/assets/locked_badge.png b/assets/locked_badge.png new file mode 100644 index 0000000000..62ee4c4f6e Binary files /dev/null and b/assets/locked_badge.png differ diff --git a/assets/mage.png b/assets/mage.png index 74a41b9abf..0a9d61401c 100644 Binary files a/assets/mage.png and b/assets/mage.png differ diff --git a/assets/ranger.png b/assets/ranger.png index 56175742b1..2e70aae6a1 100644 Binary files a/assets/ranger.png and b/assets/ranger.png differ diff --git a/assets/rogue.png b/assets/rogue.png index 42eafb07bf..8f022e234b 100644 Binary files a/assets/rogue.png and b/assets/rogue.png differ diff --git a/assets/status_pane.png b/assets/status_pane.png index 3ccb5afd6a..367fc9ed02 100644 Binary files a/assets/status_pane.png and b/assets/status_pane.png differ diff --git a/assets/toolbar.png b/assets/toolbar.png index ec2eaf1a07..74a7f79f92 100644 Binary files a/assets/toolbar.png and b/assets/toolbar.png differ diff --git a/assets/warrior.png b/assets/warrior.png index c12e46d9eb..17c417e589 100644 Binary files a/assets/warrior.png and b/assets/warrior.png differ diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml new file mode 100644 index 0000000000..a0c809456c --- /dev/null +++ b/res/values-de/strings.xml @@ -0,0 +1,1657 @@ + + + + Pixel Dungeon + + + + + Spielen + Rekorde + Medaillen + Über + + Code & Grafik: Watabou\nMusik: Cube_Code\n\nDieses Spiel wird von Brian Walker brogue inspiriert. Versuchen Sie es auf Windows, Mac OS oder Linux - Es ist toll! :)\n\nBitte besuchen offiziellen Website für weitere Informationen: + pixeldungeon.watabou.ru + Übersetzung: rodriformiga, Sarius + rodriformiga@gmail.com + Sende eine E-Mail + + Spitzenplatzierungen + Insgesamt Spiele gewonnen/gespielt:\u0020 + Es wurden bisher keine Spiele gespielt. + Keine zusätzlichen Informationen + + Deine Medaillen + + Spiel laden + Neues Spiel + Aktuelles Spiel löschen + Tiefe: %1$d, level: %2$d + Willst du wirklich ein neues Spiel starten? + Dein aktueller Spielfortschritt wird gelöscht. + Ja, starte ein neues Spiel + Nein, kehr zum Hauptmenü zurück + Um diese Klasse freizuschalten, besiege den 3. Endgegner mit einer beliebigen anderen Klasse + Um \"Herausforderungen\" freizuschalten, gewinne das Spiel mit einer beliebigen Klasse. + + Absteigen... + Aufsteigen... + Laden... + Wiederbeleben... + Zurückkehren... + Fallen... + Datei nicht gefunden, aus irgendeinem Grund... + Irgendwas ist schief gelaufen... + + Viele Helden aller Art wagte sich in die Kerker, bevor Sie. Einige von ihnen haben mit Schätze und magische Artefakte zurückkehrte, die meisten haben noch nie von ihm gehört. Aber keine haben beim Abrufen das Amulett der Yendor, die gesagt wird, um in den Tiefen des Dungeon versteckt werden konnten.\n\nSie halten sich für die Herausforderung bereit, aber am wichtigsten ist, fühlen Sie sich, dass das Glück lächelt über dir. Es ist Zeit, Ihr eigenes Abenteuer zu beginnen! + + Feierabend! + Ich bin noch nicht fertig + Sie halten es endlich in den Händen, das Amulett der Yendor. Basierend auf seinen Strom können Sie auf der ganzen Welt oder mit Frieden und Wohlstand zu bringen, um Menschen oder was auch immer. Sowieso wird Ihr Leben für immer verändern und dieses Spiel zu Ende. Oder Sie können ein Sterblicher ein wenig länger bleiben. + + Willkommen im %d. Level von Pixel Dungeon! + Willkommen zurück im %d. Level von Pixel Dungeon! + Vorsicht! Der Kerker ist nachts sogar noch gefährlicher! + Das Echo deiner Schritte hallt durch den Kerker. + Du hörst das Wasser um dich herum plätschern. + Der Geruch von Vegetation ist dick in der Luft. + Die Atmosphäre lässt erahnen, dass diese Ebene viele Geheimnisse bereithält. + + + + mob + %1$s treffen %2$s + %s tötete dich... + %1$s hat %2$s besiegt + %1$s %2$s deinem Angriff + %1$s Angriff %3$s %2$s + Der Schmerz getroffen verursacht die Lähmung des %s + ausgewichen + vergiftet + wut + verlangsamt + geist + vision + paralysiert + erschrocken + verwurzelt + gelähmt + blutend + schwindlig + unsichtbar + + du + Man verlässt Pixel Dungeon nicht einfach so. + Level up! + Du hast Level %d erreicht! Du hast nun mehr Lebenskraft und kannst dich besser konzentrieren. Es ist einfacher für dich geworden einen Gegner zu treffen und seinen Angriffen auszuweichen. + Du hast %s gefunden + Da liegt noch mehr + Die Truhe ist verschlossen, und du hast keinen passenden Schlüssel + Du hast keinen passenden Schlüssel + Du bemerkst etwas + ... + suchen + Du fängst Feuer! + Du bist paralysiert! + Du bist vergiftet! + Säure isst dein Fleisch. Wegwischen it! + Du kannst dich nicht bewegen! + Du fühlst dich geschwächt! + Du bist geblendet! + Du wirst wütend! + wütend + Du bist verzaubert! + Du bist gelähmt! + Du blutest! + Alles dreht sich um dich! + + Krieger + Magier + Schurke + Jägerin + + Krieger beginnen mit 11 Stärkepunkten. + Krieger starten mit einem einzigartigen Schwert. Dieses Schwert kann später \"umgeschmiedet\" werden um eine andere Nahkampfwaffe zu verbessern. + Krieger sind weniger effektiv im Umgang mit Fernkampfwaffen. + Jede Form von Nahrung gibt beim Verzehr etwas Gesundheit zurück. + Stärketränke sind von Beginn an bekannt. + + + Magier beginnen mit einem einzigartigen Zauberstab der magischen Geschosse. Dieser Zauberstab kann später \"entzaubert\" werden um einen anderen Zauberstab aufzuwerten. + Magier laden ihre Zauberstäbe schneller auf. + Jedes Nahrungsmittel stellt beim Essen 1 Ladung bei allen Zauberstäben im Rucksack wieder her. + Magiere können ihre Zauberstäbe als Nahkampfwaffe nutzen. + Identifizierungsrollen sind bereits zu Beginn bekannt. + + + Rogues start with a Ring of Shadows+1. + Rogues identify the type of a ring on equipping it. + Rogues are proficient with light armor, dodging better while wearing it. + Rogues are proficient in detecting hidden doors and traps. + Rogues can go without food longer. + Scrolls of Magic Mapping are identified from the beginning. + + + Jägerinnen beginnen mit 15 Lebenspunkten. + Jägerinnen beginnen mit einem einzigartigen aufwertbaren Bummerang. + Jägerinnen sind effektiv im Umgang mit Fernkampfwaffen und erhalten einen Schadensbonus beim Benutzen, wenn ihre Stärke die erforderliche Stärke für die Waffe übersteigt. + Jägerinnen erhalten mehr Gesundheit von Taudropfen. + Jägerinnen spüren benachbarte Monster sogar dann, wenn sie hinter Hindernissen versteckt sind. + + + gladiator + Ein erfolgreicher Angriff mit einer Nahkampfwaffe erlaubt es dem _Gladiator_ , einen Komboangriff einzusetzen, in dem jeder erfolgreiche Treffer mehr Schaden verursacht. + berserker + Wenn ein _Berserker_ schwer verletzt ist, erreicht er einen Zustand wilder Wut, in dem sein Schaden deutlich erhöht ist. + hexenmeister + Wenn ein _Hexenmeister_ einen Gegner tötet nimmt er seine Seele in sich auf. Sie heilt seine Wunde und sättigt ihn. + kampfmagier + Während er mit einem Zauberstab in der Hand kämpft, verursacht der _Kampfmagier_ zusätzlichen Schaden abhängig von der aktuellen Aufladung. Jeder erfolgreiche Treffer stellt eine Aufladung des Zauberstabes wieder her. + assassine + Der _Assassine_ verursacht zusätzlichen Schaden an seinem Ziel während er einen Überraschungsangriff ausführt. + windläufer + Der _Windläufer_ kann fast doppelt so schnell laufen wie die meisten Monster. Während er rennt ist der Freerunner deutlich schwerer zu treffen. Dafür darf er nicht überladen sein und nicht am verhungern. + scharfschütze + _Scharfschützen_ sind dazu in der Lage, Schwachpunkte in der gegnerischen Rüstung zu erkennen und diese effektiv zu umgehen wenn sie eine Fernkampfwaffe nutzen. + bewahrer + _Bewahrer_ haben eine starke Bindung zu den Kräften der Natur. Sie besitzen die Fähigkeit, Tautropfen und Samen von Pflanzen zu sammeln. Zusätzlich erhalten sie eine temporäre Rüstungsverbesserung, wenn sie hohes Gras niedertreten. + + + + Medaille bestätigt: %s + Neue Meta Medaille: %s + Neue Medaille: %s + 10 Gegner getötet + 50 Gegner getötet + 150 Gegner getötet + 250 Gegner getötet + 100 Gold gesammelt + 500 Gold gesammelt + 2500 Gold gesammelt + 7500 Gold gesammelt + Level 6 erreicht + Level 12 erreicht + Level 18 erreicht + Level 24 erreicht + Alle Tränke identifiziert + Alle Schriftrollen identifiziert + Alle Ringe identifiziert + Alle Zauberstäbe identifiziert + Alle Tränke, Schriftrollen, Ringe und Zauberstäbe identifiziert + + + + Alle Taschen gekauft + Tod durch Feuer + Tod durch Gift + Tod durch giftige Gase + Tod durch Hunger + Tod durch Verzauberung + Tod durch Fallen + Tod durch Feuer, Gift, giftige Gase und Hunger + + + + + 1. Boss besiegt + 2. Boss besiegt + 3. Boss besiegt + 4. Boss besiegt + 1. Boss besiegt mit Krieger, Magier, Schurke & Jägerin + + + + + + + + + 3. Boss besiegt durch Gladiator, Berserker, Hexenmeister, Kampfmagier, Freerunner, Assassine, Scharfschütze & Wächter + Ring des Schacherers erhalten + Dornenring erhalten + 13 Stärkepunkte erhalten + 15 Stärkepunkte erhalten + 17 Stärkepunkte erhalten + 19 Stärkepunkte erhalten + 10 Mahlzeiten gegessen + 20 Mahlzeiten gegessen + 30 Mahlzeiten gegessen + 40 Mahlzeiten gegessen + + + + + Gegenstand mit Level 3 errungen + Gegenstand mit Level 6 errungen + Gegenstand mit Level 9 errungen + Gegenstand mit Level 12 errungen + + + + + + Alle seltenen Monster getötet + + + + + Amulett von Yendor erhalten + Amulett von Yendor mit Krieger, Magier, Schurke & Jägerin erhalten + 7er Combo + 3 Tränke gebraut + 6 Tränke gebraut + 9 Tränke gebraut + 12 Tränke gebraut + Level abgeschlossen ohne ein Monster zu töten + Monster mit einer Grausigen Waffe getötet + 6 Piranhas getötet + 5 Monster in der Nacht getötet + 10 Spiele gespielt + 100 Spiele gespielt + 500 Spiele gespielt + 2000 Spiele gespielt + Happy End + Herausforderung gewonnen + Danke für deine Unterstützung! + + + + + Auf Diät + Der Glaube ist meine Rüstung + Nadeln der Angst + Unfruchtbares Land + Schwarmintelligenz + In die Dunkelheit + Verbotenen Runen + + + + + Brunnen der Heilung + Brunnen der Erkenntnis + Brunnen der Umwandlung + Opferkammer + Alchemiekessel + Garten + beseelte Statue + Trauriger Geist + Alter Stabmacher + Trollschmied + Ehrgeiziger Wichtel + + + + Ist durch %1$s auf Ebene %2$d gestorben + Ist von dem %1$s auf Ebene %2$d getötet worden + Ist durch seine eigene %1$s auf Ebene %2$d gestorben + Ist von dem %1$s auf Ebene %2$d getötet worden + Durch eine Explosion einer Bombe in der Ebene %d getötet + Ist durch eine Entladung von %1$s auf Ebene %2$d gestorben + Ist auf Ebene %d verbrannt + Ist auf Ebene %d verhungert + Ist auf Ebene %d durch Gift gestorben + Ist auf Ebene %d durch giftige Gase gestorben + Ist auf Ebene %d verblutet. + Ist auf Ebene %d durch Säure gestorben + Ist auf Ebene %d in den Tod gestürzt + Hat das Amulett von Yendor erlangt + + + + + OK, ist ein Angebot, ein Geschäft, das ist, was ich für Sie tun kann: Ich kann 2 Artikel reforge und machen sie zu einem der besseren Qualität. + Wählen Sie ein Gegenstand, um zu schmieden + Reforge ihnen + + Tränke + Schriftrollen + Katalog + + Herausforderungen + + Welchem Weg wirst du folgen? + Ich entscheide es später + + + Vielleicht später + + Meistern + + FEHLER + + Einstellungen + Herausforderungen + Rangliste + Neues Spiel starten + Hauptmenü + Spiel Beenden + Zurück zum Spiel + + Werte + Effekte + Erfahrung + Stärke + Gesundheit + Gesammeltes Gold + Maximale Tiefe + Level %1$d %2$s + Katalog + Protokoll + + Oh ja! Sie sind mein Held!\nIn Bezug auf Ihre Belohnung, weiß ich nicht Bargeld mit mir im Moment, aber ich habe etwas besser für Sie. Das ist mein Familienerbstück Ring: mein Opa nahm es ihm ab einer toten Paladins Finger. + Nehmen Sie die Umgehungs + + Hier ist nichts. + + Truhe + Abgeschlossene Truhe + Kristalltruhe + Grab + Skelettreste + Du wirst nicht wissen, was drin ist, bis Sie es zu öffnen! + Aber um sie zu öffnen Sie benötigen einen goldenen Schlüssel. + Sie können %s innen zu sehen, sondern um die Brust Sie einen goldenen Schlüssel müssen zu öffnen. + Dieser alte Gruft kann etwas Nützliches enthalten, aber sein Besitzer wird sicherlich auf die Überprüfung widersprechen. + Das ist alles, was von einem Ihrer Vorgänger hinterlassen. Vielleicht ist es lohnt sich für alle Wertsachen. + + Protokoll + + Sprachen + + Es konnten keine zusätzlichen Informationen geladen werden + Werte + Gegenstände + Medaillen + Level %1$d %2$s + Herausforderungen + Gesundheit + Stärke + Spieldauer + Maximale Tiefe + Mobs Getötet + Gesammeltes Gold + Gegessene Nahrung + Gebraute Tränke + Benutzte Ankhs + + Sie starb, aber sie waren noch eine Chance, diesen Dungeon zu gewinnen gegeben. Wirst du es nehmen? + Ja, ich werde kämpfen! + Nein, ich gebe auf + + Geist-Waffe + Geist-Rüstung + Farewell, Abenteurer! + + + + - + Standardzoom + UI vergrößern + Immersionsmodus + Sprache + Musik + Toneffekte + Helligkeit + Zweite Quickslot + Zum Portrait wechseln + Zur Landschaft wechseln + + Der Dungeon befindet sich direkt unterhalb der Stadt, seiner oberen Ebenen tatsächlich bilden die Stadt die Kanalisation. Nominell ein Teil der Stadt, sind diese Ebenen nicht gefährlich. Niemand wird es als ein sicherer Ort, aber zumindest werden Sie nicht brauchen, um mit bösen Zauber hier umzugehen. + Vor vielen Jahren ein unterirdisches Gefängnis wurde hier für die gefährlichsten Verbrecher gebaut. Zu der Zeit schien es wie eine sehr kluge Idee, denn dieser Ort war in der Tat sehr schwer zu entkommen. Aber bald dunkel Miasma begonnen, von unten zu durchdringen, Fahr Gefangenen und Wachen verrückt. Am Ende wurde das Gefängnis verlassen, obwohl einige Häftlinge blieben hier eingesperrt. + Die Höhlen, die sich unter den verlassenen Gefängnis strecken, sind spärlich besiedelt. Sie liegen zu tief, um die von der Stadt genutzt werden, und sie zu arm an Mineralien, um die Zwerge Interesse sind. In der Vergangenheit gab es eine Handelsaußenposten irgendwo hier auf der Strecke zwischen diesen beiden Zuständen, aber es seit dem Niedergang des Zwergen-Metropole untergegangen ist. Nur allgegenwärtig Gnolle und unterirdischen Tieren wohnen jetzt hier. + Zwergen-Metropole war einst die größte Zwergenstadtstaaten. In ihrer Blütezeit der mechanisierten Armee der Zwerge hat erfolgreich die Invasion der alte Gott und seine Dämonenarmee abgestoßen. Aber es wird gesagt, dass die Rückkehr Krieger haben Samen der Korruption mit sich brachten, und dass der Sieg war der Anfang vom Ende für die unterirdische Reich. + In der Vergangenheit sind diese Werte waren am Stadtrand von Metropolis. Nach der kostspielige Sieg im Krieg mit den alten Gott Zwerge wurden zu geschwächt, um sie der restlichen Dämonen zu löschen. Nach und Dämonen ihren Griff auf diesem Ort angezogen und jetzt ist es genannt Dämon Halls.\n\nSehr wenige Abenteurer jemals diese abstammen weit... + + ZU VERKAUFEN: %1$s - %2$dg + Kaufe für %dg + Verkaufe für %dg + Verkaufe 1 für %dg + Verkaufe alle für %dg + Vergiss es + Du hast dein %1$s für %2$dg verkauft + Du hast %1$s für %2$dg gekauft + + Oh, ich sehe, Sie gelungen! Ich hoffe, es war nicht beunruhigt Sie zu viel. Wie ich versprochen, können Sie eine meiner hochwertigen Zauberstäbe zu wählen. + Kampf-Zauberstab + Nicht-Kampf Zauberstab + Viel Glück bei Ihrer Suche, %s! + + + + Wählen Sie ein Gegenstand für die Quickslot + + + + + etw. + FALLEN LASSEN + WERFEN + Rucksack ist zu voll für das %s + Wählen Sie die Richtung der Wurf + Wegen häufiger Nutzung hat sich dein %s zerbrochen. + Wegen häufiger Nutzung wird sich dein %s bald verschlechtern. + + ANLEGEN + ABLEGEN + Du kannst das verfluchte %s nicht ablegen! + + Amulett von Yendor + SPIEL BEENDEN + Das Amulett von Yendor ist der stärkste bekannte Artefakt unbekannter Herkunft. Es wird gesagt, dass das Amulett dazu in der Lage ist, jeden Wunsch zu erfüllen, wenn die Willenskraft seines Besitzers stark genug ist, um es \"zu überreden\"; es zu tun. + + Ankh + Das alte Symbol der Unsterblichkeit gewährt die Fähigkeit, das Leben nach dem Tod zurück. Nach der Auferstehung alle nicht ausgerüstete Gegenstände verloren. + + rüstungssets + ANWENDEN + Mit diesem Set von kleinen Werkzeugen und Materialien kann jeder beliebige Rüstung in eine \"epische Rüstung\", der alle Eigenschaften des ursprünglichen Rüstungs halten zu verwandeln, sondern wird auch seinem Träger eine besondere Fähigkeit, je nach seiner Klasse. Keine Kenntnisse in Schneiderei, Lederverarbeitung und Schmiedekunst sind erforderlich. + Wählen Sie eine Rüstung zu aktualisieren + Sie haben das Rüstungsset angewendet um ihre %s zu verbessern + + Bombe + Dies ist eine relativ kleine mit Schwarzpulver gefüllte Bombe. Praktischerweise wird ihre Sicherung automatisch entfernt, wenn die Bombe geworfen wird. + Sie tötete sich mit einer Bombe... + + Tautropfen + Ein kristallklarer Tautropfen. + + Taufläschen + DRINKEN + Sie können überschüssige Tau in diesem kleinen Behälter für die spätere trinken zu speichern. Wenn das Gefäß voll ist, in einem Moment der Todesgefahr der Tau wird automatisch konsumiert werden. + Das Taufläschen wurde geleert um deine Wunden zu heilen. + Sie sammelte eine Tautropfen in Ihr Tau Fläschchen. + Dein Taufläschen ist voll. + Dein Taufläschen ist leer! + + Dies ist ein Nachmacher! + + Honigtopf + ZERBRECHEN + In diesem kleinen Honigtopf ist nicht viel Honig, aber es ist eine goldene Biene darin und sie will ihn nicht verlassen. + + Gold + Sammle Goldmünzen um sie später in einem Markt auszugeben. + Ein Stapel mit %d Goldmünzen. + Eine Goldmünze. + + Sie zusammenzucken, wie Sie Ihren Griff Unwillkürlich zieht um Ihr %s + + lloyd\'s beacon + SATZ + ZURÜCKKEHREN + Lloyd\'s beacon ist ein kompliziertes magische Gerät, das Sie an einen Ort, den Sie bereits haben, zurückkehren können. + Starke magische Aura dieses Ortes verhindert, dass Sie mit der lloyd\'s beacon! + Psychic Aura der Nachbar Kreaturen erlaubt es Ihnen nicht um die lloyd\'s beacon in diesem Moment benutzen. + Der lloyd\'s beacon erfolgreich an Ihrem aktuellen Standort festgelegt, jetzt können Sie jederzeit hier wieder zurück. + \n\nDieser Leuchtturm war irgendwo auf der Ebene %d der Pixel Dungeon gesetzt. + + Handbuch Spezialisierung + Handbuch Respezialisierung + LESEN + Diese getragen Leder Buch ist nicht so stark, aber Sie fühlen sich irgendwie, dass man eine Menge daraus zu sammeln. Denken Sie jedoch daran, dass das Lesen dieses Schmöker kann einige Zeit benötigen. + Sie können nicht lesen, während geblendet + Sie haben den Weg des %s gewählt! + + Fackel + ENTZÜNDEN + Es ist ein unverzichtbares Gegenstand in der Dämon-Hallen, die berüchtigt für ihre schlechten Umgebungslicht gibt. + + gewichtsstein + BEWERBEN + Mit Hilfe eines Gewichtsstein, können Sie Ihre Nahkampfwaffe auszugleichen, um die Geschwindigkeit und die Genauigkeit zu erhöhen. + Wählen Sie eine Waffe, um auszugleichen + Sie ausgewogen dein %s, um es schneller zu machen + Ihr %s es genauer zu machen ausgewogen + Wie möchten Sie Ihr %s balancieren? + für Geschwindigkeit + für Genauigkeit + Vergiss es + + + + + PFLANZEN + Werfen Sie diesen Samen zu der Stelle, an der Sie %1$s wachsen wollen.\n\n%2$s + samen der %s + + Dreamweed + Beim Berühren eines Dreamweed es sondert eine glitzernde Wolke aus Gas verwirrend. + + Earthroot + Wenn eine Kreatur berührt eine Earthroot, seine Wurzeln schaffen eine Art natürliche Rüstung um ihn herum. + pflanzliche Rüstung + + Fadeleaf + Berühren einer Fadeleaf wird jede Kreatur in eine zufällige Platz auf dem derzeitigen Niveau zu teleportieren. + + Firebloom + Wenn etwas berührt einen Firebloom, platzt sie in Flammen. + + Icecap + Beim Berühren einer Icecap scheidet eine Pollen, die alles, was in seiner Umgebung friert. + + Rottbeere + Beeren dieses Strauches schmecken süß, süßer Tod. + Der Samen emittiert ein Brüllen, das in der gesamten Dungeon hallt! + + Sorrowmoss + Ein Sorrowmoss ist eine Blume (kein Moos) mit gestochen scharfen Blütenblätter, mit einem tödlichen Gift überzogen. + + Sonnengras + Sungrass ist bekannt für heilenden Eigenschaften seines SAP. + pflanzliche Heilung + + + + + Deine %s schnürt dich schmerzhaft ein. + Du bist nun vertraut genug mit deiner %1$s um sie zu identifizieren. Es ist %2$s. + %1$s :%2$d + kaputte %1$s :%2$d + Eine Überlagerung verschiedener Magiearten hat die Glyphe von dieser Rüstung entfernt. + Diese %1$s bietet bis zu \"%2$d\" Schadensreduzierung pro Angriff. + \n\nDeine Stärke ist zu gering. Daher sind deine Bewegungsgeschwindigkeit und deine Verteidigungsfähigkeit verringert. + \n\nDa deine Stärke zu gering ist, wird das Tragen dieser Rüstung deine Bewegungsgeschwindigkeit und deine Verteidigungsfähigkeit verringern. + \n\nEine typische %1$s absorbiert bis zu %2$d Schadenspunkte pro Angriff und benötigt %3$d Stärkepunkte. + Diese Rüstung ist wahrscheinlich zu schwer für dich. + Sie hat eine Gravur + \n\n Du trägst die %1$s%2$s. + , und da sie verflucht ist, kannst du sie nicht entfernen. + \n\nDu spürst, dass eine bösartige Magie in dieser %s lauert. + + Dieser Gegenstand sieht großartig aus. + Deine Lebensenergie ist zu niedrig. + Du musst diese Rüstung tragen um ihre besondere Kraft nutzen zu können. + + Stoffrüstung + Diese leichte Rüstung bietet einfachen Schutz. + + Seidenhülle der Jägerin + Eine Jägerin in solch einem Umhang kann einen Fächer aus geisterhaften Klingen erschaffen. Jede dieser Klingen wird einen einzelnen Gegner im Sichtfeld anvisieren und Schaden an ihm verursachen. Dieser Schaden hängt von ihrer momentan ausgerüsteten Nahkampfwaffe ab. + GEISTERHAFTE KLINGEN + Es ist kein Gegner zu sehen. + Diese Rüstung kann nur von Jägerinnen benutzt werden! + + Lederrüstung + Eine Rüstung hergestellt aus gegerbter Monsterhaut. Sie ist nicht so leicht wie Stoffrüstung, bietet dafür aber besseren Schutz. + + Magierrobe + Ein Magier kann den Zauber \"geschmolzene Erde\" wirken während er diese prächtige Rüstung trägt: Alle Feinde in seinem Sichtfeld werden in Flammen ausgehen und können sich gleichzeitig nicht mehr bewegen. + GESCHMOLZENE ERDE + Nur Magier können diese Rüstung nutzen. + + Kettenrüstung + Verwobene Kettenglieder bilden eine harte und doch gleichzeitig flexible Rüstung. + + Plattenrüstung + Wuchtige Metallplatten wurden zu einem Anzug verbunden der unvergleichlichen Schutz für jeden Abenteurer bietet, der stark genug ist sein erdrückendes Gewicht zu ertragen. + + Schurkentracht + Während er dieses dunkle Kleidungsstück trägt, kann ein Schurke den sogenannten \"Rachbomben\" Trick anweden ( bei dem allerdings keine echten Explosionen vorkommen ): Er blendet Gegner, welche ihn sehen können, nd springt dann zur Seite. + RAUCHBOMBE + Nur Schurken können diese Rüstung nutzen! + Du kannst nur an einen leeren Platz in deinem Sichtfeld springen. + Wähle den Ort, zu dem du springen willst. + + Schuppenrüstung + Die Metallplättchen, die auf eine Lederjacke aufgenäht wurden, gewähren eine flexible und doch auch schützende Panzerung. + + Kriegerrüstung + Obwohl diese Rüstung schwer aussieht, erlaubt sie einem Krieger, mit einem heldenhaften Sprung zu einem anvisierten Platz zu springen und dabei alle angrenzenden Feinde niederzuschlagen und zu lähmen. + HELDENHAFTER SPRUNG + Nur Krieger können diese Rüstung nutzen. + Wähle die Richtung für deinen Sprung. + + + + + %s der Zuneigung + + %s der negativen Entropie + + %s der Auto-Reparatur + + %s des Rückstoßes + + %s des Verdrängens + + %s der Verschränkung + + %s des Metabolismus + + %s der Vervielfältigung + + %s der Macht + + %s des fauligen Geruches + + %s der Zähigkeit + %d verzögert + Zauber der Viskosität + Latente Schäden (%d) + Der Zauber der Viskosität getötet Sie... + + + + + ÖFFNEN + + Schlüsselbund + Dies ist ein Kupfer-Schlüsselanhänger, dass Sie alle Ihre Schlüssel getrennt vom Rest Ihres Eigentums zu halten können. + + Schriftrollenbehälter + Sie können eine beliebige Anzahl von Schriftrollen in diese rohrförmigen Behälter zu platzieren. Es spart Platz im Rucksack und schützt Schriftrollen aus Feuer. + + Samenbeutel + Diese kleinen Samtbeutel ermöglicht es Ihnen, eine beliebige Anzahl von Samen in sie zu speichern. Sehr angenehm. + + Stabhalter + Dieser schlanke Halter ist aus Leder von einem exotischen Tier gemacht. Es lässt zu, kompakt zu tragen bis zu %d Zauberstäbe. + + + + + Essensration + Nichts ausgefallenes: getrocknetes Fleisch, einige Kekse - solche Dinge eben. + ESSEN + Dieses Essen schmeckt köstlich! + + Geröstetes Fleisch + Es sieht nach einem annehmbaren Steak aus. + + Gefrorene Fleischscheiben + Ein Stück gefrorenes Fleisch. Man kann es nur essen, wenn man dünne Scheiben davon abschneidet. Und dadurch schmeckt es überraschend gut. + Du siehst, wie deine Hände unsichtbar werden! + Du spürst, wie deine Haut fester wird! + Erfrischend! + Du fühlst dich besser! + + Geheimnisvolles Fleisch + Essen auf eigene Gefahr! + Au, das ist heiß! + Du spürst deine Beine nicht mehr. + Du fühlst dich nicht gut. + Du bist pappsatt. + Dieses Essen schmeckte... komisch. + + Überteuerte Essensration + Es sieht genauso aus wie eine normale Essensration, nur kleiner. + Das Essen hat gut geschmeckt. + + Pastete + Dies ist eine Fleischpastete gefüllt mit Rindfleisch und Kartoffeln. + + + + + goldenen Schlüssel + Die Kerben auf dieser goldenen Schlüssel sind winzig und kompliziert. Vielleicht kann es einige Brust Schloss zu öffnen? + + Eisenschlüssel + Die Kerben auf dieser alten Eisenschlüssel sind gut getragen; seine Ledertrageband wird nach Alter zerschlagen. Welche Tür könnte es zu öffnen? + eisen-Schlüssel aus der Tiefe %d + + Skelettschlüssel + Dieser Schlüssel schaut ernst: Sein Kopf ist wie ein Schädel geformt. Wahrscheinlich kann es einige ernsthafte Tür zu öffnen. + + + + + %s Trank + Dieser Kolben enthält eine wirbelnde %s Flüssigkeit. Wer weiß, was sie tun werden, wenn getrunken oder geworfen? + DRINKEN + Gesundheitsschädlich Trank! + Wohltuend Trank + Ja, ich weiß, was ich tue + Nein, ich habe es mir anders überlegt + Bist du sicher, dass du es trinken möchtest. In den meisten Fällen solltest du solche Tränke auf deine Feinde werfen. + Bist du sicher, dass du es werfen möchtest? In den meisten Fällen ist es sinnvoll, es zu trinken. + Die Kolben zerbricht und %s Flüssigkeit spritzt harmlos + + türkis + karmesinrot + azurblau + jade + golden + magenta + holzkohle + elfenbein + bernstein + dister + indigo + silber + + + Erfahrungstrank + Die komprimierte Erfahrungen der Massen von Kämpfen auf flüssige Form reduziert, dieser Trank wird Ihre Erfahrungsstufe sofort erhöhen. + + Frosttrank + An der Luft öffnen, wird diese Chemikalie in einen Gefrierwolke verdampfen, wodurch jede Kreatur, die Kontakte, um es an Ort und Stelle eingefroren werden, nicht in der Lage, zu handeln und zu bewegen. + + Heiltrank + Ein Elixier, das sofort auf volle Gesundheit und Heilung Gift zurückkehren Sie. + Deine Wunden heilen vollständig. + + Unsichtbarkeitstrank + Trinken diesen Trank wird machen Sie vorübergehend unsichtbar. Obwohl unsichtbar, werden Feinde nicht in der Lage, Sie zu sehen. Angriff auf einen Feind, als auch mit einem Zauberstab oder eine Schriftrolle vor Augen Feindes, den Effekt zu zerstreuen. + Du siehst, wie deine Hände unsichtbar werden! + + Schwebetrank + Trinken Sie diese neugierig Flüssigkeit wird Sie veranlassen, in der Luft schweben, in der Lage, mühelos über Fallen driften. Flammen und Gasen in der Luft, aber, und kann nicht während der Luft umgangen werden. + Du schwebst in der Luft. + + Flammentrank + Dieser Kolben enthält eine instabile Verbindung, die bei Belichtung heftig in Flammen wird an die frische Luft. + + Machttrank + Diese leistungsstarke Flüssigkeit wird natürlich durch Ihre Muskeln ständig steigenden Ihre Kraft durch einen Punkt und Gesundheit durch fünf Punkte. + Neu entdeckte Stärke flutet durch deinen Körper. + +1 Stä, +5 TP + + Trank der Gedankensicht + Nach dem Trinken Diese, wird dein Geist auf die psychische Unterschrift des fernen Wesen zu werden abgestimmt, so dass Sie biologischen Präsenzen durch Wände zu spüren. Auch dieser Trank wird Ihnen ermöglichen, durch in der Nähe von Wänden und Türen zu sehen. + Sie können irgendwie das Gefühl der Anwesenheit von anderen Kreaturen Köpfen! + Sie können irgendwie sagen, dass Sie allein auf dieser Ebene sind im Moment. + + Lähmungsgastrank + An der Luft zu öffnen, wird die Flüssigkeit in diesen Kolben in eine betäubende Gelber Nebel verdampfen. Jeder, der die Wolke inhaliert wird sofort gelähmt, unfähig, für einige Zeit nach der Wolke zerstreut zu bewegen. Dieser Artikel kann an entfernten Feinden geworfen, um sie in der Wirkung des Gases zu fangen werden. + + Purifizierungstrank + Dieses Reagenz wird schnell zu neutralisieren alle schädlichen Gase im Wirkungsbereich. Trinken es wird Ihnen eine temporäre Immunität gegen solche Gase. + Sie fühlen sich ungewöhnlich Frische in der Luft. + Du hast aufgehört Gerüche wahrzunehmen! + + Stärketrank + Diese leistungsstarke Flüssigkeit wird natürlich durch Ihre Muskeln ständig steigenden Ihre Kraft durch einen Punkt. + Neu entdeckte Stärke flutet durch deinen Körper. + +1 Stä + + Giftgastrank + Entkorken oder erschütternd diese unter Druck stehende Glas verursacht seines Inhalts in eine tödliche Wolke aus giftigen grünes Gas explodieren. Sie können wählen, um diesen Trank an entfernten Feinden statt Entkorken es mit der Hand werfen. + + + + + Leichenstaub + Der Ball der Leiche kein Staub nach außen von einer regelmäßigen Staub Ball abweichen. Aber, wissen Sie, irgendwie, dass es besser ist, so schnell wie möglich es loswerden. + + dunkle Golderz + Dieses Metall wird als dunkel nicht wegen seiner Farbe (es muss nicht vom normalen Gold unterscheiden), sondern weil es schmilzt unter Tageslicht, dass es nutzlos auf der Oberfläche. + + Getrocknete Rose + Die Rose ist längst getrocknet, aber es hat alle seine Blütenblätter gehalten irgendwie. + + Zwerg-Token + Viele Zwerge und einige ihrer größeren Kreationen tragen diese kleine Metallstücke von unbekannten Zweck. Vielleicht sind sie Schmuck oder vielleicht eine Art von ID. Zwerge sind seltsame Leute. + + geisterfische + ESSEN + Sie können kaum sehen, diese kleine durchscheinende Fisch in der Luft. Im Wasser wird es praktisch unsichtbar. + Du siehst, wie deine Hände unsichtbar werden! + + Spitzhacke + Dies ist ein großes und robustes Werkzeug zum Trennen Felsen. Wahrscheinlich kann sie als Waffe verwendet werden. + ABBAUEN + Es gibt keine dunklen Goldader in der Nähe von Sie zu mir + + riesiger Rattenschädel + Es könnte ein schönes Jagdtrophäe, aber es riecht so schlecht, um es an der Wand zu platzieren. + + + + + %s Ring + Das Metallband ist mit einer großen %s Edelstein, der in der Dunkelheit glänzt geschmückt. Wer weiß, welche Auswirkungen es hat, wenn sie getragen? + kaputte %s + Du bist nun vertraut genug mit deiner %1$s um sie zu identifizieren. Es ist %2$s. + Ausklinken einem Ring + Sie können nur tragen zwei Ringe zu einem Zeitpunkt. Ausklinken einem Ihrer ausgestattet Ringe. + + Diamant + Opal + Granat + Rubin + Amethyst + Topas + Onyx + Turmalin + Smaragd + Saphir + Quarz + Achat + + Deine %s schnürt dich schmerzhaft ein. + %1$s\n\nDer %2$s ist auf dem Finger %3$s. + , und da sie verflucht ist, kannst du sie nicht entfernen. + %1$s\n\nDu spürst, dass eine bösartige Magie in dieser %2$s lauert. + Dies ist 1 %s + + Ring des Genauigkeit + Dieser Ring erhöht deine Chance den Feind zu treffen. + + Ring des Erkennung + Das Tragen dieser Ring ermöglicht es dem Träger, verborgenen Geheimnisse bemerken - Fallen und Geheimtüren - ohne Zeit zu suchen. Degraded Ringe Nachweis wird dumpfen Sinnen, so dass es schwieriger, um Geheimnisse einmal bemerken, wenn aktiv nach ihnen. + + Ring von Elementen + Dieser Ring bietet Beständigkeit gegen verschiedene Elemente wie Feuer, Strom, Gase etc. Auch es verringert Dauer der negativen Auswirkungen. + + Ring der Steuerhinterziehung + Dieser Ring erhöht deine Chance feindlichen Attacken auszuweichen. + + Ring des Schacherers + In der Tat ist dieser Ring bietet keine magische Wirkung, aber es zeigt den Ladenbesitzer und Lieferanten, dass der Eigentümer des Rings ist ein Mitglied der Diebesgilde. Normalerweise sind sie froh, einen Rabatt im Austausch für vorübergehende Immunität Garantie zu geben. Aktualisieren Sie diesen Ring nicht geben, zusätzliche Boni. + + Ring des Eile + Dieser Ring Fluss der Zeit des Trägers beschleunigt, so dass man alle Aktionen ein wenig schneller durchzuführen. + + Ring der Kräuterkunde + Dieser Ring erhöht deine Chance Tautropfen und Samen in zertrampeltem Gras zu finden. + + Ring des Ausbesserung + Dieser Ring erhöht die körpereigene regenerative Eigenschaften, so dass man verlorene Gesundheit mit einer beschleunigten Rate zu erholen. Degraded Ringe abnehmen oder sogar stoppen den natürlichen Regeneration. + + Ring der Macht + Ihre Zauberstäbe werden immer leistungsfähiger werden im Bereich der Energie, die von dieser Ring strahlt. Degraded Ringe der Macht wird stattdessen zu schwächen eure Zauberstäbe. + + Ring der Sattheit + Das Tragen dieser Ring können Sie ohne Nahrung mehr zu gehen. Degraded Ringe der Sattheit führt dazu, den gegenteiligen Effekt. + + Ring der Schatten + Wenn Sie diesen Ring tragen, ist es weniger wahrscheinlich, dass Feinde sie bemerken. Verschlechterte Ringe der Schatten werden Feinde, die Ihre Anwesenheit sonst nicht bemerkt hätten, vielleicht alarmieren. + + Ring Dornen + Obwohl dieser Ring nicht echte Dornen zu schaffen, ein Feind, den Sie attackiert wird sich um einen Bruchteil der Schäden, die sie verursacht verletzt werden. Aktualisieren Sie diesen Ring nicht geben, zusätzliche Boni. + + + + + schriftrolle \"%s\" + Das Pergament ist mit unverständlichen Schriftzeichen bedeckt, und trägt einen Titel von Rune %s. Wer weiß, was sie tun werden, wenn vorgelesen? + LESEN + Du kannst keine Schriftrolle lesen, solange du erblindet bist + + KAUNAN + SOWILO + LAGUZ + YNGVI + GYFU + RAIDO + ISAZ + MANNAZ + NAUDIZ + BERKANAN + ODAL + TIWAZ + + + Wähle einen Gegenstand aus + Wollen Sie wirklich, um die Nutzung des Pergaments stornieren? Es wird trotzdem verbraucht werden. + Ja. + Nein, ich habe es mir anders überlegt + + Schriftrolle der Herausforderung + Wenn laut zu lesen, wird diese Schriftrolle eine anspruchsvolle Brüllen, das alle Monster zu wecken und sie zu warnen, Lage des Lesers wird entfesseln. + Die Schriftrolle gibt einen anspruchsvollen Brüllen, das in der gesamten Dungeon hallt! + + Schriftrolle der Identifikation + Dauerhaft enthüllt alle Geheimnisse eines einzelnen Elements. + Wähle einen Gegenstand zur Itentifikation + Es ist %s + + Schriftrolle der Wiegenlied + Eine beruhigende Melodie wird alle Geschöpfe in Ihrem Sichtfeld in einen tiefen Schlaf versetzen, geben Ihnen eine Chance zu fliehen oder machen einen Überraschungsangriff auf sie. + Die Schriftrolle äußert eine beruhigende Melodie. + Die Schriftrolle äußert eine beruhigende Melodie und der %s schläft! + Die Schriftrolle stößt einen beruhigende Melodie und die Monster einschlafen! + + Schriftrolle der Abbildung Magie + Wenn diese Schriftrolle ist zu lesen, wird ein Bild von kristalliner Klarheit in Ihr Gedächtnis eingeprägt werden, warnt Sie auf die genaue Layout der Ebene und enthüllt alle Geheimnisse. Die Positionen der Gegenstände und Kreaturen unbekannt. + Sie befinden sich nun bewusst, Level-Layout. + + Schriftrolle der Spiegel-Bild + Die Beschwörungsformel auf dieser Schriftrolle wird illusionären Zwillinge des Lesers, der seine Feinde jagen schaffen. + + Schriftrolle der Psi-Explosion + Diese Schriftrolle enthält destruktive Energie, die kanalisiert psionisch kann, um eine massive Schäden an allen Kreaturen innerhalb eines Sichtfeldes verursachen werden. Eine begleitende Lichtblitz wird vorübergehend blind jeder im Wirkungsbereich einschließlich der Leser der Schriftrolle. + + Schriftrolle der Wiederaufladen + Die rohe magische Kraft in diesem Pergament gebunden wird, wenn er losgelassen wird, laden Sie alle Zauberstäbe des Lesers auf voller Leistung. + eine Welle von Energie-Kurse durch Ihre Packung, Aufladen deinen Zauberstab + eine Welle von Energie-Kurse durch Ihre Packung, Aufladen Ihres Zauberstäbe + eine Welle von Energie-Kurse durch Ihre Packung, aber es passiert nichts + + Schriftrolle der Fluch Aufheben + Die Beschwörungsformel auf dieser Schriftrolle wird sofort Streifen von der Leser Waffe, Rüstung, Ringe und durch Artikel keine bösen Zauber, die den Träger vor Beseitigung von ihnen verhindern könnten. + Rucksack glüht mit einem reinigenden Licht und eine böswillige Energie verteilt. + Rucksack glüht mit einem reinigenden Licht, aber es passiert nichts. + + Schriftrolle der Teleportation + Der Zauber auf dieser Pergament sofort transportiert den Leser auf einen zufälligen Ort an der Verliesebene. Es kann benutzt werden, um eine gefährliche Situation zu entkommen, aber der unglückliche Leser mag sich in einer noch gefährlicheren Ort finden. + In einem Nu waren sie an eine andere Stelle des Levels teleportiert. + Starke magische Aura dieses Ortes verhindert, dass Sie teleportieren! + + Schriftrolle der Schrecken + Ein Blitz des roten Lichtes werden alle Kreaturen in Ihr Blickfeld mit dem Terror zu überwältigen, und sie werden zu drehen und zu fliehen. Angriff auf einen fliehenden Feind wird den Effekt zu zerstreuen. + Die Schriftrolle gibt einen brillanten Blitz der rotes Licht + Die Schriftrolle gibt eine brillante Flash von rotem Licht und das %s flieht! + Die Schriftrolle gibt einen brillanten Blitz der rotes Licht und die Monster zu fliehen! + + Schriftrolle der Aktualisierung + Diese Schriftrolle wird ein einzelnes Element zu aktualisieren, die Verbesserung ihrer Qualität. Ein Zauberstab wird in Macht und in der Anzahl der Ladungen zu erhöhen; eine Waffe mehr Schaden zuzufügen oder finden ihre Spuren häufiger; eine Rüstung zusätzliche Schläge abzulenken; die Wirkung von einem Ring auf seinem Träger wird zu intensivieren. Waffen und Rüstungen erfordert auch weniger Kraft zu bedienen, und alle Flüche auf das Element wird aufgehoben. + Wähle einen Gegenstand zu aktualisieren + Dein/e %s schaut nun besser aus + + Schriftrolle der Verzauberung + Diese Schriftrolle ist in der Lage, eine Waffe oder eine Rüstung mit einem zufälligen Zauber verleihen, ihre Gewährung eine besondere Kraft. + Wählen Sie ein enchantable Gegenstand + Ihr %s leuchtet im Dunkeln + + Schriftrolle der Auswischen + @string/Scroll_ACRead + Lesen Sie diese Schriftrolle, um den Zorn der Geister Dungeon zu entfesseln, alles zu töten auf dem derzeitigen Niveau. Na ja, fast alles. Einige der mächtigen Kreaturen sind möglicherweise nicht betroffen. + @string/Scroll_Blinded + + + + + %s Zauberstab + ZACK + Diese dünne %s Zauberstab ist warm anfühlen. Wer weiß, was sie tun werden, wenn verwendet? + Wenn dieser Zauberstab als Nahkampfwaffe eingesetzt wird, ist seine Durchschnittsschaden %d Punkte pro Treffer. + Sie können diesen Zauberstab als Nahkampfwaffe benutzen. + Ihren Zauberstab verpufft; es muss von Entgelten für jetzt + Sie können nicht als Ziel selbst + Wählen Sie die Richtung zu zappen + Sie sind jetzt vertraut genug mit Ihren %s. + + Stechpalme + Eibe + Ebenholz + Kirsche + Teak + Eberesche + Weide + Mahagoni + Bambus + Purpleheart + Eiche + Birke + + + Zauberstab des Wut + Die lila Licht von diesem Zauberstab macht das Ziel Wut laufen Angriff zufälligen Wesen in seiner Nähe. + Nichts ist passiert + + Zauberstab der Avalanche + Wenn eine Entladung dieser Zauberstab auf eine Wand trifft (oder jede andere feste Hindernis) verursacht es eine Lawine von Steinen, schädlichen und betäubt alle Kreaturen in dem betroffenen Bereich. + Sie tötete sich mit Ihrer eigenen Zauberstab der Avalanche... + + Zauberstab der Blinzeln + Dieser Stab ermöglicht es Ihnen, in die gewünschte Richtung zu teleportieren. Kreaturen und unbelebten Hindernisse die Teleportation zu blockieren. + + Zauberstab des Zerfalls + Dieser Zauberstab emittiert einen Strahl der destruktiven Energie, die alle Kreaturen in seiner Art durchsticht. Mehr Ziele sie trifft, desto mehr Schaden an jeden von ihnen verursacht. + + Zauberstab der Firebolt + Dieser Zauberstab entfesselt Ausbrüche von magischen Feuer. Es wird brennbaren Gelände entzünden und wird beschädigen und verbrennen eine Kreatur er trifft. + Sie tötete sich mit Ihrer eigenen Zauberstab der Firebolt... + + Zauberstab der Herde + Eine Bewegung aus diesem Zauberstab beschwört eine Herde von Schafen Magie, temporäre undurchdringliches Hindernis. + Schaf + Dies ist eine magische Schafe. Was ist so magisch ist damit? Sie können nicht töten. Es wird dort stehen, bis sie auf magische Weise verschwindet, die ganze Zeit zu kauen wiederkäuen mit einem leeren Blick. + + Baa! + Baa? + Baa. + Baa... + Bee... + Ble... + + + Zauberstab der Blitz + Dieser Stab zaubert vierten tödlichen Bogen von Strom, die Schäden an einigen Kreaturen stehen nahe beieinander umzugehen. + Sie tötete sich mit Ihrer eigenen Zauberstab der Blitz... + + Zauberstab der Magische Rakete + Dieser Zauberstab startet Raketen aus reiner magischer Energie, die sich mäßigen Schaden zu einer Kreatur deiner Wahl. + ENTZAUBERN + Sie tötete sich mit Ihrer eigenen Zauberstab der Magische Rakete... + Wählen Sie einen Zauberstab zu aktualisieren + Sie den Zauberstab der Magische Rakete entzaubert und verwendet seine Essenz, um Ihren %s zu aktualisieren. + + Zauberstab des Giftes + Die abscheulichen Explosion dieser verdrehten Stück Holz sein Ziel mit einem tödlichen Gift zu verleihen. Eine Kreatur, die vergiftet werden regelmäßige Schaden leiden, bis der Effekt endet. Die Dauer der Wirkung steigt mit dem Pegel des Personals. + Nichts ist passiert + + Zauberstab der Nachwachsen + \"Wenn das Leben aufhört neues Leben immer zu wachsen beginnt... Der ewige Kreislauf bleibt immer!\" + Nichts ist passiert + + Zauberstab der Langsamkeit + Dieser Zauberstab wird eine Kreatur zu bewegen und Angriff auf die Hälfte ihrer normalen Geschwindigkeit, bis die Wirkung Enden verursachen + Nichts ist passiert + + Zauberstab der Erreichen + Dieses Dienstprogramm Zauberstab verwendet werden, um Objekte aus der Ferne zu packen und zu Orten mit Feinden zu schalten. Wellen von Zauberkraft strahlte aus ihm werden alle Zellen auf dem Weg Auslösung Fallen beeinträchtigen, trampling hohe Vegetation, Öffnungs verschlossenen Türen und Schließ offene. + Sie magisch transportiert %s in Ihren Rucksack haben + + Zauberstab der Teleportation + Eine Explosion von diesem Zauberstab wird eine Kreatur gegen seinen Willen zu einer zufälligen Stelle auf dem derzeitigen Niveau zu teleportieren. + %1$s teleportiert %2$s irgendwo + Nichts ist passiert + + + + + Sie sind jetzt vertraut genug mit Ihren %1$s, um sie zu identifizieren. Es ist %2$s. + Zusammenspiel verschiedener Arten von Magie hat den Zauber auf dieser Waffe negiert! + %1$s :%2$d + kaputte %1$s :%2$d + + + + + grimmig %s + + flammendes %s + + eldritch %s + + instabile %s + + vampirischen %s + + glück %s + + atemberaubende %s + + giftig %s + + schockierende %s + + kühlen %s + + gehärtetes %s + + + + + %1$s: ist %2$s Stufe-%3$d-Nahkampfwaffe. + ein + eine verbesserte + eine abgebaute + eine kaputte + Sein Durchschnittsschaden beträgt %d Punkte pro Treffer. + Sein typischer Durchschnittsschaden beträgt %1$d Punkte pro Treffer und in der Regel ist es %2$d Punkte von Kraft erfordert. + Wahrscheinlich ist diese Waffe zu schwer für Sie. + Dies ist eine ziemlich %s Waffe. + schnell + langsam + und + aber + genaue + ungenaue + Es war ausgewogen es schneller zu machen. + Es wurde ausgewogen es genauer zu machen. + Es ist verzauber. + Aufgrund Ihrer unzureichenden Festigkeit die Genauigkeit und die Geschwindigkeit der Angriff mit dieser %s verringert wird. + Aufgrund Ihrer überschüssige Kraft der Schaden Eurer Angriffs mit dieser %s erhöht wird. + Sie halten die %1$s im Anschlag%2$s. + , und weil es verflucht ist, kraftlos gehen zu lassen Sie sind. + Du spürst, dass eine bösartige Magie in dieser %s lauert. + + Kampfaxt + Der riesige Stahlkopf dieser Streitaxt sorgt für enorme Kraft hinter jedem Hieb. + + Dolch + Eine einfache Eisendolch mit einem gut getragen Holzgriff. + + Gleve + Ein Stangenwaffe, bestehend aus einer Klinge an dem Ende einer Stange. + + Schlagring + Ein Stück Eisen geformt, um die Knöchel herum passen. + + Langschwert + Diese hoch aufragenden Klinge verursacht schwere Schäden durch die Anlage seiner heft in jedem Schnitt. + + Streitkolben + Der Eisenkopf dieser Waffe verursacht erhebliche Schäden. + + Kampfstab + Ein Stab aus Hartholz, werden ihre Enden mit Eisen beschlagen. + + Kurzschwert + Es ist zwar recht kurz, nur ein paar Zoll länger, als ein Dolch. + SCHMIEDE + Wählen Sie eine Waffe zu aktualisieren + Du hast dein Kurzschwert neu geschmiedet um dein %s zu verbessern + Du kannst einen Boomerang nicht auf diese Art verbessern + + Speer + Eine schlanke Holzstab mit geschärften Eisen gekippt. + + Schwert + Die gestochen scharfen Länge des Stahlklinge glänzt beruhigend. + + Streithammer + Einige Kreaturen können den vernichtenden Schlag dieser überragenden Masse von Blei und Stahl zu widerstehen, aber nur die stärksten Abenteurer kann es effektiv zu nutzen. + + + + + Waffenraketen + Ja, ich weiß, was ich tue + Nein, ich habe es mir anders überlegt + Wollen Sie wirklich, um es als Nahkampfwaffe auszurüsten? + \n\nDurchschnittsschaden der Waffe entspricht bis %d Punkte pro Treffer. + Aufgrund Ihrer unzureichenden Festigkeit die Genauigkeit und die Geschwindigkeit der Angriff mit dieser %s wird verringert. + Aufgrund Ihrer überschüssige Kraft der Schaden Eurer Angriffs mit diesem %s erhöht. + \n\nSie halten den %s im Anschlag. + + Bumerang + Um den Feind diese Wohnung gebogenen Holz Rakete in die Hände seiner Werfer zurückgeworfen. + + Heilung Wurfpfeil + Diese kleinen bösen Wurfpfeil nicht viel Schaden anrichten, aber sie können das Ziel zu lähmen verlassen sie hilflos und unbeweglich für einige Zeit. + + Wurfpfeil + Diese einfachen Metall-Spikes werden gewichtet, um wahr zu fliegen und stechen ihre Beute mit einer Bewegung aus dem Handgelenk. + + Brandstifter Wurfpfeil + Die Spitze auf jedem dieser Wurfpfeil wurde entwickelt, um es zu seinem Ziel verbinden, während das instabile Verbindungen zu seiner Länge angeschnallt in brillante Flammen. + + speerwurf + Diese Länge der Metall gewichtet wird, um den Dorn an seiner Spitze Linie zu halten, wenn es durch die Luft segelt. + + shuriken + Sternförmigen Metallstücke mit gestochen scharfen Klingen zu tun erhebliche Schäden, wenn sie ein Ziel zu treffen. Sie können bei sehr hoher Geschwindigkeit geschleudert werden. + + beil + Diese Wurfaxt ist nicht so schwer, aber es bedarf noch erhebliche Kraft, effektiv genutzt werden. + + + + + Eine Wolke von Verwirrung Gas wird hier wirbeln. + + Ein Feuer wird hier tobt. + + Lichtstrahlen durchdringen die Dunkelheit des unterirdischen Garten. + + Eine Wolke von Gelähmten Gas wird hier wirbeln. + + \"Ihr Opfer ist würdig...\" + \"Ihr Opfer ist unwürdig...\" + \"Ihr Opfer ist würdig und so sind Sie!\" + Opferfeuer brennt hier. Jedes Geschöpf dieses Feuer berührt wird als Opfer für die Geister des Dungeons markiert. + Opfer markiert + + Eine grünliche Wolke von Giftgas wird hier wirbeln. + Du bist durch giftige Gase gestorben... + + Wie Sie einen Schluck zu nehmen, fühlt man sich das Wissen fließt in deinem Geist. Jetzt wissen Sie alles über Ihre ausgestatteten Gegenstände. Außerdem finden Sie alle Gegenstände auf der Ebene spüren und wissen, alle seine Geheimnisse. + Macht des Wissens strahlt aus dem Wasser dieses Brunnens. Nehmen Sie einen Schluck daraus, um alle Geheimnisse der ausgerüstete Gegenstände offenbaren. + + Macht der Gesundheit strahlt aus dem Wasser dieses Brunnens. Nehmen Sie einen Schluck daraus, um Ihre Wunden zu heilen und den Hunger stillt. + Als du einen Schluck nimmst, spürst du dass deine Wunden vollständig heilen. + + Kraft der Veränderung strahlt aus dem Wasser dieses Brunnens. Werfen einen Gegenstand in den Brunnen, um es in etwas anderes zu verwandeln. + + Alles ist mit einer dicken Bahn hier abgedeckt. + + + + + Wut + + Krusty Haut + + Blutend + Sie verblutete... + + Geblendet + + Brennende + %s verbrennt! + Sie verbrannt zu Tode... + + Fasziniert + + Combo + %d hit combo! + + Gelähmt + + Eingefroren + + Furie + + Immun gegen Gase + + Du bist hungrig. + Sie hungern! + Sie verhungerten... + Hungrig + Verhungern + + Unsichtbar + + Schweben + + Beleuchtete + + Gedankensicht + + Säure + %s tötete dich... + + Paralysiert + + Vergiftet + Sie starb an Gift... + + Wut geblendet + + Verwurzelt + + Mit Schatten geschmolzen + + Verlangsamt + + In Genullt + + Schwindel + + Geschwächt + + + + + Rucksack + + + + + Richtige Beschreibung folgt! + Du hörst wie etwas in der Ferne stirbt + echo of\u0020 + %1$s: \"%2$s\" + Dieser %s schläft + Dieser %s läuft herum + Dieser %s jagd + Dieser %s flüchtet + Dieser %s wartet ab + + Giftiger Skorpion + + Albino Rattenjäger + + Verrückter Bandit + + Fledermaus Blutsauger + Diese flinken und zähen Fledermäuse können sogar deutlich größere Gegner besiegen, in dem sie mit jedem erfolgreichen Angriff ihre Gesundheit wieder herstellen. + ausgewichen + + Gnollschläger + Schläger sind die größten, stärksten und zähesten unter den Gnollen. Wenn sie ernsthaft verletzt sind fallen sie in einen Berserkerzustand und fügen ihren Feinden sogar noch mehr Schaden zu. + Der %s bekommt einen Wutanfall! + tobend + + Kanalkrebs + Diese riesigen Krebse stehen in den Abwasserkanälen an der Spitze der Nahrungskette. Sie sind extrem schnell und ihr dicker Panzer kann selbst schwere Schläge aushalten. + parriert + + Fluch Personifikation + Diese Kreatur erinnert an die traurige Gespenst, aber mit der Finsternis wirbelt. Sein Gesicht trägt einen Ausdruck der Verzweiflung. + + DM-300 + DM-350 + Diese Maschine wurde vor Jahrhunderten von den Zwergen erschaffen. Die Zwerge begannen damit, ihre Maschinen durch Golems, Elementare und sogar Dämonen zu ersetzen. Dies führte möglicherweise zum Niedergang ihrer Zivilisation. Der DM-300 und andere Maschinen wurden üblicherweise für Bau- und Minenarbeiten genutzt, manchmal auch zur Stadtverteidigung. + Der DM-300 repariert sich selbst! + Mission gescheitert. Herunterfahren eingeleitet. + Unbefugten erkannt. + + Feuerwandler + Umherziehende Feuer Elementare sind ein Nebenprodukt von mächtigeren Beschwörungen. Ihre chaotische Natur macht es selbst für die mächtigsten Dämonologen zu schwierig, sie zu kontrollieren. + + Dunkler Starrer + Ein anderer Name dieses Dämons ist \"Kugel des Hasses\". Wenn er einen Feind erblickt, benutzt er seinen Todesblick ohne Rücksicht auf Verbündete in der Nähe und verwundet diese dabei oft. + Der Todesblick des %s hat dich getötet... + + stinkende Ratte + Diese stinkende Ratte ist viel größer, als eine reguläre. Es wird durch ein Foulspiel Wolke umgeben. + ausgewichen + + Gnollspäher + Gnolle sind menschliche Wesen, die Hyänen ähneln. Sie leben in Abwässerkanälen und Höhlen, von wo sie von Zeit zu Zeit zu Raubzügen an die Oberfläche ziehen. Gnoll Späher sind anerkannte Mitglieder ihres Rudels, aber nicht so stark wie Schläger und nicht so intelligent wie Schamanen. + + Golem + Die Zwerge versuchten, ihr technisches Wissen mit ihrer neu gewonnen Kraft der elementaren Beschwörung zu kombinieren. Sie nutzen Erdelementare, um ihre mechanischen Golemkörper zu \"beseelen\" welche als besonders einfach zu kontrollieren galten. Allerdings konnte schon der kleinste Fehler im Bindungsritual eine Katastrophe herbeiführen. + abgeblockt + + Goo + spawn of Goo + Wenig über die Goo bekannt. Es ist durchaus möglich, dass es noch nicht einmal ein Wesen, sondern ein Konglomerat von Substanzen aus der Kanalisation, die Rudimente des freien Willens erlangt. + Glibber lädt sich auf! + glurp... glurp... + GLURP-GLURP! + !!! + + Zwergenkönig + untoter Zwergenkönig + Der letzte König der Zwerge wurde für sein tiefes Verständnis der Prozesse von Leben und Tod bekannt. Er hat Mitglieder seines Hofes überredet, in einem Ritual teilzunehmen, das ihnen das ewige Jugendlichkeit erhalten haben sollten. Am Ende war er der einzige, der es hat - und eine Armee von Untoten als Bonus. + parriert + Ihr könnt mich nicht töten, %s... ich bin... unsterblich... + Erhebt euch, Sklaven! + Wie könnt Ihr es wagen! + untoter Zwerg + Diese untoten Zwerge, erschaffen durch den Willen des Zwergenkönigs, waren einst Mitglieder seines Rates. Sie sehen aus wie Skelette mit einer beeindruckender Gesichtsbehaarung. + abgeblockt + + Nachmacher + Nachmacher sind magische Kreaturen, die jede Form sie wollen erfolgen. In Dungeons sie wählen fast immer die Form einer Schatztruhe, weil sie wissen, wie man einen Abenteurer winken. + + Zwergenmönch + Diese Mönche sind Fanatiker, die sich dem Schutz der Geheimnisse ihrer Stadt vor allen Fremden verschrieben haben. Sie benutzen keine Rüstung oder Waffen und verlassen sich ausschließlich auf die Kunst des unbewaffneten Kampfes. + parriert + Der %1$s hat deinen %2$s aus deinen Händen geschmettert! + + Riesiger Piranha + Diese fleischfressenden Fische sind keine natürlichen Bewohner der Untergrundbecken. Sie wurden extra dafür gezüchtet, überschwemmte Schatzkisten zu bewachen. + + Rattenspäher + Beutelratten sind aggressive, aber eher schwache Bewohner der Abwasserkanäle. Sie werden nur in großer Zahl gefährlich. + + Skorpion + Diese riesigen spinnenartigen dämonischen Wesen vermeiden Nahkampf mit allen Mitteln. Sie verschießen aus großer Entfernung gezackte Dornen, die ihre Opfer lähmen. + + Älterer Mönch + + Gnoll Schamane + Die intelligentesten Gnolle können schamanische Magie meistern. Gnoll Schamanen bevorzugen Kampfzauber um ihre fehlende Stärke auszugleichen. Sie zögern nicht, sie auf jeden anzuwenden der ihre Stellung im Stamm anzweifelt. + Der Blitzschlag des %s hat dich getötet... + + Schildschläger + abgeblockt + + Skelett + Skelette bestehen aus Knochen unglücklicher Abenteurer und Bewohner des Verlieses, sie werden von Ausstrahlungen dunkler Magie von tieferen Ebenen angetrieben. Wenn sie stark genug geschädigt wurden, lösen sie sich in einer Knochenexplosion auf. + abgeblockt + Du wurdest durch die Explosion von Knochen getötet... + + Höhlenspinne + Diese grünliche ängstliche Höhlenspinne versucht es, direkten Kampf zu vermeiden, bevorzugt es in einiger Entfernung zu warten während ihre Opfer, eingewickelt in ihre klebrige Spinnennetz, langsam an ihrem giftigen Biss sterben. + + beseelte Statue + Sie würden denken, dass es nur eine andere hässliche Statue dieses Verlies, aber seine rot glühenden Augen geben sich weg. Während die Statue selbst aus Stein ist, der _%s_, es schwingt, sieht echt. + + Sukkubus + Die succubi sind Dämonen, wie verführerisch aussehen (in einer etwas gotische Weg) Mädchen. Mit Hilfe seiner Magie, die Sukkubus Dose Charme ein Held, der sich nicht in der Lage, etwas angreifen, bis der Zauber nachlässt. + + Fliegenschwarm + Der tödliche Schwarm von Fliegen brummt wütend. Jedes nicht-magischen Angriff wird sie in zwei kleinere, aber ebenso gefährlich Schwärmen aufgeteilt. + ausgewichen + + Tengu + erinnerung an Tengu + Tengu sind Mitglieder der alten Assassinen-Clans, die auch als Tengu. Diese Attentäter sind umfangreiche Verwendung von Shuriken und Fallen zur Kenntnis genommen. + Endlich frei... + Hab dich, %s! + + Verrückter Dieb + + %1$s hat %2$s von dir gestohlen! + \n\n%1$s trägt ein _%2$s_. Offensichtlich gestohlen. + + Zwergenhexenmeister + + %s\'s Schattenblitz hat dich getötet... + + Geist + + ausgewichen + + Yog-Dzewa + echo of Yog-Dzewa + Yog-Dzewa ist eine alte Gott, ein leistungsfähiges Unternehmen aus dem Reich des Chaos. Vor einem Jahrhundert, die alten Zwerge kaum gewonnen, den Krieg gegen die Armee von Dämonen, konnten aber den Gott selbst zu töten. Stattdessen werden sie dann in den Hallen unter ihrer Stadt eingesperrt, zu glauben, es zu schwach, um jemals wieder steigen werden. + ... + Hoffentlich ist es eine Illusion... + faulige Faust + brennende Faust + göttliche Larve + + + + + Goldene Biene + + Dieser %s läuft herum + + Trollschmied + Dieser Trollschmied sieht so aus wie alle Trolle auch: Er ist groß und dürr, und seine Haut gleicht Stein, in Beidem: Farbe und Beschaffenheit. Der Trollschmied arbeitet mit unproportional kleinen Werkzeugen. + Hey Mensch! Willst du dich nützlich machen? Nimm diese Spitzhacke und baue etwas _dunkles Golderz_ für mich ab, _15 Stück_ sollten genügen. Was willst du? Wie ich dich bezahle? Du gieriger...\nOkay, okay, ich habe kein Geld um dich zu bezahlen, aber ich kann etwas für dich schmieden. Du kannst dich glücklich schätzen, ich bin der einzige Schmied in der Gegend. + Hey Mensch! Willst du dich nützlich machen? Nimm diese Spitzhacke und _töte eine Fledermaus_ damit, ich brauche ihr Blut an der Spitze. Was willst du? Wie ich dich bezahle? Du gieriger...\nOkay, okay, ich habe kein Geld um dich zu bezahlen, aber ich kann etwas für dich schmieden. Du kannst dich glücklich schätzen, ich bin der einzige Schmied in der Gegend. + Willst du mich verarschen? Wo ist meine Spitzhacke?! + Dunkles Golderz. 15 Stück. Ernsthaft, ist das so schwer? + Ich sagte ich brauche Fledermausblut auf der Spitzhacke. Hopp, hopp! + Oh, du bist zurückgekommen... Besser spät als nie. + Ich bin beschäftigt. Verschwinde! + Dein/e %s schaut nun besser aus + Wähle 2 verschiedene Gegenstände aus, nicht zwei mal den Selben! + Wähle 2 Gegenstände des selben Art aus! + Ich muss wissen, womit ich arbeite. Identifiziere sie erst! + Ich arbeite nicht mit verfluchten Gegenständen! + Das ist ein Scherz, die Qualität ist zu schlecht! + Ich kann diese Gegenstände nicht wiederverwerten! + + trauriger Geist + Der Geist ist kaum sichtbar. Er sieht wie ein formloses schwaches Licht mit einem traurigen Gesicht aus. + ausgewichen + Hallo Abenteurer... Einst war ich wie du - stark und selbstbewusst... Und nun bin ich tot... Aber ich kann diesen Platz nicht verlassen... nicht bevor ich meine _getrocknete Rose_ wieder habe... Es ist sehr wichtig für mich... Einige Monster haben sie von meinem Körper gestohlen... + Bitte... Hilf mir... _Finde die Rose_... + Ja! Ja!!! Das ist es! Bitte geben Sie es mir! Und Sie können nehmen Sie eines dieser Elemente, vielleicht werden sie nützlich, um Ihnen bei Ihrer Reise sein... + Hallo Abenteurer... Einst war ich wie du - stark und selbstbewusst... Und nun bin ich tot... Aber ich kann diesen Platz nicht verlassen... Nicht bevor ich mich gerächt habe... Erlege die _stinkende Ratte_, die mir das Leben genommen hat... + Bitte... Hilf mir... _Erschlage die Abschäulichkeit_... + Ja! Die hässliche Kreatur ist getötet und ich kann endlich Ruhe finden... Bitte nehmen Sie sich einen dieser Gegenstände, vielleicht werden sie dir auf deiner Reise nützlich sein... + Hallo Abenteurer... Einst war ich wie du - stark und selbstbewusst... Und nun bin ich tot... Aber ich kann diesen Platz nicht verlassen, da ich von einem schrecklichen Fluch gebunden... Bitte... Hilf mir... _Zerstören Sie den Fluch_... + Danke, %s! Der Fluch ist gebrochen und ich kann endlich Ruhe... Bitte nehmen Sie sich einen dieser Gegenstände, vielleicht werden sie dir auf deiner Reise nützlich sein... + Ja, ich werde es für Sie tun + Nein, ich kann dir nicht helfen + + Ehrgeiziger Wichtel + Kobolde sind niedere Dämonen. Sie zeichnen sich weder durch ihre Kraft noch durch ihre Magiefähigkeiten aus, aber sie sind sehr intelligent und gesellig. Viele Kobolde leben lieber unter den nicht-Dämonen. + ausgewichen + Bist du ein Abenteuer? ich liebe Abenteuer! Du kannst dich immer auf sie verlassen wenn etwas getötet werden soll. Habe ich recht? Für eine Belohnung natürlich ;)\nIn meinen Fall sind es _Golems_ welche getötet werden sollen. Schau, ich will hier ein kleines Geschäft aufbauen, aber dieser dummen Golems sind schlecht fürs Geschäft! Es ist sehr schwer mit wandelnden Granithaufen zu verhandeln, verflucht sollen sie sein! Also bitte töte... sagen wir mal _6 von ihnen_ und eine Belohnung ist dein. + Wie ist Ihr Golem-Safari gehen? + Bist du ein Abenteuer? ich liebe Abenteuer! Du kannst dich immer auf sie verlassen wenn etwas getötet werden soll. Habe ich recht? Für eine Belohnung natürlich ;)\nIn meinen Fall sind es _Mönche_ welche getötet werden sollen. Schau, ich will hier ein kleines Geschäft aufbauen, aber diese Irren kaufen nichts sich selbst und wird anderen Kunden verscheuchen. Also bitte töte... sagen wir mal _8 von ihnen_ und eine Belohnung ist dein. + Oh, bist du noch am Leben! Ich wusste, dass Sie Ihre Kung-Fu ist stärker ;) Vergessen Sie aber nicht, diese Mönche Token greifen. + Wir sehen uns, %s! + Psst, %s! + + Ehrgeiziger Wichtel + Kobolde sind niedere Dämonen. Sie zeichnen sich weder durch ihre Kraft noch durch ihre Magiefähigkeiten aus, aber sie sind sehr intelligent und gesellig. Viele Kobolde leben und arbeiten lieber unter den nicht-Dämonen. + Hallo, Freund! + + Spiegelbild + Diese Illusion trägt eine starke Ähnlichkeit zu Ihnen, aber es ist blasser und zuckt ein wenig. + + Rattenkönig + Diese Ratte ist ein wenig größer als ein normales Rattenspäher und es trägt einen winzigen Krone auf den Kopf. + Ich schlafe nicht! + Was ist es? Ich habe keine Zeit für diesen Unsinn. Mein Reich ist nicht auszuschließen selbst! + + kaufmann + Diese dicken Kerl sieht mehr nach einem Handelsviertel in irgendeiner Großstadt als für einen Dungeon angemessen. Seine Preise erklären, warum er lieber hier Geschäfte zu machen. + Wählen Sie ein Element, um zu verkaufen + + alter Zauberstabmacher + Dieses alte, aber hale Gentleman trägt einen leicht verwirrten Ausdruck. Er wird von einem magischen Schild geschützt. + absorbiert + Oh, was für eine angenehme Überraschung einen anständigen Menschen in einem solchen Ort zu treffen! Ich kam hierher für eine seltene Zutat - ein _Samen der Rottbeere_. Als Magier bin ich durchaus in der Lage mich gegen Monster in der Nähe zu verteidigen, aber ich würde mich in kürzester Zeit verlaufen. Das ist sehr peinlich. Vielleicht können Sie mir helfen? Ich würde mich freuen Ihnen dafür einen meiner besten Zauberstäbe zu geben. + Schon Glück gehabt mit den _Samen der Rottbeere_, %s? Nein? Mach dir keine Sorgen, ich bin nicht in Eile. + + Schon Glück mit _corpse dust_ gehabt, %s? Knochenhaufen sind die besten Orte um danach zu suchen. + + Schon Glück mit einem _phantom fish_ gehabt, %s? Du kannst dich auf die Suche machen in einem der Pools in der Nähe. + + + + + Eine verborgene Druckplatte knackt. + Abgrund + Boden + Gras + Wasser + Mauer + Geschlossene Tür + Geöffnete Tür + Eingang in die Tiefe + Ausgang aus der Tiefe + Glühende Kohlen + Verschlossene Tür + Podest + Barrikade + Hohes Gras + Verschlossener Ausgang aus der Tiefe + Geöffneter Ausgang aus der Tiefe + Wegweiser + Brunnen + Leerer Brunnen + Statue + Falle mit giftigem Gas + Feuerfalle + Falle mit lähmendem Gas + Giftpfeil Falle + Alarmfalle + Blitzfalle + Lähmende Falle + Falle der Beschwörung + Ausgelöste Falle + Buchregal + Alchemiekessel + \?\?\? + Du kannst den Boden nicht erkennen. + Wenn du Feuer gefangen hast, stelle dich in Wasser um das Feuer zu löschen. + Treffen führen nach oben in eine höhere Ebene. + Treppen führen nach unten in eine tiefere Ebene. + Glühende Kohlen bedecken den Boden. + Dichter Pflanzenbewuchs versperrt die Sicht. + Die Tür ist versperrt, du brauchst einen passenden Schlüssel um sie zu öffnen. + Schwere Balken blockieren die Treppen nach unten. + Die hölzerne Barrikade ist massiv gebaut, aber ist über die Jahre hinweg ausgetrocknet. Würde sie brennen? + Du kannst die Schrift von hier aus nicht lesen. + Wenn du auf eine verborgene Druckplatte trittst löst dies die Falle aus. + Die Falle wurde bereits früher ausgelöst und ist nicht mehr gefährlich. + Jemand wollte diesen Ort dekorieren, ist daran aber offensichtlich gescheitert. + Wirf einige Samen hinein um einen Zaubertrank zu brauen. + Der Brunnen ist ausgetrocknet. + + Leuchtendes Moos + Leuchtende Pilze + Gefrierendes kaltes Wasser + Die Leiter führt nach oben in eine höhere Ebene. + Die Leiter führt nach unten in eine tiefere Ebene. + Riesige Pilze versperren die Sicht. + Eine Erzader ist in der Wand sichtbar. Gold? + Wer braucht denn ein Buchregal in einer Höhle? + + Merkwürdig gefärbtes Wasser + Große blühende Blumen + Eine Rampe führt in eine höhere Ebene. + Eine Rampe führt in eine tiefere Ebene. + Mehrere Bodenplatten fehlen hier. + Ein dicker Teppich bedeckt den Bode. + Die Statue zeigt seinen Zwergen in einer heroischen Pose. + Mehrere Reihen Bücher aus den verschiedenen Fachrichtungen füllen das Bücherregal. + + Erkaltete Lava + Aschemoos + Aschepilz + Kissen + Es schaut nach Lava aus, aber sie ist kalt und wahrscheinlich kann man sie gefahrlos berühren. + Dieses Kissen ist aus echter Menschenhaut gemacht. Beeindruckend. + Bücher in verschiedenen Sprachen vermodern im Bücherregal. + + @string/Halls_TileWater + @string/Halls_TileGrass + @string/Halls_TileHighGrass + @string/Halls_TileStatue + @string/Halls_TileDescWater + @string/Halls_TileDescStatue + + @string/City_TileWater + @string/City_TileHighGrass + @string/City_TileDescEntrance + @string/City_TileDescExit + @string/City_TileDescDeco + @string/City_TileDescEmptySP + + Dunkles kaltes Wasser. + Da sind alte Blutflecken auf dem Boden. + Dies ist möglicherweise das Überbleibsel einer Gefängnisbibliothek. Ob sie brennbar ist? + + Schlammiges Wasser + Nasses gelbes Moos bedeckt den Boden. + Das Buchregal ist vollgestellt mit billigen nutzlosen Büchern. Ob sie brennen? + + + + + Wähle einen Samen aus um ihn zu werfen. + + Abgrund + Ja, ich weiß, was ich tue + Nein, ich habe es mir anders überlegt + Willst du wirklich in den Abgrund springen? Du stirbst möglicherweise. + Du stürzt in den Tod. + + Was machst du hier?! + Wie Sie versuchen, die Zeichen sie in grünlichen Flammen aufgeht lesen. + + Haben Sie Ihre Stärke zu überschätzen nicht, verwenden Sie Waffen und Rüstung Sie verkraften können. + Nicht alle Türen in den Kerker, sind auf den ersten Blick sichtbar. Wenn Sie nicht weiterkommen, suchen Sie nach versteckten Türen. + Denken Sie daran, dass die Anhebung Ihre Stärke ist nicht der einzige Weg, um eine bessere Ausrüstung zugreifen. Sie können in die andere Richtung zu gehen, Senkung der Festigkeitsanforderung mit der Schriftrolle der Aktualisierung. + Sie können Ihre Gold in Geschäften auf tieferen Ebenen des Dungeons zu verbringen. Die erste ist in der 6. Etage. + Passen sie von Goo! + Geschäft Pixel. Alles, was Sie für ein erfolgreiches Abenteuer brauchen! + Identifizieren Sie Ihre Tränke und Schriftrollen so bald wie möglich. Setzen Sie es nicht aus, um den Moment, als Sie tatsächlich benötigen. + Hunger tut nicht weh, aber verhungern tut weh. + Überraschungsangriff hat eine bessere Chance zu treffen. Zum Beispiel können Sie Ihre Feinde hinter einer geschlossenen Tür überfallen, wenn Sie wissen, dass es sich nähert. + Lassen Sie sich nicht die Tengu aus! + Geschäft Pixel. Geld ausgeben. Lebe länger. + Wenn Sie durch mehrere Monster gleichzeitig angegriffen werden, versuchen, hinter einer Tür zurückzuziehen. + Wenn Sie brennen, Sie können nicht das Feuer im Wasser, während schweben. + Es hat keinen Sinn, die über mehr als ein Ankh zur gleichen Zeit, weil Sie sie auf Wiederbelebung zu verlieren. + ACHTUNG! Schwere Maschinen können zu Verletzungen, Verlust von Gliedmaßen oder zum Tod führen! + Geschäft Pixel. Ein sichereres Leben im Kerker. + Wenn Sie eine verzauberte Waffe zu aktualisieren, gibt es eine Chance, dass Zauber zerstören. + Waffen und Rüstungen verschlechtern schneller als Zauberstäbe und Ringe, aber es gibt mehr Möglichkeiten, um sie zu beheben. + Die einzige Möglichkeit, einen Schriftrolle der Auswischen zu erhalten, ist es als ein Geschenk aus dem Kerker Geister zu erhalten. + Keine Waffen in Anwesenheit von Seiner Majestät erlaubt! + Geschäft Pixel. Sonderpreise für Dämonenjäger! + + + + + + Die Falle gibt einen lauten durchdringenden Ton ab, der durch die Gemäuer hallt. + + Blitzfalle + Du wurdest durch die Entladung einer Blitzfalle getötet... + + + + + Du weist nicht was dort ist. + Wählen Sie eine Zelle zu prüfen. + + + + + + + 0 + \ No newline at end of file diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml new file mode 100644 index 0000000000..1e91f3faae --- /dev/null +++ b/res/values-es/strings.xml @@ -0,0 +1,1657 @@ + + + + Pixel Dungeon + + + + + Jugar + Puntuaciones + Insignias + Acerca + + Código & Gráficos: Watabou\nMúsica: Cube_Code\n\nEste juego está inspirado en Brian Walker\'s Brogue. Pruébalo en Windows, Mac OS or Linux - Es genial! ;)\n\nPara más información visita la web oficial: + pixeldungeon.watabou.ru + Traducción: rodriformiga & TavoCello + rodriformiga@gmail.com + E-Mail + + Mejores puntuaciones + Total juegos ganados/jugados:\u0020 + Ningún juego se ha jugado todavía. + No hay información adicional + + Tus insignias + + Cargar juego + Nuevo juego + Borrar partida actual + Profund.: %1$d, level: %2$d + Realmente quieres borrar la partida actual? + Tu progreso será eliminado. + Si, empezar de nuevo + No, volver al menú + Para desbloquear esta clase, debes matar al tercer jefe con otra clase + Para desbloquear \"Desafíos\", termina el juego con una clase. + + Descendiendo... + Ascendiendo... + Cargando... + Resucitando... + Volviendo... + Cayendo... + Archivo no encontrado. Ni idea de por qué... + Algo ha ido mal... + + Muchos héroes de todo tipo han entrado en la Pixel Dungeon antes que tu. Algunos han vuelto con riquezas, la mayoría de ellos no se les ha vuelto a ver. Pero ninguno ha conseguido traer el Amuleto de Yendor, el cual está escondido en la decadencia de la mazmorra.\n\nTe consideras listo para este reto, pero más aún sientes que la suerte está de tu parte. Es hora de empezar tu propia aventura! + + Estuvo bien mientras duró + Aun no he terminado con esto + Por fin lo tienes en las manos, el amuleto de Yendor. Usando su poder puedes gobernar el mundo o traer paz a la gente o lo que sea. De cualquier manera, tu vida cambiará para siempre y ésta partida acabará aquí. O puedes quedarte aquí como un simple mortal algo más. + + Bienvenido al nivel %d de Pixel Dungeon! + Bienvenido de vuelta al nivel %d de Pixel Dungeon! + Ten cuidado, ya que la mazmorra es más peligrosa por la noche! + Tus pasos producen eco a través de la mazmorra. + Escuchas agua goteando alrededor tuya. + La presencia de vegetación se siente en el aire. + La atmósfera da indicios de que este nivel esconde muchos secretos. + + + + mob + %1$s ha golpeado %2$s + %s te ha matado... + %1$s ha derrotado %2$s + %1$s %2$s tu ataque + %1$s %2$s el ataque de %3$s + El golpe de %s causó parálisis + esquivado + envenenado + juerga + desacelerado + mente + visión + paralizado + asustado + arraigado + lisiado + sangría + mareado + invisible + + tu + Uno no sale de Pixel Dungeon tan fácilmente. + subiste de nivel! + Ahora eres nivel %d! Tienes más vitalidad y estás mas centrado. Ahora atacarás con más fuerza y evitarás con más frecuencia. + Ahora tienes %s + Hay algo más ahí + Este cofre está cerrado y no tienes una llave que encaje + No tienes una llave que encaje + Has visto algo + ... + buscar + Estás ardiendo! + Estás paralizado! + Estás envenenado! + El lodo tóxico esta deshaciendo tu piel. Límpialo! + No te puedes mover! + Te sientes debilitado! + Has sido cegado! + Estás furioso! + furioso + Estás enamorado! + Te sientes incapacitado! + Estás sangrando! + Todo da vueltas alrededor tuya! + + guerrero + mago + bellaco + cazadora + + Los guerreros empiezan con 11 puntos de fuerza. + Los guerreros cuentan con una espada corta. Esta espada puede ser \"reforjada\" para ser transformada en otro arma. + Los guerreros son menos eficientes con proyectiles. + Cualquier consumición de comida le dará un poco de vida. + Las pociones de fuerza pueden ser identificados desde el principio. + + + Los magos empiezan con una varita de Misil Mágico. Ésta varita puede ser \"reencantada\" para convertirla en otra. + Los mago recargan sus varitas más rápido. + Al comer, añade una carga a todas la varitas que posee en su inventario. + Los magos pueden usar las varitas como arma cuerpo a cuerpo. + Los pergaminos de Identificación pueden se identificados desde el principio. + + + Los bellacos empiezan con una anillo de las Sombras +1. + Los bellacos pueden identificar un anillo al ponérselo. + Los bellacos son más eficientes con armaduras ligeras, aumentando la posibilidad de esquivar. + Los bellacos son más eficientes detectando puertas ocultas y trampas. + Los bellacos aguantan sin comer más tiempo. + Los pergaminos de Cartografía se identifican desde el principio. + + + Las cazadoras empiezan con 15 puntos de vida. + Las cazadoras empiezan con un búmerang reforjable único. + Las cazadoras son más eficientes con proyectiles y hacen daño extra si tienen exceso de fuerza al usar un ítem. + Las cazadoras ganan más vida de las gotas de rocío. + Las cazadoras perciben monstruos cercanos aunque estén escondidos tras paredes o obstáculos. + + + gladiador + Un ataque exitoso con un arma cuerpo a cuerpo permite al _Gladiador_ comience en combo, en el cual cada golpe exitoso inflinge más daño. + furioso + Cuando está muy dañado, el _Furioso_ entra en un estado de furia salvaje, incrementando significantemente su daño. + bruto + Después de matar un enemigo el _Bruto_ consume su alma. Ésta cura sus heridas y satisface su hambre. + bimago + Cuando se lucha con una varita en las manos, el _BiMago_ inflinge daño adicional dependiendo del número actual de cargas. Cada ataque exitoso añade una carga a su varita. + asesino + Cuando inflinge una ataque sorpresa, el _Asesino_ añade daño adicional al enemigo. + corredor + El _Corredor_ se mueve casi el doble de rápidoque muchos de los monstruos. Cuando está corriendo es mucho más difícil de acertar. Para ello no debe tener un enemigo al lado ni tener mucha hambre. + sniper + Los _Snipers_ pueden detectar puntos débiles en la armadura de un enemigo, ignorándola al usar un proyectil. + guardian + Teniendo una conexión con las fuerzas de la naturaleza, el _Guardian_ posee la habilidad de coger gotas de rocío y semillas de las plantas. También pisar la hierba le da un bufo de armadura. + + + + Insignia conseguida: %s + Nueva súper insignia: %s + Nueva insignia: %s + 10 enemigos asesinados + 50 enemigos asesinados + 150 enemigos asesinados + 250 enemigos asesinados + 100 monedas de oro robadas + 500 monedas de oro robadas + 2500 monedas de oro robadas + 7500 monedas de oro robadas + Alcanzado el nivel 6 + Alcanzado el nivel 12 + Alcanzado el nivel 18 + Alcanzado el nivel 24 + Todos las pociones identificados + Todos los pergaminos identificados + Todos los anillos identificados" + Todos las varitas identificados" + Todas las Pociones, Pergaminos, Anillos & Varitas identificadas + + + + Todas las bolsas compradas + Muerte quemado + Muerte por veneno + Muerte por gas tóxico + Muerto de hambre + Muerto por encantamiento + Muerte por caída + Muerte por Fuego, Veneno, Gas Tóxico & Hambre + + + + + Primer jefe derrotado + Segundo jefe derrotado + Tercer jefe derrotado + Cuarto jefe derrotado + Primer jefe derrotado por el Guerrero, Mago, Bellaco & Cazadora + + + + + + + + + Tercer jefe derrotado por el Gladiador, Furioso, Bruto, BiMago, Corredor, Asesino, Sniper & Guardian + Anillo de Negociación obtenido + Anillo de Espinas obtenido + 13 puntos de Fuerza adquiridos + 15 puntos de Fuerza adquiridos + 17 puntos de Fuerza adquiridos + 19 puntos de Fuerza adquiridos + 10 trozos de comida consumidos + 20 trozos de comida consumidos + 30 trozos de comida consumidos + 40 trozos de comida consumidos + + + + + Ítem de nivel 3 adquirido + Ítem de nivel 6 adquirido + Ítem de nivel 9 adquirido + Ítem de nivel 12 adquirido + + + + + + Todos los monstruos raros mutilados + + + + + Amuleto de Yendor obtenido + Amuleto de Yendor obtenido por Guerrero, Mago, Bellaco & Cazadora + 7-hit combo + 3 pociones cocinadas + 6 pociones cocinadas + 9 pociones cocinadas + 12 pociones cocinadas + Nivel completado sin matar ningún monstruo + Monstruo matado con un arma Grim + Matadas 6 pirañas + 5 Monstruos matados por la noche + Jugadas 10 partidas + Jugadas 100 partidas + Jugadas 500 partidas, tienes un problema grave + Jugadas 2000 partidas, estás enfermo + Final feliz + Desafío completado! + Gracias por tu ayuda! + + + + + En dieta + La fe es mi armadura + El miedo a las agujas + Tierra estéril + Inteligencia colectiva + Oscuridad + Runas prohibido + + + + + Pozo de Vitalidad + Pozo de la Conciencia + Pozo de Transmutación + Cámara de Sacrificio + Olla de Alquimia + Jardín + Estatua animada + Fantasma melancólico + Viejo artesano + Troll Herrero + Diablillo Ambicioso + + + + Asesinado por %1$s en el nivel %2$d + Asesinado por %1$s en el nivel %2$d + Asesinado por tu propio %1$s en el nivel %2$d + Asesinado por %1$s en el nivel %2$d + Asesinado por una explosión de una bomba en el nivel %d + Asesinado por descarga de %1$s en el nivel %2$d + Quemado en el nivel %d + Muerto de hambre en el nivel %d + Muerto envenenado en el nivel %d + Muerto por gas tóxico en el nivel %d + Rajado en el nivel %d + Asesinado por el lodo cáustico en el nivel %d + Muerte por caída en el nivel %d + Obtenido el Amuleto de Yendor + + + + + OK, un trato es un trato, esto es lo que puedo hacer por ti: Puedo forjar 2 ítems, sacando uno de mejor calidad. + Selecciona un ítem que reforjar + Refórjalos + + Pociones + Pergaminos + Catalogus + + Retos + + Qué camino seguiré? + Lo decidiré más tarde + ¿Quieres respec %s? + Sí, quiero respec + Tal vez después + + Amaestrear + + ERROR + + Opciones + Retos + Puntuaciones + Empezar un nuevo juego + Menú principal + Salir del juego + Volver al juego + + Estadíst. + Bufos + Experiencia + Fuerza + Vitalidad + Oro robado + Profundidad máxima + Nivel %1$d %2$s + Catalogus + Diario + + Oh sí! Eres mi héroe!\nSobre lo de tu recompensa, No tengo dinero para darte, pero tengo algo mejor. Éste es mi anillo familiar: mi abuelo lo cogió del dedo de un paladín muerto. + Coge el anillo + + No hay nada ahí. + + Cofre + Cofre cerrado + Cofre de cristal + Tumba + Huesos sueltos + No sabrás lo que hay dentro hasta que lo abras! + Pero para abrirlo necesitarás una llave dorada. + Puedes ver %s dentro, pero para abrirlo necesitarás una llave dorada. + Esta tumba antigua puede contener algo, pero sea de quien sea no le va a gustar que le robes. + Esto es todo lo que queda de uno de tus predecesores. A lo mejor vale la pena mirar qué es. + + Diario + + Idiomas + + Imposible cargar información adicional + Estadíst. + Ítems + Insignias + Nivel %1$d %2$s + Retos + Vitalidad + Fuerza + Duración del juego + Profundidad máxima + Monstruos eliminados + Oro robado + Raciones consumidas + Pociones cocinadas + Ankhs Usados + + Has muerto, pero se te ha dado otra oportunidad de ganar ésta mazmorra. Aceptarás? + Sí, lucharé! + No, me rindo + + Arma del fantasma + Armadura del fantasma + Adiós, aventurero! + + + + - + Zoom Default + Menús más grandes + Modo inmersivo + Idioma + Música + Sonidos + Modo Brillo + Segundo QuickSlot + Sin inclinación + Modo tumbado + + La mazmorra se encuentra justo debajo de la ciudad, sus niveles superiores constituyen el alcantarillado de la ciudad. Al ser parte de ella, éstos niveles no son peligrosos. Nadie los llamaría un lugar seguro, pero al menos no tienes que luchar contra magia malvada. + Hace muchos años una prisión bajo tierra se contruyó aquí para los criminales más peligrosos. Entonces parecía una buena idea, ya que era difícil de salir, pero pronto miasma oscuro emmpezó a perpretar desde abajo, volviendo locos a los guardias y prisioneros. Al final la prisión fue abandonada, aunque algunos convictos se quedaron encerrados allí. + Las cuevas, que se extienden hacia abajo bajo la prisión abandonada, están escasamente pobladas. Se encuentran demasiado profundas para ser explotadas por el Ayuntamiento y que son demasiado pobres en minerales para interesar a los enanos. En el pasado había un puesto comercial en alguna parte aquí en la ruta entre estos dos estados, pero ha perecido desde el declive de los enanos Metropolis. Sólo gnolls omnipresentes y animales subterráneos moran aquí ahora. + Dwarven Metropolis fue una vez el más grande de las ciudades-estado de los enanos. En su apogeo el ejército mecanizado de enanos había repeler la invasión del antiguo dios y su ejército de demonios. Pero se dice, que los guerreros que regresan han traído semillas de corrupción con ellos, y que la victoria fue el principio del fin para el reino subterráneo. + En el pasado, estos niveles eran las afueras de Metrópolis. Después de la costosa victoria en la guerra contra los viejos enanos Dios eran demasiado debilitado para borrarlos del resto de los demonios. Poco a poco, los demonios han endurecido su control sobre este lugar y ahora se llama Demon Halls.\n\nMuy pocos aventureros nunca han descendido hasta aquí... + + EN VENTA: %1$s - %2$dg + Comprar para %dg + Vender para 10 %dg + Vender 1 para %dg + Vender todo para %dg + No importa + Has vendido tu %1$s para %2$dg + Has comprado %1$s para %2$dg + + Oh, ya veo que has conseguido! Yo espero que no se molesta demasiado. Como prometí, puede elegir una de mis varitas de alta calidad. + Batalla varita + Varita no batalla + Buena suerte en su búsqueda, %s! + + + + Seleccione un elemento para la Quickslot + + + + + smth + DEJAR + TIRAR + Su paquete es demasiado lleno para el %s + Elija la dirección de tiro + Debido al uso frecuente, su %s se ha roto. + Debido al uso frecuente, su %s va a romper pronto. + + EQUIPAR + DESEQUIPAR + No se puede quitar %s maldito! + + Amuleto de Yendor + TERMINE EL JUEGO + El Amuleto de Yendor es el más poderoso artefacto conocido de origen desconocido. Se dice que el amuleto es capaz de cumplir cualquier deseo si la fuerza de voluntad de su propietario es lo suficientemente fuerte para "persuadir" a hacerlo. + + Ankh + El antiguo símbolo de la inmortalidad concedió una capacidad de volver a la vida después de la muerte. Tras la resurrección todos los artículos no equipados se pierden. + + kit de blindaje + APLICAR + El uso de este kit de herramientas y materiales pequeños cualquiera puede transformar cualquier armadura en una "armadura épica", que mantendrá todas las propiedades de la armadura original, sino que también proporcionará a su portador una habilidad especial en función de su clase. No se requieren habilidades en la sastrería, peletería o herrería. + Seleccione una armadura para actualizar + se aplicó el kit de armadura para actualizar su %s + + bomba + Esta es una relativamente pequeña bomba, lleno de polvo negro. Convenientemente, la mecha se enciende automáticamente cuando se lanza la bomba. + Usted mismo mató con una bomba... + + gota de rocío + Un claro gota de rocío. + + frasco de rócio + BEBER + Puede almacenar el exceso de rocío en este pequeño recipiente para beber después. Si el frasco está lleno, en un momento de peligro mortal el rocío será consumida de forma automática. + El frasco de rocío se vació para sanar sus heridas. + Usted recibió una gota de rocío en su frasco de rocío. + Su frasco está lleno de rocío! + Su frasco de rocío está vacía! + + Este es un imitador! + + mielero + ROMPER + No hay mucha miel en esta pequeña trampa, pero no es una abeja de oro allí y no quiere dejarlo. + + oro + Recoger las monedas de oro para pasar más tarde en una tienda. + Una pila de %d monedas de oro. + Una moneda de oro. + + mueca de dolor como su agarre aprieta involuntariamente alrededor de su %s + + faro de lloyd + ACTIVAR + RETORNO + Faro de Lloyd es un dispositivo mágico intrincada, que permite volver a un lugar que ya han sido. + Fuerte aura magia de este lugar no le permite usar el faro de la lloyd! + Aura psíquica de las criaturas vecinos no le permite utilizar faro del Lloyd en este momento. + Faro del lloyd se establece con éxito en su ubicación actual, ahora puedes volver aquí en cualquier momento. + \n\nEste faro se estableció en algún lugar en el nivel %d de Pixel Dungeon. + + Tomo de Maestría + Tomo de Remaestría + LEER + Este libro de cuero gastado no es tan grueso, pero se siente de alguna manera, que puede reunir una gran cantidad de ella. Recuerde sin embargo que la lectura de este tomo puede requerir algún tiempo. + No se puede leer mientras cegado + Usted ha elegido el camino del %s! + + antorcha + LUZ + Es un elemento indispensable en The Demon Salas, que son conocidos por su iluminación ambiental pobres. + + piedra de peso + APLICAR + Utilizando una piedra de peso, puede equilibrar su arma cuerpo a cuerpo para aumentar su velocidad y precisión. + Seleccionar un arma para equilibrar + usted equilibrados tu %s para hacerlo más rápido + usted equilibrados tu %s para que sea más precisa + ¿Cómo le gustaría a equilibrar su %s? + Para la velocidad + Para una precisión + No importa + + + + + PLANTA + Tire a esta semilla en el lugar donde desea crecer %1$s.\n\n%2$s + semilla de %s + + Dreamweed + Al tocar un Dreamweed segrega una nube brillante de gas confuso. + + Earthroot + Cuando una criatura toca un Earthroot, sus raíces crean una especie de armadura natural a su alrededor. + Armadura herbal + + Fadeleaf + Tocar una Fadeleaf se teletransportarse a cualquier criatura a un lugar al azar en el nivel actual. + + Firebloom + Cuando algo toca una Firebloom, estalla en llamas. + + Icecap + Al tocar un Icecap excreta un polen, que congela todo en su vecindad. + + Rotberry + Las bayas de este arbusto saben a dulce, dulce muerte. + La semilla emite un rugido que hace eco a lo largo de la mazmorra! + + Sorrowmoss + Un Sorrowmoss es una flor (no un musgo) con pétalos afilados, recubiertas de una de veneno mortal. + + Sungrass + Sungrass es famoso por las propiedades curativas de su savia. + Curación herbaria + + + + + tu %s constriñe a tu alrededor dolorosamente + Que ahora está lo suficientemente familiarizado con su %1$s para identificarlo. Es %2$s. + %1$s :%2$d + %1$s roto :%2$d + Interacción de los diferentes tipos de magia ha borrado el glifo en esta armadura! + \n\nEsta %1$s proporciona absorción de daño hasta puntos \"%2$d\" por el ataque. + \n\nDebido a su fuerza inadecuada disminuye su velocidad de movimiento y la habilidad de defensa. + \n\nDebido a su fuerza inadecuada vistiendo esta armadura disminuirá su velocidad de movimiento y la habilidad de defensa. + \n\n%1$s típica proporciona daños absorción de hasta %2$d puntos por ataque y requiere %3$d puntos de fuerza. + Probablemente esta armadura es demasiado pesado para usted. + Está encantado. + \n\nUsted está usando el %1$s%2$s. + , y porque está maldito, eres incapaz de eliminarlo + \n\nUsted puede sentir una magia malévola al acecho dentro de la %s. + + La cosa se ve impresionante! + Su salud es demasiado bajo! + Necesitas estar usando esta armadura para usar su poder especial! + + armadura de paño + Esta armadura ligera ofrece una protección básica. + + manto cazadora + Una cazadora de tal capa puede crear un ventilador de aspas espectrales. Cada una de estas hojas se dirigirse a un solo enemigo en el campo de la cazadora de vista, infligiendo daños en función de su arma cuerpo a cuerpo actualmente equipada. + BLADES ESPECTRALES + No hay enemigos a la vista + Sólo cazadoras pueden utilizar esta armadura! + + armadura de cuero + Armadura hecha de piel bronceada monstruo. No es tan ligero como armaduras de tela, pero proporciona una mejor protección. + + túnica de mago + El uso de este magnífico manto, un mago puede lanzar un hechizo de tierra fundida: todos los enemigos en su campo de visión se prendió fuego e incapaz de moverse al mismo tiempo. + TIERRA FUNDIDO + Sólo los magos pueden usar esta armadura! + + armaduras de malla + Enclavamiento eslabones de metal para hacer un traje resistente pero flexible de la armadura. + + armadura de placas + Enormes placas metálicas se unen en un traje que proporciona una protección incomparable a cualquier aventurero lo suficientemente fuerte como para soportar su peso asombrosa. + + ladrón traje + El uso de este atuendo oscuro, un pícaro puede realizar un truco, que se llama \"bomba de humo\" (aunque no se utilizan explosivos reales): le ciega enemigos que podían ver él y saltos a un lado. + BOMBA DE HUMO + Sólo los ladrones pueden utilizar esta armadura! + Sólo se puede saltar a un lugar vacío en su campo de visión + Elija un lugar para ir a + + armadura de escamas + Las escamas de metal cosidas en un chaleco de cuero crean una armadura flexible pero protectora. + + guerrero armadura + Si bien esta armadura se ve pesado, que permite a un guerrero para realizar salto heroico hacia una ubicación de orientación, golpeando hacia abajo para aturdir a todos los enemigos cercanos. + SALTO HEROICO + Sólo guerreros pueden usar esta armadura! + Elija la dirección de saltar + + + + + %s de afecto + + %s de antientropía + + %s de auto-reparación + + %s de rebote + + %s de desplazamiento + + %s de enredo + + %s de metabolismo + + %s de multiplicidad + + %s de potencial + + %s del hedor + + %s de viscosidad + diferido %d + encantamiento de la viscosidad + daños defered (%d) + El encanto de la viscosidad que mató... + + + + + ABRIR + + llavero + Esto es un llavero de cobre, que le permite mantener todas sus llaves por separado del resto de sus pertenencias. + + apoyo de pergamino + Usted puede colocar cualquier número de rollos en este recipiente tubular. Se ahorra espacio en tu mochila y protege pergaminos del fuego. + + bolsa de semillas + Esta pequeña bolsa de terciopelo le permite almacenar cualquier número de semillas en el mismo. Muy conveniente. + + funda de varita + Este delgado soporte está hecho de cuero de un animal exótico. Permite realizar de forma compacta hasta %d varitas. + + + + + ración de comida + Nada de lujos: carne seca, unas galletas - cosas como esas. + COMER + Esa comida era deliciosa! + + carne a la brasa + Parece un bistec decente. + + carpaccio congelada + Es un pedazo de carne cruda congelada. La única manera de comer es cortando rebanadas delgadas de ella. Y de esta manera es sorprendentemente bueno. + Usted ve las manos se vuelven invisibles! + Usted siente que su piel se endurece! + Refrescante! + Te sientes mejor! + + carne misteriosa + Coma en su propio riesgo! + Oh, es caliente! + Usted no puede sentir sus piernas! + Usted no se siente bien. + Usted está llenos. + Esa comida era ... extraño. + + ración de comida cara + Se ve exactamente como una ración estándar de la comida, pero más pequeño. + Esa comida era buena. + + pasta + Esto es auténtico pastel de Cornualles con relleno tradicional de carne de vacuno y la patata. + + + + + llave de oro + Las muescas en esta llave de oro son pequeñas e intrincado. Tal vez puede abrir alguna cerradura pecho? + + llave de hierro + Las muescas en esta llave de hierro antigua son bien gastado; su cordón de cuero es maltratada por la edad. ¿Qué puerta se puede abrir? + llave de hierro de profundidad %d + + llave maestra + Esta clave parece serio: la cabeza tiene la forma de un cráneo. Probablemente se puede abrir alguna puerta serio. + + + + + poción %s + Este frasco contiene un líquido %s remolino. ¿Quién sabe lo que va a hacer cuando bebido o lanzado? + BEBIDA + Poción Nocivo! + Poción beneficioso + Sí, ya sé lo que estoy haciendo + No, he cambiado de opinión + ¿Seguro que quieres beber? En la mayoría de los casos usted no debe tirar esas pociones a tus enemigos. + ¿Seguro que quieres tirarlo? En la mayoría de los casos tiene sentido beber. + Los añicos matraz y líquido %s salpica inofensivamente + + turquesa + carmín + azur + jade + dorado + magenta + gris + marfil + ámbar + marron oscuro + añil + plata + + + Poción de Experiencia + Las experiencias pisos de multitud de batallas reducidos a forma líquida, este proyecto al instante elevar su nivel de experiencia. + + Poción de Escarcha + Tras la exposición a abrir el aire, este producto químico se evaporará en una nube de congelación, haciendo que cualquier criatura que los contactos a congelarse en el lugar, incapaz de actuar y moverse. + + Poción de Curación + Un elixir que al instante que volver a la plena salud y curar veneno. + Sus heridas se curan completamente. + + Poción de Invisibilidad + Beber esta poción hará que usted temporalmente invisible. Aunque invisible, los enemigos no podrán verte. Atacar a un enemigo, así como usar una varita o un pergamino ante los ojos del enemigo, disipará el efecto. + Usted ve las manos se vuelven invisibles! + + Poción de Levitación + Beber este curioso líquido hará que ciernen en el aire, capaz de desplazarse sin esfuerzo sobre trampas. Las llamas y los gases llenan el aire, sin embargo, y no pueden ser anuladas mientras el aire. + Flotas en el aire! + + Poción de la Llama Líquido + Este frasco contiene un compuesto inestable que va a estallar violentamente en llamas tras la exposición al aire libre. + + Poción de Poderío + Este poderoso líquido curso a través de los músculos, de forma permanente aumento de su fuerza en un punto y la salud en cinco puntos. + Nueva fuerza surge a través de su cuerpo. + +1 str, +5 ht + + Poción de la Mente Visión + Después de beber esto, tu mente se convertirá en sintonía con la firma psíquica de criaturas distantes, lo que le permite sentir presencias biológicos a través de paredes. También esta poción le permitirá ver a través de paredes y puertas cercanas. + De alguna manera puede sentir la presencia de las mentes de otras criaturas! + Se puede decir de alguna manera que estás solo en este nivel en el momento. + + Poción de Gas paralítico + Tras la exposición a abrir el aire, el líquido en este matraz se evapora en una neblina amarilla adormecedor. Cualquier persona que inhala la nube se paralizó al instante, incapaz de moverse durante algún tiempo después se disipa la nube. Este artículo se puede lanzar a los enemigos distantes para atraparlos en el efecto del gas. + + Poción de la Purificación + Este reactivo neutralizará rápidamente todos los gases nocivos en el área de efecto. Beber le dará una inmunidad temporal a tales gases. + Se siente la frescura poco común en el aire. + Has dejado de detectar olores! + + Poción de Fuerza + Este poderoso líquido curso a través de los músculos, de forma permanente aumento de su fuerza por un punto. + Nueva fuerza surge a través de su cuerpo. + +1 str + + Poción de Gas Tóxico + El descorche o destrozando este vidrio a presión hará que su contenido a explotar en una nube mortal de gas verde tóxico. Usted puede optar por lanzar esta poción a los enemigos distantes en lugar de descorchar a mano. + + + + + polvo de cadáver + La bola de polvo de cadáver no se diferencia exteriormente de una bola de polvo regular. Sin embargo, usted sabe de alguna manera que es mejor deshacerse de él tan pronto como sea posible. + + mineral de oro oscuro + Este metal se llama oscuro no a causa de su color (que no difiere de la de oro normal), pero debido a que se funde bajo la luz del día, lo que es inútil en la superficie. + + rosa seca + La rosa se ha secado hace mucho tiempo, pero se ha mantenido todos sus pétalos de alguna manera. + + símbolo enana + Muchos enanos y algunas de sus creaciones más grandes llevan estas pequeñas piezas de metal de propósito desconocido. Tal vez son de joyería o tal vez algún tipo de identificación. Los enanos son gente extraña. + + peces fantasma + COMER + Apenas se puede ver este pequeño pez transparente en el aire. En el agua se convierte efectivamente invisible. + Usted ve las manos se vuelven invisibles! + + pico + Esta es una herramienta grande y robusto para romper rocas. Probablemente que puede ser utilizado como un arma. + MÍA + No es la veta de oro oscuro cerca de usted a la mía + + cráneo rata gigante + Podría ser una buena caza de trofeos, pero huele demasiado mal para colocarlo en la pared. + + + + + anillo de %s + Esta banda metálica está adornado con una joya de %s de gran tamaño que brilla en la oscuridad. ¿Quién sabe qué efecto ha cuando se usa? + %s roto + Que ahora está lo suficientemente familiarizado con su %1$s para identificarlo. Es %2$s. + Desequipamiento un anillo + Sólo puede llevar dos anillos a la vez. Desequipamiento uno de sus anillos equipados. + + diamante + ópalo + granate + ruby + amatista + topacio + ónix + turmalina + esmeralda + zafiro + cuarzo + ágata + + Su %s se aprieta alrededor de su dedo dolorosamente + %1$s\n\nEl %2$s está en su dedo %3$s. + , y porque está maldito, eres incapaz de eliminarlo + %1$s\n\nUsted puede sentir una magia malévola acecho dentro del %2$s. + Este es un %s + + Anillo de Precisión + Este anillo aumenta tu probabilidad de golpear al enemigo. + + Anillo de Detección + El uso de este anillo permitirá al usuario note secretos ocultos - trampas y puertas secretas - sin tener tiempo para buscar. Anillos Degradadas de detección serán apagados sus sentidos, por lo que es más difícil de notar secretos incluso cuando la búsqueda activa de ellos. + + Anillo de los Elementos + Este anillo proporciona resistencia a diferentes elementos, tales como el fuego, la electricidad, los gases, etc. También disminuye la duración de los efectos negativos. + + Anillo de la Evasión + Este anillo aumenta la probabilidad de esquivar ataques enemigos. + + Anillo de Negociación + De hecho este anillo no proporciona ningún efecto mágico, pero demuestra que los comerciantes y vendedores, que el dueño del anillo es un miembro del Gremio de Ladrones. Por lo general, están contentos de dar un descuento a cambio de la garantía de inmunidad temporal. Actualización de este anillo no dará ningún bono adicional. + + Anillo de Prisa + Este anillo acelera el flujo del portador de tiempo, lo que permite una para llevar a cabo todas las acciones un poco más rápido. + + Anillo de las Hierbas + Este anillo aumenta la posibilidad de reunir el rocío y las semillas de la hierba pisoteada. + + Anillo de Regeneración + Este anillo aumenta las propiedades regenerativas del cuerpo, permitiendo recuperar la salud perdida a un ritmo acelerado. Anillos Degradadas disminuirá o incluso detener la propia regeneración natural. + + Anillo de Poder + Sus varitas serán más poderosa en el campo de la energía que irradia de este anillo. Anillos Degradadas de poder en lugar de otro debilitar sus varitas. + + Anillo de Saciedad + El uso de este anillo se puede ir sin alimentos por más tiempo. Anillos degradadas de saciedad harán que el efecto opuesto. + + Anillo de las Sombras + Los enemigos serán menos propensos a notar que si usted usa este anillo. Anillos de las Sombras degradadas alertarán enemigos que de otra manera no se han dado cuenta de su presencia. + + Anillo de Espinas + Aunque este anillo no proporciona espinas reales, un enemigo que ataca a sí mismo se va herido por una fracción del daño que inflige. Actualización de este anillo no dará ningún bono adicional. + + + + + pergamino \"%s\" + Este pergamino está cubierto con la escritura indescifrable, y tiene un título de runa %s. ¿Quién sabe lo que va a hacer cuando se lee en voz alta? + LEER + No se puede leer un libro mientras cegado + + KAUNAN + SOWILO + LAGUZ + YNGVI + GYFU + RAIDO + ISAZ + MANNAZ + NAUDIZ + BERKANAN + ODAL + TIWAZ + + + Selecciona un ítem + ¿Realmente deseas cancelar el uso del pergamino? Se consume de todos modos. + Sí, ya sé lo que estoy haciendo + No, he cambiado de opinión + + Pergamino de Desafío + Cuando lea en voz alta, este pergamino va a desatar un rugido desafiante que despertará todos los monstruos y alertarlos sobre la ubicación del lector. + El desplazamiento emite un rugido desafiante que hace eco a lo largo de la mazmorra! + + Pergamino de Identificar + Permanentemente revela todos los secretos de un solo elemento. + Seleccione un ítem para identificar + Este es un %s + + Pergamino de Canción de Cuna + Una melodía suave pondrá todas las criaturas en su campo de visión en un sueño profundo, que le da la oportunidad de huir o hacer un ataque sorpresa sobre ellos. + El desplazamiento pronuncia una melodía relajante. + El desplazamiento pronuncia una melodía suave y el %s se duerme! + El desplazamiento pronuncia una melodía suave y los monstruos se duerma! + + Pergamino de Mapeo Mágica + Cuando se lee este pergamino, una imagen de claridad cristalina quedará grabado en su memoria, alertando a la distribución precisa del nivel y revelando todos los secretos ocultos. Las ubicaciones de los elementos y criaturas seguirán siendo desconocido. + Ahora eres consciente de la disposición de nivel. + + Pergamino de Imagen de Espejo + El encantamiento de este pergamino creará gemelos ilusorias del lector, que perseguirá a sus enemigos. + + Pergamino de Explosión Psiónica + Este pergamino contiene energía destructiva, que puede ser canalizada psiónicamente para infligir un daño masivo a todas las criaturas dentro de un campo de visión. Un flash que acompaña de la luz será cegar temporalmente a todo el mundo en el área de efecto que incluye el lector del pergamino. + + Pergamino de Recarga + El poder mágico prima ligada en este pergamino será, cuando se libera, recargar todas las varitas del lector a plena potencia. + una oleada de cursos de energía a través de su paquete, recarga tu varita + una oleada de cursos de energía a través de su paquete, recargando sus varitas + una oleada de cursos de energía a través de su paquete, pero no pasa nada + + Pergamino de Remoción de Maldición + El encantamiento de el pergamino instantáneamente despojar de armas, armaduras, anillos del lector y artículos llevado ningún encantamientos malignos que pudieran impedir al usuario de la eliminación de ellos. + Su paquete se ilumina con una luz de limpieza, y una energía malévola dispersa. + Su paquete se ilumina con una luz de limpieza, pero no pasa nada. + + Pergamino de Teletransporte + El hechizo en este pergamino transporta inmediatamente al lector a un lugar al azar en el nivel mazmorra. Puede ser utilizado para escapar de una situación peligrosa, pero el lector de mala suerte podría encontrarse en un lugar aún más peligroso. + En un abrir y cerrar de ojos estabas teletransportado a otro lugar del nivel. + Fuerte aura magia de este lugar le impide teletransportarse! + + Pergamino de Terror + Un destello de luz roja se abrumar a todas las criaturas en su campo de visión con el terror, y ellos a su vez, y huir. Atacar a un enemigo que huye disipará el efecto. + El desplazamiento emite un brillante destello de luz roja + El desplazamiento emite un brillante destello de luz roja y el %s huye! + El desplazamiento emite un brillante destello de luz roja y los monstruos huyen! + + Pergamino de Actualización + Este pergamino actualizará un solo elemento, la mejora de su calidad. Una varita aumentará en el poder y en número de cargas; un arma infligirá más daño o encontrar su marca con mayor frecuencia; una armadura desviará golpes adicionales; el efecto de un anillo en su portador se intensificará. Armas y armaduras también requieren menos fuerza de usar, y cualquier maldición sobre el artículo será levantado. + Seleccione un ítem para actualizar + tu %s sin duda se ve mejor ahora + + Pergamino de Encantamiento + Este pergamino es capaz de imbuir un arma o una armadura con un encanto al azar, otorgándole un poder especial. + Seleccione un ítem incantable + tu %s brilla en la oscuridad + + Pergamino de Limpieza + @string/Scroll_ACRead + Lea este pergamino para dar rienda suelta a la ira de los espíritus de las mazmorras, matando todo en el nivel actual. Bueno, casi todo. Algunas de las criaturas más poderosas pueden no afectados. + @string/Scroll_Blinded + + + + + varita de %s + ZAP + Esta delgada varita de %s es caliente al tacto. ¿Quién sabe lo que va a hacer cuando se usa? + Cuando se utiliza esta varita como un arma cuerpo a cuerpo, su daño promedio es de %d puntos por golpe. + Puede utilizar esta varita como un arma cuerpo a cuerpo. + tu varita esfuma; debe estar fuera de los cargos por ahora + No se puede apuntar a ti mismo + Elija la dirección de hacer zapping + Ahora está lo suficientemente familiarizado con su %s. + + acebo + tejo + ébano + cereza + teca + serbal + sauce + caoba + bambú + purpleheart + roble + abedul + + + Varita de Furia + La luz violeta de esta varita hará que el blanco fuera de control criaturas atacantes al azar en sus proximidades. + no pasó nada + + Varita de la Avalancha + Cuando una descarga de esta varita golpea una pared (o cualquier otro obstáculo sólido) que provoca una avalancha de piedras, perjudiciales e impresionantes todas las criaturas en la zona afectada. + Usted mismo mató con su propia Varita de Avalancha ... + + Varita de Flash + Esta varita le permitirá teletransportarse en la dirección elegida. Criaturas y obstáculos inanimados bloquearán la teletransportación. + + Varita de Desintegración + Esta varita emite un haz de energía destructiva, que atraviesa todas las criaturas en su camino. Los más objetivos que impacta, más daño que inflige a cada uno de ellos. + + Varita de Saeta de Fuego + Esta varita desata ráfagas de fuego mágico. Se encenderá terreno inflamable y puede dañar y quemar una criatura que golpee. + Usted mismo mató con su propia varita de Saeta de Fuego... + + Varita del Rebaño + Un movimiento de esta varita convoca a un rebaño de ovejas magia, creando obstáculo impenetrable temporal. + oveja + Esta es una oveja magia. ¿Qué es tan mágico sobre él? No se puede acabar con él. Será permanecer allí hasta que por arte de magia desvanece, todo el bolo alimenticio al masticar con una mirada en blanco. + + Baa! + Baa? + Baa. + Baa... + Bee... + Ble... + + + Vara del Rayo + Esta varita evoca sucesivamente arcos mortales de la electricidad, que se ocupan daños a varias criaturas de pie cerca uno del otro. + Usted mismo mató con su propia varita del Rayo... + + Varita de Misil Mágico + Esta varita lanza misiles de energía mágica pura, haciendo daño moderado a una criatura objetivo. + DESENCANTAR + Usted mismo mató con su propia Varita de Misil Mágico... + Seleccionar una varita para actualizar + usted desencantado la Varita de la magia de Misiles y utilizó su esencia actualizar su %s + + Varita de Veneno + La explosión de este vil poco retorcida de madera se imbuir su objetivo con un veneno mortal. Una criatura que se envenenó sufrirá daño periódico hasta que termine el efecto. La duración del efecto aumenta con el nivel del personal. + no pasó nada + + Varita de Brote + \"Cuando la vida deja nueva vida siempre empieza a crecer ... El ciclo eterno permanece siempre!\" + no pasó nada + + Varita de la Lentitud + Esta varita causará una criatura a moverse y atacar a la mitad de su velocidad normal hasta que los extremos de efecto + no pasó nada + + Varita de Alcance + Esta varita utilidad se puede utilizar para agarrar objetos a distancia y para cambiar de lugar con los enemigos. Olas de fuerza mágica de esta varita afectarán todas las células en sus trampas manera desencadenantes, pisoteando vegetación alta, abriendo las puertas cerradas y el cierre de los abiertos. + Usted ha transportado mágicamente %s en su mochila + + Varita de Teletransporte + Una explosión de esta varita se teletransportar una criatura contra su voluntad a un lugar al azar en el nivel actual. + %1$s hombre teletransportado %2$s a algún lugar + no pasó nada + + + + + Que ahora está lo suficientemente familiarizado con su %1$s para identificarlo. Es %2$s + Interacción de los diferentes tipos de magia ha negado el encanto de esta arma! + %1$s :%2$d + %1$s roto :%2$d + + + + + %s sombría + + %s ardiente + + %s misterioso + + %s inestable + + %s vampírico + + %s suerte + + %s que aturde + + %s venenoso + + %s chocante + + %s escalofriante + + %s templado + + + + + %1$s: Es un arma cuerpo a cuerpo %2$s en el nivel %3$d. + + mejorado + degrada + rota + Su daño promedio es de %d puntos por golpe. + Su daño medio típico es %1$d puntos por golpe y por lo general requiere de %2$d puntos de fuerza. + Probablemente esta arma es demasiado pesado para usted. + Este es un arma bastante %s. + rápido + lento + y + pero + preciso + impreciso + Fue equilibrado para hacerlo más rápido. + Fue equilibrado para que sea más precisa. + Está encantado. + Debido a su fuerza inadecuada disminuye la precisión y la velocidad de su ataque con %s. + Debido a su exceso de fuerza se aumenta el daño de tu ataque con %s. + Usted sostiene el %1$s en ristre%2$s. + , y porque está maldito, eres incapaz de dejar ir + Usted puede sentir una magia malévola al acecho dentro de %s. + + hacha de batalla + La enorme cabeza de acero de esta hacha de batalla pone considerable influencia detrás de cada golpe. + + daga + Una daga de hierro simple con un mango de madera desgastada. + + glaive + Un arma de asta que consiste en una hoja de la espada en el extremo de un poste. + + puño de hierro + Un pedazo de hierro en forma de encajar alrededor de los nudillos. + + espada larga + Esta hoja se eleva inflige graves daños al invertir su peso en cada corte. + + maza + La cabeza de hierro de esta arma inflige un daño sustancial. + + barra + Un equipo de la madera dura, sus extremos están calzados con hierro. + + espada corta + De hecho, es bastante corto, apenas unas pocas pulgadas más largo que una daga. + REFORJAR + Seleccionar un arma para actualizar + que reforjada la espada corta actualizar su %s + no se puede actualizar un boomerang de esta manera + + lanza + Una varilla de madera delgada con punta de hierro afilado. + + espada + La longitud afilado de la hoja de acero brilla tranquilizador. + + martillo de guerra + Pocas criaturas pueden soportar el duro golpe de esta masa imponente de plomo y acero, pero sólo el más fuerte de los aventureros pueden utilizarla de manera eficaz. + + + + + arma de proyectiles + Sí, ya sé lo que estoy haciendo + No, he cambiado de opinión + ¿De verdad quiere equipar como un arma cuerpo a cuerpo? + \n\nDaños media de esta arma es igual a %d puntos por golpe. + Debido a su fuerza inadecuada disminuye la precisión y la velocidad de su ataque con este %s. + A causa de su exceso de fuerza se aumenta el daño de tu ataque con este %s. + \n\nUsted lleva a cabo el %s en la mano. + + bumerang + Lanzado al enemigo este piso misiles madera curvada volverá a manos de su lanzador. + + dardo venenoso + Estos pequeños dardos del maligno no hacen mucho daño, pero ellos pueden paralizar el objetivo dejándolo indefenso y sin moverse durante algún equipo. + + dardo + Estas puntas de metal simples se ponderan a volar verdadera y pican a sus presas con un giro de muñeca. + + dardos incendiarios + El pico en cada uno de estos dardos está diseñado para fijarlo a su objetivo, mientras que los compuestos inestables atados a su longitud estallaron en llamas brillantes. + + jabalina + Esta longitud de metal se pondera para mantener la punta en la punta más importante, ya que navega por el aire. + + shuriken + Piezas en forma de estrella, de metal con cuchillas afiladas hacen daño significativo cuando golpean un objetivo. Ellos pueden ser lanzadas a muy alta velocidad. + + tomahawk + Esta hacha de lanzamiento no es tan pesado, pero aún requiere de fuerza significativa para ser utilizado con eficacia. + + + + + Una nube de gas de la confusión está girando aquí. + + Un incendio se está librando aquí. + + Ejes de luz atraviesan la penumbra del jardín subterráneo. + + Una nube de gas paralizante está girando aquí. + + \"Su sacrificio es digna...\" + \"Su sacrificio es indigno...\" + \"Su sacrificio es digna y por lo que son!\" + Fuego del sacrificio quema aquí. Cada criatura tocada por este fuego se marca como una ofrenda para los espíritus de la mazmorra. + Marcado para el sacrificio + + Una nube verdosa de gas tóxico se arremolinaba aquí. + Usted murió de un gas tóxico... + + A medida que tome un sorbo, se siente el conocimiento vierte en su mente. Ahora que sabes todo acerca de sus objetos equipados. También usted detecta todos los artículos sobre el nivel y sabe todos sus secretos. + Poder de conocimiento se irradia desde el agua de este pozo. Tome un sorbo de ella para revelar todos los secretos de objetos equipados. + + Poder de la salud se irradia desde el agua de este pozo. Tome un sorbo de él para sanar sus heridas y satisfacer el hambre. + A medida que tome un sorbo, usted siente que sus heridas se curan completamente. + + Poder de cambio se irradia desde el agua de este pozo. Tire a un artículo en el pozo para convertirlo en otra cosa. + + Todo está cubierto con una tela gruesa aquí. + + + + + Louco + + Piel de corteza + + Sangrado + Usted se desangró hasta morir... + + Cegado + + Quemar + %s quema! + Usted quemado hasta la muerte ... + + Encantado + + Combo + %d hit combo! + + Lisiado + + Congelado + + Furia + + Inmune a los gases + + Tienes hambre. + Usted está muriendo de hambre! + Usted muerto de hambre... + Hambriento + Muriendo de hambre + + Invisible + + Levitando + + Iluminado + + Visión de la mente + + Lodos tóxicos + %s que mata... + + Paralizado + + Envenenado + Usted murió de veneno... + + Cegado por la rabia + + Arraigados + + Bajo las sombras + + Desacelerado + + Puesto a cero + + Vértigo + + Debilitado + + + + + Mochila + + + + + Descripción real viene pronto! + Se oye a alguien morir. + eco de\u0020 + %1$s: \"%2$s\" + Este $s está durmiendo + Este %s está vagando + Este %s está cazando + Este %s está huyendo + Este %s es pasivo + + escorpión ácido + + rata albina + + bandido loco + + murciélago + Estos habitantes enérgico y tenaz de las bóvedas de la cueva pueden derrotar a los oponentes mucho más grandes por la reposición de su salud con cada ataque exitoso. + evadido + + gnoll Bruto + Brutos son los más grandes, más fuertes y más duro de todos los gnolls. Cuando gravemente herido, se vuelven locos, causando aún más daño a sus enemigos. + %s se enfurece! + enfurecido + + cangrejo de alcantarillado + Estas enormes cangrejos están en la cima de la cadena alimenticia en las alcantarillas. Son extremadamente rápido y su exoesqueleto grueso pueden soportar fuertes golpes. + repelido + + encarnación maldito + Esta criatura se asemeja con la triste fantasma, pero remolinos en la oscuridad. Su cara tiene una expresión de la desesperación. + + DM-300 + DM-350 + Esta máquina ha sido creado por los enanos hace varios siglos. Más tarde, los enanos empezaron a reemplazar las máquinas con golems, elementales e incluso demonios. Con el tiempo se llevó su civilización a la disminución. La máquinas similares DM-300 y se utilizan normalmente para la construcción y la minería, y en algunos casos, para la defensa de la ciudad. + DM-300 se autorrepara! + Mision fallida. Apagar. + Personal no autorizadas detectados. + + elemental de fuego + Elementales de fuego errantes son un subproducto de convocar mayores entidades. Son demasiado caótica en su naturaleza a ser controlado por el demonologist incluso más potente. + + ojo maligno + Uno de los otros nombres de este demonio es "orbe del odio", porque cuando se ve a un enemigo, utiliza su Mirada de la Muerte imprudentemente, a menudo ignorando sus aliados e hiriendo a ellos. + La Mirada de la Muerte de %s te mató... + + rata fétida + Esta rata marsupial es mucho más grande que uno normal. Está rodeado por una nube falta. + evadido + + gnoll explorador + Los gnolls son humanoides-hiena similares. Viven en las alcantarillas y mazmorras, aventurarse hasta allanar la superficie de vez en cuando. Gnoll Exploradores son miembros regulares de su paquete, no son tan fuertes como los brutos y no tan inteligentes como los chamanes. + + golem + Los enanos trataron de combinar su conocimiento de los mecanismos con su nuevo poder de elemental vinculante. Usaron espíritus de la tierra como el "alma" de los órganos mecánicos de golems, que se cree que son más controlables de todos. A pesar de esto, el error más pequeño en el ritual podría causar un brote. + obstruido + + Goo + crea de Goo + Poco conocido sobre The Goo. Es muy posible que ni siquiera es una criatura, sino más bien un conglomerado de sustancias de las alcantarillas Que rudimentos de la libre voluntad adquirida. + Goo está bombeando a sí misma! + glurp... glurp... + GLURP-GLURP! + !!! + + Rey de los Enanos + Rey de los Enanos zombi + El último rey de los enanos era conocido por su profundo conocimiento de los procesos de la vida y la muerte. Ha convencido a los miembros de su corte para participar en un ritual, que debería haberles concedido la juventud eterna. Al final, él era el único que lo consiguió - y un ejército de muertos vivientes como un bono. + repelido + Usted no me puede matar, %s... Soy... Inmortal... + Levántate, esclavos! + Cómo te atreves! + enana zombi + Estos enanos zombi, resucitados por la voluntad del Rey de los Enanos, eran miembros de su corte. Aparecen como esqueletos con una cantidad impresionante de vello facial. + obstruido + + imitador + Imitadores son criaturas mágicas que pueden tomar cualquier forma que deseen. En mazmorras casi siempre eligen una forma de un cofre del tesoro, porque saben cómo atraen un aventurero. + + monje enano + Estos monjes son fanáticos, que se dedicaron a la protección de los secretos de su ciudad desde todos los extranjeros. No utilizan ninguna armadura o armas, confiando únicamente en el arte de combate cuerpo a cuerpo. + repelido + %1$s golpeó %2$s de las manos! + + piraña gigante + Estos peces carnívoros no son habitantes naturales de piscinas subterráneas. Fueron criados específicamente para proteger cámaras del tesoro inundadas. + + rata marsupial + Ratas marsupiales son habitantes agresivos, sino más bien débiles de las alcantarillas. Pueden ser peligrosos sólo en grandes números. + + escorpión + Estas enormes criaturas demoníacas son similares a los arácnidos y evitan combate cuerpo a cuerpo, disparando picos dentados paralizantes desde largas distancias + + monje mayor + + gnoll chamán + Los gnolls más inteligentes pueden dominar la magia chamánica. Gnoll Chamanes prefieren batalla hechizos para compensar la falta de fuerzas, no dudando en utilizar en los que cuestionan su estado en una tribu. + Rayo de %s te mató... + + bruta blindado + obstruido + + esqueleto + Esqueletos están formados por huesos cadáveres de los aventureros y los habitantes de la mazmorra de mala suerte, animados por emanaciones de magia maligna de las profundidades. Después de que hayan sido dañados suficiente, se desintegran en una explosión de huesos. + obstruido + Usted fue matado por la explosión de los huesos... + + araña de la cueva + Estas arañas peludas verdosos tratan de evitar el combate directo, prefiriendo esperar en la distancia mientras que su víctima, enredado en la telaraña excretado del hilandero, muere lentamente de su mordedura venenosa. + + estatua animada + Se podría pensar que es sólo otra estatua feo de esta mazmorra, pero sus ojos brillantes rojos dan misma distancia. Mientras que la estatua está hecha de piedra, el _%s_, se maneja, parece real. + + súcubo + Los súcubos son demonios que parecen chicas seductoras (de una manera ligeramente gótico). A través de su magia, el súcubo puede encantar un héroe, que se convertirá incapaz de atacar nada hasta el encanto desaparece. + + enjambre de moscas + El enjambre mortal de moscas zumba con rabia. Cada ataque no mágico se dividirá en dos enjambres más pequeños pero igualmente peligrosas. + evadido + + Tengu + memoria del Tengu + Tengu son miembros del clan asesinos antiguos, que también se llama Tengu. Estos asesinos son conocidos por el uso extensivo de shuriken y trampas. + Libre al fin... + Gotcha, %s! + + ladrón loco + Niveles más profundos de la mazmorra siempre han sido un lugar de escondite para todo tipo de delincuentes. No todos ellos podían mantener una mente clara durante sus largos períodos lejos de la luz del día. Hace mucho tiempo, estos ladrones y bandidos locos han olvidado quiénes son y por qué se roban. + %1$s robó %2$s de usted! + \n\n%1$s está llevando _%2$s_. Es robado obviamente. + + hechicero enano + Cuando los intereses enanos han cambiado desde la ingeniería a las artes arcanas, los brujos han llegado al poder en la ciudad. Comenzaron con la magia elemental, pero pronto cambió a la demonología y la nigromancia. + El Tornillo de Sombra de %s te mató... + + fantasma + Un fantasma es un espíritu vengativo de un pecador, cuya tumba o la tumba fue molestado. Ser una entidad etérea, es muy difícil de golpear con un arma normal. + evadido + + Yog-Dzewa + eco de Yog-Dzewa + Yog-Dzewa es un Dios Antiguo, una entidad poderosa de los reinos del caos. Hace un siglo, los antiguos enanos apenas ganaron la guerra contra su ejército de demonios, pero no fueron capaces de matar al propio dios. En su lugar, a continuación, encarcelados en los pasillos por debajo de su ciudad, creyendo que era demasiado débil para levantarse nunca más. + ... + La esperanza es una ilusión... + puño putrefacción + puño quema + larva de Deus + + + + + abeja de oro + A pesar de su pequeño tamaño, las abejas de oro tienden a proteger a su amo con fiereza. Ellos no viven mucho tiempo sin embargo. + Esta %s está vagando + + troll herrero + Este troll herrero se ve como todos los trolls ven: es alto y delgado, y su piel se asemeja a la piedra en color y textura. El herrero duende está jugando con desproporcionadamente pequeñas herramientas. + Hey humano! ¿Quieres ser útil, ¿eh? Tome este pico y me extraer un poco de _mineral de oro oscuro_, _15 piezas_ debería ser suficiente. ¿Qué quieres decir, ¿cómo voy a pagar? Usted es codicioso...\nOk, ok, no tengo dinero para pagar, pero puedo forjar para usted. Considérese afortunado, yo soy el único herrero alrededor. + Hey humano! ¿Quieres ser útil, ¿eh? Tome este pico y _matar a un murciélago_ con ella, necesito su sangre en la cabeza. ¿Qué quieres decir, ¿cómo voy a pagar? Usted es codicioso...\nOk, ok, no tengo dinero para pagar, pero puedo forjar para usted. Considérese afortunado, yo soy el único herrero alrededor. + Me estás tomando el pelo? ¿Dónde está mi pico?! + Mineral de oro oscuro. 15 piezas. En serio, ¿es tan difícil? + Dije que necesito del sangre de murciélago en el pico. Chop chop! + Oh, usted ha regresado... Mejor tarde que nunca. + Estoy ocupado. Piérdete! + tu %s sin duda se ve mejor ahora + Selecciona 2 itens diferentes, no el mismo item dos veces! + Seleccione 2 itens del mismo tipo! + Necesito saber lo que estoy trabajando, identificarlos primero! + Yo no trabajo con los objetos malditos! + Es una basura, la calidad es muy pobre! + No puedo reforjar estos artículos! + + fantasma triste + El fantasma es poco visible. Se ve como una mancha sin forma de luz tenue con una cara triste. + evadido + Hola aventurero... Una vez yo era como tú - fuerte y seguro... Y ahora que estoy muerto... Pero no puedo dejar este lugar... No hasta que tenga mi _rosas secas_... Es muy importante para mí ... Algunos monstruo robó de mi cuerpo ... + Por favor... Ayúdame... _Encuentra la rosa_... + ¡Sí! Sí!!! Esto es! Dámelo por favor! Y usted puede tomar uno de estos elementos, puede ser que le sea útil en su viaje... + Hola aventurero... Una vez yo era como tú - fuerte y seguro... Y ahora que estoy muerto... Pero no puedo dejar este lugar... No hasta que tenga mi venganza... Mata a la _rata fétida_, que ha tomado mi vida... + Por favor... Ayúdame... _Mata a la abominación_... + ¡Sí! La criatura fea es asesinado y yo finalmente pueda descansar... Por favor, tome uno de estos elementos, puede ser que le sea útil en su viaje... + Hola aventurero... Una vez yo era como tú - fuerte y seguro... Y ahora que estoy muerto... Pero no puedo dejar este lugar... Estoy obligado por una maldición horrible... Por favor... Ayúdame... _Destruye la maldición_... + Gracias, %s! La maldición se ha roto y que finalmente puede descansar... Por favor, tome uno de estos elementos, puede ser que le sea útil en su viaje... + Sí, lo haré para usted + No, yo no puedo ayudarte + + diablillo ambicioso + Diablillos son demonios menores. No son notables por su fuerza ni su talento mágico, pero son muy inteligente y sociable. Muchos diablillos prefieren vivir entre los no demonios. + evadido + ¿Eres un aventurero? Me encanta aventureros! Siempre se puede confiar en ellos si algo necesita ser matado. Estoy en lo cierto? Para una recompensa, por supuesto;)\nEn mi caso trata de _golems_ que necesitan para ser asesinados. Usted ve, yo voy a empezar un pequeño negocio aquí, pero estos golems estúpidos son malos para los negocios! Es muy difícil negociar con errante trozos de granito, malditos sean! Así que por favor, matar ... digamos _6 de ellos_ y una recompensa es suya. + ¿Cómo va su safari golem? + ¿Eres un aventurero? Me encanta aventureros! Siempre se puede confiar en ellos si algo necesita ser matado. Estoy en lo cierto? Para una recompensa, por supuesto;)\nEn mi caso trata de _monjes_ que necesitan para ser asesinados. Usted ve, yo voy a empezar un pequeño negocio aquí, pero estos lunáticos no compran nada por sí mismos y se ahuyentar a otros clientes. Así que por favor, matar ... digamos _8 de ellos_ y una recompensa es suya. + Oh, usted todavía está vivo! Sabía que su kung-fu es más fuerte;) Pero no se olvide de agarrar fichas estos monjes. + Nos vemos, %s! + Psst, %s! + + diablillo ambicioso + Diablillos son demonios menores. No son notables por su fuerza ni su talento mágico, pero son muy inteligente y sociable, y muchos diablillos prefieren vivir y hacer negocios entre los no demonios. + Hola amigo! + + imagen de espejo + Esta ilusión tiene un gran parecido a usted, pero es más pálida y retuerce un poco. + + rata rey + Esta rata es un poco más grande que una rata marsupial regular y lleva una pequeña corona sobre su cabeza. + No estoy durmiendo! + Qué es? No tengo tiempo para estas tonterías. Mi reino no descarta en sí! + + tendero + Este hombre robusto parece más apropiado para un distrito comercial de alguna gran ciudad que en un calabozo. Sus precios explican por qué prefiere hacer negocios aquí. + Seleccione un ítem para vender + + viejo fabricante de varitas + Este viejo pero sano caballero lleva una expresión un poco confundido. Él está protegido por un escudo mágico. + absorbido + ¡Oh, qué agradable sorpresa conocer a una persona decente en tal lugar! Vine aquí para un ingrediente raro - una _semilla Rotberry_. Ser un usuario de magia, soy muy capaz de defenderme contra monstruos locales, pero me estoy perdido en muy poco tiempo, es muy embarazoso. Probablemente usted me podría ayudar? Yo estaría encantado de pagar por su servicio con una de mis mejores varitas. + Ha habido suerte con una _semilla Rotberry_, %s? ¿No? No te preocupes, yo no tengo prisa. + ¡Oh, qué agradable sorpresa conocer a una persona decente en tal lugar! Vine aquí para un ingrediente raro - _polvo de cadáver_. Puede ser obtenida de los restos óseos y hay un amplio número de ellos en el calabozo. Ser un usuario de magia, soy muy capaz de defenderme contra monstruos locales, pero me estoy perdido en muy poco tiempo, es muy embarazoso. Probablemente usted me podría ayudar? Yo estaría encantado de pagar por su servicio con una de mis mejores varitas. + Ha habido suerte con _polvo de cadáver_, %s? Montones de hueso son los lugares más obvios para buscar. + ¡Oh, qué agradable sorpresa conocer a una persona decente en tal lugar! Vine aquí para un ingrediente raro - un _pez fantasma_. Usted puede coger con las manos desnudas, pero es muy difícil darse cuenta en el agua. Ser un usuario de magia, soy muy capaz de defenderme contra monstruos locales, pero me estoy perdido en muy poco tiempo, es muy embarazoso. Probablemente usted me podría ayudar? Yo estaría encantado de pagar por su servicio con una de mis mejores varitas. + Ha habido suerte con el _pez fantasma_, %s? Usted puede intentar buscarlo en una de las piscinas locales. + + + + + Una placa de presión oculta hace clic! + Abismo + Piso + Hierba + Agua + Pared + Puerta cerrada + Puerta abierta + Entrada + Salida + Ascuas + Puerta bloqueada + Pedestal + Barricada + Hierba alta + Salida bloqueada + Salida desbloqueada + Letrero + Pozo + Pozo vacío + Estatua + Trampa de gas tóxico + Trampa de fuego + Trampa de gas paralítico + Trampa de dardo venenoso + Trampa de alarma + Trampa de rayo + Trampa de agarrarte + Trampa de convocación + Trampa disparada + Estantería + Alquimia olla + \?\?\? + No se puede ver el fondo. + En caso de incendio, entrar en el agua para extinguir el fuego. + Las escaleras le llevará a la planta superior. + Las escaleras le llevará a una mayor profundidad. + Ascuas cubren el suelo. + Bloques de vegetación densa por delante. + Esta puerta está cerrada, se necesita una clave coincidente para desbloquearlo. + Bares pesados bloquean las escaleras que conducen. + La barricada de madera se establece con firmeza pero se ha secado en los últimos años. Podría quemar? + No se puede leer el texto de aquí. + Caminando sobre una placa de presión oculto activará la trampa. + La trampa se ha activado antes y no es peligroso ya. + Alguien quería adornar este lugar, pero no pudo, obviamente. + Caída de algunas semillas para cocinar una poción. + El pozo se ha secado. + + Musgo fluorescente + Hongos fluorescentes + Agua helada. + Las escaleras le llevará a la planta superior. + Las escaleras le llevará a una mayor profundidad. + Enormes hongos bloquean la vista. + Una vena de algún mineral es visible en la pared. Oro? + Quién necesitaría una Estantería en una cueva? + + Agua de color sospechosamente + Flores de alta flor + La rampa le llevará a la planta superior. + La rampa le llevará a una mayor profundidad. + Varios azulejos faltan aquí. + Gruesa alfombra cubre el suelo. + La estatua representa a algunos de pie enano en una postura heroica. + Las filas de libros sobre diferentes disciplinas llenar la estantería. + + Lava fría + Musgo em brasas + Fungo em brasas + Pilar + Parece que la lava, pero hace frío y probablemente puede tocar. + El pilar está hecho de cráneos humanoides reales. Impresionante. + Libros en idiomas antiguos arden en la estantería. + + @string/Halls_TileWater + @string/Halls_TileGrass + @string/Halls_TileHighGrass + @string/Halls_TileStatue + @string/Halls_TileDescWater + @string/Halls_TileDescStatue + + @string/City_TileWater + @string/City_TileHighGrass + @string/City_TileDescEntrance + @string/City_TileDescExit + @string/City_TileDescDeco + @string/City_TileDescEmptySP + + Agua fría oscura. + Hay viejas manchas de sangre en el suelo. + Esto es probablemente un vestigio de una biblioteca de la prisión. Podría quemar? + + Agua turbia + Un musgo húmedo amarillento cubre el suelo. + La estantería está repleto de libros inútiles baratos. Podría quemar? + + + + + Seleccione una semilla para lanzar + + Abismo + Sí, ya sé lo que estoy haciendo + No, he cambiado de opinión + ¿De verdad quieres saltar al abismo? Usted probablemente puede morir. + Caíste a la muerte ... + + Qué estás haciendo aquí?! + Al tratar de leer el letrero que estalla en llamas verdosas. + + No sobreestimar su fuerza, el uso de armas y armaduras que puede manejar. + No todas las puertas en la mazmorra son visibles a primera vista. Si usted está atascado, buscar puertas ocultas. + Recuerde, que el aumento de su fuerza no es la única forma de acceder a un mejor equipo. Usted puede ir a otro lado, la reducción de su requisito de resistencia con Pergaminos de actualización. + Usted puede pasar su oro en tiendas en los niveles más profundos de la mazmorra. El primero está en el sexto nivel. + Tenga cuidado con los Goo! + Tienda Pixel. Todo lo que necesita para la aventura con éxito! + Identifique sus pociones y pergaminos tan pronto como sea posible. No lo posponga hasta el momento en que realmente los necesita. + Tener hambre no hace daño, pero muerto de hambre hace daño. + Ataque sorpresa tiene una mejor oportunidad de éxito. Por ejemplo, se puede tender una emboscada a tu enemigo detrás de una puerta cerrada cuando se sabe que se acerca. + No deje el Tengu huir! + Tienda Pixel. Gastar dinero. Vivir más tiempo. + Cuando eres atacado por varios monstruos al mismo tiempo, tratar de retirarse detrás de una puerta. + Si está quemando, no se puede apagar el fuego en el agua mientras levitando. + No hay sentido en posesión de más de un Ankh, al mismo tiempo, debido a que los perderá a resucitar. + PELIGRO! Maquinaria pesada puede causar lesiones, pérdida de extremidades o la muerte! + Tienda Pixel. Una vida más segura en la prisión. + Al actualizar un arma encantada, hay una oportunidad de destruir ese encantamiento. + Armas y armaduras se deterioran más rápido que las varitas y anillos, pero hay más formas de arréglalo. + La única forma de obtener un Pergamino de Limpieza es para recibirlo como un regalo de los espíritus de las mazmorras. + No se permiten armas en presencia de Su Majestad! + Tienda Pixel. Precios especiales para cazadores de demonios! + + + + + + La trampa emite un sonido penetrante que hace eco a lo largo de la mazmorra! + + trampa de rayo + Usted fue matado por una descarga de una trampa de rayo ... + + + + + Usted no sabe lo que hay. + Seleccione una celda para examinar + + + + + + + 0 + \ No newline at end of file diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml new file mode 100644 index 0000000000..3242ab8d02 --- /dev/null +++ b/res/values-fr/strings.xml @@ -0,0 +1,1657 @@ + + + + Pixel Dungeon + + + + + Jouer + Meilleurs scores + Médailles + A propos + + Code & graphiques: Watabou\nMusic: Cube_Code\n\nCe jeu est inspiré par Brian Walker\'s Brogue. Essayez-le sur Windows, Mac OS ou Linux - il est génial! ;)\n\nS\'il vous plaît visitez le site officiel pour plus d\'info: + pixeldungeon.watabou.ru + Traduction: Rémi Schneider/Emmanuel Dempuré/Bastien/Nikolay/rodriformiga + rodriformiga@gmail.com + Envoyer un E-Mail + + Meilleures parties + Nombre de jeux remportés/joués:\u0020 + Aucune partie n\'a encore été jouée. + Pas d\'informations supplémentaires + + Vos médailles + + Charger la partie + Nouvelle partie + Effacer partie en cours + Etage: %1$d\nNiveau: %2$d + Voulez vous vraiment commencer une nouvelle partie? + Votre progression actuelle sera perdue. + Oui, une nouvelle partie + Non, retour au menu principal + Pour débloquer ce personnage, vainquez le 3e boss avec tous les autres personnages + Pour débloquer les \"Défis\", finissez le jeu avec n\'importe quel personnage. + + Descente... + Montée... + Chargement... + Résurrection... + Retour... + Chute... + Fichier introuvable. Parce que voilà... + Quelque chose n\'a pas été... + + Bien des héros de tous les horizons se sont aventurés dans le donjon avant vous. Quelques uns en sont ressortis avec des trésors et des artefacts magiques, la plupart n\'en sont jamais revenus. Mais aucun d\'entre eux n\'a réussi à retrouver l\'amulette de Yendor, qui serait cachée dans les profondeurs du donjon. Vous vous considérez prêt à relever le défi, mais plus important encore, vous sentez que la chance vous sourit. Il est temps de commencer votre propre aventure ! + + A l\'aventure! + Je ne suis pas encore prêt + Vous la tenez enfin dans vos mains, l\'amulette de Yendor. En utilisant ses pouvoirs, vous pourriez gouverner le monde ou y apporter la paix et la prospérité. De toutes façons, votre vie sera changée à jamais et ce jeu prendra fin ici. A moins que vous ne préfériez rester un simple mortel pour quelque temps encore. + + Bienvenue au %de étage de Pixel Dungeon! + Re-bienvenue au %de étage de Pixel Dungeon! + Soyez prudent, le donjon est encore plus dangereux pendant la nuit! + Vos pas résonnent à travers le donjon. + Vous entendez de l\'eau éclabousser autour de vous. + Vous sentez un épais relent de végétation. + L\'atmosphère de cet endroit vous indique que cet étage vous cache beaucoup de secrets. + + + + ennemi + %1$s frappe %2$s + %s vous a tué... + %1$s avez vaincu %2$s + %1$s %2$s votre attaque + %1$s %2$s l\'attaque de %3$s + La douleur libère %s de la paralysie + esquivé + empoisonné + contrôle perdu + ralenti + vision + esprit + paralysé + effrayé + enraciné + estropié + hémorragie + étourdi + invisible + + vous + Personne ne ressort de Pixel Dungeon si facilement. + Niveau supérieur! + Bienvenue au niveau %d ! Vous êtes désormais en meilleure santé et plus concentré. Il vous est plus facile de toucher vos ennemis et d\'esquiver leurs attaques. + Vous avez %s + Il y a autre chose ici + Ce coffre est verrouillé et vous n\'en avez pas la clé + Vous n\'avez pas la bonne clé + Vous remarquez quelque chose + ... + recherche + Vous prenez feu! + Vous êtes paralysé! + Vous êtes empoisonné! + Le limon caustique vous ronge les chairs. Rincez-le! + Vous ne pouvez pas bouger! + Vous vous sentez affaibli! + Vous êtes aveuglé! + Vous devenez furieux! + furieux + Vous êtes sous le charme! + Vous êtes estropié! + Vous saignez! + Tout tourne autour de vous! + + guerrier + mage + gredin + chasseresse + + Les guerriers commencent avec 11 points de force. + Les guerriers commencent avec une épée courte unique. Celle-ci pourra être \"reforgée\" pour améliorer une autre arme de mélée. + Les guerriers sont moins efficaces avec les armes à distance. + Chaque ration redonne un peu de santé lors de sa consommation. + Les potions de force sont identifiées dès le début. + + + Les mages commencent avec un unique sceptre de missiles magiques. Celui-ci pourra être \"désenchanté\" pour améliorer un autre sceptre. + Les mages rechargent leurs sceptres plus vite. + Lors de sa consommation, une ration redonnera 1 charge à tous les sceptres de l\'inventaire. + Les mages peuvent utiliser leurs sceptres comme armes de mélée. + Les parchemins d\'identification sont identifiés dès le début. + + + Les gredins commencent avec un anneau des ténèbres +1. + Les gredins identifient le type d\'un anneau en l\'équipant. + Les gredins sont plus à l\'aise avec les armures légères, ils esquivent mieux quand ils en portent une. + Les gredins détectent plus facilement les pièges et les portes cachées. + Les gredins survivent plus longtemps sans manger. + Les parchemins de repérage magique sont identifiés dès le début. + + + Les chasseresses ne commencent qu\'avec 15 points de vie. + Les chasseresses commencent avec un unique boomerang améliorable. + Les chasseresses sont douées lors de l\'utilisation des armes à distance et font des dommages supplémentaires en fonction de leur force quand elles les utilisent. + Les chasseresses gagnent plus de points de vie en buvant la rosée. + Les chasseresses détectent les monstres à proximité même s\'ils sont cachés par des obstacles. + + + gladiateur + Une attaque réussie avec une arme de mélée permet au _Gladiateur_ de commencer un combo, durant lequel chaque nouvelle attaque réussie inflige plus de dégâts. + berzerk + Quand il est sévèrement blessé, le _Berzerker_ entre dans un état de furie sauvage et augmente significativement les dégâts qu\'il inflige. + sorcier + Après avoir tué un ennemi, le _Sorcier_ consomme son âme. Cela soigne ses blessures et satisfait sa faim. + mage de bataille + Quand il se bat avec un sceptre à la main, le _Mage de bataille_ inflige des dommages supplémentaires en fonction du nombre de charges du sceptre. Chaque attaque réussie restaure 1 charge à ce sceptre. + assassin + Quand il fait une attaque surprise, l\'_Assassin_ inflige des dommages supplémentaires à sa cible. + coureur + Le _Coureur_ se déplace presque deux fois plus vite que la plupart des monstres. Quand il court, le coureur est beaucoup plus dur à toucher. Mais pour cela, il ne doit pas être encombré et ne pas être affamé. + sniper + Les _Snipers_ sont capables de détecter les points faibles dans l\'armure d\'un ennemi, ignorant cette protection lors de l\'utilisation d\'armes à distance. + gardienne + Les _Gardiennes_ ont une forte connexion avec les forces de la nature, ce qui leur donne la possibilité de collecter de la rosée et des graines sur les plantes. Fouler des herbes hautes leur octroie par ailleurs un bonus d\'armure temporaire. + + + + Médaille obtenue : %s + Nouvelle super médaille : %s + Nouvelle médaille : %s + 10 ennemis vaincus + 50 ennemis vaincus + 150 ennemis vaincus + 250 ennemis vaincus + 100 pièces d\'or collectées + 500 pièces d\'or collectées + 2500 pièces d\'or collectées + 7500 pièces d\'or collectées + Niveau 6 atteint + Niveau 12 atteint + Niveau 18 atteint + Niveau 24 atteint + Toutes les potions identifiées + Tous les parchemins identifiés + Tous les anneaux identifiés\" + Tous les sceptres identifiés\" + Tous les parchemins, potions, anneaux et sceptres identifiés + + + + Tous les sacs achetés + Brûlé à mort + Mort par empoisonnement + Asphyxié par des gaz toxiques + Mort de faim + Mort par un glyphe + Mort suite à une chute + Mort par le feu, le poison, les gaz toxiques et la faim + + + + + 1er boss vaincu + 2e boss vaincu + 3e boss vaincu + 4e boss vaincu + 1er boss vaincu par Guerrier, Mage, Gredins & Chasseresses + + + + + + + + + 3e boss vaincu par Gladiateur, Berzerk, Sorcier, Mage de Bataille, Coureur, Assassin, Sniper & Gardienne + Anneau du marchandeur obtenu + Anneau d\'épines obtenu + 13 points de force obtenus + 15 points de force obtenus + 17 points de force obtenus + 19 points de force obtenus + 10 rations consommées + 20 rations consommées + 30 rations consommées + 40 rations consommées + + + + + Objet de niveau 3 acquis + Objet de niveau 6 acquis + Objet de niveau 9 acquis + Objet de niveau 12 acquis + + + + + + Tous les monstres rares vaincus + + + + + Amulette de Yendor obtenue + Amulette de Yendor obtenue par tous les personnages + Combo de 7 coups + 3 potions préparées + 6 potions préparées + 9 potions préparées + 12 potions préparées + Niveau complété sans avoir tué un seul monstre + Monstre tué par une arme macabre + 6 piranhas tués + 5 monstres tués pendant la nuit + 10 parties jouées + 100 parties jouées + 500 parties jouées + 2000 parties jouées + Fin heureuse + Challenge réussi + Merci pour votre soutien! + + + + + Au régime + Fidèle est mon armure + Pharmacophobie + Terre stérile + Intelligence de l\'essaim + Dans les ténèbres + Runes interdite + + + + + Puits de Santé + Puits de Conscience + Puits de Transmutation + Chambre Sacrificielle + Chaudron d\'Alchimie + Jardin + Statue Animée + Fantôme Triste + Vieux Fabricant de Sceptres + Troll Forgeron + Diablotin Ambitieux + + + + Tué par %1$s au niveau %2$d + Tué par le %1$s au niveau %2$d + Tué par votre propre %1$s au niveau %2$d + Tué par le %1$s au niveau %2$d + Tué par l\'explosion d\'une bombe au niveau %d + Tué par une décharge du %1$s au niveau %2$d + Brûlé à mort au niveau %d + Mort de faim au niveau %d + Empoisonné au niveau %d + Asphyxié au niveau %d + Mort d\'anémie au niveau %d + Tué par le limon toxique au niveau %d + Est tombé au niveau %d + A obtenu l\'amulette de Yendor + + + + + Ok, un marché est un marché, voilà c\'que je peux faire : je peux te reforger 2 objets et t\'en faire un de meilleure qualité. + Choisissez un objet à reforger + Les reforger + + Potions + Parchemins + Catalogue + + Défis + + Quelle voie choisirez-vous? + Je choisirai plus tard + Voulez-vous respécialiser le %s? + Oui, je veux respécialiser + Peut-être plus tard. + + Spécialisation + + ERREUR + + Paramètres + Défis + Classement + Nouvelle partie + Menu principal + Sortie Jeu + Revenir à la partie + + Stats + Bonus + Expérience + Force + Santé + Or collecté + Etage maximum + Niveau %1$d %2$s + Catalogue + Journal + + Oh oui ! Vous êtes mon héros !\nA propos de votre récompense, je n\'ai pas d\'argent sur moi, mais j\'ai quelque chose de mieux pour vous. Voici mon héritage familial: un anneau ! Mon grand-père l\'a volé sur le doigt d\'un paladin mort. + Prendre l\'anneau + + Il n\'y a rien ici. + + Coffre + Coffre verrouillé + Coffre de cristal + Tombe + Restes de squelette + Vous ne saurez pas ce qu\'il y a dedans tant que vous ne l\'ouvrirez pas ! + Mais vous aurez besoin d\'une clé dorée pour l\'ouvrir. + Vous pouvez voir %s dedans, mais pour ouvrir le coffre, vous aurez besoin d\'une clé dorée. + L\'ancienne tombe pourrait renfermer quelque chose d\'utile, mais son propriétaire refusera certainement que vous vérifiez. + Voici tout ce qui reste de l\'un de vos prédécesseurs. Il vaudrait peut-être mieux vérifier s\'il n\'y a pas des objets de valeur. + + Journal + + Langues + + Impossible de charger plus d\'informations + Stats + Objets + Médailles + Niveau %1$d %2$s + Défis + Santé + Force + Durée de la partie + Etage maximum + Ennemis tués + Or collectées + Rations mangées + Potions fabriquées + Ankhs utilisés + + Vous êtes mort, mais vous recevez une chance de plus de finir ce donjon. La prendrez vous ? + Oui, je me battrai ! + Non, j\'abandonne + + Arme du fantôme + Armure du fantôme + Adieu, aventurier! + + + + - + Zoom par défaut + Intensifier l\'UI + Mode immersif + Langue + Musique + Effets sonores + Luminosité + Deuxième raccourci + Passer en vue portrait + Passer en vue paysage + + Le donjon se trouve juste sous la ville, ses niveaux les plus élevés sont en fait le système des égouts de la ville. Etant officiellement une partie de la ville, ces niveaux ne sont pas si dangereux. On ne peut pas dire que c\'est un endroit sûr, mais au moins, vous n\'aurez pas affaire à de la magie noire par ici. + Il y a des années, une prison souterraine fut bâtie ici pour les criminels les plus dangereux. A l\'époque, cela semblait être une bonne idée, car il était très dur de s\'échapper de cet endroit. Mais un miasme de magie noire ne tarda pas à venir des profondeurs, rendant prisonniers et gardes fous à lier. Au final, la prison fut abandonnée, même si certains condamnés sont restés enfermés dans ces murs... + Les grottes, qui s\'étendent sous la prison abandonnée, ne sont que peu peuplées. Elles sont top profondes pour être exploitées par la ville, et sont trop pauvres en minéraux pour susciter l\'intérêt des nains. Il y avait un avant-poste d\'échange quelque part sur le chemin entre les deux nations, mais il a péri depuis le déclin de la métropole naine. Seuls les gnolls et autres créatures souterraines résident ici désormais. + La métropole naine était la plus grande de toutes les cités-états naines. Lors de son apogée, l\'armée mécanique des nains repoussa avec succès l\'invasion du dieu ancien et son armée de démons. Mais on raconte que les guerriers qui en sont revenus ont apportés les graines de la corruption avec eux, et que la victoire n\'était que le début de la fin de ce royaume souterrain. + Ces niveaux sont les vestiges des banlieues de la métropole naine. Après la victoire coûteuse dans la guerre contre l\'ancien dieu, les nains furent trop affaiblis pour se débarrasser des démons restants. Peu à peu les démons se sont attachés à cet endroit qu\'on appelle désormais le Hall des Démons. Très peu d\'aventuriers ont réussi à descendre aussi loin... + + A VENDRE : %1$s - %2$dor + Acheter pour %dor + Vendre pour %dor + Vendre 1 pour %dor + Vendre tout pour %dor + En fait non + Vous avez vendu votre %1$s pour %2$dor + Vous avez acheté %1$s pour %2$dor + + Oh, je vois que vous avez réussi ! J\'espère ne pas vous avoir trop dérangé. Comme promis, vous pouvez prendre l\'un de mes sceptres de haute qualité. + Sceptre pour le combat + Autres sceptres + Bonne chance dans votre quête, %s ! + + + + Choisissez un objet à mettre en raccourci + + + + + smth + POSER + LANCER + Vous n\'avez plus de place pour %s + Choisissez la direction du lancer + En raison de l\'utilisation fréquente, votre %s a rompu. + En raison de l\'utilisation fréquente, votre %s va se briser bientôt. + + EQUIPER + ENLEVER + Vous ne pouvez pas enlever la %s maudite! + + Amulette de Yendor + FIN DU JEU + L\'amulette de Yendor est le plus puissant des artefacts d\'origine inconnue. On dit que l\'amulette est capable de satisfaire tous les souhaits si la volonté de son porteur est suffisante pour la \"persuader\" de le faire. + + Ankh + Cet ancien symbole d\'immortalité offre la vie après la mort. La résurrection implique cependant la perte de tous les objets non-équipés. + + kit pour armure + APPLIQUER + Utiliser cet ensemble de petits outils et matériaux permet à quiconque de transformer n\'importe quelle armure en \"armure épique\" qui gardera les propriétés de l\'armure originale, mais offrira à son porteur une capacité spéciale en fonction de sa classe. Aucune compétence de couture, de travail du cuir, ou de forge n\'est requise. + Choisissez une armure à améliorer + Vous utilisez votre kit pour améliorer votre %s + + bombe + Ceci est une relativement petite bombe, remplie de poudre noire. Idéalement, son fusible est allumé automatiquement lorsque la bombe est levée. + Vous vous tué avec une bombe... + + rosée + Une goutte de rosée cristalline + + pot à rosée + BOIRE + Vous pouvez stocker la rosée en excès dans ce petit récipient pour la boire plus tard. Si le pot est plein, il sera automatiquement consommé lors des situations délicates. + Vous videz le pot à rosée pour soigner vos blessures. + Vous mettez la rosée dans le pot. + Votre pot à rosée est plein ! + Votre pot à rosée est vide ! + + C\'est un mime! + + pot de miel + BRISER + Il n\'y a pas beaucoup de miel dans ce petit pot de miel, mais il ya une abeille d\'or là-bas et il ne veut pas le quitter. + + or + Collectez les pièces d\'or pour les dépenser aux marchés plus tard. + Une pile de %d pièces d\'or + Une pièce d\'or. + + Vous grimacez alors que votre poing se resserre involontairement sur votre %s + + balise de lloyd + INSTALLER + REVENIR + La Balise de Lloyd est un dispositif magique complexe qui vous permet de revenir à un endroit que vous avez déjà visité. + Une forte aura magique vous empêche d\'utiliser la Balise de Lloyd ! + L\'aura psychique des créatures aux alentours vous empêchent d\'utiliser la Balise de Lloyd pour le moment. + La balise est bien installée à votre position, vous pourrez revenir ici n\'importe quand maintenant. + \n\nCette balise a été installée quelque part au %de étage du Pixel Dungeon. + + Manuel de spécialisation + Manuel de reespécialisation + LIRE + Ce livre de cuir usé n\'est pas très épais, mais vous avez l\'impression que vous pourriez en apprendre beaucoup grâce à lui. Dites vous juste que sa lecture pourrait prendre un certain temps. + Vous ne pouvez pas lire en étant aveuglé + Vous avez choisi la voie du %s ! + + torche + ALLUMER + C\'est un objet indispensable dans The Demon Halls, qui est connu pour son manque d\'éclairage. + + pierre d\'équilibre + APPLIQUER + En utilisant une pierre d\'équilibre, vous pouvez équilibrer une arme de mélée pour augmenter sa vitesse ou sa précision. + Choisissez une arme à équilibrer + Vous équilibrez votre %s pour la rendre plus rapide + Vous équilibrez votre %s pour la rendre plus précis + Comment voulez vous équilibrer votre %s ? + Pour la vitesse + Pour la précision + En fait non + + + + + PLANTER + Lancez cette graine à l\'endroit voulu pour faire pousser %1$s.\n\n%2$s + graine de %s + + Herberêve + Toucher de l\'herberêve lui fera sécréter un nuage de gaz scintillant et qui causera la confusion à celui qui le respirera. + + Terracine + Quand une créature touche une Terracine, ses racines créent une sorte d\'armure autour d\'elle. + Armure végétale + + Pâlefeuille + Toucher une Pâlefeuille téléportera n\'importe quelle créature à un endroit aléatoire de l\'étage actuel. + + Fleur de feu + Quand quelque chose touche la Fleur de feu, elle explose dans une gerbe de flammes. + + Champiglace + Le champiglace va, au toucher, relâcher des spores qui vont geler tout ce qui se trouve dans les environs. + + Rougebaie + Les baies de cet arbrisseau ont le goût délicieux de la mort. + La graine pousse un rugissement qui fait écho dans le donjon! + + Tristemousse + La tristemousse est une fleur (pas de la mousse) avec des pétales tranchantes et vénéneuses. + + Herbesoleil + L\'Herbesoleil est renommée pour les propriétés curatives de sa sève. + Soin végétal + + + + + votre %s vous enserre douloureusement + vous vous êtes assez familiarisé avec votre %1$s pour l\'identifier. C\'est %2$s. + %1$s :%2$d + %1$s brisée :%2$d + L\'interaction entre les différents types de magie a effacé le glyphe de cette armure! + \n\nCette %1$s permet une absorption de dommages jusqu\'à \"%2$d\" points par attaque. + \n\nVotre force est inadéquate, vous êtes ralenti et votre défense est diminuée. + \n\nVotre force est inadéquate, porter cette armure vous ralentira et diminuera votre défense. + \n\nUne %1$s typique permet une absorption des dommages jusqu\'à %2$d points par attaque et requiert %3$d points de force. + Cette armure est probablement trop lourde pour vous. + Il est enchanté. + \n\nVous portez l\' %1$s%2$s. + , et parce qu\'elle est maudite, vous n\'arrivez pas à l\'enlever + \n\nVous pouvez ressentir une énergie maléfique cachée dans l\' %s. + + Ca a l\'air génial! + Votre santé est trop basse! + Vous avez besoin de porter cette armure pour utiliser son pouvoir spécial! + + armure de vêtements + Cette armure légère offre une protection basique. + + cape de la chasseresse + Une chasseresse équipée de cette cape peut créer de multiples lames spectrales. Chacune de ces lames ciblera un seul ennemi dans le champ de vision de la chasseresse, infligeant des dommages en fonction de son arme de mélée actuellement équipée. + LAMES SPECTRALES + Aucun ennemi en vue + Seules les chasseresses peuvent porter cette armure! + + armure de cuir + Armure faite de peaux de monstre tannées. Un peu plus lourde que l\'armure de vêtements, mais offre une meilleure protection. + + robe de mage + En portant cette magnifique robe, un mage peut lancer un sort de lave en fusion: tous les ennemis dans le champ de vision prendront feu et seront incapables de bouger. + LAVE EN FUSION + Seuls les mages peuvent porter cette armure! + + armure de maille + Des liens de métal joints ensemble forment une armure dure mais flexible. + + armure de plates + D\'énormes plaques de métal forment une tenue qui offre une protection sans égale pour tout aventurier assez fort pour supporter son poids colossal. + + costume de gredin + En étant vêtu de ce sombre attirail, un gredin peut effectuer un mouvement appelé \"La bombe de fumée\" (même si aucun explosif n\'est utilisé): il aveugle les ennemis qui peuvent le voir et saute sur le côté. + BOMBE DE FUMEE + Seuls les gredins peuvent porter cette armure! + Vous pouvez seulement sauter à un endroit libre dans votre champ de vision + Choisissez l\'endroit où vous voulez sauter + + armure d\'écailles + Les écailles métalliques cousues sur une veste en cuir créent une armure flexible, mais protectrice. + + armure du guerrier + Même si elle semble lourde, cette armure permet à un guerrier de faire un bond héroïque vers un endroit ciblé, écrasant et sonnant tous les ennemis alentour. + BOND HEROIQUE + Seuls les guerriers peuvent porter cette armure! + Choisissez la direction du bond + + + + + %s d\'affection + + %s d\'anti-entropie + + %s d\'auto-réparation + + %s de rebond + + %s de déplacement + + %s enchevêtrée + + %s de métabolisme + + %s de multiplicité + + %s de potentiel + + %s fétide + + %s visqueuse + %d différée + l\'enchantement de la viscosité + Dommages différé (%d) + L\'enchantement de la viscosité vous tué... + + + + + OUVRIR + + anneau de clé + C\'est un anneau de clé en cuivre, qui vous permettra de transporter toutes vos clés séparément du reste de vos affaires. + + étui à parchemins + Vous pouvez placer n\'importe quel nombre de parchemins dans ce contenant cylindrique. Cela économisera de la place dans votre sac à dos et épargnera vos parchemins du feu. + + Poche à graines + Cette petite poche en velours vous permet de stocker toutes vos graines. Très pratique. + + Hotte à sceptres + La fine hotte est faite du cuir d\'un animal exotique. Elle vous permettra de porter jusqu\'à %d sceptres. + + + + + ration de nourriture + Rien de luxurieux là-dedans: de la viande séchée, des biscuits, etc. + MANGE + Cette nourriture avait un goût délicieux! + + viande grillée + C\'est un steak décent, apparemment. + + carpaccio glacé + C\'est un morceau de viande gelée. La seule manière de la manger est de la couper en fines tranches. Et c\'est étonnamment bon. + Vous voyez vos mains devenir invisibles! + Vous sentez votre peau durcir! + Rafraîchissant! + Vous vous sentez mieux! + + viande mystérieuse + A manger à vos risques et périls! + Oulà c\'est chaud! + Vous ne sentez plus vos jambes! + Vous ne vous sentez pas bien. + Vous êtes repu. + Cette nourriture avait un goût... bizarre. + + ration hors de prix + Ca ressemble à une ration normale mais en plus petit. + Cette nourriture était bonne. + + pâté en croute + L\'authentique pâté en croute de Cornouailles, avec sa farce traditionnelle de boeuf et de pommes de terre. + + + + + clé dorée + Les encoches de cette clé dorée sont petites et complexes. Peut-être que ça peut ouvrir une serrure de coffre? + + clé de fer + Les encoches de cette vieille clé en fer sont usés, le temps a fait souffrir son cordon de cuir. Quelle porte pourrait-elle ouvrir? + Clé de fer du %de étage + + clé squelette + Cette clé à un air grave: sa tête est taillée en forme de crâne. Elle ouvrira sûrement une porte importante. + + + + + potion %s + Cette fiole contient un liquide %s. Qui sait ce qu\'il fera quand il sera bu ou lancé? + BOIRE + Potion dangereuse! + Potion bénéfique + Oui, je sais ce que je fais + Non, j\'ai changé d\'avis + Etes vous sûr de vouloir la boire? En général, on jette ce genre de potions vers les ennemis. + Etes vous sûr de vouloir la jeter? En général, c\'est plus logique de la boire. + La fiole éclate et du liquide %s éclabousse le sol, inoffensif. + + turquoise + cramoisi + azur + jaune + doré + magenta + charbonneux + ivoire + ambré + noir-brun + indigo + argenté + + + Potion d\'Expérience + Les récits d\'une multitude de bataille réduits sous forme liquide. Ce breuvage augmentera instantanément votre niveau d\'expérience. + + Potion de Gel + Exposé à l\'air extérieur, ce produit chimique va s\'évaporer en un nuage glaçant toutes les créatures qui le toucheront. Elles resteront alors gelées sur place, incapable de bouger et d\'agir. + + Potion de Soins + Un élixir qui vous redonnera instantanément toute votre santé et vous guérira du poison. + Toutes vos blessures sont soignées. + + Potion d\'Invisibilité + Boire cette potion vous rendra temporairement invisible. Les ennemis ne pourront plus vous voir. Attention: attaquer un ennemi, comme utiliser un sceptre ou un parchemin devant les yeux de vos ennemis dissipera cet effet. + Vous ne voyez plus vos mains! + + Potion de Lévitation + Boire ce curieux liquide vous fera léviter dans les airs, capable de passer sans efforts par-dessus les pièges. Malheureusement, vous ne pourrez passer outre les flammes et les gaz... + Vous flottez dans les airs! + + Potion de Flammes Liquide + Cette fiole contient un composé instable qui explosera violemment et s\'enflammera quand il sera exposé à l\'air libre. + + Potion de Vigueur + Ce puissant liquide parcourra vos muscles, augmentant votre force d\'un point et votre santé de 5 points en permanence. + Votre corps acquiert une vigueur nouvelle. + +1 for, +5san + + Potion de Vision de l\'Esprit + Après avoir bu ça, votre esprit sera en accord avec la signature psychique des créatures à distance, vous permettant de sentir les présences biologiques à travers les murs. Cette potion vous permettra aussi de voir à travers les murs et les portes à proximité. + Vous pouvez ressentir l\'esprit des autres créatures! + Vous apercevez mentalement que vous êtes tout seul à cet étage. + + Potion de Gaz Paralysants + Exposé à l\'air, le liquide de cette fiole se vaporisera en une brume jaunâtre et engourdissante. Quiconque inhalera ce nuage sera instantanément paralysé, incapable de bouger pendant un certain temps. Cet objet peut être lancé à des ennemis au loin pour les attraper dans les effets du gaz à distance. + + Potion de Purification + Ce réactif neutralisera rapidement tous les gaz dangereux dans la zone d\'effet. Le boire vous donnera une immunité temporaire à ce genre de gaz. + Vous sentez une pureté inhabituelle dans l\'air. + Vous ne sentez plus rien! + + Potion de Force + Ce puissant liquide parcourra vos muscles, augmentant en permanence votre force d\'un point. + Votre corps acquiert une force nouvelle. + +1 for + + Potion de Gaz Toxiques + Déboucher ou secouer ce gaz pressurisé fera exploser son contenu en un nuage de gaz vert mortel. Vous devriez lancer cette potion à des ennemis distants plutôt que de la déboucher à la main. + + + + + poussière des morts + Ce tas de poussière cadavérique ne se démarque pas plus qu\'un tas de poussière lambda. Mais bon, vous sentez qu\'il vaudrait mieux vous en débarrasser au plus vite. + + minerai noir + Ce métal n\'est pas appelé noir à cause de sa couleur (en fait, on dirait de l\'or), mais il fond à la lumière du jour, le rendant inutile à la surface. + + rose séchée + La rose est fanée depuis longtemps, mais elle a réussi à garder toutes ses pétales. + + jeton de nain + Beaucoup de nains et de créations naines portent ces petits bouts de métal, on n\'en connaît cependant pas l\'utilité. Peut-être que ce sont des bijoux ou des espèces de cartes d\'identités. Les nains sont bizarres. + + poisson fantôme + MANGE + Vous pouvez à peine voir ce minuscule poisson translucide dans l\'air. Dans l\'eau, il devient effectivement invisible. + Vous ne voyez plus vos mains! + + pioche + C\'est un outil grand et robuste fait pour casser la pierre. Il pourrait peut-être servir d\'arme. + MINER + Il n\'y a aucune veine de minerai noir à proximité + + crâne de rat géant + Cela aurait pu être un beau trophée de chasse, mais l\'odeur qui s\'en dégage est trop désagréable pour être accroché sur un mur. + + + + + anneau de %s + Ce cercle de métal est orné d\'une grosse gemme %s qui scintille dans les ténèbres. Qui sait quels effets cela peut avoir mis au doigt? + %s brisée + Vous vous êtes assez familiarisé avec votre %1$s pour l\'identifier. C\'est %2$s. + Déséquiper un anneau + Vous ne pouvez porter deux anneaux à la fois. Déséquipez une de vos bagues équipées. + + diamant + opale + grenat + rubis + améthyste + topaze + onyx + tourmaline + émeraude + saphir + quartz + agate + + Votre %s se resserre douloureusement autour de votre doigt + %1$s\n\nL\'%2$s est sur votre doigt %3$s. + , et parce qu\'il est maudit, vous n\'arrivez pas à l\'enlever + %1$s\n\nVous ressentez une magie maléfique cachée dans l\'%2$s. + C\'est un %s + + Anneau de Précision + Cet anneau augmente vos chances de toucher les ennemis. + + Anneau de Détection + Cet anneau permet à son porteur de voir les pièges et les portes cachées sans prendre le temps de chercher. Les anneaux de détection maudits engourdiront vos sens, rendant la détection des pièges et des portes cachées plus difficiles, même en les cherchant activement. + + Anneau des Éléments + Cet anneau octroie une résistance à différents éléments, tels que le feu, l\'électricité, les gaz, etc. Et réduit aussi la durée des effets négatifs. + + Anneau d\'Esquive + Cet anneau augmente vos chances d\'esquiver les attaques ennemies. + + Anneau du Marchandeur + En fait, cet anneau n\'a aucun effet magique, mais il montrera aux marchands que son propriétaire fait partie de la guilde des voleurs. Habituellement, ils se pressent de faire des réductions pour obtenir la garantie d\'une immunité temporaire. Améliorer cet anneau ne donnera aucun bonus supplémentaire. + + Anneau de Célérité + Cet anneau accélère le cours du temps pour son porteur, lui permettant de tout faire un peu plus vite. + + Anneau de l\'Herbier + Cet anneau augmente vos chances de collecter la rosée et les graines des hautes herbes. + + Anneau de Régénération + Cet anneau augmente les propriétés régénératrices du corps, permettant à son porteur de se refaire une santé plus rapidement. Les anneaux de régénération maudits arrêteront la régénération naturelle du corps. + + Anneau de Pouvoir + Vos sceptres deviendront plus puissants dans le champ d\'énergie qui émane de cet anneau. Les anneaux de pouvoir maudits vont les affaiblir à la place. + + Anneau de Satiété + Porter cet anneau vous permettra de survivre plus longtemps à la famine. Les anneaux de satiété maudits auront l\'effet inverse. + + Anneau des Ténèbres + Les ennemis auront tendance à vous remarquer moins souvent si vous portez cet anneau. Les anneaux des ténèbres maudits vous feront remarquer par des ennemis qui en temps normal ne vous auraient pas vus. + + Anneau d\'Épines + Bien que cet anneau de donne pas de vraies épines, un ennemi qui vous attaque sera lui même blessé par une partie des dommages qu\'il vous a infligés. Améliorer cet anneau ne donne aucun bonus supplémentaire. + + + + + parchemin \"%s\" + Le parchemin est couvert d\'écritures indéchiffrables, et porte le titre de rune %s. Qui sait ce que ça fera une fois lu à voix haute? + LIRE + Vous ne pouvez pas lire un parchemin en étant aveugle + + KAUNAN + SOWILO + LAGUZ + YNGVI + GYFU + RAIDO + ISAZ + MANNAZ + NAUDIZ + BERKANAN + ODAL + TIWAZ + + + Choisissez un objet + Voulez vous vraiment annuler l\'effet de ce parchemin? Il sera consumé de toutes façons. + Oui, je suis affirmatif + Non, j\'ai changé d\'avis + + Parchemin de Défi + Quand il est lu à voix haute, ce parchemin va pousser un rugissement de défi qui réveillera tous les monstres et les attirer vers le lecteur. + Le parchemin pousse un rugissement de défi sur tout l\'étage! + + Parchemin d\'Identification + Révèle en permanence tous les secrets d\'un objet. + Choisissez un objet à identifier + C\'est %s + + Parchemin de Berceuse + Une mélodie apaisante endormira toutes les créatures de votre champ de vision, vous donnant l\'opportunité de fuir ou de faire une attaque surprise. + Le parchemin fredonne une mélodie apaisante. + Le parchemin fredonne une mélodie apaisante et le %s s\'endort ! + Le parchemin fredonne une douce mélodie et les monstres s\'endorment ! + + Parchemin de Vision Magique + En lisant ce parchemin, une image d\'une clarté cristalline se gravera dans votre mémoire, vous alertant de la disposition précise des pièces de l\'étage et révélant tous ses secrets. La localisation des objets et des créatures restera inconnue. + Vous connaissez maintenant tout de l\'étage. + + Parchemin d\'Images Miroir + L\'incantation sur ce parchemin créera des jumeaux illusoires du lecteurs, qui pourchasseront ses ennemis. + + Parchemin de Rafale Psionique + Le parchemin contient une énergie destructrice, qui peut être canalisée psioniquement pour infliger des dommages énormes aux créatures dans le champ de vision. Le flash qui accompagne la rafale aveuglera temporairement tout le monde dans la zone d\'effet, le lecteur compris. + + Parchemin de Recharge + Le pouvoir magique contenu dans ce parchemin va , une fois relâché, recharger complètement tous les sceptres du lecteur. + une décharge d\'énergie parcourt vos affaire, rechargeant votre sceptre + une décharge d\'énergie parcourt vos affaires, rechargeant vos sceptres + une décharge d\'énergie parcourt vos affaires, mais rien ne se passe + + Parchemin de démystification + L\'incantation de ce parchemin va extirper instantanément toutes les malédictions qui pourraient empêcher le lecteur d\'enlever certains objets maudits. + Vos affaires brillent d\'une lumière purificatrice, et une énergie maléfique se disperse. + Vos affaires brillent d\'une lumière purificatrice, mais rien ne se passe. + + Parchemin de Téléportation + Le sort de ce parchemin téléportera instantanément le lecteur à un endroit aléatoire de l\'étage. Il peut être utilisé pour s\'échapper d\'une situation périlleuse, mais le lecteur malchanceux pourrait se retrouver dans un endroit encore plus dangereux. + Vous êtes téléporté en un clin d\'oeil. + La forte aura magique de cet endroit empêche la téléportation! + + Parchemin de Terreur + Un flash de lumière rouge va submerger de terreur toutes les créatures du champ de vision, qui fuiront. Attaquer un de ces fuyards dissipera l\'effet. + Le parchemin émet un flash brillant de lumière rouge + Le parchemin émet un flash brillant de lumière rouge et le %s s\'enfuit! + Le parchemin émet un flash brillant de lumière rouge et les monstres s\'enfuient! + + Parchemin d\'Amélioration + Le parchemin améliorera un objet, augmentant sa qualité. Un sceptre sera plus puissant et aura plus de charges; une arme infligera plus de dommages et atteindra plus souvent sa cible; une armure résistera à plus de coups; l\'effet dune bague s\'intensifiera sur son porteur. Les armes et les armures vont requérir aussi moins de force, et les éventuelles malédictions de l\'objet seront retirées. + Choisissez un objet à améliorer + votre %s a l\'air mieux maintenant + + Parchemin d\'Enchantement + Ce rouleau est capable d\'imprégner une arme ou une armure avec un enchantement aléatoire, lui accordant un pouvoir spécial. + Sélectionnez un objet enchantable + votre %s brille dans le noir + + Parchemin de Nettoyage + @string/Scroll_ACRead + Lisez ce parchemin pour déclencher la colère des esprits de donjon, tuant tout sur le niveau actuel. Eh bien, presque tout. Certaines des créatures plus puissantes peut-être pas touchés. + @string/Scroll_Blinded + + + + + Sceptre %s + ZAP + Cet épais sceptre %s est chaud au toucher. Qui sait ce qu\'il fera une fois utilisé? + Quand ce sceptre est utilisé comme arme de mélée, ses dommages moyens sont de %d points par coup. + Vous pouvez utiliser ce sceptre comme une arme de mélée. + Votre sceptre pétille, il ne doit plus avoir assez de charges + vous ne pouvez pas vous cibler vous-même! + Choisissez la direction ou zap + Vous êtes maintenant assez familier avec votre %s. + + de houx + d\'if + d\'ébène + de cerisier + de teck + de sorbier + de saule + d\'acajou + de bambou + pourpre + de chêne + de bouleau + + + Sceptre d\'Amok + La lumière mauve de ce sceptre va enrager la créature ciblée qui attaquera tout ce qui se trouve à proximité. + rien ne se passe + + Sceptre des Avalanches + Quand une décharge de ce sceptre atteint un mur (ou quelconque obstacle solide) il déclenche un éboulement, blessant et sonnant toutes les créatures dans la zone d\'effet. + Vous vous êtes tué sous les gravats de votre propre sceptre d\'avalanche... + + Sceptre de Scintillement + Ce sceptre vous téléportera dans la direction choisie. Les obstacles bloqueront la téléportation. + + Sceptre de Désintégration + Ce sceptre émet un rayon d\'énergie destructrice, qui traverse toutes les créatures qui lui font obstacle. Plus il touche de cibles, plus il leur inflige de dommages. + + Sceptre de Tirs Enflammés + Ce sceptre relâche des explosions de feu magiques. Elles brûleront toutes les zones inflammables, et blesseront et brûleront les créatures qu\'elles touchent. + Vous vous êtes tué avec votre propre Sceptre de Tirs Enflammés... + + Sceptre du Troupeau + Un petit coup de ce sceptre invoque un troupeau de moutons magiques, créant ainsi un obstacle temporaire impénétrable. + mouton + C\'est un mouton magique. Qu\'y a-t-il de si magique chez lui? On ne peut pas le tuer. Il restera là, en mâchant du foin, le regard vide, jusqu\'à ce qu\'il disparaisse par magie. + + Baa! + Baa? + Baa. + Baa... + Bee... + Ble... + + + Sceptre de Foudre + Ce sceptre invoque des arcs électriques mortels, qui infligent des dommages à plusieurs créatures qui se tiennent les unes à côté des autres. + Vous vous êtes tués avec votre propre sceptre de foudre... + + Sceptre de Projectiles Magiques + Ce sceptre lance des projectiles d\'énergie magique pure, infligeant des dommages moyens à une créature ciblée + DESENCHANTER + Vous vous êtes tué avec votre propre Sceptre de Projectiles Magiques + Choisissez un sceptre à améliorer + Vous avez désenchanté le sceptre de projectiles magiques et utilisé son essence magique pour améliorer votre %s + + Sceptre de Poison + Le vil souffle de ce morceau de bois tordu imprégnera sa cible avec un venin mortel. Une créature empoisonnée souffrira périodiquement jusqu\'à la fin de l\'effet. La durée de l\'effet augmente avec le niveau du sceptre. + rien ne se passe + + Sceptre de Repousse + \"Lorsqu\'une vie cesse, une nouvelle vie commence à grandir... Le cycle éternel pour toujours demeurera!\" + rien ne se passe + + Sceptre de Lenteur + Ce sceptre diminuera de moitié la vitesse d\'attaque et de déplacement de la créature atteinte jusqu\'à ce que l\'effet cesse. + rien ne se passe + + Sceptre de Atteindre + Cette sceptre utilitaire peut être utilisé pour saisir des objets à distance et de changer de place avec des ennemis. Les vagues de force magique de ce sceptre affecterons tout sur leur passage, activant les pièges, piétinant les hautes herbes, ouvrant les portes fermées et fermant celles qui sont ouvertes. + Vous avez transporté magiquement le %s dans votre sac + + Sceptre de téléportation + Le tir de ce sceptre téléportera une créature contre sa volonté à un endroit aléatoire de l\'étage. + %1$s avez téléporté %2$s quelque part + rien ne se passe + + + + + Vous vous êtes assez familiarisé avec votre %1$s pour l\'identifier. C\'est %2$s. + L\'interaction entre les différents types de magie a annulé l\'enchantement de cette arme! + %1$s :%2$d + %1$s brisée :%2$d + + + + + %s macabre + + %s enflammée + + %s d\'eldritch + + %s instable + + %s vampirique + + %s chanceuse + + %s etourdissante + + %s venimeuse + + %s choquant + + %s glaçante + + %s trempé + + + + + %1$s: Est une arme de mélée %2$s de rang %3$d. + + améliorée + dégradé + brisée + Ses dommages moyens sont de %d points par coup. + Ses dommages moyens sont typiquement de %1$d points par coup et elle requiert %2$d points de force. + Cette arme est sûrement trop lourde pour vous. + C\'est une arme plutôt %s. + rapide + lente + et + mais + précise + imprécise + Elle a été équilibrée pour la rendre plus rapide. + Elle a été équilibrée pour la rendre plus précise. + Elle est enchantée. + A cause de votre force insuffisante, la précision et la vitesse de vos attaques avec cette %s est diminuée. + Grâce à votre excès de force, les dommages de vos attaques avec cette %s sont augmentés. + Vous gardez la %1$s prête à l\'emploi%2$s. + , et à cause de sa malédiction, vous ne pouvez vous en défaire + Vous pouvez ressentir une magie maléfique qui se terre dans la %s. + + hache de bataille + L\'énorme tête en acier de cette hache de bataille impose un soulèvement intense à chaque coup. + + dague + Une dague de fer simple avec une poignée de bois bien ancrée. + + hallebarde + Une arme constituée d\'une lame d\'épée au bout d\'un bâton. + + poing américain + Un morceau de fer forgée pour le poing. + + épée longue + Cette lame imposante inflige de lourds dommages en utilisant son poids à son avantage. + + masse + La tête de fer de cette arme inflige des dommages considérables. + + gourdin + Un bâton de bois épais, ses extrémités sont chaussées avec du fer. + + épée courte + C\'est plutôt court, en effet, quelques centimètres de plus qu\'une dague. + REFORGER + Choisissez une arme à améliorer + vous reforgez votre épée courte pour améliorer votre %s + vous ne pouvez pas améliorer votre boomerang comme ça + + lance + Un bâton de bois fin surmonté d\'un morceau de fer pointu. + + épée + La longueur de la lame d\'acier, aiguisée comme un rasoir, brille et vous rassure. + + marteau de guerre + Peu de créatures peuvent supporter les coups écrasants de cette masse imposante de plomb et d\'acier, mais seuls les aventuriers les plus forts peuvent l\'utiliser efficacement. + + + + + Arme à distance + Oui, je sais ce que je fais + Non, j\'ai changé d\'avis + Voulez vous vraiment vous en équiper en tant qu\'arme de mélée? + \n\nLes dommages moyens de cette arme sont de %d points par coup. + A cause de votre manque de force, la précision et la vitesse de vos coups avec cette %s diminuent. + Grâce à votre excès de force les dommages de vos attaques avec cette %s sont augmentés. + \n\nVous maintenez la %s prête à l\'emploi. + + boomerang + Cette arme de jet plate et incurvée retournera dans les mains de son propriétaire après avoir été lancée sur un ennemi. + + flèche paralysante + Ces petites fléchettes ne font que peu de dommages mais elles peuvent paralyser leur cible, la laissant immobile et sans défense pour un certain temps. + + flèche + Ces simples pointes de métal sont faites pour voler et transpercer leur cible d\'un simple mouvement du poignet. + + flèche incendiaire + Les pointes de chacune de ces flèches sont faites pour se clouer à la cible pendant que les composants instables sanglés au reste explosent en flammes brillantes. + + javelot + Ce projectile de métal est équilibré pour garder la pointe du bout en avant alors qu\'il prend le vent. + + shuriken + Des morceaux de métal en forme d\'étoile avec des lames aiguisées font des dommages considérables quand ils atteignent leur cible. Ils peuvent être jetés à un rythme soutenu. + + tomahawk + Cette hache de jet n\'est pas si lourde, mais la manier efficacement requiert une force importante. + + + + + Un nuage de gaz de confusion flotte par ici. + + Les flammes font des ravages ici. + + Des arbres lumineux percent l\'obscurité du jardin souterrain. + + Un nuage de gaz paralysant flotte ici. + + \"Votre sacrifice est digne...\" + \"Votre sacrifice est indigne...\" + \"Votre sacrifice est digne et donc vous êtes!\" + Feu sacrificiel brûle ici. Chaque créature touché par ce feu est marqué comme une offrande aux esprits du donjon. + Marqué pour le sacrifice + + Un nuage verdâtre de gaz toxique flotte par ici. + Le gaz toxique vous a asphyxié... + + En buvant cette eau, vous sentez la connaissance s\'épanouir dans votre esprit. Vous savez tout des objets équipés maintenant. Vous ressentez également tous les objets et tous les secrets de l\'étage. + Le pouvoir du savoir rayonne dans l\'eau de ce puits. Prenez en une gorgée pour révéler tous les secrets des objets équipés. + + Le pouvoir de la santé rayonne dans l\'eau de ce puits. Prenez en une gorgée pour soigner vos blessures et calmer votre faim. + Alors que vous buvez, toutes vos blessures se referment. + + Le pouvoir du changement rayonne dans l\'eau de ce puits. Jetez y un objet pour le transformer en autre chose. + + Tout est couvert d\'une toile épaisse ici. + + + + + Démence + + Peau de Bois + + Hémorragie + Vous saigné à mort... + + Aveuglé + + Brûlé + %s prend feu! + Tu as brûlé à mort... + + Charmé + + Combo + Combo de %d coups! + + Estropié + + Gelé + + Furieux + + Immunisé aux gaz + + Vous avez faim. + Vous êtes affamé! + Vous êtes mort de faim... + A faim + Meurt de faim + + Invisible + + Lévitation + + Illuminé + + Vision de l\'Esprit + + Limon caustique + %s vous a tué... + + Paralysé + + Empoisonné + Vous succombez au poison... + + Aveuglé par la rage + + Enraciné + + Ombre fondue + + Ralenti + + Marque du sniper + + Vertige + + Affaibli + + + + + sac à dos + + + + + La vraie description arrive bientôt! + Vous entendez quelque chose mourir au loin + écho de\u0020 + %1$s: \"%2$s\" + Ce %s dort + Ce %s vagabonde + Ce %s chasse + Ce %s prend la fuite + Ce %s est passif + + scorpion d\'acide + + rat albinos + + bandit fou + + chauve-souris vampire + Ces résidents des grottes, rapides et teigneux, peuvent vaincre des ennemis bien plus gros en regagnant leur santé à chaque morsure réussie. + esquivé + + gnoll brutal + Les brutes sont les plus grands, les plus forts et les plus résistants de tous les gnolls. Quand ils sont sérieusement blessés, ils deviennent berzerk, infligeant encore plus de dommages à leurs ennemis. + %s a la rage! + enragé + + crabe des égouts + Ces énormes crabes sont au sommet de la chaîne alimentaire dans les égouts. Ils sont très rapides et leur exosquelette épais peut résister à des coups puissants. + paré + + incarnation maudit + Cette créature ressemble avec le triste fantôme, mais il tourbillonne avec les ténèbres. Son visage porte une expression de désespoir. + + DM-300 + DM-350 + Cette machine fut créée par les nains des siècles plus tôt. Puis les nains ont commencé à remplacer les machines par des golems, des élémentaires et même des démons. Cela a mené à la perte de leur civilisation. Le DM-300 et les autre machines étaient utilisés pour la construction, le minage, et dans certains cas, à la défense de la ville. + Le DM-300 se répare! + Echec de la mission. Extinction du système. + Personnel non autorisé détecté. + + élémentaire de feu + Les élémentaires de feu sont les résidus des invocations de plus grandes entités. Leur nature est trop chaotique pour être contrôlée, même par les démonologues les plus puissants. + + oeil malsain + L\'un des autres noms de ce démon est \"orbe de haine\", car lorsqu\'il aperçoit un ennemi, il utilise des gaz toxiques inconsciemment, en ignorant souvent ses alliés et leurs blessures. + les gaz toxique de l\'%s vous ont tué... + + rat fétide + Ce rat est plus gros que les autres. Il est entouré d\'un nuage nauséabond. + esquivé + + gnoll scout + Les gnolls sont des hommes-hyènes. Ils errent dans les égouts et les donjons, s\'aventurant à la surface pour mener des raids de temps en temps. Les scouts sont des membres courants de leur meute, ils ne sont pas aussi forts que les brutes et pas aussi intelligents que les shamans. + + golem + Les nains ont essayé de combiner leurs connaissances en bricolage avec leur nouveaux pouvoirs engageant les pouvoirs des élémentaires. Ils utilisèrent les esprits de la terre comme \"âme\" pour les corps mécaniques des golems, qu\'ils pensaient être les plus dociles de tous. Malgré cela, la plus petite erreur dans le rituel pouvait déclencher un débordement. + bloqué + + Goo + frai de Goo + On ne sait pas grand chose du Goo. Il est même possible que ce ne soit pas une créature, mais plutôt un agglomérat de substances des égouts qui auraient gagnés des rudiments de volonté propre. + Goo est lui-même pompage! + glurp... glurp... + GLURP-GLURP! + !!! + + Roi des Nains + mort-vivant Roi des Nains + Le dernier souverain nain était connu pour sa profonde connaissance des choses sur le processus de la vie et de la mort. Il a persuadé des membres de la cour de participer à un rituel qui aurait dû leur donner la jeunesse éternelle. Au final, il fut le seul à l\'obtenir - avec une armée de morts-vivants en bonus. + paré + Tu ne peux pas me tuer, %s... Je suis... immortel... + Levez-vous, esclaves! + Comment osez-vous! + mort-vivant nain + Ces nains morts-vivants, créés par le roi des nains, furent des membres de sa cour. Ils ressemblent à des squelettes portant une quantité impressionnante de poils sur le visage. + bloqué + + mime + Les mimes sont des créatures magiques qui peuvent prendre n\'importe quelle forme selon leurs désirs. Dans les donjons, ils prennent très souvent la forme de coffres, car ils savent comment attirer les aventuriers. + + moine nain + Ces moines sont des fanatiques, ils se sont dévoués à protéger les secrets de leur cité des intrus. Ils n\'utilisent pas d\'armure ou d\'armes, se reposant uniquement sur le combat à mains nues. + paré + %1$s vous a arraché le %2$s des mains! + + piranha géant + Ces poissons carnivores ne sont pas des habitants naturels des eaux des sous-sols. Ils ont été amenés spécifiquement pour protéger les trésors submergés. + + rats marsupiaux + Les rats marsupiaux sont des habitants des égouts agressifs, mais plutôt faibles. Ils peuvent se révéler dangereux en grand nombre. + + scorpion + Ces énormes arachnides démoniaques évitent le combat rapproché à tout prix, tirant des épines empoisonnées et crantées sur de longues distances. + + moine senior + + gnoll shaman + les gnolls les plus intelligents peuvent maîtriser de la magie shamanique. Les gnoll shamans préfèrent les sorts de combat pour compenser leur manque de force, n\'hésitant pas à les utiliser sur ceux qui remettent leur statut en question dans la tribu. + L\'éclair du %s vous a tué... + + brute au bouclier + bloqué + + squelette + Les squelettes sont composés des os cadavériques des aventuriers malchanceux et des résidents du donjon, animés par la magie noire venant des profondeurs. En les blessant suffisamment, ils se désintègreront dans une explosion osseuse. + bloqué + Vous avez été tué par l\'explosion des os... + + tisseur des cavernes + Ces araignées verdâtres et poilues évitent le combat direct, préférant attendre à distance alors que leurs victimes, prises dans leur toile, succombent lentement d\'une morsure empoisonnée. + + statue animée + On pourrait penser que ce n\'est qu\'une autre de ces statues un peu moches du donjon, mais ses yeux rouges luminescents la mettent à part. Tandis que la statue est faite de pierre, le _%s_ qu\'elle porte a bien l\'air réel. + + succube + Les succubes sont des démones séduisantes (d\'un point de vue gothique). En utilisant leur magie, elles peuvent envoûter un héros, qui deviendra incapable d\'attaquer quoi que ce soit avant la fin de l\'envoûtement. + + essaim de mouches + L\'essaim de mouches meurtrières bourdonne de colère. Chaque attaque non-magique le séparera en deux essaims plus petits, mais tout aussi dangereux. + esquivé + + Tengu + mémoire de Tengu + Les Tengu sont les membres d\'un ancien clan d\'assassins, qui est aussi appelé Tengu. Ces assassins sont connus pour leur usage excessif de shurikens et de pièges. + Enfin libre... + Attrape ça, %s ! + + voleur fou + Les profondeurs du donjon ont toujours étés une cachette pour les criminels en tous genres. Ils n\'ont pas tous gardés la raison pendant ces excursions si lointaines de la lumière du jour. Cela fait longtemps que ces voleurs et bandits fous ont oubliés qui ils étaient et pourquoi ils volaient. + %1$s volé %2$s de vous!! + \n\nLe %1$s transporte un _%2$s_. Volé évidemment. + + sorcier nain + Quand les intérêts des nains sont passés de la mécanique à l\'art des arcanes, les sorciers sont arrivés au pouvoir dans la ville. Ils ont commencé avec la magie élémentaire, mais ont vite préféré la démonologie et la nécromancie. + La flèche des ténèbres du %s vous a tué... + + spectre + Un spectre est l\'esprit vengeur de quelqu\'un qui a péché, ou de quelqu\'un dont la tombe a été profanée. Etant une entité éternelle, il est très difficile de les frapper avec des armes normales. + esquivé + + Yog-Dzewa + écho de Yog-Dzewa + Yog-Dzewa est une divinité ancestrale, une puissante entité venant des méandres du chaos. Un siècle plus tôt, les nains ont gagné la guerre de justesse contre son armée de démons, mais furent incapables de tuer leur dieu. A la place, ils l\'ont enfermé dans les grands halls sous leur cité, espérant qu\'il soit trop faible pour revenir un jour. + ... + L\'espoir n\'est qu\'une illusion... + poing pourissant + poing ardent + larve du dieu + + + + + abeille d\'or + Malgré leur petite taille, les abeilles d\'or ont tendance à protéger leur maître farouchement. Ils ne vivent pas longtemps cependant. + Cette %s se promène + + forgeron troll + Ce forgeron troll à l\'air d\'un troll comme un autre: il est grand et maigre, et sa peau ressemble à de la pierre, que ce soit la couleur ou la texture. Il est en train de bricoler avec des outils un peu trop petits pour lui. + Hé l\'humain! Tu veux être utile, pas vrai? Prends c\'te pioche et va miner du _minerai noir_, _15 morceaux_ devraient suffire. Comment ça, je donne quoi en échange? Radin...\nOk, ok, je n\'ai pas d\'argent, mais je peux forger pour toi. T\'as de la chance, je suis le seul forgeron des environs. + Hé l\'humain! Tu veux être utile, pas vrai? Prends c\'te pioche et _tuer une chauve-souris_ avec elle, j\'ai besoin de son sang sur l\'outil. Comment ça, je donne quoi en échange? Radin...\nOk, ok, je n\'ai pas d\'argent, mais je peux forger pour toi. T\'as de la chance, je suis le seul forgeron des environs. + Tu te fous de moi? Elle est où ma pioche?! + Du minerai noir. 15 morceaux. Sérieusement, c\'est si dur que ça? + J\'ai dit que j\'avais besoin de sang de chauve-souris sur la pioche. Allez allez! + Ah, tu es revenu... Mieux vaut tard que jamais. + Je suis occupé, là. Débarrassez moi le plancher! + votre %s a l\'air mieux maintenant + Prends 2 objets différents, pas le même deux fois! + Prends 2 objets du même type! + J\'ai besoin de savoir avec quoi je travaille, identifiez moi ça avant! + Je ne travaillerai pas avec des objets maudits! + C\'est une blague? La qualité est trop basse! + Je ne peux pas reforger ces objets! + + fantôme triste + Le fantôme est à peine visible. On dirait un miasme de lumières défaillantes avec un visage des plus attristés. + esquivé + Bonjour aventurier... J\'étais comme vous, un jour - fort et confiant... Et maintenant je suis décédé... Mais je ne peux pas partir... Pas tant que je n\'aurai pas retrouvé ma _rose séchée_... Elle est très importante à mes yeux... Un monstre l\'a prise sur mon cadavre... + S\'il vous plaît... Aidez moi... _Trouvez la rose_... + Oui ! OUI !!! C\'est ça ! Donnez la moi ! Vous pouvez prendre l\'un de ces objets, ils vous seront peut-être utiles pendant votre voyage... + Boujour aventurier... J\'étais comme vous, un jour - fort et confiant... Et maintenant je suis décédé... Mais je ne peux pas partir... Pas tant que je n\'aurai pas pris ma revanche... Tuez le _rat fétide_, celui qui a pris ma vie... + S\'il vous plaît... Aidez-moi... _Détruisez cette abomination_... + Oui ! Cette créature infâme est vaincue et je peux enfin reposer en paix... Je vous prie d\'accepter l\'un de ces objets, ils vous seront peut-être utiles pendant votre voyage... + Boujour aventurier... J\'étais comme vous, un jour - fort et confiant... Et maintenant je suis décédé... Mais je ne peux pas partir... Je suis lié par une malédiction horrible... S\'il vous plaît... Aidez-moi... _Détruisez la malédiction_... + Merci, %s! La malédiction est brisée et je peut enfin se reposer... Je vous prie d\'accepter l\'un de ces objets, ils vous seront peut-être utiles pendant votre voyage... + Oui, je vais le faire pour vous + Non, je ne peux pas vous aider + + diablotin ambitieux + Les diablotins sont des démons mineurs. On ne les remarque pas pas pour leur force ou leur aptitudes à la magie, mais plutôt par leur intelligence et leur sociabilité. Beaucoup de diablotins préfèrent vivre parmi les non-démons. + esquivé + Etes vous un aventurier? J\'adooore les aventuriers! On peut toujours compter sur eux quand on a besoin de tuer un truc! Pas vrai? Avec une prime à la clé bien sûr ;)\nMoi, j\'aurai besoin de tuer des _golems_. Vous voyez, j\'aimerais commencer ma petite affaire par ici, mais ces golems sont très mauvais pour le business! C\'est dur de négocier avec des grumeaux de granite errants, maudits soient-ils ! Alors, s\'il vous plaît, tuez... disons _6 d\'entre eux_, et la récompense est à vous. + Comment se passe votre safari avec les golems? + Etes vous un aventurier? J\'adooore les aventuriers! On peut toujours compter sur eux quand on a besoin de tuer un truc! Pas vrai? Avec une prime à la clé bien sûr ;)\nMoi, j\'aurai besoin de tuer des _moines_. Vous voyez, j\'aimerais établir un petit commerce par ici, mais ces lunatiques n\'achètent rien et vont effrayer les autres clients... Alors, s\'il vous plaît, tuez... disons _8 d\'entre eux_, et la récompense est à vous. + Oh, vous êtes encore en vie! Je savais que votre kung-fu était plus fort ;) Au fait, n\'oubliez pas de ramasser les jetons de ces moines. + Au revoir, %s! + Psst, %s! + + diablotin ambitieux + Les diablotins sont des démons mineurs. On ne les remarque pas pas pour leur force ou leur aptitudes à la magie, mais plutôt par leur intelligence et leur sociabilité. Beaucoup de diablotins préfèrent vivre parmi les non-démons. + Salut, l\'ami! + + image miroir + Cette illusion possède une forte ressemblance avec vous, mais elle est plus pâle et frissonne un peu. + + roi des rats + Ce rat est un peu plus grand que les autres et porte une petite couronne sur la tête. + Je ne dormais pas! + Qu\'est ce que c\'est? Je n\'ai pas le temps pour ces calomnies. Mon royaume ne va pas se gouverner tout seul! + + marchand + Ce mec un peu épais aurait l\'air plus approprié dans un quartier marchand d\'une grande ville plutôt qu\'un donjon. Ses prix expliquent pourquoi il préfère établir son business ici. + Choisissez un objet à vendre + + vieux fabricant de sceptres + Ce gentleman, vieux mais robuste, a une expression un peu confuse. Il est protégé par un bouclier magique. + absorbé + Oh, quelle agréable surprise de rencontrer quelqu\'un à un tel endroit! Je suis venu ici pour un ingrédient rare - la _graine Rougebaie_. Etant un magicien, je peux me défendre contre les monstres d\'ici, mais je me perds très facilement, c\'est très embarrassant. Vous pourriez peut-être m\'aider? Je serai heureux de payer vos services avec l\'un de mes meilleurs sceptres. + Vous avez trouvé la _graine Rougebaie_, %s? Non? Pas de soucis, j\'ai tout mon temps, voyez-vous. + Oh, quelle agréable surprise de rencontrer quelqu\'un à un tel endroit! Je suis venu ici pour un ingrédient rare - le _poussière de cadavre_. Elle peut être récoltée sur les restes des squelettes, et il y\'en a beaucoup dans le coin. Etant un magicien, je peux me défendre contre les monstres d\'ici, mais je me perds très facilement, c\'est très embarrassant. Vous pourriez peut-être m\'aider? Je serai heureux de payer vos services avec l\'un de mes meilleurs sceptres. + Vous avez le _poussière de cadavre_ , %s? Les piles d\'ossements sont les endroits à vérifier. + Oh, quelle agréable surprise de rencontrer quelqu\'un à un tel endroit! Je suis venu ici pour un ingrédient rare - le _poisson fantôme_. Vous pouvez attraper avec vos mains nues, mais il est très difficile de remarquer dans l\'eau. Etant un magicien, je peux me défendre contre les monstres d\'ici, mais je me perds très facilement, c\'est très embarrassant. Vous pourriez peut-être m\'aider? Je serai heureux de payer vos services avec l\'un de mes meilleurs sceptres. + Vous avez le _poisson fantôme_, %s? Vous pouvez essayer de chercher dans l\'une des piscines locales. + + + + + Une plaque de pression cachée s\'enclenche! + Gouffre + Etage + Herbe + Eau + Mur + Porte fermée + Porte ouverte + Entrée de l\'étage + Sortie de l\'étage + Braises + Porte verrouillée + Piédestal + Barricade + Hautes herbes + Sortie de l\'étage verrouillée + Sortie de l\'étage déverrouillée + Panneau + Puits + Puits vide + Statue + Piège de gaz toxiques + Piège de feu + Piège de gaz paralysants + Piège d\'aiguilles empoisonnées + Piège d\'alarme + Piège de foudre + Piège agrippant + Piège d\'invocation + Piège déclenché + Bibliothèque + Chaudron d\'alchimie + \?\?\? + Vous n\'arrivez pas à voir le sol. + En cas de brûlure, marchez dans l\'eau pour éteindre les flammes. + Les escaliers mènent à l\'étage du dessus. + Les escaliers mènent à l\'étage du dessous. + Des braises recouvrent le sol. + La végétation dense empêche de voir plus loin. + Cette porte est verrouillée, vous avez besoin de la clé correspondante pour l\'ouvrir. + D\'épais barreaux vous séparent de l\'escalier qui mène à l\'étage suivant. + La barricade de bois est bien fixée, mais elle a séché au fil des années. Pourrait-elle brûler? + Vous n\'arrivez pas à lire d\'où vous êtes. + Marcher sur une plaque de pression cachée activera le piège. + Le piège a déjà été déclenché et ne représente plus une menace. + Quelqu\'un a voulu décorer cet endroit, mais a échoué visiblement. + Lâchez quelques graines ici pour préparer une potion. + Le puits est sec maintenant. + + Mousse fluorescente + Champignons fluorescents + Eau gelée. + L\'échelle mène à l\'étage du dessus. + L\'échelle descend vers l\'étage du dessous. + Des champignons géants bloquent la vue. + Une veine de minerai est visible sur le mur. De l\'or? + Qui aurait besoin d\'une bibliothèque dans une grotte? + + Eau colorée douteuse + Hautes fleurs épanouies + Une rampe mène à l\'étage du dessus. + Une rampe mène à l\'étage du dessous. + Il manque plusieurs briques ici. + Un épais tapis est sur le sol. + La statue représente un espèce de nain se dressant dans une position héroïque. + Des rangs de livres sur des sujets divers remplissent la bibliothèque. + + Lave froide + Braises de mousse + Braises de champignons + Pilier + Ca ressemble à de la lave, mais c\'est froid et probablement pas dangereux à toucher. + Le pilier est fait avec de véritables crânes humains. Magnifique. + Des livres écrits dans d\'anciens langages recouvrent la bibliothèque. + + @string/Halls_TileWater + @string/Halls_TileGrass + @string/Halls_TileHighGrass + @string/Halls_TileStatue + @string/Halls_TileDescWater + @string/Halls_TileDescStatue + + @string/City_TileWater + @string/City_TileHighGrass + @string/City_TileDescEntrance + @string/City_TileDescExit + @string/City_TileDescDeco + @string/City_TileDescEmptySP + + Eau froide et sombre. + Il y\'a des traces de sang séché sur le sol. + C\'est probablement les restes d\'une librairie de prison. Pourraient-ils brûler? + + Eau boueuse + De la mousse jaunâtre et humide recouvre le sol. + La bibliothèque est remplie de livres inutiles et pas chers. Pourrait-elle brûler? + + + + + Choisissez une graine à lancer + + Gouffre + Oui, je sais ce que je fais + Non, j\'ai changé d\'avis + Voulez vous vraiment plonger dans le gouffre? Vous pouvez probablement mourir. + Votre chute a été fatale... + + Qu\'est ce que tu fais là?! + Comme vous essayez de lire le signe qu\'elle éclate en flammes verdâtres. + + Ne surestimez pas votre force. N\'utilisez que des armes et des armures que vous pouvez porter. + Toutes les portes du donjon ne sont pas visibles du premier coup. Si vous êtes bloqué, cherchez des portes cachées. + Souvenez-vous qu\'augmenter votre force n\'est pas le seul moyen d\'accéder à de meilleurs équipements. Vous pouvez faire l\'inverse et diminuer la force requise d\'un Parchemin d\'Amélioration. + Vous pouvez dépenser votre or aux marchés du donjon, le premier se trouvant au 6e étage. + Prenez garde au Goo! + Magasin Pixel. Tout ce dont vous avez besoin pour une aventure réussie! + Identifiez vos potions et parchemins le plus tôt possible, ne le faites pas au moment où vous en auriez le plus besoin. + Avoir faim n\'est pas dangereux, mais être affamé est dangereux. + Une attaque surprise a plus de chances de réussir. Par exemple, vous pouvez embusquer vos ennemis derrière une porte quand vous savez qu\'ils arrivent. + Ne laissez pas le Tengu s\'échapper! + Magasin Pixel. Dépensez de l\'argent: vivez plus longtemps! + Quand vous êtes attaqué par plusieurs monstres en même temps, essayez de battre en retraite derrière une porte. + Si vous brûlez, vous ne pourrez pas éteindre le feu en marchant dans l\'eau tout en lévitant!. + Il n\'ya aucun sens à posséder deux Ankhs à la fois car vous les perdrez tous les deux en ressuscitant. + DANGER! La machinerie peut causer des blessures, un démembrement ou même la mort! + Magasin Pixel. Pour un donjon plus tranquille. + Quand vous améliorez une arme enchantée, il est possible que l\'enchantement soit détruit. + Armes et armures se détériorent plus rapidement que des baguettes et des anneaux, mais il ya d\'autres façons d\'y remédier. + La seule façon d\'obtenir un Parchemin de Nettoyage est de le recevoir comme un don des esprits de donjon. + Aucune arme tolérée en présence de sa majesté! + Magasin Pixel. Des réductions pour les chasseurs de démons! + + + + + + Le piège émet un son strident qui résonne à travers tout le donjon! + + Piège de foudre + Vous avez été tué par une décharge d\'un piège de foudre... + + + + + Vous ne savez pas ce qu\'il y\'a ici. + Choisissez l\'endroit à observer + + + + + + + 0 + \ No newline at end of file diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml new file mode 100644 index 0000000000..5541417799 --- /dev/null +++ b/res/values-pl/strings.xml @@ -0,0 +1,1657 @@ + + + + Pixel Dungeon + + + + + Graj + Rekordy + Odznaki + o Grze + + Kod & grafika: Watabou\nMuzyka: Cube_Code\n\nTa gra jest inspirowana akcentem Brian Walker\'s. Wypróbuj Windows, Mac OS i Linux - to jest zajebiste!\n\nZapraszamy do odwiedzenia oficjalnej strony o dodatkowe informacje: + pixeldungeon.watabou.ru + Tłumaczenie: Łukasza Piętki, rodriformiga + tramer008@gmail.com; rodriformiga@gmail.com + Wyślij e-mail + + Najlepsi z Najlepszych + Wszystkich Mecze wygrane/Rozegrane:\u0020 + Nie zagrano jeszcze ani razu + Brak dodatkowych informacji + + Twoje Odznaczenia + + Wczytaj Grę + Nowa Gra + Usuń aktualna grę + Głębokość: %1$d\nPoziom: %2$d + Czy na pewno chcesz rozpocząć nową grę? + Twoja obecna gra zostanie usunięta. + Tak, zacznij nową grę + Nie, wróć do menu głównego + By odblokować tę klasę postaci, pokonaj trzeciego bossa jakąkolwiek inną postacią + Aby odblokować \"Wyzwania\", przejdź grę jakąkolwiek postacią. + + Zejście... + Wejście... + Ładowanie + Zmartwychwstanie... + Powrót... + Upadek... + Z jakiegoś powodu plik nie może zostać odnaleziony... + Coś poszło źle... + + Wielu bohaterów każdego rodzaju udało się w podróż do Lochu przed tobą. Niektórzy z nich powrócili przynosząc ze sobą skarby i magiczne artefakty, lecz o większości już nigdy więcej nie słyszano. Ale nikomu jeszcze się nie udało zdobyć Amuletu Yendoru, który o ile wiadomo spoczywa w głębiach Lochu.\n\nUważasz, że jesteś gotowy podjąć to wyzwanie, ale co najważniejsze, czujesz że fortuna uśmiecha się do ciebie. Czas rozpocząć własną przygodę! + + Powiedzmy, że zostanę tu jeszcze dzień... + Jeszcze nie skończyłem + W końcu trzymasz go w swych dłoniach. Amulet Yendora należy do ciebie! Używając jego mocy możesz objąć panowanie nad światem, przynieść pokój i dobrobyt mieszkańcom Powierzchni lub cokolwiek innego. W każdym razie, twoje życie odmieniło się na zawsze i ta gra kończy się tutaj. Albo możesz zostać tutaj jako śmiertelnik nieco dłużej. + + Witaj na poziomie %d gry Pixel Dungeon! + Witaj z powrotem na poziomie %d of Pixel Dungeon! + Zachowaj ostrożność! Loch jest jeszcze bardziej niebezpieczny w nocy! + Dźwięk twych kroków roznosi się echem po lochu. + Słyszysz plusk wody wokół ciebie. + Zapach roślinności jest silny w powietrzu. + Atmosfera podpowiada, że ten poziom skrywa wiele sekretów. + + + + mob + %1$s hit %2$s + %s zabił ciebie... + %1$s pokonany %2$s + %1$s %2$s twój atak + %1$s %2$s atak %3$s + Ból sprawił, że %s został wyrwany z paraliżu + unik + zatruty + amok + spowolniony + telepatyczna + wizja + sparaliżowany + przestraszony + przygwożdżony + sponiewierany + krwawienie + otumaniony + niewidzialny + + Ty + Jeden drogą prostą nie wychodzi z Pixel Dungeon! + Awans! + Gratuluje awansu na poziom %d! Teraz jesteś zdrowszy i bardziej skoncentrowany. Teraz jeszcze łatwiej będziesz atakował wrogów, oraz unikał ich ciosów. + Zebrałeś %s + Tu jeszcze coś jest + Ta skrzynia jest zamknięta, a ty nie posiadasz pasującego klucza + Nie masz pasującego klucza + Dostrzegłeś coś + czekasz... + przeszukujesz + Palisz się! + Jesteś sparaliżowany! + Jesteś otruty! + Żrąca substancja pożera twe ciało. Zmyj to w wodzie! + Nie możesz się ruszyć! + Czujesz się osłabiony! + Jesteś oślepiony! + Stałeś się wściekły! + Furia! + Zostałeś zauroczony! + Jesteś spowolniony! + Krwawisz! + Wszystko kręci się wokół ciebie! + + Wojownik + Mag + Złodziej + Łowczyni + + Wojownicy zaczyna z 11-stoma punktami Siły + Wojownicy zaczyna z unikalnym krótkim mieczem. Potem ten miecz może zostać \"przekuty\" by wzmocnić inną broń białą. + Wojownicy nie radzą sobie z bronią dystansową. + Każde zjedzone pożywienie przywraca trochę zdrowia. + Mikstura Siły jest zidentyfikowana na samym początku. + + + Magowie zaczynają z unikalnym Kosturem Magicznego Pocisku. Potem taki kostur może zostać \"wyładowany\" by wzmocnić inny kostur. + Magowie szybciej ładują swe kostury. + Każde zjedzone pożywienie przywraca 1 ładunek wszystkim kosturom w ekwipunku. + Magowie mogą używać kostury do walki wręcz. + Zwój Identyfikacji jest zidentyfikowany na samym początku. + + + Złodzieje zaczynają z Pierścieniem Cieni+1 + Złodzieje identyfikują pierścień natychmiast po założeniu. + Złodzieje są biegli w posługiwaniu się lekkim pancerzem i lepiej unikają ataki wrogów jeśli takowy noszą + Złodzieje są biegli w odkrywaniu ukrytych przejść i pułapek. + Złodzieje wytrzymują dłużej bez jedzenia + Zwoje Magicznej Mapy są zidentyfikowane na samym początku. + + + Łowczynie zaczynają z 15-stoma punktami Życia. + Łowczynie zaczynają z unikatowym bumerangiem, który można ulepszać. + Łowczynie są biegłe w używaniu broni dystansowych i otrzymują bonus do obrażeń od nadmiernej Siły kiedy je używają. + Łowczynie otrzymują więcej życia z Kropel Rosy . + Łowczynie mogą wykryć sąsiednie potwory, nawet jeśli chowają się za przeszkodą. + + + gladiator + Udany atak wręcz _Gladiator_ rozpoczyna kombinację, która zadaje więcej obrażeń z każdym kolejnym uderzeniem. + berserker + Kiedy _Berserker_ zostaje ciężko ranny wkracza w stan dzikiej furii zadając dodatkowe obrażenia wrogom. + Czarnoksiężnik + Po zabiciu wroga _Czarnoksiężnik_ pożera jego duszę. Leczy ona jego rany i syci jego głód. + Mag Bitewny + Kiedy _Mag Bitewny_ walczy wręcz za pomocą kostura zadaje dodatkowe obrażenia zależne od posiadanych ładunków. Ponadto każdy udany atak przywraca 1 ładunek jego kosturowi. + zabójca + Atakując z ukrycia _Zabójca_ zadaje dodatkowe obrażenia swej ofierze + sprinter + _Sprinter_ przemieszcza się prawie dwa razy szybciej niż większość potworów. Kiedy biegnie, Sprinter jest znacznie trudniejszy do trafienia. Żeby otrzymać te bonusy, musi być nieotoczony i nie może konać z głodu. + snajper + _Snajperzy_ mogą wykryć słabe punkty w opancerzeniu wroga, skutecznie ignorując go za pomocą broni dystansowej. + Strażniczka + _Strażniczki_ czują silną więź z mocami natury. Fakt ten pozwala im na częstsze pozyskiwanie Kropel Rosy i nasion z roślin. Ponadto, chodzenie po wysokiej trawie daje im tymczasową premię do pancerza. + + + + Odznaka zatwierdzona: %s + Nowa Super Odznaka: %s + Nowa Odznaka: %s + 10 wrogów zabitych + 50 wrogów zabitych + 150 wrogów zabitych + 250 wrogów zabitych + 100 zebranego złota + 500 zebranego złota + 2500 zebranego złota + 7500 zebranego złota + Poziom 6 osiągnięty + Poziom 12 osiągnięty + Poziom 18 osiągnięty + Pziom 24 osiągnięty + Wszystkie mikstury zidentyfikowane + Wszystkie zwoje zidentyfikowane + Wszystkie pierścienie zidentyfikowane\" + Wszystkie różdżki zidentyfikowane\" + Wszystkie mikstury, pierścienie & różdżki zidentyfikowane + + + + Kupiono każdą torbę + Śmierć przez spalenie + Śmierć przez zatrucie + Śmierć spowodowana toksycznym gazem + Śmierć przez zagłodzenie + Śmierć dzięki glifowi + Śmierć przez upadek + Śmierć przez ogień, truciznę, toksyczny gaz & i głód + + + + + 1-wszy Boss zabity + 2-gi Boss zabity + 3-eci Boss Zabity + 4-rty Boss Zabity + 1-wszy Boss zabity przez Wojownika, Maga, Złodzieja & i Łowczynię + + + + + + + + + 3-ci Boss zabity przez Gladiatora, Berserkera, Czarnoksiężnika, Maga Bitewnego, Sprintera, Zabójcę, Snajpera & i Strażniczkę + Pierścień Szantażu zdobyty + Pierścień kolców zdobyty + Zdobyto 13 punktów siły + Zdobyto 15 punktów siły + Zdobyto 17 punktów siły + Zdobyto 19 punktów siły + 10 kawałków jedzenia zjedzone + 20 kawałków jedzenia zjedzone + 30 kawałków jedzenia zjedzone + 40 kawałków jedzenia zjedzone + + + + + Pozyskano przedmiot 3-ciego poziomu + Pozyskano przedmiot 6-stego poziomu + Pozyskano przedmiot 9-tego poziomu + Pozyskano przedmiot 12-tego poziomu + + + + + + Wszystkie unikatowe potwory zabite + + + + + Amulet Yendora zdobyty + Amulet Yendora zdobyty przez Wojownika, Maga, Złodzieja & i Łowczynię + Kombinacja 7 uderzeń + Zrobiono 3 mikstury + Zrobiono 6 mikstur + Zrobiono 9 mikstur + Zrobiono 12 mikstur + Poziom ukończony bez zabijania potworów + Potwór zabity Śmiertelną bronią + Zabito 6 piranii + Zabito 5 potworów podczas nocy + Rozegrano 10 gier + Rozegrano 100 gier + Rozegrano 500 gier + Rozegrano 2000 gier! + Szczęśliwe zakończenie + Wyzwanie wygrane + Dziękuję za wsparcie! + + + + + Na diecie + Ma wiara, mą zbroją + Farmakofobia + Jałowa ziemia + Zbiorowa jaźń + W ciemność + Zakazane runy + + + + + Studnia Zdrowia + Studnia Świadomości + Studnia Transmutacji + Ofiarnym Komora + Kociołek Alchemiczny + Ogród + Żywy posąg + Smutny duch + Stary Kosturnik + Kowal Trolli + Chochlik Ambitny + + + + Zabity przez %1$s na poziomie %2$d + Zabity przez %1$s na poziomie %2$d + Zabity przez siebie %1$s na poziomie %2$d + Zabity przez %1$s na poziomie %2$d + Zabity przez wybuch bomby na poziomie %d + Zabity przez porażenie %1$s na poziomie %2$d + Spalony żywcem na poziomie %d + Zagłodzony na śmierć na poziomie %d + Śmierć przez zatrucie na poziomie %d + Zabity przez toksyczny gaz na poziomie %d + Wykrwawił się na śmierć na poziomie %d + Zabity przez żrący śluz na poziomie %d + Śmierć przez upadek na poziomie %d + Uzyskano Amulet Yendora + + + + + Dobra, umowa to umowa, oto co mogę dla ciebie zrobić: Mogę przekuć 2 przedmioty w jeden znacznie lepszej jakości + Wybierz przedmiot do przekucia + Przekuj przedmioty + + Mikstury + Zwoje + Katalog + + Wyzwania + + Którą ścieżkę obierzesz? + Zdecyduję później + Chcesz respec %s? + Tak, chcę respec + Może później + + Mistrzostwo + + BŁĄD + + Opcje + Wyzwania + Rankingi + Zacznij nową grę + Menu Główne + Wyjście z gry + Wróc do Gry + + Statystyki + Efekty + Doświadczenie + Siła + Zdrowie + Zebrane złoto + Najdalszy odwiedzony poziom + Poziom %1$d %2$s + Katalog + Dziennik + + O tak! Jesteś moim bohaterem!\nA teraz kwestia twojej nagrody. Nie mam pieniędzy by ci zapłacić, ale mam coś lepszego. To mój pierścień rodowy: mój dziadek zdjął go z palca martwego paladyna. + Weź pierścień + + Tutaj nic nie ma + + Skrzynia + Zamknięta skrzynia + Kryształowa skrzynia + Grobowiec + Kościane szczątki + Nie dowiesz się co jest w środku, dopóki tego nie otworzysz! + Ale by to otworzyć potrzebujesz złotego klucza. + Możesz dostrzec %s wewnątrz skrzyni, ale by ją otworzyć potrzebujesz złotego klucza. + Ten starożytny grobowiec może zawierać coś przydatnego, ale właściciel będzie zdecydowanie niezadowolony z naruszenia jego spoczynku. + To wszystko co zostało z jednego z twoich poprzedników. Może warto jest zbadać te szczątki w poszukiwaniu cennych rzeczy. + + Dziennik + + Języki + + Nie można załadować dodatkowych informacji + Statystyki + Przedmioty + Odznaki + Poziom %1$d %2$s + Wyzwania + Zdrowie + Siła + Czas Gry + Maksymalna głębokość + Zabite Potwory + Zebrane Złoto + Zjedzone pożywienie + Przyrządzone Mikstury + Użyte Ankh + + Zginąłeś, ale otrzymałeś drugą szansę by przeciwstawić się Lochowi. Wykorzystasz ją? + Tak, będę walczyć! + Nie, poddaję się + + Broń ducha + Zbroja Ducha + Żegnaj, przygód! + + + + - + Domyślne zbliżenie + Skalowanie UI + Tryb immersyjny + Język + Muzyka + Odgłosy + Jasność + Drugi quickslota + Przełącz do widoku \"portretowego\" + Przełącz do widoku panoramicznego + + Loch znajduje się zaraz pod Miastem, jego wyższe poziomy aktualnie stanowią miejski system kanalizacyjny. Będąc częścią Miasta, te poziomy nie są aż tak niebezpieczne. Nikt nie nazwie ich bezpiecznym miejscem, ale przynajmniej nie musisz tutaj stawać w szranki ze złą magią. + Wiele lat temu podziemne więzienie zostało tutaj wybudowane by więzić tutaj najbardziej niebezpiecznych kryminalistów. Wtedy wydawało się to bardzo sprytnym pomysłem, ponieważ z tego miejsca było faktycznie trudno uciec. Jednak wkrótce mroczny miazmat zaczął wydostawać się z niższych poziomów, doprowadzając więźniów i strażników do szaleństwa. W końcu więzienie zostało opuszczone, jednak niektórzy zostali tutaj uwięzieni na zawsze. + Jaskinie, które rozciągają się pod opuszczonym więzieniem są słabo zaludnione. Znajdują się za głęboko by być eksploatowanymi przez Miasto i są obfite w minerały zbyt małej wartości by zainteresować ich wydobyciem Krasnoludy. W przeszłości znajdował się tutaj punkt handlowy na drodze pomiędzy tymi dwiema nacjami, ale zniknął od izolacji Metropolii Krasnoludów. Teraz tylko wszędobylskie gnolle i podziemne zwierzęta kryją się tutaj. + Metropolia Krasnoludów była kiedyś największym z krasnoludzkich państw-miast. W latach świetności, zmechanizowana armia krasnoludów skutecznie powstrzymała inwazję Prastarego Boga i jego armii demonów. Ale według legend, powracający wojownicy przywiedli ze sobą nasiona spaczenia, a ich zwycięstwo było początkiem końca podziemnego królestwa. + W przeszłości te poziomy były przedmieściami Metropolii. Po kosztownym zwycięstwie w wojnie przeciwko Prastaremu Bogowi, krasnoludy były zbyt słabe by oczyścić je z demonicznego plugastwa. Ostatecznie demony zacisnęły swe szpony na tym miejscu i teraz nazywa się ono Demonicznymi Korytarzami. \n\nBardzo niewielu poszukiwaczy przygód dotarło aż tak daleko... + + WYPRZEDAŻ: %1$s - %2$dg + Kup za %dg + Sprzedaj za %dg + Sprzedaj 1 za %dg + Sprzedaj wszystko za %dg + Nieważne + Sprzedałes %1$s za %2$dg + Kupiłeś %1$s za %2$dg + + Och, widzę, że ci się udało! Mam nadzieję, że nie zdobycie tego nie przysporzyło ci wielu kłopotów. Jak obiecałem, możesz wybrać jeden z moich wysokiej jakości kosturów. + Bojowy kostur + Nie-Bojowy kostur + Powodzenia w twej misji, %s! + + + + Wybierz przedmiot, który chcesz przyporządkować do quickslota + + + + + smth + ZOSTAW + RZUĆ + Nie masz dość miejsca w plecaku by wziąć %s + Wybierz kierunek rzutu + Z powodu częstego stosowania, twój %s złamał. + Z powodu częstego stosowania, twój %s ma zamiar złamać szybko. + + ZAŁÓŻ + ZDEJMIJ + %s to przeklęty przedmiot i nie możesz go zostawić! + + Amulet Yendora + SKOŃCZ GRĘ + Amulet Yendora to najpotężniejszy znany artefakt niewiadomego pochodzenia. Mówi się, że amulet może spełnić każde życzenie jego właściciela, oczywiście jeśli jego siła woli jest na tyle potężna by \"przekonać\" artefakt do współpracy. + + Ankh + Starożytny symbol nieśmiertelności daje możliwość zmartwychwstania po zgonie. Po wskrzeszeniu, wszystkie przedmioty, które nie są wyposażone zostaną utracone. + + zestaw narzędzi płatnerskich + ULEPSZ + Używając tego zestawu małych narzędzi i materiałów, każdy może przemienić jakąkolwiek zbroję w \"epicką zbroję\", która zachowa właściwości oryginalnego pancerza, ale też zapewni specjalną zdolność zależną od klasy postaci. Żadne umiejętności krawiectwa, garbowania skóry lub kowalstwa nie są wymagane. + Wybierz pancerz do ulepszenia + %s została ulepszona dzięki zestawowi narzędzi + + bomba + Jest to stosunkowo małe bomb wypełnione czarnym proszku. Wygodnie, jej bezpiecznik świeci się automatycznie, gdy rzuca bomby. + Zabiłeś się z bombą... + + rosa + Krystalicznie czysta rosa + + Flakonik na rosę + WYPIJ + Możesz przechowywać nadmiar Rosy w tym małym słoiczku by wypić ją później. Kiedy flakonik jest pełny, w momencie otrzymania śmiertelnego ciosu zostanie zużyta automatycznie by uleczyć właściciela. + Flakonik został opróżniony by uleczyć twe rany. + Zebrałeś Rosę do swego flakonika. + Twój flakonik Rosy jest pełny! + Twój flakonik jest pusty! + + To mimik! + + garnek miodu + ROZTRZASKAĆ + Nie ma zbyt wiele miodu w tym małym honeypot, ale jest złote pszczoły tam i nie chce go opuścić. + + złoto + Zbieraj złoto by potem móc wydać je w sklepie. + Stos %d złotych monet + Jedna złota moneta. + + stękasz z bólu kiedy twój chwyt zaciska się wokół %s + + Rdzeń Lloyda + USTAW + POWRÓT + Rdzeń Lloyda to intrygujący magiczny przedmiot, który pozwala ci wrócić do miejsca, w którym poprzednio byłeś. + Silna aura magiczna tego miejsca uniemożliwia ci używanie Rdzenia! + Psychiczna aura niedalekich potworów nie pozwala ci teraz użyć Rdzenia. + Rdzeń Lloyda został pomyślnie ustawiony na twojej obecnej pozycji. Teraz możesz powrócić w to miejsce kiedy chcesz. + \n\nRdzeń został ustawiony na %d poziomie Pixel Dungeon. + + Książka Mistrzostwa + Książka Mistrzostwa(2) + CZYTAJ + Ta używana, skórzana książka nie jest aż tak gruba, ale czujesz jednak, że mógłbyś się z niej wiele nauczyć. Pamiętaj, że czytanie jej zajmie trochę czasu. + Nie możesz czytać gdy jesteś oślepiony + wybrałeś ścieżkę %s! + + Pochodnia + ZAPAL + Jest to nieodzowny przedmiot w Demonicznych Korytarzach, które są znane ze swego słabego oświetlenia. + + Kamień Balansu + UŻYJ + Ten dziwny kamień runiczny może \"zbalansować\" wagę broni, zwiększając jej szybkość lub celność. + Wybierz broń do zbalansowania + %s został zbalansowany by uczynić go szybszym + %s został zbalansowany by uczynić go celniejszym + Jak chcesz zbalansować twój %s? + Dla szybkości + Dla celności + Nieważne + + + + + ZASADŹ + Rzuć nasieniem w miejsce, gdzie chcesz żeby wyrosła roślina: %1$s.\n\n%2$s + nasiono %s + + Senne Ziele + Dotknięcie Sennego Ziela wyzwala migoczącą chmurę gazu, który ma właściwości narkotyzujące. Senne Ziele jest wykorzystywane jako środek nasenny lub narkotyk. + + Ziemiokorzeń + Kiedy istota dotknie Ziemiokorzenia, oplata ją grubymi korzeniami, tworząc coś na kształt naturalnego pancerza wokół niej. + Zbroja Natury + + Znikoliść + Sok ze Znikoliścia jest wykorzystywany przy tworzeniu teleportów, ponieważ powoduje on przemieszczenie w losowe miejsce. Oczywiście portale wykorzystują specjalnie przygotowany sok ze Znikoliścia, mogąc ukierunkować trasę teleportacji, lecz dzikie odmiany są niestabilne. + + Ogniokwiat + Kiedy coś dotknie Ogniokwiatu, natychmiast staje w płomieniach. + + Pętojagoda + Jagody z tego krzewu smakują jak słodka, słodka śmierć. + Nasiono wyzwala ryk, który rozchodzi się echem po lochu! + + Lodokrzew + Dotknięty Lodokrzew wypuszcza magiczny pyłek, który zamraża wszystko czego się dotknie. Specjalnie przygotowane nasiona Lodokrzewu są często wykorzystywane przy produkcji napojów wyskokowych, ze względu na swe chłodzące właściwości. + + Jadomech + Jadomech to kwiat (a nie mech), który posiada ostre jak brzytwa płatki, pokryte śmiertelnym jadem. + + Herba Solis + Herba Solis (dosł. Trawa Słońca) jest znana ze swych właściwości leczniczych, co czyni ją podstawowym składnikiem mikstur leczniczych. + Błogosławieństwo Natury + + + + + %s boleśnie zaciska się na tobie + Udało Ci się zidentyfikować %1$s. Okazuje się, że to %2$s. + %1$s :%2$d + złamany %1$s :%2$d + Interakcja różnych typów magii usunęła glif z tej zbroi! + \n\nTa %1$s wchłania \"%2$d\" obrażeń. + \n\nPonieważ twoja siła jest niewystarczająca, twoja szybkość i zdolności obronne są obniżone. + \n\nPonieważ nie masz wystarczającej Siły, ta zbroja obniży twoją prędkość i zdolności obronne. + \n\nTypowa %1$s wchłania do %2$d punktów obrażeń i wymaga %3$d punktów siły. + Prawdopodobnie ta zbroja jest za ciężka dla Ciebie. + To zostało zaklęte. + \n\nMasz na sobie %1$s%2$s. + , ponieważ to jest przeklęte, jesteś bezsilny by to zostawić. + \n\n%s emanuje mroczną magią. + + To wygląda wspaniale! + Twoje zdrowie jest zbyt niskie! + Musisz mieć na sobie tę zbroję by użyć jej specjalnej mocy! + + Wełniana Zbroja + Ta lekka zbroja zapewnia podstawową obronę. + + Peleryna Łowczyni + Łowczyni używając tej peleryny może stworzyć salwę widmowych ostrzy. Każde z nich namierzy pojedynczych wrogów w zasięgu wzroku Łowczyni i zadadzą obrażenia zależne od jej używanej broni białej. + WIDMOWE OSTRZA + Brak wrogów w zasięgu wzroku. + Tylko Łowczynie mogą używać tej zbroi! + + Skórzana zbroja + Zbroja zrobiona z wygarbowanej skóry potwora. Nie jest tak lekka jak wełniana zbroja, lecz zapewnia lepszą ochronę. + + Szata Maga + Nosząc tę cudowną szatę, mag może rzucić zaklęcie Spalonej Ziemi. Wszyscy wrogowie w zasięgu wzroku zostaną podpaleni i unieruchomieni w tym samym czasie! + Spalona Ziemia + Tylko magowie mogą używać tej zbroi! + + Kolczuga + Połączone metalowe kółka stwarzają solidną, aczkolwiek wygodną ochronę. + + Zbroja Płytowa + Ogromne płytki metalu są złączone ze sobą w pancerz, który zapewnia niezrównaną ochronę każdemu poszukiwaczowi przygód, silnemu na tyle, by móc udźwignąć jej przytłaczającą wagę. + + Strój Złodzieja + Kiedy Złodziej nosi ten ciemny strój, może przygotować specjalny ruch, zwany \"bombą dymną\" (żadne prawdziwe ładunki wybuchowe nie są używane), która oślepia wrogów, a Złodziej uskakuje w wybrane miejsce. + BOMBA DYMNA + Tylko Złodzieje mogą nosić tę zbroję! + Możesz przeskoczyć tylko w pustym miejscu aby w zasiegu wzroku. + Wybierz kierunek skoku + + Zbroja Łuskowa + Połączone ze sobą metalowe łuski, przyszyte do skórzanej zbroi tworzą wygodną i zarazem dobrą ochronę. + + Pancerz Wojowników + Mimo iż ta zbroja wygląda na ciężką, pozwala Wojownikowi przygotować Heroiczny Skok w stronę wybranego miejsca, by uderzyć z impetem w ziemię, ogłuszając wszystkich pobliskich wrogów. + HEROICZNY SKOK + Tylko Wojownicy mogą użyć tej zbroi! + Wybierz kierunek skoku + + + + + %s uroku + + %s chaotycznej magii + + %s auto-naprawy + + %s odbicia + + %s teleportacji + + %s oplątania + + %s metabolizmu + + %s duplikacji + + %s porażenia + + %s smrodu + + %s cierpienia + rozłożone %d + oczarowanie lepkości + Uszkodzenie odroczony (%d) + Oczarowanie lepkości cię zabił... + + + + + OTWÓRZ + + breloczek na klucze + Ten miedziany breloczek pozwala ci trzymać twoje klucze z dala od reszty przedmiotów. + + futerał na zwoje + Możesz przechowywać zwoje w tym tubalnym pojemniku. Zwolnisz w ten sposób miejsce w plecaku i ochronisz zwoje przed ogniem. + + torba na nasiona + Ta mała, aksamitna torba pozwala ci na przechowywanie wszelkich ilości nasion. Bardzo sprytne. + + kabura na kostury + Ten smukły uchwyt jest wykonany ze skóry jakiegoś egzotycznego zwierzęcia. Pozwala na przechowywanie %d kosturów. + + + + + racja żywieniowa + Nic nadzwyczajnego: suszone mięso, trochę herbatników, itp. + ZJEDZ + Jedzenie smakowało wybornie! + + usmażone mięso + Wygląda na smakowity stek + + Zamrożone carpaccio + To kawałek zamrożonego, suszonego mięsa. Jedynym sposobem by zjeść je, jest pokrojenie go w plastry. I jest niesamowicie dobre. + Widzisz, że twe dłonie znikają! + Czujesz jak twoja skóra twardnieje! + Odświeżenie! + Czujesz się znacznie lepiej! + + tajemnicze mięso + Jesz na własne ryzyko! + Oh to jest gorące! + Nie czujesz swoich nóg! + Nie czujesz się najlepiej. + Czujesz się ociężały. + Jedzenie smakowało... dziwacznie. + + przeceniona racja żywieniowa + Wygląda dokładnie jak zwykła racja żywieniowa, ale jest mniejsza. + To jedzenie smakowało dobrze. + + pasztecik + Autentyczny pasztecik wypełniony wołowiną, który smakuje najlepiej z barszczem. + + + + + złoty klucz + Wyszczerbienia na tym złotym kluczu są małe i intrygujące. Może otwierają jakiś zamek skrzyni? + + żelazny klucz + Wyszczerbienia na tym starożytnym kluczu są dobrze wykonane. Jego skórzany talrep jest zniszczony pod wpływem czasu. Jakie drzwi mógłby otworzyć? + żelazny klucz z poziomu %d + + kościany klucz + Ten klucz wygląda poważnie: jego głowica ma kształt czaszki. Może otworzy jakieś równie poważnie wyglądające drzwi. + + + + + %s mikstura + Ta flaszka zawiera ciecz, która jest %s. Kto wie co się stanie po jej wypiciu lub rzuceniu? + WYPIJ + Szkodliwa mikstura! + Pozytywna mikstura + Tak, wiem co robię + Nie, zmieniłem zdanie + Jesteś pewien, że chcesz to wypić? Najrozsądniej będzie jeśli rzucisz tym we wrogów. + Czy jesteś pewien, że chcesz tym rzucić? Najrozsądniej będzie jeśli to wypijesz. + Flaszka roztrzaskuje się i %s ciecz rozpływa się nieszkodliwie + + turkusowa + karmazynowa + azurowa + jadeitowa + złota + magentowa + zwęglona + śnieżnobiała + bursztynowa + ciemnobrunatna + indigo + srebna + + + Mikstura Doświadczenia + Przechowywane przez wieki doświadczenia uczestników wielu bitew zostały sprowadzone do ciekłej postaci. Ten wyciąg z czystej mądrości natychmiast zwiększy twój poziom doświadczenia. + + Mikstura Zimna + Kiedy te chemikalia wejdą w kontakt z powietrzem, wyparują, tworząc lodowatą chmurę, sprawiając, że każda istota zostaje zamrożona po kontakcie z nią i nie może się ruszać dopóki lód się nie roztopi. + + Mikstura Uzdrowienia + Mikstura, która natychmiast przywróci ci całe zdrowie i wyleczy zatrucie. + Twe rany goją się natychmiastowo. + + Mikstura Niewidzialności + Wypicie tej mikstury sprawi, że staniesz się tymczasowo niewidzialny. W tym stanie wrogowie nie będą mogli ciebie zobaczyć. Atakowanie, używanie kostura lub zwoju przed oczami wroga sprawi, że znów będziesz widoczny. + Widzisz, że twe dłonie znikają! + + Mikstura Lewitacji + Wypicie tej dziwacznej mikstury sprawi, że będziesz lewitował w powietrzu, pozwalając ci na lot ponad przepaścią i pułapkami. Płomienie i gazy zapełniają powietrze i nie można przez nie przejść będąc w powietrzu. + Wznosisz się w powietrze! + + Mikstura Ciekłego Ognia + Ta flaszka zawiera niestabilną, łatwopalną substancję, która wybuchnie żywym ogniem, jeśli wejdzie w kontakt z powietrzem. + + Mikstura Potęgi + Ta potężna ciecz przesyci twe mięśnie, permanentnie zwiększając twą Siłę o jeden punkt i Życie o pięć punktów. + Nowa siła przesyca twe ciało. + +1 siły, +5 hp + + Mikstura Telepatii + Po wypiciu tego, twój umysł będzie przestrojony na możliwość wykrywania fizycznych postaci dalekich istot, pozwalając na wyczucie ich obecności przez ściany. Ponadto ta mikstura pozwoli ci widzieć przez pobliskie ściany i drzwi. + Możesz jakoś wyczuć obecność umysłów innych istot! + Możesz jakoś stwierdzić, że aktualnie jesteś sam na tym poziomie. + + Mikstura Gazu Paraliżującego + Po kontakcie z powietrzem, płyn w tej flaszce wyparuje tworząc żółty obłok. Każdy kto weźmie wdech tej chmury zostanie natychmiast sparaliżowany. Nie będzie mógł się poruszać dopóki chmura nie zniknie. Ten przedmiot może zostać rzucony w odległych wrogów, by złapać ich w pułapkę gazu. + + Mikstura Czystości + Ten preparat szybko zneutralizuje wszystkie szkodliwe gazy w zasięgu działania. Wypicie tego gwarantuje tymczasową odporność na tego typu gazy. + Czujesz niezwykłą świeżość w powietrzu + Przestałeś czuć jakiekolwiek zapachy! + + Mikstura Siły + Ten potężny płyn zwiększy objętość twych mięśni, permanentnie zwiększając twoją Siłę o jeden punkt. + Nowa siła przepływa przez twe ciało. + +1 do Siły + + Mikstura Toksycznego Gazu + Odkorkowanie lub zbicie flaszki zawierającej tę ciecz sprawi, że wybuchnie ona, tworząc śmiercionośną chmurę toksycznego, zielonego gazu. Możesz wybrać czy rzucić tą miksturą we wrogów zamiast odkorkowywać ją własnoręcznie + + + + + pył trupa + Ta kulka trupiego pyłu nie różni się nadzwyczajnie od zwykłej kuli pyłu. W każdym razie, wiesz, że najlepiej pozbyć się tego najszybciej jak to tylko możliwe. + + ruda mrocznego złota + Metal ten jest nazywany mrocznym nie ze względu na kolor (nie różni się od zwykłego złota), ale dlatego, że ulega stopieniu w świetle dnia, czyniąc go bezużytecznym na Powierzchni. + + wysuszona róża + Ta róża wyschła dawno temu, ale jakoś zachowała wszystkie płatki. + + żeton krasnoludów + Wiele krasnoludów i ich większe twory noszą te małe kawałki metalu z nieznanych przyczyn. Może to biżuteria, albo jakiś rodzaj identyfikatorów. Krasnoludy to dziwny lud. + + fantom ryby + ZJEDZ + Można nawet zobaczyć ten mały przezroczyste ryby w powietrzu. W wodzie staje się skutecznie niewidoczne. + Widzisz, że twe dłonie znikają! + + Kilof + Jest to duże i wytrzymałe narzędzie do rozbijania skał. Może można tego używać jako broń. + WYDOBĄDŹ + Nie ma w pobliżu żyły mrocznego złota do wydobycia + + Ogromna czaszka szczura + Ta czaszka mogłaby być niezłym trofeum, ale zbyt mocno śmierdzi by powiesić ją na ścianie. + + + + + %s pierscien + Na tej metalowej obrączce znajduje się wielki, %s klejnot, który połyskuje w ciemności. Kto wie jakie ma właściwości po założeniu? + złamany %s + %1$s i jego działanie są teraz dla ciebie zrozumiałe. To %2$s. + Rozebrać jednego pierścienia + Można nosić tylko dwa pierścienie na raz. Rozebrać jednej z wyposażonych pierścieni. + + diamentowy + opalowy + granatowy + rubinowy + ametystowy + topazowy + onyksowy + turmalinowy + szmaragdowy + szafirowy + kwarcowy + agatowy + + Czujesz jak %s zaciska się boleśnie na twym palcu + %1$s\n\n%2$s spoczywa na twym palcu %3$s. + i ponieważ jest przeklęty, jesteś bezsilny by go zdjąć. + %1$s\n%2$s emanuje mroczną magią. + To jest %s + + Pierścień Celności + Ten pierścień zwiększa szansę na trafienie wroga. Zdegradowane pierścienie dają efekt odwrotny. + + Pierścień Detekcji + Noszenie tego pierścienie pozwoli posiadaczowi na dostrzeżenie ukrytych rzeczy, takich jak pułapki lub tajemne drzwi, bez tracenia czasu na ich szukanie. Zdegradowane pierścienie stępią twe zmysły, sprawiając, że będą one trudniejsze do odnalezienia, nawet po dokładnym przeszukaniu okolicy. + + Pierścień Żywiołów + Ten pierścień zapewnia odporność na różne rodzaje żywiołów, takich jak ogień, elektryczność, gazy itp. Zmniejsza również działanie negatywnych efektów. + + Pierścień Uników + Ten pierścień zwiększa szansę na udany unik ataku wroga. + + Pierścień Szantażu + W zasadzie ten pierścień nie gwarantuje żadnych magicznych efektów, ale pokazuje handlarzom i sklepikarzom, że posiadacz pierścienia jest członkiem Gildii Złodziei. Przeważnie są skłonni do okazania zniżek takiej osobie za tymczasowy immunitet ze strony organizacji. Ulepszanie pierścienia nie zwiększy jego mocy. + + Pierścień Pośpiechu + Pierścień ten przyspiesza posiadacza, sprawiając, że może wykonać więcej czynności w krótkim czasie. + + Pierścień Zielarstwa + Ten pierścień zwiększa szansę na zebranie Rosy i nasion ze stratowanej trawy. + + Pierścień Regeneracji + Ten pierścień przyspiesza naturalną regenerację ciała, przywracając stracone zdrowie szybciej niż normalnie. Zdegradowane pierścienie zmniejszą, a nawet zatrzymają naturalną regenerację. + + Piersien Energii Magicznej + Pierścień tworzy energetyczną aurę, sprawiając, że twoje kostury są znacznie potężniejsze. Zdegradowane natomiast je osłabią. + + Pierścień Sytości + Noszenie tego pierścienia sprawi, że możesz wytrzymać dłużej bez jedzenia. Zdegradowane pierścienie dadzą efekt odwrotny. + + Pierścień Cieni + Wrogowie mają mniejszą szansę na wykrycie ciebie jeśli nosisz ten pierścień. Zdegradowane pierścienie wręcz zaalarmują wrogów, którzy nie dostrzegli ciebie wcześniej. + + Pierścień Cierni + Mimo iż ten pierścień nie daje prawdziwych kolców pokrywających twe ciało, wróg, który ciebie zaatakuje zostanie zraniony pewną częścią obrażeń, które zadał tobie. Ulepszanie tego pierścienia nie zwiększy jego mocy. + + + + + zwój \"%s\" + Ten pergamin jest pokryty jest niemożliwymi do odczytania napisami i nosi tytuł runy %s. Kto wie co zrobi, kiedy zostanie przeczytany na głos? + CZYTAJ + Nie możesz przeczytać tego zwoju kiedy jesteś oślepiony + + KAUNAN + SOWILO + LAGUZ + YNGVI + GYFU + RAIDO + ISAZ + MANNAZ + NAUDIZ + BERKANAN + ODAL + TIWAZ + + + Wybierz przedmiot + Czy na pewno chcesz przerwać korzystanie ze zwoju? Zostanie zużyty tak czy siak. + Tak, zgadzam się + Nie, zmieniłem zdanie + + Zwój Wyzwania + Kiedy zostanie przeczytany na głos, ten zwój wyzwoli wyzywający ryk, który obudzi wszystkie potwory i przywoła je do miejsca, gdzie został aktywowany. Ten zwój zmusi również handlarzy do natychmiastowego zamknięcia sklepu i teleportacji z powrotem do Miasta w celu uratowania swoich czterech liter. + Zwój wyzwala wyzywający ryk, który rozchodzi się echem po Lochu! + + Zwój Identyfikacji + Permanentnie ujawnia sekrety jednego z przedmiotów. + Wybierz przedmiot który chcesz zidentyfikować + To jest %s + + Zwój Kołysanki + Łagodnie brzmiąca melodia ułoży wszystkie istoty w zasięgu wzroku do głębokiego snu, dając ci szansę na ucieczkę, lub na atak z zaskoczenia. + Zwój śpiewa łagodną melodię. + Zwój śpiewa łagodną melodię i %s zasypia! + Zwój śpiewa łagodną melodię i potwory zasypiają! + + Zwój Magicznej Mapy + Kiedy ten zwój zostanie przeczytany, krystalicznie czysty obraz poziomu Lochu, na którym aktualnie się znajdujesz, ujawni się w twej głowie, dając ci precyzyjną informację o pomieszczeniach i ukrytych obiektach na mapie. Pozycje wrogów i przedmiotów pozostają jednak ukryte. + Teraz znasz układ pomieszczeń poziomu. + + Zwój Duplikacji + Inkantacja zwoju stworzy iluzorycznych bliźniaków czytającego, którzy będą ścigać wrogów. + + Zwój Wybuchu Psionicznego + Ten zwój zawiera ładunek niszczycielskiej energii, która uwolniona z okowów pergaminu zada ogromne obrażenia wrogom w zasięgu wzroku. Błysk światła oślepi tymczasowo wszystkich w zasięgu rażenia, w tym także czytającego zwój. + + Zwój Naładowania + Ta surowa, magiczna moc spętana w tym pergaminie sprawi, że kiedy zostanie uwolniona naładuje wszystkie kostury czytającego zwój do maksimum. + przypływ energii przenika przez twój plecak ładując twój kostur + przypływ energii przenika twój plecak, ładując twe kostury + przypływa magicznej energii przenika przez twój plecak, ale nic się nie dzieje + + Zwój Zdjęcia Klątwy + Inkantacja zwoju natychmiast zdejmie każdą klątwę z każdego przedmiotu posiadanego przez czytającego zwój, pozwalając na zdjęcie wcześniej przeklętego przedmiotu. + Twój plecak świeci się oczyszczającym światłem i mroczna energia rozpływa się. + Twój plecak świeci się oczyszczającym światłem, ale nic się nie dzieje. + + Zwój Teleportacji + Zaklęcie spisane na tym pergaminie natychmiast przeniesie czytającego do losowego miejsca na danym poziomie lochu. Może być użyte do ucieczki z groźnej sytuacji, ale nieszczęśliwy czytający może trafić w jeszcze bardziej niebezpieczne miejsce. + W mgnieniu oka przeteleportowałeś się do innego miejsca na poziomie. + Silna magiczna aura tego miejsca uniemożliwia ci teleportowanie się! + + Zwój Terroru + Błysk czerwonego światła przepełni wszystkie stworzenia w zasięgu wzroku nieopanowanym lękiem, po czym uciekną w popłochu. Atakowanie uciekającego przeciwnika przerwie efekt. + Zwój wyzwala jasny błysk czerwonego światła + Zwój wyzwala jasny błysk czerwonego światła i %s ucieka w popłochu! + Zwój wyzwala jasny błysk czerwonego światła i potwory uciekają w popłochu! + + Zwój Ulepszenia + Ten zwój ulepszy pojedynczy przedmiot, polepszając jego jakość. Kostur zyska większą moc i liczbę ładunków, broń będzie zadawać więcej obrażeń i stanie się bardziej celna, zbroja będzie mogła wchłaniać więcej obrażeń, a efekt pierścienia zostanie spotęgowany. Bronie i zbroje będą wymagały mniej siły do użycia, a klątwy zostaną zdjęte z wybranego przedmiotu. + Wybierz przedmiot do ulepszenia + %s wygląda teraz zdecydowanie lepiej + + Zwój Zaklinania + Ten zwój jest w stanie nasycić broń lub zbroję z losową oczarowania, przyznając jej szczególną moc. + Wybierz enchantable pozycję + %s świeci w ciemności + + Zwój Czystość + @string/Scroll_ACRead + Przeczytaj ten zwój wyzwolić gniew duchów Bossów, zabijając wszystko, co na obecnym poziomie. No, prawie wszystko. Niektóre z bardziej potężnych stworzeń nie może być naruszone. + @string/Scroll_Blinded + + + + + %s kostur + UŻYJ + Ten cienki, %s kostur jest ciepły w dotyku. Kto wie co się stanie kiedy zostanie użyty? + Kiedy ten kostur jest używany jako broń biała, zadaje %d obrażeń. + Możesz używać tego kostura jako broń białą. + Ten kostur dziwnie trzeszczy. Pewnie nie ma już ładunków. + Nie możesz celować w siebie + Wybierz kierunek strzału + Jesteś już na tyle obeznany z %s. + + ostrokrzewowy + cisowy + ebonitowy + wiśniowy + tekowy + jarzębinowy + wierzbowy + mahoniowy + bambusowy + purpurowy + dębowy + brzozowy + + + Kostur Szału + Fioletowe światło wystrzelone z tego kostura sprawi, że cel zacznie atakować wszystkie stworzenia w zasięgu swojego wzroku. + nic się nie stało + + Kostur Lawiny + Kiedy ładunek tego kostura uderzy w ścianę (lub w jakąkolwiek solidną przeszkodę) wywoła lawinę kamieni, zadając obrażenia i ogłuszając wszystkie stworzenia w zasięgu efektu. + Zabiłeś siebie Kosturem Lawiny... + + Kostur Błysku + Ten kostur pozwala ci się teleportować w wybranym kierunku. Stworzenia i nieruchome obiekty zatrzymają teleportację. + + Kostur Dezintegracji + Ten kostur wyzwala strumień niszczycielskiej energii, która przebija się przez wszystkie stworzenia na jego drodze. Im więcej uderzy celów, tym więcej zada im obrażeń. + + Kostur Kuli Ognistej + Ten kostur wyzwala wybuch magicznego ognia, który podpali łatwopalny teren, nakładając ten efekt również na stworzenia, w które uderzy. + Zabiłeś siebie Kosturem Kuli Ognistej... + + Kostur Trzody + Za jednym ruchem tego kostura, możesz przywołać stado magicznych owiec, tworzących niezniszczalną przeszkodę. + owca + To magiczna owca. Co jest w niej takiego magicznego? Nie możesz jej zabić. Będzie tu stała dopóki magicznie nie zniknie. W czasie swej egzystencji będzie po prostu żuć trawę tępo patrząc w dal. + + Baa! + Baa? + Baa. + Baa... + Bee... + Ble... + + + Kostur Błyskawicy + Ten kostur przywołuje śmiertelnie niebezpieczne wiązki błyskawic, które zranią kilka stworzeń stojących blisko siebie. + Zabiłeś siebie Kosturem Błyskawicy... + + Kostur Magicznego Pocisku + Ten kostur wystrzeliwuje pociski czystej energii magicznej, zadając niewielkie obrażenia celowi w który uderzy. + WYŁADUJ + Zabiłeś siebie Kosturem Magicznego Pocisku... + Wybierz kostur do ulepszenia + wyładowałeś Kostur Magicznego Pocisku i użyłeś jego esencji by %s stał się znacznie silniejszy. + + Kostur Trucizny + Mroczny wybuch wywołany tym spaczonym kawałkiem drewna napełni ciało ofiary śmiercionośnym jadem. Stworzenie, które jest zatrute będzie otrzymywać periodyczne obrażenia dopóki efekt się nie skończy. Im wyższy poziom kostura, tym dłuższy będzie czas działania trucizny. + nic się nie stało + + Kostur Natury + \"Kiedy jedno życie się kończy, drugie zawsze się zaczyna... Wieczny cykl trwa zawsze!\" + nic się nie stało + + Kostur Spowolnienia + Ten kostur sprawi, że stworzenie będzie się poruszało i atakowało o połowę wolniej niż normalnie, dopóki efekt się nie skończy. + nic się nie stało + + Kostur Dotrzeć + Ta różdżka narzędzie może być używany do przechwycenia obiektów z odległości i zamienić się miejscami z wrogami. Fala magicznej mocy tego kostura uaktywni pułapki, stratuje wysoką roślinność, otworzy zamknięte i zamknie otwarte drzwi na swej trasie. + Magicznie przeteleportowałeś %s do Twojego Plecaka + + Kostur Teleportacji + Pocisk tego kostura teleportuje stworzenie wbrew jego woli do losowego miejsca na obecnym poziomie. + %1$s przeteleportował %2$s w inne miejsce + nic się nie stało + + + + + %1$s został już przez ciebie dokładniej poznany. Okazuje się, że to %2$s. + Interakcja roznych typow magii usunela zaklecie z tej broni! + %1$s :%2$d + złamany %1$s :%2$d + + + + + śmiercionośny %s + + płonący %s + + duchowy %s + + niestabilny %s + + wampiryczny %s + + szczęśliwy %s + + ogłuszający %s + + trujący %s + + wstrząsający %s + + zimny %s + + hartowanego %s + + + + + Ten %1$s to %2$s %3$d-ego tieru. Jest bronią białą. + + ulepszony + zdegradowany + złamany + Zadaje średnie obrażenia o wartości %d punktów na uderzenie. + Jego średnie obrażenia zazwyczaj zadają %1$d punktów na uderzenie i wymaga %2$d punktów Siły. + Prawdopodobnie ta broń jest dla ciebie za ciężka. + To raczej %s broń. + szybka + powolna + i + ale + celna + niecelna + Broń ta została specjalnie zbalansowana by uczynić ją szybszą. + Broń ta została specjalnie zbalansowana by uczynić ją celniejszą. + Jest to zaczarowane. + Ponieważ nie jesteś wystarczająco silny, %s będzie znacznie wolniejszy, a także mniej celny. + Ponieważ jesteś niezwykle silny, %s zadaje większe obrażenia. + Trzymasz %1$s w pogotowiu %2$s. + , i ponieważ ta broń jest przeklęta, jesteś bezsilny by ją zostawić. + %s emanuje mroczną magią. + + topór bitewny + Ogromna stalowa głowica tego topora zadaje olbrzymie obrażenia z każdym uderzeniem. + + sztylet + Zwykły żelazny sztylet z poręczną, drewnianą rękojeścią. + + glewia + Włócznia posiadająca ostrze miecza zamiast grotu na czubku kija. + + kastet + Kawałek żelaza dopasowany do knykci. + + długi miecz + To wielkie ostrze zadaje ciężkie obrażenia z każdym cięciem. + + buława + Stalowa głowica tej broni zadaje przyzwoite obrażenia. + + pałka bojowa + Pałka wykonana z twardego drewna, której czubki są zakończone żelazem. + + krótki miecz + W rzeczy samej jest krótki, ponieważ jest o kilka cali dłuższy od sztyletu. + PRZEKUJ + wybierz broń do ulepszenia + Przekułeś krótki miecz by wzmocnić %s + Nie możesz ulepszyć bumerangu w ten sposób + + włócznia + Smukły drewniany kij zakończony ostrym, żelaznym grotem. + + miecz + Ostre jak brzytwa stalowe ostrze błyszczy dumnie w ciemności. + + młot wojenny + Niewiele stworzeń jest w stanie wytrzymać miażdżące ciosy tego ogromnego młota wykonanego z ołowiu i stali, ale tylko najsilniejsi poszukiwacze przygód mogą go używać efektywnie. + + + + + Broń dystansowa + Tak, wiem co robię + Nie, zmieniłem zdanie + Czy aby na pewno chcesz tego używać jako broni białej? + \n\nŚrednie obrażenia tej broni wynoszą %d za każde uderzenie. + Ponieważ nie jesteś wystarczająco silny, %s jest znacznie mniej poręczny. Trafienie nim jest trudniejsze i wymaga więcej czasu na przygotowanie. + %s zadaje więcej obrażeń ze względu na twoją ogromną siłę. + \n\nTrzymasz %s w pogotowiu. + + bumerang + Rzucony we wroga, ten kawałek zakrzywionego drewna wróci z powrotem do rąk swego właściciela. + + trująca rzutka + Te małe, złe rzutki nie zadają dużo obrażeń, ale mogą sparaliżować cel, pozostawiając go bezbronnym i unieruchomionym na pewien czas. + + rzutka + Te proste w użyciu metalowe kolce są na tyle lekkie, że można nimi rzucać szybko i efektywnie za pomocą jednego ruchu nadgarstka. + + podpalająca rzutka + Każdy kolec tych rzutek został zaprojektowany do wbicia się w cel, podczas gdy niestabilna substancja zawarta w nim sprawi, że wróg lub przeszkoda stanie w pięknych płomieniach. + + oszczep + Długość oszczepu została tak przemyślnie wykonana, by kolec na jego czubki praktycznie sunął przez powietrze. + + shuriken + Te ostre jak brzytwa kawałki metalu w kształcie gwiazdek zadają niczego sobie obrażenia kiedy uderzą cel. Mogą być rzucane z dużą szybkością. + + tomahawk + Ten toporek do rzucania nie jest aż tak ciężki, ale nadal potrzebuje sporej siły do użycia jego efektywnie. + + + + + Chmura narkotycznego gazu tutaj się unosi. + + Ogień tutaj szaleje. + + Snopy światła oświetlają pogrążony w mroku ogród. + + Chmura gazu paraliżującego tutaj się unosi. + + \"Twoja ofiara jest godzien...\" + \"Twoja ofiara jest niegodne...\" + \"Twoje poświęcenie jest godne i tak jesteś!\" + Płonie ogień ofiarny tutaj. Każde stworzenie dotknął tego ognia jest oznaczony jako ofiara dla duchów lochu. + Zaznaczono ofiary + + Chmura gazu toksycznego się tutaj unosi. + Zabił cię trujący gaz... + + Potęga wiedzy emanuje z wody tej studni. Weź z niej łyk by poznać sekrety założonych przedmiotów. + Gdy tylko wziąłeś łyk wody z tej studni, czujesz jak wiedza wypełnia twój umysł. Teraz wiesz wszystko o używanych przez ciebie przedmiotach. Możesz też wyczuć inne przedmioty na tym poziomie, oraz znasz wszystkie jego sekrety. + + Potęga życia emanuje z wody tej studni. Weź z niej łyk by uleczyć swe rany i nasyć głód. + Gdy tylko bierzesz łyk z tej studni, czujesz jak twoje rany goją się całkowicie. + + Potęga zmiany emanuje z wody tej studni. Wrzuć przedmiot do studni by zmienić go w coś innego. + + Wszystko jest tutaj pokryte grubą siecią. + + + + + Amok + + Twarda Skóra + + Krwotok + Wykrwawiasz się na śmierć... + + Ślepota + + Pożoga + %s spala się! + Spaliłeś się na śmierć... + + Zauroczony + + Kombinacja + Udało ci się wykonać kombinację %d ciosów! + + Sponiewierany + + Zamrożony + + Furia + + Odporny na gazy + + Jesteś głodny. + Konasz z głodu! + Zostałeś zagłodzony na śmierć... + Głodny + Wygłodzony + + Niewidzialny + + Lewitacja + + Oświecony + + Wizja Telepatyczna + + Żrący śluz + %s zabił ciebie... + + Sparaliżowany + + Zatruty + Trucizna ciebie zabiła... + + Zaślepiony gniewem + + Unieruchomiony + + Stopiony z cieniem + + Spowolniony + + Znak Snajpera + + Zawroty głowy + + Osłabiony + + + + + plecak + + + + + Prawdziwe opisy pojawią się wkrótce! + Usłyszałeś jak coś gdzieś umarło. + echo \u0020 + %1$s: \"%2$s\" + %s śpi + %s wędruje + %s poluje + %s ucieka w popłochu + %s jest przyjazne + + Kwasowy skorpion + + Szczur albinos + + Szalony bandyta + + Wampirzy nietoperz + Ci energiczni i wytrwali mieszkańcy jaskiń mogą pokonać znacznie większych przeciwników, wysysając ich życie z każdym udanym atakiem. + unik + + Siepacz Gnolli + Siepacze to najwięksi, najsilniejsi i najwytrzymalsi ze wszystkich Gnolli. Kiedy są ciężko ranni przechodzą w stan berserkerski, zadając jeszcze więcej obrażeń swym wrogom. + %s staje się wściekły! + Wściekły + + Krab ściekowy + Te olbrzymie kraby są na górze łańcucha pokarmowego w kanałach. Są niezwykle szybkie, a ich gruby egzoszkielet potrafi wytrzymać nawet potężne ciosy. + sparowano + + przeklęty wcielenie + Ta istota przypomina o smutnej ducha, ale to wiruje z ciemności. Jego twarz nosi wyraz rozpaczy. + + DM-300 + DM-350 + Ta maszyna została stworzona przez Krasnoludy kilka wieków temu. Później Krasnoludy zaczęły wymieniać maszyny golemami, żywiołakami a nawet demonami. Ostatecznie doprowadziło ich cywilizację do izolacji. DM-300 i podobne maszyny były normalnie używane do budowy struktur, górnictwa, a w niektórych przypadkach, także do obrony miasta. + DM-300 rozpoczął naprawę! + Misja nie powiodła się. Wyłączanie systemu. + Nieautoryzowany personel wykryty. Rozpocząć eksterminację. + + Żywiołak ognia + Podróżujące tam i z powrotem żywiołaki ognia są skutkiem ubocznym przyzywania większych istnień. Są zbyt chaotyczne z natury by być kontrolowanymi nawet przez najpotężniejszego demonologa. + + Złe oko + Jedno z imion tego demona brzmi \"kula nienawiści\", ponieważ gdy widzi wroga używa bezmyślnie swego Wzroku Śmierci, często ignorując swoich sojuszników i raniąc ich dotkliwie. + %s\'s Wzrok Śmierci zabił ciebie... + + cuchnący ściekoszczur + Ten ściekoszczur jest znacznie większy od zwykłego szczura. Jest otoczony chmurą paraliżującego smrodu... + unik + + Zwiadowca Gnolli + Gnolle są hienopodobnymi humanoidami. Ukrywają się w kanałach i lochach wybierając się na powierzchnię od czasu do czasu by zaatakować Miasto. Zwiadowcy Gnolli to podstawowi członkowie ich klanu, nie są tak silni jak siepacze i nie tak inteligentni jak szamani. + + golem + Krasnoludy próbowały połączyć ich wiedzę o mechanizmach z ich nowo nabytą wiedzą o Pętaniu Żywiołów. Używali Duchów Ziemi jako \"duszę\" dla mechanicznych ciał golemów, które miały być rzekomo całkowicie poddane kontroli Kransoludów. W każdym razie najmniejszy błąd w rytuale Pętania mógłby doprowadzić do epidemii. + blok + + Goo + pomiot Goo + Niewiele wiadomo na temat Szlamu. Prawdopodobnym jest, że to nawet nie jest potwór, ale raczej mieszanina substancji chemicznych ze ścieków, która zyskała strzępki wolnej woli. + Szlam ładuje cios! + glurp... glurp... + GLURP-GLURP! + !!! + + Król Krasnoludów + nieumarły Król Krasnoludów + Ostatni król krasnoludów był znany ze swego głębokiego zrozumienia procesów życia i śmierci. Przekonał członków jego dworu by zgodzili się uczestniczyć w rytuale, który powinien był dać im dar wiecznej młodości. Koniec końców tylko Król go otrzymał - i armię nieumarłych jako dodatek. + sparowano + Nie.. Nie możesz mnie zabić, %s... Ja jestem... Nieśmiertelny... + Powstańcie, Niewolnicy! + Jak śmiesz! + nieumarły krasnolud + Te nieumarłe krasnoludy, wskrzeszone przez wolę Króla Krasnoludów, byli kiedyś członkami jego dworu. Pojawiają się jako szkielety ze zdumiewającej wielkości brodą. + blok + + mimik + Mimiki są magicznymi stworzeniami, które mogą przybrać dowolny kształt. W lochach prawie zawsze przybierają kształt skrzyni ze skarbami ponieważ wiedzą jak zmylić poszukiwacza przygód. + + Krasnoludzki Akolita + Ci Akolici to fanatycy którzy zobowiązali się chronić sekrety ich miasta przed wszystkimi obcymi z zewnątrz. Nie używają żadnego pancerza ani broni, polegają lojalnie na sztuce walki ręka-ręka.` + sparowano + %1$s wytrącił %2$s z Twoich dłoni! + + Ogromna Pirania + Te mięsożerne ryby nie są naturalnymi mieszkańcami podziemnych basenów. Zostały tutaj umieszczone specjalnie, by bronić zalanych skarbnic. + + ściekoszczur + Ściekoszczury są agresywne, ale raczej słabymi mieszkańcami kanałów. Mogą być niebezpieczne tylko w dużych grupach. + + skorpion + Te ogromne pająkopodobne demoniczne kreatury unikają walki wręcz za wszelką cenę, gdyż wolą strzelać w swą ofiarę spowalniającymi, ząbkowanymi kolcami z dużych dystansów. + + Starszy akolita + + szaman gnolli + Najbardziej inteligentne z Gnolli mogą opanować magię Szamanów. Szamani Gnolli preferują bojowe zaklęcia w ramach rekompensaty za ich brak siły. Nie wahają się używać ich przeciwko tym, którzy kwestionują ich status w klanie. + %s\'s piorun zabił ciebie... + + tarczownik gnolli + blok + + szkielet + Szkielety to odpowiednio spreparowane kości podróżników i mieszkańców Lochu, którzy zostali ożywieni przez emanację mrocznej magii z głębszych poziomów. Kiedy giną, są tak samo niebezpieczne jak za \"Życia\", ponieważ gdy giną rozpadają się w eksplozji kości raniąc swego zabójcę. + blok + Zginąłeś w wyniku wybuchu kości... + + jaskiniowy tkacz + Te zielonkawe, futrzane, jaskiniowe pająki w miarę możliwości próbują unikać bliskiego kontaktu, woląc czekać nieopodal, podczas gdy ich ofiara, splątana w grubej pajęczynie powoli umiera w wyniku powikłań ich trującego ugryzienia. + + żywy posąg + Myślisz że to kolejny brzydki posąg w Lochu, ale jego świecące, czerwone oczy natychmiast podpowiadają, że z nim jest coś nie tak. I ten _%s_, który dzierży w swych dłoniach jest podejrzanie prawdziwy. + + sukkubus + Sukkubusy to demony, które wyglądają jak pociągające (w nieco gotyckim stylu) dziewczyny. Używając piekielnej magii, mogą oczarować bohatera, który nie może zaatakować niczego dopóki urok się nie ulotni. + + Rój Much + Ten śmiertelnie groźny rój much wściekle bzyczy. Każdy niemagiczny atak podzieli go na dwa mniejsze, ale równie niebezpieczne roje. + unik + + Tengu + Pamięć o Tengu + Tengu są członkami starożytnego klanu zabójców, który także się nazywa Tengu. Ci zabójcy są znani z niezwykłych umiejętności posługiwania się shurikenami i pułapkami. + Wolny... Nareszcie... + Mam cię, %s! + + szalony złodziej + Niższe poziomy lochu zawsze były kryjówką dla kryminalistów wszelkiego sortu. Nie wszyscy mogli zachować jasność umysłu po tak długim okresie przebywania z dala od słońca. Dawno temu ci szaleni złodzieje i bandyci zapomnieli kim są i dlaczego kradną. + %1$s ukradł ci %2$s z twojego plecaka! + \n\n%1$s nosi ze sobą _%2$s_. Oczywiście ukradzione. + + Krasnoludzki Czarnoksiężnik + Kiedy krasnoludy zaczęły się interesować sztuką magii bardziej niż inżynierią, czarnoksiężnicy doszli do władzy w mieście. Początkowo posługiwali się magią żywiołów, ale przestawili się na demonologię i nekromancję. + %s\'s wystrzelił ostatni w Twym życiu Pocisk Cienia... + + widmo + Widma to żądne zemsty duchy nieboszczyka, którego grób lub grobowiec został splądrowany. Są one bytami eterycznymi i ciężko je zranić standardową bronią. + unik + + Yog-Dzewa + echo Yog-Dzewa + Yog-Dzewa to Prastary Bóg, potężna istota z wymiaru Chaosu. Wiek temu starożytne krasnoludy ledwo wygrały wojnę przeciwko jego armii demonów, ale były bezsilne by zabić boga we własnej osobie. Zamiast tego uwięzili go w salach pod ich miastem, wierząc iż jest zbyt słaby by kiedykolwiek powrócić do swej dawnej potęgi. + ... + Mam nadzieję, iż to jest iluzja... + gnijąca pięść + płonąca pięść + larwa boga + + + + + złota pszczoła + Pomimo niewielkich rozmiarów, złote pszczoły mają tendencję do ochrony swojego pana zaciekle. Oni nie żyją długo. + Ta %s wędrówki + + Kowal Trolli + Ten kowal Trolli wygląda jak każdy Troll: jest wysoki i chudy, jego skóra przypomina kamień z koloru jak i wyglądu. Kowal Trolli pracuje z nieproporcjonalnie małymi narzędziami. + Hej, człowieku! Chcesz się na coś przydać, hę? Weź ten kilof i wydobądź mi trochę _Rudy Mrocznego Złota_. Myślę, że _15 kawalkow_ powinno wystarczyć. Jak ci mam zapłacić? Jesteś chciwy... \nDobrze, dobrze, nie mam złota by ci zapłacić, ale mogę odwalić dla ciebie trochę kowalskiej roboty! Uznaj siebie za szczęściarza, bo jestem jedynym kowalem w okolicy. + Hej człowieku! Chcesz się na coś przydać, hę? Weź ten kilof i _zabij nim nietoperza_ . Potrzebuję jego krwi do ukończenia mojego projektu. Jak mam ci zapłacić? Jesteś chciwy... \nDobrze, dobrze, nie mam złota by ci zapłacić, ale mogę odwalić dla ciebie trochę kowalskiej roboty! Uznaj siebie za szczęściarza, bo jestem jedynym kowalem w okolicy. + Żarty sobie ze mnie robisz? Gdzie jest mój kilof?! + Ruda Mrocznego Złota. 15 kawałków. Naprawdę? To aż takie trudne? + Powiedziałem, że potrzebuję krwi nietoperza na tym kilofie! Siek, siek! + Oh, wróciłeś... Cóż, lepiej późno niż wcale. + Jestem zajęty.. Idź stąd! + %s zdecydowanie wygląda lepiej + Wybierz 2 różne przedmioty, nie takie same! + Wybierz 2 identyczne przedmioty! + Muszę wiedzieć z czym pracuję, zidentyfikuj najpierw te przedmioty! + Nie pracuję z przeklętymi przedmiotami! + To złom, jego jakość jest za słaba! + Nie mogę przekuć tych rzeczy! + + smutny duch + Ten duch jest ledwo widoczny. Wygląda jak bezkształtna masa światła z twarzą pełną cierpienia. + unik + Witaj podróżniku... Kiedyś byłem taki jak ty - silny i pewny siebie... Ale teraz jestem martwy... Ale nie mogę opuścić tego miejsca... Nie bez mojej _wysuszona róża_... Jest dla mnie bardzo ważna... Wręczyła mi ją moja ukochana lata temu, lecz jakiś potwór skradł ją z moich szczątków... Odzyskaj ją... + Proszę... Pomóż mi... _Znajdź różę_... + Tak! Tak!!! To jest to! Proszę daj mi to! Możesz w nagrodę wziąć jeden z tych przedmiotów, może przydadzą ci się w podróży... + Witaj podróżniku... Kiedyś byłem taki jak ty - silny i pewny siebie... Ale teraz jestem martwy... Ale nie mogę opuścić tego miejsca... Nie dopóki nie dopełni się moja zemsta! Zabij _cuchnący ściekoszczur_, który pozbawił mnie życia lata temu... Jedyne co pamiętam ze starcia z nim to smród... Otumaniający smród... + Proszę... Pomóż mi... _Zabij tę abominację_... + Tak! Paskudna kreatura jest zabita i mogę w końcu odpocząć... Proszę, weź jeden z tych przedmiotów, może przydadzą ci się w podróży... + Witaj podróżniku... Kiedyś byłem taki jak ty - silny i pewny siebie... Ale teraz jestem martwy... Ale nie mogę opuścić tego miejsca... Jestem związany strasznej klątwy... Proszę... Pomóż mi... _Zniszczyć klątwę_... + Dziękuję, %s! Przekleństwo jest uszkodzony i może wreszcie odpocząć... Proszę, weź jeden z tych przedmiotów, może przydadzą ci się w podróży... + Tak, zrobię to za Ciebie + Nie, nie mogę ci pomóc + + chochlik ambitny + Impy to pomniejsze demony. Nie są podziwiane ze względu na ich siłę czy talent magiczny, lecz ich inteligencję i zdolności retoryczne. Wiele impów woli żyć pośród nie-demonów. + unik + Jesteś podróżnikiem? Kocham podróżników! Możesz na nich zawsze polegać jeśli coś ma być zabite. Mam rację? Oczywiście za nagrodę ;)\nW moim przypadku są to _Golemy_, które muszą zostać wykończone. Widzisz, zamierzam założyć tutaj mój mały interes, lecz te głupie golemy mu nie służą! Przeciwnie! Wiesz, trudno negocjować z chodzącymi kupami granitu, niech je szlag! Więc proszę, zabij powiedzmy... _6 z nich_, a nagroda będzie twoja! + Jak tam idzie twoje safari z golemami? + Jesteś podróżnikiem? Kocham podróżników! Możesz na nich zawsze polegać jeśli coś ma być zabite. Mam rację? Oczywiście za nagrodę ;)\n W moim przypadku są to _akolici_, którzy muszą zostać wykończeni. Widzisz, zamierzam założyć tutaj mój mały interes, lecz ci szaleńcy niczego nie kupują dla siebie i odstraszają innych klientów! Więc proszę, zabij powiedzmy... _8 z nich_ i nagroda będzie twoja! + Oh, ty jeszcze żyjesz! Wiedziałem że twoje kung-fu jest silniejsze ;) Tylko nie zapomnij wziąć Akolickich Amuletów z ich ciał! + Do zobaczenia, %s! + Psst, %s! + + chochlik ambitny + Impy to pomniejsze demony. Nie są podziwiane ze względu na ich siłę czy talent magiczny, lecz ich inteligencję i zdolności retoryczne. Wiele impów woli żyć pośród nie-demonów. + Witaj przyjacielu! + + lustrzany obraz + Ta iluzja w znacznym stopniu odzwierciedla twoją postać, lecz jest bledsza i jej kontury trochę drżą. + + król szczurów + Ten szczur jest nieco większy od typowego ściekoszczura i nosi małą koroną na głowie. + Ja wcale nie śpię! + Co jest?! Nie mam czasu na takie dyrdymały. Moje królestwo nie będzie się rządzić samemu! + + kupiec + Ten starszy jegomość wygląda na kogoś, kto pasowałby idealnie do dystryktu handlowego w Mieście niż w Lochu. Jego ceny wyjaśniają czemu woli prowadzić swój interes w takim miejscu. + Wybierz przedmiot do sprzedaży + + Stary kosturnik + Ten stary, ale żwawy pan jest nieco zdezorientowany. Jest chroniony przez magiczną tarczę. + wchłonięto + Och, cóż za miła niespodzianka, spotkać prawdziwego człowieka w takim miejscu! Przybyłem tutaj po rzadki składnik - _nasiona Pętojagody_. Będąc użytkownikiem magii, mogę chronić się przed lokalnymi potworami, lecz gubię się w braku czasu, co jest bardzo irytujące. Może mógłbyś mi pomóc? Byłbym szczęśliwy, mogąc ci oferować ci jeden z mych najlepszych różdżek. + Jakieś postępy w poszukiwaniu _nasiona Pętojagody_, %s? Nie martw się, nie spieszy mi się. + Och, coż za miła niespodzianka, spotkać prawdziwego człowieka w takim miejscu! Przybyłem tutaj po rzadki składnik - _pyłu trupa_. Może zostać zebrany z kościanych szczątków, a tych jest całkiem sporo w Lochu. Będąc użytkownikiem magii, mogę chronić się przed lokalnymi potworami, lecz gubię się w braku czasu, co jest bardzo irytujące. Może mógłbyś mi pomóc? Byłbym szczęśliwy, mogąc ci oferować ci jeden z mych najlepszych różdżek. + Jakieś postępy w poszukiwaniu _pyłu trupa_, %s? Stosy kości to najbardziej oczywiste miejsca do zbadania. + Och, coż za miła niespodzianka, spotkać prawdziwego człowieka w takim miejscu! Przybyłem tutaj po rzadki składnik - _fantom ryby_. Możesz złapać go gołymi rękami, ale jest to bardzo trudne do zawiadomienia w wodzie. Będąc użytkownikiem magii, mogę chronić się przed lokalnymi potworami, lecz gubię się w braku czasu, co jest bardzo irytujące. Może mógłbyś mi pomóc? Byłbym szczęśliwy, mogąc ci oferować ci jeden z mych najlepszych różdżek. + Jakieś postępy w poszukiwaniu _fantom ryby_, %s? Możesz spróbować poszukać go w jednej z lokalnych basenów. + + + + + Ukryta płyta naciskowa została włączona! + Otchłań + Podłoga + Trawa + Woda + Ściana + Zamknięte drzwi + Otwarte drzwi + Przejście w dół + Wyjście na górę + Rozżarzone węgielki + Zablokowane drzwi + Piedestał + Barykada + Wysoka trawa + Zablokowane wejście do podziemi + Odblokowane wejście do podziemi + Znak + Studnia + Pusta studnia + Posąg + Pułapka z toksycznym gazem + Pułapka ognista + Pułapka z gazem paraliżującym + Pułapka Trująca + Pułapka alarmująca + Pułapka porażająca + Pułapka chwytająca + Pułapka przywołująca potwora + Aktywowana pułapka + Regał na książki + Kociołek alchemiczny + \?\?\? + Nie możesz ujrzeć dna. + Kiedy się palisz wejdź do wody by ugasić płomienie. + Schody prowadzące na górny poziom. + Schody prowadzące poziom niżej. + Rozżarzone węgielki pokrywają podłogę. + Gęsta roślinność blokuje widok. + Te drzwi są zamknięte. Potrzebujesz pasującego klucza by je otworzyć. + Ciężkie kraty blokują schody prowadzące niżej. + Ta drewniana barykada jest sprytnie skonstruowana, ale tworzące ją drewno wysuszyło się po latach. Może się spali? + Nie możesz przeczytać tekstu z tego miejsca. + Jeżeli staniesz na płycie naciskowej, aktywujesz pułapkę. + Ta pułapka została już aktywowana i nie jest już dłużej groźna. + Ktoś chciał ozdobić nieco to miejsce, ale oczywiście mu się nie udało. + Wrzuć tutaj trochę nasion by spreparować miksturę. + Studnia wyschła do dna. + + Świecący mech + Świecące grzyby + Lodowato zimna woda. + Drabina prowadząca na wyższy poziom. + Drabina prowadząca na niższy poziom. + Wielkie grzyby blokują widok. + Żyła jakiejś rudy jest widoczna na ścianie. Złoto? + Kto u licha potrzebuje biblioteczki w jaskini? + + Podejrzanie kolorowa woda + Wysokie, kwitnące kwiaty + Rampa prowadząca na wyższy poziom. + Rampa prowadząca na niższy poziom. + Na tej ścianie brakuje kilku kafelków. + Gruby dywan pokrywa podłogę. + Posąg przedstawia krasnoluda stojącego w heroicznej pozie. + Rzędy książek poświęconych różnym dziedzinom zapełniają regały biblioteczki. + + Zimna lawa + Żaromech + Żarogrzyby + Kolumna + Wygląda jak lawa, ale jest zimna i prawdopodobnie można jej bezpiecznie dotknąć. + Kolumna wykonana z prawdziwych, humanoidalnych czaszek. Świetne. + Książki napisane w starożytnych językach kurzą się na półce. + + Zimna lawa + Żaromech + Żarogrzyby + Kolumna + Wygląda jak lawa, ale jest zimna i prawdopodobnie można jej bezpiecznie dotknąć. + Kolumna wykonana z prawdziwych, humanoidalnych czaszek. Świetne. + + Podejrzanie kolorowa woda + Wysokie, kwitnące kwiaty + Rampa prowadząca na górny poziom. + Rampa prowadząca do Piekła. + Na tej ścianie brakuje kilku kafelków. + Gruby dywan pokrywa podłogę. + + Ciemna, zimna woda. + Stare ślady krwi pokrywają podłogę. + Prawdopodobnie pozostałości po więziennej bibliotece. Może się spali? + + Brudna woda + Mokry, żółtawy mech pokrywa podłogę. + Ta biblioteczka jest pełna tanich i bezużytecznych książek. Może się spali? + + + + + Wybierz nasiono do wrzucenia + + Otchłań + Tak, wiem co robię + Nie, zmieniłem zdanie + Naprawdę chcesz wskoczyć w otchłań? Prawdopodobnie zginiesz. + Zginąłeś od upadku z wysokości... + + Co ty tutaj robisz?! + Jak próbujesz odczytać znak, że wpada do zielonkawych płomieni. + + Nie przeceniaj swej siły. Używaj broni i pancerzy, które możesz udźwignąć. + Nie wszystkie drzwi w Lochu są widoczne na pierwszy rzut oka. Jeśli utkniesz, szukaj ukrytych drzwi. + Pamiętaj, że zwiększanie siły to nie jedyny sposób by zyskać dostęp do lepszego rynsztunku. Możesz pójść inną drogą i zmniejszyć wymagania siłowe przedmiotu ulepszając go Zwojem Ulepszenia. + Możesz wydać złoto w sklepach znajdujących się na niższych poziomach Lochu. Pierwszy z nich znajduje się na poziomie 6. + Strzeż się Goo! + Pixel Sklep. Wszystko czego potrzebujesz do udanej przygody!! + Zidentyfikuj swe zwoje i mikstury najszybciej jak możesz. Nie odkładaj ich na czarną godzinę. + Bycie głodnym nie boli, lecz konanie z głodu owszem. + Atak z zaskoczenia ma znacznie większą szansę powodzenia. Na przykład możesz złapać wroga w pułapkę, chowając się za drzwiami i atakując go kiedy je otworzy. + Nie wypuść Tengu na wolność! + Pixel Sklep. Wydawaj pieniądze. Żyj dłużej. + Kiedy zostaniesz zaatakowany przez kilka potworów, wycofaj się za drzwi. + Kiedy lewitujesz, nie możesz wejść do wody by ugasić pożar. + Nie ma sensu posiadania więcej niż jednego Ankh jednocześnie bo stracisz je po wskrzeszeniu. + UWAGA! Ciężka maszyneria może spowodować zranienie, utratę kończyn lub śmierć! + Pixel Sklep. Bezpieczniejsze życie w Lochu. + Kiedy ulepszasz zaklęte przedmioty, istnieje szansa na zniszczenie tego zaklęcia. + Broń i zbroje pogarsza się szybciej niż różdżki i pierścienie, ale jest więcej sposobów, aby je naprawić. + Jedynym sposobem na uzyskanie Zwój Czystość ma otrzymać go w prezencie od duchów Bossów. + Posiadanie broni w pobliżu Jego Wysokości jest surowo wzbronione! + Pixel Sklep. Specjalne ceny dla łowców demonów! + + + + + + Pułapka emituje przeszywający dźwięk, który rozchodzi się echem po całym lochu! + + Pułapka porażająca + Zostałeś zabity przez wyładowanie elektryczne pułapki porażającej... + + + + + Nie wiesz co tam się znajduje. + Wybierz miejsce by je zbadać + + + + + + + 0 + \ No newline at end of file diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000..675387365c --- /dev/null +++ b/res/values-pt-rBR/strings.xml @@ -0,0 +1,1657 @@ + + + + Pixel Dungeon + + + + + Jogar + Rankings + Medalhas + Sobre + + Código & Gráficos: Watabou\nMúsica: Cube_Code\n\nEste jogo foi inspirado por Brian Walker\'s Brogue. \nTente também em Windows, Mac OS ou Linux - é incrível! ;)\n\nPor Favor visite o site oficial para mais informações: + pixeldungeon.watabou.ru + Tradução: rodriformiga + rodriformiga@gmail.com + Enviar E-Mail + + Melhores Rankings + Total jogos ganhos/iniciados:\u0020 + Nenhum jogo iniciado. + Sem informações adicionais! + + Medalhas + + Carregar Jogo + Novo Jogo + Apagar jogo atual + Profund.: %1$d, level: %2$d + Você realmente quer começar um novo jogo? + O seu progresso no jogo atual será apagado. + Sim, iniciar novo jogo + Não, voltar ao menu principal + Para desbloquear esta classe de personagem, mate o terceiro chefe com qualquer classe de jogador + Para desbloquear \"Desafios\", ganhe o jogo com pelo menus uma classe de jogador. + + Descendo... + Subindo... + Carregando... + Ressucitando... + Retornando... + Caindo... + Arquivo não existe. Por alguma razão... + Algo está errado... + + Muitos heróis de todos os tipos se aventuraram na caverna antes de você. Alguns deles voltaram com tesouros e artefatos mágicos, mas nunca mais se ouviu falar na maioria deles. E nenhum deles conseguiu recuperar o Amuleto de Yendor, que dizem estar escondido nas profundezas do calabouço.\n\nVocê se considera pronto para o desafio? Mas o mais importante, você sente que a sorte sorri para você? Está na hora de iniciar a sua própria aventura! + + Foi bom enquanto durou + Eu não acabei ainda + Você finalmente segurou em suas mãos o Amuleto de Yendor. Usando o seu poder, você pode dominar o mundo ou trazer paz e prosperidade para as pessoas ou o que quiser. De qualquer forma, sua vida vai mudar para sempre e este jogo vai terminar aqui. Ou você pode continuar um mero mortal um pouco mais. + + Bem-vindo ao nível %d de Pixel Dungeon! + Bem-vindo de volta ao nível %d de Pixel Dungeon! + Seja cauteloso, pois o calabouço é ainda mais perigoso à noite! + Seus passos ecoam através do calabouço. + Você ouve o respingos de água ao seu redor. + O cheiro da vegetação está forte no ar. + O ambiente sugere que este piso esconde muitos segredos. + + + + mob + %1$s bateu em %2$s + %s matou você... + %1$s derrotou %2$s + %1$s %2$s seu ataque + %1$s %2$s o ataque de %3$s + A dor de %s causou paralisia + evitou + envenenado + fúria + lento + visão + mental + paralisado + assustado + enraizado + aleijado + sangrando + confuso + invisível + + você + Não é tão simples deixar Pixel Dungeon + subiu de nível! + Bem-vindo ao nível %d! Agora você está mais saudável e focado. É mais fácil para você acertar os inimigos e desviar de seus ataques. + Você agora tem %s + Há algo mais aqui + Este baú está bloqueado e você não tem a chave para abri-lo + Você não tem uma chave correspondente + Você notou algo + ... + procurar + Você pegou Fogo! + Você foi paralisado! + Você foi envenenado! + Lodo tóxico queima a sua pele. Lave-se! + Você não pode se mover! + Você está fraco! + Você está cego! + Você ficou furioso! + furioso + Você foi encantado! + Você está incapacitado! + Você está sangrando! + Tudo está girando em torno de você! + + guerreiro + mago + ladrão + caçadora + + Guerreiros começam com 11 pontos de força. + Guerreiros começam com uma Espada Curta. Esta espada pode ser \"reforjada\" para se transformar em outra arma. + Guerreiros são menos hábeis com armas de arremesso. + Qualquer pedaço de comida recupera um pouco de vida quando comidos. + Poções de Força são identificadas desde o início. + + + Magos começam com uma Varinha Míssil Mágico. Esta varinha pode ser \"desencantada\" para se transformar em outra varinha. + Magos recarregam suas varinhas mais rápido. + Quando ingerido, qualquer pedaço de comida recupera 1 carga de todas as varinhas no inventário. + Magos podem usar varinhas como uma arma de combate. + Pergaminhos de Identificação são identificados desde o início. + + + Ladrões começam com um Anel de Sombras +1. + Ladrões podem identificar um anel ao equipa-lo. + Ladrões estão acostumados com armaduras leves, esquivando-se melhor, quando vestem armadura. + Ladrões são peritos na detecção de portas e armadilhas escondidas. + Ladrões podem ficar sem comida por mais tempo. + Pergaminhos de Mapeamento de Magia são identificados desde o início. + + + Caçadoras começam com 15 pontos de vida. + Caçadoras começam com um Bumerangue, mas ele é atualizável. + Caçadoras são peritas em armas de arremesso, e tem bônus de ataque quando usadas. + Caçadoras ganham mais vida a partir de gotas de orvalho. + Caçadoras podem sentir monstros por perto, mesmo que eles estejam escondidos atrás de obstáculos. + + + gladiador + Um ataque bem sucedido com arma branca permite que o _Gladiador_ inicie um combo, onde no próximo ataque causa mais danos + fúria + Quando gravemente ferido, o _Fúria_ entra em um estado de fúria selvagem aumentando significativamente seu potencial de dano. + bruxo + Depois de matar um inimigo o _Bruxo_ consome a sua alma. Ele cura as feridas e preenche sua fome. + mago lutador + Ao lutar com uma varinha, o _Mago Lutador_ causa dano adicional, dependendo do número atual de cargas. Cada ataque bem sucedido restaura 1 carga para esta varinha. + assassino + Ao realizar um ataque surpresa, o _Assassino_ inflige danos adicionais ao seu alvo. + corredor + O _Corredor_ pode se mover quase duas vezes mais rápido do que a maioria dos monstros. Quando ele estiver em correndo, é muito mais difícil de acertá-lo. Para isso, ele deve estar livre e não ficar com fome. + atirador + _Atirador_ é capaz de detectar pontos fracos na armadura de um inimigo mais efetivamente quando estiver usando uma arma de mísseis. + guarda + Tendo uma forte ligação com as forças da natureza o _Guarda_ tem uma capacidade de conseguir gotas de orvalho e sementes de plantas. Também, pisar em grama alta concede um escudo temporário. + + + + Medalha: %s + Nova super medalha: %s + Nova medalha: %s + 10 inimigos mortos + 50 inimigos mortos + 150 inimigos mortos + 250 inimigos mortos + 100 ouro coletado + 500 ouro coletado + 2500 ouro coletado + 7500 ouro coletado + Level 6 conquistado + Level 12 conquistado + Level 18 conquistado + Level 24 conquistado + Todas as Poções identificadas + Todos os Pergaminhos identificados + Todos os anéis identificados + Todas as varinhas identificadas + Todas as Poções, Pergaminhos, Anéis & Varinhas identificados + + + + Todos os compartimentos comprados + Morto pelo Fogo + Morto por Envenenamento + Morto por Gás Tóxico + Morto de Fome + Morto por Encantamento + Morto por Cair + Morto por Fogo, Envenenamento, Gás Tóxico & Fome + + + + + 1º chefe foi morto + 2º chefe foi morto + 3º chefe foi morto + 4º chefe foi morto + 1º chefe foi morto por Guerreiro, Mago, Ladrão & Caçadora + + + + + + + + + 3º chefe foi morto por Guerreiro, Fúria, Bruxo, Mago, Corredor, Atirador & Guarda. + Anel da Barganha adquirido + Anel de Espinhos adquirido + 13 pontos de Força adquiridos + 15 pontos de Força adquiridos + 17 pontos de Força adquiridos + 19 pontos de Força adquiridos + 10 pedaços de comida comidos + 20 pedaços de comida comidos + 30 pedaços de comida comidos + 40 pedaços de comida comidos + + + + + Item de Level 3 adquirido + Item de Level 6 adquirido + Item de Level 9 adquirido + Item de Level 12 adquirido + + + + + + Todos os monstros raros foram mortos + + + + + Amuleto de Yendor adquirido + Amuleto de Yendor obtido por Guerreiro, Mago, Ladrão & Caçadora + 7-hit combo + 3 poções realizadas + 6 poções realizadas + 9 poções realizadas + 12 poções realizadas + Level concluído sem matar nenhum monstro + Monstro morto por uma arma Cruel + 6 piranhas mortas + 5 monstros mortos durante a noite + 10 jogos iniciados + 100 jogos iniciados + 500 jogos iniciados + 2000 jogos iniciados + Final Feliz + Desafio Vencido + Obrigado pelo seu apoio! + + + + + Em dieta + A fé é minha armadura + Medo de Agulhas + Terra estéril + Inteligência coletiva + Nas trevas + Runas proibidas + + + + + Poço de Vida + Poço de Consciência + Poço de Transmutação + Câmara de Sacrifício + Pote de Alquimia + Jardim + Estátua Viva + Fantasma Triste + Velho Fabricante de Varinhas + Troll Ferreiro + Diabinho Ambicioso + + + + Morto por %1$s no nível %2$d + Morto pelo %1$s no nível %2$d + Morto por você mesmo %1$s no nível %2$d + Morto por %1$s no nível %2$d + Morto pela explosão de uma bomba no nível %d + Morto por descarga de %1$s no nível %2$d + Queimou até a morte no nível %d + Passou fome até a morte no nível %d + Morreu por envenenamento no nível %d + Morreu por gás tóxico no nível %d + Sangrou até a morte no nível %d + Morreu com lodo tóxico no nível %d + Morreu caindo no nível %d + Você conquistou o Amuleto de Yendor + + + + + Ok, negócios são negócios, então o que eu posso fazer por você é reforjar 2 itens e transformá-los em um de melhor qualidade. + Selecione um item para reforjar + Reforjar + + Poções + Pergaminhos + Catálogo + + Desafios + + Qual caminho você vai seguir? + Vou decidir mais tarde + Você quer re-especializar o(a) %s? + Sim, eu quero re-especializar + Talvez mais tarde + + Mestre + + ERRO + + Configurações + Desafios + Rankings + Iniciar Novo Jogo + Menu Principal + Sair do Jogo + Voltar ao Jogo + + Stats + Buffs + Experiência + Força + Vida + Ouro Coletado + Profund. máxima + Level %1$d %2$s + Catálogo + Diário + + Ah, Ohhh! Você é meu herói!\nVou te dar uma recompensa, mas eu não tenho dinheiro comigo agora.\n\nEspere!! Eu tenho algo melhor para você. Este meu anel é herança de família: meu avô tirou-o do dedo de um paladino morto. + Pegue o Anel + + Não há nada aqui! + + Baú + Baú Trancado + Baú de Cristal + Tumba + Restos de Esqueletos + Você não vai saber o que há dentro até abri-lo! + Mas, para abri-lo você precisa de uma chave de ouro. + Você pode ver dentro do %s, mas para abrir o baú você precisa de uma chave de ouro. + Esta antiga tumba pode conter algo de útil, mas seu dono certamente vai opor-se à verificação. + Isso é tudo o que resta de um de seus antecessores. Talvez vale a pena verificar se há algo. + + Diário + + Idiomas + + Não foi possível carregar informações adicionais + @string/WndHero_Stats + Itens + Medalhas + @string/WndHero_StaTitle + @string/WndHero_Health + Desafios + @string/WndHero_Str + Duração Jogo + @string/WndHero_Depth + Mobs Mortos + @string/WndHero_Gold + Comida Usada + Poções Feitas + Ankhs Usados + + Você morreu, porém ainda há esperanças e você recebeu uma nova chance de continuar. Deseja Continuar? + Sim, eu vou lutar! + Não, eu desisto. + + Arma do Fantasma + Armadura do Fantasma + Adeus, aventureiro! + + + + - + Zoom Default + Menu Maior + Modo Imersivo + Idioma + Música + Efeitos Sonoros + Brilho + Segundo QuickSlot + Mudar para Retrato + Mudar para Paisagem + + O Calabouço situa-se abaixo da cidade e seus níveis superiores constituem, na verdade, o sistema de esgoto da cidade. Sendo teoricamente uma parte da cidade, estes níveis não são perigosos. Ninguém vai chamá-lo de um lugar seguro, mas pelo menos você não vai precisar lidar com magia negra aqui. + Muitos anos atrás, uma prisão subterrânea foi construída aqui para os criminosos mais perigosos. Na época parecia uma ideia muito inteligente já que era praticamente impossível fugir. Mas logo veio a Peste Negra, deixando os prisioneiros e guardas Loucos. No final, a prisão foi abandonada, apesar de alguns presos ficaram trancados aqui. + As cavernas que se estendem para baixo da prisão abandonada são pouco povoadas. Eles foram muito fundo para explorar recursos para a cidade, pois eram muito pobres em minerais. No passado havia um posto avançado de comércio em algum lugar por aqui, na rota entre estes dois estados, mas desapareceu desde o declínio da Dwarven Metropolis. Somente gnolls onipresentes e animais subterrâneos moram aqui agora. + Dwarven Metropolis já foi a maior cidade-estado dos anões. Em seu auge o exército mecanizado de anões repeliu com sucesso a invasão dos antigos deuses e seu exército de demônios. Mas dizem que os guerreiros que retornam trouxeram sementes de corrupção com eles, e que a vitória foi o começo do fim para o reino subterrâneo. + No passado, estes níveis eram os arredores de Metropolis. Após a vitória cara da guerra com os antigos deuses, os anões estavam muito fracos para eliminá-los dos demônios restantes. Aos poucos, os demônios aumentaram seu controle sobre esse lugar e agora é chamado Demon Halls.\n\nMuitos poucos aventureiros já desceram até aqui... + + PARA VENDA: %1$s - %2$dg + Compre por %dg + Venda por %dg + Venda 1 por %dg + Venda tudo por %dg + Deixa pra lá + Você vendeu seu %1$s por %2$dg + Você comprou %1$s por %2$dg + + Oh, eu vejo que você conseguiu! Eu espero que não tenha incomodado muito. Como eu prometi, você pode escolher uma das minhas varinhas de alta qualidade. + Varinha de Batalha + Varinha não de Batalha + Boa sorte em sua busca, %s! + + + + Selecione um item para o QuickSlot + + + + + smth + LARGAR + JOGAR + Sua mochila está muito cheia para %s + Escolha a direção para jogar + Por causa do uso freqüente, seu %s quebrou. + Por causa do uso freqüente, seu %s vai quebrar em breve. + + EQUIPAR + DESEQUIPAR + Você não pode remover %s amaldiçoado! + + Amuleto de Yendor + FIM DO JOGO + O Amuleto de Yendor é o mais poderoso artefato conhecido de origem desconhecida. Diz-se que o amuleto é capaz de cumprir qualquer desejo se a força de vontade do seu dono é forte o suficiente para \"convencer\" a fazê-lo. + + Ankh + O antigo símbolo da imortalidade concede uma capacidade de voltar à vida após a morte. Após a ressurreição todos os itens não equipados são perdidos. + + kit armadura + APLICAR + Usando este kit de pequenas ferramentas e materiais qualquer um pode transformar qualquer armadura em uma "Armadura Épica", que irá manter todas as propriedades da armadura original e também irá fornecer seu portador uma habilidade especial conforme sua classe. Nenhuma habilidade em costura, trabalho do couro ou de ferreiro são necessárias. + Selecione uma armadura para atualizar + você aplicou o kit armadura para atualizar seu %s + + bomba + Esta é uma bomba relativamente pequena, cheia de pó preto. Convenientemente, seu estopim acende automaticamente quando a bomba é jogada. + Você se matou com a bomba... + + gota de orvalho + Uma gota cristalina. + + frasco de orvalho + TOMAR + Você pode armazenar o excesso de orvalho neste pequeno vaso para beber mais tarde. Se o frasco estiver cheio, em um momento de perigo mortal o orvalho será consumido automaticamente. + O frasco de orvalho foi esvaziado para curar suas feridas. + Você coletou uma gota de orvalho em seu frasco de orvalho. + Seu frasco de orvalho está cheio! + Seu frasco de orvalho está vazio! + + Isto é uma imitação! + + pote de mel + QUEBRAR + Não há muito mel neste pequeno pote, mas existe uma abelha dourada lá dentro e ela não quer sair. + + ouro + Colete moedas de ouro para gastá-las mais tarde em uma loja. + Uma pilha de %d moedas de ouro. + Uma moeda de ouro. + + você estremece com a aderência involuntária reforçando seu %s + + Farol Lloyd + DEFINIR + RETORNAR + O Farol Lloyd é um dispositivo mágico complicado, que lhe permite voltar a um lugar que você já esteve. + Uma forte aura de magia impede você de usar o Farol Lloyd. + A aura psíquica de criaturas vizinhas impede você de usar o Farol Lloyd. + O Farol Lloyd definiu com sucesso sua posição atual, agora você poderá retornar aqui a qualquer momento. + \n\nEste Farol foi definido em algum lugar do nível %d de Pixel Dungeon. + + Livro Mestre + Livro Mestre - Releitura + LER + Este livro de couro desgastado é muito grosso, mas você se sente de alguma forma, que você pode descobrir muito, lendo ele. Lembre-se que a leitura deste livro pode exigir algum tempo. + Você não pode ler enquanto estiver cego + Você escolheu o caminho do %s! + + tocha + LUZ + É um item indispensável no The Demon Halls, que são notórios por sua falta de iluminação ambiente. + + pedra de amolar + APLICAR + Usando uma pedra de amolar você pode balancear uma arma corpo a corpo para aumentar sua velocidade ou precisão. + Escolha uma arma para balancear + você balanceou %s para torná-la mais rápida + você balanceou %s para torná-la mais precisa + Como você gostaria de balancear a %s? + Para velocidade + Para precisão + Não importa + + + + + PLANTAR + Jogue a semente de %1$s no lugar que você deseja planta-la.\n\n%2$s + Semente de %s + + planta da confusão + Ela secreta uma nuvem brilhante de gás da confusão. + + planta da armadura + Quando uma criatura toca uma planta da armadura, suas raízes criam uma espécie de armadura natural ao seu redor. + Armadura da Natureza + + planta de teleporte + Tocar uma planta de teleporte irá teleportar qualquer criatura para um lugar aleatório no nível atual. + + planta de fogo + Quando algo toca uma planta de fogo, ele explode em chamas. + + planta de gelo + Ao tocar uma planta de gelo, ela excreta um pólen, que congela tudo em sua vizinhança. + + Rotberry + Berries deste arbusto tem gosto de doce, doce morte. + A semente emite um rugido que ecoa em todo o calabouço! + + planta do veneno + A planta do veneno é uma flor (não é um musgo) com afiadas pétalas, revestidas com um veneno mortal. + + planta da vida + A planta da vida é conhecida por propriedades curativas da sua seiva. + Cura da Natureza + + + + + seu %s se contrai em torno de você dolorosamente + agora você está bastante familiarizado com seu %1$s e pode identificá-lo como %2$s. + %1$s :%2$d + %1$s quebrado :%2$d + Interação de diferentes tipos de magia apagaram o hieróglifo desta armadura! + \n\nEsta %1$s concede até \"%2$d\" pontos de absorção de danos por ataque. + \n\nPor causa de sua força inadequada, sua velocidade de movimento e habilidade de defesa será diminuída. + \n\nPor causa de sua força inadequada, vestindo esta armadura irá diminuir a sua velocidade de movimento e habilidade de defesa. + \n\nUm típico %1$s fornece absorção de danos de até %2$d pontos por ataque e precisa de %3$d pontos de força.\u0020 + Provavelmente, esta armadura é pesada demais para você. + Possui encantamento. + \n\nVocê está vestindo a %1$s%2$s. + , e porque ele é amaldiçoado, você não tem como removê-lo + \n\nVocê pode sentir a magia maléfica escondida dentro do %s. + + A coisa parece incrível! + Sua vida está muito baixa! + Você precisa estar vestindo esta armadura para usar seu poder especial! + + armadura de pano + Esta armadura leve oferece proteção básica. + + capa de caçadora + Uma caçadora nesse manto pode criar um redemoinho de lâminas espectrais. Cada uma dessas lâminas terá como alvo um único inimigo no campo de vista da caçadora, causando dano dependendo sua arma atualmente equipada. + SPECTRO DE BLADES + Sem inimigos à vista + Só caçadoras podem usar esta armadura! + + armadura de couro + Armadura feita de couro de monstro. Não é tão leve como armadura de pano, mas oferece uma proteção melhor. + + robe de mago + Ao usar este lindo robe, um mago pode lançar um feitiço de terra derretida: todos os inimigos em seu campo de visão serão incendiados e incapazes de se mover ao mesmo tempo. + TERRA DERRETIDA + Apenas magos podem usar essa armadura! + + armadura de malha + Elos entrelaçados de metal podem criar uma armadura resistente e flexível. + + armadura de placa + Placas enormes de metal são unidas em uma armadura que oferece proteção inigualável para qualquer aventureiro forte o suficiente para suportar seu peso impressionante. + + traje de ladrão + Vestindo esta farda escura, um ladrão pode realizar um truque que é chamado de "bomba de fumaça"(mesmo sem usar explosivos reais): ele cega inimigos que podem vê-lo e pula para o lado. + BOMBA DE FUMAÇA + Só ladrões pode usar esta armadura! + Você só pode pular para um lugar vazio no seu campo de visão + Escolha um lugar para pular + + armadura de escamas + Escamas de metal costuradas em um colete de couro fazem uma armadura flexível, mas ainda mais protetora. + + armadura do guerreiro + Essa armadura parece pesada, mas permite que a um guerreiro realizar salto heroico para um local batendo para baixo para atordoar todos os inimigos próximos. + SALTO HERÓICO + Apenas os guerreiros podem usar essa armadura! + Escolha a direção para saltar + + + + + %s de afeição + + %s de anti-entropia + + %s de auto-reparação + + %s de salto + + %s de deslocamento + + %s de emaranhamento + + %s de metabolismo + + %s de multiplicidade + + %s de potencial + + %s de mau cheiro + + %s de viscosidade + deferido %d + encantamento de viscosidade + dano causado (%d) + O encantamento de viscosidade matou você... + + + + + ABRIR + + chaveiro + Este é um chaveiro de cobre, que lhe permite manter todas as suas chaves separadamente do resto de seus pertences. + + suporte de pergaminho + Você pode colocar qualquer número de pergaminhos neste recipiente tubular. Ele economiza espaço em sua mochila e protege pergaminhos do fogo. + + bolsa de sementes + Esta pequena bolsa de veludo permite armazenar qualquer quantidade de sementes dentro. É muito conveniente. + + estojo de varinhas + Este suporte fino é feito de couro de algum animal exótico. Ele permite levar de forma compacta até %d varinhas. + + + + + comida em ração + Nada extravagante aqui: carne seca, alguns biscoitos - coisas assim. + COMER + Essa comida tinha um sabor delicioso! + + carne grelhada + Parece um bife decente. + + carpaccio congelado + É um pedaço de carne crua congelada. A única maneira de comer é cortando fatias finas da mesma. E mesmo dessa forma é surpreendentemente bom. + Você vê suas mãos ficarem invisíveis! + Você sente sua pele endurecer! + Refrescante! + Você se sente melhor! + + carne misteriosa + Coma por seu próprio risco! + Ohhh, é quente! + Você não pode sentir suas pernas! + Você não está se sentindo bem. + Está recheado. + Experimentei essa comida... Estranha + + comida em ração superfaturada + Parece exatamente como a dieta padrão de comida, mas menor. + Provei e está Ok. + + pastel + Este é o autêntico pastel Cornish com recheio tradicional de carne e batata. + + + + + chave de ouro + Os entalhes nesta chave de ouro são minúsculos e intrincados. Talvez ele pode abrir alguns cofres fechados!? + + chave de ferro + Os entalhes nesta chave de ferro antiga estão bem gastos; seu cordão de couro está danificada pelo tempo. Pode abrir portas!? + chave do nível %d + + chave mestra + Esta chave parece importante: sua cabeça tem a forma de uma caveira. Provavelmente, ele pode abrir alguma porta importante. + + + + + poção %s + Este frasco contém um turbilhão de líquido %s. Quem sabe o que vai fazer quando bebido ou jogado? + TOMAR + Poção prejudicial! + Poção Benéfica + Sim, eu sei o que estou fazendo + Não, eu mudei de ideia + Tem certeza de que quer beber? Na maioria dos casos você deve jogar tais poções em seus inimigos. + Tem certeza de que quer jogá-lo? Na maioria dos casos, faz sentido para beber. + Ao quebrar o frasco o líquido %s espirrará sem causar danos + + turquesa + carmim + azul + jade + dourado + magenta + cinza + marfin + âmbar + marron escuro + azul escuro + prata + + + Poção de Experiência + As experiências célebres de multidões em batalha reduzidos à forma líquida, este gole vai aumentar instantaneamente o seu nível de experiência. + + Poção de Congelamento + Após a exposição ao ar este produto químico vai evaporar em uma nuvem de congelamento, fazendo com que qualquer criatura em contato com ele seja congelado no lugar incapaz de agir e se movimentar. + + Poção de Cura + Um elixir que irá imediatamente te dar plena saúde e cura de venenos. + Suas feridas cicatrizam completamente. + + Poção da Invisibilidade + Beber esta poção irá torná-lo temporariamente invisível. Enquanto invisível, os inimigos não serão capazes de vê-lo. Atacar um inimigo, bem como a utilização de uma varinha ou um pergaminho diante dos olhos do inimigo, irá dissipar o efeito. + Você vê suas mãos ficarem invisíveis! + + Poção da Levitação + Beber este curioso líquido fará com que você paire no ar, podendo flutuar sem esforço sobre armadilhas. Chamas e gases no entanto estão no ar, e não pode ser ignorados. + Você flutua no ar! + + Poção de Chama Líquida + Este frasco contém um composto instável que irá explodir violentamente em chamas, por exposição ao ar livre. + + Poção de Poder + Este líquido poderoso flui naturalmente através de seus músculos, aumentando permanentemente a sua força em um ponto e vida em cinco pontos. + Uma força recém-descoberta surge através de seu corpo. + +1 str, +5 ht + + Poção de Visão + Depois de beber essa poção, sua mente vai entrar em sintonia com a assinatura psíquica das criaturas distantes, permitindo que você senta as presenças biológicas através das paredes. Esta poção também permitirá que você veja através de paredes e portas próximas. + Você pode de alguma forma sentir a presença de espíritos de outras criaturas! + Você pode de alguma forma sentir que está sozinho neste nível no momento. + + Poção de Gás paralítico + Após a exposição ao ar, o líquido neste frasco irá vaporizar em uma névoa amarela entorpecente. Qualquer pessoa que inala a nuvem será paralisado imediatamente, incapaz de se mover por algum tempo. Este item pode ser jogado em inimigos distantes para pegá-los dentro do efeito do gás. + + Poção da Purificação + Este reagente vai rapidamente neutralizar todos os gases nocivos na área de efeito. Beber ele vai te dar uma imunidade temporária para esses gases. + Você sente um frescor incomum no ar. + Você não sente odores! + + Poção da Força + Este líquido poderoso flui naturalmente através de seus músculos, aumentando permanentemente a sua força por um ponto. + Uma nova força surge através de seu corpo. + +1 str + + Poção de Gás Tóxico + Abrir ou quebrar esse vidro pressurizado fará com que o seu conteúdo exploda em uma nuvem mortal de gás tóxico verde. Você pode optar por lançar esta poção em inimigos distantes ao invés de abri-lo com a mão. + + + + + poeira de cadáver + Por fora a bola de poeira cadáver não e diferente de uma bola de poeira normal. No entanto, você sabe de alguma forma que é melhor se livrar dela o mais rápido possível. + + minério de ouro escuro + Este metal é chamado de escuro não por causa da sua cor(que é igual à cor normal do ouro), mas porque derrete sob a luz do dia, tornando-se inútil na superfície. + + rosa seca + A rosa secou há muito tempo, mas manteve todas as suas pétalas de alguma forma. + + token de anão + Muitos anões e algumas de suas criações maiores carregam esses pequenos pedaços de metal de propósito desconhecido. Talvez eles sejam joias ou algum tipo de identificação. Anões são pessoas estranhas. + + peixe fantasma + COMER + Você mal pode ver este pequeno peixe translúcido no ar. Na água, torna-se praticamente invisível. + Você vê suas mãos ficarem invisíveis! + + picareta + Esta é uma ferramenta grande e resistente para quebrar rochas. Provavelmente isto pode ser usado como uma arma. + MINERAR + Não há nenhum veio de ouro escuro perto de você para minerar + + crânio de rato gigante + Poderia ser um bom troféu de caça, mas cheira muito mal para colocá-lo em uma parede. + + + + + anel de %s + Esta tira de metal é adornada com uma grande joia de %s que brilha na escuridão. Quem sabe o efeito que tem quando usado? + %s quebrado + agora você está bastante familiarizado com seu %1$s e pode identificá-lo como %2$s. + Desequipar um anel + Você só pode usar dois anéis de cada vez. Desequipe um de seus anéis equipados. + + diamante + opala + granada + rubi + ametista + topázio + ônix + turmalina + esmeralda + safira + quartzo + ágata + + Seu %s aperta em torno de seu dedo dolorosamente. + %1$s\n\nO %2$s está em seu dedo %3$s. + , e porque ele é amaldiçoado, você não tem como removê-lo + %1$s\n\nVocê pode sentir a magia maléfica escondida dentro do %2$s. + Isto é um %s + + Anel da Precisão + Este anel aumenta a sua chance de acertar o inimigo. + + Anel de Detecção + Usar este anel permitirá que o usuário note segredos escondidos -armadilhas e portas secretas- sem perder tempo para pesquisar. Anéis de Detecção degradados são maçantes para seus sentidos, tornando-o mais difícil de encontrar segredos mesmo quando busca ativamente por eles. + + Anel dos Elementos + Este anel proporciona resistência a diferentes elementos, como fogo, eletricidade, gases, etc. Além disso, diminui a duração dos efeitos negativos. + + Anel da Evasão + Este anel aumenta a sua chance de se esquivar de um ataque inimigo. + + Anel da Barganha + Na verdade, este anel não fornece qualquer efeito mágico, mas demonstra a comerciantes e vendedores que o dono do anel é um membro da Guild dos Ladrões. Normalmente, eles tem o prazer de dar um desconto em troca de garantia de imunidade temporária. Atualizar este anel não vai dar nenhum bônus adicional. + + Anel da Pressa + Este anel acelera o fluxo de tempo de seu portador, permitindo que se possa executar todas as ações um pouco mais rápido. + + Anel das Ervas + Este anel aumenta a sua chance de coletar orvalho e sementes sobre a grama. + + Anel da Regeneração + Este anel aumenta propriedades regenerativas do corpo, permitindo que se possa recuperar a vida perdida em um ritmo acelerado. Anéis degradadas vão diminuir ou mesmo interromper sua regeneração natural. + + Anel do Poder + Suas varinhas se tornarão mais poderosas no campo de energia que irradia a partir deste anel. Anéis de Poder degradados, enfraquecem suas varinhas. + + Anel de Saciedade + Ao usar este anel, você pode ficar sem comida por mais tempo. Anéis de Saciedade degradados terão o efeito oposto. + + Anel das Sombras + Inimigos serão menos propensos a notar você se você usar este anel. Anéis das Sobras degradados irão alertar os inimigos que poderiam não ter notado sua presença. + + Anel de Espinhos + Embora este anel não conjure espinhos reais, um inimigo que atacar você vai se ser ferido por uma fração do dano que ele infligiu. Atualizar este anel não vai dar nenhum bônus adicional. + + + + + pergaminho \"%s\" + Este pergaminho está coberto com uma escrita indecifrável, e o título exibe a runa %s. Quem sabe o que vai acontecer quando lido em voz alta? + LER + Você não pode ler um pergaminho enquanto cego + + KAUNAN + SOWILO + LAGUZ + YNGVI + GYFU + RAIDO + ISAZ + MANNAZ + NAUDIZ + BERKANAN + ODAL + TIWAZ + + + Escolha um item + Você realmente deseja cancelar o uso do pergaminho? Ele será descartado de qualquer forma! + Sim, tenho certeza + Não, eu mudei de ideia + + Pergaminho do Desafio + Ao ler em voz alta, este pergaminho irá desencadear um rugido desafiador que vai despertar todos os monstros e alertá-los para a localização do leitor. + O pergaminho emite um rugido desafiador que ecoa em todo o calabouço! + + Pergaminho da Identificação + Revela permanentemente durante o jogo todos os segredos de determinado item. + Escolha um item para identificar + Isto é %s + + Pergaminho Canção de Ninar + A melodia suave vai colocar todas as criaturas em seu campo de visão em um sono profundo, dando-lhe a chance de fugir ou fazer um ataque surpresa sobre eles. + O pergaminho emite uma melodia suave. + O pergaminho emite uma melodia suave e o %s adormece! + O pergaminho emite uma melodia suave e os monstros adormecem! + + Pergaminho de Mapeamento + Quando este pergaminho for lido, uma imagem de clareza cristalina será gravada em sua memória, mostrando o layout preciso do nível e revelando todos os segredos ocultos. As localizações dos itens e criaturas permanecerão desconhecidos. + Agora você conhece todo o nível atual. + + Pergaminho da Imagem espelhada + O encantamento deste pergaminho irá criar imagens ilusórias de seu leitor. Essas imagens irão perseguir seus inimigos. + + Pergaminho de Explosão Psiônica + Este pergaminho possui uma energia destrutiva que pode ser psionicamente canalizada para infligir um grande dano a todas as criaturas dentro do campo de visão. Um flash de luz acompanhada de cegueira temporária afetará todos na área de efeito, incluindo o leitor de pergaminho. + + Pergaminho da Recarga + O poder mágico bruto ligado a este pergaminho irá, quando lançado, recarregar todas as varinhas do leitor para a carga máxima. + uma onda de energia através de seu pacote, recarrega sua varinha + uma onda de energia através de seu pacote, recarrega suas varinhas + uma onda de energia através de seu pacote, mas nada acontece + + Pergaminho de Remoção de Maldição + O encantamento deste pergaminho irá remover imediatamente qualquer encantamento maligno que impede a remoção de suas armas, armaduras, anéis e qualquer item carregado pelo leitor. + Sua mochila brilha com uma luz pura, e uma energia maléfica se dispersa. + Sua mochila brilha com uma luz pura, mas nada acontece. + + Pergaminho do Teletransporte + O feitiço neste pergaminho transporta instantaneamente o leitor para um local aleatório no nível atual. Ele pode ser usado para escapar de uma situação perigosa, mas um leitor azarado pode acabar em um lugar ainda mais perigoso. + Em um piscar de olhos você foi teletransportado para outro local do nível. + A forte aura magia deste lugar impede seu teletransporte! + + Pergaminho do Terror + Um flash de luz vermelha irá causar terror a todas as criaturas em seu campo de visão, fazendo com que fujam de você. Atacar um inimigo em fuga irá dissipar o efeito. + O pergaminho emite um flash brilhante de luz vermelha + O pergaminho emite um flash brilhante de luz vermelha e o %s foge! + O pergaminho emite um flash brilhante de luz vermelha e os monstros fogem! + + Pergaminho de Atualização + Este pergaminho irá atualizar um único item melhorando sua qualidade. Varinhas irão aumentar em poder em um número de cargas; Uma arma vai causar mais dano ou encontra sua marca com mais frequência; Uma armadura irá desviar golpes adicionais; O efeito de um anel será intensificado. Armas e armaduras também exigirão menos força para sua utilização, e qualquer encantamento sobre o item será removida. + Escolha um item para atualizar + seu %s certamente está melhor agora. + + Pergaminho de Encantamento + Este pergaminho é capaz de atribuir a uma arma ou armadura um encantamento aleatório, concedendo-lhe um poder especial. + Selecione um item encantável + seu %s brilha no escuro + + Pergaminho de Limpeza + @string/Scroll_ACRead + Leia este pergaminho para desencadear a ira dos espíritos, matando tudo no nível atual. Bem, quase tudo. Algumas das criaturas mais poderosas podem não ser afetadas. + @string/Scroll_Blinded + + + + + varinha de %s + ZAP + Esta fina varinha de %s é quente ao seu toque. Quem sabe o que vai fazer quando usada? + Quando esta varinha é usada como uma arma branca, seu dano médio é de %d pontos por acerto. + Você pode usar esta varinha como uma arma branca. + sua varinha chiou; ele deve estar sem cargas por enquanto + Você não pode acertar a si mesmo. + Escolha uma direção para atirar + Você agora está bastante familiarizado com sua %s + + azevinho + teixo + ébano + cerejeira + teca + sorveira + salgueiro + mogno + bambu + roxinho + carvalho + bétula + + + Varinha de Fúria + A luz roxa desta varinha irá causar um ataque de fúria no alvo, que atacará criaturas aleatórias nas suas proximidades. + nada aconteceu + + Varinha de Avalanche + Quando uma descarga desta varinha atinge uma parede(ou qualquer outro obstáculo sólido) provoca uma avalanche de pedras, causando danos e atordoando de todas as criaturas na área afetada. + Você matou a si mesmo com a Varinha de Avalanche... + + Varinha de Clarão + Esta varinha permitirá que você se teletransporte na direção escolhida. Criaturas e obstáculos inanimados irão bloquear o teletransporte. + + Varinha de Desintegração + Esta varinha emite um feixe de energia destrutiva, que penetra em todas as criaturas no seu caminho. Quanto mais alvos ela atinge, mais dano causará a cada um deles. + + Varinha de Fogo + Esta varinha solta rajadas de fogo mágico. Ela pode incendiar terrenos inflamáveis, e causar danos ou queimar uma criatura. + Você matou a si mesmo com a Varinha de Fogo... + + Varinha do Rebanho + Um movimento desta varinha invoca um rebanho de ovelhas mágicas, criando obstáculos temporariamente impenetráveis + ovelha + Esta é uma ovelha mágica. O que há de tão mágico sobre ela? Você não pode matá-las. Ela vai ficar lá até que magicamente desapareça, e ficará o tempo todo ruminando com um olhar vazio. + + Bee! + Bee? + Bee. + Beeee... + Baa... + Blee... + + + Varinha do Relâmpago + Esta varinha evoca arcos mortais de energia elétrica, que causam dano a várias criaturas que estiverem próximas. + Você matou a si mesmo com a Varinha de Relâmpago... + + Varinha de Mísseis Mágicos + Esta varinha lança mísseis de pura energia mágica, causando dano moderado a uma criatura alvo. + DESENCANTAR + Você matou a si mesmo com a Varinha de Mísseis Mágicos... + Selecione uma varinha para atualizar + você desencantou a Varinha de Mísseis Mágicos e usou a sua essência para atualizar %s + + Varinha de Veneno + A explosão vil desta pequena madeira torcida vai impregnar seu alvo com um veneno mortal. Uma criatura que está envenenada sofrerá dano periódico até que o efeito termine. A duração de seu efeito aumenta conforme seu level. + nada aconteceu + + Varinha dos Brotos + \"Quando a vida cessa, uma nova vida começa a crescer ... O eterno ciclo permanece sempre!\" + nada aconteceu + + Varinha da Lentidão + Esta varinha fará com que uma criatura se mova ou ataque com a metade de sua velocidade normal até o fim de seu efeito + nada aconteceu + + Varinha de Alcance + Esta varinha utilitário pode ser usada para agarrar objetos a distância e para trocar de lugar com os inimigos. Ondas de força mágica desta varinha vão afetar todas as armadilhas no caminho desarmando-as; pisará a vegetação alta; abrirá portas fechadas e fechará as abertas. + Você magicamente transportou %s para a sua mochila + + Varinha do Teleporte + Uma explosão desta varinha teleportará uma criatura contra a sua vontade para um lugar aleatório no nível atual. + %1$s teleportou %2$s para algum lugar + nada aconteceu + + + + + Você agora está bastante familiarizado com sua %1$s e pode identificá-la como %2$s. + Interação de diferentes tipos de magia negou o encantamento sobre essa arma! + %1$s :%2$d + %1$s quebrado :%2$d + + + + + %s cruel + + %s ardente + + %s sobrenatural + + %s instável + + %s vampírico(a) + + %s da sorte + + %s do atordoamento + + %s venenoso(a) + + %s chocante + + %s arrepiante + + %s temperada + + + + + %1$s: Uma arma corpo a corpo nível %3$d %2$s. + + aprimorada + degradada + quebrada + O dano médio é de %d pontos por acerto. + O dano médio normal é de %1$d pontos por acerto e, geralmente, requer %2$d pontos de força. + Provavelmente, esta arma é muito pesada para você. + Esta arma é bastante %s. + rápida + lenta + e + mas + precisa + imprecisa + Foi balanceada para deixa-la mais rápida. + Foi balanceada para deixa-la mais precisa. + Está Encantada + Por causa de sua força inadequada a precisão e velocidade do seu ataque com %s é menor. + Por causa de seu excesso de força o dano de seu ataque com %s é aumentada. + Você empunha a(o) %1$s%2$s. + , mas por estar amaldiçoado, você não conseguirá soltar + Você pode sentir uma magia maléfica oculta na(o) %s. + + Machado de Batalha + A enorme cabeça de ferro deste Machado de Batalha causa danos a cada golpe por causa do grande peso. + + Adaga + Uma adaga de ferro simples, com um cabo de madeira bem desgastado. + + Glaive + Uma arma de haste que consiste numa lâmina de espada na extremidade de uma vara. + + Soco Inglês + Também conhecido por Soqueira, é uma peça de ferro com formato específico para colocar em seus dedos. + + Espada Grande + Esta lâmina imponente causa danos graves ao investir seu peso em cada corte. + + Bastão + A cabeça de ferro desta arma causa danos substanciais. + + Cajado + Um composto de madeira com entalhe de ferro nas extremidades. + + Espada Curta + Na verdade, é bastante curta, apenas alguns centímetros mais longo do que um punhal. + REFORJAR + Selecione uma arma para aprimorar + Você reforjou sua espada curta para atualizar %s + você não pode atualizar um bumerangue dessa forma + + Lança + A haste de madeira com ponta delgada com ferro afiada. + + Espada + O comprimento desta afiada lâmina de aço tem um brilho tranqüilizador. + + Martelo de Guerra + Poucas criaturas podem suportar o golpe esmagador desta grande massa de chumbo e aço, mas só os mais fortes e aventureiros pode usá-lo de forma eficaz. + + + + + Arma de Mísseis + Sim, tenho certeza + Não, eu mudei de ideia + Você realmente quer equipar isto como uma arma? + \n\nA média de dano desta arma é igual a %d pontos por acerto. + Por causa de sua força inadequada a precisão e velocidade do seu ataque com %s é diminuída. + Por causa de seu excesso de força o dano de seu ataque com %s é aumentado. + \n\nVocê mantém o %s pronto. + + bumerangue + Lançada para o inimigo esse míssil liso de madeira curvada voltará para as mãos de seu lançador. + + dardo envenenado + Estes pequenos dardos malignos não fazer muito dano, mas eles podem paralisar o alvo deixando-o indefeso e imóvel por algum tempo. + + dardo + Estas simples pontas de metal são pesados mas voam e picam suas presas com um golpe rápido. + + dardo incendiário + A ponta de cada um desses dardos é projetada para fixar-se no alvo, enquanto os compostos instáveis amarrados em sua extensão explodem em chamas brilhantes. + + lança + Este pesado metal comprido tem uma ponta em sua extremidade, cortando o ar em seu caminho. + + shuriken + Peças de metal em forma de estrela com lâminas afiadas podem causar danos significativos quando atingem o alvo. Eles podem ser jogados em altas velocidades. + + machadinha + Este machado de arremesso não é tão pesado, mas ainda exige força significativa para ser usado de forma eficaz. + + + + + Uma nuvem de gás da confusão está pairando por aqui. + + Um incêndio está queimando aqui. + + Raios de luz penetram na escuridão do jardim subterrâneo. + + Uma nuvem de gás paralisante está pairando aqui. + + \"Seu sacrifício é digno...\" + \"Seu sacrifício é indigno...\" + \"Seu sacrifício é digno e assim que você é!\" + Fogo sacrifical queima aqui. Toda criatura tocada por este fogo está marcado como uma oferenda para os espíritos do calabouço. + Marcado para o sacrifício + + Uma nuvem de esverdeada de gás tóxico está pairando aqui + Você morreu por causa do gás tóxico .. + + A medida que você vai tomando, você sente o conhecimento fluindo para sua mente. Agora que você saberá tudo sobre os seus itens equipados. Além disso, você sentirá todos os itens no nível e saberá todos os seus segredos. + O Poder do conhecimento irradia da água deste poço. Tome um gole dela para revelar todos os segredos de itens equipados. + + O Poder de saúde irradia a partir da água deste poço. Tome um gole dela para curar suas feridas e satisfazer a fome. + a medida que você vai tomando, você sente os seus ferimentos curando-se completamente. + + O Poder da mudança irradia a partir da água deste poço. Jogue um item dentro do poço para transformá-lo em outra coisa. + + Tudo está coberto com uma fina rede aqui. + + + + + Loucura + + Pele Cascuda + + Sangrando + Você sangrou até a morte ... + + Cego + + Queimando + %s está queimando! + Você queimou até a morte ... + + Encantado + + Combo + %d hit combo! + + Aleijado + + Congelado + + Furioso + + Imune a gases + + Você está com fome. + Você está morrendo de fome! + Você morreu de fome... + Faminto + Morrendo de Fome + + Invisível + + Levitando + + Iluminado + + Visão da Mente + + Lodo Tóxico + %s matou você... + + Paralisado + + Envenenado + Você morreu envenenado... + + Cego de raiva + + Preso ao chão + + Sob Sombras + + Lento + + Zerado + + Vertigem + + Enfraquecido + + + + + mochila + + + + + A descrição real está chegando em breve! + Você ouve algo morrendo. + eco de\u0020 + %1$s: \"%2$s\" + %s está dormindo + %s está caminhando + %s está caçando + %s está fugindo + %s é passivo + + escorpião ácido + + rato albino + + bandido maluco + + morcego + Estes habitantes vivos e tenazes de cavernas podem derrotar adversários muito maiores, repondo a sua vida a cada ataque bem sucedido. + evitou + + gnoll brutamonte + Brutamontes são os maiores, mais fortes e mais resistentes de todos os gnolls. Quando gravemente feridos, eles ficam furiosos, causando ainda mais danos aos seus inimigos. + %s fica enfurecido! + irritado + + caranguejo do esgoto + Estes enormes caranguejos estão no topo da cadeia alimentar nos esgotos. Eles são extremamente rápidos e seu exoesqueleto grosso pode resistir a golpes pesados. + defendeu + + encarnação maldita + Esta criatura se assemelha ao fantasma triste, mas ronda na escuridão. Seu rosto carrega uma expressão de desespero. + + DM-300 + DM-350 + Esta máquina foi criada pelos anões há vários séculos. Mais tarde, os anões começaram a substituir as máquinas por golems, elementais e até mesmo demônios. Claro que, os demônios levaram sua civilização ao declínio. O DM-300 e máquinas semelhantes foram normalmente utilizados para a construção e exploração mineira e, em alguns casos, para a defesa da cidade. + DM-300 está se consertando! + Missão falhou. Desligando. + Pessoas não autorizadas detectadas. + + elemental do fogo + Elementais do fogo errantes são conhecidas por convocar outras entidades. Eles são muito caóticos e são difíceis de serem controlados até pelo mais poderoso Demonologista. + + olho do mal + Um dos outros nomes deste demônio é "esfera de ódio", porque quando vê um inimigo, ele usa seu Olhar da Morte de forma imprudente, muitas vezes ignorando seus aliados e ferindo-os. + Olhar da Morte de %s matou você... + + rato Fedido + Este rato marsupial é muito maior, do que uma forma regular. É cercado por uma nuvem imunda. + evitou + + gnoll batedor + Gnolls são pequenos humanoides. Eles moram nos esgotos e masmorras, aventurando-se para invadir a superfície de tempos em tempos. Gnolls Batedores normalmente são membros matilhas, eles não são tão fortes como os Gnolls Brutamontes e não tão inteligentes como os Xamãs. + + golem + Os Anões tentaram combinar seu conhecimento mecânico com o poder de elementais. Eles usaram espíritos da terra, como uma "alma" dos órgãos mecânicos dos golems, que se acreditava ser mais controlável de todas. Apesar disso, o menor erro no ritual poderia causar um surto. + bloqueou + + Goo + cria de Goo + Há pouco conhecimento sobre o Goo. É bem possível que ele não seja nem mesmo uma criatura, mas sim um conglomerado de substâncias provenientes dos esgotos que ganharam rudimentos de livre-arbítrio. + Goo está se bombeando para cima! + glurp... glurp... + GLURP-GLURP! + !!! + + Rei dos Anões + Rei dos Anões zumbi + O último rei dos anões era conhecido por sua profunda compreensão dos processos de vida e morte. Ele convenceu os membros de sua corte para participar de um ritual, que deveria ter lhes concedido juventude eterna. No final, ele foi o único que conseguiu... E um exército de zumbis como um bônus. + defendeu + Você não pode me matar, %s... eu sou... imortal... + Levantem-se, escravos! + Como se atreve! + anão zumbi + Estes anões zumbis, surgem pela vontade do Rei dos Anões, pois eram membros de sua corte. Eles aparecem como esqueletos com uma quantidade impressionante de cabelo facial. + bloqueou + + imitação + Imitações são criaturas mágicas que pode assumir qualquer forma que desejarem. Em masmorras eles quase sempre escolher a forma de um baú do tesouro, porque eles sabem como atrair aventureiros. + + monge anão + Estes monges são fanáticos, que se dedicaram a proteger segredos de suas cidades de todos os estrangeiros. Eles não usam nenhum tipo de armadura ou armas, contando apenas com a arte de combate corpo-a-corpo. + defendeu + %1$s derrubou %2$s de suas mãos! + + piranha gigante + Estes peixes carnívoros não são habitantes naturais de poços subterrâneos. Eles foram criados especificamente para proteger cofres do tesouro alagadas. + + rato marsupial + Ratos marsupiais são habitantes agressivos, mas fracos de esgotos. Eles só podem ser perigosos em grandes números. + + escorpião + Estas enormes criaturas demoníacas parecidas com aracnídeos evitam o combate de perto, disparando pontas serrilhadas de longas distâncias. + + monge sênior + + gnoll Xamã + Os gnolls mais inteligentes podem dominar magia Xamã. Gnolls Xamãs preferem uma batalha de feitiços para compensar a falta de coragem, não hesitando em usá-los sobre aqueles que questionam o seu status na tribo. + O raio de %s matou você... + + brutamonte blindado + bloqueou + + esqueleto + Esqueletos são compostos de ossos de cadáveres de aventureiros azarados e moradores da masmorra, animados por emanações de magia negra das profundezas abaixo. Depois de terem sido danificados o suficiente, eles se desintegram em uma explosão de ossos. + bloqueou + Você foi morto pela explosão de ossos ... + + aranha da caverna + Estas aranhas de caverna de pelos esverdeados tentam evitar o combate direto, preferindo esperar na distância, enquanto a sua vítima fica presa na teia de aranha excretado e morre lentamente de sua mordida venenosa. + + estátua animada + Você poderia pensar que é apenas uma outra estátua feia deste calabouço, mas os seus olhos vermelhos podem ser vistos à distância. Enquanto a estátua em si é feita de pedra, o _%s_ que está empunhando parece bem real. + + súcubo + Os súcubos são demônios que parecem meninas sedutoras (de maneira um pouco gótica). Usando sua magia, o súcubo pode encantar um herói, que se tornará incapaz de atacar qualquer coisa até que o encanto desapareça. + + enxame de moscas + O enxame mortal de moscas zumbe com raiva. Cada ataque não mágico irá dividi-la em dois enxames menores, mas igualmente perigosas. + evitou + + Tengu + memória de Tengu + Tengu são membros de um clã antigo de assassinos, que também é chamado de Tengu. Esses assassinos são conhecidos por uso extensivo de shuriken e armadilhas. + Finalmente livre... + Te peguei, %s! + + ladrão maluco + Níveis mais profundos da masmorra sempre foram um esconderijo para todos os tipos de criminosos. Nem todos eles poderiam manter uma mente clara durante os longos períodos longe de luz do dia. Há muito tempo, esses ladrões loucos e bandidos se esqueceram quem são e por que eles roubam. + %1$s roubou %2$s de você! + \n\n%1$s é portador de _%2$s_. Roubado obviamente... + + feiticeiro anão + Quando os interesses dos anões passaram da engenharia para as artes arcanas, mágicos chegaram ao poder na cidade. Eles começaram com magia elementar, mas logo mudou para demonologia e necromancia. + Raio das sobras de %s matou você... + + espectro + Um espectro é um espírito vingativo de um pecador, cuja sepultura ou túmulo foi perturbado. Sendo uma entidade etérea, é muito difícil de bater com uma arma normal. + evitou + + Yog-Dzewa + eco de Yog-Dzewa + Yog-Dzewa é um Deus Antigo, uma poderosa entidade do Reino do Caos. Um século atrás, os anões antigos quase venceram a guerra contra o seu exército de demônios, mas foram incapazes de matar o próprio deus. Em vez disso, eles então o aprisionaram nos salões abaixo sua cidade, acreditando ser fraco demais para subir outra vez. + ... + A esperança é uma ilusão... + punho de apodrecimento + punho de fogo + Larva de Deus + + + + + abelha dourada + Apesar de seu pequeno tamanho, abelhas douradas tendem a proteger seu mestre ferozmente. Elas, no entanto, não vivem por muito tempo. + Esta %s está vagando + + troll ferreiro + Este Troll Ferreiro se parece muito com todos os trolls: ele é alto e magro, e sua pele se assemelha a pedra na cor e textura. O ferreiro trolls mexe com suas pequenas ferramentas de tamanho desproporcinal. + Ei humano! Quer ser útil, não é? Tome este picareta e me consiga algumas pedras de _Ouro Escuro_, _15 peças_ devem ser suficiente. O que quer dizer, como é que eu vou te pagar? Você gananciosos...\nOk, ok, eu não tenho dinheiro para pagar, mas posso forjar para você. Considere-se com sorte, eu sou o único ferreiro por perto. + Ei humano! Quer ser útil, não é? Tome este picareta e _mate um Morcego_, e me mostre seu sague na ponta da picareta. O que quer dizer, como é que eu vou te pagar? Você gananciosos...\nOk, ok, eu não tenho dinheiro para pagar, mas posso forjar para você. Considere-se com sorte, eu sou o único ferreiro por perto. + Você está brincando comigo? Onde está a minha picareta?! + Minério de Ouro Escuro. 15 peças. Sério, não é assim tão difícil? + Eu disse que preciso sangue de morcego na picareta. Chop chop! + Oh, você voltou ... Antes tarde do que nunca. + Estou ocupado. Cai fora! + %s parece estar muito melhor agora + Selecione 2 itens diferentes, não é o mesmo item duas vezes! + Selecione 2 itens do mesmo tipo! + Eu preciso saber em que estou trabalhando, identifique em primeiro lugar! + Eu não trabalho com itens amaldiçoados! + É um lixo, a qualidade é muito pobre! + Eu não posso reforjar estes artigos! + + fantasma triste + O fantasma é pouco visível. Parece uma mancha disforme de luz fraca com uma cara triste. + evitou + Olá aventureiro... Uma vez eu era como você - forte e confiante... E agora eu estou morto... Mas eu não posso deixar este lugar... Não até eu ter a minha _Rosa Seca_... É muito importante para mim... Algum monstro roubou de meu corpo... + Por favor... Ajude-me... _Encontre a rosa_... + Sim! Sim!!! É isso aí! Por favor, dê-me! E você pode levar um desses itens, talvez eles sejam úteis para você em sua jornada... + Olá aventureiro... Uma vez eu era como você - forte e confiante... E agora eu estou morto... Mas eu não posso deixar este lugar... Não até eu ter a minha vingança... Mate o _rato fedido_, que tomou a minha vida... + Por favor... Ajude-me... _Mate essa abominação_... + Sim! A criatura feia e grotesca está morta, mas finalmente posso descansar... Por favor, pegue um desses itens, talvez eles sejam úteis para você em sua jornada... + Olá aventureiro... Uma vez eu era como você - forte e confiante... E agora eu estou morto... Mas eu não posso deixar este lugar... Eu estou bloqueado por uma maldição horrível... Por favor... Ajude-me... _Destrua a maldição_... + Obrigado %s! A maldição foi quebrada e eu finalmente posso descansar... Por favor, pegue um desses itens, talvez eles sejam úteis para você em sua jornada... + Sim, vou fazer isso por você + Não, eu não posso ajudá-lo + + diabinho ambicioso + São demônios menores. Eles não são notáveis por sua força nem por seu talento mágico, mas eles são muito inteligentes e sociáveis. Muitos diabinhos preferem viver entre os não-demônios. + evitou + Você é um aventureiro? Eu amo aventureiros! Você sempre pode contar com eles, se algo precisa ser morto. Estou certo? Em troca uma recompensa, é claro;)\nNo meu caso, são _Golems_ que precisam ser mortos. Você vê, eu estou começando um pequeno negócio aqui, mas esses golems estúpidos são ruins para os negócios! É muito difícil de negociar com pedaços de granito errante, malditos sejam! Então, por favor, mate ... digamos _6 deles_ e a recompensa será sua. + Como vai o seu safári golem? + Você é um aventureiro? Eu amo aventureiros! Você sempre pode contar com eles, se algo precisa ser morto. Estou certo? Em troca uma recompensa, é claro;)\nNo meu caso, são _Monges_ que precisam ser mortos. Você vê, eu estou começando um pequeno negócio aqui, mas esses lunáticos não comprar nada e ainda assustam os outros clientes! Então, por favor, mate ... digamos _8 deles_ e a recompensa será sua. + Oh, você ainda está vivo! Eu sabia que o kung-fu é mais forte;) Só não se esqueça de pegar estes símbolos dos monges. + Até logo, %s! + Psiuu, %s! + + diabinho ambicioso + São demônios menores. Eles não são notáveis por sua força nem por seu talento mágico, mas eles são muito inteligentes e sociáveis. Muitos diabinhos preferem viver e fazer negócios entre os não-demônios. + Olá Amigo! + + imagem espelhada + Esta ilusão é muito semelhante a você, mas é mais pálida e se contorce um pouco. + + rei rato + Este rato é um pouco maior do que um rato marsupial normal e ele está usando uma pequena coroa em sua cabeça. + Eu não estou dormindo! + O que é isso? Eu não tenho tempo para essa bobagem. O meu reino não vai se governar sozinho! + + comerciante + Esse cara gordo parece mais apropriado para um distrito comercial em alguma grande cidade do que para um calabouço. Seus preços explicam por que ele prefere fazer negócios aqui. + Selecione um item para vender + + velho fabricante de varinhas + Este antigo, mas forte cavalheiro usa uma expressão um pouco confusa. Ele é protegido por um escudo mágico. + absorveu + Oh, que surpresa agradável encontrar uma pessoa decente em tal lugar! Eu vim aqui para um ingrediente raro - uma _semente rotberry_. Sendo um usuário de magia, eu sou bem capaz de me defender contra os monstros locais, mas eu estou ficando perdido e tenho pouco tempo, é muito constrangedor. Provavelmente, você poderia me ajudar? Eu ficaria feliz em pagar por seu serviço com uma das minhas melhores varinhas. + Alguma sorte com a _semente Rotberry_, %s? Não? Não se preocupe, eu não estou com pressa. + Oh, que surpresa agradável encontrar uma pessoa decente em tal lugar! Eu vim aqui para um ingrediente raro - _Pó de Cadáver_. Ela pode ser obtida de restos de esqueletos e há um amplo número deles no calabouço. Sendo um usuário de magia, eu sou bem capaz de me defender contra os monstros locais, mas eu estou ficando perdido e tenho pouco tempo, é muito constrangedor. Provavelmente, você poderia me ajudar? Eu ficaria feliz em pagar por seu serviço com uma das minhas melhores varinhas. + Alguma sorte com o _Pó de Cadáver_, %s? Pilhas de Ossos são os lugares mais óbvios para procurar. + Oh, que surpresa agradável encontrar uma pessoa decente em tal lugar! Eu vim aqui para um ingrediente raro - um _peixe fantasma_. Você pode pegá-lo com suas próprias mãos, mas é muito difícil vê-lo na água. Sendo um usuário de magia, eu sou bem capaz de me defender contra os monstros locais, mas eu estou ficando perdido e tenho pouco tempo, é muito constrangedor. Provavelmente, você poderia me ajudar? Eu ficaria feliz em pagar por seu serviço com uma das minhas melhores varinhas. + Alguma sorte com um _peixe fantasma_, %s? Você pode tentar procurá-lo em uma das piscinas locais. + + + + + Uma oculta placa de pressão faz Click! + Abismo + Piso + Grama + Água + Murro + Porta fechada + Porta aberta + Entrada + Saída + Cinzas + Porta trancada + Pedestal + Barricada + Grama alta + Saída trancada + Saída desbloqueada + Indicação + Poço + Poço vazio + Estatua + Armadilha de gás tóxico + Armadilha de fogo + Armadilha de gás paralisante + Armadilha de dardo venenoso + Armadilha de alarme + Armadilha de relâmpagos + Armadilha de agarrar + Armadilha de invocação + Armadilha acionada + Prateleira de livros + Pote de Alquimia + \?\?\? + Você não pode ver o fundo. + Caso você se queimar, pule na água para apagar o fogo. + A escada te levará ao piso superior. + A escada te levará a uma profundidade maior. + Cinzas cobrem o chão. + Blocos de vegetação densa à frente. + Esta porta está trancada e você precisa da chave correspondente para abri-la. + Barras pesadas bloqueiam as escadas que levam para baixo. + A barricada de madeira está bem ajustada, mas secou ao longo dos anos. Será que pode queimar? + Você não pode ler este texto. + Pisar em uma placa de pressão oculta irá ativar a armadilha. + A armadilha foi acionada antes e não é mais perigosa. + Alguém queria decoram este lugar, mas obviamente não conseguiu. + Solte algumas sementes aqui para preparar uma poção. + O poço secou. + + Musgo fluorescente + Cogumelos fluorescentes + Água gelada. + A escada te levará ao piso superior. + A escada te levará a uma profundidade maior. + Cogumelos enormes bloqueiam a visão. + Um veio de algum minério está visível na parede. Será Ouro? + Quem precisa de uma estante de livros em uma caverna? + + A cor da água é suspeita + Altas flores desabrochando + A rampa te levará ao piso superior. + A rampa te levará a uma profundidade maior. + Vários azulejos estão faltando aqui. + O tapete grosso cobre o chão. + A estátua mostra alguns anões de pé em uma postura heroica. + Fileiras de livros de diferentes assuntos preenchem a estante. + + Lava fria + Musgo em brasas + Fungo em brasas + Pilar + Parece que é lava, mas fria e provavelmente segura para tocar. + O pilar é feito de crânios humanoides reais. Impressionante. + Livros em línguas antigas fumegam na estante. + + @string/Halls_TileWater + @string/Halls_TileGrass + @string/Halls_TileHighGrass + @string/Halls_TileStatue + @string/Halls_TileDescWater + @string/Halls_TileDescStatue + + @string/City_TileWater + @string/City_TileHighGrass + @string/City_TileDescEntrance + @string/City_TileDescExit + @string/City_TileDescDeco + @string/City_TileDescEmptySP + + Água fria e escura. + Há manchas de sangue velho no chão. + Este é provavelmente um vestígio de uma biblioteca da prisão. Será que pode queimar? + + Água turva + Um musgo amarelado e molhado cobre o chão. + A estante está repleta de livros inúteis e baratos. Será que pode queimar? + + + + + Escolha uma semente para jogar + + Abismo + Sim, eu sei o que estou fazendo + Não, eu mudei de ideia + Você realmente quer pular no abismo? Provavelmente, você vai morrer. + Você caiu para a morte... + + O que você está fazendo aqui?! + Enquanto você tenta ler a placa, ela explode em chamas esverdeadas. + + Não superestime sua força, use armas e armaduras que você pode manipular. + Nem todas as portas do calabouço são visíveis à primeira vista. Se você está preso, procure por portas escondidas. + Lembre-se, que o aumento a sua força não é a única maneira de conseguir um equipamento melhor. Você pode diminuir a sua exigência de força usando Pergaminhos de Atualização. + Você pode gastar o seu ouro em lojas em níveis mais profundos do calabouço. O primeiro fica no nível 6. + Cuidado... Goo! + Loja Pixel. Tudo que você precisa para uma aventura de sucesso! + Identifique suas poções e pergaminhos assim que possível. Mas use-os apenas quando realmente precisar deles. + Estar com fome não faz mal, mas morrendo de fome, dói. + Um ataque surpresa tem uma melhor chance de acerto. Por exemplo, você pode emboscar o inimigo por trás de uma porta fechada quando você sabe que ele está te seguindo. + Não deixe que o Tengu saia! + Loja Pixel. Gaste o dinheiro. Viva mais... + Quando você é atacado por vários monstros ao mesmo tempo, tente recuar para trás de uma porta. + Se você está queimando, você não pode apagar o fogo com água quando estiver levitando. + Não há sentido em possuir mais de um Ankh ao mesmo tempo, porque você vai perdê-los caso ressuscitar. + Perigo! Máquinas pesadas podem causar lesões, perda de membros ou morte! + Loja Pixel. A vida mais segura no calabouço. + Quando você atualiza uma arma encantada, há uma chance de destruir esse encantamento. + Armas e armaduras se deterioram mais rapidamente do que varinhas e anéis, mas há outras maneiras de repara-los. + A única maneira de obter um Pergaminho de Limpeza é a recebê-lo como um presente dos espíritos do calabouço. + Nenhuma arma é permitida na presença de Vossa Majestade! + Loja Pixel. Preços especiais para caçadores de demônios! + + + + + + A armadilha emite um som agudo que ecoa em todo o calabouço! + + Armadilha de raios + Você foi morto por uma descarga de armadilha de raio... + + + + + Você não sabe o que tem ali. + Selecione uma célula para examinar + + + + + + + 0 + \ No newline at end of file diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml new file mode 100644 index 0000000000..8bd84b0360 --- /dev/null +++ b/res/values-ru/strings.xml @@ -0,0 +1,1657 @@ + + + + Pixel Dungeon + + + + + Играть + Рекорды + Значки + Об игре + + Программирование & графика: Watabou\nМузыка: Cube_Code\n\nРазработчики этой игры вдохновлялись Brogue от Brian Walker. Вы можете сыграть в неё на Windows, Mac OS или Linux - она классная! ;)\n\nПосетите официальный сайт игры для дополнительной информации: + pixeldungeon.watabou.ru + Перевод: Georgiy Danilov, Mikhael Danilov, rodriformiga + rodriformiga@gmail.com; nyrdsofficial@gmail.com + Отправить E-Mail + + Лучшие Результаты + Всего игр выигранные/сыгранные:\u0020 + Вы ещё ни разу не сыграли. + Дополнительная информация отсутствует + + Заработанные Значки + + Загрузить Игру + Новая Игра + Стереть\nтекущую игру + Глубина: %1$d\nУровень: %2$d + Вы точно хотите начать новую игру? + Прогресс текущей игры будет потерян. + Да, начать новую игру + Нет, вернуться в меню + Чтобы открыть этот класс персонажа, убейте 3-го босса любым другим классом + Чтобы открыть \"Испытания\", пройдите игру любым персонажем. + + Спускаемся... + Поднимаемся... + Загружаемся... + Воскрешаемся... + Возвращаемся... + Падаем... + Файл не найден. К чему бы это... + Что-то пошло не так... + + Многие искатели приключений и путешественники спускались в Подземелье до тебя. Некоторые возвращались, наделённые несметными богатствами и волшебными артефактами, но большинство, попусту, сгинуло. Но, никому не удалось заполучить Амулет Эндора, согласно легендам, сокрытый в глубинах Подземелья.\n\nТы чувствуешь, что готов к этому испытанию и, что немаловажно, веришь, что удача на твоей стороне. Пришло время начать своё приключение! + + Моё дело, здесь, сделано + Я, пожалуй, ещё осмотрюсь + Наконец-то, он в твоих руках, Амулет Эндора. Ты обретёшь могущество, позволяющее покорить всех и вся, или подаришь человечеству мир и процветание, или что-то типа того. В любом случае, твоя жизнь изменится навсегда, а игра на этом завершится. С другой стороны, ты можешь побыть жалким смертным ещё немного. + + Добро пожаловать на %d уровень Pixel Dungeon! + С возвращением на %d уровень Pixel Dungeon! + Будь начеку, ведь ночью подземелье куда опаснее! + Каждый твой шаг раздаётся эхом по всему подземелью. + Ты слышишь плеск воды поблизости. + В воздухе витает растительный аромат. + Атмосфера таинственности окутывает этот уровень, он полон секретов. + + + + монстр + %1$s ударило %2$s + %s убило тебя + %1$s одолело %2$s + %1$s %2$s от твоей атаки + %1$s %2$s от атаки монстра %3$s + Боль пробудила %s от паралича + уклонилось + отравлен + буйствует + замедлен + ясно + видение + парализован + испуган + скован + травмирован + кровотечение + ошеломлён + невидимый + + ты + Нельзя просто так взять и выйти из Pixel Dungeon. + новый уровень! + Твой уровень поднялся до %d! Ты окрепчал, а может даже поумнел. Тебе стало проще попадать по врагам и уклоняться от их атак. + Теперь у тебя есть %s + Здесь есть что-то ещё + Сундук закрыт и у тебя нету подходящего ключа + У тебя нету подходящего ключа + Ты что-то заметил + ... + поиск + Тебя охватил огонь! + Тебя парализовало! + Ты отравлен! + Слизь разъедает твою плоть. Смой её! + Ты не можешь сдвинутся! + Тебя охватила слабость! + Тебя ослепили! + Ты впал в ярость! + яростный + Ты зачарован! + Ты получил травму! + У тебя кровотечение! + У тебя кружится голова! + + воин + маг + разбойник + охотница + + Воины начинают с 11 очками Силы. + Воины начинают с уникальным коротким мечом. Который, в дальнейшем, можно \"перековать\" для улучшения другого оружия ближнего боя. + Воины плохо приспособлены к оружию дальнего боя. + Во время еды Воин восстанавливает немного здоровья. + Зелья Силы распознаны с самого начала. + + + Маги начинают с уникальной Палочкой Волшебных Снарядов. Которую, в дальнейшем, можно \"развоплотить\" для улучшения другой палочки. + Маги быстрее восполняют заряды волшебных палочек. + Во время еды, любая пища восстанавливает 1 заряд, для каждой палочки в инвентаре. + Маги могут использовать волшебные палочки в ближнем бою. + Свитки Опознания распознаны с самого начала. + + + Разбойники начинают с Кольцом Теней+1. + Разбойники распознают тип кольца при надевании. + Разбойники приспособлены к лёгкой броне, с ней они лучше уворачиваются от вражеских атак. + Разбойники хороши в поиске скрытых дверей и ловушек. + Разбойники могут дольше продержаться без еды. + Свитки Волшебной Разметки распознаны с самого начала. + + + Охотницы начинают с 15 очками Здоровья. + Охотницы начинают с уникальным улучшаемым бумерангом. + Охотницы хороши в обращении с оружием дальнего боя и получают бонус к урону за каждое очко Силы сверх требований этого оружия. + Охотницы восстанавливают больше здоровья от капель росы. + Охотницы чувствуют ближайших монстров даже если те скрыты за препятствиями. + + + гладиатор + Успешная атака ближнего боя позволяет, _Гладиатору_ начать серию комбо-ударов, в течении которой каждое последующее попадание наносит больше урона. + берсерк + Будучи сильно раненым, _Берсерк_ впадает в состояние дикой ярости, значительно повышая его показатель урона. + чернокнижник + После убийства врага _Чернокнижник_ поглощает его душу. Излечивая себя и утоляя голод. + боевой маг + Сражаясь с палочкой в руках, _Боевой Маг_ наносит дополнительный урон в зависящий от количества оставшихся зарядов. Каждое успешное попадание восстанавливает 1 заряд этой палочки. + убийца + При совершении неожиданной атаки, _Убийца_ наносит его цели дополнительный урон. + бегун + _Бегун_ двигается почти вдвое быстрее большинства монстров. В движущегося, _Бегуна_ труднее попасть. Но лишь в тех случаях когда он сыт и не перегружен. + снайпер + _Снайперы_ способны заметить прорехи в броне противника, практически игнорируя её при использовании оружия дальнего боя. + Травница + За счёт своей близости к природе, _Травница_ может лучше собирать капли росы и семена с растений. Также контакт с высокой травой даёт ей временный бонус к броне. + + + + Значок заработан: %s + Новый супер значок: %s + Новый значок: %s + 10 врагов побеждено + 50 врагов побеждено + 150 врагов побеждено + 250 врагов побеждено + 100 золота собрано + 500 золота собрано + 2500 золота собрано + 7500 золота собрано + Уровень 6 достигнут + Уровень 12 достигнут + Уровень 18 достигнут + Уровень 24 достигнут + Все зелья распознаны + Все свитки распознаны + Все кольца распознаны\" + Все палочки распознаны\" + Все зелья, свитки, кольца & палочки распознаны + + + + Все сумки куплены + Погиб в огне + Погиб от яда + Погиб от токсичного газа + Погиб с голоду + Погиб от чары + Погиб от падения + Погибал от огня, яда, токсичного газа & голода + + + + + 1-ый босс убит + 2-ой босс убит + 3-ий босс убит + 4-ый босс убит + 1-ый босс убит Воином, Магом, Разбойником & Охотницей + + + + + + + + + Третий босс убит Гладиатором, Берсерком, Чернокнижником, Боевым Магом, Бегуном, Убийцей, Снайпером & Травницей + Кольцо Торгаша получено + Кольцо Шипов получено + 13 очков Силы достигнуто + 15 очков Силы достигнуто + 17 очков Силы достигнуто + 19 очков Силы достигнуто + 10 кусков пищи съедено + 20 кусков пищи съедено + 30 кусков пищи съедено + 40 кусков пищи съедено + + + + + Получен предмет 3 уровня + Получен предмет 6 уровня + Получен предмет 9 уровня + Получен предмет 12 уровня + + + + + + Все редкие монстры побеждены + + + + + Амулет Эндора получен + Амулет Эндора получен Воином, Магом, Разбойником & Охотницей + 7 комбо ударов за серию + 3 зелья изготовлено + 6 зелий изготовлено + 9 зелий изготовлено + 12 зелий изготовлено + Прошёл уровень не убив ни одного монстра + Монстр убит Мрачным оружием + 6 пираний убито + 5 монстров убито ночью + 10 игр сыграно + 100 игр сыграно + 500 игр сыграно + 2000 игр сыграно + Счастливый конец + Испытание пройдено + Спасибо за поддержку! + + + + + Без еды + Без брони + Без зелий исцеления + Без росы и семян + Коллективный разум + Тьма + Запрещенные руны + + + + + Источник Исцеления + Источник Чутья + Источник Трансмутации + Комната жертвоприношений + Алхимический котёл + Сад + Ожившая статуя + Печальный призрак + Старый мастер + Тролль-кузнец + Амбициозный бес + + + + Убит монстром: %1$s, на уровне %2$d + Убит боссом: %1$s, на уровне %2$d + Убит собственной палочкой: %1$s, на уровне %2$d + Убит глифом: %1$s, на уровне %2$d + Погиб в результате взрыва бомбы на уровне %d + Убит ловушкой: %1$s, на уровне %2$d + Сгорел живьём на уровне %d + Помер с голоду на уровне %d + Отравился на уровне %d + Погиб от токсичного газа на уровне %d + Истёк кровью на уровне %d + Убит едкой слизью на уровне %d + Разбился насмерть об уровень %d + Заполучил Амулет Эндора + + + + + Окей, сделка есть сделка, расклад такой: я перекую тебе два предмета в один, но лучший качеством. + Выбери предмет для перековки + Перековать + + Зелья + Свитки + Каталог + + Испытания + + Какой дорогой последуешь? + Приму решение позже + Ты хочешь переучится на класс %s? + Да, я хочу переучится + Может быть позже + + Мастерство + + ОШИБКА + + Настройки + Испытания + Рекорды + Начать Новую Игру + Главное Меню + Выход игры + Вернутся в Игру + + Параметры + Усиления + Опыт + Сила + Здоровье + Собрано Золота + Максимальная Глубина + Уровень %1$d %2$s + Каталог + Журнал + + О, да! Ты мой герой!\nНа счёт награды, наличных у меня при себе нет, но я могу предложить кое-что получше. Это кольцо - моя семейная реликвия: мой дедуля снял его с пальца мёртвого паладина. + Взять кольцо + + Здесь ничего нет. + + Сундук + Запертый сундук + Кристаллический сундук + Гробница + Останки скелета + Ты не узнаешь, что внутри, пока не откроешь! + Но, чтобы открыть, тебе понадобится золотой ключ. + Внутри ты видишь предмет - %s, но чтобы открыть сундук понадобится золотой ключ. + В этой древней гробнице может оказаться нечто полезное, но владелец вряд ли оценит твой энтузиазм. + Это всё что осталось от твоего предшественника. Пожалуй стоит обыскать на предмет ценностей. + + Журнал + + Языки + + Не удалось загрузить дополнительную информацию + Параметры + Предметы + Значки + Уровень %1$d %2$s + Испытания + Здоровье + Сила + Продолжительность Игры + Максимальная Глубина + Монстров Убито + Золота Собрано + Еды Употреблено + Зелий Сварено + Анхов Использовано + + Ты погиб, но тебе дарован ещё один шанс покорить подземелье. Воспользуешься ли ты им? + Да, я продолжу биться! + Нет, я сдаюсь + + Оружие призрака + Доспехи призрака + Прощай, авантюрист! + + + + - + Масштаб по условию + Маcштабировать ГУИ + Режим \"погружение\" + язык + Музыка + Звуковые эффекты + Яркость + Второй квик-слот + Перейти в портретный режим + Перейти в альбомный режим + + Подземелье расположено точно под городом, верхние уровни фактически являются канализацией города. Будучи условно частью города, эти уровни не столь опасны. Конечно безопасными их тоже не назовёшь, но по крайней мере, здесь не приходится волноваться о зловещей магии. + Много лет назад на этом месте возвели подземную тюрьму для содержания опаснейших преступников. Тогда это оказалось весьма недурственной идеей, поскольку побег оттуда был воистину проблематичен. Но вскоре чёрные испарения стали сочиться из глубин, лишая рассудка стражников и заключённых. В конце концов тюрьму забросили, оставив некоторых заключённых взаперти. + Пещеры, протянувшиеся под тюрьмой, вряд ли можно назвать обитаемыми. Они слишком глубоко, вне досягаемости Города и слишком бедны минералами, чтобы заинтересовать дворфов. В прошлом здесь располагалась торговая точка, на пути соединяющим две стороны, но она сгинула вместе с падением Дворфийской Метрополии. Теперь здесь есть лишь вездесущие гноллы и подземные твари. + Дворфийская Метрополия была когда-то величайшим городом-государством подземного народа. В дни его расцвета механизированная армия дворфов смогла отбиться от вторжения старого бога и его армии демонов. Говорится, что вернувшиеся воины несли с собой семя разрушения, и что эта победа лишь ознаменовала кончину подземного царства. + В прошлом эти уровни считались задворками Метрополии. Победа над старым богом далась дворфам дорогой ценой, и они были не в силах зачистить местность от оставшихся демонов. Со временем демоны овладели этими местом, теперь оно зовётся Чертогом Демонов.\n\nЛишь немногие путешественники заходили так далеко... + + В ПРОДАЖЕ: %1$s - %2$dg + Купить за %dg + Продать за %dg + Продать 1 за %dg + Продать все за %dg + Забудь об этом + Ты продал %1$s за %2$dg + Ты купил %1$s за %2$dg + + О, я вижу ты преуспел! Надеюсь это не доставило тебе особых хлопот. Как обещано, ты волен выбрать одну из моих лучших палочек. + Боевая палочка + Не боевая палочка + Удачи тебе в твоих свершениях, %s! + + + + Выбери предмет для быстрой ячейки + + + + + предмет + ВЫКИНУТЬ + МЕТНУТЬ + У тебя нету места для предмета %s + Выбери направление броска + Из-за частого применения твой предмет %s сломался. + Из-за частого применения твой предмет %s скоро сломается. + + НАДЕТЬ + СНЯТЬ + Ты не можешь снять проклятый предмет %s! + + Амулет Эндора + ЗАВЕРШИТЬ ИГРУ + Амулет Эндора, могущественнейший артефакт, неведомого происхождения. Считается, что он может исполнить любое желание, если воля его обладателя достаточно сильна, для того чтобы \"убедить\" амулет. + + Анх + Древний символ бессмертия дарующий возможность вернутся к жизни после смерти. При воскрешении все не надетые вещи теряются. + + инструменты + ПРИМЕНИТЬ + Используя этот набор маленьких инструментов и материалов любой способен превратить броню в \"эпическую броню\", сохраняя свойства прежней брони, но при этом давая носителю особую способность в завиости от класса персонажа. Не требует навыков вышивания, кожевника или кузница. + Выбери броню для улучшения + ты применил инструменты для улучшения предмета %s + + бомбить + Это относительно небольшая бомба, наполненный черным порохом. Удобно, его предохранитель горит автоматически, когда бомба брошена. + Ты убил себя с бомбой... + + капля росы + Кристально чистая капля росы. + + флакончик росы + ВЫПИТЬ + Ты можешь сохранить лишнюю росу, поместив её в этот флакончик. Если он полон, в момент смертельной опасности, роса будет употреблена автоматически. + Ты опустошил флакончик росы чтобы залечить раны. + Ты собрал капельку росы в свой флакончик росы. + Флакончик росы заполнен! + Флакончик росы пуст! + + Это мимик! + + горшок меда + РАЗРУШАТЬ + Существует не так много меда в этой маленькой приманки, но есть золотое пчелы там и он не хочет, чтобы оставить его. + + золото + Собирай золотые монеты, чтобы позже торговать в магазине. + Горсть из %d золотых монет. + Одна золотая монетка. + + ты не в силах разжать пальцы охватившие %s + + маяк Ллойда + УСТАНОВКА + ВОЗВРАТ + Маяк Ллойда это интерактивное волшебное устройство, которое позволят вернутся в место где ты уже был. + Могучая магическая аура этого места не позволяет использовать маяк Ллойда! + Психическая аура ближайших существ не позволяет тебе использовать маяк Ллойда сейчас. + Маяк Ллойда успешно установлен на твоё текущее положение, теперь ты можешь вернуться сюда в любое время. + \n\nЭтот маяк был установлен где-то на %d уровне Pixel Dungeon. + + Том Мастерства + Том Переобучения + ЧИТАТЬ + Эта изношенная кожаная книга не так уж велика, но ты почему-то уверен, что она многому тебя научит. Но помни, чтение этого тома требует времени. + Нельзя читать будучи ослеплённым + Теперь ты %s! + + факел + ЗАЖЕЧЬ + Это незаменимая вещь в Чертогах Демонов, известных своим скудным освящением. + + грузило + ПРИМЕНИТЬ + При помощи грузила ты можешь сбалансировать ближнее оружие, увеличивая его скорость и меткость. + Выбери оружие для балансировки + ты сбалансировал предмет %s сделав его быстрее + ты сбалансировал предмет %s сделав его точнее + Как ты хочешь сбалансировать предмет %s? + На скорость + На меткость + Забудь об этом + + + + + ПОСАДИТЬ + Посади эти семена в то место где ты хочешь вырастить %1$s.\n\n%2$s + семена растения %s + + Дурман-трава + При прикосновении Дурман-трава испускает сияющее облачко ошеломляющего газа. + + Земляной Корень + Когда существо касается Земляного Корня, его окутывает природная броня. + Растительная броня + + Бледнолист + Касание Бледнолиста телепортирует любое существо в случайную точку текущего уровня. + + Огнецвет + Всё, что касается Огнецвета, охватывается огнём. + + Ледовик + При касании Ледовик испускает пыльцу, которая замораживает всё на своём пути. + + Гниловика + Ягоды с этого куста имеют сладкий привкус смерти. + Семя издаёт рёв, эхом проносящийся по подземелью! + + Грустномох + Грустномох это цветок (а не мох) с лепестками острыми как бритва, покрытыми смертельным ядом. + + Солнечник + Солнечник славится целебными свойствами своего сока. + Растительное исцеление + + + + + %s болезненно впивается в твою кожу + ты достаточно хорошо знаком с предметом %1$s чтобы его опознать. Это %2$s. + %1$s :%2$d + сломано %1$s :%2$d + Взаимодействие несовместимых типов магии стёрли глиф с этой брони! + %1$s обеспечивает поглощение урона вплоть до \"%2$d\" очков за удар. + \n\nИз-за недостаточной силы твоя скорость передвижения и навык защиты понизились. + \n\nИз-за недостаточной силы ношение этой брони понизит твою скорость передвижения и навык защиты. + \n\nКак правило %1$s обеспечивает поглощение урона вплоть до %2$d очков за удар и требует %3$d очков силы. + Судя по всему эта броня слишком тяжела для тебя. + Оно зачарованно. + \n\nТы носишь предмет %1$s%2$s. + , а поскольку он проклят, ты не в силах его снять + \n\nТы чувствуешь зловещую силу затаившуюся в предмете %s. + + Вот это вещь! + У тебя слишком мало здоровья! + Чтобы использовать особые свойства этой брони, её надо надеть! + + тканевый доспех + Эта лёгкая броня обеспечивает простейшую защиту. + + охотничий плащ + Подобный плащ позволяет охотнице выпустить веер призрачных клинков. Каждое из этих лезвий устремится к одной из целей находящихся в поле зрения охотницы, нанося урон зависящий от используемого оружия ближнего боя. + ПРИЗРАЧНЫЕ КЛИНКИ + Нету видимых целей + Этот доспех доступен лишь охотнице! + + кожаный доспех + Доспех изготовленный из шкуры монстра. Не столь лёгок, как тканьевый доспех, но обеспечивает большую защиту. + + волшебный балахон + Облачённый в эти роскошные одеяния, маг способен использовать заклятие Расплавленной Земли, поджигая и обездвиживая всех врагов в поле зрения. + РАСПЛАВЛЕННАЯ ЗЕМЛЯ + Этот доспех доступен лишь магу! + + кольчужный доспех + Сочленение металлических колец образует прочный, но, в тоже время, не сковывающий движения доспех. + + латный доспех + Массивные металлические пластины обеспечивают непревзойдённую защиту, доступную лишь героям способным осилить эту тяжкую ношу. + + разбойничий комбинезон + Облачившись в эти чёрные одежды, разбойник способен провернуть фокус, называемый \"дымовой шашкой\": ослепляя заметивших его противников и отскакивая в сторону. + ДЫМОВАЯ ШАШКА + Этот доспех доступен лишь разбойнику! + Ты можешь отскочить лишь в свободное место, в поле твоего зрения + Выбери место для отскока + + чешуйчатый доспех + Металлические пластинки, нашитые на кожаную основу обеспечивают достаточную подвижность и недурную защиту. + + боевой доспех + Не смотря на кажущуюся тяжесть, эта броня позволяет воину осуществлять рывок в указанное место, оглушая ближайший врагов ударной волной. + БОГАТЫРСКИЙ РЫВОК + Этот доспех доступен лишь воину! + Выбери направление рывка + + + + + %s влечения + + %s антиэнтропии + + %s само-ремонта + + %s упругости + + %s перемещения + + %s пут + + %s метаболизма + + %s умножения + + %s потенциала + + %s зловония + + %s вязкости + отложено %d + зачарование вязкости + Отложенный урон (%d) + Зачарование вязкости убило тебя + + + + + ОТКРЫТЬ + + Кольцо для ключей + Это кольцо для ключей меди, что позволяет сохранить все ваши ключи отдельно от остальных ваших вещей. + + футляр для свитков + В этот футляр может поместиться любое количество свитков. Он освободит место в твоём рюкзаке и защитит свитки от огня. + + мешочек для семян + Этот маленький бархатный мешочек вмещает любое количество семян. Полезная вещь. + + чехол для палочек + Изящное изделие, сработанное из кожи экзотического зверя, уместит в себе волшебные палочки в количестве до %d. + + + + + сухпаёк + Дёшево и сердито: вяленое мясо, немного печенек - и так далее. + СЪЕСТЬ + Вкуснечка! + + мясо приготовленное на углях + Выглядит достойно. + + замороженный карпаччо + Кусок сырого промороженного мяса. Съесть его можно лишь отрезая тоненькие ломтики. Которые получаются на удивление вкусными. + Твои руки становятся невидимыми! + Ты чувствуешь как твоя кожа крепчает! + Освежает! + Тебе похорошело! + + подозрительное мясо + Съешь на свой страх и риск! + Оу, остренько! + У тебя отнялись ноги! + Что-то тебе не хорошо. + Ты объелся. + Какой... подозрительный вкус. + + дорогущий сухпаёк + От просто сухпайка отличается только меньшим размером. + Достаточно вкусно. + + пирог + Традиционный Корнуоллский пирог с начинкой из говядины и картофеля. + + + + + золотой ключ + Засечки на этом ключе имеют миниатюрную, замысловатую форму. Наверное он подойдёт к какому-нибудь сундуку? + + железный ключ + Засечки на этом древнем ключе износились; продетый в него кожаный ремень давно потрескался. Какую дверь им можно открыть? + железный ключ с %d этажа + + ключ-скелет + Весьма внушительный ключ: с головкой в форме черепа. Пожалуй он смог бы открыть некую внушительную дверь. + + + + + %s зелье + В этом флаконе содержится %s зелье. Кто знает, что станется, если её выпить или швырнуть? + ВЫПИТЬ + Вредное зелье! + Полезное зелье + Да, я знаю на что иду + Нет, я передумал + Ты уверен, что стоит это пить? Обычно такие зелья кидают во врагов. + Ты уверен, что стоит это кидать? Как правило подобные зелья выпивают. + Флакон разбивается и %s зелье безвредно растекается + + голубое + алое + синее + зелёное + золотое + лиловое + чёрное + белесое + янтарное + коричневое + фиолетовое + серебряное + + + Зелье Опыта + Опыт накопленный в неисчислимых битвах преобразован в форму зелья, такой напиток моментально повысит твой уровень опыта. + + Зелье Мороза + При контакте с воздухом этот химикат испарится, образуя леденящее облачко, примораживающее к месту всякое существо, которое его коснётся, лишая того возможности пошевелится. + + Зелье Исцеления + Эликсир мгновенно восстановит твоё здоровье и излечит от яда. + Твои раны полностью затянулись. + + Зелье Невидимости + Выпив это зелье ты станешь временно невидимым. Враги не смогут увидеть тебя, но нападение на врага, также как использование палочки или свитка у них на глазах, сделает тебя видимым. + Твои руки становятся невидимыми! + + Зелье Левитации + Выпив эту занятную субстанцию ты обретёшь способность парить над поверхностью, минуя ловушки. Но, поскольку огонь и газ заполняют воздух, их ты облететь не сможешь. + Ты воспарил над землёй! + + Зелье Жидкого Пламени + Эта фляга содержит мощный реагент, который мгновенно воспламенится при контакте с воздухом. + + Зелье Могущества + Это сильнодействующее средство нальёт твои мышцы, перманентно повышая твою силу на 1, а здоровье на 5 очков. + Новоприобретённая сила пульсирует в твоём теле. + +1 сила, +5 здоровье + + Зелье Ясновидения + Выпив это ты обретёшь способность улавливать мозговые волны удалённых существ, что позволит тебе чувствовать живые организмы сквозь стены. Также это зелье позволит тебе видеть сквозь ближайшие стены и двери. + Ты каким-то образом почувствовал присутствие других разумных существ! + Что-то тебе подсказывает, что ты единственное живое существо на этом уровне. + + Зелье Парализующего Газа + При контакте с воздухом эта жидкость испарится, образуя желтоватую дымку. Любой вдохнувший его будет мгновенно парализован и сможет двинуться лишь спустя некоторое время после испарения дымки. Этот предмет можно швырнуть во врагов, чтобы парализовать их. + + Зелье Очищения + Этот реагент мгновенно нейтрализует все вредоносные газы в помещении. Выпив его ты временно получишь иммунитет к подобным газам. + Воздух внезапно посвежел. + Ты потерял обоняние! + + Зелье Силы + Это сильнодействующее средство нальёт твои мышцы, перманентно повышая твою силу на 1. + Новоприобретённая сила пульсирует в твоём теле. + +1 сила + + Зелье Токсичного Газа + При малейшем повреждении или попытке открыть этот сосуд, заполненный под давлением, приведёт к взрыву токсичного газа. Тебе стоит предпочесть метнуть его во врага, нежели пытаться это открыть. + + + + + трупная пыль + Горстка трупной пыли неотличима от пыли обыкновенной. Хотя тебя не покидает чувство, что лучше от этого избавится, как можно скорее. + + самородок мракозлата + Этот металл зовётся мрачным не из-за его цвета (он не отличим от простого золота), а из-за того что он плавится от солнечного света, в связи с чем, его невозможно использовать на поверхности. + + сухая роза + Эта роза иссохла много лет тому назад, но, не смотря на это, сохранила каждый лепесток. + + дворфийский жетон + Многие дворфы и их наиболее массивные творения, носили эти маленькие металлические штучки. Для чего они нужны, остаётся загадкой . Может это были украшения или, своего рода, удостоверения. Дворфы - странный народец. + + призрачная рыба + СЪЕСТЬ + Ты едва можешь разглядеть эту крошечную прозрачную рыбку в воздухе. В воде она практически невидима. + Твои руки становятся невидимыми! + + кирка + Это крупное, крепкое орудие используется для раскалывания камней. Как простое оружие оно тоже может сгодится. + ДОБЫВАТЬ + Ты не видишь ни одного месторождения мракозлата в зоне досягаемости + + череп гигантской крысы + Это могло бы стать неплохим трофеем, о не хотелось бы вешать на стену нечто столь зловонное. + + + + + кольцо с %s + Это металлическое колечко украшено %s переливающимся на свету. Кто знает какой эффект оно может оказать при надевании? + Сломанный предмет %s + ты достаточно хорошо знаком с предметом %1$s чтобы его опознать. Это %2$s. + Сними одно кольцо + Ты можешь носить только два кольца сразу. Сними одно из надетых колец. + + бриллиантом + опалом + гранатом + рубином + аметистом + топазом + ониксом + турмалином + изумрудом + сапфиром + кварцем + агатом + + Проклятое %s не снять. Боль. + %1$s\n\n%2$s на твоём пальце %3$s + проклято, ты не в силах его снять. + %1$s\n\nТы чувствуешь зловещую магию затаившуюся внутри предмета %2$s. + Это %s + + Кольцо Меткости + Это кольцо повысит твой шанс попадания по врагу. + + Кольцо Обнаружения + Это кольцо позволит тебе замечать такие секреты, как тайные двери и ловушки, не тратя время на поиски. Ослабленное кольцо обнаружения наоборот притупит твои чувства, усложнив поиск секретов. + + Кольцо Стихий + Это кольцо обеспечит тебя сопротивляемостью к воздействию стихий, таких как огонь, электричество, газы и т.д. Также оно снизит время влияния негативных эффектов + + Кольцо Уклонения + Это кольцо повысит твой шанс уклонится от вражеской атаки. + + Кольцо Торгаша + Это кольцо не имеет волшебных эффектов, но торговцы и дельцы в курсе, что его может носить лишь член Гильдии Воров. Как правило они готовы предложить скидку, чтобы избежать проблем. Улучшение этого кольца не принесёт дополнительных бонусов. + + Кольцо Стремительности + Это кольцо ускорит течение времени своего владельца, в связи с чем от начнёт быстрее справятся со всевозможными задачами. + + Кольцо Травничества + Это кольцо увеличит шанс собрать росу и семена с вытоптанной травы. + + Кольцо Заживления + Это кольцо увеличит регенеративные способности владельца, позволяю ему быстрее восполнять здоровье. Ослабленное кольцо снизит или может целиком остановить регенерацию организма. + + Кольцо Власти + Мощь этого кольца усилит волшебные палочки владельца. Ослабленное кольцо окажет обратный эффект. + + Кольцо Сытости + Носитель кольца сможет дольше продержаться без еды. Ослабленное кольцо подстегнёт голод. + + Кольцо Теней + Враги имеют меньший шанс заметить носителя этого кольца. Ослабленное кольцо наоборот привлечёт внимание врагов, которые в простой ситуации могли тебя и не заметить. + + Кольцо Колючек + Хоть само кольцо и не обладает колючками, всякий атакующий враг ощутит на своей шкуре часть нанесённого тебе урона. Улучшение этого кольца не принесёт дополнительных бонусов. + + + + + свиток \"%s\" + Этот свиток покрыт непонятными письменами и озаглавлен руной %s. Кто знает, что случится если его прочесть вслух? + ЧИТАТЬ + Ты не можешь прочесть свиток, будучи ослеплённым + + КАУНАН + СОВИЛОУ + ЛАГУЗ + ВАЙНДЖИ + ГАЙФУ + РАЙДО + ИЗАС + МАННАЗ + НАУДИЗ + БЕРКАНАН + ОДАЛ + ТИВАЗ + + + Выбери предмет + Ты уверен что хочешь отменить использование свитка? Он пропадёт в любом случае. + Да, пусть так + Нет, я передумал + + Свиток Вызова + При прочтении вслух этот свиток издаст бросающий вызов рёв, указывая место твоего положения всем монстрам на уровне. + Свиток испускает бросающий вызов рёв, эхом проносящийся по подземелью! + + Свиток Опознания + Раскрывает все секреты одного предмета. + Выбери предмет для опознания + Это %s + + Свиток Колыбельной + Убаюкивающая мелодия, создаваемая свитком, усыпить всех существ в поле зрения, позволяя тебе сбежать или давая возможность нанести неожиданный удар. + Свиток испускает убаюкивающую мелодию. + Свиток испускает убаюкивающую мелодию и %s засыпает! + Свиток испускает убаюкивающую мелодию и монстры засыпают! + + Свиток Волшебной Карты + При прочтении свитка, в твоей памяти отчётливо выстроится картина, показывающая карту уровня и все его секреты. Но, расположение предметов и существ останется неизвестным. + Теперь ты знаешь план уровня. + + Свиток Двойника + Прочтение свитка создаст твоего иллюзорного близнеца, который устремится в погоню за врагами. + + Свиток Ментального Удара + Этот свиток содержит разрушительную энергию, которая, по воле владельца, устремится ко всем врагам, в поле зрения, нанося им непомерный урон. Этот эффект сопровождается сильнейшей вспышкой, которая ослепит всех присутствующих, включая владельца. + + Свиток Перезарядки + Сырая магическая энергия, заточённая в этом свитке восстановит заряд всех волшебных палочек того, кто его прочтёт. + поток энергии пробежал по твоему рюкзаку, перезарядив волшебную палочку + поток энергии пробежал по твоему рюкзаку, перезарядив волшебные палочки + поток энергии пробежал по твоему рюкзаку, но ничего не изменилось + + Свиток Снятия Проклятия + Прочитав этот свиток ты призовёшь волшебную силу, которая развеять проклятья со всех предметов, позволяя тебе их снять. + Очистительный свет пробежал по твоему рюкзаку, изгоняю зловещую силу. + Очистительный свет пробежал по твоему рюкзаку, но ничего не изменилось. + + Свиток Телепортации + Этот свиток перенесёт заклинателя в случайную точку текущего уровня. Это может помочь сбежать из опасных ситуаций, хотя невезение может привести в место и похуже. + В мгновение ока, ты переместился в другую область уровня. + Могучая магическая аура этого места не позволяет тебе телепортироваться! + + Свиток Ужаса + Красная вспышка повергнет всех видимых существ в ужас, обращая их в бегство. Атакуя убегающего врага ты снимешь с него заклятие. + Свиток испускает яркую вспышку красного света + Свиток испускает яркую вспышку красного света и %s спасается бегством! + Свиток испускает яркую вспышку красного света и монстры спасаются бегством! + + Свиток Улучшения + Этот свиток улучшить единственную вещь, повышая её качество. Сила и ёмкость палочки возрастёт; оружие получит больший урон или увеличит меткость; броня получит большую защиту; возможности кольца возрастут. Оружие и броня, также, потребуют меньше силы для использования, а любой проклятый предмет будет очищен. + Выбери предмет для улучшения + %s теперь действительно выглядит лучше + + Свиток Зачарования + Этот свиток наделит оружие или броню какими-нибудь чарами, кои наделят предмет особыми силами. + Выбери предмет для зачарования + твой предмет %s мерцает во тьме + + Свиток Уничтожения + @string/Scroll_ACRead + Чтение этого свитка освободит гнев духов подземелья, убивая всё живое на уровне. Ну, почти всё. Некоторые, самые могучие существа могут избежать его воздействия. + @string/Scroll_Blinded + + + + + %s волшебная палочка + ВЗМАХНУТЬ + Эта тонкая %s палочка тепла на ощупь. Кто знает, на что она способна? + Используя эту палочку в качестве оружия ближнего боя, она нанесёт %d урона за удар. + Ты можешь использовать это палочку как оружие ближнего боя. + твоя палочка издаёт потрескивание; наверное в ней кончились заряды + Ты не можешь нацелится на себя + Выбери направление взмаха + Теперь ты достаточно знаком с твоим предметом %s. + + ясеневая + тисовая + эбеновая + вишнёвая + тиковая + рябиновая + ивовая + сандаловая + бамбуковая + лиловая + дубовая + берёзовая + + + Палочка Буйства + Лиловый свет, испускаемый этой палочкой, заставит цель впасть в буйство и, без разбора, атаковать любое существо в зоне досягаемости. + ничего не произошло + + Палочка Камнепада + Когда разряд палочки ударяет в стену (или другое твёрдое препятствие) он вызывает обвал камней, нанося урон и оглушая всех существ в области действия. + Ты убился об собственную Палочку Камнепада... + + Палочка Скачка + Эта палочка позволит тебе телепортироваться в выбранное место. Существа и неодушевлённые предметы помешают телепортации. + + Палочка Дезинтеграции + Эта палочка извергает луч разрушительной энергии, пронзающий всех существ на пути. Чем больше целей он поразит, тем больше урона получит каждая из них. + + Палочка Огнеплюя + Эта палочка выпускает сгусток волшебного пламени. Который может поджечь воспламеняющуюся среду, а также нанести урон и поджечь целевое существо. + Ты погорел от собственной Палочки Огнеплюя... + + Палочка Стада + Взмах этой палочки призовёт стадо волшебных овец, которые образуют временное непреодолимое препятствие. + овца + Это волшебная овца. Что в ней такого волшебного? Ты не сможешь её убить. Она будет стоять на месте, сосредоточенно что-то пережёвывая, пока волшебным образом не испарится. + + Бее! + Бее? + Бее. + Бее... + Бээ... + Бваа... + + + Палочка Молний + Эта палочка испускает разряд молний поражающий несколько целей, стоящих рядом. + Ты спалился на собственной Палочке Молний... + + Палочка Волшебных Зарядов + Эта палочка выпускает заряд волшебной энергии, нанося средний урон целевому существу. + РАЗВОПЛОТИТЬ + Ты пришлёпнул себя, своей собственной Палочкой Волшебных Зарядов... + Выбери палочку для улучшения + ты развоплотил Палочку Волшебных Зарядов, использовав её энергию для улучшения предмета %s + + Палочка Яда + Это порочный кусок древесины извергает сгусток яда, отравляющий твою цель. Отравленное существо получает периодический урон вплоть до окончания действия эффекта. Продолжительность эффекта возрастает с уровнем палочки. + ничего не произошло + + Палочка Роста + \"В окончании одной жизни, новая жизнь берёт своё начало... Бесконечный цикл нерушим!\" + ничего не произошло + + Палочка Замедления + Эта палочка наложит на цель временный эффект, уменьшающий её скорость атаки и движения + ничего не произошло + + Палочка Досягаемости + Эту полезную палочку можно использовать чтобы захватывать предметы на расстоянии и меняться местами с врагом. Волны магической энергии что она испускает повлияет на все на её пути, заставляя ловушки срабатывать, приминая траву, открывая закрытые двери и закрывая открытые. + Ты волшебным образом переместил предмет %s в свой рюкзак + + Палочка Телепортации + Разряд этой палочки перенесёт целевое существо в случайную точку текущего уровня, хочет оно того или нет. + %1$s куда-то телепортировал %2$s + ничего не произошло + + + + + Ты достаточно хорошо знаком с предметом %1$s чтобы его опознать. Это %2$s. + Взаимодействие несовместимых типов магии разрушили чары, наложенные на это оружие! + %1$s :%2$d + сломано %1$s :%2$d + + + + + морозный %s + + искрящий %s + + жуткий %s + + нестабильный %s + + вампирический %s + + счастливый %s + + ошеломляющий %s + + отравленный %s + + шокирующий %s + + морозный %s + + закаленный %s + + + + + %1$s - %2$s оружие ближнего боя %3$d порядка. + + улучшенное + ослабленное + сломан + Средний урон %d единиц за удар. + Типичный средний урон составляет %1$d единицы за удар и, как правило, требует %2$d очков силы. + Судя по всему это оружие слишком тяжело для тебя. + Это довольно %s оружие. + быстрое + медленное + и + но + меткое + неточное + Оно было сбалансировано для повышения скорости. + Оно было сбалансировано для повышения точности. + Оно зачарованно. + Из-за твоей недостаточной силы, скорость и точность атаки оружием %s снижены. + За счёт более чем достаточной силы, количество урона, от оружия %s, увеличено. + Ты держишь %1$s наготове %2$s. + , поскольку оружие проклято ты не в силах выпустить его из рук + Ты чувствуешь зловещую магию затаившуюся в оружии %s. + + боевой топор + Вес огромного стального наконечника этого грозного оружия чувствуется в каждом взмахе. + + кинжал + Простейший железный кинжал с удобной деревянной рукоятью. + + глефа + Копьё с лезвием от меча на конце. + + кастет + Железная скоба, плотно охватывающая пальцы. + + длинный меч + Массивный клинок наносит огромный урон обрушивая на врага свой вес. + + булава + Железный наконечник этого оружия способен наносить существенный урон. + + боевой посох + Посох из твёрдого дерева, его концы окованы железом. + + короткий меч + Действительно короткий, буквально на несколько сантиметров длиннее кинжала. + ПЕРЕКОВАТЬ + Выбери оружие для улучшения + ты перековал короткий меч для улучшения оружия %s + ты не сможешь улучшить бумеранг таким образом + + копьё + Тонкое древко с острым железным наконечником. + + меч + Отблеск острого как бритва клинка внушает уверенность. + + боевой молот + Очень не многие существа могут пережить удар такого оружия, но не каждому путешественнику под силу его использовать . + + + + + Оружие дальнего боя + Да, я знаю, что делаю + Нет, я передумал + Ты уверен что хочешь использовать это в качестве оружия ближнего боя? + \n\nСредний урон от этого оружия составляет %d единиц за удар. + Из-за твоей недостаточной силы, скорость и точность атаки оружием %s снижены. + За счёт более чем достаточной силы, количество урона, от оружия %s, увеличено. + \n\nТы держишь %s наизготове. + + бумеранг + Брошенное во врага, это изогнутое деревянное оружие, вернётся в руку владельца. + + дротик кураре + Эти маленькие зловещие дротики наносят немного урона, но они способны временно парализовать цель. + + дротик + Эти простые металлические шипы идеально выверены, для того чтобы точно вонзиться в свою жертву. + + воспламеняющий дротик + Кончик дротика рассчитан на то, чтобы надёжно впиться в цель, в то время, как, состав которым он обработан, вспыхнет, окутывая жертву пламенем. + + метательное копьё + Это металлическое копьё тщательно сбалансировано, чтобы его острый наконечник неизменно стремился в цель, на протяжении всего полёта. + + сюрикен + Острые как бритва металлические звёздочки наносят существенный урон своим целям. Их можно метать с большой скоростью. + + томагавк + Хоть этот метательный топор не столь тяжёл, но, тем не менее, для обращения с ним требуется ощутимая сила. + + + + + Здесь витает облако дурманящего газа. + + Здесь бушует пламя. + + Столб света пронзает мрак подземного сада. + + Здесь витает облако паралитического газа. + + \"Твоя жертва достойна...\" + \"Твоя жертва недостойна...\" + \"Твоя жертва достойна как и ты!\" + Жертвенный огонь пылает здесь. Каждый кто коснется его будет отмечен как подношение духам подземелья. + Знак жертвы + + Здесь витает зеленоватое облако токсичного газа. + Ты захлебнулся токсичным газом.. + + Сделав глоток, ты чувствуешь как знания насыщают твой разум. Теперь ты знаешь всё о надетых на тебя предметах. Ты также чувствуешь все предметы на этом уровне и знаешь всего его секреты. + Вода этого источника излучает силу знаний. Сделай глоток чтобы раскрыть все секреты своей экипировки. + + Вода этого источника излучает силу здоровья. Сделай глоток чтобы залечить свои раны и утолить голод. + Сделав глоток, ты чувствуешь как твои раны исцеляются. + + Вода этого источника излучает силу перемен. Брось в воду предмет, чтобы он превратился в нечто иное. + + Здесь всё покрыто паутиной. + + + + + Амок + + Кожа-кора + + Кровотечение + Ты истёк кровью... + + Ослеплён + + В огне + %s в огне! + Ты сгорел заживо... + + Зачарован + + Комбо + %d-ударное комбо! + + Травмирован + + Заморожен + + В ярости + + Иммунитет к газам + + Ты голодено. + Ты истощёно! + Тебя настигла смерть от голода. + Голоден + Голодает + + Невидимый + + Левитирующий + + Светящийся + + Ясновидение + + Едкая слизь + %s сожрала тебя... + + Парализован + + Отравлен + Ты умер от яда... + + Ослеплён яростью + + Спутан + + Слился с тенью + + Замедлен + + Метка снайпера + + Завихрение + + Ослаблен + + + + + рюкзак + + + + + Настоящее описание скоро появится! + Что-то умерло в дали + эхо\u0020 + %1$s: \"%2$s\" + %s спит + %s рыщет + %s охотится + %s спасается бегством + %s бездельничает + + кислотный скорпион + + крыса-альбинос + + бандит + + летучая мышь-вампир + Эти шустрые, настойчивые обитатели пещер, способны одолеть более крупного соперника, за счёт того, что с каждым успешным ударом, они восполняют часть своего здоровья. + увернулась + + гнолл-громила + Громилы - самые большие, сильные и выносливые из всех гноллов. Будучи израненными, они впадают в неистовство, нанося увеличенный урон. + %s впал в неистовство! + неистовый + + сточный краб + Эти огромные крабы находятся на вершине пищевой цепочки канализации. Они поразительно быстры, а их прочный хитин способен выдерживать множество ударов. + отбился + + воплощение проклятья + Это существо напоминает печального призрака, но окружено вихрем тьмы. На лице его печать отчаянья. + + DM-300 + DM-350 + Эта машина был создан Дворфами много веков назад. Позднее Дворфы стали заменять машины големами, элементалями и даже демонами. Что и привело к гибели их цивилизации. Машины подобные ДМ-300, в основном, выполняли строительные и шахтёрские функции, но в случае необходимости могли защищать город. + ДМ-300 ремонтируется! + Миссия провалена. Отключаюсь. + Обнаружено несанкционированное проникновение. + + огненный элементаль + Огненные элементали являются побочным эффектом ритуалов призыва великих сущностей. Ввиду своей хаотичной природы, воля этих созданий не подвластна даже сильнейшим демонологам. + + око зла + Этот демон также известен как \"шар ненависти\", по-скольку при виде врага, он, не задумываясь, обращает на того \"взгляд смерти\", не обращая внимания на то, что может ранить союзников. + %s\'s убило тебя взглядом смерти... + + мерзкую крысу + Эта сумчатая крыса гораздо крупнее обычной. Вокруг неё витает тяжелое облако. + увернулась + + гнолл-следопыт + Гноллы, это гиенообразные гуманоиды. Они обитают в канализации и подземельях, периодически совершая набеги на поверхность. Гнолл-следопыт - типичный представитель стаи, он не столь силён, как громила и не так умён, как шаман. + + голем + Продукт Дворфийских экспериментов по взаимоиспользованию их навыков машиностроении и новоприобретённых знаний о покорении стихий. Духи земли заменяли \"душу\" механического каркаса голема, считалось что их легче всего контролировать. Не смотря на это, малейшая оплошность в ритуале приводила к плачевным последствиям. + прикрылся + + жижа + Отродье Жижы + Жижа - загадочная вещь. Скорее всего, что это даже не существо, а масса канализационных субстанций, обретшая зачатки сознания. + Жижа начинает накачиваться! + хлюп... хлюп... + ХЛЮП-ХЛЮП! + !!! + + Царь Дворфов + зомби Царя Дворфов + Последний из дворфийских царей известен своими выдающимися познаниями о природе жизни и смерти. Он убедил придворную свиту принять участие в ритуале, обещавшим вечную молодость. В итоге её обрёл лишь он сам, заполучив армию нежити, в качестве бонуса. + отбился + Ты не в силах меня одолеть, %s... Я... бессмертен... + Восстаньте, слуги! + Да как ты смеешь! + дворф-нежить + Эти мёртвые дворфы, восставшие по воле своего Царя, были некогда членами его придворной свиты. Внешне они выглядят как скелеты с внушительными бородами. + прикрылся + + мимик + Мимики - магические существа, которые могут принимать любую форму по желанию. В подземельях мимики почти всегда принимают форму сундуков, они ведь знают, как лучше всего привлечь искателя приключений. + + дворф монах + Монахи, это фанатики, посветившие себя защите секретов их народа от чужаков. Они не полагаются на броню и оружие, доверившись искусству рукопашного боя. + отбился + %1$s выбил %2$s из твоих рук! + + огромная пиранья + Эти плотоядные рыбы не являются исконными обитателями пещерных водоёмов. Они были выведены специально для защиты затопленных сокровищниц. + + сумчатая крыса + Сумчатые крысы - агрессивные, но довольно слабые обитатели канализации. Тем не менее, в больших количествах, они могут представлять опасность. + + скорпион + Эти огромные членистоногие создания стараются избегать ближнего боя, выстреливая ядовитые иглы с большого расстояния. + + старший монах + + гнолл-шаман + Умнейшие из гноллов способны освоить шаманизм. Гнолл-шаман охотно использует боевые заклятия, компенсируя недостаток физической силы, а также, чтобы обезопасить свой высокий статус в обществе. + %s достал тебя разрядом молнии... + + громила-щитоносец + прикрылся + + скелет + Скелеты, состоящие из костей павших путешественников, восстали под воздействием отголосков зловещей магии таящейся в глубине подземелья. Будучи достаточно повреждёнными, они разлетаются на костяные осколки. + прикрылся + Тебя пробило костяным осколком... + + пещерный паук + Эти пушистые зелёные пауки стараются избегать прямых столкновений, предпочитая выжидать в дали, пока их жертва, запутанная в паутине, медленно гибнет от яда. + + ожившая статуя + Может показаться, что это просто очередная неприметная статуя, но красные светящиеся глаза выдают её намерения. Хоть статуя и сработана из камня, её _%s_, выглядит настоящим. + + суккуб + Суккубы, это демоны, принимающие вид соблазнительных (в слегка готическом стиле) девушек. Своим колдовством, они могут зачаровать героя, лишая его возможности атаковать, до того, как эффект пройдёт. + + рой мух + Смертоносный рой мух злобно жужжит. Каждая не магическая атака разобьёт его на два роя поменьше, каждый из которых не менее опасен чем полноценный рой. + увернулась + + тенгу + память о Тенгу + Тенгу, это члены древнего клана наёмных убийц, который также зовётся Тенгу. Они известны страстью к сюрикенам и ловушкам. + Наконец-то, свобода... + Попался, %s! + + свихнувшийся вор + Глубинные уровни подземелья всегда служили хорошим укрытием для всякого преступника. Но не всякий преступник мог сохранить рассудок, будучи отлучённым от дневного света на долгое время. Давным-давно, эти безумные бандиты и воры позабыли кто они и зачем совершают преступления. + %1$s украл у тебя %2$s! + \n\n%1$s носит _%2$s_. Добро, конечно, краденое. + + дворф-чернокнижник + Когда интерес дворфов перекочевал с технологий на магию, чернокнижники стали новой элитой. Начиная с магии стихий, вскоре они перешли на некромантию и демонологию. + %s\'s уничтожил тебя стрелой теней... + + фантом + Фантом это мстительный дух грешника, чья могила была потревожена. Нематериальное создание крайне сложно победить простым оружием. + увернулась + + Йог-Джева + эхо Йог-Джевы + Йог-Джева, это старый Бог, могучая сущность из мира хаоса. В минувшие века, древние дворфы с трудом одолели его армию демонов, но одолеть бога им было не под силу. Они заточили его в глубинах своего города, веря, что он слишком ослаблен, чтобы когда-либо вырваться на свободу. + ... + Я надеюсь мне это почудилось... + гниющий кулак + пылающий кулак + личинка бога + + + + + золотая пчела + Несмотря на малый размер, золотые пчелы яростно защищают своего хозяина. Однако живут они недолго. + %s рыщет + + тролль-кузнец + Этот тролль-кузнец ничем не отличим от прочих троллей: высокий и сутулый, кожа его подобна камню. Тролль-кузнец орудует непропорционально маленькими инструментами. + Эй человечек! Хочешь принести пользу, а? Возьми ка эт кирку, да копни мне _самородков мракозлата_, _штук 15_ хватит. Чё значит, сколько я заплачу? Ах ты жадный...\nЛадно, ладно, нету у меня денег, но я могу предложить тебе своё ремесло. Ты, считай, везунчик, нашёл единственного кузнеца в округе. + Эй человечек! Хочешь принести пользу, а? Возьми ка эт кирку, чё-бы ей _прихлопнуть летучую мышь_, мне нужно чёбы наконечник был в крови. Чё значит, сколько я заплачу? Ах ты жадный...\nЛадно, ладно, нету у меня денег, но я могу предложить тебе своё ремесло. Ты, считай, везунчик, нашёл единственного кузнеца в округе. + Ты чё, стебёшься? Где моя кирка?! + Самородки Мракозлата. 15 ошмётков. Чё те, трудно чёли? + Я сказал, чё кирка должна быть покрыта кровью. Шуруй, шуруй! + Ой же, вернулся... Лучше поздно чем никогда. + Я занят. Отвали! + твой предмет %s теперь выглядит лучше + Выбери 2 разных предмета, нельзя выбрать один и тот же дважды! + Выбери 2 предмета одного типа! + Я чё те, справочное бюро? Распознай свои предметы, чтобы я мог с ними работать! + Э, ты чё, я с проклятыми штуками не работаю! + Чё эт за барахло? Уж больно эта штука низкокачественная! + Я эт перековать не могу! + + печальное приведение + Приведение еле заметно. Оно похоже на бесформенную дымку с грустным лицом. + увернулась + Здравствуй путешественник... Когда-то я был таким же как и ты - сильным, уверенным... А теперь я мёртв... Но я не могу покинуть это место... Пока ко мне не вернётся _сухая роза_... Это очень важная для меня вещь... Чудище стащило её с моего бездыханного тела... + Прошу... Помоги... _Найди розу_... + Да! Да!!! То что нужно! Прошу, отдай её мне! И можешь взять любой из этих предметов, они могут тебе пригодится... + Здравствуй путешественник... Когда-то я был таким же как и ты - сильным, уверенным... А теперь я мёртв... Но я не могу покинуть это место... Пока моя месть не осуществится... Одолей _мерзкую крысу_, которая лишила меня жизни... + Прошу... Помоги... _Одолей эту тварь_... + Да! Мерзкое создание пало, наконец-то я могу упокоиться с миром... Прошу возьми любой их этих предметов, они могут тебе пригодится... + Здравствуй путешественник... Когда-то я был таким же как и ты - сильным, уверенным... А теперь я мёртв... Но я не могу покинуть это место ибо я связан ужасным проклятьем... Прошу... Помоги... _Разрушь проклятье_... + Спасибо, %s! Проклятье разбито и я могу наконец-то отдохнуть...Возьми одну из этих вещей, они могут пригодится в твоем путешествии... + Да, я сделаю это для тебя + Нет, я не могу тебе помочь + + амбициозный бес + Бесы, это низшие демоны. Они не славятся своей силой или магической мощью, но они достаточно умны и общительны. Многие бесы предпочитают жить с теми, кто не является демонами. + увернулась + Ты путешественник? Я обожаю путешественников! На них всегда можно положится, если требуется чего-нибудь убить. Правда, а? За плату конечно ;)\nВ нашем случае _големы_ нуждаются в убийстве. Видишь ли, я хотел начать здесь дельце, но эти дурацкие големы спутали мне все карты! Ходячие куски гранита не шибко коммуникабельны, однако! Так что, прошу прихлопни... скажем _6 големов_ и я в долгу не останусь. + Как там наше големово сафари? + Ты путешественник? Я обожаю путешественников! На них всегда можно положится, если требуется чего-нибудь убить. Правда, а? За плату конечно ;)\nВ нашем случае _монахи_ нуждаются в убийстве. Видишь ли, я хотел начать здесь дельце, но эти шизики сами ничего не купят и остальных покупателей распугают. Так что, прошу прихлопни... скажем _8 монахов_ и я в долгу не останусь. + О, да ты не умер! Я знал что твоё кунг-фу сильнее ;) Только не забудь собрать, с этих монахов, жетоны. + Увидимся, %s! + Пссс, эй %s! + + амбициозный бес + Бесы, это низшие демоны. Они не славятся своей силой или магической мощью, но они достаточно умны и общительны. Многие бесы предпочитают жить с теми, кто не является демонами. + Привет, друг! + + двойник + Эта иллюзия весьма на тебя похожа, хотя слегка бледновата и посверкивает. + + крысиный король + Эта крыса слегка крупнее обычной. На её голове виднеется малюсенькая корона. + Я не сплю! + Это ещё что? У меня нету времени на всякую ерунду. Королевство само собой править не будет! + + торговец + Этот тучный индивидуум больше подходит для торговли в городском квартале, нежели в подземелье. Хотя судя по ценам, здесь ему тоже не плохо. + Выбери предмет для продажи + + Старый мастер + Этот старый, но крепенький мужчина, выглядит немного озадаченным. Он окружён магическим щитом. + отмахнулся + О, какой приятный сюрприз, встретить достойного человека в таком месте! Я пришёл сюда в поисках редкого ингредиента _семян Гниловики_. Как человек осведомлённый в магии, я вполне справляюсь с местными монстрами, но заблудиться для меня, - раз плюнуть, стыдоба, честное слово. Не поможешь старику? Я с радостью оплачу твои старания одной из своих лучших волшебных палочек. + Как поиски _семян Гниловики_, %s? Глухо? Не переживай, я не тороплюсь. + О, какой приятный сюрприз, встретить достойного человека в таком месте! Я пришёл сюда в поисках редкого ингредиента - _трупной пыли_. Её можно собрать с костяных останков, которыми изобилует подземелье. Как человек осведомлённый в магии, я вполне справляюсь с местными монстрами, но заблудиться для меня, - раз плюнуть, стыдоба, честное слово. Не поможешь старику? Я с радостью оплачу твои старания одной из своих лучших волшебных палочек. + Как наши _пыльные делишки_, %s? Я бы первым делом осмотрел кучки костей. + О, какой приятный сюрприз, встретить достойного человека в таком месте! Я пришёл сюда в поисках редкого ингредиента - _призрачной рыбы_. Ты можешь поймать её голыми руками, но ох как трудно разглядеть её в воде. Как человек осведомлённый в магии, я вполне справляюсь с местными монстрами, но заблудиться для меня, - раз плюнуть, стыдоба, честное слово. Не поможешь старику? Я с радостью оплачу твои старания одной из своих лучших волшебных палочек. + Как дела с _призрачной рыбой_, %s? Может стоит поискать её в одном из прудов поблизости? + + + + + Прижимная плита щёлкнула! + Пропасть + Пол + Трава + Вода + Стена + Закрытая дверь + Открытая дверь + Подъём + Спуск + Тлеющие угли + Запертая дверь + Пьедестал + Баррикада + Высокая трава + Запертая лестница вниз + Открытая лестница вниз + Знак + Источник + Пустой источник + Статуя + Ловушка с токсичным газом + Огненная ловушка + Ловушка с паралитическим газом + Ловушка с ядовитыми дротиками + Сигнальная ловушка + Электрическая ловушка + Хватающая ловушка + Призывающая ловушка + Разряженная ловушка + Шкаф + Алхимический котёл + \?\?\? + Дна не видать. + Если загоришься зайди в воду, чтобы потушится. + Эти ступеньки ведут наверх. + Эти ступеньки ведут в глубь подземелья. + Пол усыпан углями. + Густая растительность закрывает обзор. + Эта дверь заперта, тебе нужен подходящий ключ. + Проход закрыт тяжёлой решёткой. + Деревянная баррикада ладно сработана, но обветшала от времени. Интересно загорится? + Ты не можешь рассмотреть текст от сюда. + Встав на прижимную плиту, ты активируешь ловушку. + Ловушка уже сработала однажды, теперь она безопасна. + Декоратор, у этого места, не самый лучший. + Закинь сюда семян, чтобы сварить зелья. + Источник иссяк. + + Светящийся мох + Светящиеся грибы + Ледяная вода. + Лестница ведёт вниз. + Лестница ведёт наверх. + Огромный гриб закрывает обзор. + На стене виднеется месторождения какой-то руды. Золото? + Кому, в подземелье, мог понадобится книжный шкаф? + + Подозрительно окрашенная вода + Большой, цветущий куст + Пролёт, ведущий вниз. + Пролёт, ведущий наверх. + Здесь недостаёт нескольких плиток. + Пол укрыт плотным ковром. + Статуя изображает Дворфа в героической позе. + Полки уставлены разнообразными учебниками. + + Холодная лава + Углемох + Углегриб + Столб + Это подозрительно похоже на лаву. Но она холодна на ощупь и, судя по всему, не представляет опасности. + Этот столб составлен из настоящих гуманоидных черепов. Прикольно. + Книги, написанные мёртвыми языками, заполняют это шкаф. + + Холодная лава + Углемох + Углегриб + Столб + Это подозрительно похоже на лаву. Но она холодна на ощупь и, судя по всему, не представляет опасности. + Этот столб составлен из настоящих гуманоидных черепов. Прикольно. + + Подозрительно окрашенная вода + Большой, цветущий куст + Лестница в преисподнюю. + Пролёт, ведущий наверх. + Здесь недостаёт нескольких плиток. + Пол укрыт плотным ковром. + + Тёмная холодная вода. + Пол заляпан кровью. + Похоже на останки тюремной библиотеки. Интересно загорится? + + Мутная вода + Влажный желтоватый мох растянулся по полу. + Полки заставлены дешёвыми, бесполезными книгами. Интересно загорится? + + + + + Выбери семена + + Пропасть + Да, я знаю, что делаю + Нет, я передумал + Ты уверен, что хочешь спрыгнуть вниз, ты можешь разбиться. + Ты разбился... + + Что ты здесь делаешь?! + Как вы попробуйте прочитать знак это врывается в зеленоватых огня. + + Не будь самоуверенным, используй доступные тебе оружие и броню. + Не всякая дверь в подземелье заметна с первого взгляда. Если не знаешь куда идти, попробуй поискать тайные двери. + Помни, что повышение силы - не единственный способ использовать лучшее снаряжение, ты можешь пойти другим путём, понижая требования предмета с помощью Свитка Улучшения. + Золото можно тратить в магазинах в глубине подземелья. Первый встречается на уровне 6. + Берегись Жижи! + Pixel магазин. всё, что нужно для успешного приключения! + Распознавай свитки и зелья как можно раньше. Не откладывай до того момента, когда они могут тебе понадобится. + Голод не наносит урона, чего нельзя сказать об истощении. + Неожиданная атака имеет больший шанс на попадание. Например, ты можешь подстеречь врага у закрытой двери, будучи уверенным, что он приближается. + Не выпускай Тенгу! + Pixel магазин. Больше потратишь. Дольше проживёшь. + Если на тебя нападают несколько монстров, попробуй отступить за дверь. + Если тебя подожгут, пока ты в состоянии левитации, ты не сможешь потушить огонь, зайдя в воду. + Нет смысла держать при себе более одного Анха, они все исчезнут при воскрешении. + ОПАСНОСТЬ! Тяжёлая техника может послужить причиной травм, потери конечностей и смерти! + Pixel магазин. Обезопась свою жизнь в подземелье. + При улучшении зачарованного оружия есть вероятность, что оно лишится волшебных свойств. + Оружие и броня приходит в негодность быстрее чем палочки и кольца, но и способ их починить найти проще. + Единственный способ добыть Свиток Уничтожения - получить его в подарок от духов подземелья. + Ношение оружия недопустимо в присутствии его Величества! + Pixel магазин. Охотникам на демонов скидки! + + + + + + Ловушка издаёт пронзающий звук, разносящийся по подземелью! + + электрическая ловушка + Тебя пришибло разрядом электрической ловушки... + + + + + Ты не знаешь что там. + Выбери ячейку, для изучения + + + + + + + 0 + \ No newline at end of file diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000..96ad8bdddd --- /dev/null +++ b/res/values-zh-rTW/strings.xml @@ -0,0 +1,1657 @@ + + + + 點陣地城 + + + + + 開始玩 + 高分紀錄 + 徽章 + 關於 + + 程式 & 圖像:Watabou\n音樂:Cube_Code\n\n此遊戲的靈感來自 Brian Walker 的 Brogue。在 Windows、Mac OS 或 Linux 上都可以玩玩看──超讚!;)\n\n請到我們的官網查看更多資訊: + pixeldungeon.watabou.ru + 翻譯: Redbone + redbone@ancyon.com + 寄送 E-Mail + + 最高排名 + 破關 / 遊玩總次數:\u0020 + 還沒有遊玩紀錄。 + 無更多資訊 + + 你的徽章 + + 讀取遊戲 + 新遊戲 + 刪除目前遊戲 + 樓層:%1$d,等級:%2$d + 確定要開始新遊戲嗎? + 目前的遊戲進度將被刪除。 + 是,開始新遊戲 + 不,回到主選單 + 要解鎖這個職業角色,請用任何其他職業打敗第 3 位 boss + 要解鎖「挑戰」,請用任何職業角色破關。 + + 下樓中... + 上樓中... + 載入中... + 復活中... + 返回中... + 墜落中... + 因為某些原因,找不到檔案... + 出錯了... + + 在你之前有許多英雄來過此地城探險。有些人帶著寶物和魔法物品歸去,而大部分的人都從此音訊全無。不過從來沒有人能成功取回炎多護符,據說它就藏在此地城的深處。\n\n你認為自己準備好接受挑戰了,但最重要的是,你覺得好運會眷顧你。是時候開始屬於你的冒險了! + + 收工囉 + 還沒完呢 + 終於握在你手裡了,炎多護符。運用它的力量你可以統治世界,或是為人們帶來和平與繁榮等等。總之你的生活將永遠改變,而遊戲也將在此結束。或者,你也可以再當個平凡人一段時間。 + + 歡迎來到點陣地城第 %d 層! + 歡迎回到點陣地城第 %d 層! + 小心點,因為地城到了晚上更加危險! + 你的腳步聲迴盪在整座地城中。 + 你聽到四周有水花四濺的聲音。 + 空氣中有濃厚的草木氣味。 + 詭譎的氣氛暗示了這個樓層隱藏著許多秘密。 + + + + 怪物 + %1$s擊中了%2$s + %s殺死了你... + %1$s擊敗了%2$s + %1$s%2$s了你的攻擊 + %1$s%2$s了%3$s的攻擊 + 痛楚讓%s從麻痺中恢復了過來 + 閃避 + 中毒 + 狂亂 + 緩速 + 心靈 + 視界 + 麻痺 + 恐懼 + 地縛 + 重傷 + 流血 + 暈眩 + 隱形 + + + 沒有人能這麼輕易離開點陣地城的。 + 等級提升! + 歡迎來到等級 %d!現在你的生命力更高,也更加集中。擊中敵人和閃躲攻擊更容易了。 + 你獲得了%s + 這裡還有其他東西 + 這個箱子鎖住了,而你沒有對應的鑰匙 + 你沒有對應的鑰匙 + 你注意到了什麼 + ... + 搜尋 + 你著火了! + 你被麻痺了! + 你中毒了! + 腐蝕黏液正侵蝕你的肉體。把它沖洗掉! + 你動彈不得! + 你覺得變虛弱了! + 你失明了! + 你變得憤怒了! + 憤怒 + 你被魅惑了! + 你重傷了! + 你在流血! + 四周的東西都在旋轉! + + 戰士 + 法師 + 盜賊 + 女獵手 + + 戰士起始時有 11 點力量。 + 戰士起始時有一把獨特的短劍,這把劍之後可以藉由「再鑄」來升級其他近戰武器。 + 戰士對遠程武器較不精通。 + 食用任何食物時都會恢復一些生命值。 + 一開始就能辨識力量藥劑。 + + + 法師起始時有一把獨特的魔法箭法杖,這把法杖之後可以藉由「分解」來升級其他法杖。 + 法師充能法杖的速度較快。 + 每吃一次食物,物品欄中的所有法杖都會補充一單位的能量。 + 法師可以把法杖當作近戰武器使用。 + 一開始就能辨認辨識卷軸。 + + + 盜賊起始時擁有 +1 暗影之戒一只。 + 盜賊在戴上戒指後就能辨識它的種類。 + 盜賊精通於輕防具,穿著時會更容易閃避攻擊。 + 盜賊容易發現隱藏的門或陷阱。 + 盜賊可以撐比較久才需要食物。 + 一開始就能辨識魔法定位卷軸。 + + + 女獵手起始時有 15 點生命值。 + 女獵手起始時有一把獨特而可升級的迴力鏢。 + 女獵手擅長使用遠程武器,使用時可依超出的力量獲得傷害加成。 + 女獵手透過露水回復的生命值較多。 + 女獵手可以感知到附近的怪物,即使它們躲在障礙物後面。 + + + 鬥士 + 當_鬥士_用近戰武器攻擊成功時可以進行連擊,每一次連續擊中的攻擊都會造成更大的傷害。 + 狂戰士 + 當_狂戰士_受傷嚴重時會進入狂怒的狀態,大幅提高攻擊輸出。 + 術士 + 在擊殺敵人後_術士_會吸取對方的靈魂,治療傷口並稍微滿足食慾。 + 戰鬥法師 + 當_戰鬥法師_使用裝備在手中的法杖攻擊時,將根據目前儲存的能量值給予傷害加成。每次成功擊中會使該法杖補充 1 能量值。 + 刺客 + 當突襲成功,_刺客_對目標的傷害會有額外加成。 + 風行者 + _風行者_可用比大多數怪物快將近兩倍的速度移動。當跑動時,風行者較不容易被擊中,但前提是未超重及非處於快餓死的狀態。 + 狙擊手 + _狙擊手_可以偵測到弱點,當使用遠程武器時能夠有效地無視敵人護甲。 + 守護者 + 與自然之力的強力連結給了_守護者_從植物獲取露水和種子的能力,且穿過草叢時能夠得到暫時的護甲 buff。 + + + + 獲得徽章:%s + 新的超級徽章:%s + 新徽章:%s + 擊敗 10 個敵人 + 擊敗 50 個敵人 + 擊敗 150 個敵人 + 擊敗 250 個敵人 + 收集了 100 金幣 + 收集了 500 金幣 + 收集了 2500 金幣 + 收集了 7500 金幣 + 達到等級 6 + 達到等級 12 + 達到等級 18 + 達到等級 24 + 識別了所有藥劑 + 識別了所有卷軸 + 識別了所有戒指 + 識別了所有法杖 + 識別了所有藥劑、卷軸、戒指和法杖 + + + + 購買了所有袋子 + 死於火焰 + 死於中毒 + 死於毒氣 + 死於飢餓 + 死於附魔 + 死於墜落 + 死於火焰、中毒、毒氣和飢餓 + + + + + 擊敗第 1 個 boss + 擊敗第 2 個 boss + 擊敗第 3 個 boss + 擊敗第 4 個 boss + 以戰士、法師、盜賊和女獵手擊敗第 1 個 boss + + + + + + + + + 以鬥士、狂戰士、術士、戰鬥法師、風行者、刺客、狙擊手及守護者擊敗第 3 個 boss + 獲得無賴之戒 + 獲得荊棘之戒 + 力量達到 13 點 + 力量達到 15 點 + 力量達到 17 點 + 力量達到 19 點 + 吃了 10 份食物 + 吃了 20 份食物 + 吃了 30 份食物 + 吃了 40 份食物 + + + + + 取得等級 3 的物品 + 取得等級 6 的物品 + 取得等級 9 的物品 + 取得等級 12 的物品 + + + + + + 擊敗所有稀有怪物 + + + + + 獲得炎多護符 + 以戰士、法師、盜賊和女獵手獲得炎多護符 + 7 連擊 + 調配出 3 瓶藥劑 + 調配出 6 瓶藥劑 + 調配出 9 瓶藥劑 + 調配出 12 瓶藥劑 + 通過樓層而沒有擊殺任何怪物 + 使用「殘酷」武器擊殺怪物 + 擊殺 6 隻食人魚 + 在晚上擊殺 5 隻怪物 + 玩了 10 場遊戲 + 玩了 100 場遊戲 + 玩了 500 場遊戲 + 玩了 2000 場遊戲 + 美好結局 + 挑戰成功 + 謝謝你的支持! + + + + + 節食中 + 信念就是我的盔甲 + 藥物恐懼症 + 不毛之地 + 群體智能 + 身陷黑暗 + 禁符文 + + + + + 健康之井 + 認知之井 + 轉化之井 + 獻祭室 + 煉金大鍋 + 花園 + 活動雕像 + 哀傷鬼魂 + 老製杖師 + 巨魔鐵匠 + 野心勃勃的小鬼 + + + + 在第 %2$d 層被%1$s殺死了 + 在第 %2$d 層被%1$s殺死了 + 在第 %2$d層被自己的%1$s殺死了 + 在第 %2$d 層被%1$s殺死了 + 在第 %d 層被炸彈炸死了 + 在第 %2$d 層被釋放的%1$s殺死了 + 在第 %d 層被燒死了 + 在第 %d 層餓死了 + 在第 %d 層被毒死了 + 在第 %d 層被毒氣殺死了 + 在第 %d 層流血而死 + 在第 %d 層被腐蝕黏液殺死了 + 在第 %d 層摔死了 + 獲得炎多護符 + + + + + OK,我們說好的。這是我能幫你做的:我可以把 2 個物品再鑄成一個品質更好的物品。 + 選擇要再鑄的物品 + 開始再鑄 + + 藥劑 + 卷軸 + 物品列表ˋ + + 挑戰 + + 你想踏上哪條道路呢? + 晚點決定 + 是否要轉成%s? + 是,我要轉換 + 之後再說 + + 精通 + + 錯誤 + + 設定 + 挑戰 + 排行 + 開始新遊戲 + 主選單 + 離開遊戲 + 回到遊戲 + + 數值 + 狀態 + 經驗值 + 力量 + 生命 + 獲取的金錢 + 最深樓層 + 等級 %1$d %2$s + 物品列表 + 冒險誌 + + 哦讚啊!你真是我的英雄!\n說到你的獎賞,我目前沒有現金,但我有更好的東西可以給你。這是我的傳家戒指,我爺爺從一個死掉的聖騎士手指上拔下來的。 + 收下戒指 + + 這裡沒什麼東西。 + + 寶箱 + 鎖住的寶箱 + 水晶寶箱 + 墳墓 + 骨骸 + 在打開之前不會知道裡面有什麼! + 但你需要金鑰匙來開啟它。 + 可以看到有%s在裡面,但你需要金鑰匙來開啟它。 + 這座古老的墳墓裡面可能會有用得上的東西,但它的主人一定會反對你進行搜查。 + 某個前人如今只剩下一堆白骨。也許可以檢查看看有什麼好東西。 + + 冒險誌 + + 語言 + + 無法讀取更多資訊 + 數值 + 物品 + 徽章 + 等級 %1$d %2$s + 挑戰 + 生命 + 力量 + 遊戲時間 + 最深樓層 + 擊殺怪物數 + 獲取的金錢 + 吃過的食物 + 調配過的藥劑 + 使用的生命之符 + + 你死了,但可以再得到一次機會來戰勝這座地城。你要接受嗎? + 是,我會奮戰! + 不了,我放棄 + + 鬼魂的武器 + 鬼魂的防具 + 再會了,冒險者! + + + + - + 預設遠近 + 放大 UI + 沉浸模式 + 語言 + 音樂 + 音效 + 亮度 + 第二快捷欄 + 轉換成垂直畫面 + 轉換成水平畫面 + + 這座地城就在城鎮正下方,其實頭幾層還構成了城鎮的地下水道系統。名義上這些樓層算是城鎮的一部份,沒那麼危險。雖然稱不上是安全的地方,但至少在這裡你還不需要應付邪惡的魔法。 + 許多年前這裡曾經蓋了一座監獄來囚禁最危險的犯人。當時看來是個非常聰明的主意,因為這地方確實很難逃脫。但不久後黑暗的戾氣就從深處開始瀰漫開來,把犯人和守衛都逼瘋了。最後這個監獄遭到廢棄,雖然有些囚犯仍被關在此處。 + 這些從廢棄監獄延伸而下的洞窟人煙罕至。因為位置太深而無法被城鎮利用,貧乏的礦產又不足以引起矮人的興趣。過去這裡曾有個貿易據點位在兩大城邦的往來路線上,但已隨著矮人大都城的沒落而消亡。如今這裡只剩無所不在的豺狼人和地底動物棲息著。 + 矮人大都城曾是最大的矮人城邦。在全盛時期時它曾以機械軍隊成功擊退入侵的上古之神和其惡魔大軍。但人們說腐敗的種子隨著凱旋的戰士們歸來,而這場勝利就此拉開了地下王國滅亡的序幕。 + 這幾階樓層本來是大都城的外圍地帶。在那場面對上古之神元氣大傷的勝利後,矮人們已經沒有餘力剷除殘存的惡魔。漸漸的惡魔們掌控了這個地方,現在這裡叫做惡魔大廳。\n\n很少有冒險者能到達這麼深的地方... + + 特價:%1$s - %2$dg + 以 %dg 購買 + 以 %dg 販賣 + 以 %dg 販賣 1 個 + 販賣全部共 %dg + 不用了 + 販賣了 %1$s 獲得 %2$dg + 用 %2$dg 購買了 %1$s + + 哦,我看到你成功了!希望沒給你添太多麻煩。就如我所承諾的,你可以從我這些優質法杖中選擇一把。 + 戰鬥法杖 + 非戰鬥法杖 + 祝你探險順利了,%s! + + + + 選擇要放在快捷欄的物品 + + + + + 某物 + 拋棄 + 扔擲 + 你的背包滿了,裝不下%s + 選擇扔擲的方向 + 由於經常使用,你的%s損壞了。 + 由於經常使用,你的%s很快就要損壞了。 + + 裝備 + 卸下 + 你無法卸下受詛咒的%s! + + 炎多護符 + 結束遊戲 + 炎多護符是來歷不明而最為強大的著名聖物。據說這個聖物能夠實現所有願望,只要其擁有者的意志堅強到足以「說服」它。 + + 生命之符 + 這個古老的永生徽記能施予死而復生的能力。復活後所有未裝備的物品都會遺失。 + + 防具套組 + 使用 + 使用這個包含小工具和材料的套組後,任何人都有辦法將任何防具改造成「史詩級防具」。這將保留原始防具的所有屬性,但會根據職業給予穿戴者一項特殊能力。不需具備裁縫、製皮或鍛造技能。 + 選擇要升級的防具 + 你使用防具套組並升級了你的%s + + 炸彈 + 這是較小型的炸彈,填充著黑色火藥。為了方便起見,引信在炸彈被扔出後會自動點燃。 + 你用炸彈把自己殺死了... + + 露水 + 一顆晶瑩剔透的露珠。 + + 露水瓶 + 飲用 + 你可以將多餘的露水儲存在這個小容器供稍後飲用。如果這個小瓶裝滿了,在致命的危急時刻會自動使用露水。 + 此露水瓶已為了治療你的傷勢而用盡。 + 你收集了一滴露水到露水瓶中。 + 你的露水瓶滿了! + 你的露水瓶空了! + + 這是個寶箱怪! + + 蜂蜜罐 + 打破 + 這小小的蜂蜜罐裡頭沒多少蜂蜜,但有一隻金色的蜜蜂在裡面不想離開。 + + 金幣 + 收集金幣並在商店使用它們。 + %d 枚金幣堆在一起。 + 1 枚金幣。 + + 你猛然一顫,手不由自主地握緊%s。 + + 洛伊德信標 + 設置 + 傳送 + 洛伊德信標是個複雜的魔法裝置,能夠讓你傳送回一個到過的地方。 + 這地方有強大的魔法場域讓你無法使用洛伊德信標! + 附近怪物的精神場域使你目前無法使用洛伊德信標。 + 洛伊德信標已成功設置在你目前的位置,你可以隨時傳送回來。 + \n\n此信標已設置在點陣地城第 %d 層的某處。 + + 精通之書 + 重新精通之書 + 閱讀 + 這本封皮破舊的書不算厚,但不知為何你覺得可以從中學習到很多。不過記住,閱讀這本大書可能要花點時間。 + 你無法在失明的期間閱讀 + 你選擇了走上%s之路! + + 火把 + 點燃 + 這是在惡魔大廳必備的物品。那裡的環境是出了名的昏暗。 + + 平衡石 + 使用 + 使用平衡石能夠讓你的近戰武器增進速度或命中率。 + 選擇要調整的武器 + 你調整了%s讓它速度更快了 + 你調整了%s讓它更精準了 + 想怎樣調整你的%s? + 速度 + 精準度 + 不用了 + + + + + 種植 + 將這顆種子扔在你希望長出%1$s的地方。\n\n%2$s + %s的種子 + + 夢之草 + 夢之草被碰觸到時會散發出閃亮而令人昏眩的氣體。 + + 地根草 + 當有生物碰觸到地根草時,這些根會製造出自然的盔甲圍繞著它。 + 草木之鎧 + + 隱沒之葉 + 當隱沒之葉被任何生物碰觸到時會將其傳送到該樓層的隨機一處。 + + 火焰花 + 當火焰花被碰觸到時會爆發出熊熊火焰。 + + 寒冰菇 + 當寒冰菇被碰觸到時會散發出花粉,將所有附近的東西冰凍住。 + + 墮落之果 + 這種灌木果實的死亡滋味是如此、如此的甜美。 + 這顆種子發出迴盪在整座地城中的轟鳴聲! + + 哀傷之苔 + 哀傷之苔是一種花(而不是苔癬),有著銳利的花瓣,帶著致命毒液。 + + 日光草 + 日光草以其汁液的治療效果而聞名。 + 草木療癒 + + + + + 你的%s痛苦的束縛著你。 + 你現在對你的%1$s已經了解到足以辨識它了。它是%2$s。 + %1$s:%2$d + 損壞的%1$s:%2$d + 在不同類型魔法的交互作用下,這件防具上的符文被消除了! + \n\n這件%1$s在每次受到攻擊時最多吸收「%2$d」點傷害。 + \n\n由於力量不足,你的移動速度和防禦能力下降了。 + \n\n由於力量不足,穿戴這件防具將降低你的移動速度和防禦能力。 + \n\n一般%1$s在每次受到攻擊時吸收最多 %2$d 點傷害,需要 %3$d 點力量來裝備。 + 這件防具對你來說可能太重了。 + 上面已有附魔。 + \n\n你正裝備著%1$s%2$s。 + ,由於被施加了詛咒,你無法脫下它。 + \n\n你能感受到這件%s上潛伏著惡意的魔法氣息。 + + 這玩意看起來超棒的! + 你的生命值太低了! + 你必須穿戴上這件防具來使用它的特殊能力! + + 布甲 + 這件輕便的防具提供了基本的保護。 + + 女獵手斗篷 + 穿著這件斗篷的女獵手可以放出一圈幻影之刃,每支幻影之刃會分別鎖定女獵手視野內的一位敵人,給予的傷害依當下裝備的近戰武器計算。 + 幻影之刃 + 視野內沒有敵人 + 只有女獵手能使用這件裝備! + + 皮甲 + 由鞣製過的怪物皮革所製成。不像布甲那麼輕便,但提供了更好的防護。 + + 法師長袍 + 穿上這件華麗長袍的法師可以施放熔岩術:視野中的所有敵人將陷入燃燒並無法動彈。 + 熔岩術 + 只有法師能使用這件裝備! + + 鎖甲 + 將金屬環鏈結在一起所製成的護甲,堅硬又容易活動。 + + 板甲 + 由大片金屬板相互接合製成的護甲,能夠提供無與倫比的保護,只要冒險者夠強壯而足以負荷那驚人的重量。 + + 盜賊外衣 + 穿上這件深色外衣的盜賊可以使出叫做「煙霧炸彈」(雖然其實沒有真的用上炸藥)的招數:使看得到他的敵人暫時失明並躍到一旁。 + 煙霧炸彈 + 只有盜賊能使用這件裝備! + 只能跳躍到視野中空著的地點 + 選擇要跳躍至的地點 + + 鱗甲 + 將金屬鱗片縫在皮背心上,成為一件靈活又有保護效果的護甲。 + + 戰士鎧甲套裝 + 這套鎧甲看起來很沉重,卻可以讓戰士朝目標區域使出英勇躍擊,震地擊昏所有附近的敵人。 + 英勇躍擊 + 只有戰士能使用這件裝備! + 選擇躍擊的方向 + + + + + 戀慕之%s + + 反熵之%s + + 自動修復之%s + + 彈力之%s + + 移形換位之%s + + 糾纏之%s + + 新陳代謝之%s + + 多重之%s + + 電壓之%s + + 惡臭之%s + + 黏滯之%s + 延時傷害 %d + 黏滯附魔 + 延時傷害(%d) + 黏滯附魔殺死了你... + + + + + 開啟 + + 鑰匙圈 + 這是個銅製鑰匙圈,讓你可以將鑰匙和其他物品分開收納。 + + 卷軸筒 + 你可以將任意數量的卷軸放入這個筒狀容器,節省背包空間並防止卷軸著火。 + + 種子袋 + 這個小絨布袋不論多少種子都能收納,非常方便。 + + 法杖皮套 + 這個修長的皮套是由某些奇特動物的皮所製成,可以緊密的收納最多 %d 支法杖。 + + + + + 乾糧 + 沒什麼特別的,肉乾、餅乾,諸如此類。 + 食用 + 這食物真好吃! + + 烤肉 + 一塊看起來還不賴的肉排。 + + 冷凍肉片 + 一塊冷凍生肉,食用的唯一方法是將它切片。這樣意外的還不錯吃。 + 你發現你的手隱形了! + 你覺得皮膚變得堅硬了! + 恢復了精神! + 你感覺好多了! + + 謎之肉 + 吃了風險自負! + 好燙啊! + 你的腿沒感覺了! + 你覺得不太舒服。 + 你吃飽了。 + 這食物吃起來...怪怪的。 + + 不划算的乾糧 + 看起來跟一般乾糧一樣,但比較小。 + 這食物吃起來還不錯。 + + 餡餅 + 有傳統牛肉與馬鈴薯餡料的道地肉餡餅。 + + + + + 金鑰匙 + 這把金鑰匙上的刻槽小而精巧。也許可以用來開啟某些寶箱鎖? + + 鐵鑰匙 + 這把古老鐵鑰匙上的刻槽已經很陳舊了;它的皮繫繩歷經歲月風霜。可以用來開什麼門呢? + 在第 %d 層找到的鑰匙 + + 骷髏鑰匙 + 這把鑰匙看起來很重要:頭部做成骷髏的造型。也許可以開啟某些重要的門。 + + + + + %s藥劑 + 這個瓶子裡裝著晃漾的%s液體。不知道喝下或投擲出去會有什麼效果? + 飲用 + 有害的藥劑! + 有益的藥劑 + 是的,我知道我在做什麼 + 不,我改變心意了 + 確定要喝下它嗎?在大多情況下你應該要把這種藥劑扔向敵人。 + 確定要扔出去嗎?在大多情況下把它喝下去比較合理。 + 瓶子碎了,%s液體無害的四處飛濺。 + + 青綠色 + 深紅色 + 天藍色 + 翡翠色 + 金色 + 洋紅色 + 深灰色 + 象牙色 + 琥珀色 + 褐色 + 靛藍色 + 銀色 + + + 經驗值藥劑 + 無數戰鬥累積下來的經驗值濃縮成液體的形式,喝下一口就能立即提升你的經驗值等級。 + + 霜凍藥劑 + 當暴露在空氣中,這種化學物質會蒸散成霜凍雲霧,讓接觸到的任何生物被凍結在原地,無法移動及採取行動 + + 治癒藥劑 + 一種讓你立即回復所有生命並治癒狀態的靈藥。 + 你的傷勢完全恢復了。 + + 隱形藥劑 + 喝下此藥劑會讓你暫時隱形,在隱形的期間敵人無法看到你。攻擊敵人以及在敵人面前使用法杖或卷軸會讓效果解除。 + 你發現你的手隱形了! + + 浮空藥劑 + 喝下這種奇異的液體會讓你浮在空中,能夠毫不費力的飄移過陷阱。但火焰和氣體瀰漫在空氣中,因此無法從空中通過而不受影響。 + 你飄浮在空中! + + 液態火焰藥劑 + 瓶子裡裝著不穩定的複合物,一旦暴露在空氣中便會猛烈爆發並燃燒。 + + 強健藥劑 + 這強大的液體會進入你的肌肉,永久提升 1 點力量及 5 點生命。 + 新獲得的力量湧入你的身體。 + +1 str, +5 ht + + 心靈視界藥劑 + 喝下之後你的心靈會感應到遠方生物的精神意象,讓你能隔牆感知到生物的存在。這種藥劑也能讓你透視附近的牆壁和門。 + 你能以某種方式感覺到其他生物心智的存在! + 不知怎地你知道這層樓目前只有你一個人。 + + 麻痺毒氣藥劑 + 一旦暴露在空氣中,瓶中的液體會蒸散成讓人麻痺的黃色霧氣。吸入這種氣體將會立刻麻痺,在霧氣消散後的一段時間內動彈不得。這個道具可以扔向遠方的敵人,用氣體的效果逮住他們。 + + 淨化藥劑 + 這種試劑會迅速中和範圍中的所有有害氣體。喝下它則會讓你暫時免疫這些氣體。 + 你感覺到空氣中有種不尋常的清新。 + 你聞不到任何氣味了! + + 力量藥劑 + 這種強效的液體會進入你的肌肉,永久提升 1 點力量。 + 新獲得的力量湧入你的身體。 + +1 str + + 毒氣藥劑 + 拔開塞子或打破這種加壓的玻璃瓶會使內容物爆開成致命的綠色毒霧。你應該會想將此藥劑扔向遠方的敵人而不是在手上打開。 + + + + + 屍塵 + 屍塵球在外觀上與一般的粉塵球沒什麼不同。但不知怎地你知道越快擺脫它越好。 + + 暗金礦 + 這種金屬名稱中的暗並不是因為顏色(它與一般的黃金沒什麼不同),而是因為它會在日光下融化,讓它在地表上毫無用處。 + + 乾燥玫瑰 + 這朵玫瑰很久以前就乾枯了,但不知為何還保有所有的花瓣。 + + 矮人令牌 + 許多矮人及某些他們的大型造物攜帶著這些用途不明的小金屬片。也許是首飾,也可能是某種身分徽記。畢竟矮人是很奇怪的種族。 + + 幻影魚 + 食用 + 在空氣中勉強才能看清這半透明的小魚,在水中就變成隱形的了。 + 你發現你的手隱形了! + + 十字鎬 + 這是用來敲碎岩石的堅固大型工具。也許可以當作武器。 + 採礦 + 附近沒有暗金礦脈可以開採。 + + 巨鼠頭骨 + 這可以當作很不錯的狩獵戰利品,但掛在牆上聞起來實在太糟了。 + + + + + %s戒指 + 這只金屬環上裝飾著一顆大大的%s,在黑暗中閃閃發光。誰知道戴上它會有什麼效果? + 損壞的%s + 你現在對你的%1$s已經了解到足以辨識它了。它是%2$s。 + 取下一只戒指 + 同時只能佩戴兩只戒指。先取下目前佩戴的其中一只。 + + 鑽石 + 蛋白石 + 石榴石 + 紅寶石 + 紫水晶 + 黃玉 + 縞瑪瑙 + 碧璽 + 綠寶石 + 藍寶石 + 水晶 + 瑪瑙 + + 你的%s帶著痛楚地束緊你的手指。 + %1$s\n\n%2$s在你的手指上%3$s。 + ,由於被施加了詛咒,你無法脫下它。 + %1$s\n\n你能感受到這只%2$s中潛伏著惡意的魔法氣息。 + 這是一只%s + + 精準之戒 + 這只戒指能增加你擊中敵人的機率。 + + 探察之戒 + 這只戒指的人能讓配戴的人注意到隱藏的秘密──陷阱和暗門──而不用花時間搜索。劣化的探察之戒會讓你的感知退化,即使主動搜索也不容易發現秘密。 + + 元素之戒 + 這只戒指提供對各種元素的防護,像是火焰、雷電、氣體等等。也會減短負面狀態的持續時間。 + + 閃躲之戒 + 這只戒指能增加你閃躲敵人攻擊的機率。 + + 無賴之戒 + 這只戒指事實上不會提供任何魔法效果,但它向商店老闆和攤販表明戒指的擁有者是盜賊公會的成員,通常對方都會樂意提供優惠來換得暫時平安無事的保證。升級這只戒指不會有任何額外效果。 + + 急速之戒 + 這只戒指加快配戴者的時間流動,讓所有的行動都加快一些。 + + 草藥學之戒 + 這只戒指能增加你踩過草叢時得到露水和種子的機率。 + + 癒合之戒 + 這只戒指能增進身體的再生機能,加快損失生命值的回復速度。劣化的戒指則會減慢甚至停止自然回復。 + + 強力之戒 + 你的法杖在這只戒指散發的能量場域中會變得更加強大。劣化的強力之戒則會削弱你的法杖能力。 + + 飽足之戒 + 戴上這只戒指能夠在不吃食物的情況下撐更久。劣化的飽足之戒則會有相反的效果。 + + 暗影之戒 + 戴上這只戒指後敵人將較不容易發現你。劣化的暗影之戒則會驚動本來可能未注意到你的敵人。 + + 荊棘之戒 + 雖然這只戒指並不是真的有荊棘,敵人攻擊你時卻會受到自己所造成攻擊的一部份傷害。升級這只戒指不會有任何額外效果。 + + + + + 「%s」卷軸 + 這卷羊皮紙上記載著難解的文字,並施加了%s符文的標題。不知道若大聲唸誦後會有什麼效果? + 閱讀 + 你無法在失明的期間閱讀卷軸 + + 考南 + 索維洛 + 拉古茲 + 盈微 + 跡伏 + 萊多 + 依薩斯 + 曼納孜 + 饒迪希 + 柏卡能 + 奧道爾 + 提瓦奇 + + + 選擇物品 + 確定要取消使用卷軸嗎?它仍會被消耗掉。 + 是的,我確定。 + 不,我改變心意了 + + 挑釁卷軸 + 大聲唸誦出來後,這個卷軸會釋放出挑釁的怒號,驚醒所有怪物並使牠們得知唸誦者的位置。 + 卷軸發出了挑釁的怒號,迴盪在整個地城之中! + + 辨識卷軸 + 永久性揭開一件物品的所有秘密。 + 選擇要辨識的物品 + 這是%s + + 催眠曲卷軸 + 和緩的旋律將使你視野中的怪物陷入沉睡,讓你有機會逃脫或進行突襲。 + 卷軸發出了和緩的旋律。 + 卷軸發出了和緩的旋律,%s睡著了! + 卷軸發出了和緩的旋律,怪物們睡著了! + + 魔法定位卷軸 + 當此卷軸被唸誦時,一個清晰透徹的影像將被刻入你的記憶之中,讓你精確得知此層樓的構圖並揭示所有的隱藏秘密。物品和怪物的位置仍無法得知。 + 你現在得知樓層構圖了。 + + 鏡像卷軸 + 此卷軸上的法術會製造出一個與唸誦者相同的幻影,此幻影會追逐敵人。 + + 意念波爆卷軸 + 此卷軸含有破壞性的能量,會對視野中的所有生物造成巨大的意念波傷害。隨之而來的閃光會讓範圍內的所有人暫時失明,包括卷軸唸誦者本身。 + + 充能卷軸 + 被封存在此羊皮卷軸中的純粹魔力,在釋放時會將唸誦者所有的法杖充滿能量。 + 能量湧入你的背包,為你的法杖充能。 + 能量湧入你的背包,為你的所有法杖充能。 + 能量湧入你的背包,但什麼也沒發生。 + + 除咒卷軸 + 此卷軸上的法術會立即解除唸誦者武器、防具、戒指及所有攜帶物品上所有本來可能無法移除的邪惡魔咒, + 你的背包發出了淨化之光,邪惡的能量隨之散失。 + 你的背包發出了淨化之光,但什麼也沒發生。 + + 傳送卷軸 + 此羊皮紙上的法術會將唸誦者瞬間傳送到此地城樓層的隨機處,可以用來逃脫危險的情境,但運氣不佳的唸誦者可能會發現自己處境更為驚險。 + 眨眼之間你被傳送到了此樓層的另一個地方。 + 這地方有強大的魔法場域讓你無法傳送! + + 驚懼卷軸 + 剎那的紅光讓你視野中的所有怪物陷入恐懼並轉身逃跑。攻擊逃跑中的敵人會解除此效果。 + 卷軸發出鮮亮的紅色閃光。 + 卷軸發出鮮亮的紅色閃光,%s逃跑了! + 卷軸發出鮮亮的紅色閃光,怪物們逃跑了! + + 升級卷軸 + 此卷軸可升級一件物品,增進它的品質。法杖會強化力量和充能數量;武器會造成更多傷害或更容易擊中目標;防具會擋下更多攻擊;戒指對配戴者的影響會增強。武器和防具使用所需的力量會減少,且物品上的任何詛咒將被解除。 + 選擇要升級的物品 + 你的%s看起來真的更棒了 + + 附魔卷軸 + 此卷軸能為武器或防具附上一種隨機附魔,施予它特殊的能力。 + 選擇˙一件可附魔的物品 + 你的%s在黑暗中發出光芒 + + 殲滅卷軸 + @string/Scroll_ACRead + 唸誦此卷軸來釋放地城之靈的憤怒,殺光此樓層中的所有一切。呃,幾乎所有一切。某些較強大的怪物可能不會受影響。 + @string/Scroll_Blinded + + + + + %s法杖 + 發射 + 這把纖細的%s法杖摸起來溫溫的。不知道使用的話會有什麼效果? + 當這把法杖作為近戰武器使用時,平均每下造成 %d 點傷害。 + 你可以把這把法杖當作近戰武器使用。 + 你的法杖嘶嘶作響;一定是能量用盡了。 + 不能以自己為目標 + 選擇發射的方向 + 你現在對你的%s已經夠了解了。 + + 冬青 + 紫杉木 + 黑檀木 + 櫻木 + 柚木 + 山梨木 + 柳木 + 紅木 + + 紫心木 + 橡木 + 樺木 + + + 狂亂法杖 + 這把法杖發出的紫光會讓目標狂亂並隨機攻擊身邊的生物。 + 什麼也沒發生 + + 崩落法杖 + 當這把法杖向牆面(或任何其他固體障礙物)發射時,會造成石塊的崩落,讓影響範圍內的生物受到傷害並擊暈。 + 你用崩落法杖把自己殺死了... + + 瞬移法杖 + 這把法杖可讓你往指定的方向瞬移,怪物和無生命的障礙物會阻礙移動。 + + 瓦解法杖 + 這把法杖會放射出破壞性能量的光束,穿透所有路徑上的怪物。擊中越多目標,對每個單位的傷害越大。 + + 火球法杖 + 這把法杖可釋放出魔法烈焰,會點燃可燃的地形,且傷害並焚燒擊中的生物。 + 你用火球法杖把自己殺死了... + + 羊群法杖 + 輕揮這把法杖就能召喚魔法羊群,製造臨時路障。 + + 這是一隻魔法羊。魔法點在哪呢?在於你殺不死牠。牠會一直站在原地直到消失,而在這段期間內就只是兩眼發直地不停反芻。 + + 咩! + 咩? + 咩。 + 咩... + 咪... + 咩啊... + + + 雷電法杖 + 這把法杖可向前方召出致命的雷電弧束,會對站在一起的怪物們同時造成傷害。 + 你用雷電法杖把自己殺死了... + + 魔法箭法杖 + 這把法杖可發射純魔法能量飛彈,對目標生物造成中度傷害。 + 分解 + 你用魔法箭法杖把自己殺死了... + 選擇要升級的法杖 + 你分解了魔法箭法杖,並使用它的精華來為%s升級。 + + 劇毒法杖 + 這把扭曲木杖的惡毒射線會使目標染上致命的劇毒。中毒的生物會受到持續性的傷害,直到效果結束。效果持續的時間隨著法杖的等級提升。 + 什麼也沒發生 + + 萌生法杖 + 「有生命終止總有新生命萌芽...永恆的循環生生不息!」 + 什麼也沒發生 + + 緩速法杖 + 這把法杖可使怪物的移動和攻擊速度減半,直到效果結束 + 什麼也沒發生 + + 遙動法杖 + 這把實用的法杖可以用來拿取遠處的東西,以及與敵人交換位置。從法杖發出的魔力波動可以觸發陷阱、踏平草木、打開關著的門及關上打開的門。 + 你使用魔力將%s傳送到背包之中 + + 傳送法杖 + 這把法杖的放射能量會不問意願地將一隻怪物傳送到該樓層的隨機一處。 + %1$s將%2$s傳送到某處了 + 什麼也沒發生 + + + + + 你現在對你的%1$s已經了解到足以辨識它了。它是%2$s。 + 在不同類型魔法的交互作用下,這件武器上的附魔失效了! + %1$s:%2$d + 損壞的%1$s:%2$d + + + + + 殘酷之%s + + 熾燄之%s + + 詭譎之%s + + 無常之%s + + 吸血之%s + + 幸運之%s + + 擊倒之%s + + 劇毒之%s + + 雷擊之%s + + 酷寒之%s + + 淬鍊之%s + + + + + 這把%1$s%2$s %3$d 階近戰武器。 + + 是升級過的 + 是劣化的 + 是損壞的 + 每次攻擊的平均傷害是 %d 點。 + 其一般平均傷害是每下 %1$d 點,通常需要 %2$d 點力量來使用。 + 這件武器對你來說可能太重了。 + 這是一件%s的武器。 + 快速 + 慢速 + + + 精準 + 不精準 + 它已經被調整過而速度加快了。 + 它已經被調整過而更加精準了。 + 上面已有附魔。 + 由於你的力量不足,使用這把%s攻擊的命中率和速度會下降。 + 由於你的力量比武器需求更高,使用這把%s攻擊的傷害會增加。 + 你的%1$s已裝備就緒%2$s。 + ,由於被施加了詛咒,你無法放開它。 + 你能感受到此%s上潛伏著惡意的魔法氣息。 + + 戰斧 + 這把戰斧的巨大鋼頭為每一擊都施加可觀的力道。 + + 匕首 + 一把簡單的鐵匕首,木製把柄磨損的很厲害。 + + 大刀 + 尾端裝有刀鋒的長柄武器。 + + 手指虎 + 一件做成適於指關節形狀的鐵器。 + + 長劍 + 這把碩長鋒刃每次劈砍所施加的力道會造成嚴重傷害。 + + 鈍錘 + 這把武器的鐵製頭部可造成紮實的傷害。 + + 長棍 + 硬木質的棍棒,尾端包著鐵。 + + 短劍 + 它的確是滿短的,只比匕首長了幾吋。 + 再鑄 + 選擇要升級的武器 + 你再鑄了短劍來為%s升級。 + 不能用這種方式升級迴力鏢 + + 長矛 + 加裝著銳利鐵矛頭的細長木桿。 + + + 這把鋒利的長刃可靠地閃耀著。 + + 戰錘 + 很少有怪物能承受這巨大鉛鋼塊的摧毀性重擊,但只有最強壯的冒險者能有效使用它。 + + + + + 遠程武器 + 是的,我知道我在做什麼 + 不,我改變心意了 + 真的要把它當作近戰武器來裝備嗎? + \n\n這把武器的平均傷害是每下 %d 點。 + 由於你的力量不足,使用這把%s攻擊的命中率和速度會下降。 + 由於你的力量比武器需求更高,使用這把%s攻擊的傷害會增加。 + \n\n你的%s已裝備就緒。 + + 迴力鏢 + 向敵人擲出後,這把扁平的弧形木製投擲武器會飛回投擲者的手中。 + + 毒飛鏢 + 這些邪惡的小飛鏢給不了太多傷害,但會讓目標麻痺而在一段時間內無助地無法動彈。 + + 飛鏢 + 這些簡單的金屬銳物被加了重量以飛射得更為精準,並在拂手之間釘穿獵物。 + + 燃彈飛鏢 + 這些飛鏢上的尖刺設計成會釘在目標身上不放,同時綁在上頭的易爆物會爆燃成熊熊火焰。 + + 標槍 + 金屬桿身加了重,確保飛行時尖端保持向前。 + + 手裡箭 + 星形的金屬刃片擊中目標時會造成可觀的傷害。可以用極快的速度擲出。 + + 飛斧 + 這種投擲斧不是很重,但還是需要很大的力氣才能有效使用。 + + + + + 令人昏眩的氣體正瀰漫在此處。 + + 烈焰正在此處肆虐。 + + 一道道的光穿透了地下花園的陰暗。 + + 令人麻痺的氣體正瀰漫在此處。 + + 「你的祭品還可以...」 + 「你的祭品毫無價值...」 + 「你的祭品還可以...你也是!」 + 獻祭之火在此燃燒。所有觸碰到此火焰的生物都會被標記為獻給地城之靈的祭品。 + 被標記為祭品 + + 微呈綠色的毒氣正瀰漫在此處。 + 你死於毒氣了.. + + 啜飲一口後,你感到知識注入了腦海。現在你對自己裝備的物品瞭若指掌,也能感應到此樓層所有的物品,並知曉其中所有的秘密。 + 這口井中的水散發著智識的力量。啜飲一口來解開裝備物品的所有秘密。 + + 這口井中的水散發著健康的力量。啜飲一口來治癒傷口並恢復飽足。 + 啜飲一口後,你感到傷口完全治癒了。 + + 這口井中的水散發著轉化的力量。將一件物品扔入井中來讓它轉變成其他東西。 + + 這裡的所有東西都覆蓋著厚厚的蜘蛛網。 + + + + + 狂亂 + + 樹皮術 + + 流血 + 你流血而死了... + + 失明 + + 燃燒 + %s著火了! + 你被燒死了... + + 被魅惑 + + 連擊 + %d 連擊! + + 重傷 + + 凍結 + + 狂怒 + + 免疫氣體 + + 你餓了。 + 你快餓死了! + 你餓死了... + 飢餓 + 快餓死了 + + 隱形 + + 浮空 + + 照明 + + 心靈視界 + + 腐蝕黏液 + %s殺死了你... + + 麻痺 + + 中毒 + 你中毒而死了... + + 被怒氣沖昏了頭 + + 被地縛 + + 影遁 + + 緩速 + + 瞄準完成 + + 頭昏 + + 虛弱 + + + + + 背包 + + + + + 實際說明即將推出! + 你聽到有東西在遠處死去 + \u0020的回音 + %1$s:「%2$s」 + %s睡著了 + %s徘徊著 + %s正在尋找獵物 + %s正在逃跑 + %s處於被動狀態 + + 強酸毒蠍 + + 白化鼠 + + 瘋狂土匪 + + 吸血蝙蝠 + 這些敏捷又頑強的穴頂生物透過每次成功攻擊來補充生命,可以擊敗比體型比牠們大得多的對手。 + 迴避 + + 豺狼蠻人 + 蠻人是豺狼人中最大、最壯又最強悍的。當嚴重受傷時,牠們會陷入暴怒而對敵人造成更大的傷害。 + %s暴怒了! + 暴怒 + + 下水道螃蟹 + 這些大型的螃蟹位於下水道食物鏈的頂端。牠們非常迅速,而厚實的外殼能夠抵擋沉重的打擊。 + 格檔 + + 詛咒的化身 + 這種怪物和哀傷鬼魂很類似,但有黑暗盤據著。它的臉上帶著絕望的表情。 + + DM-300 + DM-350 + 這台機器是矮人在幾世紀前製造的。後來矮人開始用巨石像、元素生物甚至惡魔來取代機器,最終導致其文明的滅亡。DM-300 和類似的機器們通常被用來建築和採礦,並在某些情況下用於城市防禦。 + DM-300 自行維修了! + 任務失敗。關機中。 + 發現未經授權的人員。 + + 火元素 + 遊蕩的火元素是召喚強大實體時的副產物。它們天性太混亂,就算是最強的惡魔術者也無法控制。 + + 邪惡之眼 + 這種惡魔的另一個名字是「憎恨之球」,因為當看到敵人,它會不顧一切的使用死亡凝視,經常忽略同伴並傷害到它們。 + %s的死亡凝視殺死了你... + + 惡臭鼠 + 這隻有袋鼠類比一般的大隻多了,並帶著一團臭氣。 + 迴避 + + 豺狼人斥候 + 豺狼人是像豺狼的人形生物。牠們住在下水道和地城之中,不時冒險到地表進行掠奪。豺狼人斥候是群體中的一般成員,不如蠻人強壯也不如薩滿聰明。 + + 巨石像 + 矮人嘗試將機械知識與新發現的元素力量結合。他們使用了大地精魂作為巨石像機械軀體的「靈魂」,據信這是最容易控制的精魂。儘管如此,儀式中只要出一點微小的差錯就會造成大爆炸。 + 抵擋 + + 黏膠怪 + 黏膠怪的後代 + 人們對黏膠怪知道的不多。它很有可能根本不是一種生物,而是擁有基礎意志的下水道物質聚合體。 + 黏膠怪鼓起來了! + 咕嚕... 咕嚕... + 咕嚕─咕嚕! + !!! + + 矮人國王 + 不死的矮人國王 + 矮人最後的國王以其對操控生死的深刻瞭解而聞名。他說服了宮廷的成員參加一場原本應該讓他們青春永駐的儀式。但最後他是唯一得到這個結果的人──還附帶了一隊不死大軍。 + 格檔 + 你殺不死我的,%s... 我是... 不朽的... + 起來吧,奴隸們! + 你竟敢! + 不死矮人 + 這些依矮人國王意志而起身的不死矮人曾是他的宮廷成員。他們的外表像是長了驚人濃密鬍鬚的骷髏。 + 抵擋 + + 寶箱怪 + 寶箱怪一種能夠隨意變形的魔法生物。在地城中幾乎總是選擇變成寶箱,因為它們深知如何引誘冒險者。 + + 矮人武僧 + 這些武僧都是狂熱分子,致力於保護城市的秘密不為外人所知。他們不使用任何防具或武器,全憑拳腳功夫。 + 格檔 + %1$s擊落了你手上的%2$s! + + 巨大食人魚 + 這些肉食魚類並不是地下水池的原生棲息生物。牠們是被特地培育來保護水底的寶藏庫的。 + + 有袋鼠類 + 有袋鼠類是具有攻擊性但相對較弱的下水道生物。牠們只在數量多時比較危險。 + + 毒蠍 + 這些巨大的類節肢惡魔生物會用各種方法避免近戰,而在遠方發射讓人重傷的鋸齒尖刺。 + + 資深武僧 + + 豺狼人薩滿 + 最聰明的豺狼人能夠掌握薩滿法術。豺狼人薩滿喜歡運用戰鬥法術來彌補力量的不足,也毫不遲疑地使用在質疑他們部族地位的人身上。 + %s的閃電箭殺死了你... + + 持盾豺狼蠻人 + 抵擋 + + 骷髏 + 骷髏是由倒楣的冒險者和地城住民的屍骨組成的,而從下部樓層放射的邪惡魔法使其活動起來。當它們承受一定的傷害後,會瓦解成爆炸的骨頭。 + 抵擋 + 你被爆炸的骨頭殺死了... + + 洞穴織網者 + 這些綠色的毛茸茸洞穴蜘蛛盡量避免直接作戰,而是在遠方等著犧牲者上門,困在蜘蛛網中後用帶毒的啃咬讓他們緩慢地死去。 + + 活動雕像 + 你可能覺得這只是地城裡又一個醜陋的雕像,但它發著紅光的雙眼暴露了身分。雖然雕像本身是石頭做的,但它握著的_%s_看起來是真的。 + + 魅魔 + 魅魔是看起來像性感女性(微哥德風格)的惡魔。它能用魔法魅惑英雄,在效果結束前對方將無法進行任何攻擊。 + + 蒼蠅群 + 這群致命的蒼蠅憤怒地嗡鳴著。每次非魔法攻擊都會把牠們分成兩群較小但一樣危險的群體。 + 迴避 + + 天狗 + 天狗的回憶 + 天狗是古老刺客家族的成員,該家族就叫做天狗。這些刺客以大量使用手裡箭和陷阱而聞名。 + 終於自由了... + 抓到你了,%s! + + 瘋狂盜賊 + 地城較深的樓層一直都是各種罪犯的藏身之處,但不是所有人都能在這麼長時間不見天日的情況下保持腦袋清醒。這些瘋狂的盜賊和土匪早就忘了自己是誰以及為何而偷竊。 + %1$s從你身上偷走了%2$s! + \n\n%1$s正拿著_%2$s_。很明顯是偷來的。 + + 矮人術士 + 當矮人的注意力從工程技術轉向祕法,術士便開始在城市中掌權。他們一開始使用元素魔法,但很快就轉移到惡魔法術和亡靈巫術。 + %s的暗影箭殺死了你... + + 怨靈 + 怨靈是一心想復仇的罪人靈魂,因為它的墳墓或墓碑被驚擾了。由於形體虛渺,很難用普通武器擊中。 + 迴避 + + 猶格─殆瓦 + 猶格─殆瓦的迴像 + 猶格─殆瓦是一名古代神祇,來自混沌界域的強大實體。在一個世紀前,古代矮人勉強戰勝了祂的惡魔大軍,卻無法殺死古神本身。他們只能將祂囚禁在城市下方的大殿,相信祂已經太虛弱而無法再次作亂。 + ... + 希望只是一種幻覺... + 腐敗之拳 + 灼燒之拳 + 神之蛆 + + + + + 金蜜蜂 + 金蜜蜂雖然身軀嬌小,卻會兇悍地保衛牠們的主人。不過牠們沒辦法活太久。 + %s正在徘徊 + + 巨魔鐵匠 + 這個巨魔鐵匠看起來就跟所有巨魔一樣:又高又瘦,皮膚的顏色和質地都像岩石一樣。巨魔鐵匠正在用不合比例的小工具笨拙地修理東西。 + 嗨人類!想有點用處嗎,嗯?拿著這把十字鎬去幫我挖點_暗金礦_來吧,_15 個_應該就夠了。什麼意思,我要怎麼回報?你這貪婪的...\n好,好,我沒錢給你,但我可以幫你做點鐵工。你還真幸運,我是這裡唯一的鐵匠。 + 嗨人類!想有點用處嗎,嗯?拿著這把十字鎬去幫我_殺隻蝙蝠_吧,我需要上面沾的牠的血。什麼意思,我要怎麼回報?你這貪婪的...\n好,好,我沒錢給你,但我可以幫你做點鐵工。你還真幸運,我是這裡唯一的鐵匠。 + 你在耍我嗎?我的十字鎬呢? + 暗金礦。15 個。說真的,有這麼難嗎? + 我說過我需要十字鎬上的蝙蝠血。快快! + 哦,你回來了... 晚到總比沒到好。 + 我很忙。滾開! + 你的%s看起來真的更棒了 + 選取兩件不同的物品,而不是同樣的物品兩次! + 選取兩件相同類型的物品! + 我得知道自己在處理什麼東西,先辨識它們! + 我不處理被詛咒的物品! + 這根本是垃圾,品質太爛了! + 我無法再鑄這些物品! + + 哀傷鬼魂 + 這個鬼魂幾乎看不見。就像是微弱的模糊光點加上一張哀傷的臉。 + 迴避 + 你好冒險者...我曾經跟你一樣──強壯又自信...而現在我死了...卻無法離開這個地方...除非我拿回我的_乾燥玫瑰_...它對我很重要...某個怪物把它從我的屍體上偷走了... + 拜託... 幫幫我... _找到那朵玫瑰_... + 對!對!!! 就是它!請把它給我!你可以拿走其中一個物品,也許對你的旅途會有幫助... + 你好冒險者...我曾經跟你一樣──強壯又自信...而現在我死了...卻無法離開這個地方...除非我報了仇...殺了那隻_惡臭鼠_,就是牠奪走了我的生命... + 拜託... 幫幫我... _殺了那討厭的東西_... + 太好了!那醜陋的怪物被擊敗了,我終於可以安息了... 請拿走其中一個物品,也許對你的旅途會有幫助... + 你好冒險者...我曾經跟你一樣──強壯又自信...而現在我死了...卻無法離開這個地方,因為我被可怕的詛咒給束縛住了... 拜託... 幫幫我... _破除這個詛咒_... + 謝謝你,%s!詛咒破除了,我終於可以安息了... 請拿走其中一個物品,也許對你的旅途會有幫助... + 好,我會幫你 + 不,我幫不了你 + + 野心勃勃的小鬼 + 小鬼是比較低階的惡魔。它們的力量和魔法天賦並不出色,但它們相當聰明且善於交涉。許多小鬼比較喜歡跟非惡魔族群生活在一起。 + 迴避 + 你是冒險者嗎?我最喜歡冒險者了!想殺什麼的時候靠他們就對了,我說的沒錯吧?有賞金,當然囉 ;)\n就我而言要殺的是_巨石像_。你知道,我正準備在這裡做些小生意,但這些愚蠢的巨石像對我的生意不利!要跟這些遊蕩的石塊談判實在有夠難,去死吧!所以拜託了,殺掉... 我看_6 隻_好了,獎賞就是你的了。 + 你的巨石像獵殺進行得如何? + 你是冒險者嗎?我最喜歡冒險者了!想殺什麼的時候靠他們就對了,我說的沒錯吧?有賞金,當然囉 ;)\n就我而言要殺的是_武僧_。你知道,我正準備在這裡做些小生意,但這些瘋子自己什麼都不買,還會嚇走其他客人。所以拜託了,殺掉... 我看_8 個_好了,獎賞就是你的了。 + 哦,你還活著!我就知道你的功夫比較厲害 ;) 別忘了拿走這些武僧的令牌。 + 再見囉,%s! + 欸,%s! + + 野心勃勃的小鬼 + 小鬼是比較低階的惡魔。它們的力量和魔法天賦並不出色,但它們相當聰明且善於交涉。許多小鬼比較喜歡跟非惡魔族群生活和做生意。 + 哈囉,朋友! + + 鏡像 + 這個鏡像的外觀跟你很像,但比較蒼白並微微地抽搐著。 + + 鼠王 + 這隻老鼠比一般的有袋鼠類大了點,頭上還戴著小小的王冠。 + 我沒在睡覺! + 什麼事?我沒空理會這種沒意義的事。我的王國可不會統治自己啊! + + 店老闆 + 這個矮胖的傢伙看起來比較適合在大城市商業區出現,而不是地城。但他的價格解釋了為何選擇在這裡做生意。 + 選擇販售的道具 + + 老製杖師 + 這位年老但硬朗的紳士帶著有點困惑的表情。他正受到一個魔法盾的保護。 + 吸收 + 哦,在這種地方遇上一位體面的人真讓人驚喜!我是來這裡尋找一種稀有材料的──_墮落之果的種子_。身為一位魔法師,我可以從怪物手中保護自己,但一下子就迷路了,真丟臉。也許你能幫助我?我很樂意用其中一把最好的法杖來回報你。 + 有找到_墮落之果的種子_嗎,%s?沒關係,我不急。 + 哦,在這種地方遇上一位體面的人真讓人驚喜!我是來這裡尋找一種稀有材料的──_屍塵_。它可以從骨骸上收集到,而這個地城中有大量這種東西。身為一位魔法師,我可以從怪物手中保護自己,但一下子就迷路了,真丟臉。也許你能幫助我?我很樂意用其中一把最好的法杖來回報你。 + 有找到_屍塵_嗎,%s?骨骸堆是最明顯的搜尋處。 + 哦,在這種地方遇上一位體面的人真讓人驚喜!我是來這裡尋找一種稀有材料的──_幻影魚_。它們可以用徒手抓住,但在水中非常不容易注意到它們。身為一位魔法師,我可以從怪物手中保護自己,但一下子就迷路了,真丟臉。也許你能幫助我?我很樂意用其中一把最好的法杖來回報你。 + 有找到_幻影魚_嗎,%s?你也許可以在某個水池中找找看。 + + + + + 觸動到一塊隱藏的壓板了! + 深淵 + 地板 + + + 牆壁 + 關著的門 + 開啟的門 + 樓層入口 + 樓層出口 + 灰燼 + 鎖上的門 + 台座 + 路障 + 草叢 + 鎖上的樓層出口 + 解鎖的樓層出口 + 標牌 + + 空井 + 雕像 + 毒氣陷阱 + 火焰陷阱 + 麻痺毒氣陷阱 + 毒鏢陷阱 + 警報陷阱 + 閃電陷阱 + 夾箝陷阱 + 召喚陷阱 + 觸發過的陷阱 + 書架 + 煉金釜 + \?\?\? + 看不到它的底。 + 要是著火了,走進水裡可以滅火。 + 通往上一樓層的階梯。 + 通往下一樓層的階梯。 + 灰燼覆滿地面。 + 茂密的植物擋住了視線。 + 這扇門鎖住了,你需要對應的鑰匙來打開它。 + 沉重的鐵條封住了往下的階梯。 + 這木頭路障設置得很堅固,但已隨著歲月變得乾燥。也許可以燒? + 從這裡看不到上面的字。 + 踏上隱藏的壓板會啟動陷阱。 + 這個陷阱已經觸發過,不具危險性了。 + 有人想要裝飾這個地方,但顯然失敗了。 + 扔進一些種子來調配藥劑。 + 這口井已經乾涸了。 + + 螢光苔 + 螢光蘑菇 + 冰冷的水。 + 這把梯子通往上方的樓層。 + 這把梯子通往下方的樓層。 + 巨大的蘑菇擋住了視線。 + 牆上可以看到某種礦脈。是金礦嗎? + 誰會在洞穴裡需要書架呢? + + 帶著可疑顏色的水 + 高大的盛開花朵 + 通往上一樓層的坡道。 + 通往下一樓層的坡道。 + 這裡少了一些地磚。 + 地上鋪著厚厚的地毯。 + 這個雕像刻劃著英雄站姿的矮人。 + 一排排不同領域的書籍放滿了書架。 + + 冷卻的岩漿 + 灰燼苔 + 灰燼菇 + 柱子 + 看起來像岩漿不過已經冷卻了,碰了應該沒事。 + 這柱子是用真正的人形頭顱做成的。讚啦。 + 用古代語言寫成的書籍鬱積在書架上。 + + 冷卻的岩漿 + 灰燼苔 + 灰燼菇 + 柱子 + 看起來像岩漿不過已經冷卻了,碰了應該沒事。 + 這柱子是用真正的人形頭顱做成的。讚啦。 + + 帶著可疑顏色的水 + 高大的盛開花朵 + 通往上一樓層的斜坡。 + 通往地獄的坡道。 + 這裡少了一些地磚。 + 地上鋪著厚厚的地毯。 + + 暗沉又冰冷的水。 + 地板上有些舊血漬。 + 這可能是監獄圖書館的殘跡。也許可以燒? + + 混濁的水 + 潮濕的暗黃色苔癬覆蓋在地面上。 + 這個書架塞滿了廉價的垃圾書。也許可以燒? + + + + + 選擇要扔入的種子 + + 深淵 + 是的,我知道我在做什麼 + 不,我改變心意了 + 真的要跳進這深淵嗎?你可能會死去。 + 你摔死了... + + 你怎麼會在這裡?! + 你試圖閱讀標牌時,它燒成了一團綠色的火焰。 + + 別高估自己的力量,使用你可以掌握的武器和防具。 + 不是所有地城中的門都是放眼可見的。如果你被困住了,找找看隱藏的門。 + 記住,提升自己的力量不是能夠使用更好裝備的唯一方式。你也可以採取另一種方式,用升級卷軸降低力量需求。 + 你可以在地城深處樓層的商店花用金幣。第一間是在第六層。 + 小心黏膠怪! + 點陣商店──這裡有成功冒險必備的所有商品! + 盡快辨識你的藥劑和卷軸。別拖到你真正需要用到的時候。 + 肚子餓沒關係,但快餓死就有事了。 + 突襲擊中的機率較高。例如你可以在一扇關閉的門後面伏擊敵人,若你知道它正在接近。 + 別把天狗放出來! + 點陣商店。錢離手,活更久。 + 當你同時被許多怪物攻擊時,試著退到門後。 + 如果你著火了,無法在浮空時站進水中滅火。 + 同時持有超過一個生命之符是沒有意義的,因為復活時會失去它們。 + 危險!重型機械可能會造成受傷、肢體損害或死亡! + 點陣商店。讓你擁有更安全的地城生活。 + 升級一件有附魔的武器時,有一定機率會摧毀該附魔。 + 武器和防具損壞得比法杖和戒指快,但也有比較多方法能夠修復。 + 取得殲滅卷軸的唯一方式是由地城之靈將它作為禮物送給你。 + 在陛下面前不得攜帶武器! + 點陣商店。惡魔獵人可享有特別折扣! + + + + + + 陷阱發出了迴盪在整座地城中的刺耳聲響! + + 閃電陷阱 + 你被閃電陷阱殺死了... + + + + + 你不知道有什麼東西。 + 選擇一個區域來查看。 + + + + + + + 1 + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index b81e1a4a95..50af9a93a9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1,6 +1,1669 @@ + + Pixel Dungeon - Pixel Dungeon - + + + Play + Highscores + Badges + About + + Code & graphics: Watabou\nMusic: Cube_Code\n\nThis game is inspired by Brian Walker\'s Brogue. Try it on Windows, Mac OS or Linux - it\'s awesome! ;)\n\nPlease visit official website for additional info: + pixeldungeon.watabou.ru + Languages Create: rodriformiga + rodriformiga@gmail.com + Send E-Mail + + Top Rankings + Total games won/played:\u0020 + No games have been played yet. + No additional information + + Your Badges + + Load Game + New Game + Erase current game + Depth: %1$d, level: %2$d + Do you really want to start new game? + Your current game progress will be erased. + Yes, start new game + No, return to main menu + To unlock this character class, slay the 3rd boss with any other class + To unlock \"Challenges\", win the game with any character class. + + Descending... + Ascending... + Loading... + Resurrecting... + Returning... + Falling... + File not found. For some reason... + Something went wrong... + + Many heroes of all kinds ventured into the Dungeon before you. Some of them have returned with treasures and magical artifacts, most have never been heard of since. But none have succeeded in retrieving the Amulet of Yendor, which is told to be hidden in the depths of the Dungeon.\n\nYou consider yourself ready for the challenge, but most importantly, you feel that fortune smiles on you. It\'s time to start your own adventure! + + Let\'s call it a day + I\'m not done yet + You finally hold it in your hands, the Amulet of Yendor. Using its power you can take over the world or bring peace and prosperity to people or whatever. Anyway, your life will change forever and this game will end here. Or you can stay a mere mortal a little longer. + + Welcome to the level %d of Pixel Dungeon! + Welcome back to the level %d of Pixel Dungeon! + Be cautious, since the dungeon is even more dangerous at night! + Your steps echo across the dungeon. + You hear the water splashing around you. + The smell of vegetation is thick in the air. + The atmosphere hints that this floor hides many secrets. + + + + mob + %1$s hit %2$s + %s killed you... + %1$s defeated %2$s + %1$s %2$s your attack + %1$s %2$s %3$s\'s attack + The pain snapped %s out of paralysis + dodged + poisoned + amok + slowed + mind + vision + paralyzed + frightened + rooted + crippled + bleeding + dizzy + invisible + + you + One does not simply leave Pixel Dungeon. + level up! + Welcome to level %d! Now you are healthier and more focused. It\'s easier for you to hit enemies and dodge their attacks. + You now have %s + There is something else here + This chest is locked and you don\'t have matching key + You don\'t have a matching key + You noticed something + ... + search + You catch fire! + You are paralyzed! + You are poisoned! + Caustic ooze eats your flesh. Wash away it! + You can\'t move! + You feel weakened! + You are blinded! + You become furious! + furious + You are charmed! + You are crippled! + You are bleeding! + Everything is spinning around you! + + warrior + mage + rogue + huntress + + Warriors start with 11 points of Strength. + Warriors start with a unique short sword. This sword can be later \"reforged\" to upgrade another melee weapon. + Warriors are less proficient with missile weapons. + Any piece of food restores some health when eaten. + Potions of Strength are identified from the beginning. + + + Mages start with a unique Wand of Magic Missile. This wand can be later \"disenchanted\" to upgrade another wand. + Mages recharge their wands faster. + When eaten, any piece of food restores 1 charge for all wands in the inventory. + Mages can use wands as a melee weapon. + Scrolls of Identify are identified from the beginning. + + + Rogues start with a Ring of Shadows+1. + Rogues identify a type of a ring on equipping it. + Rogues are proficient with light armor, dodging better while wearing one. + Rogues are proficient in detecting hidden doors and traps. + Rogues can go without food longer. + Scrolls of Magic Mapping are identified from the beginning. + + + Huntresses start with 15 points of Health. + Huntresses start with a unique upgradeable boomerang. + Huntresses are proficient with missile weapons and get a damage bonus for excessive strength when using them. + Huntresses gain more health from dewdrops. + Huntresses sense neighboring monsters even if they are hidden behind obstacles. + + + gladiator + A successful attack with a melee weapon allows the _Gladiator_ to start a combo, in which every next successful hit inflicts more damage. + berserker + When severely wounded, the _Berserker_ enters a state of wild fury significantly increasing his damage output. + warlock + After killing an enemy the _Warlock_ consumes its soul. It heals his wounds and satisfies his hunger. + battlemage + When fighting with a wand in his hands, the _Battlemage_ inflicts additional damage depending on the current number of charges. Every successful hit restores 1 charge to this wand. + assassin + When performing a surprise attack, the _Assassin_ inflicts additional damage to his target. + freerunner + The _Freerunner_ can move almost twice faster, than most of the monsters. When he is running, the Freerunner is much harder to hit. For that he must be unencumbered and not starving. + sniper + _Snipers_ are able to detect weak points in an enemy\'s armor, effectively ignoring it when using a missile weapon. + warden + Having a strong connection with forces of nature gives _Wardens_ an ability to gather dewdrops and seeds from plants. Also trampling a high grass grants them a temporary armor buff. + + + + Badge endorsed: %s + New super badge: %s + New badge: %s + 10 enemies slain + 50 enemies slain + 150 enemies slain + 250 enemies slain + 100 gold collected + 500 gold collected + 2500 gold collected + 7500 gold collected + Level 6 reached + Level 12 reached + Level 18 reached + Level 24 reached + All potions identified + All scrolls identified + All rings identified + All wands identified + All potions, scrolls, rings & wands identified + + + + All bags bought + Death from fire + Death from poison + Death from toxic gas + Death from hunger + Death from an enchantment + Death from falling down + Death from fire, poison, toxic gas & hunger + + + + + 1st boss slain + 2nd boss slain + 3rd boss slain + 4th boss slain + 1st boss slain by Warrior, Mage, Rogue & Huntress + + + + + + + + + 3rd boss slain by Gladiator, Berserker, Warlock, Battlemage, Freerunner, Assassin, Sniper & Warden + Ring of Haggler obtained + Ring of Thorns obtained + 13 points of Strength attained + 15 points of Strength attained + 17 points of Strength attained + 19 points of Strength attained + 10 pieces of food eaten + 20 pieces of food eaten + 30 pieces of food eaten + 40 pieces of food eaten + + + + + Item of level 3 acquired + Item of level 6 acquired + Item of level 9 acquired + Item of level 12 acquired + + + + + + All rare monsters slain + + + + + Amulet of Yendor obtained + Amulet of Yendor obtained by Warrior, Mage, Rogue & Huntress + 7-hit combo + 3 potions cooked + 6 potions cooked + 9 potions cooked + 12 potions cooked + Level completed without killing any monsters + Monster killed by a Grim weapon + 6 piranhas killed + 5 monsters killed at nighttime + 10 games played + 100 games played + 500 games played + 2000 games played + Happy end + Challenge won + Thanks for your support! + + + + + On diet + Faith is my armor + Pharmacophobia + Barren land + Swarm intelligence + Into darkness + Forbidden runes + + + + + Well of Health + Well of Awareness + Well of Transmutation + Sacrificial chamber + Alchemy pot + Garden + Animated statue + Sad ghost + Old wandmaker + Troll blacksmith + Ambitious imp + + + + Killed by %1$s on level %2$d + Killed by the %1$s on level %2$d + Killed by your own %1$s on level %2$d + Killed by the %1$s on level %2$d + Killed by an explosion of a bomb on level %d + Killed by discharge of %1$s on level %2$d + Burned to death on level %d + Starved to death on level %d + Died from poison on level %d + Died from toxic gas on level %d + Bled to death on level %d + Killed by a caustic ooze on level %d + Fell to death on level %d + Obtained the Amulet of Yendor + + + + + OK, a deal is a deal, dat\'s what I can do for you: I can reforge 2 items and turn them into one of a better quality. + Select an item to reforge + Reforge them + + Potions + Scrolls + Catalogus + + Challenges + + Which way will you follow? + I\'ll decide later + Do you want to respec into %s? + Yes, I want to respec + Maybe later + + Mastery + + ERROR + + Settings + Challenges + Rankings + Start New Game + Main Menu + Exit Game + Return to Game + + Stats + Buffs + Experience + Strength + Health + Gold Collected + Maximum Depth + Level %1$d %2$s + Catalogus + Journal + + Oh yes! You are my hero!\nRegarding your reward, I don\'t have cash with me right now, but I have something better for you. This is my family heirloom ring: my granddad took it off a dead paladin\'s finger. + Take the ring + + There is nothing here. + + Chest + Locked chest + Crystal chest + Tomb + Skeletal remains + You won\'t know what\'s inside until you open it! + But to open it you need a golden key. + You can see %s inside, but to open the chest you need a golden key. + This ancient tomb may contain something useful, but its owner will most certainly object to checking. + This is all that\'s left from one of your predecessors. Maybe it\'s worth checking for any valuables. + + Journal + + Languages + + Default,def,1 + Deutsch,de,1 + English,en,1 + Español (España),es,1 + Français (France),fr,1 + Polski,pl,1 + Português (Brasil),pt_BR,1 + Русский,ru,1 + 中文(Soon),zh_TW,0 + Nederlands (Soon),nl,0 + + + Unable to load additional information + Stats + Items + Badges + Level %1$d %2$s + Challenges + Health + Strength + Game Duration + Maximum Depth + Mobs Killed + Gold Collected + Food Eaten + Potions Cooked + Ankhs Used + + You died, but you were given another chance to win this dungeon. Will you take it? + Yes, I will fight! + No, I give up + + Ghost\'s weapon + Ghost\'s armor + Farewell, adventurer! + + + + - + Default Zoom + Scale up UI + Immersive mode + Language + Music + Sound FX + Brightness + Second quickslot + Switch to portrait + Switch to landscape + + The Dungeon lies right beneath the City, its upper levels actually constitute the City\'s sewer system. Being nominally a part of the City, these levels are not that dangerous. No one will call it a safe place, but at least you won\'t need to deal with evil magic here. + Many years ago an underground prison was built here for the most dangerous criminals. At the time it seemed like a very clever idea, because this place indeed was very hard to escape. But soon dark miasma started to permeate from below, driving prisoners and guards insane. In the end the prison was abandoned, though some convicts were left locked up here. + The caves, which stretch down under the abandoned prison, are sparsely populated. They lie too deep to be exploited by the City and they are too poor in minerals to interest the dwarves. In the past there was a trade outpost somewhere here on the route between these two states, but it has perished since the decline of Dwarven Metropolis. Only omnipresent gnolls and subterranean animals dwell here now. + Dwarven Metropolis was once the greatest of dwarven city-states. In its heyday the mechanized army of dwarves has successfully repelled the invasion of the old god and his demon army. But it is said, that the returning warriors have brought seeds of corruption with them, and that victory was the beginning of the end for the underground kingdom. + In the past these levels were the outskirts of Metropolis. After the costly victory in the war with the old god dwarves were too weakened to clear them of remaining demons. Gradually demons have tightened their grip on this place and now it\'s called Demon Halls.\n\nVery few adventurers have ever descended this far... + + FOR SALE: %1$s - %2$dg + Buy for %dg + Sell for %dg + Sell 1 for %dg + Sell all for %dg + Never mind + You\'ve sold your %1$s for %2$dg + You\'ve bought %1$s for %2$dg + + Oh, I see you have succeeded! I do hope it hasn\'t troubled you too much. As I promised, you can choose one of my high quality wands. + Battle wand + Non-battle wand + Good luck in your quest, %s! + + + + Select an item for the quickslot + + + + + smth + DROP + THROW + Your pack is too full for the %s + Choose direction of throw + Because of frequent use, your %s has broken. + Because of frequent use, your %s is going to break soon. + + EQUIP + UNEQUIP + You can\'t remove cursed %s! + + Amulet of Yendor + END THE GAME + The Amulet of Yendor is the most powerful known artifact of unknown origin. It is said that the amulet is able to fulfill any wish if its owner\'s will-power is strong enough to \"persuade\" it to do it. + + Ankh + The ancient symbol of immortality grants an ability to return to life after death. Upon resurrection all non-equipped items are lost. + + armor kit + APPLY + Using this kit of small tools and materials anybody can transform any armor into an \"epic armor\", which will keep all properties of the original armor, but will also provide its wearer a special ability depending on his class. No skills in tailoring, leatherworking or blacksmithing are required. + Select an armor to upgrade + you applied the armor kit to upgrade your %s + + bomb + This is a relatively small bomb, filled with black powder. Conveniently, its fuse is lit automatically when the bomb is thrown. + You killed yourself with a bomb... + + dewdrop + A crystal clear dewdrop. + + dew vial + DRINK + You can store excess dew in this tiny vessel for drinking it later. If the vial is full, in a moment of deadly peril the dew will be consumed automatically. + The dew vial was emptied to heal your wounds. + You collected a dewdrop into your dew vial. + Your dew vial is full! + Your dew vial is empty! + + This is a mimic! + + honeypot + SHATTER + There is not much honey in this small honeypot, but there is a golden bee there and it doesn\'t want to leave it. + + gold + Collect gold coins to spend them later in a shop. + A pile of %d gold coins. + One gold coin. + + you wince as your grip involuntarily tightens around your %s + + lloyd\'s beacon + SET + RETURN + Lloyd\'s beacon is an intricate magic device, that allows you to return to a place you have already been. + Strong magic aura of this place prevents you from using the lloyd\'s beacon! + Psychic aura of neighboring creatures doesn\'t allow you to use the lloyd\'s beacon at this moment. + The lloyd\'s beacon is successfully set at your current location, now you can return here anytime. + \n\nThis beacon was set somewhere on the level %d of Pixel Dungeon. + + Tome of Mastery + Tome of Remastery + READ + This worn leather book is not that thick, but you feel somehow, that you can gather a lot from it. Remember though that reading this tome may require some time. + You can\'t read while blinded + You have chosen the way of the %s! + + torch + LIGHT + It\'s an indispensable item in The Demon Halls, which are notorious for their poor ambient lighting. + + weightstone + APPLY + Using a weightstone, you can balance your melee weapon to increase its speed or accuracy. + Select a weapon to balance + you balanced your %s to make it faster + you balanced your %s to make it more accurate + How would you like to balance your %s? + For speed + For accuracy + Never mind + + + + + PLANT + Throw this seed to the place where you want to grow %1$s.\n\n%2$s + seed of %s + + Dreamweed + Upon touching a Dreamweed it secretes a glittering cloud of confusing gas. + + Earthroot + When a creature touches an Earthroot, its roots create a kind of natural armor around it. + Herbal armor + + Fadeleaf + Touching a Fadeleaf will teleport any creature to a random place on the current level. + + Firebloom + When something touches a Firebloom, it bursts into flames. + + Icecap + Upon touching an Icecap excretes a pollen, which freezes everything in its vicinity. + + Rotberry + Berries of this shrub taste like sweet, sweet death. + The seed emits a roar that echoes throughout the dungeon! + + Sorrowmoss + A Sorrowmoss is a flower (not a moss) with razor-sharp petals, coated with a deadly venom. + + Sungrass + Sungrass is renowned for its sap\'s healing properties. + Herbal healing + + + + + your %s constricts around you painfully + you are now familiar enough with your %1$s to identify it. It is %2$s. + %1$s :%2$d + broken %1$s :%2$d + Interaction of different types of magic has erased the glyph on this armor! + \n\nThis %1$s provides damage absorption up to \"%2$d\" points per attack. + \n\nBecause of your inadequate strength your movement speed and defense skill is decreased. + \n\nBecause of your inadequate strength wearing this armor will decrease your movement speed and defense skill. + \n\nTypical %1$s provides damage absorption up to %2$d points per attack and requires %3$d points of strength. + Probably this armor is too heavy for you. + It is enchanted. + \n\nYou are wearing the %1$s%2$s. + , and because it is cursed, you are powerless to remove it + \n\nYou can feel a malevolent magic lurking within the %s. + + The thing looks awesome! + Your health is too low! + You need to be wearing this armor to use its special power! + + cloth armor + This lightweight armor offers basic protection. + + huntress cloak + A huntress in such cloak can create a fan of spectral blades. Each of these blades will target a single enemy in the huntress\'s field of view, inflicting damage depending on her currently equipped melee weapon. + SPECTRAL BLADES + No enemies in sight + Only huntresses can use this armor! + + leather armor + Armor made from tanned monster hide. Not as light as cloth armor but provides better protection. + + mage robe + Wearing this gorgeous robe, a mage can cast a spell of molten earth: all the enemies in his field of view will be set on fire and unable to move at the same time. + MOLTEN EARTH + Only mages can use this armor! + + mail armor + Interlocking metal links make for a tough but flexible suit of armor. + + plate armor + Enormous plates of metal are joined together into a suit that provides unmatched protection to any adventurer strong enough to bear its staggering weight. + + rogue garb + Wearing this dark garb, a rogue can perform a trick, that is called \"smoke bomb\" (though no real explosives are used): he blinds enemies who could see him and jumps aside. + SMOKE BOMB + Only rogues can use this armor! + You can only jump to an empty location in your field of view + Choose a location to jump to + + scale armor + The metal scales sewn onto a leather vest create a flexible, yet protective armor. + + warrior suit of armor + While this armor looks heavy, it allows a warrior to perform heroic leap towards a targeted location, slamming down to stun all neighboring enemies. + HEROIC LEAP + Only warriors can use this armor! + Choose direction to leap + + + + + %s of affection + + %s of anti-entropy + + %s of auto-repair + + %s of bounce + + %s of displacement + + %s of entanglement + + %s of metabolism + + %s of multiplicity + + %s of potential + + %s of stench + + %s of viscosity + deferred %d + enchantment of viscosity + Defered damage (%d) + The enchantment of viscosity killed you... + + + + + OPEN + + key ring + This is a copper key ring, that lets you keep all your keys separately from the rest of your belongings. + + scroll holder + You can place any number of scrolls into this tubular container. It saves room in your backpack and protects scrolls from fire. + + seed pouch + This small velvet pouch allows you to store any number of seeds in it. Very convenient. + + wand holster + This slim holder is made of leather of some exotic animal. It allows to compactly carry up to %d wands. + + + + + ration of food + Nothing fancy here: dried meat, some biscuits - things like that. + EAT + That food tasted delicious! + + chargrilled meat + It looks like a decent steak. + + frozen carpaccio + It\'s a piece of frozen raw meat. The only way to eat it is by cutting thin slices of it. And this way it\'s surprisingly good. + You see your hands turn invisible! + You feel your skin hardens! + Refreshing! + You feel better! + + mystery meat + Eat at your own risk! + Oh it\'s hot! + You can\'t feel your legs! + You are not feeling well. + You are stuffed. + That food tasted... strange. + + overpriced food ration + It looks exactly like a standard ration of food but smaller. + That food tasted good. + + pasty + This is authentic Cornish pasty with traditional filling of beef and potato. + + + + + golden key + The notches on this golden key are tiny and intricate. Maybe it can open some chest lock? + + iron key + The notches on this ancient iron key are well worn; its leather lanyard is battered by age. What door might it open? + iron key from depth %d + + skeleton key + This key looks serious: its head is shaped like a skull. Probably it can open some serious door. + + + + + %s potion + This flask contains a swirling %s liquid. Who knows what it will do when drunk or thrown? + DRINK + Harmful potion! + Beneficial potion + Yes, I know what I\'m doing + No, I changed my mind + Are you sure you want to drink it? In most cases you should throw such potions at your enemies. + Are you sure you want to throw it? In most cases it makes sense to drink it. + The flask shatters and %s liquid splashes harmlessly + + turquoise + crimson + azure + jade + golden + magenta + charcoal + ivory + amber + bistre + indigo + silver + + + Potion of Experience + The storied experiences of multitudes of battles reduced to liquid form, this draught will instantly raise your experience level. + + Potion of Frost + Upon exposure to open air, this chemical will evaporate into a freezing cloud, causing any creature that contacts it to be frozen in place, unable to act and move. + + Potion of Healing + An elixir that will instantly return you to full health and cure poison. + Your wounds heal completely. + + Potion of Invisibility + Drinking this potion will render you temporarily invisible. While invisible, enemies will be unable to see you. Attacking an enemy, as well as using a wand or a scroll before enemy\'s eyes, will dispel the effect. + You see your hands turn invisible! + + Potion of Levitation + Drinking this curious liquid will cause you to hover in the air, able to drift effortlessly over traps. Flames and gases fill the air, however, and cannot be bypassed while airborne. + You float into the air! + + Potion of Liquid Flame + This flask contains an unstable compound which will burst violently into flame upon exposure to open air. + + Potion of Might + This powerful liquid will course through your muscles, permanently increasing your strength by one point and health by five points. + Newfound strength surges through your body. + +1 str, +5 ht + + Potion of Mind Vision + After drinking this, your mind will become attuned to the psychic signature of distant creatures, enabling you to sense biological presences through walls. Also this potion will permit you to see through nearby walls and doors. + You can somehow feel the presence of other creatures\' minds! + You can somehow tell that you are alone on this level at the moment. + + Potion of Paralytic Gas + Upon exposure to open air, the liquid in this flask will vaporize into a numbing yellow haze. Anyone who inhales the cloud will be paralyzed instantly, unable to move for some time after the cloud dissipates. This item can be thrown at distant enemies to catch them within the effect of the gas. + + Potion of Purification + This reagent will quickly neutralize all harmful gases in the area of effect. Drinking it will give you a temporary immunity to such gases. + You feel uncommon freshness in the air. + You\'ve stopped sensing any smells! + + Potion of Strength + This powerful liquid will course through your muscles, permanently increasing your strength by one point. + Newfound strength surges through your body. + +1 str + + Potion of Toxic Gas + Uncorking or shattering this pressurized glass will cause its contents to explode into a deadly cloud of toxic green gas. You might choose to fling this potion at distant enemies instead of uncorking it by hand. + + + + + corpse dust + The ball of corpse dust doesn\'t differ outwardly from a regular dust ball. However, you know somehow that it\'s better to get rid of it as soon as possible. + + dark gold ore + This metal is called dark not because of its color (it doesn\'t differ from the normal gold), but because it melts under the daylight, making it useless on the surface. + + dried rose + The rose has dried long ago, but it has kept all its petals somehow. + + dwarf token + Many dwarves and some of their larger creations carry these small pieces of metal of unknown purpose. Maybe they are jewelry or maybe some kind of ID. Dwarves are strange folk. + + phantom fish + EAT + You can barely see this tiny translucent fish in the air. In the water it becomes effectively invisible. + You see your hands turn invisible! + + pickaxe + This is a large and sturdy tool for breaking rocks. Probably it can be used as a weapon. + MINE + There is no dark gold vein near you to mine + + giant rat skull + It could be a nice hunting trophy, but it smells too bad to place it on a wall. + + + + + %s ring + This metal band is adorned with a large %s gem that glitters in the darkness. Who knows what effect it has when worn? + broken %s + you are now familiar enough with your %1$s to identify it. It is %2$s. + Unequip one ring + You can only wear two rings at a time. Unequip one of your equipped rings. + + diamond + opal + garnet + ruby + amethyst + topaz + onyx + tourmaline + emerald + sapphire + quartz + agate + + Your %s tightens around your finger painfully + %1$s\n\nThe %2$s is on your finger %3$s. + , and because it is cursed, you are powerless to remove it + %1$s\n\nYou can feel a malevolent magic lurking within the %2$s. + This is a %s + + Ring of Accuracy + This ring increases your chance to hit the enemy. + + Ring of Detection + Wearing this ring will allow the wearer to notice hidden secrets - traps and secret doors - without taking time to search. Degraded rings of detection will dull your senses, making it harder to notice secrets even when actively searching for them. + + Ring of Elements + This ring provides resistance to different elements, such as fire, electricity, gases etc. Also it decreases duration of negative effects. + + Ring of Evasion + This ring increases your chance to dodge enemy attack. + + Ring of Haggler + In fact this ring doesn\'t provide any magic effect, but it demonstrates to shopkeepers and vendors, that the owner of the ring is a member of The Thieves\' Guild. Usually they are glad to give a discount in exchange for temporary immunity guarantee. Upgrading this ring won\'t give any additional bonuses. + + Ring of Haste + This ring accelerates the wearer\'s flow of time, allowing one to perform all actions a little faster. + + Ring of Herbalism + This ring increases your chance to gather dew and seeds from trampled grass. + + Ring of Mending + This ring increases the body\'s regenerative properties, allowing one to recover lost health at an accelerated rate. Degraded rings will decrease or even halt one\'s natural regeneration. + + Ring of Power + Your wands will become more powerful in the energy field that radiates from this ring. Degraded rings of power will instead weaken your wands. + + Ring of Satiety + Wearing this ring you can go without food longer. Degraded rings of satiety will cause the opposite effect. + + Ring of Shadows + Enemies will be less likely to notice you if you wear this ring. Degraded rings of shadows will alert enemies who might otherwise not have noticed your presence. + + Ring of Thorns + Though this ring doesn\'t provide real thorns, an enemy that attacks you will itself be wounded by a fraction of the damage that it inflicts. Upgrading this ring won\'t give any additional bonuses. + + + + + scroll \"%s\" + This parchment is covered with indecipherable writing, and bears a title of rune %s. Who knows what it will do when read aloud? + READ + You can\'t read a scroll while blinded + + KAUNAN + SOWILO + LAGUZ + YNGVI + GYFU + RAIDO + ISAZ + MANNAZ + NAUDIZ + BERKANAN + ODAL + TIWAZ + + + Select an item + Do you really want to cancel this scroll usage? It will be consumed anyway. + Yes, I\'m positive + No, I changed my mind + + Scroll of Challenge + When read aloud, this scroll will unleash a challenging roar that will awaken all monsters and alert them to the reader\'s location. + The scroll emits a challenging roar that echoes throughout the dungeon! + + Scroll of Identify + Permanently reveals all of the secrets of a single item. + Select an item to identify + It is %s + + Scroll of Lullaby + A soothing melody will put all creatures in your field of view into a deep sleep, giving you a chance to flee or make a surprise attack on them. + The scroll utters a soothing melody. + The scroll utters a soothing melody and the %s falls asleep! + The scroll utters a soothing melody and the monsters fall asleep! + + Scroll of Magic Mapping + When this scroll is read, an image of crystal clarity will be etched into your memory, alerting you to the precise layout of the level and revealing all hidden secrets. The locations of items and creatures will remain unknown. + You are now aware of the level layout. + + Scroll of Mirror Image + The incantation on this scroll will create illusionary twins of the reader, which will chase his enemies. + + Scroll of Psionic Blast + This scroll contains destructive energy, that can be psionically channeled to inflict a massive damage to all creatures within a field of view. An accompanying flash of light will temporarily blind everybody in the area of effect including the reader of the scroll. + + Scroll of Recharging + The raw magical power bound up in this parchment will, when released, recharge all of the reader\'s wands to full power. + a surge of energy courses through your pack, recharging your wand + a surge of energy courses through your pack, recharging your wands + a surge of energy courses through your pack, but nothing happens + + Scroll of Remove Curse + The incantation on this scroll will instantly strip from the reader\'s weapon, armor, rings and carried items any evil enchantments that might prevent the wearer from removing them. + Your pack glows with a cleansing light, and a malevolent energy disperses. + Your pack glows with a cleansing light, but nothing happens. + + Scroll of Teleportation + The spell on this parchment instantly transports the reader to a random location on the dungeon level. It can be used to escape a dangerous situation, but the unlucky reader might find himself in an even more dangerous place. + In a blink of an eye you were teleported to another location of the level. + Strong magic aura of this place prevents you from teleporting! + + Scroll of Terror + A flash of red light will overwhelm all creatures in your field of view with terror, and they will turn and flee. Attacking a fleeing enemy will dispel the effect. + The scroll emits a brilliant flash of red light + The scroll emits a brilliant flash of red light and the %s flees! + The scroll emits a brilliant flash of red light and the monsters flee! + + Scroll of Upgrade + This scroll will upgrade a single item, improving its quality. A wand will increase in power and in number of charges; a weapon will inflict more damage or find its mark more frequently; a suit of armor will deflect additional blows; the effect of a ring on its wearer will intensify. Weapons and armor will also require less strength to use, and any curses on the item will be lifted. + Select an item to upgrade + your %s certainly looks better now + + Scroll of Enchantment + This scroll is able to imbue a weapon or an armor with a random enchantment, granting it a special power. + Select an enchantable item + your %s glows in the dark + + Scroll of Wipe Out + @string/Scroll_ACRead + Read this scroll to unleash the wrath of the dungeon spirits, killing everything on the current level. Well, almost everything. Some of the more powerful creatures may be not affected. + @string/Scroll_Blinded + + + + + %s wand + ZAP + This thin %s wand is warm to the touch. Who knows what it will do when used? + When this wand is used as a melee weapon, its average damage is %d points per hit. + You can use this wand as a melee weapon. + your wand fizzles; it must be out of charges for now + You can\'t target yourself + Choose direction to zap + You are now familiar enough with your %s. + + holly + yew + ebony + cherry + teak + rowan + willow + mahogany + bamboo + purpleheart + oak + birch + + + Wand of Amok + The purple light from this wand will make the target run amok attacking random creatures in its vicinity. + nothing happened + + Wand of Avalanche + When a discharge of this wand hits a wall (or any other solid obstacle) it causes an avalanche of stones, damaging and stunning all creatures in the affected area. + You killed yourself with your own Wand of Avalanche... + + Wand of Blink + This wand will allow you to teleport in the chosen direction. Creatures and inanimate obstructions will block the teleportation. + + Wand of Disintegration + This wand emits a beam of destructive energy, which pierces all creatures in its way. The more targets it hits, the more damage it inflicts to each of them. + + Wand of Firebolt + This wand unleashes bursts of magical fire. It will ignite flammable terrain, and will damage and burn a creature it hits. + You killed yourself with your own Wand of Firebolt... + + Wand of Flock + A flick of this wand summons a flock of magic sheep, creating temporary impenetrable obstacle. + sheep + This is a magic sheep. What\'s so magical about it? You can\'t kill it. It will stand there until it magically fades away, all the while chewing cud with a blank stare. + + Baa! + Baa? + Baa. + Baa... + Bee... + Ble... + + + Wand of Lightning + This wand conjures forth deadly arcs of electricity, which deal damage to several creatures standing close to each other. + You killed yourself with your own Wand of Lightning... + + Wand of Magic Missile + This wand launches missiles of pure magical energy, dealing moderate damage to a target creature. + DISENCHANT + You killed yourself with your own Wand of Magic Missile... + Select a wand to upgrade + you disenchanted the Wand of Magic Missile and used its essence to upgrade your %s + + Wand of Poison + The vile blast of this twisted bit of wood will imbue its target with a deadly venom. A creature that is poisoned will suffer periodic damage until the effect ends. The duration of the effect increases with the level of the staff. + nothing happened + + Wand of Regrowth + \"When life ceases new life always begins to grow... The eternal cycle always remains!\" + nothing happened + + Wand of Slowness + This wand will cause a creature to move and attack at half its ordinary speed until the effect ends + nothing happened + + Wand of Reach + This utility wand can be used to grab objects from a distance and to switch places with enemies. Waves of magic force radiated from it will affect all cells on their way triggering traps, trampling high vegetation, opening closed doors and closing open ones. + You have magically transported %s into your backpack + + Wand of Teleportation + A blast from this wand will teleport a creature against its will to a random place on the current level. + %1$s teleported %2$s to somewhere + nothing happened + + + + + You are now familiar enough with your %1$s to identify it. It is %2$s. + Interaction of different types of magic has negated the enchantment on this weapon! + %1$s :%2$d + broken %1$s :%2$d + + + + + grim %s + + blazing %s + + eldritch %s + + unstable %s + + vampiric %s + + lucky %s + + stunning %s + + venomous %s + + shocking %s + + chilling %s + + tempered %s + + + + + This %1$s is %2$s tier-%3$d melee weapon. + a + a upgraded + an degraded + a broken + Its average damage is %d points per hit. + Its typical average damage is %1$d points per hit and usually it requires %2$d points of strength. + Probably this weapon is too heavy for you. + This is a rather %s weapon. + fast + slow + and + but + accurate + inaccurate + It was balanced to make it faster. + It was balanced to make it more accurate. + It is enchanted. + Because of your inadequate strength the accuracy and speed of your attack with this %s is decreased. + Because of your excess strength the damage of your attack with this %s is increased. + You hold the %1$s at the ready%2$s. + , and because it is cursed, you are powerless to let go + You can feel a malevolent magic lurking within %s. + + battle axe + The enormous steel head of this battle axe puts considerable heft behind each stroke. + + dagger + A simple iron dagger with a well worn wooden handle. + + glaive + A polearm consisting of a sword blade on the end of a pole. + + knuckleduster + A piece of iron shaped to fit around the knuckles. + + longsword + This towering blade inflicts heavy damage by investing its heft into every cut. + + mace + The iron head of this weapon inflicts substantial damage. + + quarterstaff + A staff of hardwood, its ends are shod with iron. + + short sword + It is indeed quite short, just a few inches longer, than a dagger. + REFORGE + Select a weapon to upgrade + you reforged the short sword to upgrade your %s + you can\'t upgrade a boomerang this way + + spear + A slender wooden rod tipped with sharpened iron. + + sword + The razor-sharp length of steel blade shines reassuringly. + + war hammer + Few creatures can withstand the crushing blow of this towering mass of lead and steel, but only the strongest of adventurers can use it effectively. + + + + + Missile weapon + Yes, I know what I\'m doing + No, I changed my mind + Do you really want to equip it as a melee weapon? + \n\nAverage damage of this weapon equals to %d points per hit. + Because of your inadequate strength the accuracy and speed of your attack with this %s is decreased. + Because of your excess strength the damage of your attack with this %s is increased. + \n\nYou hold the %s at the ready. + + boomerang + Thrown to the enemy this flat curved wooden missile will return to the hands of its thrower. + + curare dart + These little evil darts don\'t do much damage but they can paralyze the target leaving it helpless and motionless for some time. + + dart + These simple metal spikes are weighted to fly true and sting their prey with a flick of the wrist. + + incendiary dart + The spike on each of these darts is designed to pin it to its target while the unstable compounds strapped to its length burst into brilliant flames. + + javelin + This length of metal is weighted to keep the spike at its tip foremost as it sails through the air. + + shuriken + Star-shaped pieces of metal with razor-sharp blades do significant damage when they hit a target. They can be thrown at very high rate. + + tomahawk + This throwing axe is not that heavy, but it still requires significant strength to be used effectively. + + + + + A cloud of confusion gas is swirling here. + + A fire is raging here. + + Shafts of light pierce the gloom of the underground garden. + + A cloud of paralytic gas is swirling here. + + \"Your sacrifice is worthy...\" + \"Your sacrifice is unworthy...\" + \"Your sacrifice is worthy and so you are!\" + Sacrificial fire burns here. Every creature touched by this fire is marked as an offering for the spirits of the dungeon. + Marked for sacrifice + + A greenish cloud of toxic gas is swirling here. + You died from a toxic gas.. + + As you take a sip, you feel the knowledge pours into your mind. Now you know everything about your equipped items. Also you sense all items on the level and know all its secrets. + Power of knowledge radiates from the water of this well. Take a sip from it to reveal all secrets of equipped items. + + Power of health radiates from the water of this well. Take a sip from it to heal your wounds and satisfy hunger. + As you take a sip, you feel your wounds heal completely. + + Power of change radiates from the water of this well. Throw an item into the well to turn it into something else. + + Everything is covered with a thick web here. + + + + + Amok + + Barkskin + + Bleeding + You bled to death... + + Blinded + + Burning + %s burns up! + You burned to death... + + Charmed + + Combo + %d hit combo! + + Crippled + + Frozen + + Fury + + Immune to gases + + You are hungry. + You are starving! + You starved to death... + Hungry + Starving + + Invisible + + Levitating + + Illuminated + + Mind vision + + Caustic ooze + %s killed you... + + Paralyzed + + Poisoned + You died from poison... + + Blinded with rage + + Rooted + + Shadowmelded + + Slowed + + Zeroed in + + Vertigo + + Weakened + + + + + backpack + + + + + Real description is coming soon! + You hear something died in the distance + echo of\u0020 + %1$s: \"%2$s\" + This %s is sleeping + This %s is wandering + This %s is hunting + This %s is fleeing + This %s is passive + + acidic scorpio + + albino rat + + crazy bandit + + vampire bat + These brisk and tenacious inhabitants of cave domes may defeat much larger opponents by replenishing their health with each successful attack. + evaded + + gnoll brute + Brutes are the largest, strongest and toughest of all gnolls. When severely wounded, they go berserk, inflicting even more damage to their enemies. + %s becomes enraged! + enraged + + sewer crab + These huge crabs are at the top of the food chain in the sewers. They are extremely fast and their thick exoskeleton can withstand heavy blows. + parried + + curse personification + This creature resembles the sad ghost, but it swirls with darkness. Its face bears an expression of despair. + + DM-300 + DM-350 + This machine was created by the Dwarves several centuries ago. Later, Dwarves started to replace machines with golems, elementals and even demons. Eventually it led their civilization to the decline. The DM-300 and similar machines were typically used for construction and mining, and in some cases, for city defense. + DM-300 repairs itself! + Mission failed. Shutting down. + Unauthorized personnel detected. + + fire elemental + Wandering fire elementals are a byproduct of summoning greater entities. They are too chaotic in their nature to be controlled by even the most powerful demonologist. + + evil eye + One of this demon\'s other names is \"orb of hatred\", because when it sees an enemy, it uses its deathgaze recklessly, often ignoring its allies and wounding them. + %s\'s deathgaze killed you... + + fetid rat + This marsupial rat is much larger, than a regular one. It is surrounded by a foul cloud. + evaded + + gnoll scout + Gnolls are hyena-like humanoids. They dwell in sewers and dungeons, venturing up to raid the surface from time to time. Gnoll scouts are regular members of their pack, they are not as strong as brutes and not as intelligent as shamans. + + golem + The Dwarves tried to combine their knowledge of mechanisms with their newfound power of elemental binding. They used spirits of earth as the \"soul\" for the mechanical bodies of golems, which were believed to be most controllable of all. Despite this, the tiniest mistake in the ritual could cause an outbreak. + blocked + + Goo + spawn of Goo + Little known about The Goo. It\'s quite possible that it is not even a creature, but rather a conglomerate of substances from the sewers that gained rudiments of free will. + Goo is pumping itself up! + glurp... glurp... + GLURP-GLURP! + !!! + + King of Dwarves + undead King of Dwarves + The last king of dwarves was known for his deep understanding of processes of life and death. He has persuaded members of his court to participate in a ritual, that should have granted them eternal youthfulness. In the end he was the only one, who got it - and an army of undead as a bonus. + parried + You cannot kill me, %s... I am... immortal... + Arise, slaves! + How dare you! + undead dwarf + These undead dwarves, risen by the will of the King of Dwarves, were members of his court. They appear as skeletons with a stunning amount of facial hair. + blocked + + mimic + Mimics are magical creatures which can take any shape they wish. In dungeons they almost always choose a shape of a treasure chest, because they know how to beckon an adventurer. + + dwarf monk + These monks are fanatics, who devoted themselves to protecting their city\'s secrets from all aliens. They don\'t use any armor or weapons, relying solely on the art of hand-to-hand combat. + parried + %1$s has knocked the %2$s from your hands! + + giant piranha + These carnivorous fish are not natural inhabitants of underground pools. They were bred specifically to protect flooded treasure vaults. + + marsupial rat + Marsupial rats are aggressive, but rather weak denizens of the sewers. They can be dangerous only in big numbers. + + scorpio + These huge arachnid-like demonic creatures avoid close combat by all means, firing crippling serrated spikes from long distances. + + senior monk + + gnoll shaman + The most intelligent gnolls can master shamanistic magic. Gnoll shamans prefer battle spells to compensate for lack of might, not hesitating to use them on those who question their status in a tribe. + %s\'s lightning bolt killed you... + + shielded brute + blocked + + skeleton + Skeletons are composed of corpses bones from unlucky adventurers and inhabitants of the dungeon, animated by emanations of evil magic from the depths below. After they have been damaged enough, they disintegrate in an explosion of bones. + blocked + You were killed by the explosion of bones... + + cave spinner + These greenish furry cave spiders try to avoid direct combat, preferring to wait in the distance while their victim, entangled in the spinner\'s excreted cobweb, slowly dies from their poisonous bite. + + animated statue + You would think that it\'s just another ugly statue of this dungeon, but its red glowing eyes give itself away. While the statue itself is made of stone, the _%s_, it\'s wielding, looks real. + + succubus + The succubi are demons that look like seductive (in a slightly gothic way) girls. Using its magic, the succubus can charm a hero, who will become unable to attack anything until the charm wears off. + + swarm of flies + The deadly swarm of flies buzzes angrily. Every non-magical attack will split it into two smaller but equally dangerous swarms. + evaded + + Tengu + memory of Tengu + Tengu are members of the ancient assassins clan, which is also called Tengu. These assassins are noted for extensive use of shuriken and traps. + Free at last... + Gotcha, %s! + + crazy thief + Deeper levels of the dungeon have always been a hiding place for all kinds of criminals. Not all of them could keep a clear mind during their extended periods so far from daylight. Long ago, these crazy thieves and bandits have forgotten who they are and why they steal. + %1$s stole %2$s from you! + \n\n%1$s is carrying a _%2$s_. Stolen obviously. + + dwarf warlock + When dwarves\' interests have shifted from engineering to arcane arts, warlocks have come to power in the city. They started with elemental magic, but soon switched to demonology and necromancy. + %s\'s shadow bolt killed you... + + wraith + A wraith is a vengeful spirit of a sinner, whose grave or tomb was disturbed. Being an ethereal entity, it is very hard to hit with a regular weapon. + evaded + + Yog-Dzewa + echo of Yog-Dzewa + Yog-Dzewa is an Old God, a powerful entity from the realms of chaos. A century ago, the ancient dwarves barely won the war against its army of demons, but were unable to kill the god itself. Instead, they then imprisoned it in the halls below their city, believing it to be too weak to rise ever again. + ... + Hope is an illusion... + rotting fist + burning fist + god\'s larva + + + + + golden bee + Despite their small size, golden bees tend to protect their master fiercely. They don\'t live long though. + This %s is wandering + + troll blacksmith + This troll blacksmith looks like all trolls look: he is tall and lean, and his skin resembles stone in both color and texture. The troll blacksmith is tinkering with unproportionally small tools. + Hey human! Wanna be useful, eh? Take dis pickaxe and mine me some _dark gold ore_, _15 pieces_ should be enough. What do you mean, how am I gonna pay? You greedy...\nOk, ok, I don\'t have money to pay, but I can do some smithin\' for you. Consider yourself lucky, I\'m the only blacksmith around. + Hey human! Wanna be useful, eh? Take dis pickaxe and _kill a bat_ wit\' it, I need its blood on the head. What do you mean, how am I gonna pay? You greedy...\nOk, ok, I don\'t have money to pay, but I can do some smithin\' for you. Consider yourself lucky, I\'m the only blacksmith around. + Are you kiddin\' me? Where is my pickaxe?! + Dark gold ore. 15 pieces. Seriously, is it dat hard? + I said I need bat blood on the pickaxe. Chop chop! + Oh, you have returned... Better late dan never. + I\'m busy. Get lost! + your %s certainly looks better now + Select 2 different items, not the same item twice! + Select 2 items of the same type! + I need to know what I\'m working with, identify them first! + I don\'t work with cursed items! + It\'s a junk, the quality is too poor! + I can\'t reforge these items! + + sad ghost + The ghost is barely visible. It looks like a shapeless spot of faint light with a sorrowful face. + evaded + Hello adventurer... Once I was like you - strong and confident... And now I\'m dead... But I can\'t leave this place... Not until I have my _dried rose_... It\'s very important to me... Some monster stole it from my body... + Please... Help me... _Find the rose_... + Yes! Yes!!! This is it! Please give it to me! And you can take one of these items, maybe they will be useful to you in your journey... + Hello adventurer... Once I was like you - strong and confident... And now I\'m dead... But I can\'t leave this place... Not until I have my revenge... Slay the _fetid rat_, that has taken my life... + Please... Help me... _Slay the abomination_... + Yes! The ugly creature is slain and I can finally rest... Please take one of these items, maybe they will be useful to you in your journey... + Hello adventurer... Once I was like you - strong and confident... And now I\'m dead... But I can\'t leave this place, as I am bound by a horrid curse... Please... Help me... _Destroy the curse_... + Thank you, %s! The curse is broken and I can finally rest... Please take one of these items, maybe they will be useful to you in your journey... + Yes, I will do it for you + No, I can\'t help you + + ambitious imp + Imps are lesser demons. They are notable for neither their strength nor their magic talent, but they are quite smart and sociable. Many imps prefer to live among non-demons. + evaded + Are you an adventurer? I love adventurers! You can always rely on them if something needs to be killed. Am I right? For a bounty, of course ;)\nIn my case this is _golems_ who need to be killed. You see, I\'m going to start a little business here, but these stupid golems are bad for business! It\'s very hard to negotiate with wandering lumps of granite, damn them! So please, kill... let\'s say _6 of them_ and a reward is yours. + How is your golem safari going? + Are you an adventurer? I love adventurers! You can always rely on them if something needs to be killed. Am I right? For a bounty, of course ;)\nIn my case this is _monks_ who need to be killed. You see, I\'m going to start a little business here, but these lunatics don\'t buy anything themselves and will scare away other customers. So please, kill... let\'s say _8 of them_ and a reward is yours. + Oh, you are still alive! I knew that your kung-fu is stronger ;) Just don\'t forget to grab these monks\' tokens. + See you, %s! + Psst, %s! + + ambitious imp + Imps are lesser demons. They are notable for neither their strength nor their magic talent. But they are quite smart and sociable, and many of imps prefer to live and do business among non-demons. + Hello, friend! + + mirror image + This illusion bears a close resemblance to you, but it\'s paler and twitches a little. + + rat king + This rat is a little bigger than a regular marsupial rat and it\'s wearing a tiny crown on its head. + I\'m not sleeping! + What is it? I have no time for this nonsense. My kingdom won\'t rule itself! + + shopkeeper + This stout guy looks more appropriate for a trade district in some large city than for a dungeon. His prices explain why he prefers to do business here. + Select an item to sell + + old wandmaker + This old but hale gentleman wears a slightly confused expression. He is protected by a magic shield. + absorbed + Oh, what a pleasant surprise to meet a decent person in such place! I came here for a rare ingredient - a _Rotberry seed_. Being a magic user, I\'m quite able to defend myself against local monsters, but I\'m getting lost in no time, it\'s very embarrassing. Probably you could help me? I would be happy to pay for your service with one of my best wands. + Any luck with a _Rotberry seed_, %s? No? Don\'t worry, I\'m not in a hurry. + Oh, what a pleasant surprise to meet a decent person in such place! I came here for a rare ingredient - _corpse dust_. It can be gathered from skeletal remains and there is an ample number of them in the dungeon. Being a magic user, I\'m quite able to defend myself against local monsters, but I\'m getting lost in no time, it\'s very embarrassing. Probably you could help me? I would be happy to pay for your service with one of my best wands. + Any luck with _corpse dust_, %s? Bone piles are the most obvious places to look. + Oh, what a pleasant surprise to meet a decent person in such place! I came here for a rare ingredient - a _phantom fish_. You can catch it with your bare hands, but it\'s very hard to notice in the water. Being a magic user, I\'m quite able to defend myself against local monsters, but I\'m getting lost in no time, it\'s very embarrassing. Probably you could help me? I would be happy to pay for your service with one of my best wands. + Any luck with a _phantom fish_, %s? You may want to try searching for it in one of the local pools. + + + + + A hidden pressure plate clicks! + Chasm + Floor + Grass + Water + Wall + Closed door + Open door + Depth entrance + Depth exit + Embers + Locked door + Pedestal + Barricade + High grass + Locked depth exit + Unlocked depth exit + Sign + Well + Empty well + Statue + Toxic gas trap + Fire trap + Paralytic gas trap + Poison dart trap + Alarm trap + Lightning trap + Gripping trap + Summoning trap + Triggered trap + Bookshelf + Alchemy pot + \?\?\? + You can\'t see the bottom. + In case of burning step into the water to extinguish the fire. + Stairs lead up to the upper depth. + Stairs lead down to the lower depth. + Embers cover the floor. + Dense vegetation blocks the view. + This door is locked, you need a matching key to unlock it. + Heavy bars block the stairs leading down. + The wooden barricade is firmly set but has dried over the years. Might it burn? + You can\'t read the text from here. + Stepping onto a hidden pressure plate will activate the trap. + The trap has been triggered before and it\'s not dangerous anymore. + Someone wanted to adorn this place, but failed, obviously. + Drop some seeds here to cook a potion. + The well has run dry. + + Fluorescent moss + Fluorescent mushrooms + Freezing cold water. + The ladder leads up to the upper depth. + The ladder leads down to the lower depth. + Huge mushrooms block the view. + A vein of some ore is visible on the wall. Gold? + Who would need a bookshelf in a cave? + + Suspiciously colored water + High blooming flowers + A ramp leads up to the upper depth. + A ramp leads down to the lower depth. + Several tiles are missing here. + Thick carpet covers the floor. + The statue depicts some dwarf standing in a heroic stance. + The rows of books on different disciplines fill the bookshelf. + + Cold lava + Embermoss + Emberfungi + Pillar + It looks like lava, but it\'s cold and probably safe to touch. + The pillar is made of real humanoid skulls. Awesome. + Books in ancient languages smolder in the bookshelf. + + Cold lava + Embermoss + Emberfungi + Pillar + It looks like lava, but it\'s cold and probably safe to touch. + The pillar is made of real humanoid skulls. Awesome. + + Suspiciously colored water + High blooming flowers + A ramp leads up to the upper depth. + A ramp leads down to the Inferno. + Several tiles are missing here. + Thick carpet covers the floor. + + Dark cold water. + There are old blood stains on the floor. + This is probably a vestige of a prison library. Might it burn? + + Murky water + Wet yellowish moss covers the floor. + The bookshelf is packed with cheap useless books. Might it burn? + + + + + Select a seed to throw + + Chasm + Yes, I know what I\'m doing + No, I changed my mind + Do you really want to jump into the chasm? You can probably die. + You fell to death... + + What are you doing here?! + As you try to read the sign it bursts into greenish flames. + + Don\'t overestimate your strength, use weapons and armor you can handle. + Not all doors in the dungeon are visible at first sight. If you are stuck, search for hidden doors. + Remember, that raising your strength is not the only way to access better equipment. You can go the other way, lowering its strength requirement with Scrolls of Upgrade. + You can spend your gold in shops on deeper levels of the dungeon. The first one is on the 6th level. + Beware of Goo! + Pixel-Mart. All you need for successful adventure! + Identify your potions and scrolls as soon as possible. Don\'t put it off to the moment when you actually need them. + Being hungry doesn\'t hurt, but starving does hurt. + Surprise attack has a better chance to hit. For example, you can ambush your enemy behind a closed door when you know it is approaching. + Don\'t let The Tengu out! + Pixel-Mart. Spend money. Live longer. + When you\'re attacked by several monsters at the same time, try to retreat behind a door. + If you are burning, you can\'t put out the fire in the water while levitating. + There is no sense in possessing more than one Ankh at the same time, because you will lose them upon resurrecting. + DANGER! Heavy machinery can cause injury, loss of limbs or death! + Pixel-Mart. A safer life in dungeon. + When you upgrade an enchanted weapon, there is a chance to destroy that enchantment. + Weapons and armors deteriorate faster than wands and rings, but there are more ways to fix them. + The only way to obtain a Scroll of Wipe Out is to receive it as a gift from the dungeon spirits. + No weapons allowed in the presence of His Majesty! + Pixel-Mart. Special prices for demon hunters! + + + + + + The trap emits a piercing sound that echoes throughout the dungeon! + + lightning trap + You were killed by a discharge of a lightning trap... + + + + + You don\'t know what is there. + Select a cell to examine + + + + + + + 1 + \ No newline at end of file diff --git a/src/com/watabou/pixeldungeon/Assets.java b/src/com/watabou/pixeldungeon/Assets.java index d4c6061d14..c9c08cbc0c 100644 --- a/src/com/watabou/pixeldungeon/Assets.java +++ b/src/com/watabou/pixeldungeon/Assets.java @@ -25,6 +25,7 @@ public class Assets { public static final String BANNERS = "banners.png"; public static final String BADGES = "badges.png"; + public static final String LOCKED = "locked_badge.png"; public static final String AMULET = "amulet.png"; public static final String CHROME = "chrome.png"; diff --git a/src/com/watabou/pixeldungeon/Badges.java b/src/com/watabou/pixeldungeon/Badges.java index 64c6afaa53..371384d120 100644 --- a/src/com/watabou/pixeldungeon/Badges.java +++ b/src/com/watabou/pixeldungeon/Badges.java @@ -51,43 +51,43 @@ public class Badges { public static enum Badge { - MONSTERS_SLAIN_1( "10 enemies slain", 0 ), - MONSTERS_SLAIN_2( "50 enemies slain", 1 ), - MONSTERS_SLAIN_3( "150 enemies slain", 2 ), - MONSTERS_SLAIN_4( "250 enemies slain", 3 ), - GOLD_COLLECTED_1( "100 gold collected", 4 ), - GOLD_COLLECTED_2( "500 gold collected", 5 ), - GOLD_COLLECTED_3( "2500 gold collected", 6 ), - GOLD_COLLECTED_4( "7500 gold collected", 7 ), - LEVEL_REACHED_1( "Level 6 reached", 8 ), - LEVEL_REACHED_2( "Level 12 reached", 9 ), - LEVEL_REACHED_3( "Level 18 reached", 10 ), - LEVEL_REACHED_4( "Level 24 reached", 11 ), - ALL_POTIONS_IDENTIFIED( "All potions identified", 16 ), - ALL_SCROLLS_IDENTIFIED( "All scrolls identified", 17 ), - ALL_RINGS_IDENTIFIED( "All rings identified", 18 ), - ALL_WANDS_IDENTIFIED( "All wands identified", 19 ), - ALL_ITEMS_IDENTIFIED( "All potions, scrolls, rings & wands identified", 35, true ), + MONSTERS_SLAIN_1(Game.getVar(R.string.Badges_MonsterSlain1), 0 ), + MONSTERS_SLAIN_2(Game.getVar(R.string.Badges_MonsterSlain2), 1 ), + MONSTERS_SLAIN_3(Game.getVar(R.string.Badges_MonsterSlain3), 2 ), + MONSTERS_SLAIN_4(Game.getVar(R.string.Badges_MonsterSlain4), 3 ), + GOLD_COLLECTED_1(Game.getVar(R.string.Badges_GoldColleted1), 4 ), + GOLD_COLLECTED_2(Game.getVar(R.string.Badges_GoldColleted2), 5 ), + GOLD_COLLECTED_3(Game.getVar(R.string.Badges_GoldColleted3), 6 ), + GOLD_COLLECTED_4(Game.getVar(R.string.Badges_GoldColleted4), 7 ), + LEVEL_REACHED_1(Game.getVar(R.string.Badges_LevelReached1), 8 ), + LEVEL_REACHED_2(Game.getVar(R.string.Badges_LevelReached2), 9 ), + LEVEL_REACHED_3(Game.getVar(R.string.Badges_LevelReached3), 10 ), + LEVEL_REACHED_4(Game.getVar(R.string.Badges_LevelReached4), 11 ), + ALL_POTIONS_IDENTIFIED(Game.getVar(R.string.Badges_AllPotions), 16 ), + ALL_SCROLLS_IDENTIFIED(Game.getVar(R.string.Badges_AllScrolls), 17 ), + ALL_RINGS_IDENTIFIED(Game.getVar(R.string.Badges_AllRings), 18 ), + ALL_WANDS_IDENTIFIED(Game.getVar(R.string.Badges_AllWands), 19 ), + ALL_ITEMS_IDENTIFIED(Game.getVar(R.string.Badges_AllItems), 35, true ), BAG_BOUGHT_SEED_POUCH, BAG_BOUGHT_SCROLL_HOLDER, BAG_BOUGHT_WAND_HOLSTER, - ALL_BAGS_BOUGHT( "All bags bought", 23 ), - DEATH_FROM_FIRE( "Death from fire", 24 ), - DEATH_FROM_POISON( "Death from poison", 25 ), - DEATH_FROM_GAS( "Death from toxic gas", 26 ), - DEATH_FROM_HUNGER( "Death from hunger", 27 ), - DEATH_FROM_GLYPH( "Death from an enchantment", 57 ), - DEATH_FROM_FALLING( "Death from falling down", 59 ), - YASD( "Death from fire, poison, toxic gas & hunger", 34, true ), + ALL_BAGS_BOUGHT(Game.getVar(R.string.Badges_AllBags), 23 ), + DEATH_FROM_FIRE(Game.getVar(R.string.Badges_DeathFire), 24 ), + DEATH_FROM_POISON(Game.getVar(R.string.Badges_DeathPoison), 25 ), + DEATH_FROM_GAS(Game.getVar(R.string.Badges_DeathGas), 26 ), + DEATH_FROM_HUNGER(Game.getVar(R.string.Badges_DeathHunger), 27 ), + DEATH_FROM_GLYPH(Game.getVar(R.string.Badges_DeathGlyph), 57 ), + DEATH_FROM_FALLING(Game.getVar(R.string.Badges_DeathFalling), 59 ), + YASD(Game.getVar(R.string.Badges_Yasd), 34, true ), BOSS_SLAIN_1_WARRIOR, BOSS_SLAIN_1_MAGE, BOSS_SLAIN_1_ROGUE, BOSS_SLAIN_1_HUNTRESS, - BOSS_SLAIN_1( "1st boss slain", 12 ), - BOSS_SLAIN_2( "2nd boss slain", 13 ), - BOSS_SLAIN_3( "3rd boss slain", 14 ), - BOSS_SLAIN_4( "4th boss slain", 15 ), - BOSS_SLAIN_1_ALL_CLASSES( "1st boss slain by Warrior, Mage, Rogue & Huntress", 32, true ), + BOSS_SLAIN_1(Game.getVar(R.string.Badges_BossSlain1), 12 ), + BOSS_SLAIN_2(Game.getVar(R.string.Badges_BossSlain2), 13 ), + BOSS_SLAIN_3(Game.getVar(R.string.Badges_BossSlain3), 14 ), + BOSS_SLAIN_4(Game.getVar(R.string.Badges_BossSlain4), 15 ), + BOSS_SLAIN_1_ALL_CLASSES(Game.getVar(R.string.Badges_BossSlain1All), 32, true ), BOSS_SLAIN_3_GLADIATOR, BOSS_SLAIN_3_BERSERKER, BOSS_SLAIN_3_WARLOCK, @@ -96,54 +96,53 @@ public static enum Badge { BOSS_SLAIN_3_ASSASSIN, BOSS_SLAIN_3_SNIPER, BOSS_SLAIN_3_WARDEN, - BOSS_SLAIN_3_ALL_SUBCLASSES( - "3rd boss slain by Gladiator, Berserker, Warlock, Battlemage, Freerunner, Assassin, Sniper & Warden", 33, true ), - RING_OF_HAGGLER( "Ring of Haggler obtained", 20 ), - RING_OF_THORNS( "Ring of Thorns obtained", 21 ), - STRENGTH_ATTAINED_1( "13 points of Strength attained", 40 ), - STRENGTH_ATTAINED_2( "15 points of Strength attained", 41 ), - STRENGTH_ATTAINED_3( "17 points of Strength attained", 42 ), - STRENGTH_ATTAINED_4( "19 points of Strength attained", 43 ), - FOOD_EATEN_1( "10 pieces of food eaten", 44 ), - FOOD_EATEN_2( "20 pieces of food eaten", 45 ), - FOOD_EATEN_3( "30 pieces of food eaten", 46 ), - FOOD_EATEN_4( "40 pieces of food eaten", 47 ), + BOSS_SLAIN_3_ALL_SUBCLASSES(Game.getVar(R.string.Badges_BossSlain3All), 33, true ), + RING_OF_HAGGLER(Game.getVar(R.string.Badges_RingHaggler), 20 ), + RING_OF_THORNS(Game.getVar(R.string.Badges_RingThorns), 21 ), + STRENGTH_ATTAINED_1(Game.getVar(R.string.Badges_StrengthAttained1), 40 ), + STRENGTH_ATTAINED_2(Game.getVar(R.string.Badges_StrengthAttained2), 41 ), + STRENGTH_ATTAINED_3(Game.getVar(R.string.Badges_StrengthAttained3), 42 ), + STRENGTH_ATTAINED_4(Game.getVar(R.string.Badges_StrengthAttained4), 43 ), + FOOD_EATEN_1(Game.getVar(R.string.Badges_FoodEaten1), 44 ), + FOOD_EATEN_2(Game.getVar(R.string.Badges_FoodEaten2), 45 ), + FOOD_EATEN_3(Game.getVar(R.string.Badges_FoodEaten3), 46 ), + FOOD_EATEN_4(Game.getVar(R.string.Badges_FoodEaten4), 47 ), MASTERY_WARRIOR, MASTERY_MAGE, MASTERY_ROGUE, MASTERY_HUNTRESS, - ITEM_LEVEL_1( "Item of level 3 acquired", 48 ), - ITEM_LEVEL_2( "Item of level 6 acquired", 49 ), - ITEM_LEVEL_3( "Item of level 9 acquired", 50 ), - ITEM_LEVEL_4( "Item of level 12 acquired", 51 ), + ITEM_LEVEL_1(Game.getVar(R.string.Badges_ItemLvl1), 48 ), + ITEM_LEVEL_2(Game.getVar(R.string.Badges_ItemLvl2), 49 ), + ITEM_LEVEL_3(Game.getVar(R.string.Badges_ItemLvl3), 50 ), + ITEM_LEVEL_4(Game.getVar(R.string.Badges_ItemLvl4), 51 ), RARE_ALBINO, RARE_BANDIT, RARE_SHIELDED, RARE_SENIOR, RARE_ACIDIC, - RARE( "All rare monsters slain", 37, true ), + RARE(Game.getVar(R.string.Badges_RareAll), 37, true ), VICTORY_WARRIOR, VICTORY_MAGE, VICTORY_ROGUE, VICTORY_HUNTRESS, - VICTORY( "Amulet of Yendor obtained", 22 ), - VICTORY_ALL_CLASSES( "Amulet of Yendor obtained by Warrior, Mage, Rogue & Huntress", 36, true ), - MASTERY_COMBO( "7-hit combo", 56 ), - POTIONS_COOKED_1( "3 potions cooked", 52 ), - POTIONS_COOKED_2( "6 potions cooked", 53 ), - POTIONS_COOKED_3( "9 potions cooked", 54 ), - POTIONS_COOKED_4( "12 potions cooked", 55 ), - NO_MONSTERS_SLAIN( "Level completed without killing any monsters", 28 ), - GRIM_WEAPON( "Monster killed by a Grim weapon", 29 ), - PIRANHAS( "6 piranhas killed", 30 ), - NIGHT_HUNTER( "15 monsters killed at nighttime", 58 ), - GAMES_PLAYED_1( "10 games played", 60, true ), - GAMES_PLAYED_2( "100 games played", 61, true ), - GAMES_PLAYED_3( "500 games played", 62, true ), - GAMES_PLAYED_4( "2000 games played", 63, true ), - HAPPY_END( "Happy end", 38 ), - CHAMPION( "Challenge won", 39, true ), - SUPPORTER( "Thanks for your support!", 31, true ); + VICTORY(Game.getVar(R.string.Badges_Victory), 22 ), + VICTORY_ALL_CLASSES(Game.getVar(R.string.Badges_VictoryAll), 36, true ), + MASTERY_COMBO(Game.getVar(R.string.Badges_MasteryCombo), 56 ), + POTIONS_COOKED_1(Game.getVar(R.string.Badges_PotionsCooked1), 52 ), + POTIONS_COOKED_2(Game.getVar(R.string.Badges_PotionsCooked2), 53 ), + POTIONS_COOKED_3(Game.getVar(R.string.Badges_PotionsCooked3), 54 ), + POTIONS_COOKED_4(Game.getVar(R.string.Badges_PotionsCooked4), 55 ), + NO_MONSTERS_SLAIN(Game.getVar(R.string.Badges_NoMonsterSlain), 28 ), + GRIM_WEAPON(Game.getVar(R.string.Badges_GrimWepon), 29 ), + PIRANHAS(Game.getVar(R.string.Badges_Piranhas), 30 ), + NIGHT_HUNTER(Game.getVar(R.string.Badges_NightHunter), 58 ), + GAMES_PLAYED_1(Game.getVar(R.string.Badges_GamesPlayed1), 60, true ), + GAMES_PLAYED_2(Game.getVar(R.string.Badges_GamesPlayed2), 61, true ), + GAMES_PLAYED_3(Game.getVar(R.string.Badges_GamesPlayed3), 62, true ), + GAMES_PLAYED_4(Game.getVar(R.string.Badges_GamesPlayed4), 63, true ), + HAPPY_END(Game.getVar(R.string.Badges_HappyEnd), 38 ), + CHAMPION(Game.getVar(R.string.Badges_Champion), 39, true ), + SUPPORTER(Game.getVar(R.string.Badges_Supporter), 31, true ); public boolean meta; @@ -408,19 +407,19 @@ public static void validateItemLevelAquired( Item item ) { Badge badge = null; - if (!local.contains( Badge.ITEM_LEVEL_1 ) && item.level >= 3) { + if (!local.contains( Badge.ITEM_LEVEL_1 ) && item.level() >= 3) { badge = Badge.ITEM_LEVEL_1; local.add( badge ); } - if (!local.contains( Badge.ITEM_LEVEL_2 ) && item.level >= 6) { + if (!local.contains( Badge.ITEM_LEVEL_2 ) && item.level() >= 6) { badge = Badge.ITEM_LEVEL_2; local.add( badge ); } - if (!local.contains( Badge.ITEM_LEVEL_3 ) && item.level >= 9) { + if (!local.contains( Badge.ITEM_LEVEL_3 ) && item.level() >= 9) { badge = Badge.ITEM_LEVEL_3; local.add( badge ); } - if (!local.contains( Badge.ITEM_LEVEL_4 ) && item.level >= 12) { + if (!local.contains( Badge.ITEM_LEVEL_4 ) && item.level() >= 12) { badge = Badge.ITEM_LEVEL_4; local.add( badge ); } @@ -861,7 +860,7 @@ private static void displayBadge( Badge badge ) { if (global.contains( badge )) { if (!badge.meta) { - GLog.h( "Badge endorsed: %s", badge.description ); + GLog.h(Game.getVar(R.string.Badges_Info1), badge.description ); } } else { @@ -870,9 +869,9 @@ private static void displayBadge( Badge badge ) { saveNeeded = true; if (badge.meta) { - GLog.h( "New super badge: %s", badge.description ); + GLog.h(Game.getVar(R.string.Badges_Info2), badge.description ); } else { - GLog.h( "New badge: %s", badge.description ); + GLog.h(Game.getVar(R.string.Badges_Info3), badge.description ); } PixelScene.showBadge( badge ); } @@ -892,11 +891,11 @@ public static List filtered( boolean global ) { HashSet filtered = new HashSet( global ? Badges.global : Badges.local ); - if (!global) { + { Iterator iterator = filtered.iterator(); while (iterator.hasNext()) { Badge badge = iterator.next(); - if (badge.meta) { + if ((!global && badge.meta) || badge.image == -1) { iterator.remove(); } } @@ -915,7 +914,13 @@ public static List filtered( boolean global ) { leaveBest( filtered, Badge.DEATH_FROM_GAS, Badge.YASD ); leaveBest( filtered, Badge.DEATH_FROM_HUNGER, Badge.YASD ); leaveBest( filtered, Badge.DEATH_FROM_POISON, Badge.YASD ); + leaveBest( filtered, Badge.ALL_POTIONS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED ); + leaveBest( filtered, Badge.ALL_SCROLLS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED ); + leaveBest( filtered, Badge.ALL_RINGS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED ); + leaveBest( filtered, Badge.ALL_WANDS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED ); leaveBest( filtered, Badge.VICTORY, Badge.VICTORY_ALL_CLASSES ); + leaveBest( filtered, Badge.VICTORY, Badge.HAPPY_END ); + leaveBest( filtered, Badge.VICTORY, Badge.CHAMPION ); leaveBest( filtered, Badge.GAMES_PLAYED_1, Badge.GAMES_PLAYED_2, Badge.GAMES_PLAYED_3, Badge.GAMES_PLAYED_4 ); ArrayList list = new ArrayList( filtered ); diff --git a/src/com/watabou/pixeldungeon/Bones.java b/src/com/watabou/pixeldungeon/Bones.java index 52f8076bfc..05f0636937 100644 --- a/src/com/watabou/pixeldungeon/Bones.java +++ b/src/com/watabou/pixeldungeon/Bones.java @@ -105,8 +105,8 @@ public static Item get() { item.cursedKnown = true; if (item.isUpgradable()) { int lvl = (Dungeon.depth - 1) * 3 / 5 + 1; - if (lvl < item.level) { - item.degrade( item.level - lvl ); + if (lvl < item.level()) { + item.degrade( item.level() - lvl ); } item.levelKnown = false; } diff --git a/src/com/watabou/pixeldungeon/Challenges.java b/src/com/watabou/pixeldungeon/Challenges.java index 6644232e15..5c269ca0cc 100644 --- a/src/com/watabou/pixeldungeon/Challenges.java +++ b/src/com/watabou/pixeldungeon/Challenges.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon; +import com.watabou.noosa.Game; + public class Challenges { public static final int NO_FOOD = 1; @@ -27,15 +29,7 @@ public class Challenges { public static final int DARKNESS = 32; public static final int NO_SCROLLS = 64; - public static final String[] NAMES = { - "On diet", - "Faith is my armor", - "Pharmacophobia", - "Barren land", - "Swarm intelligence", - "Into darkness", - "Forbidden runes" - }; + public static final String[] NAMES = Game.getVars(R.array.Challenges_Names); public static final int[] MASKS = { NO_FOOD, NO_ARMOR, NO_HEALING, NO_HERBALISM, SWARM_INTELLIGENCE, DARKNESS, NO_SCROLLS diff --git a/src/com/watabou/pixeldungeon/Chrome.java b/src/com/watabou/pixeldungeon/Chrome.java index 7a11abbb13..41a3d21a00 100644 --- a/src/com/watabou/pixeldungeon/Chrome.java +++ b/src/com/watabou/pixeldungeon/Chrome.java @@ -42,7 +42,7 @@ public static NinePatch get( Type type ) { case TOAST_TR: return new NinePatch( Assets.CHROME, 40, 0, 18, 18, 5 ); case BUTTON: - return new NinePatch( Assets.CHROME, 58, 0, 4, 4, 1 ); + return new NinePatch( Assets.CHROME, 58, 0, 6, 6, 2 ); case TAG: return new NinePatch( Assets.CHROME, 22, 18, 16, 14, 3 ); case SCROLL: diff --git a/src/com/watabou/pixeldungeon/Dungeon.java b/src/com/watabou/pixeldungeon/Dungeon.java index ca15741923..f24f94281a 100644 --- a/src/com/watabou/pixeldungeon/Dungeon.java +++ b/src/com/watabou/pixeldungeon/Dungeon.java @@ -30,6 +30,7 @@ import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Amok; import com.watabou.pixeldungeon.actors.buffs.Light; +import com.watabou.pixeldungeon.actors.buffs.Rage; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.hero.HeroClass; import com.watabou.pixeldungeon.actors.mobs.npcs.Blacksmith; @@ -75,7 +76,6 @@ public class Dungeon { public static int scrollsOfUpgrade; public static int scrollsOfEnchantment; public static boolean dewVial; // true if the dew vial can be spawned - public static int transmutation; // depth number for a well of transmutation public static int challenges; @@ -121,7 +121,6 @@ public static void init() { scrollsOfUpgrade = 0; scrollsOfEnchantment = 0; dewVial = true; - transmutation = Random.IntRange( 6, 14 ); chapters = new HashSet(); @@ -322,8 +321,8 @@ private static boolean chance( int[] quota, int number ) { private static final String VERSION = "version"; private static final String CHALLENGES = "challenges"; - private static final String HERO = "hero"; - private static final String GOLD = "gold"; + private static final String HERO = "hero"; + private static final String GOLD = "gold"; private static final String DEPTH = "depth"; private static final String LEVEL = "level"; private static final String DROPPED = "dropped%d"; @@ -331,11 +330,11 @@ private static boolean chance( int[] quota, int number ) { private static final String SOU = "scrollsOfEnhancement"; private static final String SOE = "scrollsOfEnchantment"; private static final String DV = "dewVial"; - private static final String WT = "transmutation"; private static final String CHAPTERS = "chapters"; private static final String QUESTS = "quests"; private static final String BADGES = "badges"; - + + public static String gameFile( HeroClass cl ) { switch (cl) { case WARRIOR: @@ -380,7 +379,6 @@ public static void saveGame( String fileName ) throws IOException { bundle.put( SOU, scrollsOfUpgrade ); bundle.put( SOE, scrollsOfEnchantment ); bundle.put( DV, dewVial ); - bundle.put( WT, transmutation ); int count = 0; int ids[] = new int[chapters.size()]; @@ -478,7 +476,6 @@ public static void loadGame( String fileName, boolean fullLoad ) throws IOExcept scrollsOfUpgrade = bundle.getInt( SOU ); scrollsOfEnchantment = bundle.getInt( SOE ); dewVial = bundle.getBoolean( DV ); - transmutation = bundle.getInt( WT ); if (fullLoad) { chapters = new HashSet(); @@ -625,7 +622,7 @@ public static int findPath( Char ch, int from, int to, boolean pass[], boolean[] return Actor.findChar( to ) == null && (pass[to] || Level.avoid[to]) ? to : -1; } - if (ch.flying || ch.buff( Amok.class ) != null) { + if (ch.flying || ch.buff( Amok.class ) != null || ch.buff( Rage.class ) != null) { BArray.or( pass, Level.avoid, passable ); } else { System.arraycopy( pass, 0, passable, 0, Level.LENGTH ); diff --git a/src/com/watabou/pixeldungeon/Journal.java b/src/com/watabou/pixeldungeon/Journal.java index d1e636f73b..ee718f4164 100644 --- a/src/com/watabou/pixeldungeon/Journal.java +++ b/src/com/watabou/pixeldungeon/Journal.java @@ -19,23 +19,25 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.utils.Bundlable; import com.watabou.utils.Bundle; public class Journal { public static enum Feature { - WELL_OF_HEALTH ( "Well of Health" ), - WELL_OF_AWARENESS ( "Well of Awareness" ), - WELL_OF_TRANSMUTATION ( "Well of Transmutation" ), - ALCHEMY ( "Alchemy pot" ), - GARDEN ( "Garden" ), - STATUE ( "Animated statue" ), + WELL_OF_HEALTH (Game.getVar(R.string.Journal_WellHealt)), + WELL_OF_AWARENESS (Game.getVar(R.string.Journal_WellAwareness)), + WELL_OF_TRANSMUTATION(Game.getVar(R.string.Journal_WellTransmut)), + SACRIFICIAL_FIRE (Game.getVar(R.string.Journal_SacrFire)), + ALCHEMY (Game.getVar(R.string.Journal_Alchemy)), + GARDEN (Game.getVar(R.string.Journal_Garden)), + STATUE (Game.getVar(R.string.Journal_Statue)), - GHOST ( "Sad ghost" ), - WANDMAKER ( "Old wandmaker" ), - TROLL ( "Troll blacksmith" ), - IMP ( "Ambitious imp" ); + GHOST (Game.getVar(R.string.Journal_Ghost)), + WANDMAKER (Game.getVar(R.string.Journal_Wandmaker)), + TROLL (Game.getVar(R.string.Journal_Troll)), + IMP (Game.getVar(R.string.Journal_Imp)); public String desc; diff --git a/src/com/watabou/pixeldungeon/LightMap.java b/src/com/watabou/pixeldungeon/LightMap.java deleted file mode 100644 index 950ac09ba0..0000000000 --- a/src/com/watabou/pixeldungeon/LightMap.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.watabou.pixeldungeon; - -import android.graphics.Bitmap; - -import com.watabou.gltextures.SmartTexture; -import com.watabou.gltextures.TextureCache; -import com.watabou.glwrap.Texture; -import com.watabou.noosa.Image; -import com.watabou.pixeldungeon.levels.Level; -import com.watabou.utils.Random; - -public class LightMap extends Image { - - private int[] pixels; - - private int pWidth; - private int pHeight; - - private int width2; - private int height2; - - public LightMap( int mapWidth, int mapHeight ) { - - super(); - - pWidth = mapWidth; - pHeight = mapHeight; - - width2 = 1; - while (width2 < pWidth) { - width2 <<= 1; - } - - height2 = 1; - while (height2 < pHeight) { - height2 <<= 1; - } - - float size = DungeonTilemap.SIZE; - width = width2 * size; - height = height2 * size; - - texture( new FogTexture() ); - - scale.set( - DungeonTilemap.SIZE, - DungeonTilemap.SIZE ); - - updateVisibility(); - } - - public void updateVisibility() { - - if (pixels == null) { - pixels = new int[width2 * height2]; - } - - for (int i=0; i < pixels.length; i++) { - if (Level.water[i]) { - pixels[i] = 0x00000000; - } else { - pixels[i] = (Random.Int( 0x22 ) + (Level.solid[i] ? 0x44 : 0x00)) << 24; - } - } - - texture.pixels( width2, height2, pixels ); - } - - private class FogTexture extends SmartTexture { - - public FogTexture() { - super( Bitmap.createBitmap( width2, height2, Bitmap.Config.ARGB_8888 ) ); - filter( Texture.LINEAR, Texture.LINEAR ); - TextureCache.add( LightMap.class, this ); - } - - @Override - public void reload() { - super.reload(); - updateVisibility(); - } - } -} diff --git a/src/com/watabou/pixeldungeon/PixelDungeon.java b/src/com/watabou/pixeldungeon/PixelDungeon.java index 752e71678a..e8c331cff0 100644 --- a/src/com/watabou/pixeldungeon/PixelDungeon.java +++ b/src/com/watabou/pixeldungeon/PixelDungeon.java @@ -48,7 +48,7 @@ public PixelDungeon() { com.watabou.pixeldungeon.items.rings.RingOfMending.class, "com.watabou.pixeldungeon.items.rings.RingOfRejuvenation" ); com.watabou.utils.Bundle.addAlias( - com.watabou.pixeldungeon.items.wands.WandOfTelekinesis.class, + com.watabou.pixeldungeon.items.wands.WandOfReach.class, "com.watabou.pixeldungeon.items.wands.WandOfTelekenesis" ); com.watabou.utils.Bundle.addAlias( com.watabou.pixeldungeon.actors.blobs.Foliage.class, @@ -71,7 +71,7 @@ public PixelDungeon() { "com.watabou.pixeldungeon.items.DriedRose" ); com.watabou.utils.Bundle.addAlias( com.watabou.pixeldungeon.actors.mobs.npcs.MirrorImage.class, - "com.watabou.pixeldungeon.items.scrolls.ScrollOfMirrorImage.MirrorImage" ); + "com.watabou.pixeldungeon.items.scrolls.ScrollOfMirrorImage$MirrorImage" ); // 1.6.4 com.watabou.utils.Bundle.addAlias( com.watabou.pixeldungeon.items.rings.RingOfElements.class, @@ -106,12 +106,28 @@ public PixelDungeon() { com.watabou.utils.Bundle.addAlias( com.watabou.pixeldungeon.items.scrolls.ScrollOfEnchantment.class, "com.watabou.pixeldungeon.items.Stylus" ); + // 1.8.0 + com.watabou.utils.Bundle.addAlias( + com.watabou.pixeldungeon.actors.mobs.FetidRat.class, + "com.watabou.pixeldungeon.actors.mobs.npcs.Ghost$FetidRat" ); + com.watabou.utils.Bundle.addAlias( + com.watabou.pixeldungeon.plants.Rotberry.class, + "com.watabou.pixeldungeon.actors.mobs.npcs.Wandmaker$Rotberry" ); + com.watabou.utils.Bundle.addAlias( + com.watabou.pixeldungeon.plants.Rotberry.Seed.class, + "com.watabou.pixeldungeon.actors.mobs.npcs.Wandmaker$Rotberry$Seed" ); + // 1.9.0 + com.watabou.utils.Bundle.addAlias( + com.watabou.pixeldungeon.items.wands.WandOfReach.class, + "com.watabou.pixeldungeon.items.wands.WandOfTelekinesis" ); } @Override protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); + useLocale(language()); + updateImmersiveMode(); DisplayMetrics metrics = new DisplayMetrics(); @@ -336,6 +352,23 @@ public static void intro( boolean value ) { public static boolean intro() { return Preferences.INSTANCE.getBoolean( Preferences.KEY_INTRO, true ); } + + public static void secondQuickslot( boolean value ) { + Preferences.INSTANCE.put( Preferences.KEY_2QUICK, value ); + } + + public static boolean secondQuickslot() { + return Preferences.INSTANCE.getBoolean( Preferences.KEY_2QUICK, false ); + } + + public static void language( String value ) { + Preferences.INSTANCE.put( Preferences.KEY_LANGUAGE, value ); + instance.doRestart(); + } + + public static String language() { + return Preferences.INSTANCE.getString( Preferences.KEY_LANGUAGE, "def" ); + } /* * <--- Preferences diff --git a/src/com/watabou/pixeldungeon/Preferences.java b/src/com/watabou/pixeldungeon/Preferences.java index d10edec1dd..4138943d38 100644 --- a/src/com/watabou/pixeldungeon/Preferences.java +++ b/src/com/watabou/pixeldungeon/Preferences.java @@ -37,6 +37,8 @@ enum Preferences { public static final String KEY_DONATED = "donated"; public static final String KEY_INTRO = "intro"; public static final String KEY_BRIGHTNESS = "brightness"; + public static final String KEY_2QUICK = "2quick_slot"; + public static final String KEY_LANGUAGE = "language"; private SharedPreferences prefs; diff --git a/src/com/watabou/pixeldungeon/Rankings.java b/src/com/watabou/pixeldungeon/Rankings.java index 47083db862..9d97d6c58f 100644 --- a/src/com/watabou/pixeldungeon/Rankings.java +++ b/src/com/watabou/pixeldungeon/Rankings.java @@ -97,7 +97,7 @@ public void submit( boolean win ) { } private int score( boolean win ) { - return (Statistics.goldCollected + Dungeon.hero.lvl * Dungeon.depth * 100) * (win ? 2 : 1); + return (Statistics.goldCollected + Dungeon.hero.lvl * Statistics.deepestFloor * 100) * (win ? 2 : 1); } private static final String RECORDS = "records"; diff --git a/src/com/watabou/pixeldungeon/ResultDescriptions.java b/src/com/watabou/pixeldungeon/ResultDescriptions.java index a244ce4c29..df5e5acfae 100644 --- a/src/com/watabou/pixeldungeon/ResultDescriptions.java +++ b/src/com/watabou/pixeldungeon/ResultDescriptions.java @@ -17,27 +17,30 @@ */ package com.watabou.pixeldungeon; +import com.watabou.noosa.Game; + public class ResultDescriptions { // Mobs - public static final String MOB = "Killed by %s on level %d"; - public static final String BOSS = "Killed by the %s on level %d"; + public static final String MOB = Game.getVar(R.string.ResultDescriptions_Mob); + public static final String BOSS = Game.getVar(R.string.ResultDescriptions_Boss); // Items - public static final String WAND = "Killed by your own %s on level %d"; - public static final String GLYPH = "Killed by the %s on level %d"; + public static final String WAND = Game.getVar(R.string.ResultDescriptions_Wand); + public static final String GLYPH = Game.getVar(R.string.ResultDescriptions_Glyph); + public static final String BOMB = Game.getVar(R.string.ResultDescriptions_Bomb); // Dungeon features - public static final String TRAP = "Killed by discharge of %s on level %d"; + public static final String TRAP = Game.getVar(R.string.ResultDescriptions_Trap); // Debuffs & blobs - public static final String BURNING = "Burned to death on level %d"; - public static final String HUNGER = "Starved to death on level %d"; - public static final String POISON = "Died from poison on level %d"; - public static final String GAS = "Died from toxic gas on level %d"; - public static final String BLEEDING = "Bled to death on level %d"; - public static final String OOZE = "Killed by a caustic ooze on level %d"; - public static final String FALL = "Fell to death on level %d"; + public static final String BURNING = Game.getVar(R.string.ResultDescriptions_Burning); + public static final String HUNGER = Game.getVar(R.string.ResultDescriptions_Hunger); + public static final String POISON = Game.getVar(R.string.ResultDescriptions_Poison); + public static final String GAS = Game.getVar(R.string.ResultDescriptions_Gas); + public static final String BLEEDING = Game.getVar(R.string.ResultDescriptions_Bleeding); + public static final String OOZE = Game.getVar(R.string.ResultDescriptions_Ooze); + public static final String FALL = Game.getVar(R.string.ResultDescriptions_Fall); - public static final String WIN = "Obtained the Amulet of Yendor"; + public static final String WIN = Game.getVar(R.string.ResultDescriptions_Win); } diff --git a/src/com/watabou/pixeldungeon/ScrollOfDebugging.java b/src/com/watabou/pixeldungeon/ScrollOfDebugging.java deleted file mode 100644 index 8773e3021d..0000000000 --- a/src/com/watabou/pixeldungeon/ScrollOfDebugging.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.watabou.pixeldungeon; - -import java.util.ArrayList; - -import com.watabou.pixeldungeon.actors.hero.Hero; -import com.watabou.pixeldungeon.items.Item; -import com.watabou.pixeldungeon.items.scrolls.ScrollOfEnchantment; - -public class ScrollOfDebugging extends Item { - - { - name = "Scroll of Debugging"; - image = 40; - } - - public static final String AC_READ = "READ"; - - @Override - public ArrayList actions( Hero hero ) { - ArrayList actions = super.actions( hero ); - actions.add( AC_READ ); - return actions; - } - - @Override - public void execute( Hero hero, String action ) { - if (action.equals( AC_READ )) { - - new ScrollOfEnchantment().collect(); - - } else { - - super.execute( hero, action ); - - } - } - - @Override - public boolean isUpgradable() { - return false; - } - - @Override - public boolean isIdentified() { - return true; - } -} diff --git a/src/com/watabou/pixeldungeon/Statistics.java b/src/com/watabou/pixeldungeon/Statistics.java index 69c79bc373..f3a276f27a 100644 --- a/src/com/watabou/pixeldungeon/Statistics.java +++ b/src/com/watabou/pixeldungeon/Statistics.java @@ -61,7 +61,7 @@ public static void reset() { private static final String SLAIN = "enemiesSlain"; private static final String FOOD = "foodEaten"; private static final String ALCHEMY = "potionsCooked"; - private static final String PIRANHAS = "priranhas"; + private static final String PIRANHAS = "piranhas"; private static final String NIGHT = "nightHunt"; private static final String ANKHS = "ankhsUsed"; private static final String DURATION = "duration"; diff --git a/src/com/watabou/pixeldungeon/actors/Char.java b/src/com/watabou/pixeldungeon/actors/Char.java index 65bb59224b..270fa52638 100644 --- a/src/com/watabou/pixeldungeon/actors/Char.java +++ b/src/com/watabou/pixeldungeon/actors/Char.java @@ -19,10 +19,12 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.noosa.Camera; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.buffs.Amok; import com.watabou.pixeldungeon.actors.buffs.Bleeding; @@ -62,20 +64,20 @@ public abstract class Char extends Actor { - protected static final String TXT_HIT = "%s hit %s"; - protected static final String TXT_KILL = "%s killed you..."; - protected static final String TXT_DEFEAT = "%s defeated %s"; + protected static final String TXT_HIT = Game.getVar(R.string.Char_Hit); + protected static final String TXT_KILL = Game.getVar(R.string.Char_Kill); + protected static final String TXT_DEFEAT = Game.getVar(R.string.Char_Defeat); - private static final String TXT_YOU_MISSED = "%s %s your attack"; - private static final String TXT_SMB_MISSED = "%s %s %s's attack"; + private static final String TXT_YOU_MISSED = Game.getVar(R.string.Char_YouMissed); + private static final String TXT_SMB_MISSED = Game.getVar(R.string.Char_SmbMissed); - private static final String TXT_OUT_OF_PARALYSIS = "The pain snapped %s out of paralysis"; + private static final String TXT_OUT_OF_PARALYSIS = Game.getVar(R.string.Char_OutParalysis); public int pos = 0; public CharSprite sprite; - public String name = "mob"; + public String name = Game.getVar(R.string.Char_Name); public int HT; public int HP; @@ -225,7 +227,7 @@ public int defenseSkill( Char enemy ) { } public String defenseVerb() { - return "dodged"; + return Game.getVar(R.string.Char_StaDodged); } public int dr() { @@ -357,45 +359,45 @@ public void add( Buff buff ) { if (buff instanceof Poison) { CellEmitter.center( pos ).burst( PoisonParticle.SPLASH, 5 ); - sprite.showStatus( CharSprite.NEGATIVE, "poisoned" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Char_StaPoisoned)); } else if (buff instanceof Amok) { - sprite.showStatus( CharSprite.NEGATIVE, "amok" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Char_StaAmok)); } else if (buff instanceof Slow) { - sprite.showStatus( CharSprite.NEGATIVE, "slowed" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Char_StaSlowed)); } else if (buff instanceof MindVision) { - sprite.showStatus( CharSprite.POSITIVE, "mind" ); - sprite.showStatus( CharSprite.POSITIVE, "vision" ); + sprite.showStatus( CharSprite.POSITIVE, Game.getVar(R.string.Char_StaMind)); + sprite.showStatus( CharSprite.POSITIVE, Game.getVar(R.string.Char_StaVision)); } else if (buff instanceof Paralysis) { sprite.add( CharSprite.State.PARALYSED ); - sprite.showStatus( CharSprite.NEGATIVE, "paralysed" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Char_StaParalysed)); } else if (buff instanceof Terror) { - sprite.showStatus( CharSprite.NEGATIVE, "frightened" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Char_StaFrightened)); } else if (buff instanceof Roots) { - sprite.showStatus( CharSprite.NEGATIVE, "rooted" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Char_StaRooted)); } else if (buff instanceof Cripple) { - sprite.showStatus( CharSprite.NEGATIVE, "crippled" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Char_StaCrippled)); } else if (buff instanceof Bleeding) { - sprite.showStatus( CharSprite.NEGATIVE, "bleeding" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Char_StaBleeding)); } else if (buff instanceof Vertigo) { - sprite.showStatus( CharSprite.NEGATIVE, "dizzy" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Char_StaDizzy)); } else if (buff instanceof Sleep) { sprite.idle(); @@ -409,7 +411,7 @@ else if (buff instanceof Burning) { sprite.add( CharSprite.State.FROZEN ); } else if (buff instanceof Invisibility) { if (!(buff instanceof Shadows)) { - sprite.showStatus( CharSprite.POSITIVE, "invisible" ); + sprite.showStatus( CharSprite.POSITIVE, Game.getVar(R.string.Char_StaInvisible)); } sprite.add( CharSprite.State.INVISIBLE ); } diff --git a/src/com/watabou/pixeldungeon/actors/blobs/ConfusionGas.java b/src/com/watabou/pixeldungeon/actors/blobs/ConfusionGas.java index 4e35baf341..6a376dfdfa 100644 --- a/src/com/watabou/pixeldungeon/actors/blobs/ConfusionGas.java +++ b/src/com/watabou/pixeldungeon/actors/blobs/ConfusionGas.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.blobs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -47,6 +49,6 @@ public void use( BlobEmitter emitter ) { @Override public String tileDesc() { - return "A cloud of confusion gas is swirling here."; + return Game.getVar(R.string.ConfusionGas_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/blobs/Fire.java b/src/com/watabou/pixeldungeon/actors/blobs/Fire.java index 7d5fc266fa..f428f3ece5 100644 --- a/src/com/watabou/pixeldungeon/actors/blobs/Fire.java +++ b/src/com/watabou/pixeldungeon/actors/blobs/Fire.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.blobs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -26,7 +28,6 @@ import com.watabou.pixeldungeon.effects.particles.FlameParticle; import com.watabou.pixeldungeon.items.Heap; import com.watabou.pixeldungeon.levels.Level; -import com.watabou.pixeldungeon.levels.Terrain; import com.watabou.pixeldungeon.scenes.GameScene; public class Fire extends Blob { @@ -53,7 +54,7 @@ protected void evolve() { if (fire <= 0 && flamable[pos]) { int oldTile = Dungeon.level.map[pos]; - Level.set( pos, Terrain.EMBERS ); + Dungeon.level.destroy( pos ); observe = true; GameScene.updateMap( pos ); @@ -109,6 +110,6 @@ public void use( BlobEmitter emitter ) { @Override public String tileDesc() { - return "A fire is raging here."; + return Game.getVar(R.string.Fire_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/blobs/Foliage.java b/src/com/watabou/pixeldungeon/actors/blobs/Foliage.java index 5f7b47772a..1c249e2883 100644 --- a/src/com/watabou/pixeldungeon/actors/blobs/Foliage.java +++ b/src/com/watabou/pixeldungeon/actors/blobs/Foliage.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.actors.blobs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.Journal; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Shadows; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -81,6 +83,6 @@ public void use( BlobEmitter emitter ) { @Override public String tileDesc() { - return "Shafts of light pierce the gloom of the underground garden."; + return Game.getVar(R.string.Foliage_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/blobs/ParalyticGas.java b/src/com/watabou/pixeldungeon/actors/blobs/ParalyticGas.java index 0e4c9f45d7..0514bcd42f 100644 --- a/src/com/watabou/pixeldungeon/actors/blobs/ParalyticGas.java +++ b/src/com/watabou/pixeldungeon/actors/blobs/ParalyticGas.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.blobs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -47,6 +49,6 @@ public void use( BlobEmitter emitter ) { @Override public String tileDesc() { - return "A cloud of paralytic gas is swirling here."; + return Game.getVar(R.string.ParalyticGas_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/blobs/Regrowth.java b/src/com/watabou/pixeldungeon/actors/blobs/Regrowth.java index 9752adb620..846eaf212c 100644 --- a/src/com/watabou/pixeldungeon/actors/blobs/Regrowth.java +++ b/src/com/watabou/pixeldungeon/actors/blobs/Regrowth.java @@ -41,16 +41,21 @@ protected void evolve() { for (int i=0; i < LENGTH; i++) { if (off[i] > 0) { int c = Dungeon.level.map[i]; + int c1 = c; if (c == Terrain.EMPTY || c == Terrain.EMBERS || c == Terrain.EMPTY_DECO) { - - Level.set( i, cur[i] > 9 ? Terrain.HIGH_GRASS : Terrain.GRASS ); - mapUpdated = true; - + c1 = cur[i] > 9 ? Terrain.HIGH_GRASS : Terrain.GRASS; } else if (c == Terrain.GRASS && cur[i] > 9) { - + c1 = Terrain.HIGH_GRASS ; + } + + if (c1 != c) { Level.set( i, Terrain.HIGH_GRASS ); mapUpdated = true; + GameScene.updateMap( i ); + if (Dungeon.visible[i]) { + GameScene.discoverTile( i, c ); + } } Char ch = Actor.findChar( i ); @@ -61,7 +66,6 @@ protected void evolve() { } if (mapUpdated) { - GameScene.updateMap(); Dungeon.observe(); } } diff --git a/src/com/watabou/pixeldungeon/actors/blobs/SacrificialFire.java b/src/com/watabou/pixeldungeon/actors/blobs/SacrificialFire.java new file mode 100644 index 0000000000..2f96c1d45f --- /dev/null +++ b/src/com/watabou/pixeldungeon/actors/blobs/SacrificialFire.java @@ -0,0 +1,159 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.actors.blobs; + +import com.watabou.noosa.Game; +import com.watabou.noosa.audio.Sample; +import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.DungeonTilemap; +import com.watabou.pixeldungeon.Journal; +import com.watabou.pixeldungeon.Journal.Feature; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.actors.Actor; +import com.watabou.pixeldungeon.actors.Char; +import com.watabou.pixeldungeon.actors.buffs.Buff; +import com.watabou.pixeldungeon.actors.buffs.FlavourBuff; +import com.watabou.pixeldungeon.actors.hero.Hero; +import com.watabou.pixeldungeon.actors.mobs.Mob; +import com.watabou.pixeldungeon.effects.BlobEmitter; +import com.watabou.pixeldungeon.effects.Flare; +import com.watabou.pixeldungeon.effects.Wound; +import com.watabou.pixeldungeon.effects.particles.SacrificialParticle; +import com.watabou.pixeldungeon.items.scrolls.ScrollOfWipeOut; +import com.watabou.pixeldungeon.scenes.GameScene; +import com.watabou.pixeldungeon.ui.BuffIndicator; +import com.watabou.pixeldungeon.utils.GLog; +import com.watabou.utils.Bundle; +import com.watabou.utils.Random; + +public class SacrificialFire extends Blob { + + private static final String TXT_WORTHY = Game.getVar(R.string.SacrificialFire_Worthy); + private static final String TXT_UNWORTHY = Game.getVar(R.string.SacrificialFire_UnWorthy); + private static final String TXT_REWARD = Game.getVar(R.string.SacrificialFire_Reward); + + protected int pos; + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + + for (int i=0; i < LENGTH; i++) { + if (cur[i] > 0) { + pos = i; + break; + } + } + } + + @Override + protected void evolve() { + volume = off[pos] = cur[pos]; + Char ch = Actor.findChar( pos ); + if (ch != null) { + if (Dungeon.visible[pos] && ch.buff( Marked.class ) == null) { + ch.sprite.emitter().burst( SacrificialParticle.FACTORY, 20 ); + Sample.INSTANCE.play( Assets.SND_BURNING ); + } + Buff.prolong( ch, Marked.class, Marked.DURATION ); + } + if (Dungeon.visible[pos]) { + Journal.add( Feature.SACRIFICIAL_FIRE ); + } + } + + @Override + public void seed( int cell, int amount ) { + cur[pos] = 0; + pos = cell; + volume = cur[pos] = amount; + } + + @Override + public void use( BlobEmitter emitter ) { + super.use( emitter ); + + emitter.pour( SacrificialParticle.FACTORY, 0.04f ); + } + + public static void sacrifice( Char ch ) { + + Wound.hit( ch ); + + SacrificialFire fire = (SacrificialFire)Dungeon.level.blobs.get( SacrificialFire.class ); + if (fire != null) { + + int exp = 0; + if (ch instanceof Mob) { + exp = ((Mob)ch).exp() * Random.IntRange( 1, 3 ); + } else if (ch instanceof Hero) { + exp = ((Hero)ch).maxExp(); + } + + if (exp > 0) { + + int volume = fire.volume - exp; + if (volume > 0) { + fire.seed( fire.pos, volume ); + GLog.w( TXT_WORTHY ); + } else { + fire.seed( fire.pos, 0 ); + Journal.remove( Feature.SACRIFICIAL_FIRE ); + + GLog.w( TXT_REWARD ); + GameScene.effect( new Flare( 7, 32 ).color( 0x66FFFF, true ).show( ch.sprite.parent, DungeonTilemap.tileCenterToWorld( fire.pos ), 2f ) ); + Dungeon.level.drop( new ScrollOfWipeOut(), fire.pos ).sprite.drop(); + } + } else { + + GLog.w( TXT_UNWORTHY ); + + } + } + } + + @Override + public String tileDesc() { + return Game.getVar(R.string.SacrificialFire_Desc); + } + + public static class Marked extends FlavourBuff { + + public static final float DURATION = 5f; + + @Override + public int icon() { + return BuffIndicator.SACRIFICE; + } + + @Override + public String toString() { + return Game.getVar(R.string.SacrificialFire_Marked); + } + + @Override + public void detach() { + if (!target.isAlive()) { + sacrifice( target ); + } + super.detach(); + } + } + +} diff --git a/src/com/watabou/pixeldungeon/actors/blobs/ToxicGas.java b/src/com/watabou/pixeldungeon/actors/blobs/ToxicGas.java index 9f9d1c7aca..cc49370434 100644 --- a/src/com/watabou/pixeldungeon/actors/blobs/ToxicGas.java +++ b/src/com/watabou/pixeldungeon/actors/blobs/ToxicGas.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.actors.blobs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; @@ -80,7 +82,7 @@ public void use( BlobEmitter emitter ) { @Override public String tileDesc() { - return "A greenish cloud of toxic gas is swirling here."; + return Game.getVar(R.string.ToxicGas_Info); } @Override @@ -89,6 +91,6 @@ public void onDeath() { Badges.validateDeathFromGas(); Dungeon.fail( Utils.format( ResultDescriptions.GAS, Dungeon.depth ) ); - GLog.n( "You died from a toxic gas.." ); + GLog.n(Game.getVar(R.string.ToxicGas_Info1)); } } diff --git a/src/com/watabou/pixeldungeon/actors/blobs/WaterOfAwareness.java b/src/com/watabou/pixeldungeon/actors/blobs/WaterOfAwareness.java index 7c5a5d0476..a65c1bae42 100644 --- a/src/com/watabou/pixeldungeon/actors/blobs/WaterOfAwareness.java +++ b/src/com/watabou/pixeldungeon/actors/blobs/WaterOfAwareness.java @@ -17,6 +17,7 @@ */ package com.watabou.pixeldungeon.actors.blobs; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; @@ -24,6 +25,7 @@ import com.watabou.pixeldungeon.DungeonTilemap; import com.watabou.pixeldungeon.Journal; import com.watabou.pixeldungeon.Journal.Feature; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Awareness; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -38,10 +40,7 @@ public class WaterOfAwareness extends WellWater { - private static final String TXT_PROCCED = - "As you take a sip, you feel the knowledge pours into your mind. " + - "Now you know everything about your equipped items. Also you sense " + - "all items on the level and know all its secrets."; + private static final String TXT_PROCCED = Game.getVar(R.string.WaterOfAwareness_Procced); @Override protected boolean affectHero( Hero hero ) { @@ -101,8 +100,6 @@ public void use( BlobEmitter emitter ) { @Override public String tileDesc() { - return - "Power of knowledge radiates from the water of this well. " + - "Take a sip from it to reveal all secrets of equipped items."; + return Game.getVar(R.string.WaterOfAwareness_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/blobs/WaterOfHealth.java b/src/com/watabou/pixeldungeon/actors/blobs/WaterOfHealth.java index c01860a1ae..0eb74d8d81 100644 --- a/src/com/watabou/pixeldungeon/actors/blobs/WaterOfHealth.java +++ b/src/com/watabou/pixeldungeon/actors/blobs/WaterOfHealth.java @@ -17,11 +17,13 @@ */ package com.watabou.pixeldungeon.actors.blobs; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.Journal; import com.watabou.pixeldungeon.Journal.Feature; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Hunger; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.effects.BlobEmitter; @@ -35,8 +37,7 @@ public class WaterOfHealth extends WellWater { - private static final String TXT_PROCCED = - "As you take a sip, you feel your wounds heal completely."; + private static final String TXT_PROCCED = Game.getVar(R.string.WaterOfHealth_Procced); @Override protected boolean affectHero( Hero hero ) { @@ -62,6 +63,7 @@ protected boolean affectHero( Hero hero ) { protected Item affectItem( Item item ) { if (item instanceof DewVial && !((DewVial)item).isFull()) { ((DewVial)item).fill(); + Journal.remove( Feature.WELL_OF_HEALTH ); return item; } @@ -76,8 +78,6 @@ public void use( BlobEmitter emitter ) { @Override public String tileDesc() { - return - "Power of health radiates from the water of this well. " + - "Take a sip from it to heal your wounds and satisfy hunger."; + return Game.getVar(R.string.WaterOfHealth_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/blobs/WaterOfTransmutation.java b/src/com/watabou/pixeldungeon/actors/blobs/WaterOfTransmutation.java index 96d229385d..67423e47b4 100644 --- a/src/com/watabou/pixeldungeon/actors/blobs/WaterOfTransmutation.java +++ b/src/com/watabou/pixeldungeon/actors/blobs/WaterOfTransmutation.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.actors.blobs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Journal; import com.watabou.pixeldungeon.Journal.Feature; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.effects.BlobEmitter; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.items.Generator; @@ -105,7 +107,7 @@ else if (w instanceof Glaive) { if (n != null) { - int level = w.level; + int level = w.level(); if (level > 0) { n.upgrade( level ); } else if (level < 0) { @@ -134,9 +136,9 @@ private Ring changeRing( Ring r ) { n = (Ring)Generator.random( Category.RING ); } while (n.getClass() == r.getClass()); - n.level = 0; + n.level( 0 ); - int level = r.level; + int level = r.level(); if (level > 0) { n.upgrade( level ); } else if (level < 0) { @@ -157,8 +159,8 @@ private Wand changeWand( Wand w ) { n = (Wand)Generator.random( Category.WAND ); } while (n.getClass() == w.getClass()); - n.level = 0; - n.upgrade( w.level ); + n.level( 0 ); + n.upgrade( w.level() ); n.levelKnown = w.levelKnown; n.cursedKnown = w.cursedKnown; @@ -218,8 +220,6 @@ private Potion changePotion( Potion p ) { @Override public String tileDesc() { - return - "Power of change radiates from the water of this well. " + - "Throw an item into the well to turn it into something else."; + return Game.getVar(R.string.WaterOfTransmutation_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/blobs/Web.java b/src/com/watabou/pixeldungeon/actors/blobs/Web.java index c2a3db1cfb..234b7084f2 100644 --- a/src/com/watabou/pixeldungeon/actors/blobs/Web.java +++ b/src/com/watabou/pixeldungeon/actors/blobs/Web.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.blobs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -63,6 +65,6 @@ public void seed( int cell, int amount ) { @Override public String tileDesc() { - return "Everything is covered with a thick web here."; + return Game.getVar(R.string.Web_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Amok.java b/src/com/watabou/pixeldungeon/actors/buffs/Amok.java index fa965e0685..439faf772e 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Amok.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Amok.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ui.BuffIndicator; public class Amok extends FlavourBuff { @@ -28,6 +30,6 @@ public int icon() { @Override public String toString() { - return "Amok"; + return Game.getVar(R.string.Amok_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Barkskin.java b/src/com/watabou/pixeldungeon/actors/buffs/Barkskin.java index af757297f5..9198315b61 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Barkskin.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Barkskin.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ui.BuffIndicator; public class Barkskin extends Buff { @@ -58,6 +60,6 @@ public int icon() { @Override public String toString() { - return "Barkskin"; + return Game.getVar(R.string.Barkskin_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Bleeding.java b/src/com/watabou/pixeldungeon/actors/buffs/Bleeding.java index 480cbb042a..66f7103149 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Bleeding.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Bleeding.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.effects.Splash; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -57,7 +59,7 @@ public int icon() { @Override public String toString() { - return "Bleeding"; + return Game.getVar(R.string.Bleeding_Info); } @Override @@ -74,7 +76,7 @@ public boolean act() { if (target == Dungeon.hero && !target.isAlive()) { Dungeon.fail( Utils.format( ResultDescriptions.BLEEDING, Dungeon.depth ) ); - GLog.n( "You bled to death..." ); + GLog.n(Game.getVar(R.string.Bleeding_Death)); } spend( TICK ); diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Blindness.java b/src/com/watabou/pixeldungeon/actors/buffs/Blindness.java index 242119366a..fbdd9bbfcc 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Blindness.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Blindness.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ui.BuffIndicator; public class Blindness extends FlavourBuff { @@ -35,6 +37,6 @@ public int icon() { @Override public String toString() { - return "Blinded"; + return Game.getVar(R.string.Blindness_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Burning.java b/src/com/watabou/pixeldungeon/actors/buffs/Burning.java index e166a2bdbc..e86f683241 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Burning.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Burning.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.Blob; @@ -42,8 +44,8 @@ public class Burning extends Buff implements Hero.Doom { - private static final String TXT_BURNS_UP = "%s burns up!"; - private static final String TXT_BURNED_TO_DEATH = "You burned to death..."; + private static final String TXT_BURNS_UP = Game.getVar(R.string.Burning_Burns); + private static final String TXT_BURNED_TO_DEATH = Game.getVar(R.string.Burning_Death); private static final float DURATION = 8f; @@ -135,7 +137,7 @@ public int icon() { @Override public String toString() { - return "Burning"; + return Game.getVar(R.string.Burning_Info); } public static float duration( Char ch ) { diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Charm.java b/src/com/watabou/pixeldungeon/actors/buffs/Charm.java index 42a19bde4c..440df6b587 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Charm.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Charm.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.items.rings.RingOfElements.Resistance; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -48,7 +50,7 @@ public int icon() { @Override public String toString() { - return "Charmed"; + return Game.getVar(R.string.Charm_Info); } public static float durationFactor( Char ch ) { diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Combo.java b/src/com/watabou/pixeldungeon/actors/buffs/Combo.java index 696acbd3a6..264bcbdb9a 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Combo.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Combo.java @@ -17,14 +17,16 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.ui.BuffIndicator; import com.watabou.pixeldungeon.utils.GLog; public class Combo extends Buff { - private static String TXT_COMBO = "%d hit combo!"; + private static String TXT_COMBO = Game.getVar(R.string.Combo_Combo); public int count = 0; @@ -35,7 +37,7 @@ public int icon() { @Override public String toString() { - return "Combo"; + return Game.getVar(R.string.Combo_Info); } public int hit( Char enemy, int damage ) { diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Cripple.java b/src/com/watabou/pixeldungeon/actors/buffs/Cripple.java index f5267e2baa..c9cfb5e627 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Cripple.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Cripple.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ui.BuffIndicator; public class Cripple extends FlavourBuff { @@ -30,6 +32,6 @@ public int icon() { @Override public String toString() { - return "Crippled"; + return Game.getVar(R.string.Cripple_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Frost.java b/src/com/watabou/pixeldungeon/actors/buffs/Frost.java index 61e2c7e69d..31ad3c959b 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Frost.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Frost.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.Item; @@ -69,7 +71,7 @@ public int icon() { @Override public String toString() { - return "Frozen"; + return Game.getVar(R.string.Frost_Info); } public static float duration( Char ch ) { diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Fury.java b/src/com/watabou/pixeldungeon/actors/buffs/Fury.java index 8325afcdcf..5e16d78533 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Fury.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Fury.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ui.BuffIndicator; public class Fury extends Buff { @@ -41,6 +43,6 @@ public int icon() { @Override public String toString() { - return "Fury"; + return Game.getVar(R.string.Fury_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/GasesImmunity.java b/src/com/watabou/pixeldungeon/actors/buffs/GasesImmunity.java index f5fadacc2a..f2ccf2f7f6 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/GasesImmunity.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/GasesImmunity.java @@ -19,6 +19,8 @@ import java.util.HashSet; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.blobs.ToxicGas; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -33,7 +35,7 @@ public int icon() { @Override public String toString() { - return "Immune to gases"; + return Game.getVar(R.string.GasesImmunity_Info); } public static final HashSet> IMMUNITIES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Hunger.java b/src/com/watabou/pixeldungeon/actors/buffs/Hunger.java index 8c662e778c..cf1ef1c0b8 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Hunger.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Hunger.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.hero.HeroClass; @@ -36,9 +38,9 @@ public class Hunger extends Buff implements Hero.Doom { public static final float HUNGRY = 260f; public static final float STARVING = 360f; - private static final String TXT_HUNGRY = "You are hungry."; - private static final String TXT_STARVING = "You are starving!"; - private static final String TXT_DEATH = "You starved to death..."; + private static final String TXT_HUNGRY = Game.getVar(R.string.Hunger_Hungry); + private static final String TXT_STARVING = Game.getVar(R.string.Hunger_Starving); + private static final String TXT_DEATH = Game.getVar(R.string.Hunger_Death); private float level; @@ -141,9 +143,9 @@ public int icon() { @Override public String toString() { if (level < STARVING) { - return "Hungry"; + return Game.getVar(R.string.Hunger_Info1); } else { - return "Starving"; + return Game.getVar(R.string.Hunger_Info2); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Invisibility.java b/src/com/watabou/pixeldungeon/actors/buffs/Invisibility.java index 635d1c3900..29ed4516e5 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Invisibility.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Invisibility.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -48,7 +50,7 @@ public int icon() { @Override public String toString() { - return "Invisible"; + return Game.getVar(R.string.Invisibility_Info); } public static void dispel() { diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Levitation.java b/src/com/watabou/pixeldungeon/actors/buffs/Levitation.java index 4c0fd56885..5c51efd89c 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Levitation.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Levitation.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -50,6 +52,6 @@ public int icon() { @Override public String toString() { - return "Levitating"; + return Game.getVar(R.string.Levitation_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Light.java b/src/com/watabou/pixeldungeon/actors/buffs/Light.java index 3b0cf4b34b..cf14b9f70f 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Light.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Light.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -53,6 +55,6 @@ public int icon() { @Override public String toString() { - return "Illuminated"; + return Game.getVar(R.string.Light_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/MindVision.java b/src/com/watabou/pixeldungeon/actors/buffs/MindVision.java index 1c7e2857f0..c24c3eb65a 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/MindVision.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/MindVision.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ui.BuffIndicator; public class MindVision extends FlavourBuff { @@ -33,7 +35,7 @@ public int icon() { @Override public String toString() { - return "Mind vision"; + return Game.getVar(R.string.MindVision_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Ooze.java b/src/com/watabou/pixeldungeon/actors/buffs/Ooze.java index 61fecc1eea..9144231e82 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Ooze.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Ooze.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.levels.Level; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -26,7 +28,7 @@ public class Ooze extends Buff { - private static final String TXT_HERO_KILLED = "%s killed you..."; + private static final String TXT_DEATH = Game.getVar(R.string.Ooze_Death); public int damage = 1; @@ -37,7 +39,7 @@ public int icon() { @Override public String toString() { - return "Caustic ooze"; + return Game.getVar(R.string.Ooze_Info); } @Override @@ -46,7 +48,7 @@ public boolean act() { target.damage( damage, this ); if (!target.isAlive() && target == Dungeon.hero) { Dungeon.fail( Utils.format( ResultDescriptions.OOZE, Dungeon.depth ) ); - GLog.n( TXT_HERO_KILLED, toString() ); + GLog.n( TXT_DEATH, toString() ); } spend( TICK ); } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Paralysis.java b/src/com/watabou/pixeldungeon/actors/buffs/Paralysis.java index 2d9da3efba..8c156b0d54 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Paralysis.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Paralysis.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.items.rings.RingOfElements.Resistance; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -48,7 +50,7 @@ public int icon() { @Override public String toString() { - return "Paralysed"; + return Game.getVar(R.string.Paralysis_Info); } public static float duration( Char ch ) { diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Poison.java b/src/com/watabou/pixeldungeon/actors/buffs/Poison.java index d3e0d71cfd..a63caa0e83 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Poison.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Poison.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -58,7 +60,7 @@ public int icon() { @Override public String toString() { - return "Poisoned"; + return Game.getVar(R.string.Poison_Info); } @Override @@ -91,6 +93,6 @@ public void onDeath() { Badges.validateDeathFromPoison(); Dungeon.fail( Utils.format( ResultDescriptions.POISON, Dungeon.depth ) ); - GLog.n( "You died from poison..." ); + GLog.n(Game.getVar(R.string.Poison_Death)); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Rage.java b/src/com/watabou/pixeldungeon/actors/buffs/Rage.java new file mode 100644 index 0000000000..68cce1da53 --- /dev/null +++ b/src/com/watabou/pixeldungeon/actors/buffs/Rage.java @@ -0,0 +1,35 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.actors.buffs; + +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.ui.BuffIndicator; + +public class Rage extends FlavourBuff { + + @Override + public int icon() { + return BuffIndicator.RAGE; + } + + @Override + public String toString() { + return Game.getVar(R.string.Rage_Info); + } +} diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Roots.java b/src/com/watabou/pixeldungeon/actors/buffs/Roots.java index 19aff10f25..7374f18d08 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Roots.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Roots.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -45,6 +47,6 @@ public int icon() { @Override public String toString() { - return "Rooted"; + return Game.getVar(R.string.Roots_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Shadows.java b/src/com/watabou/pixeldungeon/actors/buffs/Shadows.java index be4abf66a9..7d48894a7b 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Shadows.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Shadows.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.ui.BuffIndicator; import com.watabou.utils.Bundle; @@ -90,7 +92,7 @@ public int icon() { @Override public String toString() { - return "Shadowmelded"; + return Game.getVar(R.string.Shadows_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Slow.java b/src/com/watabou/pixeldungeon/actors/buffs/Slow.java index 5f3f1e9a38..075defac5f 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Slow.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Slow.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.items.rings.RingOfElements.Resistance; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -32,7 +34,7 @@ public int icon() { @Override public String toString() { - return "Slowed"; + return Game.getVar(R.string.Slow_Info); } public static float duration( Char ch ) { diff --git a/src/com/watabou/pixeldungeon/actors/buffs/SnipersMark.java b/src/com/watabou/pixeldungeon/actors/buffs/SnipersMark.java index 5460eff61c..067b6f5267 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/SnipersMark.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/SnipersMark.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ui.BuffIndicator; import com.watabou.utils.Bundle; @@ -46,6 +48,6 @@ public int icon() { @Override public String toString() { - return "Zeroed in"; + return Game.getVar(R.string.SnipersMark_Info); } } diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Vertigo.java b/src/com/watabou/pixeldungeon/actors/buffs/Vertigo.java index 3775970e69..ad7ff0b070 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Vertigo.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Vertigo.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.items.rings.RingOfElements.Resistance; import com.watabou.pixeldungeon.ui.BuffIndicator; @@ -32,7 +34,7 @@ public int icon() { @Override public String toString() { - return "Vertigo"; + return Game.getVar(R.string.Vertigo_Info); } public static float duration( Char ch ) { diff --git a/src/com/watabou/pixeldungeon/actors/buffs/Weakness.java b/src/com/watabou/pixeldungeon/actors/buffs/Weakness.java index cda851f128..8b4212dd30 100644 --- a/src/com/watabou/pixeldungeon/actors/buffs/Weakness.java +++ b/src/com/watabou/pixeldungeon/actors/buffs/Weakness.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.buffs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.rings.RingOfElements.Resistance; @@ -33,7 +35,7 @@ public int icon() { @Override public String toString() { - return "Weakened"; + return Game.getVar(R.string.Weakness_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/actors/hero/Belongings.java b/src/com/watabou/pixeldungeon/actors/hero/Belongings.java index 5c252e1303..2a5f106085 100644 --- a/src/com/watabou/pixeldungeon/actors/hero/Belongings.java +++ b/src/com/watabou/pixeldungeon/actors/hero/Belongings.java @@ -19,8 +19,10 @@ import java.util.Iterator; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.items.KindOfWeapon; import com.watabou.pixeldungeon.items.armor.Armor; @@ -50,7 +52,7 @@ public Belongings( Hero owner ) { this.owner = owner; backpack = new Bag() {{ - name = "backpack"; + name = Game.getVar(R.string.Belongings_Name); size = BACKPACK_SIZE; }}; backpack.owner = owner; diff --git a/src/com/watabou/pixeldungeon/actors/hero/Hero.java b/src/com/watabou/pixeldungeon/actors/hero/Hero.java index 8aae3b26ae..7480997d64 100644 --- a/src/com/watabou/pixeldungeon/actors/hero/Hero.java +++ b/src/com/watabou/pixeldungeon/actors/hero/Hero.java @@ -108,25 +108,24 @@ import com.watabou.pixeldungeon.windows.WndTradeItem; import com.watabou.utils.Bundle; import com.watabou.utils.Random; +import com.watabou.pixeldungeon.R; public class Hero extends Char { - private static final String TXT_LEAVE = "One does not simply leave Pixel Dungeon."; + private static final String TXT_LEAVE = Game.getVar(R.string.Hero_Leave); - private static final String TXT_LEVEL_UP = "level up!"; - private static final String TXT_NEW_LEVEL = - "Welcome to level %d! Now you are healthier and more focused. " + - "It's easier for you to hit enemies and dodge their attacks."; + private static final String TXT_LEVEL_UP = Game.getVar(R.string.Hero_LevelUp); + private static final String TXT_NEW_LEVEL = Game.getVar(R.string.Hero_NewLevel); - public static final String TXT_YOU_NOW_HAVE = "You now have %s"; + public static final String TXT_YOU_NOW_HAVE = Game.getVar(R.string.Hero_YouNowHave); - private static final String TXT_SOMETHING_ELSE = "There is something else here"; - private static final String TXT_LOCKED_CHEST = "This chest is locked and you don't have matching key"; - private static final String TXT_LOCKED_DOOR = "You don't have a matching key"; - private static final String TXT_NOTICED_SMTH = "You noticed something"; + private static final String TXT_SOMETHING_ELSE = Game.getVar(R.string.Hero_SomethingElse); + private static final String TXT_LOCKED_CHEST = Game.getVar(R.string.Hero_LockedChest); + private static final String TXT_LOCKED_DOOR = Game.getVar(R.string.Hero_LockedDoor); + private static final String TXT_NOTICED_SMTH = Game.getVar(R.string.Hero_NoticedSmth); - private static final String TXT_WAIT = "..."; - private static final String TXT_SEARCH = "search"; + private static final String TXT_WAIT = Game.getVar(R.string.Hero_Wait); + private static final String TXT_SEARCH = Game.getVar(R.string.Hero_Search); public static final int STARTING_STR = 10; @@ -168,7 +167,8 @@ public class Hero extends Char { public Hero() { super(); - name = "you"; + + name = Game.getVar(R.string.Hero_Name); HP = HT = 20; STR = STARTING_STR; @@ -305,7 +305,7 @@ public int defenseSkill( Char enemy ) { @Override public int dr() { - int dr = belongings.armor != null ? Math.max( belongings.armor.DR, 0 ) : 0; + int dr = belongings.armor != null ? Math.max( belongings.armor.DR(), 0 ) : 0; Barkskin barkskin = buff( Barkskin.class ); if (barkskin != null) { dr += barkskin.level(); @@ -979,7 +979,7 @@ public boolean handle( int cell ) { curAction = new HeroAction.Attack( ch ); } - } else if (Level.fieldOfView[cell] && (heap = Dungeon.level.heaps.get( cell )) != null) { + } else if (Level.fieldOfView[cell] && (heap = Dungeon.level.heaps.get( cell )) != null && heap.type != Heap.Type.HIDDEN) { switch (heap.type) { case HEAP: @@ -1079,33 +1079,33 @@ public void add( Buff buff ) { if (sprite != null) { if (buff instanceof Burning) { - GLog.w( "You catch fire!" ); + GLog.w(Game.getVar(R.string.Hero_StaBurning)); interrupt(); } else if (buff instanceof Paralysis) { - GLog.w( "You are paralysed!" ); + GLog.w(Game.getVar(R.string.Hero_StaParalysis)); interrupt(); } else if (buff instanceof Poison) { - GLog.w( "You are poisoned!" ); + GLog.w(Game.getVar(R.string.Hero_StaPoison)); interrupt(); } else if (buff instanceof Ooze) { - GLog.w( "Caustic ooze eats your flesh. Wash away it!" ); + GLog.w(Game.getVar(R.string.Hero_StaOoze)); } else if (buff instanceof Roots) { - GLog.w( "You can't move!" ); + GLog.w(Game.getVar(R.string.Hero_StaRoots)); } else if (buff instanceof Weakness) { - GLog.w( "You feel weakened!" ); + GLog.w(Game.getVar(R.string.Hero_StaWeakness)); } else if (buff instanceof Blindness) { - GLog.w( "You are blinded!" ); + GLog.w(Game.getVar(R.string.Hero_StaBlindness)); } else if (buff instanceof Fury) { - GLog.w( "You become furious!" ); - sprite.showStatus( CharSprite.POSITIVE, "furious" ); + GLog.w(Game.getVar(R.string.Hero_StaFury)); + sprite.showStatus( CharSprite.POSITIVE, Game.getVar(R.string.Hero_StaFurious)); } else if (buff instanceof Charm) { - GLog.w( "You are charmed!" ); + GLog.w(Game.getVar(R.string.Hero_StaCharm)); } else if (buff instanceof Cripple) { - GLog.w( "You are crippled!" ); + GLog.w(Game.getVar(R.string.Hero_StaCripple)); } else if (buff instanceof Bleeding) { - GLog.w( "You are bleeding!" ); + GLog.w(Game.getVar(R.string.Hero_StaBleeding)); } else if (buff instanceof Vertigo) { - GLog.w( "Everything is spinning around you!" ); + GLog.w(Game.getVar(R.string.Hero_StaVertigo)); interrupt(); } @@ -1356,6 +1356,14 @@ public boolean search( boolean intentional ) { smthFound = true; } + + if (intentional) { + Heap heap = Dungeon.level.heaps.get( p ); + if (heap != null && heap.type == Type.HIDDEN) { + heap.open( this ); + smthFound = true; + } + } } } } diff --git a/src/com/watabou/pixeldungeon/actors/hero/HeroClass.java b/src/com/watabou/pixeldungeon/actors/hero/HeroClass.java index 6698821568..fb9d8b52cd 100644 --- a/src/com/watabou/pixeldungeon/actors/hero/HeroClass.java +++ b/src/com/watabou/pixeldungeon/actors/hero/HeroClass.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.actors.hero; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.TomeOfMastery; import com.watabou.pixeldungeon.items.armor.ClothArmor; import com.watabou.pixeldungeon.items.bags.Keyring; @@ -31,65 +33,38 @@ import com.watabou.pixeldungeon.items.weapon.melee.Dagger; import com.watabou.pixeldungeon.items.weapon.melee.Knuckles; import com.watabou.pixeldungeon.items.weapon.melee.ShortSword; -import com.watabou.pixeldungeon.items.weapon.missiles.Dart; import com.watabou.pixeldungeon.items.weapon.missiles.Boomerang; +import com.watabou.pixeldungeon.items.weapon.missiles.Dart; import com.watabou.pixeldungeon.ui.QuickSlot; import com.watabou.utils.Bundle; public enum HeroClass { - WARRIOR( "warrior" ), MAGE( "mage" ), ROGUE( "rogue" ), HUNTRESS( "huntress" ); - + WARRIOR(Game.getVar(R.string.HeroClass_War)), + MAGE(Game.getVar(R.string.HeroClass_Mag)), + ROGUE(Game.getVar(R.string.HeroClass_Rog)), + HUNTRESS(Game.getVar(R.string.HeroClass_Hun)); + private String title; - + private HeroClass( String title ) { this.title = title; } - - public static final String[] WAR_PERKS = { - "Warriors start with 11 points of Strength.", - "Warriors start with a unique short sword. This sword can be later \"reforged\" to upgrade another melee weapon.", - "Warriors are less proficient with missile weapons.", - "Any piece of food restores some health when eaten.", - "Potions of Strength are identified from the beginning.", - }; - - public static final String[] MAG_PERKS = { - "Mages start with a unique Wand of Magic Missile. This wand can be later \"disenchanted\" to upgrade another wand.", - "Mages recharge their wands faster.", - "When eaten, any piece of food restores 1 charge for all wands in the inventory.", - "Mages can use wands as a melee weapon.", - "Scrolls of Identify are identified from the beginning." - }; - - public static final String[] ROG_PERKS = { - "Rogues start with a Ring of Shadows+1.", - "Rogues identify a type of a ring on equipping it.", - "Rogues are proficient with light armor, dodging better while wearing one.", - "Rogues are proficient in detecting hidden doors and traps.", - "Rogues can go without food longer.", - "Scrolls of Magic Mapping are identified from the beginning." - }; - - public static final String[] HUN_PERKS = { - "Huntresses start with 15 points of Health.", - "Huntresses start with a unique upgradeable boomerang.", - "Huntresses are proficient with missile weapons and get a damage bonus for excessive strength when using them.", - "Huntresses gain more health from dewdrops.", - "Huntresses sense neighbouring monsters even if they are hidden behind obstacles." - }; + + public static final String[] WAR_PERKS = Game.getVars(R.array.HeroClass_WarPerks); + public static final String[] MAG_PERKS = Game.getVars(R.array.HeroClass_MagPerks); + public static final String[] ROG_PERKS = Game.getVars(R.array.HeroClass_RogPerks); + public static final String[] HUN_PERKS = Game.getVars(R.array.HeroClass_HunPerks); public void initHero( Hero hero ) { - hero.heroClass = this; - initCommon( hero ); - + switch (this) { case WARRIOR: initWarrior( hero ); break; - + case MAGE: initMage( hero ); break; @@ -211,7 +186,7 @@ public String[] perks() { return null; } - private static final String CLASS = "class"; + private static final String CLASS = "class"; public void storeInBundle( Bundle bundle ) { bundle.put( CLASS, toString() ); diff --git a/src/com/watabou/pixeldungeon/actors/hero/HeroSubClass.java b/src/com/watabou/pixeldungeon/actors/hero/HeroSubClass.java index ff05430cf2..4706c58973 100644 --- a/src/com/watabou/pixeldungeon/actors/hero/HeroSubClass.java +++ b/src/com/watabou/pixeldungeon/actors/hero/HeroSubClass.java @@ -17,38 +17,21 @@ */ package com.watabou.pixeldungeon.actors.hero; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.utils.Bundle; public enum HeroSubClass { NONE( null, null ), - - GLADIATOR( "gladiator", - "A successful attack with a melee weapon allows the _Gladiator_ to start a combo, " + - "in which every next successful hit inflicts more damage." ), - BERSERKER( "berserker", - "When severely wounded, the _Berserker_ enters a state of wild fury " + - "significantly increasing his damage output." ), - - WARLOCK( "warlock", - "After killing an enemy the _Warlock_ consumes its soul. " + - "It heals his wounds and satisfies his hunger." ), - BATTLEMAGE( "battlemage", - "When fighting with a wand in his hands, the _Battlemage_ inflicts additional damage depending " + - "on the current number of charges. Every successful hit restores 1 charge to this wand." ), - - ASSASSIN( "assassin", - "When performing a surprise attack, the _Assassin_ inflicts additional damage to his target." ), - FREERUNNER( "freerunner", - "The _Freerunner_ can move almost twice faster, than most of the monsters. When he " + - "is running, the Freerunner is much harder to hit. For that he must be unencumbered and not starving." ), - - SNIPER( "sniper", - "_Snipers_ are able to detect weak points in an enemy's armor, " + - "effectively ignoring it when using a missile weapon." ), - WARDEN( "warden", - "Having a strong connection with forces of nature gives _Wardens_ an ability to gather dewdrops and " + - "seeds from plants. Also trampling a high grass grants them a temporary armor buff." ); + GLADIATOR( Game.getVar(R.string.HeroSubClass_NameGlad), Game.getVar(R.string.HeroSubClass_DescGlad)), + BERSERKER( Game.getVar(R.string.HeroSubClass_NameBers), Game.getVar(R.string.HeroSubClass_DescBers)), + WARLOCK( Game.getVar(R.string.HeroSubClass_NameWarL), Game.getVar(R.string.HeroSubClass_DescWarL)), + BATTLEMAGE(Game.getVar(R.string.HeroSubClass_NameBatM), Game.getVar(R.string.HeroSubClass_DescBatM)), + ASSASSIN( Game.getVar(R.string.HeroSubClass_NameAssa), Game.getVar(R.string.HeroSubClass_DescAssa)), + FREERUNNER(Game.getVar(R.string.HeroSubClass_NameFreR), Game.getVar(R.string.HeroSubClass_DescFreR)), + SNIPER( Game.getVar(R.string.HeroSubClass_NameSnip), Game.getVar(R.string.HeroSubClass_DescSnip)), + WARDEN( Game.getVar(R.string.HeroSubClass_NameWard), Game.getVar(R.string.HeroSubClass_DescWard)); private String title; private String desc; @@ -66,7 +49,7 @@ public String desc() { return desc; } - private static final String SUBCLASS = "subClass"; + private static final String SUBCLASS = "subClass"; public void storeInBundle( Bundle bundle ) { bundle.put( SUBCLASS, toString() ); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Acidic.java b/src/com/watabou/pixeldungeon/actors/mobs/Acidic.java index 6793cef281..4fa8c604d3 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Acidic.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Acidic.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.mobs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.sprites.AcidicSprite; import com.watabou.utils.Random; @@ -25,7 +27,7 @@ public class Acidic extends Scorpio { { - name = "acidic scorpio"; + name = Game.getVar(R.string.Acidic_Name); spriteClass = AcidicSprite.class; } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Albino.java b/src/com/watabou/pixeldungeon/actors/mobs/Albino.java index cb27f52daf..11c5924ea7 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Albino.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Albino.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.mobs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Bleeding; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -27,7 +29,7 @@ public class Albino extends Rat { { - name = "albino rat"; + name = Game.getVar(R.string.Albino_Name); spriteClass = AlbinoSprite.class; HP = HT = 15; diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Bandit.java b/src/com/watabou/pixeldungeon/actors/mobs/Bandit.java index 0e6833a557..01a4f0e580 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Bandit.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Bandit.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.actors.mobs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Blindness; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -31,7 +33,7 @@ public class Bandit extends Thief { public Item item; { - name = "crazy bandit"; + name = Game.getVar(R.string.Bandit_Name); spriteClass = BanditSprite.class; } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Bat.java b/src/com/watabou/pixeldungeon/actors/mobs/Bat.java index 387d147df8..fab11604ac 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Bat.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Bat.java @@ -19,6 +19,8 @@ import java.util.HashSet; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.items.potions.PotionOfHealing; @@ -29,7 +31,7 @@ public class Bat extends Mob { { - name = "vampire bat"; + name = Game.getVar(R.string.Bat_Name); spriteClass = BatSprite.class; HP = HT = 30; @@ -62,7 +64,7 @@ public int dr() { @Override public String defenseVerb() { - return "evaded"; + return Game.getVar(R.string.Bat_Defense); } @Override @@ -80,9 +82,7 @@ public int attackProc( Char enemy, int damage ) { @Override public String description() { - return - "These brisk and tenacious inhabitants of cave domes may defeat much larger opponents by " + - "replenishing their health with each successful attack."; + return Game.getVar(R.string.Bat_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Bestiary.java b/src/com/watabou/pixeldungeon/actors/mobs/Bestiary.java index 984ecd70bf..1931dbe3c4 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Bestiary.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Bestiary.java @@ -18,6 +18,8 @@ package com.watabou.pixeldungeon.actors.mobs; import com.watabou.pixeldungeon.actors.Char; +import com.watabou.pixeldungeon.actors.mobs.Yog.BurningFist; +import com.watabou.pixeldungeon.actors.mobs.Yog.RottingFist; import com.watabou.utils.Random; public class Bestiary { @@ -178,6 +180,11 @@ private static Class mobClass( int depth ) { } public static boolean isBoss( Char mob ) { - return mob instanceof Goo || mob instanceof Tengu || mob instanceof DM300 || mob instanceof King || mob instanceof Yog; + return + mob instanceof Goo || + mob instanceof Tengu || + mob instanceof DM300 || + mob instanceof King || + mob instanceof Yog || mob instanceof BurningFist || mob instanceof RottingFist; } } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Brute.java b/src/com/watabou/pixeldungeon/actors/mobs/Brute.java index 5af37de432..b7e383826d 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Brute.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Brute.java @@ -19,7 +19,9 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Terror; import com.watabou.pixeldungeon.items.Gold; @@ -31,10 +33,10 @@ public class Brute extends Mob { - private static final String TXT_ENRAGED = "%s becomes enraged!"; + private static final String TXT_ENRAGED = Game.getVar(R.string.Brute_Enraged); { - name = "gnoll brute"; + name = Game.getVar(R.string.Brute_Name); spriteClass = BruteSprite.class; HP = HT = 40; @@ -81,16 +83,14 @@ public void damage( int dmg, Object src ) { spend( TICK ); if (Dungeon.visible[pos]) { GLog.w( TXT_ENRAGED, name ); - sprite.showStatus( CharSprite.NEGATIVE, "enraged" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Brute_StaEnraged)); } } } @Override public String description() { - return - "Brutes are the largest, strongest and toughest of all gnolls. When severely wounded, " + - "they go berserk, inflicting even more damage to their enemies."; + return Game.getVar(R.string.Brute_Desc); } private static final HashSet> IMMUNITIES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Crab.java b/src/com/watabou/pixeldungeon/actors/mobs/Crab.java index 85c50e8a30..56be673b4b 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Crab.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Crab.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.mobs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.mobs.npcs.Ghost; import com.watabou.pixeldungeon.items.food.MysteryMeat; @@ -26,7 +28,7 @@ public class Crab extends Mob { { - name = "sewer crab"; + name = Game.getVar(R.string.Crab_Name); spriteClass = CrabSprite.class; HP = HT = 15; @@ -57,20 +59,17 @@ public int dr() { @Override public String defenseVerb() { - return "parried"; + return Game.getVar(R.string.Crab_Defense); } @Override public void die( Object cause ) { - Ghost.Quest.process( pos ); + Ghost.Quest.processSewersKill( pos ); super.die( cause ); } @Override public String description() { - return - "These huge crabs are at the top of the food chain in the sewers. " + - "They are extremely fast and their thick exoskeleton can withstand " + - "heavy blows."; + return Game.getVar(R.string.Crab_Desc); } } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/CursePersonification.java b/src/com/watabou/pixeldungeon/actors/mobs/CursePersonification.java new file mode 100644 index 0000000000..3bd61e886e --- /dev/null +++ b/src/com/watabou/pixeldungeon/actors/mobs/CursePersonification.java @@ -0,0 +1,128 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.actors.mobs; + +import java.util.HashSet; + +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.actors.Actor; +import com.watabou.pixeldungeon.actors.Char; +import com.watabou.pixeldungeon.actors.buffs.Paralysis; +import com.watabou.pixeldungeon.actors.buffs.Roots; +import com.watabou.pixeldungeon.actors.buffs.Terror; +import com.watabou.pixeldungeon.actors.mobs.npcs.Ghost; +import com.watabou.pixeldungeon.effects.Pushing; +import com.watabou.pixeldungeon.items.weapon.enchantments.Death; +import com.watabou.pixeldungeon.levels.Level; +import com.watabou.pixeldungeon.sprites.CursePersonificationSprite; +import com.watabou.utils.Random; + +public class CursePersonification extends Mob { + + { + name = Game.getVar(R.string.CursePersonification_Name); + spriteClass = CursePersonificationSprite.class; + + HP = HT = 10 + Dungeon.depth * 3; + defenseSkill = 10 + Dungeon.depth; + + EXP = 3; + maxLvl = 5; + + state = HUNTING; + baseSpeed = 0.5f; + flying = true; + } + + @Override + public int damageRoll() { + return Random.NormalIntRange( 3, 5 ); + } + + @Override + public int attackSkill( Char target ) { + return 10 + Dungeon.depth; + } + + @Override + public int dr() { + return 1; + } + + @Override + public int attackProc(Char enemy, int damage) { + + for (int i=0; i < Level.NEIGHBOURS8.length; i++) { + int ofs = Level.NEIGHBOURS8[i]; + if (enemy.pos - pos == ofs) { + int newPos = enemy.pos + ofs; + if ((Level.passable[newPos] || Level.avoid[newPos]) && Actor.findChar( newPos ) == null) { + + Actor.addDelayed( new Pushing( enemy, enemy.pos, newPos ), -1 ); + + enemy.pos = newPos; + // FIXME + if (enemy instanceof Mob) { + Dungeon.level.mobPress( (Mob)enemy ); + } else { + Dungeon.level.press( newPos, enemy ); + } + + } + break; + } + } + + return super.attackProc( enemy, damage ); + } + + @Override + protected boolean act() { + if (HP > 0 && HP < HT) { + HP++; + } + return super.act(); + } + + @Override + public void die( Object cause ) { + Ghost ghost = new Ghost(); + ghost.state = ghost.PASSIVE; + Ghost.replace( this, ghost ); + } + + @Override + public String description() { + return Game.getVar(R.string.CursePersonification_Desc); + } + + private static final HashSet> IMMUNITIES = new HashSet>(); + static { + IMMUNITIES.add( Death.class ); + IMMUNITIES.add( Terror.class ); + IMMUNITIES.add( Paralysis.class ); + IMMUNITIES.add( Roots.class ); + } + + @Override + public HashSet> immunities() { + return IMMUNITIES; + } +} diff --git a/src/com/watabou/pixeldungeon/actors/mobs/DM300.java b/src/com/watabou/pixeldungeon/actors/mobs/DM300.java index 480c776cdf..6fce9cbad3 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/DM300.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/DM300.java @@ -20,10 +20,12 @@ import java.util.HashSet; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; @@ -46,9 +48,10 @@ import com.watabou.utils.Random; public class DM300 extends Mob { - + { - name = Dungeon.depth == Statistics.deepestFloor ? "DM-300" : "DM-350"; + name = Dungeon.depth == Statistics.deepestFloor ? Game.getVar(R.string.DM300_Name1) : Game.getVar(R.string.DM300_Name2); + spriteClass = DM300Sprite.class; HP = HT = 200; @@ -90,7 +93,7 @@ public void move( int step ) { sprite.emitter().burst( ElmoParticle.FACTORY, 5 ); if (Dungeon.visible[step] && Dungeon.hero.isAlive()) { - GLog.n( "DM-300 repairs itself!" ); + GLog.n(Game.getVar(R.string.DM300_Info1)); } } @@ -132,21 +135,18 @@ public void die( Object cause ) { Badges.validateBossSlain(); - yell( "Mission failed. Shutting down." ); + yell(Game.getVar(R.string.DM300_Info2)); } @Override public void notice() { super.notice(); - yell( "Unauthorised personnel detected." ); + yell(Game.getVar(R.string.DM300_Info3)); } @Override public String description() { - return - "This machine was created by the Dwarves several centuries ago. Later, Dwarves started to replace machines with " + - "golems, elementals and even demons. Eventually it led their civilization to the decline. The DM-300 and similar " + - "machines were typically used for construction and mining, and in some cases, for city defense."; + return Game.getVar(R.string.DM300_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Elemental.java b/src/com/watabou/pixeldungeon/actors/mobs/Elemental.java index 0e4be083c7..41e3ee7769 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Elemental.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Elemental.java @@ -19,6 +19,8 @@ import java.util.HashSet; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Burning; @@ -34,7 +36,7 @@ public class Elemental extends Mob { { - name = "fire elemental"; + name = Game.getVar(R.string.Elemental_Name); spriteClass = ElementalSprite.class; HP = HT = 65; @@ -90,9 +92,7 @@ public void add( Buff buff ) { @Override public String description() { - return - "Wandering fire elementals are a byproduct of summoning greater entities. " + - "They are too chaotic in their nature to be controlled by even the most powerful demonologist."; + return Game.getVar(R.string.Elemental_Desc); } private static final HashSet> IMMUNITIES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Eye.java b/src/com/watabou/pixeldungeon/actors/mobs/Eye.java index 996c3c99e6..9633631844 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Eye.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Eye.java @@ -19,7 +19,9 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; @@ -40,10 +42,10 @@ public class Eye extends Mob { - private static final String TXT_DEATHGAZE_KILLED = "%s's deathgaze killed you..."; + private static final String TXT_DEATHGAZE_KILLED = Game.getVar(R.string.Eye_Kill); { - name = "evil eye"; + name = Game.getVar(R.string.Eye_Name); spriteClass = EyeSprite.class; HP = HT = 100; @@ -145,9 +147,7 @@ public boolean attack( Char enemy ) { @Override public String description() { - return - "One of this demon's other names is \"orb of hatred\", because when it sees an enemy, " + - "it uses its deathgaze recklessly, often ignoring its allies and wounding them."; + return Game.getVar(R.string.Eye_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/FetidRat.java b/src/com/watabou/pixeldungeon/actors/mobs/FetidRat.java new file mode 100644 index 0000000000..a0c5ee5668 --- /dev/null +++ b/src/com/watabou/pixeldungeon/actors/mobs/FetidRat.java @@ -0,0 +1,98 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.actors.mobs; + +import java.util.HashSet; + +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.actors.Char; +import com.watabou.pixeldungeon.actors.blobs.Blob; +import com.watabou.pixeldungeon.actors.blobs.ParalyticGas; +import com.watabou.pixeldungeon.actors.buffs.Paralysis; +import com.watabou.pixeldungeon.items.quest.RatSkull; +import com.watabou.pixeldungeon.scenes.GameScene; +import com.watabou.pixeldungeon.sprites.FetidRatSprite; +import com.watabou.utils.Random; + +public class FetidRat extends Mob { + + { + name = Game.getVar(R.string.FetidRat_Name); + spriteClass = FetidRatSprite.class; + + HP = HT = 15; + defenseSkill = 5; + + EXP = 3; + maxLvl = 5; + + state = WANDERING; + } + + @Override + public int damageRoll() { + return Random.NormalIntRange( 2, 6 ); + } + + @Override + public int attackSkill( Char target ) { + return 12; + } + + @Override + public int dr() { + return 2; + } + + @Override + public String defenseVerb() { + return Game.getVar(R.string.FetidRat_Defense); + } + + @Override + public int defenseProc( Char enemy, int damage ) { + + GameScene.add( Blob.seed( pos, 20, ParalyticGas.class ) ); + + return super.defenseProc(enemy, damage); + } + + @Override + public void die( Object cause ) { + super.die( cause ); + + Dungeon.level.drop( new RatSkull(), pos ).sprite.drop(); + } + + @Override + public String description() { + return Game.getVar(R.string.FetidRat_Desc); + } + + private static final HashSet> IMMUNITIES = new HashSet>(); + static { + IMMUNITIES.add( Paralysis.class ); + } + + @Override + public HashSet> immunities() { + return IMMUNITIES; + } +} diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Gnoll.java b/src/com/watabou/pixeldungeon/actors/mobs/Gnoll.java index 55602a5412..bad0d26aa4 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Gnoll.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Gnoll.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.mobs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.mobs.npcs.Ghost; import com.watabou.pixeldungeon.items.Gold; @@ -26,7 +28,7 @@ public class Gnoll extends Mob { { - name = "gnoll scout"; + name = Game.getVar(R.string.Gnoll_Name); spriteClass = GnollSprite.class; HP = HT = 12; @@ -56,14 +58,12 @@ public int dr() { @Override public void die( Object cause ) { - Ghost.Quest.process( pos ); + Ghost.Quest.processSewersKill( pos ); super.die( cause ); } @Override public String description() { - return - "Gnolls are hyena-like humanoids. They dwell in sewers and dungeons, venturing up to raid the surface from time to time. " + - "Gnoll scouts are regular members of their pack, they are not as strong as brutes and not as intelligent as shamans."; + return Game.getVar(R.string.Gnoll_Desc); } } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Golem.java b/src/com/watabou/pixeldungeon/actors/mobs/Golem.java index a55539d6ff..b595bbae04 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Golem.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Golem.java @@ -19,6 +19,8 @@ import java.util.HashSet; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Amok; import com.watabou.pixeldungeon.actors.buffs.Sleep; @@ -31,7 +33,7 @@ public class Golem extends Mob { { - name = "golem"; + name = Game.getVar(R.string.Golem_Name); spriteClass = GolemSprite.class; HP = HT = 85; @@ -63,7 +65,7 @@ public int dr() { @Override public String defenseVerb() { - return "blocked"; + return Game.getVar(R.string.Golem_Defense); } @Override @@ -75,10 +77,7 @@ public void die( Object cause ) { @Override public String description() { - return - "The Dwarves tried to combine their knowledge of mechanisms with their newfound power of elemental binding. " + - "They used spirits of earth as the \"soul\" for the mechanical bodies of golems, which were believed to be " + - "most controllable of all. Despite this, the tiniest mistake in the ritual could cause an outbreak."; + return Game.getVar(R.string.Golem_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Goo.java b/src/com/watabou/pixeldungeon/actors/mobs/Goo.java index 3b8159e58c..b18aa148b7 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Goo.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Goo.java @@ -19,8 +19,10 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.ToxicGas; @@ -46,8 +48,8 @@ public class Goo extends Mob { private static final float PUMP_UP_DELAY = 2f; { - name = Dungeon.depth == Statistics.deepestFloor ? "Goo" : "spawn of Goo"; - + name = Dungeon.depth == Statistics.deepestFloor ? Game.getVar(R.string.Goo_Name1) : Game.getVar(R.string.Goo_Name2); + HP = HT = 80; EXP = 10; defenseSkill = 12; @@ -164,8 +166,8 @@ public void call() { ((GooSprite)sprite).pumpUp(); if (Dungeon.visible[pos]) { - sprite.showStatus( CharSprite.NEGATIVE, "!!!" ); - GLog.n( "Goo is pumping itself up!" ); + sprite.showStatus( CharSprite.NEGATIVE, Game.getVar(R.string.Goo_StaInfo1)); + GLog.n(Game.getVar(R.string.Goo_Info1)); } return true; @@ -203,20 +205,18 @@ public void die( Object cause ) { Badges.validateBossSlain(); - yell( "glurp... glurp..." ); + yell(Game.getVar(R.string.Goo_Info2)); } @Override public void notice() { super.notice(); - yell( "GLURP-GLURP!" ); + yell(Game.getVar(R.string.Goo_Info3)); } @Override public String description() { - return - "Little known about The Goo. It's quite possible that it is not even a creature, but rather a " + - "conglomerate of substances from the sewers that gained rudiments of free will."; + return Game.getVar(R.string.Goo_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/King.java b/src/com/watabou/pixeldungeon/actors/mobs/King.java index 22979d48d8..d8538a3b17 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/King.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/King.java @@ -19,10 +19,12 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; @@ -52,7 +54,8 @@ public class King extends Mob { private static final int MAX_ARMY_SIZE = 5; { - name = Dungeon.depth == Statistics.deepestFloor ? "King of Dwarves" : "undead King of Dwarves"; + name = Dungeon.depth == Statistics.deepestFloor ? Game.getVar(R.string.King_Name1) : Game.getVar(R.string.King_Name2); + spriteClass = KingSprite.class; HP = HT = 300; @@ -95,7 +98,7 @@ public int dr() { @Override public String defenseVerb() { - return "parried"; + return Game.getVar(R.string.King_Defense); } @Override @@ -144,7 +147,7 @@ public void die( Object cause ) { Badges.validateBossSlain(); - yell( "You cannot kill me, " + Dungeon.hero.heroClass.title() + "... I am... immortal..." ); + yell(String.format(Game.getVar(R.string.King_Info1), Dungeon.hero.heroClass.title())); } private int maxArmySize() { @@ -192,22 +195,18 @@ private void summon() { } while (dist < undeadsToSummon); } - yell( "Arise, slaves!" ); + yell(Game.getVar(R.string.King_Info2)); } @Override public void notice() { super.notice(); - yell( "How dare you!" ); + yell(Game.getVar(R.string.King_Info3)); } @Override public String description() { - return - "The last king of dwarves was known for his deep understanding of processes of life and death. " + - "He has persuaded members of his court to participate in a ritual, that should have granted them " + - "eternal youthfulness. In the end he was the only one, who got it - and an army of undead " + - "as a bonus."; + return Game.getVar(R.string.King_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); @@ -239,7 +238,7 @@ public static class Undead extends Mob { public static int count = 0; { - name = "undead dwarf"; + name = Game.getVar(R.string.King_UndeadName); spriteClass = UndeadSprite.class; HP = HT = 28; @@ -305,14 +304,12 @@ public int dr() { @Override public String defenseVerb() { - return "blocked"; + return Game.getVar(R.string.King_UndeadDefense); } @Override public String description() { - return - "These undead dwarves, risen by the will of the King of Dwarves, were members of his court. " + - "They appear as skeletons with a stunning amount of facial hair."; + return Game.getVar(R.string.King_UndeadDesc); } private static final HashSet> IMMUNITIES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Mimic.java b/src/com/watabou/pixeldungeon/actors/mobs/Mimic.java index 0cfdf5146a..0b0cb64364 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Mimic.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Mimic.java @@ -22,9 +22,11 @@ import java.util.HashSet; import java.util.List; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.effects.CellEmitter; @@ -44,7 +46,7 @@ public class Mimic extends Mob { private int level; { - name = "mimic"; + name = Game.getVar(R.string.Mimic_Name); spriteClass = MimicSprite.class; } @@ -120,9 +122,7 @@ public boolean reset() { @Override public String description() { - return - "Mimics are magical creatures which can take any shape they wish. In dungeons they almost always " + - "choose a shape of a treasure chest, because they know how to beckon an adventurer."; + return Game.getVar(R.string.Mimic_Desc); } public static Mimic spawnAt( int pos, List items ) { diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Mob.java b/src/com/watabou/pixeldungeon/actors/mobs/Mob.java index f4dc20f30b..24206538c5 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Mob.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Mob.java @@ -19,9 +19,11 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Challenges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; @@ -44,9 +46,9 @@ public abstract class Mob extends Char { - private static final String TXT_DIED = "You hear something died in the distance"; + private static final String TXT_DIED = Game.getVar(R.string.Mob_Died); - protected static final String TXT_ECHO = "echo of "; + protected static final String TXT_ECHO = Game.getVar(R.string.Mob_Echo);//FIXME protected static final String TXT_NOTICE1 = "?!"; protected static final String TXT_RAGE = "#$%^"; @@ -342,13 +344,18 @@ public void destroy() { Badges.validateNightHunter(); } - if (Dungeon.hero.lvl <= maxLvl && EXP > 0) { - Dungeon.hero.sprite.showStatus( CharSprite.POSITIVE, TXT_EXP, EXP ); - Dungeon.hero.earnExp( EXP ); + int exp = exp(); + if (exp > 0) { + Dungeon.hero.sprite.showStatus( CharSprite.POSITIVE, TXT_EXP, exp ); + Dungeon.hero.earnExp( exp ); } } } + public int exp() { + return Dungeon.hero.lvl <= maxLvl ? EXP : 0; + } + @Override public void die( Object cause ) { @@ -402,7 +409,7 @@ public void beckon( int cell ) { } public String description() { - return "Real description is coming soon!"; + return Game.getVar(R.string.Mob_Desc); } public void notice() { @@ -410,7 +417,7 @@ public void notice() { } public void yell( String str ) { - GLog.n( "%s: \"%s\" ", name, str ); + GLog.n(Game.getVar(R.string.Mob_Yell), name, str ); } public interface AiState { @@ -420,7 +427,7 @@ public interface AiState { private class Sleeping implements AiState { - public static final String TAG = "SLEEPING"; + public static final String TAG = "SLEEPING"; @Override public boolean act( boolean enemyInFOV, boolean justAlerted ) { @@ -454,13 +461,13 @@ public boolean act( boolean enemyInFOV, boolean justAlerted ) { @Override public String status() { - return Utils.format( "This %s is sleeping", name ); + return Utils.format(Game.getVar(R.string.Mob_StaSleepingStatus), name); } } private class Wandering implements AiState { - public static final String TAG = "WANDERING"; + public static final String TAG = "WANDERING"; @Override public boolean act( boolean enemyInFOV, boolean justAlerted ) { @@ -491,13 +498,13 @@ public boolean act( boolean enemyInFOV, boolean justAlerted ) { @Override public String status() { - return Utils.format( "This %s is wandering", name ); + return Utils.format(Game.getVar(R.string.Mob_StaWanderingStatus), name ); } } private class Hunting implements AiState { - public static final String TAG = "HUNTING"; + public static final String TAG = "HUNTING"; @Override public boolean act( boolean enemyInFOV, boolean justAlerted ) { @@ -530,13 +537,13 @@ public boolean act( boolean enemyInFOV, boolean justAlerted ) { @Override public String status() { - return Utils.format( "This %s is hunting", name ); + return Utils.format(Game.getVar(R.string.Mob_StaHuntingStatus), name ); } } protected class Fleeing implements AiState { - public static final String TAG = "FLEEING"; + public static final String TAG = "FLEEING"; @Override public boolean act( boolean enemyInFOV, boolean justAlerted ) { @@ -565,13 +572,13 @@ protected void nowhereToRun() { @Override public String status() { - return Utils.format( "This %s is fleeing", name ); + return Utils.format(Game.getVar(R.string.Mob_StaFleeingStatus), name ); } } private class Passive implements AiState { - public static final String TAG = "PASSIVE"; + public static final String TAG = "PASSIVE"; @Override public boolean act( boolean enemyInFOV, boolean justAlerted ) { @@ -582,7 +589,7 @@ public boolean act( boolean enemyInFOV, boolean justAlerted ) { @Override public String status() { - return Utils.format( "This %s is passive", name ); + return Utils.format(Game.getVar(R.string.Mob_StaPassiveStatus), name ); } } } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Monk.java b/src/com/watabou/pixeldungeon/actors/mobs/Monk.java index 83680907f6..652901a4e1 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Monk.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Monk.java @@ -19,7 +19,9 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Amok; import com.watabou.pixeldungeon.actors.buffs.Terror; @@ -34,10 +36,10 @@ public class Monk extends Mob { - public static final String TXT_DISARM = "%s has knocked the %s from your hands!"; + public static final String TXT_DISARM = Game.getVar(R.string.Monk_Disarm); { - name = "dwarf monk"; + name = Game.getVar(R.string.Monk_Name); spriteClass = MonkSprite.class; HP = HT = 70; @@ -72,7 +74,7 @@ public int dr() { @Override public String defenseVerb() { - return "parried"; + return Game.getVar(R.string.Monk_Defense); } @Override @@ -102,9 +104,7 @@ public int attackProc( Char enemy, int damage ) { @Override public String description() { - return - "These monks are fanatics, who devoted themselves to protecting their city's secrets from all aliens. " + - "They don't use any armor or weapons, relying solely on the art of hand-to-hand combat."; + return Game.getVar(R.string.Monk_Desc); } private static final HashSet> IMMUNITIES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Piranha.java b/src/com/watabou/pixeldungeon/actors/mobs/Piranha.java index 8d806552bf..02683505d7 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Piranha.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Piranha.java @@ -19,8 +19,10 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.ToxicGas; @@ -36,7 +38,7 @@ public class Piranha extends Mob { { - name = "giant piranha"; + name = Game.getVar(R.string.Piranha_Name); spriteClass = PiranhaSprite.class; baseSpeed = 2f; @@ -123,9 +125,7 @@ protected boolean getFurther( int target ) { @Override public String description() { - return - "These carnivorous fish are not natural inhabitants of underground pools. " + - "They were bred specifically to protect flooded treasure vaults."; + return Game.getVar(R.string.Piranha_Desc); } private static final HashSet> IMMUNITIES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Rat.java b/src/com/watabou/pixeldungeon/actors/mobs/Rat.java index 575bf0c9c1..d7e2ac908f 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Rat.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Rat.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.actors.mobs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.mobs.npcs.Ghost; import com.watabou.pixeldungeon.sprites.RatSprite; @@ -25,7 +27,7 @@ public class Rat extends Mob { { - name = "marsupial rat"; + name = Game.getVar(R.string.Rat_Name); spriteClass = RatSprite.class; HP = HT = 8; @@ -51,15 +53,13 @@ public int dr() { @Override public void die( Object cause ) { - Ghost.Quest.process( pos ); + Ghost.Quest.processSewersKill( pos ); super.die( cause ); } @Override public String description() { - return - "Marsupial rats are aggressive, but rather weak denizens " + - "of the sewers. They can be dangerous only in big numbers."; + return Game.getVar(R.string.Rat_Desc); } } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Scorpio.java b/src/com/watabou/pixeldungeon/actors/mobs/Scorpio.java index f5b0da6960..bfa26c0f91 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Scorpio.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Scorpio.java @@ -19,7 +19,9 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Cripple; @@ -36,7 +38,7 @@ public class Scorpio extends Mob { { - name = "scorpio"; + name = Game.getVar(R.string.Scorpio_Name); spriteClass = ScorpioSprite.class; HP = HT = 95; @@ -99,9 +101,7 @@ protected void dropLoot() { @Override public String description() { - return - "These huge arachnid-like demonic creatures avoid close combat by all means, " + - "firing crippling serrated spikes from long distances."; + return Game.getVar(R.string.Scorpio_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Senior.java b/src/com/watabou/pixeldungeon/actors/mobs/Senior.java index fef59ec39a..84e673eb71 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Senior.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Senior.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.mobs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Paralysis; @@ -27,7 +29,7 @@ public class Senior extends Monk { { - name = "senior monk"; + name = Game.getVar(R.string.Senior_Name); spriteClass = SeniorSprite.class; } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Shaman.java b/src/com/watabou/pixeldungeon/actors/mobs/Shaman.java index 8c9b708435..892f42af74 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Shaman.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Shaman.java @@ -20,7 +20,9 @@ import java.util.HashSet; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.effects.particles.SparkParticle; @@ -39,10 +41,10 @@ public class Shaman extends Mob implements Callback { private static final float TIME_TO_ZAP = 2f; - private static final String TXT_LIGHTNING_KILLED = "%s's lightning bolt killed you..."; + private static final String TXT_LIGHTNING_KILLED = Game.getVar(R.string.Shaman_Killed); { - name = "gnoll shaman"; + name = Game.getVar(R.string.Shaman_Name); spriteClass = ShamanSprite.class; HP = HT = 18; @@ -126,10 +128,7 @@ public void call() { @Override public String description() { - return - "The most intelligent gnolls can master shamanistic magic. Gnoll shamans prefer " + - "battle spells to compensate for lack of might, not hesitating to use them " + - "on those who question their status in a tribe."; + return Game.getVar(R.string.Shaman_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Shielded.java b/src/com/watabou/pixeldungeon/actors/mobs/Shielded.java index 393c46a6b0..730f9753ad 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Shielded.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Shielded.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.actors.mobs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ShieldedSprite; public class Shielded extends Brute { { - name = "shielded brute"; + name = Game.getVar(R.string.Shielded_Name); spriteClass = ShieldedSprite.class; defenseSkill = 20; @@ -36,7 +38,7 @@ public int dr() { @Override public String defenseVerb() { - return "blocked"; + return Game.getVar(R.string.Shielded_Defense); } @Override diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Skeleton.java b/src/com/watabou/pixeldungeon/actors/mobs/Skeleton.java index 8ba0f9910c..61b5fa3a7c 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Skeleton.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Skeleton.java @@ -19,9 +19,11 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.items.Generator; @@ -35,10 +37,10 @@ public class Skeleton extends Mob { - private static final String TXT_HERO_KILLED = "You were killed by the explosion of bones..."; + private static final String TXT_HERO_KILLED = Game.getVar(R.string.Skeleton_Killed); { - name = "skeleton"; + name = Game.getVar(R.string.Skeleton_Name); spriteClass = SkeletonSprite.class; HP = HT = 25; @@ -86,7 +88,7 @@ protected void dropLoot() { Item loot = Generator.random( Generator.Category.WEAPON ); for (int i=0; i < 2; i++) { Item l = Generator.random( Generator.Category.WEAPON ); - if (l.level < loot.level) { + if (l.level() < loot.level()) { loot = l; } } @@ -106,15 +108,12 @@ public int dr() { @Override public String defenseVerb() { - return "blocked"; + return Game.getVar(R.string.Skeleton_Defense); } @Override public String description() { - return - "Skeletons are composed of corpses bones from unlucky adventurers and inhabitants of the dungeon, " + - "animated by emanations of evil magic from the depths below. After they have been " + - "damaged enough, they disintegrate in an explosion of bones."; + return Game.getVar(R.string.Skeleton_Desc); } private static final HashSet> IMMUNITIES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Spinner.java b/src/com/watabou/pixeldungeon/actors/mobs/Spinner.java index 748a8ed1b0..d06a2595b7 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Spinner.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Spinner.java @@ -19,6 +19,8 @@ import java.util.HashSet; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.Blob; import com.watabou.pixeldungeon.actors.blobs.Web; @@ -34,7 +36,7 @@ public class Spinner extends Mob { { - name = "cave spinner"; + name = Game.getVar(R.string.Spinner_Name); spriteClass = SpinnerSprite.class; HP = HT = 50; @@ -96,9 +98,7 @@ public void move( int step ) { @Override public String description() { - return - "These greenish furry cave spiders try to avoid direct combat, preferring to wait in the distance " + - "while their victim, entangled in the spinner's excreted cobweb, slowly dies from their poisonous bite."; + return Game.getVar(R.string.Spinner_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Statue.java b/src/com/watabou/pixeldungeon/actors/mobs/Statue.java index c59f8cad57..690845d404 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Statue.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Statue.java @@ -19,8 +19,10 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.Journal; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.ToxicGas; import com.watabou.pixeldungeon.actors.buffs.Poison; @@ -37,7 +39,7 @@ public class Statue extends Mob { { - name = "animated statue"; + name = Game.getVar(R.string.Statue_Name); spriteClass = StatueSprite.class; EXP = 0; @@ -51,7 +53,7 @@ public Statue() { do { weapon = (Weapon)Generator.random( Generator.Category.WEAPON ); - } while (!(weapon instanceof MeleeWeapon) || weapon.level < 0); + } while (!(weapon instanceof MeleeWeapon) || weapon.level() < 0); weapon.identify(); weapon.enchant(); @@ -84,7 +86,7 @@ protected boolean act() { @Override public int damageRoll() { - return Random.NormalIntRange( weapon.MIN, weapon.MAX ); + return Random.NormalIntRange( weapon.min(), weapon.max() ); } @Override @@ -143,9 +145,7 @@ public boolean reset() { @Override public String description() { - return - "You would think that it's just another ugly statue of this dungeon, but its red glowing eyes give itself away. " + - "While the statue itself is made of stone, the _" + weapon.name() + "_, it's wielding, looks real."; + return String.format(Game.getVar(R.string.Statue_Desc), weapon.name()); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Succubus.java b/src/com/watabou/pixeldungeon/actors/mobs/Succubus.java index 114cb4d4c8..db4fe1ae33 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Succubus.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Succubus.java @@ -19,8 +19,10 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -43,7 +45,7 @@ public class Succubus extends Mob { private int delay = 0; { - name = "succubus"; + name = Game.getVar(R.string.Succubus_Name); spriteClass = SuccubusSprite.class; HP = HT = 80; @@ -115,9 +117,7 @@ public int dr() { @Override public String description() { - return - "The succubi are demons that look like seductive (in a slightly gothic way) girls. Using its magic, the succubus " + - "can charm a hero, who will become unable to attack anything until the charm wears off."; + return Game.getVar(R.string.Succubus_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Swarm.java b/src/com/watabou/pixeldungeon/actors/mobs/Swarm.java index a8b87c48f1..c74e9d50ec 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Swarm.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Swarm.java @@ -19,7 +19,9 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -38,7 +40,7 @@ public class Swarm extends Mob { { - name = "swarm of flies"; + name = Game.getVar(R.string.Swarm_Name); spriteClass = SwarmSprite.class; HP = HT = 80; @@ -114,7 +116,7 @@ public int attackSkill( Char target ) { @Override public String defenseVerb() { - return "evaded"; + return Game.getVar(R.string.Swarm_Defense); } private Swarm split() { @@ -138,8 +140,6 @@ protected void dropLoot() { @Override public String description() { - return - "The deadly swarm of flies buzzes angrily. Every non-magical attack " + - "will split it into two smaller but equally dangerous swarms."; + return Game.getVar(R.string.Swarm_Desc); } } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Tengu.java b/src/com/watabou/pixeldungeon/actors/mobs/Tengu.java index ae88b78429..3e80d57b36 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Tengu.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Tengu.java @@ -19,16 +19,19 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; -import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.Badges.Badge; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.ToxicGas; import com.watabou.pixeldungeon.actors.buffs.Poison; +import com.watabou.pixeldungeon.actors.hero.HeroSubClass; import com.watabou.pixeldungeon.effects.CellEmitter; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.items.TomeOfMastery; @@ -48,7 +51,8 @@ public class Tengu extends Mob { private static final int JUMP_DELAY = 5; { - name = Dungeon.depth == Statistics.deepestFloor ? "Tengu" : "memory of Tengu"; + name = Dungeon.depth == Statistics.deepestFloor ? Game.getVar(R.string.Tengu_Name1) : Game.getVar(R.string.Tengu_Name2); + spriteClass = TenguSprite.class; HP = HT = 120; @@ -91,7 +95,7 @@ public void die( Object cause ) { badgeToCheck = Badge.MASTERY_HUNTRESS; break; } - if (!Badges.isUnlocked( badgeToCheck )) { + if (!Badges.isUnlocked( badgeToCheck ) || Dungeon.hero.subClass != HeroSubClass.NONE) { Dungeon.level.drop( new TomeOfMastery(), pos ).sprite.drop(); } @@ -101,7 +105,7 @@ public void die( Object cause ) { Badges.validateBossSlain(); - yell( "Free at last..." ); + yell(Game.getVar(R.string.Tengu_Info1)); } @Override @@ -169,14 +173,12 @@ private void jump() { @Override public void notice() { super.notice(); - yell( "Gotcha, " + Dungeon.hero.heroClass.title() + "!" ); + yell(String.format(Game.getVar(R.string.Tengu_Info2), Dungeon.hero.heroClass.title())); } @Override public String description() { - return - "Tengu are members of the ancient assassins clan, which is also called Tengu. " + - "These assassins are noted for extensive use of shuriken and traps."; + return Game.getVar(R.string.Tengu_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Thief.java b/src/com/watabou/pixeldungeon/actors/mobs/Thief.java index 02b34de7a7..4d2c317708 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Thief.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Thief.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.mobs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Terror; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -33,13 +35,13 @@ public class Thief extends Mob { - protected static final String TXT_STOLE = "%s stole %s from you!"; - protected static final String TXT_CARRIES = "\n\n%s is carrying a _%s_. Stolen obviously."; + protected static final String TXT_STOLE = Game.getVar(R.string.Thief_Stole); + protected static final String TXT_CARRIES = Game.getVar(R.string.Thief_Carries); public Item item; { - name = "crazy thief"; + name = Game.getVar(R.string.Thief_Name); spriteClass = ThiefSprite.class; HP = HT = 20; @@ -134,10 +136,7 @@ protected boolean steal( Hero hero ) { @Override public String description() { - String desc = - "Deeper levels of the dungeon have always been a hiding place for all kinds of criminals. " + - "Not all of them could keep a clear mind during their extended periods so far from daylight. Long ago, " + - "these crazy thieves and bandits have forgotten who they are and why they steal."; + String desc = Game.getVar(R.string.Thief_Desc); if (item != null) { desc += String.format( TXT_CARRIES, Utils.capitalize( this.name ), item.name() ); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Warlock.java b/src/com/watabou/pixeldungeon/actors/mobs/Warlock.java index d1b5d1584e..d418111f2b 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Warlock.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Warlock.java @@ -19,7 +19,9 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -39,10 +41,10 @@ public class Warlock extends Mob implements Callback { private static final float TIME_TO_ZAP = 1f; - private static final String TXT_SHADOWBOLT_KILLED = "%s's shadow bolt killed you..."; + private static final String TXT_SHADOWBOLT_KILLED = Game.getVar(R.string.Warlock_Killed); { - name = "dwarf warlock"; + name = Game.getVar(R.string.Warlock_Name); spriteClass = WarlockSprite.class; HP = HT = 70; @@ -127,10 +129,7 @@ public void call() { @Override public String description() { - return - "When dwarves' interests have shifted from engineering to arcane arts, " + - "warlocks have come to power in the city. They started with elemental magic, " + - "but soon switched to demonology and necromancy."; + return Game.getVar(R.string.Warlock_Desc); } private static final HashSet> RESISTANCES = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Wraith.java b/src/com/watabou/pixeldungeon/actors/mobs/Wraith.java index f015a7b21c..77e0edfc24 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Wraith.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Wraith.java @@ -19,8 +19,10 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.noosa.tweeners.AlphaTweener; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Terror; @@ -39,7 +41,7 @@ public class Wraith extends Mob { private int level; { - name = "wraith"; + name = Game.getVar(R.string.Wraith_Name); spriteClass = WraithSprite.class; HP = HT = 1; @@ -81,7 +83,7 @@ public void adjustStats( int level ) { @Override public String defenseVerb() { - return "evaded"; + return Game.getVar(R.string.Wraith_Defense); } @Override @@ -92,9 +94,7 @@ public boolean reset() { @Override public String description() { - return - "A wraith is a vengeful spirit of a sinner, whose grave or tomb was disturbed. " + - "Being an ethereal entity, it is very hard to hit with a regular weapon."; + return Game.getVar(R.string.Wraith_Desc); } public static void spawnAround( int pos ) { diff --git a/src/com/watabou/pixeldungeon/actors/mobs/Yog.java b/src/com/watabou/pixeldungeon/actors/mobs/Yog.java index 2ade52f8b1..5c011c94a8 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/Yog.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/Yog.java @@ -20,7 +20,9 @@ import java.util.ArrayList; import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.Actor; @@ -57,7 +59,8 @@ public class Yog extends Mob { { - name = Dungeon.depth == Statistics.deepestFloor ? "Yog-Dzewa" : "echo of Yog-Dzewa"; + name = Dungeon.depth == Statistics.deepestFloor ? Game.getVar(R.string.Yog_Name1) : Game.getVar(R.string.Yog_Name2); + spriteClass = YogSprite.class; HP = HT = 300; @@ -67,10 +70,7 @@ public class Yog extends Mob { state = PASSIVE; } - private static final String TXT_DESC = - "Yog-Dzewa is an Old God, a powerful entity from the realms of chaos. A century ago, the ancient dwarves " + - "barely won the war against its army of demons, but were unable to kill the god itself. Instead, they then " + - "imprisoned it in the halls below their city, believing it to be too weak to rise ever again."; + private static final String TXT_DESC = Game.getVar(R.string.Yog_Desc); private static int fistsCount = 0; @@ -149,13 +149,13 @@ public void die( Object cause ) { Dungeon.level.drop( new SkeletonKey(), pos ).sprite.drop(); super.die( cause ); - yell( "..." ); + yell(Game.getVar(R.string.Yog_Info1)); } @Override public void notice() { super.notice(); - yell( "Hope is an illusion..." ); + yell(Game.getVar(R.string.Yog_Info2)); } @Override @@ -187,7 +187,7 @@ public static class RottingFist extends Mob { private static final int REGENERATION = 4; { - name = "rotting fist"; + name = Game.getVar(R.string.Yog_NameRottingFist); spriteClass = RottingFistSprite.class; HP = HT = 300; @@ -281,7 +281,7 @@ public HashSet> immunities() { public static class BurningFist extends Mob { { - name = "burning fist"; + name = Game.getVar(R.string.Yog_NameBurningFist); spriteClass = BurningFistSprite.class; HP = HT = 200; @@ -397,7 +397,7 @@ public HashSet> immunities() { public static class Larva extends Mob { { - name = "god's larva"; + name = Game.getVar(R.string.Yog_NameLarva); spriteClass = LarvaSprite.class; HP = HT = 25; diff --git a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Bee.java b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Bee.java index 4e5d757861..87e6439bdb 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Bee.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Bee.java @@ -19,7 +19,9 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Poison; import com.watabou.pixeldungeon.actors.mobs.Mob; @@ -32,7 +34,7 @@ public class Bee extends NPC { { - name = "golden bee"; + name = Game.getVar(R.string.Bee_Name); spriteClass = BeeSprite.class; viewDistance = 4; @@ -116,9 +118,7 @@ protected Char chooseEnemy() { @Override public String description() { - return - "Despite their small size, golden bees tend " + - "to protect their master fiercely. They don't live long though."; + return Game.getVar(R.string.Bee_Desc); } @Override @@ -176,7 +176,7 @@ public boolean act( boolean enemyInFOV, boolean justAlerted ) { @Override public String status() { - return Utils.format( "This %s is wandering", name ); + return Utils.format(Game.getVar(R.string.Bee_Status), name ); } } } \ No newline at end of file diff --git a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Blacksmith.java b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Blacksmith.java index 1111349362..75944e1353 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Blacksmith.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Blacksmith.java @@ -19,11 +19,13 @@ import java.util.Collection; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.Journal; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -44,31 +46,17 @@ public class Blacksmith extends NPC { - private static final String TXT_GOLD_1 = - "Hey human! Wanna be useful, eh? Take dis pickaxe and mine me some _dark gold ore_, _15 pieces_ should be enough. " + - "What do you mean, how am I gonna pay? You greedy...\n" + - "Ok, ok, I don't have money to pay, but I can do some smithin' for you. Consider yourself lucky, " + - "I'm the only blacksmith around."; - private static final String TXT_BLOOD_1 = - "Hey human! Wanna be useful, eh? Take dis pickaxe and _kill a bat_ wit' it, I need its blood on the head. " + - "What do you mean, how am I gonna pay? You greedy...\n" + - "Ok, ok, I don't have money to pay, but I can do some smithin' for you. Consider yourself lucky, " + - "I'm the only blacksmith around."; - private static final String TXT2 = - "Are you kiddin' me? Where is my pickaxe?!"; - private static final String TXT3 = - "Dark gold ore. 15 pieces. Seriously, is it dat hard?"; - private static final String TXT4 = - "I said I need bat blood on the pickaxe. Chop chop!"; - private static final String TXT_COMPLETED = - "Oh, you have returned... Better late dan never."; - private static final String TXT_GET_LOST = - "I'm busy. Get lost!"; - - private static final String TXT_LOOKS_BETTER = "your %s certainly looks better now"; + private static final String TXT_GOLD_1 = Game.getVar(R.string.Blacksmith_Gold1); + private static final String TXT_BLOOD_1 = Game.getVar(R.string.Blacksmith_Blood1); + private static final String TXT2 = Game.getVar(R.string.Blacksmith_Txt2); + private static final String TXT3 = Game.getVar(R.string.Blacksmith_Txt3); + private static final String TXT4 = Game.getVar(R.string.Blacksmith_Txt4); + private static final String TXT_COMPLETED = Game.getVar(R.string.Blacksmith_Completed); + private static final String TXT_GET_LOST = Game.getVar(R.string.Blacksmith_GetLost); + private static final String TXT_LOOKS_BETTER = Game.getVar(R.string.Blacksmith_LooksBetter); { - name = "troll blacksmith"; + name = Game.getVar(R.string.Blacksmith_Name); spriteClass = BlacksmithSprite.class; } @@ -164,27 +152,27 @@ private void tell( String text ) { public static String verify( Item item1, Item item2 ) { if (item1 == item2) { - return "Select 2 different items, not the same item twice!"; + return Game.getVar(R.string.Blacksmith_Verify1); } if (item1.getClass() != item2.getClass()) { - return "Select 2 items of the same type!"; + return Game.getVar(R.string.Blacksmith_Verify2); } if (!item1.isIdentified() || !item2.isIdentified()) { - return "I need to know what I'm working with, identify them first!"; + return Game.getVar(R.string.Blacksmith_Verify3); } if (item1.cursed || item2.cursed) { - return "I don't work with cursed items!"; + return Game.getVar(R.string.Blacksmith_Verify4); } - if (item1.level < 0 || item2.level < 0) { - return "It's a junk, the quality is too poor!"; + if (item1.level() < 0 || item2.level() < 0) { + return Game.getVar(R.string.Blacksmith_Verify5); } if (!item1.isUpgradable() || !item2.isUpgradable()) { - return "I can't reforge these items!"; + return Game.getVar(R.string.Blacksmith_Verify6); } return null; @@ -193,7 +181,7 @@ public static String verify( Item item1, Item item2 ) { public static void upgrade( Item item1, Item item2 ) { Item first, second; - if (item2.level > item1.level) { + if (item2.level() > item1.level()) { first = item2; second = item1; } else { @@ -243,9 +231,7 @@ public boolean reset() { @Override public String description() { - return - "This troll blacksmith looks like all trolls look: he is tall and lean, and his skin resembles stone " + - "in both color and texture. The troll blacksmith is tinkering with unproportionally small tools."; + return Game.getVar(R.string.Blacksmith_Desc); } public static class Quest { diff --git a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Ghost.java b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Ghost.java index 57fc34e812..0e897d4bc6 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Ghost.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Ghost.java @@ -19,21 +19,25 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; +import com.watabou.noosa.tweeners.AlphaTweener; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Challenges; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.Journal; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; -import com.watabou.pixeldungeon.actors.blobs.Blob; -import com.watabou.pixeldungeon.actors.blobs.ParalyticGas; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Paralysis; import com.watabou.pixeldungeon.actors.buffs.Roots; +import com.watabou.pixeldungeon.actors.mobs.CursePersonification; +import com.watabou.pixeldungeon.actors.mobs.FetidRat; import com.watabou.pixeldungeon.actors.mobs.Mob; import com.watabou.pixeldungeon.effects.CellEmitter; import com.watabou.pixeldungeon.effects.Speck; +import com.watabou.pixeldungeon.effects.particles.ShadowParticle; import com.watabou.pixeldungeon.items.Generator; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.items.armor.Armor; @@ -44,8 +48,8 @@ import com.watabou.pixeldungeon.items.weapon.missiles.MissileWeapon; import com.watabou.pixeldungeon.levels.SewerLevel; import com.watabou.pixeldungeon.scenes.GameScene; -import com.watabou.pixeldungeon.sprites.FetidRatSprite; import com.watabou.pixeldungeon.sprites.GhostSprite; +import com.watabou.pixeldungeon.utils.Utils; import com.watabou.pixeldungeon.windows.WndQuest; import com.watabou.pixeldungeon.windows.WndSadGhost; import com.watabou.utils.Bundle; @@ -54,7 +58,7 @@ public class Ghost extends NPC { { - name = "sad ghost"; + name = Game.getVar(R.string.Ghost_Name); spriteClass = GhostSprite.class; flying = true; @@ -62,23 +66,6 @@ public class Ghost extends NPC { state = WANDERING; } - private static final String TXT_ROSE1 = - "Hello adventurer... Once I was like you - strong and confident... " + - "And now I'm dead... But I can't leave this place... Not until I have my _dried rose_... " + - "It's very important to me... Some monster stole it from my body..."; - - private static final String TXT_ROSE2 = - "Please... Help me... Find the rose..."; - - private static final String TXT_RAT1 = - "Hello adventurer... Once I was like you - strong and confident... " + - "And now I'm dead... But I can't leave this place... Not until I have my revenge... " + - "Slay the _fetid rat_, that has taken my life..."; - - private static final String TXT_RAT2 = - "Please... Help me... Slay the abomination..."; - - public Ghost() { super(); @@ -92,7 +79,7 @@ public int defenseSkill( Char enemy ) { @Override public String defenseVerb() { - return "evaded"; + return Game.getVar(R.string.Ghost_Defense); } @Override @@ -121,50 +108,14 @@ public boolean reset() { @Override public void interact() { sprite.turnTo( pos, Dungeon.hero.pos ); - Sample.INSTANCE.play( Assets.SND_GHOST ); - if (Quest.given) { - - Item item = Quest.alternative ? - Dungeon.hero.belongings.getItem( RatSkull.class ) : - Dungeon.hero.belongings.getItem( DriedRose.class ); - if (item != null) { - GameScene.show( new WndSadGhost( this, item ) ); - } else { - GameScene.show( new WndQuest( this, Quest.alternative ? TXT_RAT2 : TXT_ROSE2 ) ); - - int newPos = -1; - for (int i=0; i < 10; i++) { - newPos = Dungeon.level.randomRespawnCell(); - if (newPos != -1) { - break; - } - } - if (newPos != -1) { - - Actor.freeCell( pos ); - - CellEmitter.get( pos ).start( Speck.factory( Speck.LIGHT ), 0.2f, 3 ); - pos = newPos; - sprite.place( pos ); - sprite.visible = Dungeon.visible[pos]; - } - } - - } else { - GameScene.show( new WndQuest( this, Quest.alternative ? TXT_RAT1 : TXT_ROSE1 ) ); - Quest.given = true; - - Journal.add( Journal.Feature.GHOST ); - } + Quest.type.handler.interact( this ); } @Override public String description() { - return - "The ghost is barely visible. It looks like a shapeless " + - "spot of faint light with a sorrowful face."; + return Game.getVar(R.string.Ghost_Desc); } private static final HashSet> IMMUNITIES = new HashSet>(); @@ -178,16 +129,42 @@ public HashSet> immunities() { return IMMUNITIES; } + public static void replace( final Mob a, final Mob b ) { + final float FADE_TIME = 0.5f; + + a.destroy(); + a.sprite.parent.add( new AlphaTweener( a.sprite, 0, FADE_TIME ) { + protected void onComplete() { + a.sprite.killAndErase(); + parent.erase( this ); + }; + } ); + + b.pos = a.pos; + GameScene.add( b ); + + b.sprite.flipHorizontal = a.sprite.flipHorizontal; + b.sprite.alpha( 0 ); + b.sprite.parent.add( new AlphaTweener( b.sprite, 1, FADE_TIME ) ); + } + public static class Quest { + enum Type { + ILLEGAL( null ), ROSE( roseQuest ), RAT( ratQuest ), CURSE( curseQuest ); + + public QuestHandler handler; + private Type( QuestHandler handler ) { + this.handler = handler; + } + } + + private static Type type; + private static boolean spawned; - - private static boolean alternative; - private static boolean given; - private static boolean processed; - + private static int depth; private static int left2kill; @@ -205,6 +182,7 @@ public static void reset() { private static final String NODE = "sadGhost"; private static final String SPAWNED = "spawned"; + private static final String TYPE = "type"; private static final String ALTERNATIVE = "alternative"; private static final String LEFT2KILL = "left2kill"; private static final String GIVEN = "given"; @@ -221,8 +199,8 @@ public static void storeInBundle( Bundle bundle ) { if (spawned) { - node.put( ALTERNATIVE, alternative ); - if (!alternative) { + node.put( TYPE, type.toString() ); + if (type == Type.ROSE) { node.put( LEFT2KILL, left2kill ); } @@ -243,8 +221,11 @@ public static void restoreFromBundle( Bundle bundle ) { if (!node.isNull() && (spawned = node.getBoolean( SPAWNED ))) { - alternative = node.getBoolean( ALTERNATIVE ); - if (!alternative) { + type = node.getEnum( TYPE, Type.class ); + if (type == Type.ILLEGAL) { + type = node.getBoolean( ALTERNATIVE ) ? Type.RAT : Type.ROSE; + } + if (type == Type.ROSE) { left2kill = node.getInt( LEFT2KILL ); } @@ -270,9 +251,17 @@ public static void spawn( SewerLevel level ) { Actor.occupyCell( ghost ); spawned = true; - alternative = Random.Int( 2 ) == 0; - if (!alternative) { + switch (Random.Int( 3 )) { + case 0: + type = Type.ROSE; left2kill = 8; + break; + case 1: + type = Type.RAT; + break; + case 2: + type = Type.CURSE; + break; } given = false; @@ -285,7 +274,7 @@ public static void spawn( SewerLevel level ) { another = (Weapon)Generator.random( Generator.Category.WEAPON ); } while (another instanceof MissileWeapon); - if (weapon == null || another.level > weapon.level) { + if (weapon == null || another.level() > weapon.level()) { weapon = (Weapon)another; } } @@ -296,7 +285,7 @@ public static void spawn( SewerLevel level ) { armor = (Armor)Generator.random( Generator.Category.ARMOR ); for (int i=0; i < 3; i++) { Item another = Generator.random( Generator.Category.ARMOR ); - if (another.level > armor.level) { + if (another.level() > armor.level()) { armor = (Armor)another; } } @@ -307,26 +296,26 @@ public static void spawn( SewerLevel level ) { } } - public static void process( int pos ) { + public static void processSewersKill( int pos ) { if (spawned && given && !processed && (depth == Dungeon.depth)) { - if (alternative) { - - FetidRat rat = new FetidRat(); - rat.pos = Dungeon.level.randomRespawnCell(); - if (rat.pos != -1) { - GameScene.add( rat ); - processed = true; - } - - } else { - + switch (type) { + case ROSE: if (Random.Int( left2kill ) == 0) { Dungeon.level.drop( new DriedRose(), pos ).sprite.drop(); processed = true; } else { left2kill--; } - + break; + case RAT: + FetidRat rat = new FetidRat(); + rat.pos = Dungeon.level.randomRespawnCell(); + if (rat.pos != -1) { + GameScene.add( rat ); + processed = true; + } + break; + default: } } } @@ -338,66 +327,117 @@ public static void complete() { Journal.remove( Journal.Feature.GHOST ); } } - - public static class FetidRat extends Mob { - { - name = "fetid rat"; - spriteClass = FetidRatSprite.class; - - HP = HT = 15; - defenseSkill = 5; - - EXP = 0; - maxLvl = 5; - - state = WANDERING; - } + abstract public static class QuestHandler { - @Override - public int damageRoll() { - return Random.NormalIntRange( 2, 6 ); - } + abstract public void interact( Ghost ghost ); - @Override - public int attackSkill( Char target ) { - return 12; + protected void relocate( Ghost ghost ) { + int newPos = -1; + for (int i=0; i < 10; i++) { + newPos = Dungeon.level.randomRespawnCell(); + if (newPos != -1) { + break; + } + } + if (newPos != -1) { + + Actor.freeCell( ghost.pos ); + + CellEmitter.get( ghost.pos ).start( Speck.factory( Speck.LIGHT ), 0.2f, 3 ); + ghost.pos = newPos; + ghost.sprite.place( ghost.pos ); + ghost.sprite.visible = Dungeon.visible[ghost.pos]; + } } + } + + private static final QuestHandler roseQuest = new QuestHandler() { - @Override - public int dr() { - return 2; + private final String TXT_ROSE1 = Game.getVar(R.string.Ghost_Rose1); + private final String TXT_ROSE2 = Game.getVar(R.string.Ghost_Rose2);; + private final String TXT_ROSE3 = Game.getVar(R.string.Ghost_Rose3);; + + public void interact( Ghost ghost ) { + if (Quest.given) { + + Item item = Dungeon.hero.belongings.getItem( DriedRose.class ); + if (item != null) { + GameScene.show( new WndSadGhost( ghost, item, TXT_ROSE3 ) ); + } else { + GameScene.show( new WndQuest( ghost, TXT_ROSE2 ) ); + relocate( ghost ); + } + + } else { + GameScene.show( new WndQuest( ghost, TXT_ROSE1 ) ); + Quest.given = true; + + Journal.add( Journal.Feature.GHOST ); + } } + }; + + private static final QuestHandler ratQuest = new QuestHandler() { - @Override - public int defenseProc( Char enemy, int damage ) { - - GameScene.add( Blob.seed( pos, 20, ParalyticGas.class ) ); - - return super.defenseProc(enemy, damage); - } + private final String TXT_RAT1 = Game.getVar(R.string.Ghost_Rat1); + private final String TXT_RAT2 = Game.getVar(R.string.Ghost_Rat2); + private final String TXT_RAT3 = Game.getVar(R.string.Ghost_Rat3);; - @Override - public void die( Object cause ) { - super.die( cause ); - - Dungeon.level.drop( new RatSkull(), pos ).sprite.drop(); + public void interact( Ghost ghost ) { + if (Quest.given) { + + Item item = Dungeon.hero.belongings.getItem( RatSkull.class ); + if (item != null) { + GameScene.show( new WndSadGhost( ghost, item, TXT_RAT3 ) ); + } else { + GameScene.show( new WndQuest( ghost, TXT_RAT2 ) ); + relocate( ghost ); + } + + } else { + GameScene.show( new WndQuest( ghost, TXT_RAT1 ) ); + Quest.given = true; + + Journal.add( Journal.Feature.GHOST ); + } } + }; + + private static final QuestHandler curseQuest = new QuestHandler() { - @Override - public String description() { - return - "This marsupial rat is much larger, than a regular one. It is surrounded by a foul cloud."; - } + private final String TXT_CURSE1 = Game.getVar(R.string.Ghost_Curse1); + private final String TXT_CURSE2 = Game.getVar(R.string.Ghost_Curse2); - private static final HashSet> IMMUNITIES = new HashSet>(); - static { - IMMUNITIES.add( Paralysis.class ); - } + private final String TXT_YES = Game.getVar(R.string.Ghost_CurseY); + private final String TXT_NO = Game.getVar(R.string.Ghost_CurseN); - @Override - public HashSet> immunities() { - return IMMUNITIES; + public void interact( final Ghost ghost ) { + if (Quest.given) { + + GameScene.show( new WndSadGhost( ghost, null, Utils.format( TXT_CURSE2, Dungeon.hero.className() ) ) ); + + } else { + GameScene.show( new WndQuest( ghost, TXT_CURSE1, TXT_YES, TXT_NO ) { + protected void onSelect( int index ) { + if (index == 0) { + Quest.given = true; + + CursePersonification d = new CursePersonification(); + Ghost.replace( ghost, d ); + + d.sprite.emitter().burst( ShadowParticle.CURSE, 5 ); + Sample.INSTANCE.play( Assets.SND_GHOST ); + + Dungeon.hero.next(); + } else { + relocate( ghost ); + } + }; + } ); + + Journal.add( Journal.Feature.GHOST ); + } } - } + }; } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Imp.java b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Imp.java index 40eb42dd73..99cec8e753 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Imp.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Imp.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.actors.mobs.npcs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.Journal; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -41,35 +43,16 @@ public class Imp extends NPC { { - name = "ambitious imp"; + name = Game.getVar(R.string.Imp_Name); spriteClass = ImpSprite.class; } - private static final String TXT_GOLEMS1 = - "Are you an adventurer? I love adventurers! You can always rely on them " + - "if something needs to be killed. Am I right? For a bounty, of course ;)\n" + - "In my case this is _golems_ who need to be killed. You see, I'm going to start a " + - "little business here, but these stupid golems are bad for business! " + - "It's very hard to negotiate with wandering lumps of granite, damn them! " + - "So please, kill... let's say _6 of them_ and a reward is yours."; - - private static final String TXT_MONKS1 = - "Are you an adventurer? I love adventurers! You can always rely on them " + - "if something needs to be killed. Am I right? For a bounty, of course ;)\n" + - "In my case this is _monks_ who need to be killed. You see, I'm going to start a " + - "little business here, but these lunatics don't buy anything themselves and " + - "will scare away other customers. " + - "So please, kill... let's say _8 of them_ and a reward is yours."; - - private static final String TXT_GOLEMS2 = - "How is your golem safari going?"; - - private static final String TXT_MONKS2 = - "Oh, you are still alive! I knew that your kung-fu is stronger ;) " + - "Just don't forget to grab these monks' tokens."; - - private static final String TXT_CYA = "See you, %s!"; - private static final String TXT_HEY = "Psst, %s!"; + private static final String TXT_GOLEMS1 = Game.getVar(R.string.Imp_Golems1); + private static final String TXT_GOLEMS2 = Game.getVar(R.string.Imp_Golems2); + private static final String TXT_MONKS1 = Game.getVar(R.string.Imp_Monks1); + private static final String TXT_MONKS2 = Game.getVar(R.string.Imp_Monks2); + private static final String TXT_CYA = Game.getVar(R.string.Imp_Cya); + private static final String TXT_HEY = Game.getVar(R.string.Imp_Hey); private boolean seenBefore = false; @@ -97,7 +80,7 @@ public int defenseSkill( Char enemy ) { @Override public String defenseVerb() { - return "evaded"; + return Game.getVar(R.string.Imp_Defense); } @Override @@ -150,9 +133,7 @@ public void flee() { @Override public String description() { - return - "Imps are lesser demons. They are notable for neither their strength nor their magic talent, " + - "but they are quite smart and sociable. Many imps prefer to live among non-demons."; + return Game.getVar(R.string.Imp_Desc); } public static class Quest { diff --git a/src/com/watabou/pixeldungeon/actors/mobs/npcs/ImpShopkeeper.java b/src/com/watabou/pixeldungeon/actors/mobs/npcs/ImpShopkeeper.java index 03287d5457..ed5fb828da 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/npcs/ImpShopkeeper.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/npcs/ImpShopkeeper.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.mobs.npcs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.effects.CellEmitter; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.effects.particles.ElmoParticle; @@ -27,10 +29,10 @@ public class ImpShopkeeper extends Shopkeeper { - private static final String TXT_GREETINGS = "Hello, friend!"; + private static final String TXT_GREETINGS = Game.getVar(R.string.ImpShopkeeper_Greetings); { - name = "ambitious imp"; + name = Game.getVar(R.string.ImpShopkeeper_Name); spriteClass = ImpSprite.class; } @@ -64,8 +66,6 @@ protected void flee() { @Override public String description() { - return - "Imps are lesser demons. They are notable for neither their strength nor their magic talent. " + - "But they are quite smart and sociable, and many of imps prefer to live and do business among non-demons."; + return Game.getVar(R.string.ImpShopkeeper_Desc); } } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/npcs/MirrorImage.java b/src/com/watabou/pixeldungeon/actors/mobs/npcs/MirrorImage.java index 865b389606..98d2f8e075 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/npcs/MirrorImage.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/npcs/MirrorImage.java @@ -19,7 +19,9 @@ import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.ToxicGas; import com.watabou.pixeldungeon.actors.buffs.Burning; @@ -34,7 +36,7 @@ public class MirrorImage extends NPC { { - name = "mirror image"; + name = Game.getVar(R.string.MirrorImage_Name); spriteClass = MirrorSprite.class; state = HUNTING; @@ -109,9 +111,7 @@ protected Char chooseEnemy() { @Override public String description() { - return - "This illusion bears a close resemblance to you, " + - "but it's paler and twitches a little."; + return Game.getVar(R.string.MirrorImage_Desc); } @Override diff --git a/src/com/watabou/pixeldungeon/actors/mobs/npcs/RatKing.java b/src/com/watabou/pixeldungeon/actors/mobs/npcs/RatKing.java index de3e0a7efe..8e1f0010bc 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/npcs/RatKing.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/npcs/RatKing.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.mobs.npcs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -26,7 +28,7 @@ public class RatKing extends NPC { { - name = "rat king"; + name = Game.getVar(R.string.RatKing_Name); spriteClass = RatKingSprite.class; state = SLEEPEING; @@ -65,17 +67,15 @@ public void interact() { sprite.turnTo( pos, Dungeon.hero.pos ); if (state == SLEEPEING) { notice(); - yell( "I'm not sleeping!" ); + yell(Game.getVar(R.string.RatKing_Info1)); state = WANDERING; } else { - yell( "What is it? I have no time for this nonsense. My kingdom won't rule itself!" ); + yell(Game.getVar(R.string.RatKing_Info2)); } } @Override public String description() { - return - "This rat is a little bigger than a regular marsupial rat " + - "and it's wearing a tiny crown on its head."; + return Game.getVar(R.string.RatKing_Desc); } } diff --git a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Shopkeeper.java b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Shopkeeper.java index 170feeb2cc..8c170d7366 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Shopkeeper.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Shopkeeper.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.actors.mobs.npcs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.effects.CellEmitter; import com.watabou.pixeldungeon.effects.particles.ElmoParticle; @@ -31,7 +33,7 @@ public class Shopkeeper extends NPC { { - name = "shopkeeper"; + name = Game.getVar(R.string.Shopkeeper_Name); spriteClass = ShopkeeperSprite.class; } @@ -76,13 +78,11 @@ public boolean reset() { @Override public String description() { - return - "This stout guy looks more appropriate for a trade district in some large city " + - "than for a dungeon. His prices explain why he prefers to do business here."; + return Game.getVar(R.string.Shopkeeper_Desc); } public static WndBag sell() { - return GameScene.selectItem( itemSelector, WndBag.Mode.FOR_SALE, "Select an item to sell" ); + return GameScene.selectItem( itemSelector, WndBag.Mode.FOR_SALE, Game.getVar(R.string.Shopkeeper_Sell)); } private static WndBag.Listener itemSelector = new WndBag.Listener() { diff --git a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Wandmaker.java b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Wandmaker.java index e452527c2f..a4163108d3 100644 --- a/src/com/watabou/pixeldungeon/actors/mobs/npcs/Wandmaker.java +++ b/src/com/watabou/pixeldungeon/actors/mobs/npcs/Wandmaker.java @@ -19,24 +19,17 @@ import java.util.ArrayList; -import com.watabou.noosa.audio.Sample; -import com.watabou.pixeldungeon.Assets; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.Journal; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; -import com.watabou.pixeldungeon.actors.blobs.Blob; -import com.watabou.pixeldungeon.actors.blobs.ToxicGas; import com.watabou.pixeldungeon.actors.buffs.Buff; -import com.watabou.pixeldungeon.actors.buffs.Roots; -import com.watabou.pixeldungeon.actors.mobs.Mob; -import com.watabou.pixeldungeon.effects.CellEmitter; -import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.items.Heap; import com.watabou.pixeldungeon.items.Item; -import com.watabou.pixeldungeon.items.bags.Bag; -import com.watabou.pixeldungeon.items.potions.PotionOfStrength; import com.watabou.pixeldungeon.items.quest.CorpseDust; +import com.watabou.pixeldungeon.items.quest.PhantomFish; import com.watabou.pixeldungeon.items.wands.Wand; import com.watabou.pixeldungeon.items.wands.WandOfAmok; import com.watabou.pixeldungeon.items.wands.WandOfAvalanche; @@ -47,15 +40,14 @@ import com.watabou.pixeldungeon.items.wands.WandOfPoison; import com.watabou.pixeldungeon.items.wands.WandOfRegrowth; import com.watabou.pixeldungeon.items.wands.WandOfSlowness; -import com.watabou.pixeldungeon.items.wands.WandOfTelekinesis; +import com.watabou.pixeldungeon.items.wands.WandOfReach; +import com.watabou.pixeldungeon.levels.Level; import com.watabou.pixeldungeon.levels.PrisonLevel; import com.watabou.pixeldungeon.levels.Room; import com.watabou.pixeldungeon.levels.Terrain; -import com.watabou.pixeldungeon.plants.Plant; +import com.watabou.pixeldungeon.plants.Rotberry; import com.watabou.pixeldungeon.scenes.GameScene; -import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; import com.watabou.pixeldungeon.sprites.WandmakerSprite; -import com.watabou.pixeldungeon.utils.GLog; import com.watabou.pixeldungeon.utils.Utils; import com.watabou.pixeldungeon.windows.WndQuest; import com.watabou.pixeldungeon.windows.WndWandmaker; @@ -65,28 +57,10 @@ public class Wandmaker extends NPC { { - name = "old wandmaker"; + name = Game.getVar(R.string.WandMaker_Name); spriteClass = WandmakerSprite.class; } - private static final String TXT_BERRY1 = - "Oh, what a pleasant surprise to meet a decent person in such place! I came here for a rare ingredient - " + - "a _Rotberry seed_. Being a magic user, I'm quite able to defend myself against local monsters, " + - "but I'm getting lost in no time, it's very embarrassing. Probably you could help me? I would be " + - "happy to pay for your service with one of my best wands."; - - private static final String TXT_DUST1 = - "Oh, what a pleasant surprise to meet a decent person in such place! I came here for a rare ingredient - " + - "_corpse dust_. It can be gathered from skeletal remains and there is an ample number of them in the dungeon. " + - "Being a magic user, I'm quite able to defend myself against local monsters, but I'm getting lost in no time, " + - "it's very embarrassing. Probably you could help me? I would be happy to pay for your service with one of my best wands."; - - private static final String TXT_BERRY2 = - "Any luck with a Rotberry seed, %s? No? Don't worry, I'm not in a hurry."; - - private static final String TXT_DUST2 = - "Any luck with corpse dust, %s? Bone piles are the most obvious places to look."; - @Override protected boolean act() { throwItem(); @@ -100,7 +74,7 @@ public int defenseSkill( Char enemy ) { @Override public String defenseVerb() { - return "absorbed"; + return Game.getVar(R.string.WandMaker_Defense); } @Override @@ -118,27 +92,8 @@ public boolean reset() { @Override public void interact() { - sprite.turnTo( pos, Dungeon.hero.pos ); - if (Quest.given) { - - Item item = Quest.alternative ? - Dungeon.hero.belongings.getItem( CorpseDust.class ) : - Dungeon.hero.belongings.getItem( Rotberry.Seed.class ); - if (item != null) { - GameScene.show( new WndWandmaker( this, item ) ); - } else { - tell( Quest.alternative ? TXT_DUST2 : TXT_BERRY2, Dungeon.hero.className() ); - } - - } else { - tell( Quest.alternative ? TXT_DUST1 : TXT_BERRY1 ); - Quest.given = true; - - Quest.placeItem(); - - Journal.add( Journal.Feature.WANDMAKER ); - } + Quest.type.handler.interact( this ); } private void tell( String format, Object...args ) { @@ -147,17 +102,23 @@ private void tell( String format, Object...args ) { @Override public String description() { - return - "This old but hale gentleman wears a slightly confused " + - "expression. He is protected by a magic shield."; + return Game.getVar(R.string.WandMaker_Desc); } public static class Quest { - private static boolean spawned; + enum Type { + ILLEGAL( null ), BERRY( berryQuest ), DUST( dustQuest ), FISH( fishQuest ); + + public QuestHandler handler; + private Type( QuestHandler handler ) { + this.handler = handler; + } + } - private static boolean alternative; + private static Type type; + private static boolean spawned; private static boolean given; public static Wand wand1; @@ -173,6 +134,7 @@ public static void reset() { private static final String NODE = "wandmaker"; private static final String SPAWNED = "spawned"; + private static final String TYPE = "type"; private static final String ALTERNATIVE = "alternative"; private static final String GIVEN = "given"; private static final String WAND1 = "wand1"; @@ -186,9 +148,9 @@ public static void storeInBundle( Bundle bundle ) { if (spawned) { - node.put( ALTERNATIVE, alternative ); + node.put( TYPE, type.toString() ); - node.put(GIVEN, given ); + node.put( GIVEN, given ); node.put( WAND1, wand1 ); node.put( WAND2, wand2 ); @@ -203,7 +165,10 @@ public static void restoreFromBundle( Bundle bundle ) { if (!node.isNull() && (spawned = node.getBoolean( SPAWNED ))) { - alternative = node.getBoolean( ALTERNATIVE ); + type = node.getEnum( TYPE, Type.class ); + if (type == Type.ILLEGAL) { + type = node.getBoolean( ALTERNATIVE ) ? Type.DUST : Type.BERRY; + } given = node.getBoolean( GIVEN ); @@ -225,7 +190,26 @@ public static void spawn( PrisonLevel level, Room room ) { Actor.occupyCell( npc ); spawned = true; - alternative = Random.Int( 2 ) == 0; + switch (Random.Int( 3 )) { + case 0: + type = Type.BERRY; + break; + case 1: + type = Type.DUST; + break; + case 2: + type = Type.FISH; + int water = 0; + for (int i=0; i < Level.LENGTH; i++) { + if (Level.water[i]) { + if (++water > Level.LENGTH / 16) { + type = Random.Int( 2 ) == 0 ? Type.BERRY : Type.DUST; + break; + } + } + } + break; + } given = false; @@ -262,118 +246,138 @@ public static void spawn( PrisonLevel level, Room room ) { wand2 = new WandOfSlowness(); break; case 4: - wand2 = new WandOfTelekinesis(); + wand2 = new WandOfReach(); break; } wand2.random().upgrade(); } } - public static void placeItem() { - if (alternative) { - - ArrayList candidates = new ArrayList(); - for (Heap heap : Dungeon.level.heaps.values()) { - if (heap.type == Heap.Type.SKELETON && !Dungeon.visible[heap.pos]) { - candidates.add( heap ); - } - } + public static void complete() { + wand1 = null; + wand2 = null; + + Journal.remove( Journal.Feature.WANDMAKER ); + } + } + + abstract public static class QuestHandler { + + protected String txtQuest1; + protected String txtQuest2; + + public void interact( Wandmaker wandmaker ) { + if (Quest.given) { - if (candidates.size() > 0) { - Random.element( candidates ).drop( new CorpseDust() ); + Item item = checkItem(); + if (item != null) { + GameScene.show( new WndWandmaker( wandmaker, item ) ); } else { - int pos = Dungeon.level.randomRespawnCell(); - while (Dungeon.level.heaps.get( pos ) != null) { - pos = Dungeon.level.randomRespawnCell(); - } - - Heap heap = Dungeon.level.drop( new CorpseDust(), pos ); - heap.type = Heap.Type.SKELETON; - heap.sprite.link(); + wandmaker.tell( txtQuest2, Dungeon.hero.className() ); } } else { + wandmaker.tell( txtQuest1 ); + Quest.given = true; - int shrubPos = Dungeon.level.randomRespawnCell(); - while (Dungeon.level.heaps.get( shrubPos ) != null) { - shrubPos = Dungeon.level.randomRespawnCell(); - } - Dungeon.level.plant( new Rotberry.Seed(), shrubPos ); + placeItem(); + Journal.add( Journal.Feature.WANDMAKER ); } } - public static void complete() { - wand1 = null; - wand2 = null; - - Journal.remove( Journal.Feature.WANDMAKER ); - } + abstract protected Item checkItem(); + abstract protected void placeItem(); } - public static class Rotberry extends Plant { - - private static final String TXT_DESC = - "Berries of this shrub taste like sweet, sweet death."; - + private static final QuestHandler berryQuest = new QuestHandler() { { - image = 7; - plantName = "Rotberry"; + txtQuest1 = Game.getVar(R.string.WandMaker_Berry1); + + txtQuest2 = Game.getVar(R.string.WandMaker_Berry2); } - + @Override - public void activate( Char ch ) { - super.activate( ch ); - - GameScene.add( Blob.seed( pos, 100, ToxicGas.class ) ); - - Dungeon.level.drop( new Seed(), pos ).sprite.drop(); - - if (ch != null) { - Buff.prolong( ch, Roots.class, TICK * 3 ); + protected Item checkItem() { + return Dungeon.hero.belongings.getItem( Rotberry.Seed.class ); + } + + @Override + protected void placeItem() { + int shrubPos = Dungeon.level.randomRespawnCell(); + while (Dungeon.level.heaps.get( shrubPos ) != null) { + shrubPos = Dungeon.level.randomRespawnCell(); } + Dungeon.level.plant( new Rotberry.Seed(), shrubPos ); + } + }; + + private static final QuestHandler dustQuest = new QuestHandler() { + { + txtQuest1 = Game.getVar(R.string.WandMaker_Dust1); + txtQuest2 = Game.getVar(R.string.WandMaker_Dust2); } @Override - public String desc() { - return TXT_DESC; + protected Item checkItem() { + return Dungeon.hero.belongings.getItem( CorpseDust.class ); } - - public static class Seed extends Plant.Seed { - { - plantName = "Rotberry"; - - name = "seed of " + plantName; - image = ItemSpriteSheet.SEED_ROTBERRY; - - plantClass = Rotberry.class; - alchemyClass = PotionOfStrength.class; + + @Override + protected void placeItem() { + ArrayList candidates = new ArrayList(); + for (Heap heap : Dungeon.level.heaps.values()) { + if (heap.type == Heap.Type.SKELETON && !Dungeon.visible[heap.pos]) { + candidates.add( heap ); + } } - @Override - public boolean collect( Bag container ) { - if (super.collect( container )) { - - if (Dungeon.level != null) { - for (Mob mob : Dungeon.level.mobs) { - mob.beckon( Dungeon.hero.pos ); - } - - GLog.w( "The seed emits a roar that echoes throughout the dungeon!" ); - CellEmitter.center( Dungeon.hero.pos ).start( Speck.factory( Speck.SCREAM ), 0.3f, 3 ); - Sample.INSTANCE.play( Assets.SND_CHALLENGE ); - } - - return true; - } else { - return false; + if (candidates.size() > 0) { + Random.element( candidates ).drop( new CorpseDust() ); + } else { + int pos = Dungeon.level.randomRespawnCell(); + while (Dungeon.level.heaps.get( pos ) != null) { + pos = Dungeon.level.randomRespawnCell(); } + + Heap heap = Dungeon.level.drop( new CorpseDust(), pos ); + heap.type = Heap.Type.SKELETON; + heap.sprite.link(); } - - @Override - public String desc() { - return TXT_DESC; + } + }; + + private static final QuestHandler fishQuest = new QuestHandler() { + { + txtQuest1 = Game.getVar(R.string.WandMaker_Fish1); + txtQuest2 = Game.getVar(R.string.WandMaker_Fish2); + } + + @Override + protected Item checkItem() { + return Dungeon.hero.belongings.getItem( PhantomFish.class ); + } + + @Override + protected void placeItem() { + Heap heap = null; + for (int i=0; i < 100; i++) { + int pos = Random.Int( Level.LENGTH ); + if (Level.water[pos]) { + heap = Dungeon.level.drop( new PhantomFish(), pos ); + heap.type = Heap.Type.HIDDEN; + heap.sprite.link(); + return; + } + } + if (heap == null) { + int pos = Dungeon.level.randomRespawnCell(); + while (Dungeon.level.heaps.get( pos ) != null) { + pos = Dungeon.level.randomRespawnCell(); + } + + Dungeon.level.drop( new PhantomFish(), pos ); } } - } + }; } diff --git a/src/com/watabou/pixeldungeon/effects/Enchanting.java b/src/com/watabou/pixeldungeon/effects/Enchanting.java new file mode 100644 index 0000000000..adadac5977 --- /dev/null +++ b/src/com/watabou/pixeldungeon/effects/Enchanting.java @@ -0,0 +1,107 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.effects; + +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.actors.Char; +import com.watabou.pixeldungeon.items.Item; +import com.watabou.pixeldungeon.sprites.ItemSprite; + +public class Enchanting extends ItemSprite { + private static final int SIZE = 16; + + private enum Phase { + FADE_IN, STATIC, FADE_OUT + } + + private static final float FADE_IN_TIME = 0.2f; + private static final float STATIC_TIME = 1.0f; + private static final float FADE_OUT_TIME = 0.4f; + + private static final float ALPHA = 0.6f; + + private int color; + + private Char target; + + private Phase phase; + private float duration; + private float passed; + + public Enchanting( Item item ) { + super( item.image(), null ); + originToCenter(); + + color = item.glowing().color; + + phase = Phase.FADE_IN; + duration = FADE_IN_TIME; + passed = 0; + } + + @Override + public void update() { + super.update(); + + x = target.sprite.center().x - SIZE / 2; + y = target.sprite.y - SIZE; + + switch (phase) { + case FADE_IN: + alpha( passed / duration * ALPHA ); + scale.set( passed / duration ); + break; + case STATIC: + tint( color, passed / duration * 0.8f ); + break; + case FADE_OUT: + alpha( (1 - passed / duration) * ALPHA ); + scale.set( 1 + passed / duration ); + break; + } + + if ((passed += Game.elapsed) > duration) { + switch (phase) { + case FADE_IN: + phase = Phase.STATIC; + duration = STATIC_TIME; + break; + case STATIC: + phase = Phase.FADE_OUT; + duration = FADE_OUT_TIME; + break; + case FADE_OUT: + kill(); + break; + } + + passed = 0; + } + } + + public static void show( Char ch, Item item ) { + + if (!ch.sprite.visible) { + return; + } + + Enchanting sprite = new Enchanting( item ); + sprite.target = ch; + ch.sprite.parent.add( sprite ); + } +} \ No newline at end of file diff --git a/src/com/watabou/pixeldungeon/effects/Flare.java b/src/com/watabou/pixeldungeon/effects/Flare.java index 749a1cbcd0..fc4de52495 100644 --- a/src/com/watabou/pixeldungeon/effects/Flare.java +++ b/src/com/watabou/pixeldungeon/effects/Flare.java @@ -26,13 +26,14 @@ import android.annotation.SuppressLint; import android.opengl.GLES20; -import android.util.FloatMath; import com.watabou.gltextures.Gradient; import com.watabou.gltextures.SmartTexture; import com.watabou.noosa.Game; +import com.watabou.noosa.Group; import com.watabou.noosa.NoosaScript; import com.watabou.noosa.Visual; +import com.watabou.utils.PointF; public class Flare extends Visual { @@ -85,13 +86,13 @@ public Flare( int nRays, float radius ) { for (int i=0; i < nRays; i++) { float a = i * 3.1415926f * 2 / nRays; - v[0] = FloatMath.cos( a ) * radius; - v[1] = FloatMath.sin( a ) * radius; + v[0] = (float)Math.cos( a ) * radius; + v[1] = (float)Math.sin( a ) * radius; vertices.put( v ); a += 3.1415926f * 2 / nRays / 2; - v[0] = FloatMath.cos( a ) * radius; - v[1] = FloatMath.sin( a ) * radius; + v[0] = (float)Math.cos( a ) * radius; + v[1] = (float)Math.sin( a ) * radius; vertices.put( v ); indices.put( (short)0 ); @@ -118,6 +119,15 @@ public Flare show( Visual visual, float duration ) { return this; } + public Flare show( Group parent, PointF pos, float duration ) { + point( pos ); + parent.add( this ); + + lifespan = this.duration = duration; + + return this; + } + @Override public void update() { super.update(); diff --git a/src/com/watabou/pixeldungeon/effects/MagicMissile.java b/src/com/watabou/pixeldungeon/effects/MagicMissile.java index 3707a7e4d1..1d50fbd2b3 100644 --- a/src/com/watabou/pixeldungeon/effects/MagicMissile.java +++ b/src/com/watabou/pixeldungeon/effects/MagicMissile.java @@ -21,6 +21,7 @@ import com.watabou.noosa.Group; import com.watabou.noosa.particles.Emitter; import com.watabou.noosa.particles.PixelParticle; +import com.watabou.noosa.particles.PixelParticle.Shrinking; import com.watabou.pixeldungeon.DungeonTilemap; import com.watabou.pixeldungeon.effects.particles.FlameParticle; import com.watabou.pixeldungeon.effects.particles.LeafParticle; @@ -44,6 +45,10 @@ public class MagicMissile extends Emitter { private float time; public void reset( int from, int to, Callback callback ) { + reset( from, to, SPEED, callback ); + } + + public void reset( int from, int to, float velocity, Callback callback ) { this.callback = callback; revive(); @@ -57,10 +62,10 @@ public void reset( int from, int to, Callback callback ) { height = 0; PointF d = PointF.diff( pt, pf ); - PointF speed = new PointF( d ).normalize().scale( SPEED ); + PointF speed = new PointF( d ).normalize().scale( velocity ); sx = speed.x; sy = speed.y; - time = d.length() / SPEED; + time = d.length() / velocity; } public void size( float size ) { @@ -133,7 +138,7 @@ public static void slowness( Group group, int from, int to, Callback callback ) public static void force( Group group, int from, int to, Callback callback ) { MagicMissile missile = ((MagicMissile)group.recycle( MagicMissile.class )); missile.reset( from, to, callback ); - missile.size( 4 ); + missile.size( 0 ); missile.pour( ForceParticle.FACTORY, 0.01f ); } @@ -320,41 +325,28 @@ public void update() { } } - public static class ForceParticle extends PixelParticle { + public static class ForceParticle extends Shrinking { public static final Emitter.Factory FACTORY = new Factory() { @Override public void emit( Emitter emitter, int index, float x, float y ) { - ((ForceParticle)emitter.recycle( ForceParticle.class )).reset( x, y ); + ((ForceParticle)emitter.recycle( ForceParticle.class )).reset( index, x, y ); } }; - public ForceParticle() { - super(); + public void reset( int index, float x, float y ) { + super.reset( x, y, 0xFFFFFF, 8, 0.5f ); - lifespan = 0.6f; - - size( 4 ); - } - - public void reset( float x, float y ) { - revive(); - - this.x = x; - this.y = y; - - left = lifespan; - - acc.set( 0 ); - speed.set( Random.Float( -40, +40 ), Random.Float( -40, +40 ) ); + speed.polar( PointF.PI2 / 8 * index, 12 ); + this.x -= speed.x * lifespan; + this.y -= speed.y * lifespan; } @Override public void update() { super.update(); - am = (left / lifespan) / 2; - acc.set( -speed.x * 10, -speed.y * 10 ); + am = (1 - left / lifespan) / 2; } } diff --git a/src/com/watabou/pixeldungeon/effects/Speck.java b/src/com/watabou/pixeldungeon/effects/Speck.java index 7b7fc82626..0e58c4c182 100644 --- a/src/com/watabou/pixeldungeon/effects/Speck.java +++ b/src/com/watabou/pixeldungeon/effects/Speck.java @@ -18,7 +18,6 @@ package com.watabou.pixeldungeon.effects; import android.annotation.SuppressLint; -import android.util.FloatMath; import android.util.SparseArray; import com.watabou.noosa.Game; @@ -372,9 +371,9 @@ public void update() { break; case CHANGE: - am = (float)FloatMath.sqrt( (p < 0.5f ? p : 1 - p) * 2); + am = (float)Math.sqrt( (p < 0.5f ? p : 1 - p) * 2); scale.y = (1 + p) * 0.5f; - scale.x = scale.y * FloatMath.cos( left * 15 ); + scale.x = scale.y * (float)Math.cos( left * 15 ); break; case HEART: @@ -401,7 +400,7 @@ public void update() { break; case COIN: - scale.x = FloatMath.cos( left * 5 ); + scale.x = (float)Math.cos( left * 5 ); rm = gm = bm = (Math.abs( scale.x ) + 1) * 0.5f; am = p < 0.9f ? 1 : (1 - p) * 10; break; diff --git a/src/com/watabou/pixeldungeon/effects/Swap.java b/src/com/watabou/pixeldungeon/effects/Swap.java new file mode 100644 index 0000000000..207f99054b --- /dev/null +++ b/src/com/watabou/pixeldungeon/effects/Swap.java @@ -0,0 +1,137 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.effects; + +import com.watabou.noosa.Game; +import com.watabou.noosa.Visual; +import com.watabou.noosa.audio.Sample; +import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.actors.Actor; +import com.watabou.pixeldungeon.actors.Char; +import com.watabou.pixeldungeon.actors.mobs.Mob; +import com.watabou.pixeldungeon.levels.Level; +import com.watabou.pixeldungeon.sprites.CharSprite; +import com.watabou.utils.PointF; + +public class Swap extends Actor { + + private Char ch1; + private Char ch2; + + private Effect eff1; + private Effect eff2; + + private float delay; + + public Swap( Char ch1, Char ch2 ) { + + this.ch1 = ch1; + this.ch2 = ch2; + + delay = Level.distance( ch1.pos, ch2.pos ) * 0.1f; + + eff1 = new Effect( ch1.sprite, ch1.pos, ch2.pos ); + eff2 = new Effect( ch2.sprite, ch2.pos, ch1.pos ); + Sample.INSTANCE.play( Assets.SND_TELEPORT ); + } + + @Override + protected boolean act() { + return false; + } + + private void finish( Effect eff ) { + if (eff == eff1) { + eff1 = null; + } + if (eff == eff2) { + eff2 = null; + } + + if (eff1 == null && eff2 == null) { + Actor.remove( this ); + next(); + + int pos = ch1.pos; + ch1.pos = ch2.pos; + ch2.pos = pos; + + if (!ch1.flying) { + if (ch1 instanceof Mob) { + Dungeon.level.mobPress( (Mob)ch1 ); + } else { + Dungeon.level.press( ch1.pos, ch1 ); + } + } + if (!ch2.flying) { + if (ch2 instanceof Mob) { + Dungeon.level.mobPress( (Mob)ch2 ); + } else { + Dungeon.level.press( ch2.pos, ch2 ); + } + } + + if (ch1 == Dungeon.hero || ch2 == Dungeon.hero) { + Dungeon.observe(); + } + } + } + + private class Effect extends Visual { + + private CharSprite sprite; + private PointF end; + private float passed; + + public Effect( CharSprite sprite, int from, int to ) { + super( 0, 0, 0, 0 ); + + this.sprite = sprite; + + point( sprite.worldToCamera( from ) ); + end = sprite.worldToCamera( to ); + + speed.set( 2 * (end.x - x) / delay, 2 * (end.y - y) / delay ); + acc.set( -speed.x / delay, -speed.y / delay ); + + passed = 0; + + sprite.parent.add( this ); + } + + @Override + public void update() { + super.update(); + + if ((passed += Game.elapsed) < delay) { + sprite.x = x; + sprite.y = y; + + } else { + + sprite.point( end ); + + killAndErase(); + finish( this ); + + } + } + } + +} diff --git a/src/com/watabou/pixeldungeon/effects/particles/SacrificialParticle.java b/src/com/watabou/pixeldungeon/effects/particles/SacrificialParticle.java new file mode 100644 index 0000000000..d81a71a0b0 --- /dev/null +++ b/src/com/watabou/pixeldungeon/effects/particles/SacrificialParticle.java @@ -0,0 +1,64 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.effects.particles; + +import com.watabou.noosa.particles.Emitter; +import com.watabou.noosa.particles.PixelParticle; +import com.watabou.noosa.particles.Emitter.Factory; + +public class SacrificialParticle extends PixelParticle.Shrinking { + + public static final Emitter.Factory FACTORY = new Factory() { + @Override + public void emit( Emitter emitter, int index, float x, float y ) { + ((SacrificialParticle)emitter.recycle( SacrificialParticle.class )).reset( x, y ); + } + @Override + public boolean lightMode() { + return true; + }; + }; + + public SacrificialParticle() { + super(); + + color( 0x4488EE ); + lifespan = 0.6f; + + acc.set( 0, -100 ); + } + + public void reset( float x, float y ) { + revive(); + + this.x = x; + this.y = y - 4; + + left = lifespan; + + size = 4; + speed.set( 0 ); + } + + @Override + public void update() { + super.update(); + float p = left / lifespan; + am = p > 0.75f ? (1 - p) * 4 : 1; + } +} \ No newline at end of file diff --git a/src/com/watabou/pixeldungeon/items/Amulet.java b/src/com/watabou/pixeldungeon/items/Amulet.java index 4856a89bc5..efe4000ca5 100644 --- a/src/com/watabou/pixeldungeon/items/Amulet.java +++ b/src/com/watabou/pixeldungeon/items/Amulet.java @@ -23,6 +23,7 @@ import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.scenes.AmuletScene; @@ -30,10 +31,10 @@ public class Amulet extends Item { - private static final String AC_END = "END THE GAME"; + private static final String AC_END = Game.getVar(R.string.Amulet_ACEnd); { - name = "Amulet of Yendor"; + name = Game.getVar(R.string.Amulet_Name); image = ItemSpriteSheet.AMULET; unique = true; @@ -97,8 +98,6 @@ public boolean isUpgradable() { @Override public String info() { - return - "The Amulet of Yendor is the most powerful known artifact of unknown origin. It is said that the amulet " + - "is able to fulfil any wish if its owner's will-power is strong enough to \"persuade\" it to do it."; + return Game.getVar(R.string.Amulet_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/Ankh.java b/src/com/watabou/pixeldungeon/items/Ankh.java index adc12fad07..f6cf10136c 100644 --- a/src/com/watabou/pixeldungeon/items/Ankh.java +++ b/src/com/watabou/pixeldungeon/items/Ankh.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class Ankh extends Item { { stackable = true; - name = "Ankh"; + name = Game.getVar(R.string.Ankh_Name); image = ItemSpriteSheet.ANKH; } @@ -39,9 +41,7 @@ public boolean isIdentified() { @Override public String info() { - return - "The ancient symbol of immortality grants an ability to return to life after death. " + - "Upon resurrection all non-equipped items are lost."; + return Game.getVar(R.string.Ankh_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/ArmorKit.java b/src/com/watabou/pixeldungeon/items/ArmorKit.java index 5d380d5343..0059e78076 100644 --- a/src/com/watabou/pixeldungeon/items/ArmorKit.java +++ b/src/com/watabou/pixeldungeon/items/ArmorKit.java @@ -19,8 +19,10 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.items.armor.Armor; @@ -33,15 +35,15 @@ public class ArmorKit extends Item { - private static final String TXT_SELECT_ARMOR = "Select an armor to upgrade"; - private static final String TXT_UPGRADED = "you applied the armor kit to upgrade your %s"; + private static final String TXT_SELECT_ARMOR = Game.getVar(R.string.ArmorKit_SelectArmor); + private static final String TXT_UPGRADED = Game.getVar(R.string.ArmorKit_Upgraded); private static final float TIME_TO_UPGRADE = 2; - private static final String AC_APPLY = "APPLY"; + private static final String AC_APPLY = Game.getVar(R.string.ArmorKit_ACAplly); { - name = "armor kit"; + name = Game.getVar(R.string.ArmorKit_Name); image = ItemSpriteSheet.KIT; unique = true; @@ -107,10 +109,7 @@ private void upgrade( Armor armor ) { @Override public String info() { - return - "Using this kit of small tools and materials anybody can transform any armor into an \"epic armor\", " + - "which will keep all properties of the original armor, but will also provide its wearer a special ability " + - "depending on his class. No skills in tailoring, leatherworking or blacksmithing are required."; + return Game.getVar(R.string.ArmorKit_Info); } private final WndBag.Listener itemSelector = new WndBag.Listener() { diff --git a/src/com/watabou/pixeldungeon/items/Bomb.java b/src/com/watabou/pixeldungeon/items/Bomb.java index 5516838e25..7a786e2181 100644 --- a/src/com/watabou/pixeldungeon/items/Bomb.java +++ b/src/com/watabou/pixeldungeon/items/Bomb.java @@ -17,9 +17,12 @@ */ package com.watabou.pixeldungeon.items; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -28,15 +31,16 @@ import com.watabou.pixeldungeon.effects.particles.BlastParticle; import com.watabou.pixeldungeon.effects.particles.SmokeParticle; import com.watabou.pixeldungeon.levels.Level; -import com.watabou.pixeldungeon.levels.Terrain; import com.watabou.pixeldungeon.scenes.GameScene; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.pixeldungeon.utils.GLog; +import com.watabou.pixeldungeon.utils.Utils; import com.watabou.utils.Random; public class Bomb extends Item { { - name = "bomb"; + name = Game.getVar(R.string.Bomb_Name); image = ItemSpriteSheet.BOMB; defaultAction = AC_THROW; stackable = true; @@ -62,7 +66,7 @@ protected void onThrow( int cell ) { } if (Level.flamable[c]) { - Level.set( c, Terrain.EMBERS ); + Dungeon.level.destroy( c ); GameScene.updateMap( c ); terrainAffected = true; } @@ -74,6 +78,9 @@ protected void onThrow( int cell ) { ch.damage( dmg, this ); if (ch.isAlive()) { Buff.prolong( ch, Paralysis.class, 2 ); + } else if (ch == Dungeon.hero) { + Dungeon.fail( Utils.format( ResultDescriptions.BOMB, Dungeon.depth ) ); + GLog.n( Game.getVar(R.string.Bomb_Kill) ); } } } @@ -109,7 +116,6 @@ public int price() { @Override public String info() { - return - "This is a relatively small bomb, filled with black powder. Conveniently, its fuse is lit automatically when the bomb is thrown."; + return Game.getVar(R.string.Bomb_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/DewVial.java b/src/com/watabou/pixeldungeon/items/DewVial.java index 5114afa109..4a07a820d9 100644 --- a/src/com/watabou/pixeldungeon/items/DewVial.java +++ b/src/com/watabou/pixeldungeon/items/DewVial.java @@ -19,8 +19,10 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.effects.particles.ShaftParticle; @@ -35,20 +37,20 @@ public class DewVial extends Item { private static final int MAX_VOLUME = 10; - private static final String AC_DRINK = "DRINK"; + private static final String AC_DRINK = Game.getVar(R.string.DewVial_ACDRINK); private static final float TIME_TO_DRINK = 1f; private static final String TXT_VALUE = "%+dHP"; private static final String TXT_STATUS = "%d/%d"; - private static final String TXT_AUTO_DRINK = "The dew vial was emptied to heal your wounds."; - private static final String TXT_COLLECTED = "You collected a dewdrop into your dew vial."; - private static final String TXT_FULL = "Your dew vial is full!"; - private static final String TXT_EMPTY = "Your dew vial is empty!"; + private static final String TXT_AUTO_DRINK = Game.getVar(R.string.DewVial_AutoDrink); + private static final String TXT_COLLECTED = Game.getVar(R.string.DewVial_Collected); + private static final String TXT_FULL = Game.getVar(R.string.DewVial_Full); + private static final String TXT_EMPTY = Game.getVar(R.string.DewVial_Empty); { - name = "dew vial"; + name = Game.getVar(R.string.DewVial_Name); image = ItemSpriteSheet.VIAL; defaultAction = AC_DRINK; @@ -174,10 +176,7 @@ public String status() { @Override public String info() { - return - "You can store excess dew in this tiny vessel for drinking it later. " + - "If the vial is full, in a moment of deadly peril the dew will be " + - "consumed automatically."; + return Game.getVar(R.string.DewVial_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/Dewdrop.java b/src/com/watabou/pixeldungeon/items/Dewdrop.java index 40d04a9da4..1bd4994ee8 100644 --- a/src/com/watabou/pixeldungeon/items/Dewdrop.java +++ b/src/com/watabou/pixeldungeon/items/Dewdrop.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.hero.HeroClass; import com.watabou.pixeldungeon.effects.Speck; @@ -31,7 +33,7 @@ public class Dewdrop extends Item { private static final String TXT_VALUE = "%+dHP"; { - name = "dewdrop"; + name = Game.getVar(R.string.Dewdrop_Name); image = ItemSpriteSheet.DEWDROP; stackable = true; @@ -70,6 +72,6 @@ public boolean doPickUp( Hero hero ) { @Override public String info() { - return "A crystal clear dewdrop."; + return Game.getVar(R.string.Dewdrop_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/EquipableItem.java b/src/com/watabou/pixeldungeon/items/EquipableItem.java index c5245550c0..69e471058b 100644 --- a/src/com/watabou/pixeldungeon/items/EquipableItem.java +++ b/src/com/watabou/pixeldungeon/items/EquipableItem.java @@ -17,19 +17,21 @@ */ package com.watabou.pixeldungeon.items; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.effects.particles.ShadowParticle; import com.watabou.pixeldungeon.utils.GLog; public abstract class EquipableItem extends Item { - private static final String TXT_UNEQUIP_CURSED = "You can't remove cursed %s!"; - - public static final String AC_EQUIP = "EQUIP"; - public static final String AC_UNEQUIP = "UNEQUIP"; + public static final String AC_EQUIP = Game.getVar(R.string.EquipableItem_ACEquip); + public static final String AC_UNEQUIP = Game.getVar(R.string.EquipableItem_ACUnequip); + + private static final String TXT_UNEQUIP_CURSED = Game.getVar(R.string.EquipableItem_Unequip); @Override public void execute( Hero hero, String action ) { diff --git a/src/com/watabou/pixeldungeon/items/Generator.java b/src/com/watabou/pixeldungeon/items/Generator.java index 41f9a1cbcb..5e8bccd4be 100644 --- a/src/com/watabou/pixeldungeon/items/Generator.java +++ b/src/com/watabou/pixeldungeon/items/Generator.java @@ -21,7 +21,6 @@ import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.actors.hero.Hero; -import com.watabou.pixeldungeon.actors.mobs.npcs.Wandmaker.Rotberry; import com.watabou.pixeldungeon.items.armor.*; import com.watabou.pixeldungeon.items.bags.Bag; import com.watabou.pixeldungeon.items.food.Food; @@ -120,7 +119,7 @@ public static int order( Item item ) { WandOfBlink.class, WandOfLightning.class, WandOfAmok.class, - WandOfTelekinesis.class, + WandOfReach.class, WandOfFlock.class, WandOfMagicMissile.class, WandOfDisintegration.class, diff --git a/src/com/watabou/pixeldungeon/items/Gold.java b/src/com/watabou/pixeldungeon/items/Gold.java index 4968fba3ce..a4a3e35150 100644 --- a/src/com/watabou/pixeldungeon/items/Gold.java +++ b/src/com/watabou/pixeldungeon/items/Gold.java @@ -19,10 +19,12 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.scenes.GameScene; @@ -34,13 +36,13 @@ public class Gold extends Item { - private static final String TXT_COLLECT = "Collect gold coins to spend them later in a shop."; - private static final String TXT_INFO = "A pile of %d gold coins. " + TXT_COLLECT; - private static final String TXT_INFO_1 = "One gold coin. " + TXT_COLLECT; + private static final String TXT_COLLECT = Game.getVar(R.string.Gold_Collect); + private static final String TXT_INFO = Game.getVar(R.string.Gold_Info)+" "+TXT_COLLECT; + private static final String TXT_INFO_1 = Game.getVar(R.string.Gold_Info1)+" "+TXT_COLLECT; private static final String TXT_VALUE = "%+d"; { - name = "gold"; + name = Game.getVar(R.string.Gold_Name); image = ItemSpriteSheet.GOLD; stackable = true; } diff --git a/src/com/watabou/pixeldungeon/items/Heap.java b/src/com/watabou/pixeldungeon/items/Heap.java index 70c9d8c6ef..8806286a28 100644 --- a/src/com/watabou/pixeldungeon/items/Heap.java +++ b/src/com/watabou/pixeldungeon/items/Heap.java @@ -20,10 +20,13 @@ import java.util.Collection; import java.util.LinkedList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; +import com.watabou.noosa.tweeners.AlphaTweener; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Burning; @@ -51,10 +54,12 @@ public class Heap implements Bundlable { - private static final String TXT_MIMIC = "This is a mimic!"; + private static final String TXT_MIMIC = Game.getVar(R.string.Heap_Mimic); private static final int SEEDS_TO_POTION = 3; + private static final float FADE_TIME = 0.6f; + public enum Type { HEAP, FOR_SALE, @@ -63,7 +68,8 @@ public enum Type { CRYSTAL_CHEST, TOMB, SKELETON, - MIMIC + MIMIC, + HIDDEN } public Type type = Type.HEAP; @@ -89,6 +95,8 @@ public int image() { return ItemSpriteSheet.TOMB; case SKELETON: return ItemSpriteSheet.BONES; + case HIDDEN: + return ItemSpriteSheet.HIDDEN; default: return 0; } @@ -124,6 +132,10 @@ public void open( Hero hero ) { } } break; + case HIDDEN: + sprite.alpha( 0 ); + sprite.parent.add( new AlphaTweener( sprite, 1, FADE_TIME ) ); + break; default: } diff --git a/src/com/watabou/pixeldungeon/items/Honeypot.java b/src/com/watabou/pixeldungeon/items/Honeypot.java index c0efb9cd96..1f8943be45 100644 --- a/src/com/watabou/pixeldungeon/items/Honeypot.java +++ b/src/com/watabou/pixeldungeon/items/Honeypot.java @@ -19,10 +19,12 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.noosa.tweeners.AlphaTweener; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.mobs.npcs.Bee; @@ -35,10 +37,10 @@ public class Honeypot extends Item { - public static final String AC_SHATTER = "SHATTER"; + public static final String AC_SHATTER = Game.getVar(R.string.Honeypot_ACShatter); { - name = "honeypot"; + name = Game.getVar(R.string.Honeypot_Name); image = ItemSpriteSheet.HONEYPOT; defaultAction = AC_THROW; stackable = true; @@ -130,7 +132,6 @@ public int price() { @Override public String info() { - return - "There is not much honey in this small honeypot, but there is a golden bee there and it doesn't want to leave it."; + return Game.getVar(R.string.Honeypot_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/Item.java b/src/com/watabou/pixeldungeon/items/Item.java index cd06a03ab8..70302b626b 100644 --- a/src/com/watabou/pixeldungeon/items/Item.java +++ b/src/com/watabou/pixeldungeon/items/Item.java @@ -21,10 +21,12 @@ import java.util.Collections; import java.util.Comparator; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.SnipersMark; @@ -53,37 +55,38 @@ public class Item implements Bundlable { - private static final String TXT_PACK_FULL = "Your pack is too full for the %s"; - - private static final String TXT_DEGRADED = "Because of frequent use, your %s has degraded."; - private static final String TXT_GONNA_DEGRADE = "Because of frequent use, your %s is going to degrade soon."; + private static final String TXT_PACK_FULL = Game.getVar(R.string.Item_PackFull); + private static final String TXT_DIR_THROW = Game.getVar(R.string.Item_DirThrow); + + private static final String TXT_BROKEN = Game.getVar(R.string.Item_Broken); + private static final String TXT_GONNA_BREAK = Game.getVar(R.string.Item_GonnaBreak); - private static final String TXT_TO_STRING = "%s"; + private static final String TXT_TO_STRING = "%s"; private static final String TXT_TO_STRING_X = "%s x%d"; private static final String TXT_TO_STRING_LVL = "%s%+d"; private static final String TXT_TO_STRING_LVL_X = "%s%+d x%d"; private static final float DURABILITY_WARNING_LEVEL = 1/6f; - protected static final float TIME_TO_THROW = 1.0f; + protected static final float TIME_TO_THROW = 1.0f; protected static final float TIME_TO_PICK_UP = 1.0f; protected static final float TIME_TO_DROP = 0.5f; - public static final String AC_DROP = "DROP"; - public static final String AC_THROW = "THROW"; + public static final String AC_DROP = Game.getVar(R.string.Item_ACDrop); + public static final String AC_THROW = Game.getVar(R.string.Item_ACThrow); public String defaultAction; - protected String name = "smth"; + protected String name = Game.getVar(R.string.Item_Name); protected int image = 0; public boolean stackable = false; protected int quantity = 1; - public int level = 0; - public boolean levelKnown = false; + private int level = 0; private int durability = maxDurability(); + public boolean levelKnown = false; public boolean cursed; public boolean cursedKnown; @@ -250,6 +253,18 @@ public final Item detachAll( Bag container ) { protected void onDetach( ) { } + public int level() { + return level; + } + + public void level( int value ) { + level = value; + } + + public int effectiveLevel() { + return isBroken() ? 0 : level; + } + public Item upgrade() { cursed = false; @@ -286,15 +301,15 @@ final public Item degrade( int n ) { } public void use() { - if (level > 0) { + if (level > 0 && !isBroken()) { int threshold = (int)(maxDurability() * DURABILITY_WARNING_LEVEL); - if (durability-- >= threshold && threshold > durability) { - GLog.w( TXT_GONNA_DEGRADE, name() ); + if (durability-- >= threshold && threshold > durability && levelKnown) { + GLog.w( TXT_GONNA_BREAK, name() ); } - if (durability <= 0) { - degrade(); + if (isBroken()) { + getBroken(); if (levelKnown) { - GLog.n( TXT_DEGRADED, name() ); + GLog.n( TXT_BROKEN, name() ); Dungeon.hero.interrupt(); CharSprite sprite = Dungeon.hero.sprite; @@ -314,6 +329,13 @@ public void use() { } } + public boolean isBroken() { + return durability <= 0; + } + + public void getBroken() { + } + public void fix() { durability = maxDurability(); } @@ -344,6 +366,10 @@ public boolean visiblyCursed() { return cursed && cursedKnown; } + public boolean visiblyBroken() { + return levelKnown && isBroken(); + } + public boolean isUpgradable() { return true; } @@ -422,6 +448,27 @@ public int price() { return 0; } + public int considerState( int price ) { + if (cursed && cursedKnown) { + price /= 2; + } + if (levelKnown) { + if (level > 0) { + price *= (level + 1); + if (isBroken()) { + price /= 2; + } + } else if (level < 0) { + price /= (1 - level); + } + } + if (price < 1) { + price = 1; + } + + return price; + } + public static Item virtual( Class cl ) { try { @@ -456,7 +503,7 @@ public void updateQuickslot() { private static final String QUANTITY = "quantity"; private static final String LEVEL = "level"; - private static final String LEVEL_KNOWN = "levelKnown"; + private static final String LEVEL_KNOWN = "levelKnown"; private static final String CURSED = "cursed"; private static final String CURSED_KNOWN = "cursedKnown"; private static final String DURABILITY = "durability"; @@ -492,9 +539,6 @@ public void restoreFromBundle( Bundle bundle ) { if (isUpgradable()) { durability = bundle.getInt( DURABILITY ); } - if (durability <= 0) { - durability = maxDurability( level ); - } QuickSlot.restore( bundle, this ); } @@ -547,7 +591,7 @@ public void onSelect( Integer target ) { } @Override public String prompt() { - return "Choose direction of throw"; + return TXT_DIR_THROW; } }; } diff --git a/src/com/watabou/pixeldungeon/items/KindOfWeapon.java b/src/com/watabou/pixeldungeon/items/KindOfWeapon.java index e4b192d7f8..30d6d0dba3 100644 --- a/src/com/watabou/pixeldungeon/items/KindOfWeapon.java +++ b/src/com/watabou/pixeldungeon/items/KindOfWeapon.java @@ -19,21 +19,20 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.ui.QuickSlot; import com.watabou.pixeldungeon.utils.GLog; import com.watabou.utils.Random; -public class KindOfWeapon extends EquipableItem { +abstract public class KindOfWeapon extends EquipableItem { - private static final String TXT_EQUIP_CURSED = "you wince as your grip involuntarily tightens around your %s"; + private static final String TXT_EQUIP_CURSED = Game.getVar(R.string.KindOfWeapon_EquipCursed); protected static final float TIME_TO_EQUIP = 1f; - public int MIN = 0; - public int MAX = 1; - @Override public ArrayList actions( Hero hero ) { ArrayList actions = super.actions( hero ); @@ -91,8 +90,11 @@ public boolean doUnequip( Hero hero, boolean collect, boolean single ) { public void activate( Hero hero ) { } + abstract public int min(); + abstract public int max(); + public int damageRoll( Hero owner ) { - return Random.NormalIntRange( MIN, MAX ); + return Random.NormalIntRange( min(), max() ); } public float acuracyFactor( Hero hero ) { diff --git a/src/com/watabou/pixeldungeon/items/LloydsBeacon.java b/src/com/watabou/pixeldungeon/items/LloydsBeacon.java index f045dc6cbe..481305f0ab 100644 --- a/src/com/watabou/pixeldungeon/items/LloydsBeacon.java +++ b/src/com/watabou/pixeldungeon/items/LloydsBeacon.java @@ -23,6 +23,7 @@ import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.wands.WandOfBlink; @@ -36,31 +37,26 @@ public class LloydsBeacon extends Item { - private static final String TXT_PREVENTING = - "Strong magic aura of this place prevents you from using the lloyd's beacon!"; + private static final String TXT_PREVENTING = Game.getVar(R.string.LloidsBeacon_Preventing); - private static final String TXT_CREATURES = - "Psychic aura of neighbouring creatures doesn't allow you to use the lloyd's beacon at this moment."; + private static final String TXT_CREATURES = Game.getVar(R.string.LloidsBeacon_Creatures); - private static final String TXT_RETURN = - "The lloyd's beacon is successfully set at your current location, now you can return here anytime."; + private static final String TXT_RETURN = Game.getVar(R.string.LloidsBeacon_Return); - private static final String TXT_INFO = - "Lloyd's beacon is an intricate magic device, that allows you to return to a place you have already been."; + private static final String TXT_INFO = Game.getVar(R.string.LloidsBeacon_Info); - private static final String TXT_SET = - "\n\nThis beacon was set somewhere on the level %d of Pixel Dungeon."; + private static final String TXT_SET = Game.getVar(R.string.LloidsBeacon_Set); public static final float TIME_TO_USE = 1; - public static final String AC_SET = "SET"; - public static final String AC_RETURN = "RETURN"; + public static final String AC_SET = Game.getVar(R.string.LloidsBeacon_ACSet); + public static final String AC_RETURN = Game.getVar(R.string.LloidsBeacon_ACReturn); private int returnDepth = -1; private int returnPos; { - name = "lloyd's beacon"; + name = Game.getVar(R.string.LloidsBeacon_Name); image = ItemSpriteSheet.BEACON; unique = true; diff --git a/src/com/watabou/pixeldungeon/items/TomeOfMastery.java b/src/com/watabou/pixeldungeon/items/TomeOfMastery.java index 8ddd3c3bbc..8cc98568fb 100644 --- a/src/com/watabou/pixeldungeon/items/TomeOfMastery.java +++ b/src/com/watabou/pixeldungeon/items/TomeOfMastery.java @@ -19,9 +19,12 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.actors.buffs.Blindness; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Fury; @@ -37,15 +40,15 @@ public class TomeOfMastery extends Item { - private static final String TXT_BLINDED = "You can't read while blinded"; + private static final String TXT_BLINDED = Game.getVar(R.string.TomeOfMastery_Blinded); public static final float TIME_TO_READ = 10; - public static final String AC_READ = "READ"; + public static final String AC_READ = Game.getVar(R.string.TomeOfMastery_ACRead); { stackable = false; - name = "Tome of Mastery"; + name = Dungeon.hero != null && Dungeon.hero.subClass != HeroSubClass.NONE ? Game.getVar(R.string.TomeOfMastery_NameR) : Game.getVar(R.string.TomeOfMastery_Name); image = ItemSpriteSheet.MASTERY; unique = true; @@ -69,32 +72,23 @@ public void execute( Hero hero, String action ) { curUser = hero; - HeroSubClass way1 = null; - HeroSubClass way2 = null; switch (hero.heroClass) { case WARRIOR: - way1 = HeroSubClass.GLADIATOR; - way2 = HeroSubClass.BERSERKER; + read( hero, HeroSubClass.GLADIATOR, HeroSubClass.BERSERKER ); break; case MAGE: - way1 = HeroSubClass.BATTLEMAGE; - way2 = HeroSubClass.WARLOCK; + read( hero, HeroSubClass.BATTLEMAGE, HeroSubClass.WARLOCK ); break; case ROGUE: - way1 = HeroSubClass.FREERUNNER; - way2 = HeroSubClass.ASSASSIN; + read( hero, HeroSubClass.ASSASSIN, HeroSubClass.FREERUNNER ); break; case HUNTRESS: - way1 = HeroSubClass.SNIPER; - way2 = HeroSubClass.WARDEN; + read( hero, HeroSubClass.SNIPER, HeroSubClass.WARDEN ); break; } - GameScene.show( new WndChooseWay( this, way1, way2 ) ); - - } else { - - super.execute( hero, action ); + } else { + super.execute( hero, action ); } } @@ -116,10 +110,17 @@ public boolean isIdentified() { @Override public String info() { - return - "This worn leather book is not that thick, but you feel somehow, " + - "that you can gather a lot from it. Remember though that reading " + - "this tome may require some time."; + return Game.getVar(R.string.TomeOfMastery_Info); + } + + private void read( Hero hero, HeroSubClass sc1, HeroSubClass sc2 ) { + if (hero.subClass == sc1) { + GameScene.show( new WndChooseWay( this, sc2 ) ); + } else if (hero.subClass == sc2) { + GameScene.show( new WndChooseWay( this, sc1 ) ); + } else { + GameScene.show( new WndChooseWay( this, sc1, sc2 ) ); + } } public void choose( HeroSubClass way ) { @@ -136,7 +137,7 @@ public void choose( HeroSubClass way ) { SpellSprite.show( curUser, SpellSprite.MASTERY ); curUser.sprite.emitter().burst( Speck.factory( Speck.MASTERY ), 12 ); - GLog.w( "You have chosen the way of the %s!", Utils.capitalize( way.title() ) ); + GLog.w(Game.getVar(R.string.TomeOfMastery_Choose), Utils.capitalize( way.title() ) ); if (way == HeroSubClass.BERSERKER && curUser.HP <= curUser.HT * Fury.LEVEL) { Buff.affect( curUser, Fury.class ); diff --git a/src/com/watabou/pixeldungeon/items/Torch.java b/src/com/watabou/pixeldungeon/items/Torch.java index 556d81a2a6..4bd9d28e21 100644 --- a/src/com/watabou/pixeldungeon/items/Torch.java +++ b/src/com/watabou/pixeldungeon/items/Torch.java @@ -19,7 +19,9 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.particles.Emitter; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Light; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -28,12 +30,12 @@ public class Torch extends Item { - public static final String AC_LIGHT = "LIGHT"; + public static final String AC_LIGHT = Game.getVar(R.string.Torch_ACLight); public static final float TIME_TO_LIGHT = 1; { - name = "torch"; + name = Game.getVar(R.string.Torch_Name); image = ItemSpriteSheet.TORCH; stackable = true; @@ -88,7 +90,6 @@ public int price() { @Override public String info() { - return - "It's an indispensable item in The Demon Halls, which are notorious for their poor ambient lighting."; + return Game.getVar(R.string.Torch_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/Weightstone.java b/src/com/watabou/pixeldungeon/items/Weightstone.java index 6fb30fa311..7fee680c6f 100644 --- a/src/com/watabou/pixeldungeon/items/Weightstone.java +++ b/src/com/watabou/pixeldungeon/items/Weightstone.java @@ -20,8 +20,10 @@ import java.util.ArrayList; import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.weapon.Weapon; import com.watabou.pixeldungeon.scenes.GameScene; @@ -36,16 +38,16 @@ public class Weightstone extends Item { - private static final String TXT_SELECT_WEAPON = "Select a weapon to balance"; - private static final String TXT_FAST = "you balanced your %s to make it faster"; - private static final String TXT_ACCURATE = "you balanced your %s to make it more accurate"; + private static final String TXT_SELECT_WEAPON = Game.getVar(R.string.Weightstone_Select); + private static final String TXT_FAST = Game.getVar(R.string.Weightstone_Fast); + private static final String TXT_ACCURATE = Game.getVar(R.string.Weightstone_Accurate); private static final float TIME_TO_APPLY = 2; - private static final String AC_APPLY = "APPLY"; + private static final String AC_APPLY = Game.getVar(R.string.Weightstone_ACApply); { - name = "weightstone"; + name = Game.getVar(R.string.Weightstone_Name); image = ItemSpriteSheet.WEIGHT; stackable = true; @@ -109,8 +111,7 @@ public int price() { @Override public String info() { - return - "Using a weightstone, you can balance your melee weapon to increase its speed or accuracy."; + return Game.getVar(R.string.Weightstone_Info); } private final WndBag.Listener itemSelector = new WndBag.Listener() { @@ -124,11 +125,11 @@ public void onSelect( Item item ) { public class WndBalance extends Window { - private static final String TXT_CHOICE = "How would you like to balance your %s?"; + private final String TXT_CHOICE = Game.getVar(R.string.Weightstone_WndChoice); - private static final String TXT_SPEED = "For speed"; - private static final String TXT_ACCURACY = "For accuracy"; - private static final String TXT_CANCEL = "Never mind"; + private final String TXT_SPEED = Game.getVar(R.string.Weightstone_WndSpeed); + private final String TXT_ACCURACY = Game.getVar(R.string.Weightstone_WndAccuracy); + private final String TXT_CANCEL = Game.getVar(R.string.Weightstone_WndCancel); private static final int WIDTH = 120; private static final int MARGIN = 2; diff --git a/src/com/watabou/pixeldungeon/items/armor/Armor.java b/src/com/watabou/pixeldungeon/items/armor/Armor.java index fac4e4a6cd..614504e6a9 100644 --- a/src/com/watabou/pixeldungeon/items/armor/Armor.java +++ b/src/com/watabou/pixeldungeon/items/armor/Armor.java @@ -19,6 +19,7 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.actors.Char; @@ -33,24 +34,23 @@ import com.watabou.utils.Bundlable; import com.watabou.utils.Bundle; import com.watabou.utils.Random; +import com.watabou.pixeldungeon.R; public class Armor extends EquipableItem { - - private static final int HITS_TO_KNOW = 10; - - private static final String TXT_EQUIP_CURSED = "your %s constricts around you painfully"; - - private static final String TXT_IDENTIFY = "you are now familiar enough with your %s to identify it. It is %s."; - - private static final String TXT_TO_STRING = "%s :%d"; - - private static final String TXT_INCOMPATIBLE = - "Interaction of different types of magic has erased the glyph on this armor!"; - + + private static final int HITS_TO_KNOW = 10; + + private static final String TXT_EQUIP_CURSED = Game.getVar(R.string.Armor_EquipCursed); + + private static final String TXT_IDENTIFY = Game.getVar(R.string.Armor_Identify); + + private static final String TXT_TO_STRING = Game.getVar(R.string.Armor_ToString); + private static final String TXT_BROKEN = Game.getVar(R.string.Armor_Broken); + + private static final String TXT_INCOMPATIBLE = Game.getVar(R.string.Armor_Incompatible); + public int tier; - public int STR; - public int DR; private int hitsToKnow = HITS_TO_KNOW; @@ -61,7 +61,6 @@ public Armor( int tier ) { this.tier = tier; STR = typicalSTR(); - DR = typicalDR(); } private static final String UNFAMILIRIARITY = "unfamiliarity"; @@ -144,6 +143,10 @@ public boolean isEquipped( Hero hero ) { return hero.belongings.armor == this; } + public int DR() { + return tier * (2 + effectiveLevel() + (glyph == null ? 0 : 1)); + } + @Override public Item upgrade() { return upgrade( false ); @@ -152,7 +155,7 @@ public Item upgrade() { public Item upgrade( boolean inscribe ) { if (glyph != null) { - if (!inscribe && Random.Int( level ) > 0) { + if (!inscribe && Random.Int( level() ) > 0) { GLog.w( TXT_INCOMPATIBLE ); inscribe( null ); } @@ -162,7 +165,6 @@ public Item upgrade( boolean inscribe ) { } }; - DR += tier; STR--; return super.upgrade(); @@ -174,9 +176,7 @@ public Item safeUpgrade() { @Override public Item degrade() { - DR -= tier; STR++; - return super.degrade(); } @@ -206,7 +206,7 @@ public int proc( Char attacker, Char defender, int damage ) { @Override public String toString() { - return levelKnown ? Utils.format( TXT_TO_STRING, super.toString(), STR ) : super.toString(); + return levelKnown ? Utils.format( isBroken() ? TXT_BROKEN : TXT_TO_STRING, super.toString(), STR ) : super.toString(); } @Override @@ -220,42 +220,32 @@ public String info() { StringBuilder info = new StringBuilder( desc() ); if (levelKnown) { - info.append( - "\n\nThis " + name + " provides damage absorption up to " + - "" + Math.max( DR, 0 ) + " points per attack. " ); + info.append(String.format(Game.getVar(R.string.Armor_Info1), name, Math.max( DR(), 0 ))); if (STR > Dungeon.hero.STR()) { - if (isEquipped( Dungeon.hero )) { - info.append( - "\n\nBecause of your inadequate strength your " + - "movement speed and defense skill is decreased. " ); + info.append(Game.getVar(R.string.Armor_Info2)); } else { - info.append( - "\n\nBecause of your inadequate strength wearing this armor " + - "will decrease your movement speed and defense skill. " ); + info.append(Game.getVar(R.string.Armor_Info3)); } - } } else { - info.append( - "\n\nTypical " + name + " provides damage absorption up to " + typicalDR() + " points per attack " + - " and requires " + typicalSTR() + " points of strength. " ); + info.append(String.format(Game.getVar(R.string.Armor_Info4), name, typicalDR(), typicalSTR())); if (typicalSTR() > Dungeon.hero.STR()) { - info.append( "Probably this armor is too heavy for you. " ); + info.append(Game.getVar(R.string.Armor_Info5)); } } - + info.append(" "); if (glyph != null) { - info.append( "It is enchanted." ); + info.append(Game.getVar(R.string.Armor_Info6)); } if (isEquipped( Dungeon.hero )) { - info.append( "\n\nYou are wearing the " + name + - (cursed ? ", and because it is cursed, you are powerless to remove it." : ".") ); + info.append(String.format(Game.getVar(R.string.Armor_Info7a), name, + (cursed ? Game.getVar(R.string.Armor_Info7b) : "") )); } else { if (cursedKnown && cursed) { - info.append( "\n\nYou can feel a malevolent magic lurking within the " + name + "." ); + info.append(String.format(Game.getVar(R.string.Armor_Info8), name)); } } @@ -301,32 +291,11 @@ public int price() { if (glyph != null) { price *= 1.5; } - if (cursed && cursedKnown) { - price /= 2; - } - if (levelKnown) { - if (level > 0) { - price *= (level + 1); - } else if (level < 0) { - price /= (1 - level); - } - } - if (price < 1) { - price = 1; - } - return price; + return considerState( price ); } public Armor inscribe( Glyph glyph ) { - - if (glyph != null && this.glyph == null) { - DR += tier; - } else if (glyph == null && this.glyph != null) { - DR -= tier; - } - this.glyph = glyph; - return this; } @@ -355,9 +324,9 @@ public static abstract class Glyph implements Bundlable { private static final Class[] glyphs = new Class[]{ Bounce.class, Affection.class, AntiEntropy.class, Multiplicity.class, Potential.class, Metabolism.class, Stench.class, Viscosity.class, - Displacement.class, Entanglement.class }; + Displacement.class, Entanglement.class, AutoRepair.class }; - private static final float[] chances= new float[]{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + private static final float[] chances= new float[]{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; public abstract int proc( Armor armor, Char attacker, Char defender, int damage ); diff --git a/src/com/watabou/pixeldungeon/items/armor/ClassArmor.java b/src/com/watabou/pixeldungeon/items/armor/ClassArmor.java index 9811f1475a..287a3f654e 100644 --- a/src/com/watabou/pixeldungeon/items/armor/ClassArmor.java +++ b/src/com/watabou/pixeldungeon/items/armor/ClassArmor.java @@ -19,14 +19,19 @@ import java.util.ArrayList; + +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.utils.GLog; import com.watabou.utils.Bundle; abstract public class ClassArmor extends Armor { - private static final String TXT_LOW_HEALTH = "Your health is too low!"; - private static final String TXT_NOT_EQUIPPED = "You need to be wearing this armor to use its special power!"; + private static final String TXT_LOW_HEALTH = Game.getVar(R.string.ClassArmor_LowHealt); + private static final String TXT_NOT_EQUIPPED = Game.getVar(R.string.ClassArmor_NotEquipped); + + private int DR; { levelKnown = true; @@ -58,7 +63,7 @@ public static ClassArmor upgrade ( Hero owner, Armor armor ) { } classArmor.STR = armor.STR; - classArmor.DR = armor.DR; + classArmor.DR = armor.DR(); classArmor.inscribe( armor.glyph ); @@ -112,6 +117,11 @@ public void execute( Hero hero, String action ) { abstract public String special(); abstract public void doSpecial(); + @Override + public int DR() { + return DR; + } + @Override public boolean isUpgradable() { return false; @@ -129,6 +139,6 @@ public int price() { @Override public String desc() { - return "The thing looks awesome!"; + return Game.getVar(R.string.ClassArmor_Desc); } } diff --git a/src/com/watabou/pixeldungeon/items/armor/ClothArmor.java b/src/com/watabou/pixeldungeon/items/armor/ClothArmor.java index 8a23212d73..6a3285999f 100644 --- a/src/com/watabou/pixeldungeon/items/armor/ClothArmor.java +++ b/src/com/watabou/pixeldungeon/items/armor/ClothArmor.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items.armor; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.pixeldungeon.R; public class ClothArmor extends Armor { { - name = "cloth armor"; + name = Game.getVar(R.string.ClothArmor_Name); image = ItemSpriteSheet.ARMOR_CLOTH; } @@ -33,6 +35,6 @@ public ClothArmor() { @Override public String desc() { - return "This lightweight armor offers basic protection."; + return Game.getVar(R.string.ClothArmor_Desc); } } diff --git a/src/com/watabou/pixeldungeon/items/armor/HuntressArmor.java b/src/com/watabou/pixeldungeon/items/armor/HuntressArmor.java index 279bc5095d..314c17ad68 100644 --- a/src/com/watabou/pixeldungeon/items/armor/HuntressArmor.java +++ b/src/com/watabou/pixeldungeon/items/armor/HuntressArmor.java @@ -19,7 +19,9 @@ import java.util.HashMap; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.hero.HeroClass; import com.watabou.pixeldungeon.actors.mobs.Mob; @@ -33,13 +35,13 @@ public class HuntressArmor extends ClassArmor { - private static final String TXT_NO_ENEMIES = "No enemies in sight"; - private static final String TXT_NOT_HUNTRESS = "Only huntresses can use this armor!"; + private static final String TXT_NO_ENEMIES = Game.getVar(R.string.HuntressArmor_NoEnemies); + private static final String TXT_NOT_HUNTRESS = Game.getVar(R.string.HuntressArmor_NotHuntress); - private static final String AC_SPECIAL = "SPECTRAL BLADES"; + private static final String AC_SPECIAL = Game.getVar(R.string.HuntressArmor_ACSpecial); { - name = "huntress cloak"; + name = Game.getVar(R.string.HuntressArmor_Name); image = ItemSpriteSheet.ARMOR_HUNTRESS; } @@ -99,9 +101,6 @@ public boolean doEquip( Hero hero ) { @Override public String desc() { - return - "A huntress in such cloak can create a fan of spectral blades. Each of these blades " + - "will target a single enemy in the huntress's field of view, inflicting damage depending " + - "on her currently equipped melee weapon."; + return Game.getVar(R.string.HuntressArmor_Desc); } } \ No newline at end of file diff --git a/src/com/watabou/pixeldungeon/items/armor/LeatherArmor.java b/src/com/watabou/pixeldungeon/items/armor/LeatherArmor.java index 9744ba2d8d..1f6419c6cb 100644 --- a/src/com/watabou/pixeldungeon/items/armor/LeatherArmor.java +++ b/src/com/watabou/pixeldungeon/items/armor/LeatherArmor.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items.armor; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class LeatherArmor extends Armor { { - name = "leather armor"; + name = Game.getVar(R.string.LeatherArmor_Name); image = ItemSpriteSheet.ARMOR_LEATHER; } @@ -33,6 +35,6 @@ public LeatherArmor() { @Override public String desc() { - return "Armor made from tanned monster hide. Not as light as cloth armor but provides better protection."; + return Game.getVar(R.string.LeatherArmor_Desc); } } diff --git a/src/com/watabou/pixeldungeon/items/armor/MageArmor.java b/src/com/watabou/pixeldungeon/items/armor/MageArmor.java index cab2b449d3..9cb0e8ed0e 100644 --- a/src/com/watabou/pixeldungeon/items/armor/MageArmor.java +++ b/src/com/watabou/pixeldungeon/items/armor/MageArmor.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.armor; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Burning; @@ -34,12 +36,12 @@ public class MageArmor extends ClassArmor { - private static final String AC_SPECIAL = "MOLTEN EARTH"; + private static final String AC_SPECIAL = Game.getVar(R.string.MageArmor_ACSpecial); - private static final String TXT_NOT_MAGE = "Only mages can use this armor!"; + private static final String TXT_NOT_MAGE = Game.getVar(R.string.MageArmor_NotMage); { - name = "mage robe"; + name = Game.getVar(R.string.MageArmor_Name); image = ItemSpriteSheet.ARMOR_MAGE; } @@ -50,9 +52,7 @@ public String special() { @Override public String desc() { - return - "Wearing this gorgeous robe, a mage can cast a spell of molten earth: all the enemies " + - "in his field of view will be set on fire and unable to move at the same time."; + return Game.getVar(R.string.MageArmor_Desc); } @Override diff --git a/src/com/watabou/pixeldungeon/items/armor/MailArmor.java b/src/com/watabou/pixeldungeon/items/armor/MailArmor.java index bd97baa49c..40097ffb48 100644 --- a/src/com/watabou/pixeldungeon/items/armor/MailArmor.java +++ b/src/com/watabou/pixeldungeon/items/armor/MailArmor.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items.armor; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class MailArmor extends Armor { { - name = "mail armor"; + name = Game.getVar(R.string.MailArmor_Name); image = ItemSpriteSheet.ARMOR_MAIL; } @@ -33,7 +35,6 @@ public MailArmor() { @Override public String desc() { - return - "Interlocking metal links make for a tough but flexible suit of armor."; + return Game.getVar(R.string.MailArmor_Desc); } } diff --git a/src/com/watabou/pixeldungeon/items/armor/PlateArmor.java b/src/com/watabou/pixeldungeon/items/armor/PlateArmor.java index 13c717e612..7914a8c49f 100644 --- a/src/com/watabou/pixeldungeon/items/armor/PlateArmor.java +++ b/src/com/watabou/pixeldungeon/items/armor/PlateArmor.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items.armor; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class PlateArmor extends Armor { { - name = "plate armor"; + name = Game.getVar(R.string.PlateArmor_Name); image = ItemSpriteSheet.ARMOR_PLATE; } @@ -33,8 +35,6 @@ public PlateArmor() { @Override public String desc() { - return - "Enormous plates of metal are joined together into a suit that provides " + - "unmatched protection to any adventurer strong enough to bear its staggering weight."; + return Game.getVar(R.string.PlateArmor_Desc); } } diff --git a/src/com/watabou/pixeldungeon/items/armor/RogueArmor.java b/src/com/watabou/pixeldungeon/items/armor/RogueArmor.java index 39f57e74a3..13eb746d7a 100644 --- a/src/com/watabou/pixeldungeon/items/armor/RogueArmor.java +++ b/src/com/watabou/pixeldungeon/items/armor/RogueArmor.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.armor; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.buffs.Blindness; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -37,13 +39,13 @@ public class RogueArmor extends ClassArmor { - private static final String TXT_FOV = "You can only jump to an empty location in your field of view"; - private static final String TXT_NOT_ROGUE = "Only rogues can use this armor!"; + private static final String TXT_FOV = Game.getVar(R.string.RogueArmor_Fov); + private static final String TXT_NOT_ROGUE = Game.getVar(R.string.RogueArmor_NotRogue); - private static final String AC_SPECIAL = "SMOKE BOMB"; + private static final String AC_SPECIAL = Game.getVar(R.string.RogueArmor_ACSpecial); { - name = "rogue garb"; + name = Game.getVar(R.string.RogueArmor_Name); image = ItemSpriteSheet.ARMOR_ROGUE; } @@ -69,9 +71,7 @@ public boolean doEquip( Hero hero ) { @Override public String desc() { - return - "Wearing this dark garb, a rogue can perform a trick, that is called \"smoke bomb\" " + - "(though no real explosives are used): he blinds enemies who could see him and jumps aside."; + return Game.getVar(R.string.RogueArmor_Desc); } protected static CellSelector.Listener teleporter = new CellSelector.Listener() { @@ -110,7 +110,7 @@ public void onSelect( Integer target ) { @Override public String prompt() { - return "Choose a location to jump to"; + return Game.getVar(R.string.RogueArmor_Prompt); } }; } \ No newline at end of file diff --git a/src/com/watabou/pixeldungeon/items/armor/ScaleArmor.java b/src/com/watabou/pixeldungeon/items/armor/ScaleArmor.java index 1cd391de01..b35365d134 100644 --- a/src/com/watabou/pixeldungeon/items/armor/ScaleArmor.java +++ b/src/com/watabou/pixeldungeon/items/armor/ScaleArmor.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items.armor; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class ScaleArmor extends Armor { { - name = "scale armor"; + name = Game.getVar(R.string.ScaleArmor_Name); image = ItemSpriteSheet.ARMOR_SCALE; } @@ -33,7 +35,6 @@ public ScaleArmor() { @Override public String desc() { - return - "The metal scales sewn onto a leather vest create a flexible, yet protective armor."; + return Game.getVar(R.string.ScaleArmor_Desc); } } diff --git a/src/com/watabou/pixeldungeon/items/armor/WarriorArmor.java b/src/com/watabou/pixeldungeon/items/armor/WarriorArmor.java index 97fa2ab837..4937421470 100644 --- a/src/com/watabou/pixeldungeon/items/armor/WarriorArmor.java +++ b/src/com/watabou/pixeldungeon/items/armor/WarriorArmor.java @@ -18,7 +18,9 @@ package com.watabou.pixeldungeon.items.armor; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -43,12 +45,12 @@ public class WarriorArmor extends ClassArmor { private static int LEAP_TIME = 1; private static int SHOCK_TIME = 3; - private static final String AC_SPECIAL = "HEROIC LEAP"; + private static final String AC_SPECIAL = Game.getVar(R.string.WarriorArmor_ACSpecial); - private static final String TXT_NOT_WARRIOR = "Only warriors can use this armor!"; + private static final String TXT_NOT_WARRIOR = Game.getVar(R.string.WarriorArmor_NotWarrior); { - name = "warrior suit of armor"; + name = Game.getVar(R.string.WarriorArmor_Name); image = ItemSpriteSheet.ARMOR_WARRIOR; } @@ -74,9 +76,7 @@ public boolean doEquip( Hero hero ) { @Override public String desc() { - return - "While this armor looks heavy, it allows a warrior to perform heroic leap towards " + - "a targeted location, slamming down to stun all neighbouring enemies."; + return Game.getVar(R.string.WarriorArmor_Desc); } protected static CellSelector.Listener leaper = new CellSelector.Listener() { @@ -124,7 +124,7 @@ public void call() { @Override public String prompt() { - return "Choose direction to leap"; + return Game.getVar(R.string.WarriorArmor_Prompt); } }; } \ No newline at end of file diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/Affection.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/Affection.java index 1566148e8c..5f8691a09e 100644 --- a/src/com/watabou/pixeldungeon/items/armor/glyphs/Affection.java +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/Affection.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.armor.glyphs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Charm; @@ -31,14 +33,14 @@ public class Affection extends Glyph { - private static final String TXT_AFFECTION = "%s of affection"; + private static final String TXT_AFFECTION = Game.getVar(R.string.Affection_Txt); private static ItemSprite.Glowing PINK = new ItemSprite.Glowing( 0xFF4488 ); @Override public int proc( Armor armor, Char attacker, Char defender, int damage) { - int level = (int)GameMath.gate( 0, armor.level, 6 ); + int level = (int)GameMath.gate( 0, armor.effectiveLevel(), 6 ); if (Level.adjacent( attacker.pos, defender.pos ) && Random.Int( level / 2 + 5 ) >= 4) { diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/AntiEntropy.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/AntiEntropy.java index dc0836c52d..3509e5d766 100644 --- a/src/com/watabou/pixeldungeon/items/armor/glyphs/AntiEntropy.java +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/AntiEntropy.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.armor.glyphs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Burning; @@ -33,14 +35,14 @@ public class AntiEntropy extends Glyph { - private static final String TXT_ANTI_ENTROPY = "%s of anti-entropy"; + private static final String TXT_ANTI_ENTROPY = Game.getVar(R.string.AntiEntropy_Txt); private static ItemSprite.Glowing BLUE = new ItemSprite.Glowing( 0x0000FF ); @Override public int proc( Armor armor, Char attacker, Char defender, int damage) { - int level = Math.max( 0, armor.level ); + int level = Math.max( 0, armor.effectiveLevel() ); if (Level.adjacent( attacker.pos, defender.pos ) && Random.Int( level + 6 ) >= 5) { diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/AutoRepair.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/AutoRepair.java new file mode 100644 index 0000000000..ba7cdfdd97 --- /dev/null +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/AutoRepair.java @@ -0,0 +1,54 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.items.armor.glyphs; + +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.actors.Char; +import com.watabou.pixeldungeon.actors.hero.Hero; +import com.watabou.pixeldungeon.items.armor.Armor; +import com.watabou.pixeldungeon.items.armor.Armor.Glyph; +import com.watabou.pixeldungeon.sprites.ItemSprite.Glowing; + +public class AutoRepair extends Glyph { + + private static final String TXT_AUTO_REPAIR = Game.getVar(R.string.AutoRepair_Txt); + + private static Glowing GRAY = new Glowing( 0xCC8888 ); + + @Override + public int proc( Armor armor, Char attacker, Char defender, int damage) { + if (defender instanceof Hero && Dungeon.gold >= armor.tier) { + Dungeon.gold -= armor.tier; + armor.polish(); + } + return damage; + } + + @Override + public String name( String weaponName) { + return String.format( TXT_AUTO_REPAIR, weaponName ); + } + + @Override + public Glowing glowing() { + return GRAY; + } + +} \ No newline at end of file diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/Bounce.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/Bounce.java index ac868950f8..7771d98743 100644 --- a/src/com/watabou/pixeldungeon/items/armor/glyphs/Bounce.java +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/Bounce.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.armor.glyphs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.mobs.Mob; @@ -29,12 +31,12 @@ public class Bounce extends Glyph { - private static final String TXT_BOUNCE = "%s of bounce"; + private static final String TXT_BOUNCE = Game.getVar(R.string.Bounce_Txt); @Override public int proc( Armor armor, Char attacker, Char defender, int damage) { - int level = Math.max( 0, armor.level ); + int level = Math.max( 0, armor.effectiveLevel() ); if (Level.adjacent( attacker.pos, defender.pos ) && Random.Int( level + 5) >= 4) { diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/Displacement.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/Displacement.java index bf634d5a6c..5e19eafa8e 100644 --- a/src/com/watabou/pixeldungeon/items/armor/glyphs/Displacement.java +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/Displacement.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.armor.glyphs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.items.armor.Armor; @@ -30,7 +32,7 @@ public class Displacement extends Glyph { - private static final String TXT_DISPLACEMENT = "%s of displacement"; + private static final String TXT_DISPLACEMENT = Game.getVar(R.string.Displacement_Txt); private static ItemSprite.Glowing BLUE = new ItemSprite.Glowing( 0x66AAFF ); @@ -41,7 +43,8 @@ public int proc( Armor armor, Char attacker, Char defender, int damage ) { return damage; } - int nTries = (armor.level < 0 ? 1 : armor.level + 1) * 5; + int level = armor.effectiveLevel(); + int nTries = (level < 0 ? 1 : level + 1) * 5; for (int i=0; i < nTries; i++) { int pos = Random.Int( Level.LENGTH ); if (Dungeon.visible[pos] && Level.passable[pos] && Actor.findChar( pos ) == null) { diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/Entanglement.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/Entanglement.java index 219ebc5b18..584d716b3e 100644 --- a/src/com/watabou/pixeldungeon/items/armor/glyphs/Entanglement.java +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/Entanglement.java @@ -18,6 +18,8 @@ package com.watabou.pixeldungeon.items.armor.glyphs; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Roots; @@ -32,14 +34,14 @@ public class Entanglement extends Glyph { - private static final String TXT_ENTANGLEMENT = "%s of entanglement"; + private static final String TXT_ENTANGLEMENT = Game.getVar(R.string.Entanglement_Txt); private static ItemSprite.Glowing GREEN = new ItemSprite.Glowing( 0x448822 ); @Override public int proc( Armor armor, Char attacker, Char defender, int damage ) { - int level = Math.max( 0, armor.level ); + int level = Math.max( 0, armor.effectiveLevel() ); if (Random.Int( 4 ) == 0) { diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/Metabolism.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/Metabolism.java index ab65dc4a52..fc11ac1506 100644 --- a/src/com/watabou/pixeldungeon/items/armor/glyphs/Metabolism.java +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/Metabolism.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.armor.glyphs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Hunger; import com.watabou.pixeldungeon.effects.Speck; @@ -30,14 +32,14 @@ public class Metabolism extends Glyph { - private static final String TXT_METABOLISM = "%s of metabolism"; + private static final String TXT_METABOLISM = Game.getVar(R.string.Metabolism_Txt); private static ItemSprite.Glowing RED = new ItemSprite.Glowing( 0xCC0000 ); @Override public int proc( Armor armor, Char attacker, Char defender, int damage) { - int level = Math.max( 0, armor.level ); + int level = Math.max( 0, armor.effectiveLevel() ); if (Random.Int( level / 2 + 5 ) >= 4) { int healing = Math.min( defender.HT - defender.HP, Random.Int( 1, defender.HT / 5 ) ); diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/Multiplicity.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/Multiplicity.java index 0938de389f..357ad0323a 100644 --- a/src/com/watabou/pixeldungeon/items/armor/glyphs/Multiplicity.java +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/Multiplicity.java @@ -19,6 +19,8 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -34,14 +36,14 @@ public class Multiplicity extends Glyph { - private static final String TXT_MULTIPLICITY = "%s of multiplicity"; + private static final String TXT_MULTIPLICITY = Game.getVar(R.string.Multiplicity_Txt); private static ItemSprite.Glowing PINK = new ItemSprite.Glowing( 0xCCAA88 ); @Override public int proc( Armor armor, Char attacker, Char defender, int damage) { - int level = Math.max( 0, armor.level ); + int level = Math.max( 0, armor.effectiveLevel() ); if (Random.Int( level / 2 + 6 ) >= 5) { diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/Potential.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/Potential.java index 6e7e15572d..3974ba67bf 100644 --- a/src/com/watabou/pixeldungeon/items/armor/glyphs/Potential.java +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/Potential.java @@ -18,7 +18,9 @@ package com.watabou.pixeldungeon.items.armor.glyphs; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.effects.Lightning; import com.watabou.pixeldungeon.items.armor.Armor; @@ -31,14 +33,14 @@ public class Potential extends Glyph { - private static final String TXT_POTENTIAL = "%s of potential"; + private static final String TXT_POTENTIAL = Game.getVar(R.string.Potential_Txt); private static ItemSprite.Glowing BLUE = new ItemSprite.Glowing( 0x66CCEE ); @Override public int proc( Armor armor, Char attacker, Char defender, int damage) { - int level = Math.max( 0, armor.level ); + int level = Math.max( 0, armor.effectiveLevel() ); if (Level.adjacent( attacker.pos, defender.pos ) && Random.Int( level + 7 ) >= 6) { diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/Stench.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/Stench.java index 6c41b3da58..9ec037c7df 100644 --- a/src/com/watabou/pixeldungeon/items/armor/glyphs/Stench.java +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/Stench.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.armor.glyphs; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.Blob; import com.watabou.pixeldungeon.actors.blobs.ToxicGas; @@ -30,14 +32,14 @@ public class Stench extends Glyph { - private static final String TXT_STENCH = "%s of stench"; + private static final String TXT_STENCH = Game.getVar(R.string.Stench_Txt); private static ItemSprite.Glowing GREEN = new ItemSprite.Glowing( 0x22CC44 ); @Override public int proc( Armor armor, Char attacker, Char defender, int damage) { - int level = Math.max( 0, armor.level ); + int level = Math.max( 0, armor.effectiveLevel() ); if (Level.adjacent( attacker.pos, defender.pos ) && Random.Int( level + 5 ) >= 4) { diff --git a/src/com/watabou/pixeldungeon/items/armor/glyphs/Viscosity.java b/src/com/watabou/pixeldungeon/items/armor/glyphs/Viscosity.java index 2a86c893b2..76f3062501 100644 --- a/src/com/watabou/pixeldungeon/items/armor/glyphs/Viscosity.java +++ b/src/com/watabou/pixeldungeon/items/armor/glyphs/Viscosity.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.items.armor.glyphs; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -35,7 +37,7 @@ public class Viscosity extends Glyph { - private static final String TXT_VISCOSITY = "%s of viscosity"; + private static final String TXT_VISCOSITY = Game.getVar(R.string.Viscosity_Txt); private static ItemSprite.Glowing PURPLE = new ItemSprite.Glowing( 0x8844CC ); @@ -46,7 +48,7 @@ public int proc( Armor armor, Char attacker, Char defender, int damage ) { return 0; } - int level = Math.max( 0, armor.level ); + int level = Math.max( 0, armor.effectiveLevel() ); if (Random.Int( level + 7 ) >= 6) { @@ -57,7 +59,7 @@ public int proc( Armor armor, Char attacker, Char defender, int damage ) { } debuff.prolong( damage ); - defender.sprite.showStatus( CharSprite.WARNING, "deferred %d", damage ); + defender.sprite.showStatus( CharSprite.WARNING, Game.getVar(R.string.Viscosity_Status), damage ); return 0; @@ -86,7 +88,6 @@ public static class DeferedDamage extends Buff { public void storeInBundle( Bundle bundle ) { super.storeInBundle( bundle ); bundle.put( DAMAGE, damage ); - } @Override @@ -116,7 +117,7 @@ public int icon() { @Override public String toString() { - return Utils.format( "Defered damage (%d)", damage ); + return Utils.format(Game.getVar(R.string.Viscosity_BufInfo1), damage ); } @Override @@ -126,8 +127,8 @@ public boolean act() { target.damage( 1, this ); if (target == Dungeon.hero && !target.isAlive()) { // FIXME - Dungeon.fail( Utils.format( ResultDescriptions.GLYPH, "enchantment of viscosity", Dungeon.depth ) ); - GLog.n( "The enchantment of viscosity killed you..." ); + Dungeon.fail( Utils.format( ResultDescriptions.GLYPH, Game.getVar(R.string.Viscosity_BufName), Dungeon.depth ) ); + GLog.n(Game.getVar(R.string.Viscosity_BufInfo2)); Badges.validateDeathFromGlyph(); } diff --git a/src/com/watabou/pixeldungeon/items/bags/Bag.java b/src/com/watabou/pixeldungeon/items/bags/Bag.java index 8ceb036d7e..e61696e038 100644 --- a/src/com/watabou/pixeldungeon/items/bags/Bag.java +++ b/src/com/watabou/pixeldungeon/items/bags/Bag.java @@ -20,7 +20,9 @@ import java.util.ArrayList; import java.util.Iterator; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.Item; @@ -31,7 +33,7 @@ public class Bag extends Item implements Iterable { - public static final String AC_OPEN = "OPEN"; + public static final String AC_OPEN = Game.getVar(R.string.Bag_ACOpen); { image = 11; diff --git a/src/com/watabou/pixeldungeon/items/bags/Keyring.java b/src/com/watabou/pixeldungeon/items/bags/Keyring.java index 5912d2c5a4..2ed9d575ef 100644 --- a/src/com/watabou/pixeldungeon/items/bags/Keyring.java +++ b/src/com/watabou/pixeldungeon/items/bags/Keyring.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.bags; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.items.keys.Key; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; @@ -24,7 +26,7 @@ public class Keyring extends Bag { { - name = "key ring"; + name = Game.getVar(R.string.Keyring_Name); image = ItemSpriteSheet.KEYRING; size = 12; @@ -42,8 +44,6 @@ public int price() { @Override public String info() { - return - "This is a copper key ring, that lets you keep all your keys " + - "separately from the rest of your belongings."; + return Game.getVar(R.string.Keyring_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/bags/ScrollHolder.java b/src/com/watabou/pixeldungeon/items/bags/ScrollHolder.java index e5b2ad2ae6..09d04cbb20 100644 --- a/src/com/watabou/pixeldungeon/items/bags/ScrollHolder.java +++ b/src/com/watabou/pixeldungeon/items/bags/ScrollHolder.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.bags; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.items.scrolls.Scroll; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; @@ -24,7 +26,7 @@ public class ScrollHolder extends Bag { { - name = "scroll holder"; + name = Game.getVar(R.string.ScrollHolder_Name); image = ItemSpriteSheet.HOLDER; size = 12; @@ -42,8 +44,6 @@ public int price() { @Override public String info() { - return - "You can place any number of scrolls into this tubular container. " + - "It saves room in your backpack and protects scrolls from fire."; + return Game.getVar(R.string.ScrollHolder_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/bags/SeedPouch.java b/src/com/watabou/pixeldungeon/items/bags/SeedPouch.java index 4fc725baf1..c9a32ce57c 100644 --- a/src/com/watabou/pixeldungeon/items/bags/SeedPouch.java +++ b/src/com/watabou/pixeldungeon/items/bags/SeedPouch.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.bags; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.plants.Plant; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; @@ -24,7 +26,7 @@ public class SeedPouch extends Bag { { - name = "seed pouch"; + name = Game.getVar(R.string.SeedPouch_Name); image = ItemSpriteSheet.POUCH; size = 8; @@ -42,7 +44,6 @@ public int price() { @Override public String info() { - return - "This small velvet pouch allows you to store any number of seeds in it. Very convenient."; + return Game.getVar(R.string.SeedPouch_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/bags/WandHolster.java b/src/com/watabou/pixeldungeon/items/bags/WandHolster.java index 678b2350bd..b4075810b7 100644 --- a/src/com/watabou/pixeldungeon/items/bags/WandHolster.java +++ b/src/com/watabou/pixeldungeon/items/bags/WandHolster.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.bags; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.items.wands.Wand; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; @@ -24,7 +26,7 @@ public class WandHolster extends Bag { { - name = "wand holster"; + name = Game.getVar(R.string.WandHolster_Name); image = ItemSpriteSheet.HOLSTER; size = 12; @@ -63,8 +65,6 @@ public int price() { @Override public String info() { - return - "This slim holder is made of leather of some exotic animal. " + - "It allows to compactly carry up to " + size + " wands."; + return String.format(Game.getVar(R.string.WandHolster_Info), size); } } diff --git a/src/com/watabou/pixeldungeon/items/food/ChargrilledMeat.java b/src/com/watabou/pixeldungeon/items/food/ChargrilledMeat.java index cf1c6ed18d..8f334b7c96 100644 --- a/src/com/watabou/pixeldungeon/items/food/ChargrilledMeat.java +++ b/src/com/watabou/pixeldungeon/items/food/ChargrilledMeat.java @@ -17,20 +17,22 @@ */ package com.watabou.pixeldungeon.items.food; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Hunger; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class ChargrilledMeat extends Food { { - name = "chargrilled meat"; + name = Game.getVar(R.string.ChargrilledMeat_Name); image = ItemSpriteSheet.STEAK; energy = Hunger.STARVING - Hunger.HUNGRY; } @Override public String info() { - return "It looks like a decent steak."; + return Game.getVar(R.string.ChargrilledMeat_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/food/Food.java b/src/com/watabou/pixeldungeon/items/food/Food.java index b75ed42d41..7ea175273f 100644 --- a/src/com/watabou/pixeldungeon/items/food/Food.java +++ b/src/com/watabou/pixeldungeon/items/food/Food.java @@ -19,9 +19,11 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.buffs.Hunger; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -36,14 +38,14 @@ public class Food extends Item { private static final float TIME_TO_EAT = 3f; - public static final String AC_EAT = "EAT"; + public static final String AC_EAT = Game.getVar(R.string.Food_ACEat); public float energy = Hunger.HUNGRY; - public String message = "That food tasted delicious!"; + public String message = Game.getVar(R.string.Food_Message); { stackable = true; - name = "ration of food"; + name = Game.getVar(R.string.Food_Name); image = ItemSpriteSheet.RATION; } @@ -98,9 +100,7 @@ public void execute( Hero hero, String action ) { @Override public String info() { - return - "Nothing fancy here: dried meat, " + - "some biscuits - things like that."; + return Game.getVar(R.string.Food_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/food/FrozenCarpaccio.java b/src/com/watabou/pixeldungeon/items/food/FrozenCarpaccio.java index 5169faf09c..b9a4076212 100644 --- a/src/com/watabou/pixeldungeon/items/food/FrozenCarpaccio.java +++ b/src/com/watabou/pixeldungeon/items/food/FrozenCarpaccio.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.food; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Barkskin; import com.watabou.pixeldungeon.actors.buffs.Bleeding; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -34,7 +36,7 @@ public class FrozenCarpaccio extends Food { { - name = "frozen carpaccio"; + name = Game.getVar(R.string.FrozenCarpaccio_Name); image = ItemSpriteSheet.CARPACCIO; energy = Hunger.STARVING - Hunger.HUNGRY; } @@ -48,22 +50,22 @@ public void execute( Hero hero, String action ) { switch (Random.Int( 5 )) { case 0: - GLog.i( "You see your hands turn invisible!" ); + GLog.i(Game.getVar(R.string.FrozenCarpaccio_Info1)); Buff.affect( hero, Invisibility.class, Invisibility.DURATION ); break; case 1: - GLog.i( "You feel your skin hardens!" ); + GLog.i(Game.getVar(R.string.FrozenCarpaccio_Info2)); Buff.affect( hero, Barkskin.class ).level( hero.HT / 4 ); break; case 2: - GLog.i( "Refreshing!" ); + GLog.i(Game.getVar(R.string.FrozenCarpaccio_Info3)); Buff.detach( hero, Poison.class ); Buff.detach( hero, Cripple.class ); Buff.detach( hero, Weakness.class ); Buff.detach( hero, Bleeding.class ); break; case 3: - GLog.i( "You feel better!" ); + GLog.i(Game.getVar(R.string.FrozenCarpaccio_Info4)); if (hero.HP < hero.HT) { hero.HP = Math.min( hero.HP + hero.HT / 4, hero.HT ); hero.sprite.emitter().burst( Speck.factory( Speck.HEALING ), 1 ); @@ -75,9 +77,7 @@ public void execute( Hero hero, String action ) { @Override public String info() { - return - "It's a piece of frozen raw meat. The only way to eat it is " + - "by cutting thin slices of it. And this way it's suprisingly good."; + return Game.getVar(R.string.FrozenCarpaccio_Info); } public int price() { diff --git a/src/com/watabou/pixeldungeon/items/food/MysteryMeat.java b/src/com/watabou/pixeldungeon/items/food/MysteryMeat.java index ee5b6b3437..d4dbc071a0 100644 --- a/src/com/watabou/pixeldungeon/items/food/MysteryMeat.java +++ b/src/com/watabou/pixeldungeon/items/food/MysteryMeat.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.food; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Burning; import com.watabou.pixeldungeon.actors.buffs.Hunger; @@ -32,10 +34,10 @@ public class MysteryMeat extends Food { { - name = "mystery meat"; + name = Game.getVar(R.string.MysteryMeat_Name); image = ItemSpriteSheet.MEAT; energy = Hunger.STARVING - Hunger.HUNGRY; - message = "That food tasted... strange."; + message = Game.getVar(R.string.MysteryMeat_Message); } @Override @@ -47,19 +49,19 @@ public void execute( Hero hero, String action ) { switch (Random.Int( 5 )) { case 0: - GLog.w( "Oh it's hot!" ); + GLog.w(Game.getVar(R.string.MysteryMeat_Info1)); Buff.affect( hero, Burning.class ).reignite( hero ); break; case 1: - GLog.w( "You can't feel your legs!" ); + GLog.w(Game.getVar(R.string.MysteryMeat_Info2)); Buff.prolong( hero, Roots.class, Paralysis.duration( hero ) ); break; case 2: - GLog.w( "You are not feeling well." ); + GLog.w(Game.getVar(R.string.MysteryMeat_Info3)); Buff.affect( hero, Poison.class ).set( Poison.durationFactor( hero ) * hero.HT / 5 ); break; case 3: - GLog.w( "You are stuffed." ); + GLog.w(Game.getVar(R.string.MysteryMeat_Info4)); Buff.prolong( hero, Slow.class, Slow.duration( hero ) ); break; } @@ -68,7 +70,7 @@ public void execute( Hero hero, String action ) { @Override public String info() { - return "Eat at your own risk!"; + return Game.getVar(R.string.MysteryMeat_Info); } public int price() { diff --git a/src/com/watabou/pixeldungeon/items/food/OverpricedRation.java b/src/com/watabou/pixeldungeon/items/food/OverpricedRation.java index b5f18253e8..163e2b6c29 100644 --- a/src/com/watabou/pixeldungeon/items/food/OverpricedRation.java +++ b/src/com/watabou/pixeldungeon/items/food/OverpricedRation.java @@ -17,21 +17,23 @@ */ package com.watabou.pixeldungeon.items.food; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Hunger; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class OverpricedRation extends Food { { - name = "overpriced food ration"; + name = Game.getVar(R.string.OverpricedRation_Name); image = ItemSpriteSheet.OVERPRICED; energy = Hunger.STARVING - Hunger.HUNGRY; - message = "That food tasted ok."; + message = Game.getVar(R.string.OverpricedRation_Message); } @Override public String info() { - return "It looks exactly like a standard ration of food but smaller."; + return Game.getVar(R.string.OverpricedRation_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/food/Pasty.java b/src/com/watabou/pixeldungeon/items/food/Pasty.java index a77db845bf..9a62f5711f 100644 --- a/src/com/watabou/pixeldungeon/items/food/Pasty.java +++ b/src/com/watabou/pixeldungeon/items/food/Pasty.java @@ -17,20 +17,22 @@ */ package com.watabou.pixeldungeon.items.food; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Hunger; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class Pasty extends Food { { - name = "pasty"; + name = Game.getVar(R.string.Pasty_Name); image = ItemSpriteSheet.PASTY; energy = Hunger.STARVING; } @Override public String info() { - return "This is authentic Cornish pasty with traditional filling of beef and potato."; + return Game.getVar(R.string.Pasty_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/keys/GoldenKey.java b/src/com/watabou/pixeldungeon/items/keys/GoldenKey.java index 669cdcaeae..3f995fa8e6 100644 --- a/src/com/watabou/pixeldungeon/items/keys/GoldenKey.java +++ b/src/com/watabou/pixeldungeon/items/keys/GoldenKey.java @@ -17,19 +17,19 @@ */ package com.watabou.pixeldungeon.items.keys; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class GoldenKey extends Key { { - name = "golden key"; + name = Game.getVar(R.string.GoldenKey_Name); image = ItemSpriteSheet.GOLDEN_KEY; } @Override public String info() { - return - "The notches on this golden key are tiny and intricate. " + - "Maybe it can open some chest lock?"; + return Game.getVar(R.string.GoldenKey_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/keys/IronKey.java b/src/com/watabou/pixeldungeon/items/keys/IronKey.java index 5fc4cfc856..a5cafb7541 100644 --- a/src/com/watabou/pixeldungeon/items/keys/IronKey.java +++ b/src/com/watabou/pixeldungeon/items/keys/IronKey.java @@ -17,19 +17,21 @@ */ package com.watabou.pixeldungeon.items.keys; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.bags.Bag; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; import com.watabou.pixeldungeon.utils.Utils; public class IronKey extends Key { - private static final String TXT_FROM_DEPTH = "iron key from depth %d"; + private static final String TXT_FROM_DEPTH = Game.getVar(R.string.IronKey_FromDepth); public static int curDepthQuantity = 0; { - name = "iron key"; + name = Game.getVar(R.string.IronKey_Name); image = ItemSpriteSheet.IRON_KEY; } @@ -56,8 +58,6 @@ public String toString() { @Override public String info() { - return - "The notches on this ancient iron key are well worn; its leather lanyard " + - "is battered by age. What door might it open?"; + return Game.getVar(R.string.IronKey_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/keys/SkeletonKey.java b/src/com/watabou/pixeldungeon/items/keys/SkeletonKey.java index 8d26827938..f5f86d7868 100644 --- a/src/com/watabou/pixeldungeon/items/keys/SkeletonKey.java +++ b/src/com/watabou/pixeldungeon/items/keys/SkeletonKey.java @@ -17,19 +17,19 @@ */ package com.watabou.pixeldungeon.items.keys; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class SkeletonKey extends Key { { - name = "skeleton key"; + name = Game.getVar(R.string.SkeletonKey_Name); image = ItemSpriteSheet.SKELETON_KEY; } @Override public String info() { - return - "This key looks serious: its head is shaped like a skull. " + - "Probably it can open some serious door."; + return Game.getVar(R.string.SkeletonKey_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/potions/Potion.java b/src/com/watabou/pixeldungeon/items/potions/Potion.java index f5b1f27749..a67908ce4e 100644 --- a/src/com/watabou/pixeldungeon/items/potions/Potion.java +++ b/src/com/watabou/pixeldungeon/items/potions/Potion.java @@ -15,15 +15,18 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - */package com.watabou.pixeldungeon.items.potions; + */ +package com.watabou.pixeldungeon.items.potions; import java.util.ArrayList; import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.effects.Splash; import com.watabou.pixeldungeon.items.Item; @@ -39,16 +42,14 @@ public class Potion extends Item { - public static final String AC_DRINK = "DRINK"; + public static final String AC_DRINK = Game.getVar(R.string.Potion_ACDrink); - private static final String TXT_HARMFUL = "Harmful potion!"; - private static final String TXT_BENEFICIAL = "Beneficial potion"; - private static final String TXT_YES = "Yes, I know what I'm doing"; - private static final String TXT_NO = "No, I changed my mind"; - private static final String TXT_R_U_SURE_DRINK = - "Are you sure you want to drink it? In most cases you should throw such potions at your enemies."; - private static final String TXT_R_U_SURE_THROW = - "Are you sure you want to throw it? In most cases it makes sense to drink it."; + private static final String TXT_HARMFUL = Game.getVar(R.string.Potion_Harmfull); + private static final String TXT_BENEFICIAL = Game.getVar(R.string.Potion_Beneficial); + private static final String TXT_YES = Game.getVar(R.string.Potion_Yes); + private static final String TXT_NO = Game.getVar(R.string.Potion_No); + private static final String TXT_R_U_SURE_DRINK = Game.getVar(R.string.Potion_SureDrink); + private static final String TXT_R_U_SURE_THROW = Game.getVar(R.string.Potion_SureThrow); private static final float TIME_TO_DRINK = 1f; @@ -66,9 +67,7 @@ public class Potion extends Item { PotionOfMight.class, PotionOfFrost.class }; - private static final String[] colors = { - "turquoise", "crimson", "azure", "jade", "golden", "magenta", - "charcoal", "ivory", "amber", "bistre", "indigo", "silver"}; + private static final String[] colors = Game.getVars(R.array.Potion_Colors); private static final Integer[] images = { ItemSpriteSheet.POTION_TURQUOISE, ItemSpriteSheet.POTION_CRIMSON, @@ -214,7 +213,7 @@ protected void apply( Hero hero ) { public void shatter( int cell ) { if (Dungeon.visible[cell]) { - GLog.i( "The flask shatters and " + color() + " liquid splashes harmlessly" ); + GLog.i(String.format(Game.getVar(R.string.Potion_Shatter), color())); Sample.INSTANCE.play( Assets.SND_SHATTER ); splash( cell ); } @@ -244,15 +243,12 @@ protected String color() { @Override public String name() { - return isKnown() ? name : color + " potion"; + return isKnown() ? name : String.format(Game.getVar(R.string.Potion_Name), color); } @Override public String info() { - return isKnown() ? - desc() : - "This flask contains a swirling " + color + " liquid. " + - "Who knows what it will do when drunk or thrown?"; + return isKnown() ? desc() : String.format(Game.getVar(R.string.Potion_Info), color); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfExperience.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfExperience.java index dfd0f7bf1a..a61b19bbba 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfExperience.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfExperience.java @@ -17,12 +17,14 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; public class PotionOfExperience extends Potion { { - name = "Potion of Experience"; + name = Game.getVar(R.string.PotionOfExperience_Name); } @Override @@ -33,9 +35,7 @@ protected void apply( Hero hero ) { @Override public String desc() { - return - "The storied experiences of multitudes of battles reduced to liquid form, " + - "this draught will instantly raise your experience level."; + return Game.getVar(R.string.PotionOfExperience_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfFrost.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfFrost.java index 6db964547f..b06e8fc339 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfFrost.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfFrost.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.blobs.Fire; import com.watabou.pixeldungeon.actors.blobs.Freezing; import com.watabou.pixeldungeon.levels.Level; @@ -31,7 +33,7 @@ public class PotionOfFrost extends Potion { private static final int DISTANCE = 2; { - name = "Potion of Frost"; + name = Game.getVar(R.string.PotionOfFrost_Name); } @Override @@ -58,9 +60,7 @@ public void shatter( int cell ) { @Override public String desc() { - return - "Upon exposure to open air, this chemical will evaporate into a freezing cloud, causing " + - "any creature that contacts it to be frozen in place, unable to act and move."; + return Game.getVar(R.string.PotionOfFrost_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfHealing.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfHealing.java index ed24b1b8cd..91489f33c5 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfHealing.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfHealing.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Bleeding; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Cripple; @@ -30,14 +32,14 @@ public class PotionOfHealing extends Potion { { - name = "Potion of Healing"; + name = Game.getVar(R.string.PotionOfHealing_Name); } @Override protected void apply( Hero hero ) { setKnown(); heal( Dungeon.hero ); - GLog.p( "Your wounds heal completely." ); + GLog.p(Game.getVar(R.string.PotionOfHealing_Apply)); } public static void heal( Hero hero ) { @@ -53,8 +55,7 @@ public static void heal( Hero hero ) { @Override public String desc() { - return - "An elixir that will instantly return you to full health and cure poison."; + return Game.getVar(R.string.PotionOfHealing_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfInvisibility.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfInvisibility.java index adbed433a4..31870e469f 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfInvisibility.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfInvisibility.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.noosa.tweeners.AlphaTweener; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Invisibility; @@ -31,23 +33,20 @@ public class PotionOfInvisibility extends Potion { private static final float ALPHA = 0.4f; { - name = "Potion of Invisibility"; + name = Game.getVar(R.string.PotionOfInvisibility_Name); } @Override protected void apply( Hero hero ) { setKnown(); Buff.affect( hero, Invisibility.class, Invisibility.DURATION ); - GLog.i( "You see your hands turn invisible!" ); + GLog.i(Game.getVar(R.string.PotionOfInvisibility_Apply)); Sample.INSTANCE.play( Assets.SND_MELD ); } @Override public String desc() { - return - "Drinking this potion will render you temporarily invisible. While invisible, " + - "enemies will be unable to see you. Attacking an enemy, as well as using a wand or a scroll " + - "before enemy's eyes, will dispel the effect."; + return Game.getVar(R.string.PotionOfInvisibility_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfLevitation.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfLevitation.java index 1bdcaf52e7..f86a585387 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfLevitation.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfLevitation.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Levitation; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -25,22 +27,19 @@ public class PotionOfLevitation extends Potion { { - name = "Potion of Levitation"; + name = Game.getVar(R.string.PotionOfLevitation_Name); } @Override protected void apply( Hero hero ) { setKnown(); Buff.affect( hero, Levitation.class, Levitation.DURATION ); - GLog.i( "You float into the air!" ); + GLog.i(Game.getVar(R.string.PotionOfLevitation_Apply)); } @Override public String desc() { - return - "Drinking this curious liquid will cause you to hover in the air, " + - "able to drift effortlessly over traps. Flames and gases " + - "fill the air, however, and cannot be bypassed while airborne."; + return Game.getVar(R.string.PotionOfLevitation_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfLiquidFlame.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfLiquidFlame.java index 97646283f4..5d504fbed3 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfLiquidFlame.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfLiquidFlame.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.blobs.Blob; import com.watabou.pixeldungeon.actors.blobs.Fire; import com.watabou.pixeldungeon.scenes.GameScene; @@ -27,7 +29,7 @@ public class PotionOfLiquidFlame extends Potion { { - name = "Potion of Liquid Flame"; + name = Game.getVar(R.string.PotionOfLiquidFlame_Name); } @Override @@ -45,9 +47,7 @@ public void shatter( int cell ) { @Override public String desc() { - return - "This flask contains an unstable compound which will burst " + - "violently into flame upon exposure to open air."; + return Game.getVar(R.string.PotionOfLiquidFlame_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfMight.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfMight.java index 5ad47c4051..3f9db08cce 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfMight.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfMight.java @@ -17,7 +17,10 @@ */ package com.watabou.pixeldungeon.items.potions; + +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.sprites.CharSprite; import com.watabou.pixeldungeon.utils.GLog; @@ -25,7 +28,7 @@ public class PotionOfMight extends PotionOfStrength { { - name = "Potion of Might"; + name = Game.getVar(R.string.PotionOfMight_Name); } @Override @@ -35,17 +38,16 @@ protected void apply( Hero hero ) { hero.STR++; hero.HT += 5; hero.HP += 5; - hero.sprite.showStatus( CharSprite.POSITIVE, "+1 str, +5 ht" ); - GLog.p( "Newfound strength surges through your body." ); - + + hero.sprite.showStatus( CharSprite.POSITIVE, Game.getVar(R.string.PotionOfMight_StaApply)); + GLog.p(Game.getVar(R.string.PotionOfMight_Apply)); + Badges.validateStrengthAttained(); } @Override public String desc() { - return - "This powerful liquid will course through your muscles, permanently " + - "increasing your strength by one point and health by five points."; + return Game.getVar(R.string.PotionOfMight_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfMindVision.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfMindVision.java index 25e1830893..86936ca76f 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfMindVision.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfMindVision.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.MindVision; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -26,7 +28,7 @@ public class PotionOfMindVision extends Potion { { - name = "Potion of Mind Vision"; + name = Game.getVar(R.string.PotionOfMindVision_Name); } @Override @@ -36,18 +38,15 @@ protected void apply( Hero hero ) { Dungeon.observe(); if (Dungeon.level.mobs.size() > 0) { - GLog.i( "You can somehow feel the presence of other creatures' minds!" ); + GLog.i(Game.getVar(R.string.PotionOfMindVision_Apply1)); } else { - GLog.i( "You can somehow tell that you are alone on this level at the moment." ); + GLog.i(Game.getVar(R.string.PotionOfMindVision_Apply2)); } } @Override public String desc() { - return - "After drinking this, your mind will become attuned to the psychic signature " + - "of distant creatures, enabling you to sense biological presences through walls. " + - "Also this potion will permit you to see through nearby walls and doors."; + return Game.getVar(R.string.PotionOfMindVision_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfParalyticGas.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfParalyticGas.java index 06589e4d9c..f26ab89b05 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfParalyticGas.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfParalyticGas.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.blobs.Blob; import com.watabou.pixeldungeon.actors.blobs.ParalyticGas; import com.watabou.pixeldungeon.scenes.GameScene; @@ -27,7 +29,7 @@ public class PotionOfParalyticGas extends Potion { { - name = "Potion of Paralytic Gas"; + name = Game.getVar(R.string.PotionOfParalyticGas_Name); } @Override @@ -44,11 +46,7 @@ public void shatter( int cell ) { @Override public String desc() { - return - "Upon exposure to open air, the liquid in this flask will vaporize " + - "into a numbing yellow haze. Anyone who inhales the cloud will be paralyzed " + - "instantly, unable to move for some time after the cloud dissipates. This " + - "item can be thrown at distant enemies to catch them within the effect of the gas."; + return Game.getVar(R.string.PotionOfParalyticGas_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfPurity.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfPurity.java index ec284818a5..86062fdf82 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfPurity.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfPurity.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.blobs.Blob; import com.watabou.pixeldungeon.actors.blobs.ParalyticGas; import com.watabou.pixeldungeon.actors.blobs.ToxicGas; @@ -35,13 +37,13 @@ public class PotionOfPurity extends Potion { - private static final String TXT_FRESHNESS = "You feel uncommon freshness in the air."; - private static final String TXT_NO_SMELL = "You've stopped sensing any smells!"; + private static final String TXT_FRESHNESS = Game.getVar(R.string.PotionOfPurity_Freshness); + private static final String TXT_NO_SMELL = Game.getVar(R.string.PotionOfPurity_NoSmell); private static final int DISTANCE = 2; { - name = "Potion of Purification"; + name = Game.getVar(R.string.PotionOfPurity_Name); } @Override @@ -118,9 +120,7 @@ protected void apply( Hero hero ) { @Override public String desc() { - return - "This reagent will quickly neutralize all harmful gases in the area of effect. " + - "Drinking it will give you a temporary immunity to such gases."; + return Game.getVar(R.string.PotionOfPurity_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfStrength.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfStrength.java index a97e87b821..b5899187b3 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfStrength.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfStrength.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.sprites.CharSprite; import com.watabou.pixeldungeon.utils.GLog; @@ -25,7 +27,7 @@ public class PotionOfStrength extends Potion { { - name = "Potion of Strength"; + name = Game.getVar(R.string.PotionOfStrength_Name); } @Override @@ -33,17 +35,15 @@ protected void apply( Hero hero ) { setKnown(); hero.STR++; - hero.sprite.showStatus( CharSprite.POSITIVE, "+1 str" ); - GLog.p( "Newfound strength surges through your body." ); + hero.sprite.showStatus( CharSprite.POSITIVE, Game.getVar(R.string.PotionOfStrength_StaApply)); + GLog.p(Game.getVar(R.string.PotionOfStrength_Apply)); Badges.validateStrengthAttained(); } @Override public String desc() { - return - "This powerful liquid will course through your muscles, " + - "permanently increasing your strength by one point."; + return Game.getVar(R.string.PotionOfStrength_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/potions/PotionOfToxicGas.java b/src/com/watabou/pixeldungeon/items/potions/PotionOfToxicGas.java index 7a9c57013d..507883b7ac 100644 --- a/src/com/watabou/pixeldungeon/items/potions/PotionOfToxicGas.java +++ b/src/com/watabou/pixeldungeon/items/potions/PotionOfToxicGas.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.potions; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.blobs.Blob; import com.watabou.pixeldungeon.actors.blobs.ToxicGas; import com.watabou.pixeldungeon.scenes.GameScene; @@ -27,7 +29,7 @@ public class PotionOfToxicGas extends Potion { { - name = "Potion of Toxic Gas"; + name = Game.getVar(R.string.PotionOfToxicGas_Name); } @Override @@ -44,11 +46,7 @@ public void shatter( int cell ) { @Override public String desc() { - return - "Uncorking or shattering this pressurized glass will cause " + - "its contents to explode into a deadly cloud of toxic green gas. " + - "You might choose to fling this potion at distant enemies " + - "instead of uncorking it by hand."; + return Game.getVar(R.string.PotionOfToxicGas_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/quest/CorpseDust.java b/src/com/watabou/pixeldungeon/items/quest/CorpseDust.java index d0a8342bc7..8406cfaac5 100644 --- a/src/com/watabou/pixeldungeon/items/quest/CorpseDust.java +++ b/src/com/watabou/pixeldungeon/items/quest/CorpseDust.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items.quest; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class CorpseDust extends Item { { - name = "corpse dust"; + name = Game.getVar(R.string.CorpseDust_Name); image = ItemSpriteSheet.DUST; cursed = true; @@ -44,8 +46,6 @@ public boolean isIdentified() { @Override public String info() { - return - "The ball of corpse dust doesn't differ outwardly from a regular dust ball. However, " + - "you know somehow that it's better to get rid of it as soon as possible."; + return Game.getVar(R.string.CorpseDust_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/quest/DarkGold.java b/src/com/watabou/pixeldungeon/items/quest/DarkGold.java index cd055fa86c..494f8605c3 100644 --- a/src/com/watabou/pixeldungeon/items/quest/DarkGold.java +++ b/src/com/watabou/pixeldungeon/items/quest/DarkGold.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items.quest; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class DarkGold extends Item { { - name = "dark gold ore"; + name = Game.getVar(R.string.DarkGold_Name); image = ItemSpriteSheet.ORE; stackable = true; @@ -42,9 +44,7 @@ public boolean isIdentified() { @Override public String info() { - return - "This metal is called dark not because of its color (it doesn't differ from the normal gold), " + - "but because it melts under the daylight, making it useless on the surface."; + return Game.getVar(R.string.DarkGold_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/quest/DriedRose.java b/src/com/watabou/pixeldungeon/items/quest/DriedRose.java index 2a89685244..c5b0dd6706 100644 --- a/src/com/watabou/pixeldungeon/items/quest/DriedRose.java +++ b/src/com/watabou/pixeldungeon/items/quest/DriedRose.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items.quest; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class DriedRose extends Item { { - name = "dried rose"; + name = Game.getVar(R.string.DriedRose_Name); image = ItemSpriteSheet.ROSE; unique = true; @@ -41,7 +43,6 @@ public boolean isIdentified() { @Override public String info() { - return - "The rose has dried long ago, but it has kept all its petals somehow."; + return Game.getVar(R.string.DriedRose_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/quest/DwarfToken.java b/src/com/watabou/pixeldungeon/items/quest/DwarfToken.java index f9de9d9d01..448b768189 100644 --- a/src/com/watabou/pixeldungeon/items/quest/DwarfToken.java +++ b/src/com/watabou/pixeldungeon/items/quest/DwarfToken.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items.quest; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class DwarfToken extends Item { { - name = "dwarf token"; + name = Game.getVar(R.string.DwarfToken_Name); image = ItemSpriteSheet.TOKEN; stackable = true; @@ -42,9 +44,7 @@ public boolean isIdentified() { @Override public String info() { - return - "Many dwarves and some of their larger creations carry these small pieces of metal of unknown purpose. " + - "Maybe they are jewelry or maybe some kind of ID. Dwarves are strange folk."; + return Game.getVar(R.string.DwarfToken_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/quest/PhantomFish.java b/src/com/watabou/pixeldungeon/items/quest/PhantomFish.java new file mode 100644 index 0000000000..7f6f809f50 --- /dev/null +++ b/src/com/watabou/pixeldungeon/items/quest/PhantomFish.java @@ -0,0 +1,90 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.items.quest; + +import java.util.ArrayList; + +import com.watabou.noosa.Game; +import com.watabou.noosa.audio.Sample; +import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.actors.buffs.Buff; +import com.watabou.pixeldungeon.actors.buffs.Invisibility; +import com.watabou.pixeldungeon.actors.hero.Hero; +import com.watabou.pixeldungeon.items.Item; +import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.pixeldungeon.utils.GLog; + +public class PhantomFish extends Item { + + private static final String AC_EAT = Game.getVar(R.string.PhantomFish_ACEat); + + private static final float TIME_TO_EAT = 2f; + + { + name = Game.getVar(R.string.PhantomFish_Name); + image = ItemSpriteSheet.PHANTOM; + + unique = true; + } + + @Override + public ArrayList actions( Hero hero ) { + ArrayList actions = super.actions( hero ); + actions.add( AC_EAT ); + return actions; + } + + @Override + public void execute( final Hero hero, String action ) { + if (action.equals( AC_EAT )) { + + detach( hero.belongings.backpack ); + + hero.sprite.operate( hero.pos ); + hero.busy(); + Sample.INSTANCE.play( Assets.SND_EAT ); + Sample.INSTANCE.play( Assets.SND_MELD ); + + GLog.i( Game.getVar(R.string.PhantomFish_Invisible) ); + Buff.affect( hero, Invisibility.class, Invisibility.DURATION ); + + hero.spend( TIME_TO_EAT ); + + } else { + + super.execute( hero, action ); + + } + } + + @Override + public boolean isUpgradable() { + return false; + } + + @Override + public boolean isIdentified() { + return true; + } + + @Override + public String info() { + return Game.getVar(R.string.PhantomFish_Info); + } +} diff --git a/src/com/watabou/pixeldungeon/items/quest/Pickaxe.java b/src/com/watabou/pixeldungeon/items/quest/Pickaxe.java index 3ff8658454..a125372436 100644 --- a/src/com/watabou/pixeldungeon/items/quest/Pickaxe.java +++ b/src/com/watabou/pixeldungeon/items/quest/Pickaxe.java @@ -19,9 +19,11 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Hunger; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -41,16 +43,16 @@ public class Pickaxe extends Weapon { - public static final String AC_MINE = "MINE"; + public static final String AC_MINE = Game.getVar(R.string.Pickaxe_ACMine); public static final float TIME_TO_MINE = 2; - private static final String TXT_NO_VEIN = "There is no dark gold vein near you to mine"; + private static final String TXT_NO_VEIN = Game.getVar(R.string.Pickaxe_NoVein); private static final Glowing BLOODY = new Glowing( 0x550000 ); { - name = "pickaxe"; + name = Game.getVar(R.string.Pickaxe_Name); image = ItemSpriteSheet.PICKAXE; unique = true; @@ -58,12 +60,20 @@ public class Pickaxe extends Weapon { defaultAction = AC_MINE; STR = 14; - MIN = 3; - MAX = 12; } public boolean bloodStained = false; + @Override + public int min() { + return 3; + } + + @Override + public int max() { + return 12; + } + @Override public ArrayList actions( Hero hero ) { ArrayList actions = super.actions( hero ); @@ -171,7 +181,6 @@ public Glowing glowing() { @Override public String info() { - return - "This is a large and sturdy tool for breaking rocks. Probably it can be used as a weapon."; + return Game.getVar(R.string.Pickaxe_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/quest/RatSkull.java b/src/com/watabou/pixeldungeon/items/quest/RatSkull.java index d28fae0818..72bd01747d 100644 --- a/src/com/watabou/pixeldungeon/items/quest/RatSkull.java +++ b/src/com/watabou/pixeldungeon/items/quest/RatSkull.java @@ -17,13 +17,15 @@ */ package com.watabou.pixeldungeon.items.quest; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class RatSkull extends Item { { - name = "giant rat skull"; + name = Game.getVar(R.string.RatSkull_Name); image = ItemSpriteSheet.SKULL; unique = true; @@ -41,8 +43,7 @@ public boolean isIdentified() { @Override public String info() { - return - "It could be a nice hunting trophy, but it smells too bad to place it on a wall."; + return Game.getVar(R.string.RatSkull_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/rings/Ring.java b/src/com/watabou/pixeldungeon/items/rings/Ring.java index 16cfcdd2a4..12becbd7cf 100644 --- a/src/com/watabou/pixeldungeon/items/rings/Ring.java +++ b/src/com/watabou/pixeldungeon/items/rings/Ring.java @@ -19,9 +19,11 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.PixelDungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -42,13 +44,10 @@ public class Ring extends EquipableItem { private static final float TIME_TO_EQUIP = 1f; - private static final String TXT_IDENTIFY = - "you are now familiar enough with your %s to identify it. It is %s."; + private static final String TXT_IDENTIFY = Game.getVar(R.string.Ring_Identify); - private static final String TXT_UNEQUIP_TITLE = "Unequip one ring"; - private static final String TXT_UNEQUIP_MESSAGE = - "You can only wear two rings at a time. " + - "Unequip one of your equipped rings."; + private static final String TXT_UNEQUIP_TITLE = Game.getVar(R.string.Ring_UnequipTit); + private static final String TXT_UNEQUIP_MESSAGE = Game.getVar(R.string.Ring_UnequipMsg); protected Buff buff; @@ -66,8 +65,7 @@ public class Ring extends EquipableItem { RingOfElements.class, RingOfThorns.class }; - private static final String[] gems = - {"diamond", "opal", "garnet", "ruby", "amethyst", "topaz", "onyx", "tourmaline", "emerald", "sapphire", "quartz", "agate"}; + private static final String[] gems = Game.getVars(R.array.Ring_Gems); private static final Integer[] images = { ItemSpriteSheet.RING_DIAMOND, ItemSpriteSheet.RING_OPAL, @@ -163,7 +161,7 @@ protected void onSelect( int index ) { cursedKnown = true; if (cursed) { equipCursed( hero ); - GLog.n( "your " + this + " tightens around your finger painfully" ); + GLog.n(String.format(Game.getVar(R.string.Ring_Info2), this)); } hero.spendAndNext( TIME_TO_EQUIP ); @@ -192,11 +190,8 @@ public boolean doUnequip( Hero hero, boolean collect, boolean single ) { buff = null; return true; - } else { - return false; - } } @@ -206,37 +201,30 @@ public boolean isEquipped( Hero hero ) { } @Override - public Item upgrade() { - - super.upgrade(); - + public int effectiveLevel() { + return isBroken() ? 1 : level(); + } + + private void renewBuff() { if (buff != null) { - Char owner = buff.target; buff.detach(); if ((buff = buff()) != null) { buff.attachTo( owner ); } } - - return this; } @Override - public Item degrade() { - - super.degrade(); - - if (buff != null) { - - Char owner = buff.target; - buff.detach(); - if ((buff = buff()) != null) { - buff.attachTo( owner ); - } - } - - return this; + public void getBroken() { + renewBuff(); + super.getBroken(); + } + + @Override + public void fix() { + super.fix(); + renewBuff(); } @Override @@ -244,7 +232,7 @@ public int maxDurability( int lvl ) { if (lvl <= 1) { return Integer.MAX_VALUE; } else { - return 80 * (lvl < 16 ? 16 - lvl : 1); + return 100 * (lvl < 16 ? 16 - lvl : 1); } } @@ -260,33 +248,31 @@ protected void setKnown() { Badges.validateAllRingsIdentified(); } + @Override + public String toString() { + return + levelKnown && isBroken() ? + String.format(Game.getVar(R.string.Ring_Broken), super.toString()) : super.toString(); + } + @Override public String name() { - return isKnown() ? name : gem + " ring"; + return isKnown() ? name : String.format(Game.getVar(R.string.Ring_Name), gem); } @Override public String desc() { - return - "This metal band is adorned with a large " + gem + " gem " + - "that glitters in the darkness. Who knows what effect it has when worn?"; + return String.format(Game.getVar(R.string.Ring_Info), gem); } @Override public String info() { if (isEquipped( Dungeon.hero )) { - - return desc() + "\n\n" + "The " + name() + " is on your finger" + - (cursed ? ", and because it is cursed, you are powerless to remove it." : "." ); - + return String.format(Game.getVar(R.string.Ring_Info3a), desc(), name(), (cursed ? Game.getVar(R.string.Ring_Info3b) : "")); } else if (cursed && cursedKnown) { - - return desc() + "\n\nYou can feel a malevolent magic lurking within the " + name() + "."; - + return String.format(Game.getVar(R.string.Ring_Info4), desc(), name()); } else { - return desc(); - } } @@ -319,21 +305,7 @@ public static boolean allKnown() { @Override public int price() { - int price = 80; - if (cursed && cursedKnown) { - price /= 2; - } - if (levelKnown) { - if (level > 0) { - price *= (level + 1); - } else if (level < 0) { - price /= (1 - level); - } - } - if (price < 1) { - price = 1; - } - return price; + return considerState( 80 ); } protected RingBuff buff() { @@ -358,11 +330,11 @@ public void restoreFromBundle( Bundle bundle ) { public class RingBuff extends Buff { - private static final String TXT_KNOWN = "This is a %s"; + private final String TXT_KNOWN = Game.getVar(R.string.Ring_BuffKnown); public int level; public RingBuff() { - level = Ring.this.level; + level = Ring.this.effectiveLevel(); } @Override diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfAccuracy.java b/src/com/watabou/pixeldungeon/items/rings/RingOfAccuracy.java index 1524c188dd..ed32cdee05 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfAccuracy.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfAccuracy.java @@ -17,10 +17,12 @@ */ package com.watabou.pixeldungeon.items.rings; -public class RingOfAccuracy extends Ring { +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; +public class RingOfAccuracy extends Ring { { - name = "Ring of Accuracy"; + name = Game.getVar(R.string.RingOfAccuracy_Name); } @Override @@ -30,9 +32,7 @@ protected RingBuff buff( ) { @Override public String desc() { - return isKnown() ? - "This ring increases your chance to hit the enemy." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfAccuracy_Info) : super.desc(); } public class Accuracy extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfDetection.java b/src/com/watabou/pixeldungeon/items/rings/RingOfDetection.java index 2ecfef273f..70df48ba91 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfDetection.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfDetection.java @@ -17,13 +17,14 @@ */ package com.watabou.pixeldungeon.items.rings; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; public class RingOfDetection extends Ring { - { - name = "Ring of Detection"; + name = Game.getVar(R.string.RingOfDetection_Name); } @Override @@ -43,11 +44,7 @@ protected RingBuff buff( ) { @Override public String desc() { - return isKnown() ? - "Wearing this ring will allow the wearer to notice hidden secrets - " + - "traps and secret doors - without taking time to search. Degraded rings of detection " + - "will dull your senses, making it harder to notice secrets even when actively searching for them." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfDetection_Info) : super.desc(); } public class Detection extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfElements.java b/src/com/watabou/pixeldungeon/items/rings/RingOfElements.java index 8431ab4dfb..fff35ebc3b 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfElements.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfElements.java @@ -19,6 +19,8 @@ import java.util.HashSet; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.blobs.ToxicGas; import com.watabou.pixeldungeon.actors.buffs.Burning; import com.watabou.pixeldungeon.actors.buffs.Poison; @@ -29,9 +31,8 @@ import com.watabou.utils.Random; public class RingOfElements extends Ring { - { - name = "Ring of Elements"; + name = Game.getVar(R.string.RingOfElements_Name); } @Override @@ -41,10 +42,7 @@ protected RingBuff buff( ) { @Override public String desc() { - return isKnown() ? - "This ring provides resistance to different elements, such as fire, " + - "electricity, gases etc. Also it decreases duration of negative effects." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfElements_Info) : super.desc(); } private static final HashSet> EMPTY = new HashSet>(); diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfEvasion.java b/src/com/watabou/pixeldungeon/items/rings/RingOfEvasion.java index 37a0ae338f..f2145c0e7c 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfEvasion.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfEvasion.java @@ -17,10 +17,12 @@ */ package com.watabou.pixeldungeon.items.rings; -public class RingOfEvasion extends Ring { +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; +public class RingOfEvasion extends Ring { { - name = "Ring of Evasion"; + name = Game.getVar(R.string.RingOfEvasion_Name); } @Override @@ -30,9 +32,7 @@ protected RingBuff buff( ) { @Override public String desc() { - return isKnown() ? - "This ring increases your chance to dodge enemy attack." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfEvasion_Info) : super.desc(); } public class Evasion extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfHaggler.java b/src/com/watabou/pixeldungeon/items/rings/RingOfHaggler.java index 5cf64742d5..e6fd26ff1b 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfHaggler.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfHaggler.java @@ -17,14 +17,15 @@ */ package com.watabou.pixeldungeon.items.rings; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.Item; public class RingOfHaggler extends Ring { - { - name = "Ring of Haggler"; + name = Game.getVar(R.string.RingOfHaggler_Name); } @Override @@ -34,7 +35,7 @@ protected RingBuff buff( ) { @Override public Item random() { - level = +1; + level( +1 ); return this; } @@ -58,13 +59,7 @@ public void use() { @Override public String desc() { - return isKnown() ? - "In fact this ring doesn't provide any magic effect, but it demonstrates " + - "to shopkeepers and vendors, that the owner of the ring is a member of " + - "The Thieves' Guild. Usually they are glad to give a discount in exchange " + - "for temporary immunity guarantee. Upgrading this ring won't give any additional " + - "bonuses." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfHaggler_Info) : super.desc(); } public class Haggling extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfHaste.java b/src/com/watabou/pixeldungeon/items/rings/RingOfHaste.java index b046f4a3be..5c25ca08e0 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfHaste.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfHaste.java @@ -17,10 +17,12 @@ */ package com.watabou.pixeldungeon.items.rings; -public class RingOfHaste extends Ring { +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; +public class RingOfHaste extends Ring { { - name = "Ring of Haste"; + name = Game.getVar(R.string.RingOfHaste_Name); } @Override @@ -30,9 +32,7 @@ protected RingBuff buff( ) { @Override public String desc() { - return isKnown() ? - "This ring accelerates the wearer's flow of time, allowing one to perform all actions a little faster." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfHaste_Info) : super.desc(); } public class Haste extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfHerbalism.java b/src/com/watabou/pixeldungeon/items/rings/RingOfHerbalism.java index b12ddf4dd9..0a1479bd05 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfHerbalism.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfHerbalism.java @@ -17,10 +17,12 @@ */ package com.watabou.pixeldungeon.items.rings; -public class RingOfHerbalism extends Ring { +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; +public class RingOfHerbalism extends Ring { { - name = "Ring of Herbalism"; + name = Game.getVar(R.string.RingOfHerbalism_Name); } @Override @@ -30,9 +32,7 @@ protected RingBuff buff( ) { @Override public String desc() { - return isKnown() ? - "This ring increases your chance to gather dew and seeds from trampled grass." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfHerbalism_Info) : super.desc(); } public class Herbalism extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfMending.java b/src/com/watabou/pixeldungeon/items/rings/RingOfMending.java index 18a9a901b3..eff37053f4 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfMending.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfMending.java @@ -17,10 +17,12 @@ */ package com.watabou.pixeldungeon.items.rings; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; + public class RingOfMending extends Ring { - { - name = "Ring of Mending"; + name = Game.getVar(R.string.RingOfMending_Name); } @Override @@ -30,11 +32,7 @@ protected RingBuff buff( ) { @Override public String desc() { - return isKnown() ? - "This ring increases the body's regenerative properties, allowing " + - "one to recover lost health at an accelerated rate. Degraded rings will " + - "decrease or even halt one's natural regeneration." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfMending_Info) : super.desc(); } public class Rejuvenation extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfPower.java b/src/com/watabou/pixeldungeon/items/rings/RingOfPower.java index f93558b33e..3cf425f001 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfPower.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfPower.java @@ -17,10 +17,12 @@ */ package com.watabou.pixeldungeon.items.rings; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; + public class RingOfPower extends Ring { - { - name = "Ring of Power"; + name = Game.getVar(R.string.RingOfPower_Name); } @Override @@ -30,10 +32,7 @@ protected RingBuff buff( ) { @Override public String desc() { - return isKnown() ? - "Your wands will become more powerful in the energy field " + - "that radiates from this ring. Degraded rings of power will instead weaken your wands." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfPower_Info) : super.desc(); } public class Power extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfSatiety.java b/src/com/watabou/pixeldungeon/items/rings/RingOfSatiety.java index 08a47fa14b..c59f2d271a 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfSatiety.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfSatiety.java @@ -17,10 +17,12 @@ */ package com.watabou.pixeldungeon.items.rings; -public class RingOfSatiety extends Ring { +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; +public class RingOfSatiety extends Ring { { - name = "Ring of Satiety"; + name = Game.getVar(R.string.RingOfSatiety_Name); } @Override @@ -30,9 +32,7 @@ protected RingBuff buff( ) { @Override public String desc() { - return isKnown() ? - "Wearing this ring you can go without food longer. Degraded rings of satiety will cause the opposite effect." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfSatiety_Info) : super.desc(); } public class Satiety extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfShadows.java b/src/com/watabou/pixeldungeon/items/rings/RingOfShadows.java index e06186adc8..26e400f053 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfShadows.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfShadows.java @@ -17,10 +17,12 @@ */ package com.watabou.pixeldungeon.items.rings; -public class RingOfShadows extends Ring { +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; +public class RingOfShadows extends Ring { { - name = "Ring of Shadows"; + name = Game.getVar(R.string.RingOfShadows_Name); } @Override @@ -30,10 +32,7 @@ protected RingBuff buff( ) { @Override public String desc() { - return isKnown() ? - "Enemies will be less likely to notice you if you wear this ring. Degraded rings " + - "of shadows will alert enemies who might otherwise not have noticed your presence." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfShadows_Info) : super.desc(); } public class Shadows extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/rings/RingOfThorns.java b/src/com/watabou/pixeldungeon/items/rings/RingOfThorns.java index e621d22f58..7c61bb5d5c 100644 --- a/src/com/watabou/pixeldungeon/items/rings/RingOfThorns.java +++ b/src/com/watabou/pixeldungeon/items/rings/RingOfThorns.java @@ -17,14 +17,15 @@ */ package com.watabou.pixeldungeon.items.rings; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.Item; public class RingOfThorns extends Ring { - { - name = "Ring of Thorns"; + name = Game.getVar(R.string.RingOfThorns_Name); } @Override @@ -34,7 +35,7 @@ protected RingBuff buff( ) { @Override public Item random() { - level = +1; + level( +1 ); return this; } @@ -58,11 +59,7 @@ public void use() { @Override public String desc() { - return isKnown() ? - "Though this ring doesn't provide real thorns, an enemy that attacks you " + - "will itself be wounded by a fraction of the damage that it inflicts. " + - "Upgrading this ring won't give any additional bonuses." : - super.desc(); + return isKnown() ? Game.getVar(R.string.RingOfThorns_Info) : super.desc(); } public class Thorns extends RingBuff { diff --git a/src/com/watabou/pixeldungeon/items/scrolls/InventoryScroll.java b/src/com/watabou/pixeldungeon/items/scrolls/InventoryScroll.java index a0342d803b..72d8820175 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/InventoryScroll.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/InventoryScroll.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Invisibility; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.scenes.GameScene; @@ -27,12 +29,12 @@ public abstract class InventoryScroll extends Scroll { - protected String inventoryTitle = "Select an item"; + protected String inventoryTitle = Game.getVar(R.string.InventoryScroll_Title); protected WndBag.Mode mode = WndBag.Mode.ALL; - - private static final String TXT_WARNING = "Do you really want to cancel this scroll usage? It will be consumed anyway."; - private static final String TXT_YES = "Yes, I'm positive"; - private static final String TXT_NO = "No, I changed my mind"; + + private static final String TXT_WARNING = Game.getVar(R.string.InventoryScroll_Warning); + private static final String TXT_YES = Game.getVar(R.string.InventoryScroll_Yes); + private static final String TXT_NO = Game.getVar(R.string.InventoryScroll_No); @Override protected void doRead() { @@ -74,7 +76,7 @@ public void onSelect( Item item ) { if (item != null) { ((InventoryScroll)curItem).onItemSelected( item ); - curUser.spendAndNext( TIME_TO_READ ); + ((InventoryScroll)curItem).readAnimation(); Sample.INSTANCE.play( Assets.SND_READ ); Invisibility.dispel(); diff --git a/src/com/watabou/pixeldungeon/items/scrolls/Scroll.java b/src/com/watabou/pixeldungeon/items/scrolls/Scroll.java index c88fad0013..e68525e91b 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/Scroll.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/Scroll.java @@ -20,20 +20,23 @@ import java.util.ArrayList; import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Blindness; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.items.ItemStatusHandler; +import com.watabou.pixeldungeon.sprites.HeroSprite; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; import com.watabou.pixeldungeon.utils.GLog; import com.watabou.utils.Bundle; public abstract class Scroll extends Item { - private static final String TXT_BLINDED = "You can't read a scroll while blinded"; + private static final String TXT_BLINDED = Game.getVar(R.string.Scroll_Blinded); - public static final String AC_READ = "READ"; + public static final String AC_READ = Game.getVar(R.string.Scroll_ACRead); protected static final float TIME_TO_READ = 1f; @@ -51,8 +54,7 @@ public abstract class Scroll extends Item { ScrollOfUpgrade.class, ScrollOfEnchantment.class }; - private static final String[] runes = - {"KAUNAN", "SOWILO", "LAGUZ", "YNGVI", "GYFU", "RAIDO", "ISAZ", "MANNAZ", "NAUDIZ", "BERKANAN", "ODAL", "TIWAZ"}; + private static final String[] runes = Game.getVars(R.array.Scroll_Runes); private static final Integer[] images = { ItemSpriteSheet.SCROLL_KAUNAN, ItemSpriteSheet.SCROLL_SOWILO, @@ -124,6 +126,12 @@ public void execute( Hero hero, String action ) { abstract protected void doRead(); + protected void readAnimation() { + curUser.spend( TIME_TO_READ ); + curUser.busy(); + ((HeroSprite)curUser.sprite).read(); + } + public boolean isKnown() { return handler.isKnown( this ); } @@ -144,15 +152,12 @@ public Item identify() { @Override public String name() { - return isKnown() ? name : "scroll \"" + rune + "\""; + return isKnown() ? name : String.format(Game.getVar(R.string.Scroll_Name), rune); } @Override public String info() { - return isKnown() ? - desc() : - "This parchment is covered with indecipherable writing, and bears a title " + - "of rune " + rune + ". Who knows what it will do when read aloud?"; + return isKnown() ? desc() : String.format(Game.getVar(R.string.Scroll_Info), rune); } @Override diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfChallenge.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfChallenge.java index e83a7a9e22..069de865a8 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfChallenge.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfChallenge.java @@ -17,30 +17,37 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Invisibility; +import com.watabou.pixeldungeon.actors.buffs.Rage; import com.watabou.pixeldungeon.actors.mobs.Mimic; import com.watabou.pixeldungeon.actors.mobs.Mob; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.items.Heap; +import com.watabou.pixeldungeon.levels.Level; import com.watabou.pixeldungeon.utils.GLog; public class ScrollOfChallenge extends Scroll { { - name = "Scroll of Challenge"; + name = Game.getVar(R.string.ScrollOfChallenge_Name); } @Override protected void doRead() { - for (Mob mob : Dungeon.level.mobs) { + for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) { mob.beckon( curUser.pos ); + if (Dungeon.visible[mob.pos]) { + Buff.affect( mob, Rage.class, Level.distance( curUser.pos, mob.pos ) ); + } } - for (Heap heap : Dungeon.level.heaps.values()) { if (heap.type == Heap.Type.MIMIC) { Mimic m = Mimic.spawnAt( heap.pos, heap.items ); @@ -51,20 +58,18 @@ protected void doRead() { } } - GLog.w( "The scroll emits a challenging roar that echoes throughout the dungeon!" ); + GLog.w(Game.getVar(R.string.ScrollOfChallenge_Info1)); setKnown(); curUser.sprite.centerEmitter().start( Speck.factory( Speck.SCREAM ), 0.3f, 3 ); Sample.INSTANCE.play( Assets.SND_CHALLENGE ); Invisibility.dispel(); - curUser.spendAndNext( TIME_TO_READ ); + readAnimation(); } @Override public String desc() { - return - "When read aloud, this scroll will unleash a challenging roar " + - "that will awaken all monsters and alert them to the reader's location."; + return Game.getVar(R.string.ScrollOfChallenge_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfEnchantment.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfEnchantment.java index 2a9b3e5895..5a35eab100 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfEnchantment.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfEnchantment.java @@ -17,7 +17,10 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.effects.Enchanting; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.items.armor.Armor; @@ -27,11 +30,11 @@ public class ScrollOfEnchantment extends InventoryScroll { - private static final String TXT_GLOWS = "your %s glows in the dark"; + private static final String TXT_GLOWS = Game.getVar(R.string.ScrollOfEnchantment_Glows); { - name = "Scroll of Enchantment"; - inventoryTitle = "Select an enchantable item"; + name = Game.getVar(R.string.ScrollOfEnchantment_Name); + inventoryTitle = Game.getVar(R.string.ScrollOfEnchantment_InvTitle); mode = WndBag.Mode.ENCHANTABLE; } @@ -53,13 +56,12 @@ protected void onItemSelected( Item item ) { item.fix(); curUser.sprite.emitter().start( Speck.factory( Speck.LIGHT ), 0.1f, 5 ); + Enchanting.show( curUser, item ); GLog.w( TXT_GLOWS, item.name() ); } @Override public String desc() { - return - "This scroll is able to imbue a weapon or an armor " + - "with a random enchantment, granting it a special power."; + return Game.getVar(R.string.ScrollOfEnchantment_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfIdentify.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfIdentify.java index 280bb1d465..967dbec981 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfIdentify.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfIdentify.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.effects.Identification; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.utils.GLog; @@ -26,8 +28,8 @@ public class ScrollOfIdentify extends InventoryScroll { { - name = "Scroll of Identify"; - inventoryTitle = "Select an item to identify"; + name = Game.getVar(R.string.ScrollOfIdentify_Name); + inventoryTitle = Game.getVar(R.string.ScrollOfIdentify_InvTitle); mode = WndBag.Mode.UNIDENTIFED; } @@ -37,15 +39,14 @@ protected void onItemSelected( Item item ) { curUser.sprite.parent.add( new Identification( curUser.sprite.center().offset( 0, -16 ) ) ); item.identify(); - GLog.i( "It is " + item ); + GLog.i(String.format(Game.getVar(R.string.ScrollOfIdentify_Info1), item)); Badges.validateItemLevelAquired( item ); } @Override public String desc() { - return - "Permanently reveals all of the secrets of a single item."; + return Game.getVar(R.string.ScrollOfIdentify_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfLullaby.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfLullaby.java index 6499c4450d..340af706ae 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfLullaby.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfLullaby.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Invisibility; import com.watabou.pixeldungeon.actors.buffs.Sleep; @@ -31,7 +33,7 @@ public class ScrollOfLullaby extends Scroll { { - name = "Scroll of Lullaby"; + name = Game.getVar(R.string.ScrollOfLullaby_Name); } @Override @@ -55,24 +57,22 @@ protected void doRead() { switch (count) { case 0: - GLog.i( "The scroll utters a soothing melody." ); + GLog.i(Game.getVar(R.string.ScrollOfLullaby_Info1)); break; case 1: - GLog.i( "The scroll utters a soothing melody and the " + affected.name + " falls asleep!" ); + GLog.i(String.format(Game.getVar(R.string.ScrollOfLullaby_Info2), affected.name)); break; default: - GLog.i( "The scroll utters a soothing melody and the monsters fall asleep!" ); + GLog.i(Game.getVar(R.string.ScrollOfLullaby_Info3)); } setKnown(); - curUser.spendAndNext( TIME_TO_READ ); + readAnimation(); } @Override public String desc() { - return - "A soothing melody will put all creatures in your field of view into a deep sleep, " + - "giving you a chance to flee or make a surprise attack on them."; + return Game.getVar(R.string.ScrollOfLullaby_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfMagicMapping.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfMagicMapping.java index 5135cb9958..07779c3de5 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfMagicMapping.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfMagicMapping.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Invisibility; import com.watabou.pixeldungeon.effects.CellEmitter; import com.watabou.pixeldungeon.effects.Speck; @@ -31,10 +33,10 @@ public class ScrollOfMagicMapping extends Scroll { - private static final String TXT_LAYOUT = "You are now aware of the level layout."; + private static final String TXT_LAYOUT = Game.getVar(R.string.ScrollOfMagicMapping_Layout); { - name = "Scroll of Magic Mapping"; + name = Game.getVar(R.string.ScrollOfMagicMapping_Name); } @Override @@ -81,15 +83,12 @@ protected void doRead() { setKnown(); - curUser.spendAndNext( TIME_TO_READ ); + readAnimation(); } @Override public String desc() { - return - "When this scroll is read, an image of crystal clarity will be etched into your memory, " + - "alerting you to the precise layout of the level and revealing all hidden secrets. " + - "The locations of items and creatures will remain unknown."; + return Game.getVar(R.string.ScrollOfMagicMapping_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfMirrorImage.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfMirrorImage.java index f70a219229..7c8933f448 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfMirrorImage.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfMirrorImage.java @@ -19,8 +19,10 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.buffs.Invisibility; import com.watabou.pixeldungeon.actors.mobs.npcs.MirrorImage; @@ -34,7 +36,7 @@ public class ScrollOfMirrorImage extends Scroll { private static final int NIMAGES = 3; { - name = "Scroll of Mirror Image"; + name = Game.getVar(R.string.ScrollOfMirrorImage_Name); } @Override @@ -69,12 +71,11 @@ protected void doRead() { Sample.INSTANCE.play( Assets.SND_READ ); Invisibility.dispel(); - curUser.spendAndNext( TIME_TO_READ ); + readAnimation(); } @Override public String desc() { - return - "The incantation on this scroll will create illusionary twins of the reader, which will chase his enemies."; + return Game.getVar(R.string.ScrollOfMirrorImage_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfPsionicBlast.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfPsionicBlast.java index f1839a7a04..4f623dd2b0 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfPsionicBlast.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfPsionicBlast.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Blindness; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Invisibility; @@ -31,7 +33,7 @@ public class ScrollOfPsionicBlast extends Scroll { { - name = "Scroll of Psionic Blast"; + name = Game.getVar(R.string.ScrollOfPsionicBlast_Name); } @Override @@ -54,15 +56,12 @@ protected void doRead() { setKnown(); - curUser.spendAndNext( TIME_TO_READ ); + readAnimation(); } @Override public String desc() { - return - "This scroll contains destructive energy, that can be psionically channeled to inflict a " + - "massive damage to all creatures within a field of view. An accompanying flash of light will " + - "temporarily blind everybody in the area of effect including the reader of the scroll."; + return Game.getVar(R.string.ScrollOfPsionicBlast_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfRecharging.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfRecharging.java index 586a1a3529..c477d5dca0 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfRecharging.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfRecharging.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Invisibility; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.effects.SpellSprite; @@ -28,7 +30,7 @@ public class ScrollOfRecharging extends Scroll { { - name = "Scroll of Recharging"; + name = Game.getVar(R.string.ScrollOfRecharging_Name); } @Override @@ -41,21 +43,20 @@ protected void doRead() { Invisibility.dispel(); if (count > 0) { - GLog.i( "a surge of energy courses through your pack, recharging your wand" + (count > 1 ? "s" : "") ); + GLog.i((count > 1 ? Game.getVar(R.string.ScrollOfRecharging_Info1b) + : Game.getVar(R.string.ScrollOfRecharging_Info1a)) ); SpellSprite.show( curUser, SpellSprite.CHARGE ); } else { - GLog.i( "a surge of energy courses through your pack, but nothing happens" ); + GLog.i(Game.getVar(R.string.ScrollOfRecharging_Info2)); } setKnown(); - curUser.spendAndNext( TIME_TO_READ ); + readAnimation(); } @Override public String desc() { - return - "The raw magical power bound up in this parchment will, when released, " + - "recharge all of the reader's wands to full power."; + return Game.getVar(R.string.ScrollOfRecharging_Info); } public static void charge( Hero hero ) { diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfRemoveCurse.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfRemoveCurse.java index 6a3c90c14d..43c69cc03d 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfRemoveCurse.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfRemoveCurse.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Invisibility; import com.watabou.pixeldungeon.actors.buffs.Weakness; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -29,13 +31,11 @@ public class ScrollOfRemoveCurse extends Scroll { - private static final String TXT_PROCCED = - "Your pack glows with a cleansing light, and a malevolent energy disperses."; - private static final String TXT_NOT_PROCCED = - "Your pack glows with a cleansing light, but nothing happens."; + private static final String TXT_PROCCED = Game.getVar(R.string.ScrollOfRemoveCurse_Proced); + private static final String TXT_NOT_PROCCED = Game.getVar(R.string.ScrollOfRemoveCurse_NoProced); { - name = "Scroll of Remove Curse"; + name = Game.getVar(R.string.ScrollOfRemoveCurse_Name); } @Override @@ -62,15 +62,12 @@ protected void doRead() { setKnown(); - curUser.spendAndNext( TIME_TO_READ ); + readAnimation(); } @Override public String desc() { - return - "The incantation on this scroll will instantly strip from " + - "the reader's weapon, armor, rings and carried items any evil " + - "enchantments that might prevent the wearer from removing them."; + return Game.getVar(R.string.ScrollOfRemoveCurse_Info); } public static boolean uncurse( Hero hero, Item... items ) { diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfTeleportation.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfTeleportation.java index 50124253b0..e73407b38d 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfTeleportation.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfTeleportation.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Invisibility; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.wands.WandOfBlink; @@ -27,14 +29,11 @@ public class ScrollOfTeleportation extends Scroll { - public static final String TXT_TELEPORTED = - "In a blink of an eye you were teleported to another location of the level."; - - public static final String TXT_NO_TELEPORT = - "Strong magic aura of this place prevents you from teleporting!"; + public static final String TXT_TELEPORTED = Game.getVar(R.string.ScrollOfTeleportation_Teleport); + public static final String TXT_NO_TELEPORT = Game.getVar(R.string.ScrollOfTeleportation_NoTeleport); { - name = "Scroll of Teleportation"; + name = Game.getVar(R.string.ScrollOfTeleportation_Name); } @Override @@ -46,7 +45,7 @@ protected void doRead() { teleportHero( curUser ); setKnown(); - curUser.spendAndNext( TIME_TO_READ ); + readAnimation(); } public static void teleportHero( Hero hero ) { @@ -77,11 +76,7 @@ public static void teleportHero( Hero hero ) { @Override public String desc() { - return - "The spell on this parchment instantly transports the reader " + - "to a random location on the dungeon level. It can be used " + - "to escape a dangerous situation, but the unlucky reader might " + - "find himself in an even more dangerous place."; + return Game.getVar(R.string.ScrollOfTeleportation_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfTerror.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfTerror.java index 880f880e8e..1cd3a738f4 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfTerror.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfTerror.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Invisibility; import com.watabou.pixeldungeon.actors.buffs.Terror; @@ -31,7 +33,7 @@ public class ScrollOfTerror extends Scroll { { - name = "Scroll of Terror"; + name = Game.getVar(R.string.ScrollOfTerror_Name); } @Override @@ -54,24 +56,22 @@ protected void doRead() { switch (count) { case 0: - GLog.i( "The scroll emits a brilliant flash of red light" ); + GLog.i(Game.getVar(R.string.ScrollOfTerror_Info1)); break; case 1: - GLog.i( "The scroll emits a brilliant flash of red light and the " + affected.name + " flees!" ); + GLog.i(String.format(Game.getVar(R.string.ScrollOfTerror_Info2), affected.name)); break; default: - GLog.i( "The scroll emits a brilliant flash of red light and the monsters flee!" ); + GLog.i(Game.getVar(R.string.ScrollOfTerror_Info3)); } setKnown(); - curUser.spendAndNext( TIME_TO_READ ); + readAnimation(); } @Override public String desc() { - return - "A flash of red light will overwhelm all creatures in your field of view with terror, " + - "and they will turn and flee. Attacking a fleeing enemy will dispel the effect."; + return Game.getVar(R.string.ScrollOfTerror_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfUpgrade.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfUpgrade.java index 352f3cc045..118887b365 100644 --- a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfUpgrade.java +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfUpgrade.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.items.scrolls; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.items.Item; @@ -27,11 +29,11 @@ public class ScrollOfUpgrade extends InventoryScroll { - private static final String TXT_LOOKS_BETTER = "your %s certainly looks better now"; + private static final String TXT_LOOKS_BETTER = Game.getVar(R.string.ScrollOfUpgrade_LooksBetter); { - name = "Scroll of Upgrade"; - inventoryTitle = "Select an item to upgrade"; + name = Game.getVar(R.string.ScrollOfUpgrade_Name); + inventoryTitle = Game.getVar(R.string.ScrollOfUpgrade_InvTitle); mode = WndBag.Mode.UPGRADEABLE; } @@ -39,7 +41,11 @@ public class ScrollOfUpgrade extends InventoryScroll { protected void onItemSelected( Item item ) { ScrollOfRemoveCurse.uncurse( Dungeon.hero, item ); - item.upgrade(); + if (item.isBroken()) { + item.fix(); + } else { + item.upgrade(); + } upgrade( curUser ); GLog.p( TXT_LOOKS_BETTER, item.name() ); @@ -53,11 +59,6 @@ public static void upgrade( Hero hero ) { @Override public String desc() { - return - "This scroll will upgrade a single item, improving its quality. A wand will " + - "increase in power and in number of charges; a weapon will inflict more damage " + - "or find its mark more frequently; a suit of armor will deflect additional blows; " + - "the effect of a ring on its wearer will intensify. Weapons and armor will also " + - "require less strength to use, and any curses on the item will be lifted."; + return Game.getVar(R.string.ScrollOfUpgrade_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfWipeOut.java b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfWipeOut.java new file mode 100644 index 0000000000..243e881196 --- /dev/null +++ b/src/com/watabou/pixeldungeon/items/scrolls/ScrollOfWipeOut.java @@ -0,0 +1,138 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.items.scrolls; + +import java.util.ArrayList; + +import com.watabou.noosa.Game; +import com.watabou.noosa.audio.Sample; +import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.actors.buffs.Blindness; +import com.watabou.pixeldungeon.actors.buffs.Invisibility; +import com.watabou.pixeldungeon.actors.hero.Hero; +import com.watabou.pixeldungeon.actors.mobs.Bestiary; +import com.watabou.pixeldungeon.actors.mobs.Mob; +import com.watabou.pixeldungeon.effects.CellEmitter; +import com.watabou.pixeldungeon.effects.Speck; +import com.watabou.pixeldungeon.items.Heap; +import com.watabou.pixeldungeon.items.Heap.Type; +import com.watabou.pixeldungeon.items.Item; +import com.watabou.pixeldungeon.scenes.GameScene; +import com.watabou.pixeldungeon.sprites.HeroSprite; +import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.pixeldungeon.utils.GLog; +import com.watabou.utils.Random; + +public class ScrollOfWipeOut extends Item { + + private static final String TXT_BLINDED = Game.getVar(R.string.ScrollOfWipeOut_Blinded); + + public static final String AC_READ = Game.getVar(R.string.ScrollOfWipeOut_ACRead); + + protected static final float TIME_TO_READ = 1f; + + { + name = Game.getVar(R.string.ScrollOfWipeOut_Name); + image = ItemSpriteSheet.SCROLL_WIPE_OUT; + + stackable = true; + defaultAction = AC_READ; + } + + @Override + public ArrayList actions( Hero hero ) { + ArrayList actions = super.actions( hero ); + actions.add( AC_READ ); + return actions; + } + + @Override + public void execute( Hero hero, String action ) { + if (action.equals( AC_READ )) { + + if (hero.buff( Blindness.class ) != null) { + GLog.w( TXT_BLINDED ); + } else { + curUser = hero; + curItem = detach( hero.belongings.backpack ); + doRead(); + } + + } else { + + super.execute( hero, action ); + + } + } + + private void doRead() { + GameScene.flash( 0xFF6644 ); + + Invisibility.dispel(); + + for (Mob mob : Dungeon.level.mobs.toArray( new Mob[0] )) { + if (!Bestiary.isBoss( mob )) { + Sample.INSTANCE.play( Assets.SND_CURSED, 0.3f, 0.3f, Random.Float( 0.6f, 0.9f ) ); + mob.die( this ); + } + } + + for (Heap heap : Dungeon.level.heaps.values()) { + switch (heap.type) { + case FOR_SALE: + heap.type = Type.HEAP; + if (Dungeon.visible[heap.pos]) { + CellEmitter.center( heap.pos ).burst( Speck.factory( Speck.COIN ), 2 ); + } + break; + case MIMIC: + heap.type = Type.HEAP; + heap.sprite.link(); + Sample.INSTANCE.play( Assets.SND_CURSED, 0.3f, 0.3f, Random.Float( 0.6f, 0.9f ) ); + break; + default: + } + } + + curUser.spend( TIME_TO_READ ); + curUser.busy(); + ((HeroSprite)curUser.sprite).read(); + } + + @Override + public boolean isUpgradable() { + return false; + } + + @Override + public boolean isIdentified() { + return true; + } + + @Override + public String desc() { + return Game.getVar(R.string.ScrollOfWipeOut_Info); + } + + @Override + public int price() { + return 100 * quantity; + } +} diff --git a/src/com/watabou/pixeldungeon/items/wands/Wand.java b/src/com/watabou/pixeldungeon/items/wands/Wand.java index f4103a1a56..a818f62e83 100644 --- a/src/com/watabou/pixeldungeon/items/wands/Wand.java +++ b/src/com/watabou/pixeldungeon/items/wands/Wand.java @@ -19,10 +19,12 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -49,16 +51,16 @@ public abstract class Wand extends KindOfWeapon { private static final int USAGES_TO_KNOW = 40; - public static final String AC_ZAP = "ZAP"; + public static final String AC_ZAP = Game.getVar(R.string.Wand_ACZap); - private static final String TXT_WOOD = "This thin %s wand is warm to the touch. Who knows what it will do when used?"; - private static final String TXT_DAMAGE = "When this wand is used as a melee weapon, its average damage is %d points per hit."; - private static final String TXT_WEAPON = "You can use this wand as a melee weapon."; + private static final String TXT_WOOD = Game.getVar(R.string.Wand_Wood); + private static final String TXT_DAMAGE = Game.getVar(R.string.Wand_Damage); + private static final String TXT_WEAPON = Game.getVar(R.string.Wand_Weapon); - private static final String TXT_FIZZLES = "your wand fizzles; it must be out of charges for now"; - private static final String TXT_SELF_TARGET = "You can't target yourself"; + private static final String TXT_FIZZLES = Game.getVar(R.string.Wand_Fizzles); + private static final String TXT_SELF_TARGET = Game.getVar(R.string.Wand_SelfTarget); - private static final String TXT_IDENTIFY = "You are now familiar enough with your %s."; + private static final String TXT_IDENTIFY = Game.getVar(R.string.Wand_Identify); private static final float TIME_TO_ZAP = 1f; @@ -82,13 +84,12 @@ public abstract class Wand extends KindOfWeapon { WandOfBlink.class, WandOfLightning.class, WandOfAmok.class, - WandOfTelekinesis.class, + WandOfReach.class, WandOfFlock.class, WandOfDisintegration.class, WandOfAvalanche.class }; - private static final String[] woods = - {"holly", "yew", "ebony", "cherry", "teak", "rowan", "willow", "mahogany", "bamboo", "purpleheart", "oak", "birch"}; + private static final String[] woods = Game.getVars(R.array.Wand_Woods); private static final Integer[] images = { ItemSpriteSheet.WAND_HOLLY, ItemSpriteSheet.WAND_YEW, @@ -127,9 +128,7 @@ public static void restore( Bundle bundle ) { public Wand() { super(); - - calculateDamage(); - + try { image = handler.image( this ); wood = handler.label( this ); @@ -209,12 +208,13 @@ public void stopCharging() { } } - public int level() { + public int power() { + int eLevel = effectiveLevel(); if (charger != null) { Power power = charger.target.buff( Power.class ); - return power == null ? level : Math.max( level + power.level, 0 ); + return power == null ? eLevel : Math.max( eLevel + power.level, 0 ); } else { - return level; + return eLevel; } } @@ -252,12 +252,16 @@ public String toString() { sb.append( " (" + status + ")" ); } + if (isBroken()) { + sb.insert( 0, "broken " ); + } + return sb.toString(); } @Override public String name() { - return isKnown() ? name : wood + " wand"; + return isKnown() ? name : String.format(Game.getVar(R.string.Wand_Name), wood); } @Override @@ -266,7 +270,8 @@ public String info() { if (Dungeon.hero.heroClass == HeroClass.MAGE) { info.append( "\n\n" ); if (levelKnown) { - info.append( String.format( TXT_DAMAGE, MIN + (MAX - MIN) / 2 ) ); + int min = min(); + info.append( String.format( TXT_DAMAGE, min + (max() - min) / 2 ) ); } else { info.append( String.format( TXT_WEAPON ) ); } @@ -312,24 +317,29 @@ public Item degrade() { @Override public int maxDurability( int lvl ) { - return 5 * (lvl < 16 ? 16 - lvl : 1); + return 6 * (lvl < 16 ? 16 - lvl : 1); } protected void updateLevel() { - maxCharges = Math.min( initialCharges() + level, 9 ); + maxCharges = Math.min( initialCharges() + level(), 9 ); curCharges = Math.min( curCharges, maxCharges ); - - calculateDamage(); } protected int initialCharges() { return 2; } - private void calculateDamage() { + @Override + public int min() { + int tier = 1 + effectiveLevel() / 3; + return tier; + } + + @Override + public int max() { + int level = effectiveLevel(); int tier = 1 + level / 3; - MIN = tier; - MAX = (tier * tier - tier + 10) / 2 + level; + return (tier * tier - tier + 10) / 2 + level; } protected void fx( int cell, Callback callback ) { @@ -370,21 +380,7 @@ public static boolean allKnown() { @Override public int price() { - int price = 50; - if (cursed && cursedKnown) { - price /= 2; - } - if (levelKnown) { - if (level > 0) { - price *= (level + 1); - } else if (level < 0) { - price /= (1 - level); - } - } - if (price < 1) { - price = 1; - } - return price; + return considerState( 50 ); } private static final String UNFAMILIRIARITY = "unfamiliarity"; @@ -461,7 +457,7 @@ public void call() { @Override public String prompt() { - return "Choose direction to zap"; + return Game.getVar(R.string.Wand_Prompt); } }; @@ -492,7 +488,7 @@ public boolean act() { protected void delay() { float time2charge = ((Hero)target).heroClass == HeroClass.MAGE ? - TIME_TO_CHARGE / (float)Math.sqrt( 1 + level ) : + TIME_TO_CHARGE / (float)Math.sqrt( 1 + effectiveLevel() ) : TIME_TO_CHARGE; spend( time2charge ); } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfAmok.java b/src/com/watabou/pixeldungeon/items/wands/WandOfAmok.java index fbbcdd85cf..55d9cccac9 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfAmok.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfAmok.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.items.wands; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; @@ -30,26 +32,21 @@ import com.watabou.utils.Callback; public class WandOfAmok extends Wand { - { - name = "Wand of Amok"; + name = Game.getVar(R.string.WandOfAmok_Name); } @Override protected void onZap( int cell ) { Char ch = Actor.findChar( cell ); if (ch != null) { - if (ch == Dungeon.hero) { Buff.affect( ch, Vertigo.class, Vertigo.duration( ch ) ); } else { - Buff.affect( ch, Amok.class, 3f + level() ); + Buff.affect( ch, Amok.class, 3f + power() ); } - } else { - - GLog.i( "nothing happened" ); - + GLog.i(Game.getVar(R.string.WandOfAmok_Info1)); } } @@ -60,8 +57,6 @@ protected void fx( int cell, Callback callback ) { @Override public String desc() { - return - "The purple light from this wand will make the target run amok " + - "attacking random creatures in its vicinity."; + return Game.getVar(R.string.WandOfAmok_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfAvalanche.java b/src/com/watabou/pixeldungeon/items/wands/WandOfAvalanche.java index 1caf87638f..9b3b367df2 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfAvalanche.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfAvalanche.java @@ -18,19 +18,23 @@ package com.watabou.pixeldungeon.items.wands; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Paralysis; +import com.watabou.pixeldungeon.actors.mobs.Mob; import com.watabou.pixeldungeon.effects.CellEmitter; import com.watabou.pixeldungeon.effects.MagicMissile; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.levels.Level; import com.watabou.pixeldungeon.mechanics.Ballistica; +import com.watabou.pixeldungeon.scenes.GameScene; import com.watabou.pixeldungeon.utils.BArray; import com.watabou.pixeldungeon.utils.GLog; import com.watabou.pixeldungeon.utils.Utils; @@ -39,62 +43,78 @@ import com.watabou.utils.Random; public class WandOfAvalanche extends Wand { - { - name = "Wand of Avalanche"; + name = Game.getVar(R.string.WandOfAvalanche_Name); hitChars = false; } - + @Override protected void onZap( int cell ) { - + Sample.INSTANCE.play( Assets.SND_ROCKS ); - - int level = level(); - + + int level = power(); + Ballistica.distance = Math.min( Ballistica.distance, 8 + level ); - + int size = 1 + level / 3; PathFinder.buildDistanceMap( cell, BArray.not( Level.solid, null ), size ); - + + int shake = 0; for (int i=0; i < Level.LENGTH; i++) { - + int d = PathFinder.distance[i]; - + if (d < Integer.MAX_VALUE) { - - Char ch = Actor.findChar( i ); + + Char ch = Actor.findChar( i ); if (ch != null) { - + ch.sprite.flash(); - ch.damage( Random.Int( 2, 6 + (size - d) * 2 ), this ); - + if (ch.isAlive() && Random.Int( 2 + d ) == 0) { Buff.prolong( ch, Paralysis.class, Random.IntRange( 2, 6 ) ); } } - CellEmitter.get( i ).start( Speck.factory( Speck.ROCK ), 0.07f, 3 + (size - d) ); - Camera.main.shake( 3, 0.07f * (3 + (size - d)) ); + if (ch != null && ch.isAlive()) { + if (ch instanceof Mob) { + Dungeon.level.mobPress( (Mob)ch ); + } else { + Dungeon.level.press( i, ch ); + } + } else { + Dungeon.level.press( i, null ); + } + + if (Dungeon.visible[i]) { + CellEmitter.get(i).start(Speck.factory(Speck.ROCK), 0.07f, 3 + (size - d)); + if (Level.water[i]) { + GameScene.ripple( i ); + } + if (shake < size - d) { + shake = size - d; + } + } } + + Camera.main.shake( 3, 0.07f * (3 + shake) ); } - + if (!curUser.isAlive()) { Dungeon.fail( Utils.format( ResultDescriptions.WAND, name, Dungeon.depth ) ); - GLog.n( "You killed yourself with your own Wand of Avalanche..." ); + GLog.n(Game.getVar(R.string.WandOfAvalanche_Info1)); } } - + protected void fx( int cell, Callback callback ) { MagicMissile.earth( curUser.sprite.parent, curUser.pos, cell, callback ); Sample.INSTANCE.play( Assets.SND_ZAP ); } - + @Override public String desc() { - return - "When a discharge of this wand hits a wall (or any other solid obstacle) it causes " + - "an avalanche of stones, damaging and stunning all creatures in the affected area."; + return Game.getVar(R.string.WandOfAvalanche_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfBlink.java b/src/com/watabou/pixeldungeon/items/wands/WandOfBlink.java index c6304b4ec6..f706460c24 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfBlink.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfBlink.java @@ -17,10 +17,12 @@ */ package com.watabou.pixeldungeon.items.wands; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.noosa.tweeners.AlphaTweener; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.effects.MagicMissile; @@ -29,15 +31,14 @@ import com.watabou.utils.Callback; public class WandOfBlink extends Wand { - { - name = "Wand of Blink"; + name = Game.getVar(R.string.WandOfBlink_Name); } @Override protected void onZap( int cell ) { - int level = level(); + int level = power(); if (Ballistica.distance > level + 4) { cell = Ballistica.trace[level + 3]; @@ -75,8 +76,6 @@ public static void appear( Char ch, int pos ) { @Override public String desc() { - return - "This wand will allow you to teleport in the chosen direction. " + - "Creatures and inanimate obstructions will block the teleportation."; + return Game.getVar(R.string.WandOfBlink_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfDisintegration.java b/src/com/watabou/pixeldungeon/items/wands/WandOfDisintegration.java index 795b53e837..63a0e928e7 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfDisintegration.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfDisintegration.java @@ -19,8 +19,10 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.DungeonTilemap; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.effects.CellEmitter; @@ -34,9 +36,8 @@ import com.watabou.utils.Random; public class WandOfDisintegration extends Wand { - { - name = "Wand of Disintegration"; + name = Game.getVar(R.string.WandOfDisintegration_Name); hitChars = false; } @@ -45,7 +46,7 @@ protected void onZap( int cell ) { boolean terrainAffected = false; - int level = level(); + int level = power(); int maxDistance = distance(); Ballistica.distance = Math.min( Ballistica.distance, maxDistance ); @@ -62,9 +63,9 @@ protected void onZap( int cell ) { } int terr = Dungeon.level.map[c]; - if (terr == Terrain.DOOR || terr == Terrain.BARRICADE) { + if (terr == Terrain.DOOR || terr == Terrain.SIGN) { - Level.set( c, Terrain.EMBERS ); + Dungeon.level.destroy( c ); GameScene.updateMap( c ); terrainAffected = true; @@ -99,7 +100,6 @@ private int distance() { @Override protected void fx( int cell, Callback callback ) { - cell = Ballistica.trace[Math.min( Ballistica.distance, distance() ) - 1]; curUser.sprite.parent.add( new DeathRay( curUser.sprite.center(), DungeonTilemap.tileCenterToWorld( cell ) ) ); callback.call(); @@ -107,8 +107,6 @@ protected void fx( int cell, Callback callback ) { @Override public String desc() { - return - "This wand emits a beam of destructive energy, which pierces all creatures in its way. " + - "The more targets it hits, the more damage it inflicts to each of them."; + return Game.getVar(R.string.WandOfDisintegration_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfFirebolt.java b/src/com/watabou/pixeldungeon/items/wands/WandOfFirebolt.java index 7b26abd095..ba3714c7c0 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfFirebolt.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfFirebolt.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.wands; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; @@ -38,15 +40,14 @@ import com.watabou.utils.Random; public class WandOfFirebolt extends Wand { - { - name = "Wand of Firebolt"; + name = Game.getVar(R.string.WandOfFirebolt_Name); } @Override protected void onZap( int cell ) { - int level = level(); + int level = power(); for (int i=1; i < Ballistica.distance - 1; i++) { int c = Ballistica.trace[i]; @@ -67,7 +68,7 @@ protected void onZap( int cell ) { if (ch == curUser && !ch.isAlive()) { Dungeon.fail( Utils.format( ResultDescriptions.WAND, name, Dungeon.depth ) ); - GLog.n( "You killed yourself with your own Wand of Firebolt..." ); + GLog.n(Game.getVar(R.string.WandOfFirebolt_Info1)); } } } @@ -79,8 +80,6 @@ protected void fx( int cell, Callback callback ) { @Override public String desc() { - return - "This wand unleashes bursts of magical fire. It will ignite " + - "flammable terrain, and will damage and burn a creature it hits."; + return Game.getVar(R.string.WandOfFirebolt_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfFlock.java b/src/com/watabou/pixeldungeon/items/wands/WandOfFlock.java index f7747b22a7..36ea599cf4 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfFlock.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfFlock.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.wands; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.mobs.npcs.NPC; @@ -36,15 +38,14 @@ import com.watabou.utils.Random; public class WandOfFlock extends Wand { - { - name = "Wand of Flock"; + name = Game.getVar(R.string.WandOfFlock_Name); } @Override protected void onZap( int cell ) { - int level = level(); + int level = power(); int n = level + 2; @@ -97,19 +98,17 @@ protected void fx( int cell, Callback callback ) { MagicMissile.wool( curUser.sprite.parent, curUser.pos, cell, callback ); Sample.INSTANCE.play( Assets.SND_ZAP ); } - + @Override public String desc() { - return - "A flick of this wand summons a flock of magic sheep, creating temporary impenetrable obstacle."; + return Game.getVar(R.string.WandOfFlock_Info); } - + public static class Sheep extends NPC { - - private static final String[] QUOTES = {"Baa!", "Baa?", "Baa.", "Baa..."}; + private static final String[] QUOTES = Game.getVars(R.array.WandOfFlock_SheepBaa); { - name = "sheep"; + name = Game.getVar(R.string.WandOfFlock_SheepName); spriteClass = SheepSprite.class; } @@ -138,9 +137,7 @@ public void damage( int dmg, Object src ) { @Override public String description() { - return - "This is a magic sheep. What's so magical about it? You can't kill it. " + - "It will stand there until it magcially fades away, all the while chewing cud with a blank stare."; + return Game.getVar(R.string.WandOfFlock_SheepInfo); } @Override diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfLightning.java b/src/com/watabou/pixeldungeon/items/wands/WandOfLightning.java index 2381d4c141..6c62788dd0 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfLightning.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfLightning.java @@ -21,7 +21,9 @@ import java.util.HashSet; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; @@ -36,9 +38,8 @@ import com.watabou.utils.Random; public class WandOfLightning extends Wand { - { - name = "Wand of Lightning"; + name = Game.getVar(R.string.WandOfLightning_Name); } private ArrayList affected = new ArrayList(); @@ -51,7 +52,7 @@ protected void onZap( int cell ) { // Everything is processed in fx() method if (!curUser.isAlive()) { Dungeon.fail( Utils.format( ResultDescriptions.WAND, name, Dungeon.depth ) ); - GLog.n( "You killed yourself with your own Wand of Lightning..." ); + GLog.n(Game.getVar(R.string.WandOfLightning_Info1)); } } @@ -96,7 +97,7 @@ protected void fx( int cell, Callback callback ) { if (ch != null) { affected.clear(); - int lvl = level(); + int lvl = power(); hit( ch, Random.Int( 5 + lvl / 2, 10 + lvl ) ); } else { @@ -110,8 +111,6 @@ protected void fx( int cell, Callback callback ) { @Override public String desc() { - return - "This wand conjures forth deadly arcs of electricity, which deal damage " + - "to several creatures standing close to each other."; + return Game.getVar(R.string.WandOfLightning_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfMagicMissile.java b/src/com/watabou/pixeldungeon/items/wands/WandOfMagicMissile.java index a063b36fa8..b6a54202c0 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfMagicMissile.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfMagicMissile.java @@ -19,10 +19,12 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; @@ -38,26 +40,25 @@ public class WandOfMagicMissile extends Wand { - public static final String AC_DISENCHANT = "DISENCHANT"; + public static final String AC_DISENCHANT = Game.getVar(R.string.WandOfMagicMissile_ACDisenchant); - private static final String TXT_SELECT_WAND = "Select a wand to upgrade"; + private static final String TXT_SELECT_WAND = Game.getVar(R.string.WandOfMagicMissile_SelectWand); - private static final String TXT_DISENCHANTED = - "you disenchanted the Wand of Magic Missile and used its essence to upgrade your %s"; + private static final String TXT_DISENCHANTED = Game.getVar(R.string.WandOfMagicMissile_Desinchanted); private static final float TIME_TO_DISENCHANT = 2f; private boolean disenchantEquipped; { - name = "Wand of Magic Missile"; + name = Game.getVar(R.string.WandOfMagicMissile_Name); image = ItemSpriteSheet.WAND_MAGIC_MISSILE; } @Override public ArrayList actions( Hero hero ) { ArrayList actions = super.actions( hero ); - if (level > 0) { + if (level() > 0) { actions.add( AC_DISENCHANT ); } return actions; @@ -69,14 +70,14 @@ protected void onZap( int cell ) { Char ch = Actor.findChar( cell ); if (ch != null) { - int level = level(); + int level = power(); ch.damage( Random.Int( 1, 6 + level * 2 ), this ); ch.sprite.burst( 0xFF99CCFF, level / 2 + 2 ); if (ch == curUser && !ch.isAlive()) { Dungeon.fail( Utils.format( ResultDescriptions.WAND, name, Dungeon.depth ) ); - GLog.n( "You killed yourself with your own Wand of Magic Missile..." ); + GLog.n(Game.getVar(R.string.WandOfMagicMissile_Info1)); } } } @@ -119,8 +120,7 @@ protected int initialCharges() { @Override public String desc() { - return - "This wand launches missiles of pure magical energy, dealing moderate damage to a target creature."; + return Game.getVar(R.string.WandOfMagicMissile_Info); } private final WndBag.Listener itemSelector = new WndBag.Listener() { diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfPoison.java b/src/com/watabou/pixeldungeon/items/wands/WandOfPoison.java index 4db9d9422f..2a5adc91c0 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfPoison.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfPoison.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.items.wands; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -28,9 +30,8 @@ import com.watabou.utils.Callback; public class WandOfPoison extends Wand { - { - name = "Wand of Poison"; + name = Game.getVar(R.string.WandOfPoison_Name); } @Override @@ -38,12 +39,10 @@ protected void onZap( int cell ) { Char ch = Actor.findChar( cell ); if (ch != null) { - Buff.affect( ch, Poison.class ).set( Poison.durationFactor( ch ) * (5 + level()) ); + Buff.affect( ch, Poison.class ).set( Poison.durationFactor( ch ) * (5 + power()) ); } else { - - GLog.i( "nothing happened" ); - + GLog.i(Game.getVar(R.string.WandOfPoison_Info1)); } } @@ -54,10 +53,6 @@ protected void fx( int cell, Callback callback ) { @Override public String desc() { - return - "The vile blast of this twisted bit of wood will imbue its target " + - "with a deadly venom. A creature that is poisoned will suffer periodic " + - "damage until the effect ends. The duration of the effect increases " + - "with the level of the staff."; + return Game.getVar(R.string.WandOfPoison_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfTelekinesis.java b/src/com/watabou/pixeldungeon/items/wands/WandOfReach.java similarity index 66% rename from src/com/watabou/pixeldungeon/items/wands/WandOfTelekinesis.java rename to src/com/watabou/pixeldungeon/items/wands/WandOfReach.java index 2b6e70742c..96467149f6 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfTelekinesis.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfReach.java @@ -17,14 +17,15 @@ */ package com.watabou.pixeldungeon.items.wands; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; -import com.watabou.pixeldungeon.actors.mobs.Mob; import com.watabou.pixeldungeon.effects.MagicMissile; -import com.watabou.pixeldungeon.effects.Pushing; +import com.watabou.pixeldungeon.effects.Swap; import com.watabou.pixeldungeon.items.Dewdrop; import com.watabou.pixeldungeon.items.Heap; import com.watabou.pixeldungeon.items.Item; @@ -41,91 +42,59 @@ import com.watabou.pixeldungeon.utils.GLog; import com.watabou.utils.Callback; -public class WandOfTelekinesis extends Wand { +public class WandOfReach extends Wand { - private static final String TXT_YOU_NOW_HAVE = "You have magically transported %s into your backpack"; - + private static final String TXT_YOU_NOW_HAVE = Game.getVar(R.string.WandOfReach_YouNowHave); { - name = "Wand of Telekinesis"; + name = Game.getVar(R.string.WandOfReach_Name); hitChars = false; } @Override protected void onZap( int cell ) { - boolean mapUpdated = false; - - int maxDistance = level() + 4; - Ballistica.distance = Math.min( Ballistica.distance, maxDistance ); - - Char ch; - Heap heap = null; + int reach = Math.min( Ballistica.distance, power() + 4 ); - for (int i=1; i < Ballistica.distance; i++) { + boolean mapUpdated = false; + for (int i=1; i < reach; i++) { int c = Ballistica.trace[i]; int before = Dungeon.level.map[c]; - if ((ch = Actor.findChar( c )) != null) { - - if (i == Ballistica.distance-1) { - - ch.damage( maxDistance-1 - i, this ); - - } else { - - int next = Ballistica.trace[i + 1]; - if ((Level.passable[next] || Level.avoid[next]) && Actor.findChar( next ) == null) { - - Actor.addDelayed( new Pushing( ch, ch.pos, next ), -1 ); - - ch.pos = next; - Actor.freeCell( next ); - - // FIXME - if (ch instanceof Mob) { - Dungeon.level.mobPress( (Mob)ch ); - } else { - Dungeon.level.press( ch.pos, ch ); - } - - } else { - - ch.damage( maxDistance-1 - i, this ); - - } - } + Char ch = Actor.findChar( c ); + if (ch != null) { + Actor.addDelayed( new Swap( curUser, ch ), -1 ); + break; } - if (heap == null && (heap = Dungeon.level.heaps.get( c )) != null) { + Heap heap = Dungeon.level.heaps.get( c ); + if (heap != null) { switch (heap.type) { case HEAP: transport( heap ); break; case CHEST: case MIMIC: + case TOMB: + case SKELETON: heap.open( curUser ); break; default: } + + break; } Dungeon.level.press( c, null ); - if (before == Terrain.OPEN_DOOR && Actor.findChar( c ) == null) { - + if (before == Terrain.OPEN_DOOR) { Level.set( c, Terrain.DOOR ); GameScene.updateMap( c ); - } else if (Level.water[c]) { - GameScene.ripple( c ); - } - if (!mapUpdated && Dungeon.level.map[c] != before) { - mapUpdated = true; - } + mapUpdated = mapUpdated || Dungeon.level.map[c] != before; } if (mapUpdated) { @@ -160,8 +129,6 @@ protected void fx( int cell, Callback callback ) { @Override public String desc() { - return - "Waves of magic force from this wand will affect all cells on their way triggering traps, trampling high vegetation, " + - "opening closed doors and closing open ones. They also push back monsters."; + return Game.getVar(R.string.WandOfReach_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfRegrowth.java b/src/com/watabou/pixeldungeon/items/wands/WandOfRegrowth.java index 15f182a048..3f4b58a6e2 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfRegrowth.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfRegrowth.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.wands; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.blobs.Blob; import com.watabou.pixeldungeon.actors.blobs.Regrowth; import com.watabou.pixeldungeon.effects.MagicMissile; @@ -31,9 +33,8 @@ import com.watabou.utils.Callback; public class WandOfRegrowth extends Wand { - { - name = "Wand of Regrowth"; + name = Game.getVar(R.string.WandOfRegrowth_Name); } @Override @@ -47,6 +48,10 @@ protected void onZap( int cell ) { c == Terrain.EMPTY_DECO) { Level.set( p, Terrain.GRASS ); + GameScene.updateMap( p ); + if (Dungeon.visible[p]) { + GameScene.discoverTile( p, c ); + } } } @@ -58,12 +63,10 @@ protected void onZap( int cell ) { c == Terrain.GRASS || c == Terrain.HIGH_GRASS) { - GameScene.add( Blob.seed( cell, (level() + 2) * 20, Regrowth.class ) ); + GameScene.add( Blob.seed( cell, (power() + 2) * 20, Regrowth.class ) ); } else { - - GLog.i( "nothing happened" ); - + GLog.i(Game.getVar(R.string.WandOfRegrowth_Info1)); } } @@ -74,7 +77,6 @@ protected void fx( int cell, Callback callback ) { @Override public String desc() { - return - "\"When life ceases new life always begins to grow... The eternal cycle always remains!\""; + return Game.getVar(R.string.WandOfRegrowth_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfSlowness.java b/src/com/watabou/pixeldungeon/items/wands/WandOfSlowness.java index 49b19d6ca5..34ee414180 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfSlowness.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfSlowness.java @@ -17,8 +17,10 @@ */ package com.watabou.pixeldungeon.items.wands; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -28,9 +30,8 @@ import com.watabou.utils.Callback; public class WandOfSlowness extends Wand { - { - name = "Wand of Slowness"; + name = Game.getVar(R.string.WandOfSlowness_Name); } @Override @@ -38,12 +39,10 @@ protected void onZap( int cell ) { Char ch = Actor.findChar( cell ); if (ch != null) { - Buff.affect( ch, Slow.class, Slow.duration( ch ) / 3 + level() ); + Buff.affect( ch, Slow.class, Slow.duration( ch ) / 3 + power() ); } else { - - GLog.i( "nothing happened" ); - + GLog.i(Game.getVar(R.string.WandOfSlowness_Info1)); } } @@ -54,8 +53,6 @@ protected void fx( int cell, Callback callback ) { @Override public String desc() { - return - "This wand will cause a creature to move and attack " + - "at half its ordinary speed until the effect ends"; + return Game.getVar(R.string.WandOfSlowness_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/wands/WandOfTeleportation.java b/src/com/watabou/pixeldungeon/items/wands/WandOfTeleportation.java index 186a7bda34..5ff5c0fcdf 100644 --- a/src/com/watabou/pixeldungeon/items/wands/WandOfTeleportation.java +++ b/src/com/watabou/pixeldungeon/items/wands/WandOfTeleportation.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.items.wands; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.effects.MagicMissile; @@ -28,9 +30,8 @@ import com.watabou.utils.Callback; public class WandOfTeleportation extends Wand { - { - name = "Wand of Teleportation"; + name = Game.getVar(R.string.WandOfTeleportation_Name); } @Override @@ -55,22 +56,15 @@ protected void onZap( int cell ) { } while (pos == -1); if (pos == -1) { - GLog.w( ScrollOfTeleportation.TXT_NO_TELEPORT ); - } else { - ch.pos = pos; ch.sprite.place( ch.pos ); ch.sprite.visible = Dungeon.visible[pos]; - GLog.i( curUser.name + " teleported " + ch.name + " to somewhere" ); - + GLog.i(String.format(Game.getVar(R.string.WandOfTeleportation_Info1), curUser.name, ch.name)); } - } else { - - GLog.i( "nothing happened" ); - + GLog.i(Game.getVar(R.string.WandOfTeleportation_Info2)); } } @@ -81,8 +75,6 @@ protected void fx( int cell, Callback callback ) { @Override public String desc() { - return - "A blast from this wand will teleport a creature against " + - "its will to a random place on the current level."; + return Game.getVar(R.string.WandOfTeleportation_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/Weapon.java b/src/com/watabou/pixeldungeon/items/weapon/Weapon.java index 8283e8df42..dc54bb0b7e 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/Weapon.java +++ b/src/com/watabou/pixeldungeon/items/weapon/Weapon.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.weapon; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.hero.HeroClass; @@ -32,15 +34,14 @@ import com.watabou.utils.Bundle; import com.watabou.utils.Random; -public class Weapon extends KindOfWeapon { +abstract public class Weapon extends KindOfWeapon { private static final int HITS_TO_KNOW = 20; - private static final String TXT_IDENTIFY = - "You are now familiar enough with your %s to identify it. It is %s."; - private static final String TXT_INCOMPATIBLE = - "Interaction of different types of magic has negated the enchantment on this weapon!"; - private static final String TXT_TO_STRING = "%s :%d"; + private static final String TXT_IDENTIFY = Game.getVar(R.string.Weapon_Identify); + private static final String TXT_INCOMPATIBLE = Game.getVar(R.string.Weapon_Incompatible); + private static final String TXT_TO_STRING = Game.getVar(R.string.Weapon_ToString); + private static final String TXT_BROKEN = Game.getVar(R.string.Weapon_Broken); public int STR = 10; public float ACU = 1; @@ -147,7 +148,7 @@ public int damageRoll( Hero hero ) { public Item upgrade( boolean enchant ) { if (enchantment != null) { - if (!enchant && Random.Int( level ) > 0) { + if (!enchant && Random.Int( level() ) > 0) { GLog.w( TXT_INCOMPATIBLE ); enchant( null ); } @@ -162,12 +163,12 @@ public Item upgrade( boolean enchant ) { @Override public int maxDurability( int lvl ) { - return 4 * (lvl < 16 ? 16 - lvl : 1); + return 5 * (lvl < 16 ? 16 - lvl : 1); } @Override public String toString() { - return levelKnown ? Utils.format( TXT_TO_STRING, super.toString(), STR ) : super.toString(); + return levelKnown ? Utils.format( isBroken() ? TXT_BROKEN : TXT_TO_STRING, super.toString(), STR ) : super.toString(); } @Override diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Death.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Death.java index 77d3a886aa..dc011082cd 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Death.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Death.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.weapon.enchantments; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.effects.particles.ShadowParticle; @@ -28,7 +30,7 @@ public class Death extends Weapon.Enchantment { - private static final String TXT_GRIM = "Grim %s"; + private static final String TXT_NAME = Game.getVar(R.string.Death_Name); private static ItemSprite.Glowing BLACK = new ItemSprite.Glowing( 0x000000 ); @@ -37,7 +39,7 @@ public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { // lvl 0 - 8% // lvl 1 ~ 9% // lvl 2 ~ 10% - int level = Math.max( 0, weapon.level ); + int level = Math.max( 0, weapon.effectiveLevel() ); if (Random.Int( level + 100 ) >= 92) { @@ -64,7 +66,7 @@ public Glowing glowing() { @Override public String name( String weaponName) { - return String.format( TXT_GRIM, weaponName ); + return String.format( TXT_NAME, weaponName ); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Fire.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Fire.java index b9485985d9..c561721226 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Fire.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Fire.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.enchantments; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Burning; @@ -28,7 +30,7 @@ public class Fire extends Weapon.Enchantment { - private static final String TXT_BLAZING = "Blazing %s"; + private static final String TXT_NAME = Game.getVar(R.string.Fire_Name); private static ItemSprite.Glowing ORANGE = new ItemSprite.Glowing( 0xFF4400 ); @@ -37,7 +39,7 @@ public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { // lvl 0 - 33% // lvl 1 - 50% // lvl 2 - 60% - int level = Math.max( 0, weapon.level ); + int level = Math.max( 0, weapon.effectiveLevel() ); if (Random.Int( level + 3 ) >= 2) { @@ -64,7 +66,7 @@ public Glowing glowing() { @Override public String name( String weaponName ) { - return String.format( TXT_BLAZING, weaponName ); + return String.format( TXT_NAME, weaponName ); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Horror.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Horror.java index 08ec1eeb18..0d638854dd 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Horror.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Horror.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.weapon.enchantments; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Terror; @@ -29,7 +31,7 @@ public class Horror extends Weapon.Enchantment { - private static final String TXT_ELDRITCH = "Eldritch %s"; + private static final String TXT_NAME = Game.getVar(R.string.Horror_Name); private static ItemSprite.Glowing GREY = new ItemSprite.Glowing( 0x222222 ); @@ -38,7 +40,7 @@ public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { // lvl 0 - 20% // lvl 1 - 33% // lvl 2 - 43% - int level = Math.max( 0, weapon.level ); + int level = Math.max( 0, weapon.effectiveLevel() ); if (Random.Int( level + 5 ) >= 4) { @@ -61,7 +63,7 @@ public Glowing glowing() { @Override public String name( String weaponName) { - return String.format( TXT_ELDRITCH, weaponName ); + return String.format( TXT_NAME, weaponName ); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Instability.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Instability.java index 6aba856949..060ef2bec4 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Instability.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Instability.java @@ -17,12 +17,14 @@ */ package com.watabou.pixeldungeon.items.weapon.enchantments; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.items.weapon.Weapon; public class Instability extends Weapon.Enchantment { - private static final String TXT_UNSTABLE = "Unstable %s"; + private static final String TXT_NAME = Game.getVar(R.string.Instability_Name); @Override public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { @@ -31,7 +33,7 @@ public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { @Override public String name( String weaponName) { - return String.format( TXT_UNSTABLE, weaponName ); + return String.format( TXT_NAME, weaponName ); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Leech.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Leech.java index d04936e46e..7c922d6e86 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Leech.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Leech.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.enchantments; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.items.weapon.Weapon; @@ -27,14 +29,14 @@ public class Leech extends Weapon.Enchantment { - private static final String TXT_VAMPIRIC = "Vampiric %s"; + private static final String TXT_NAME = Game.getVar(R.string.Leech_Name); private static ItemSprite.Glowing RED = new ItemSprite.Glowing( 0x660022 ); @Override public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { - int level = Math.max( 0, weapon.level ); + int level = Math.max( 0, weapon.effectiveLevel() ); // lvl 0 - 33% // lvl 1 - 43% @@ -62,7 +64,7 @@ public Glowing glowing() { @Override public String name( String weaponName ) { - return String.format( TXT_VAMPIRIC, weaponName ); + return String.format( TXT_NAME, weaponName ); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Luck.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Luck.java index c8f8423fbb..c358ceb9a5 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Luck.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Luck.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.enchantments; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.items.weapon.Weapon; import com.watabou.pixeldungeon.sprites.ItemSprite; @@ -24,13 +26,13 @@ public class Luck extends Weapon.Enchantment { - private static final String TXT_LUCKY = "Lucky %s"; + private static final String TXT_NAME = Game.getVar(R.string.Luck_Name); private static ItemSprite.Glowing GREEN = new ItemSprite.Glowing( 0x00FF00 ); @Override public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { - int level = Math.max( 0, weapon.level ); + int level = Math.max( 0, weapon.effectiveLevel() ); int dmg = damage; for (int i=1; i <= level+1; i++) { @@ -47,7 +49,7 @@ public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { @Override public String name( String weaponName) { - return String.format( TXT_LUCKY, weaponName ); + return String.format( TXT_NAME, weaponName ); } @Override diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Paralysis.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Paralysis.java index 85b424fc91..deb528a6df 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Paralysis.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Paralysis.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.enchantments; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.items.weapon.Weapon; @@ -26,7 +28,7 @@ public class Paralysis extends Weapon.Enchantment { - private static final String TXT_STUNNING = "Stunning %s"; + private static final String TXT_NAME = Game.getVar(R.string.Paralysis_Name); private static ItemSprite.Glowing YELLOW = new ItemSprite.Glowing( 0xCCAA44 ); @@ -35,7 +37,7 @@ public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { // lvl 0 - 13% // lvl 1 - 22% // lvl 2 - 30% - int level = Math.max( 0, weapon.level ); + int level = Math.max( 0, weapon.effectiveLevel() ); if (Random.Int( level + 8 ) >= 7) { @@ -55,7 +57,7 @@ public Glowing glowing() { @Override public String name( String weaponName) { - return String.format( TXT_STUNNING, weaponName ); + return String.format( TXT_NAME, weaponName ); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Poison.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Poison.java index e44ceee91e..0e8c27dc27 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Poison.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Poison.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.enchantments; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.items.weapon.Weapon; @@ -26,7 +28,7 @@ public class Poison extends Weapon.Enchantment { - private static final String TXT_VENOMOUS = "Venomous %s"; + private static final String TXT_NAME = Game.getVar(R.string.Poison_Name); private static ItemSprite.Glowing PURPLE = new ItemSprite.Glowing( 0x4400AA ); @@ -35,7 +37,7 @@ public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { // lvl 0 - 33% // lvl 1 - 50% // lvl 2 - 60% - int level = Math.max( 0, weapon.level ); + int level = Math.max( 0, weapon.effectiveLevel() ); if (Random.Int( level + 3 ) >= 2) { @@ -55,7 +57,7 @@ public Glowing glowing() { @Override public String name( String weaponName) { - return String.format( TXT_VENOMOUS, weaponName ); + return String.format( TXT_NAME, weaponName ); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Shock.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Shock.java index 4b75ac99ca..636b292068 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Shock.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Shock.java @@ -20,6 +20,8 @@ import java.util.ArrayList; import java.util.HashSet; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.effects.Lightning; @@ -31,14 +33,14 @@ public class Shock extends Weapon.Enchantment { - private static final String TXT_SHOCKING = "Shocking %s"; + private static final String TXT_SHOCKING = Game.getVar(R.string.Shock_Name); @Override public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { // lvl 0 - 25% // lvl 1 - 40% // lvl 2 - 50% - int level = Math.max( 0, weapon.level ); + int level = Math.max( 0, weapon.effectiveLevel() ); if (Random.Int( level + 4 ) >= 3) { diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Slow.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Slow.java index 8cc916f3e9..67872ad8ad 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Slow.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Slow.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.enchantments; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.items.weapon.Weapon; @@ -26,7 +28,7 @@ public class Slow extends Weapon.Enchantment { - private static final String TXT_CHILLING = "Chilling %s"; + private static final String TXT_NAME = Game.getVar(R.string.Slow_Name); private static ItemSprite.Glowing BLUE = new ItemSprite.Glowing( 0x0044FF ); @@ -35,7 +37,7 @@ public boolean proc( Weapon weapon, Char attacker, Char defender, int damage ) { // lvl 0 - 25% // lvl 1 - 40% // lvl 2 - 50% - int level = Math.max( 0, weapon.level ); + int level = Math.max( 0, weapon.effectiveLevel() ); if (Random.Int( level + 4 ) >= 3) { @@ -55,7 +57,7 @@ public Glowing glowing() { @Override public String name( String weaponName) { - return String.format( TXT_CHILLING, weaponName ); + return String.format( TXT_NAME, weaponName ); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Tempering.java b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Tempering.java index 8c464375ea..fa9ac095d2 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/enchantments/Tempering.java +++ b/src/com/watabou/pixeldungeon/items/weapon/enchantments/Tempering.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.enchantments; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.items.weapon.Weapon; import com.watabou.pixeldungeon.sprites.ItemSprite; @@ -24,7 +26,7 @@ public class Tempering extends Weapon.Enchantment { - private static final String TXT_TEMPERED = "Tempered %s"; + private static final String TXT_TEMPERED = Game.getVar(R.string.Tempering_Name); private static ItemSprite.Glowing GRAY = new ItemSprite.Glowing( 0xCC8888 ); diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/BattleAxe.java b/src/com/watabou/pixeldungeon/items/weapon/melee/BattleAxe.java index e008760cc6..aca7b8dccc 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/BattleAxe.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/BattleAxe.java @@ -17,12 +17,13 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class BattleAxe extends MeleeWeapon { - { - name = "battle axe"; + name = Game.getVar(R.string.BattleAxe_Name); image = ItemSpriteSheet.BATTLE_AXE; } @@ -32,6 +33,6 @@ public BattleAxe() { @Override public String desc() { - return "The enormous steel head of this battle axe puts considerable heft behind each stroke."; + return Game.getVar(R.string.BattleAxe_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/Dagger.java b/src/com/watabou/pixeldungeon/items/weapon/melee/Dagger.java index 1916bf0e78..94d9e795de 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/Dagger.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/Dagger.java @@ -17,12 +17,13 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class Dagger extends MeleeWeapon { - { - name = "dagger"; + name = Game.getVar(R.string.Dagger_Name); image = ItemSpriteSheet.DAGGER; } @@ -32,6 +33,6 @@ public Dagger() { @Override public String desc() { - return "A simple iron dagger with a well worn wooden handle."; + return Game.getVar(R.string.Dagger_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/Glaive.java b/src/com/watabou/pixeldungeon/items/weapon/melee/Glaive.java index 59923f7077..5bdd09676e 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/Glaive.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/Glaive.java @@ -17,12 +17,13 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class Glaive extends MeleeWeapon { - { - name = "glaive"; + name = Game.getVar(R.string.Glaive_Name); image = ItemSpriteSheet.GLAIVE; } @@ -32,6 +33,6 @@ public Glaive() { @Override public String desc() { - return "A polearm consisting of a sword blade on the end of a pole."; + return Game.getVar(R.string.Glaive_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/Knuckles.java b/src/com/watabou/pixeldungeon/items/weapon/melee/Knuckles.java index e2d9847cd5..6ca3f4f7c3 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/Knuckles.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/Knuckles.java @@ -17,12 +17,13 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class Knuckles extends MeleeWeapon { - { - name = "knuckleduster"; + name = Game.getVar(R.string.Knuckles_Name); image = ItemSpriteSheet.KNUCKLEDUSTER; } @@ -32,6 +33,6 @@ public Knuckles() { @Override public String desc() { - return "A piece of iron shaped to fit around the knuckles."; + return Game.getVar(R.string.Knuckles_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/Longsword.java b/src/com/watabou/pixeldungeon/items/weapon/melee/Longsword.java index 26f5ec1571..4de3f1c7e1 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/Longsword.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/Longsword.java @@ -17,12 +17,13 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class Longsword extends MeleeWeapon { - { - name = "longsword"; + name = Game.getVar(R.string.Longsword_Name); image = ItemSpriteSheet.LONG_SWORD; } @@ -32,6 +33,6 @@ public Longsword() { @Override public String desc() { - return "This towering blade inflicts heavy damage by investing its heft into every cut."; + return Game.getVar(R.string.Longsword_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/Mace.java b/src/com/watabou/pixeldungeon/items/weapon/melee/Mace.java index ee4c245137..ba50365aca 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/Mace.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/Mace.java @@ -17,12 +17,13 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class Mace extends MeleeWeapon { - { - name = "mace"; + name = Game.getVar(R.string.Mace_Name); image = ItemSpriteSheet.MACE; } @@ -32,6 +33,6 @@ public Mace() { @Override public String desc() { - return "The iron head of this weapon inflicts substantial damage."; + return Game.getVar(R.string.Mace_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/MeleeWeapon.java b/src/com/watabou/pixeldungeon/items/weapon/melee/MeleeWeapon.java index a28066ccee..3d48a1acf6 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/MeleeWeapon.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/MeleeWeapon.java @@ -17,10 +17,11 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.items.weapon.Weapon; -import com.watabou.pixeldungeon.utils.Utils; import com.watabou.utils.Random; public class MeleeWeapon extends Weapon { @@ -36,19 +37,26 @@ public MeleeWeapon( int tier, float acu, float dly ) { DLY = dly; STR = typicalSTR(); - - MIN = min(); - MAX = max(); } - private int min() { + protected int min0() { return tier; } - private int max() { + protected int max0() { return (int)((tier * tier - tier + 10) / ACU * DLY); } + @Override + public int min() { + return isBroken() ? min0() : min0() + level(); + } + + @Override + public int max() { + return isBroken() ? max0() : max0() + level() * tier; + } + @Override final public Item upgrade() { return upgrade( false ); @@ -56,9 +64,6 @@ final public Item upgrade() { public Item upgrade( boolean enchant ) { STR--; - MIN++; - MAX += tier; - return super.upgrade( enchant ); } @@ -69,8 +74,6 @@ public Item safeUpgrade() { @Override public Item degrade() { STR++; - MIN--; - MAX -= tier; return super.degrade(); } @@ -80,78 +83,86 @@ public int typicalSTR() { @Override public String info() { - final String p = "\n\n"; StringBuilder info = new StringBuilder( desc() ); - - String quality = levelKnown && level != 0 ? (level > 0 ? "upgraded" : "degraded") : ""; - info.append( p ); - info.append( "This " + name + " is " + Utils.indefinite( quality ) ); - info.append( " tier-" + tier + " melee weapon. " ); + + String typical = Game.getVar(R.string.MeleeWeapon_Info1b); + String upgraded = Game.getVar(R.string.MeleeWeapon_Info1c); + String degraded = Game.getVar(R.string.MeleeWeapon_Info1d); + String broken = Game.getVar(R.string.MeleeWeapon_Info1e); + int lvl = visiblyUpgraded(); + String quality = lvl != 0 ? (lvl > 0 ? (isBroken() ? broken : upgraded) : degraded) : typical; + info.append(p); + info.append(String.format(Game.getVar(R.string.MeleeWeapon_Info1a), name, quality, tier)); + info.append(" "); if (levelKnown) { - info.append( "Its average damage is " + (MIN + (MAX - MIN) / 2) + " points per hit. " ); + int min = min(); + int max = max(); + info.append(String.format(Game.getVar(R.string.MeleeWeapon_Info2a), (min + (max - min) / 2))); } else { - info.append( - "Its typical average damage is " + (min() + (max() - min()) / 2) + " points per hit " + - "and usually it requires " + typicalSTR() + " points of strength. " ); + int min = min0(); + int max = max0(); + info.append(String.format(Game.getVar(R.string.MeleeWeapon_Info2b), (min + (max - min) / 2), typicalSTR())); if (typicalSTR() > Dungeon.hero.STR()) { - info.append( "Probably this weapon is too heavy for you. " ); + info.append(" "+Game.getVar(R.string.MeleeWeapon_Info2c)); } } - + + quality = ""; + info.append(" "); if (DLY != 1f) { - info.append( "This is a rather " + (DLY < 1f ? "fast" : "slow") ); + quality += (DLY < 1f ? Game.getVar(R.string.MeleeWeapon_Info3b) : Game.getVar(R.string.MeleeWeapon_Info3c)); if (ACU != 1f) { + quality += " "; if ((ACU > 1f) == (DLY < 1f)) { - info.append( " and "); + quality += Game.getVar(R.string.MeleeWeapon_Info3d); } else { - info.append( " but "); + quality += Game.getVar(R.string.MeleeWeapon_Info3e); } - info.append( ACU > 1f ? "accurate" : "inaccurate" ); + quality += " "; + quality += ACU > 1f ? Game.getVar(R.string.MeleeWeapon_Info3f) : Game.getVar(R.string.MeleeWeapon_Info3g); } - info.append( " weapon. "); + info.append(String.format(Game.getVar(R.string.MeleeWeapon_Info3a), quality)); } else if (ACU != 1f) { - info.append( "This is a rather " + (ACU > 1f ? "accurate" : "inaccurate") + " weapon. " ); + quality += ACU > 1f ? Game.getVar(R.string.MeleeWeapon_Info3f) : Game.getVar(R.string.MeleeWeapon_Info3g); + info.append(String.format(Game.getVar(R.string.MeleeWeapon_Info3a), quality)); } + + info.append(" "); switch (imbue) { case SPEED: - info.append( "It was balanced to make it faster. " ); + info.append(Game.getVar(R.string.MeleeWeapon_Info4a)); break; case ACCURACY: - info.append( "It was balanced to make it more accurate. " ); + info.append(Game.getVar(R.string.MeleeWeapon_Info4b)); break; case NONE: } - + + info.append(" "); if (enchantment != null) { - info.append( "It is enchanted." ); + info.append(Game.getVar(R.string.MeleeWeapon_Info5)); } - + if (levelKnown && Dungeon.hero.belongings.backpack.items.contains( this )) { + info.append(p); if (STR > Dungeon.hero.STR()) { - info.append( p ); - info.append( - "Because of your inadequate strength the accuracy and speed " + - "of your attack with this " + name + " is decreased." ); + info.append(String.format(Game.getVar(R.string.MeleeWeapon_Info6a), name)); } if (STR < Dungeon.hero.STR()) { - info.append( p ); - info.append( - "Because of your excess strength the damage " + - "of your attack with this " + name + " is increased." ); + info.append(String.format(Game.getVar(R.string.MeleeWeapon_Info6b), name)); } } if (isEquipped( Dungeon.hero )) { - info.append( p ); - info.append( "You hold the " + name + " at the ready" + - (cursed ? ", and because it is cursed, you are powerless to let go." : ".") ); + info.append(p); + info.append(String.format(Game.getVar(R.string.MeleeWeapon_Info7a), name, (cursed ? Game.getVar(R.string.MeleeWeapon_Info7b) : "")) ); } else { if (cursedKnown && cursed) { - info.append( p ); - info.append( "You can feel a malevolent magic lurking within " + name +"." ); + info.append(p); + info.append(String.format(Game.getVar(R.string.MeleeWeapon_Info7c), name)); } } @@ -164,27 +175,14 @@ public int price() { if (enchantment != null) { price *= 1.5; } - if (cursed && cursedKnown) { - price /= 2; - } - if (levelKnown) { - if (level > 0) { - price *= (level + 1); - } else if (level < 0) { - price /= (1 - level); - } - } - if (price < 1) { - price = 1; - } - return price; + return considerState( price ); } @Override public Item random() { super.random(); - if (Random.Int( 10 + level ) == 0) { + if (Random.Int( 10 + level() ) == 0) { enchant(); } diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/Quarterstaff.java b/src/com/watabou/pixeldungeon/items/weapon/melee/Quarterstaff.java index d0d06fda6b..152e21c7e2 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/Quarterstaff.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/Quarterstaff.java @@ -17,12 +17,13 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class Quarterstaff extends MeleeWeapon { - { - name = "quarterstaff"; + name = Game.getVar(R.string.Quarterstaff_Name); image = ItemSpriteSheet.QUARTERSTAFF; } @@ -32,6 +33,6 @@ public Quarterstaff() { @Override public String desc() { - return "A staff of hardwood, its ends are shod with iron."; + return Game.getVar(R.string.Quarterstaff_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/ShortSword.java b/src/com/watabou/pixeldungeon/items/weapon/melee/ShortSword.java index aaad641994..d1121c81b4 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/ShortSword.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/ShortSword.java @@ -19,9 +19,11 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.items.scrolls.ScrollOfUpgrade; @@ -33,21 +35,17 @@ public class ShortSword extends MeleeWeapon { - public static final String AC_REFORGE = "REFORGE"; + public static final String AC_REFORGE = Game.getVar(R.string.ShortSword_ACReforge); - private static final String TXT_SELECT_WEAPON = "Select a weapon to upgrade"; - - private static final String TXT_REFORGED = - "you reforged the short sword to upgrade your %s"; - private static final String TXT_NOT_BOOMERANG = - "you can't upgrade a boomerang this way"; + private static final String TXT_SELECT_WEAPON = Game.getVar(R.string.ShortSword_Select); + private static final String TXT_REFORGED = Game.getVar(R.string.ShortSword_Reforged); + private static final String TXT_NOT_BOOMERANG = Game.getVar(R.string.ShortSword_NotBoomerang); private static final float TIME_TO_REFORGE = 2f; private boolean equipped; - { - name = "short sword"; + name = Game.getVar(R.string.ShortSword_Name); image = ItemSpriteSheet.SHORT_SWORD; } @@ -55,13 +53,17 @@ public ShortSword() { super( 1, 1f, 1f ); STR = 11; - MAX = 12; + } + + @Override + protected int max0() { + return 12; } @Override public ArrayList actions( Hero hero ) { ArrayList actions = super.actions( hero ); - if (level > 0) { + if (level() > 0) { actions.add( AC_REFORGE ); } return actions; @@ -92,8 +94,7 @@ public void execute( Hero hero, String action ) { @Override public String desc() { - return - "It is indeed quite short, just a few inches longer, than a dagger."; + return Game.getVar(R.string.ShortSword_Info); } private final WndBag.Listener itemSelector = new WndBag.Listener() { diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/Spear.java b/src/com/watabou/pixeldungeon/items/weapon/melee/Spear.java index 4b9a5fc404..64dca045f5 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/Spear.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/Spear.java @@ -17,12 +17,13 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class Spear extends MeleeWeapon { - { - name = "spear"; + name = Game.getVar(R.string.Spear_Name); image = ItemSpriteSheet.SPEAR; } @@ -32,6 +33,6 @@ public Spear() { @Override public String desc() { - return "A slender wooden rod tipped with sharpened iron."; + return Game.getVar(R.string.Spear_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/Sword.java b/src/com/watabou/pixeldungeon/items/weapon/melee/Sword.java index 395c4c895a..71fce13ff4 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/Sword.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/Sword.java @@ -17,12 +17,13 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class Sword extends MeleeWeapon { - { - name = "sword"; + name = Game.getVar(R.string.Sword_Name); image = ItemSpriteSheet.SWORD; } @@ -32,6 +33,6 @@ public Sword() { @Override public String desc() { - return "The razor-sharp length of steel blade shines reassuringly."; + return Game.getVar(R.string.Sword_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/melee/WarHammer.java b/src/com/watabou/pixeldungeon/items/weapon/melee/WarHammer.java index 415f21ba7a..17b3f7d7dc 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/melee/WarHammer.java +++ b/src/com/watabou/pixeldungeon/items/weapon/melee/WarHammer.java @@ -17,12 +17,13 @@ */ package com.watabou.pixeldungeon.items.weapon.melee; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; public class WarHammer extends MeleeWeapon { - { - name = "war hammer"; + name = Game.getVar(R.string.WarHammer_Name); image = ItemSpriteSheet.WAR_HAMMER; } @@ -32,8 +33,6 @@ public WarHammer() { @Override public String desc() { - return - "Few creatures can withstand the crushing blow of this towering mass of lead and steel, " + - "but only the strongest of adventurers can use it effectively."; + return Game.getVar(R.string.WarHammer_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/missiles/Boomerang.java b/src/com/watabou/pixeldungeon/items/weapon/missiles/Boomerang.java index c64365658e..03d7ad0a80 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/missiles/Boomerang.java +++ b/src/com/watabou/pixeldungeon/items/weapon/missiles/Boomerang.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.weapon.missiles; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.Item; @@ -27,17 +29,24 @@ public class Boomerang extends MissileWeapon { { - name = "boomerang"; + name = Game.getVar(R.string.Boomerang_Name); image = ItemSpriteSheet.BOOMERANG; STR = 10; - MIN = 1; - MAX = 4; - stackable = false; } + @Override + public int min() { + return isBroken() ? 1 : 1 + level(); + } + + @Override + public int max() { + return isBroken() ? 4 : 4 + 2 * level(); + } + @Override public boolean isUpgradable() { return true; @@ -50,8 +59,6 @@ public Item upgrade() { @Override public Item upgrade( boolean enchant ) { - MIN += 1; - MAX += 2; super.upgrade( enchant ); updateQuickslot(); @@ -59,16 +66,9 @@ public Item upgrade( boolean enchant ) { return this; } - @Override - public Item degrade() { - MIN -= 1; - MAX -= 2; - return super.degrade(); - } - @Override public int maxDurability( int lvl ) { - return 7 * (lvl < 16 ? 16 - lvl : 1); + return 8 * (lvl < 16 ? 16 - lvl : 1); } @Override @@ -108,7 +108,6 @@ public void cast( Hero user, int dst ) { @Override public String desc() { - return - "Thrown to the enemy this flat curved wooden missile will return to the hands of its thrower."; + return Game.getVar(R.string.Boomerang_Info); } } diff --git a/src/com/watabou/pixeldungeon/items/weapon/missiles/CurareDart.java b/src/com/watabou/pixeldungeon/items/weapon/missiles/CurareDart.java index 49bc7ca8ca..327ef935b2 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/missiles/CurareDart.java +++ b/src/com/watabou/pixeldungeon/items/weapon/missiles/CurareDart.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.missiles; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Paralysis; @@ -29,13 +31,10 @@ public class CurareDart extends MissileWeapon { public static final float DURATION = 3f; { - name = "curare dart"; + name = Game.getVar(R.string.CurareDart_Name); image = ItemSpriteSheet.CURARE_DART; STR = 14; - - MIN = 1; - MAX = 3; } public CurareDart() { @@ -47,6 +46,16 @@ public CurareDart( int number ) { quantity = number; } + @Override + public int min() { + return 1; + } + + @Override + public int max() { + return 3; + } + @Override public void proc( Char attacker, Char defender, int damage ) { Buff.prolong( defender, Paralysis.class, DURATION ); @@ -55,9 +64,7 @@ public void proc( Char attacker, Char defender, int damage ) { @Override public String desc() { - return - "These little evil darts don't do much damage but they can paralyze " + - "the target leaving it helpless and motionless for some time."; + return Game.getVar(R.string.CurareDart_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/weapon/missiles/Dart.java b/src/com/watabou/pixeldungeon/items/weapon/missiles/Dart.java index 90f9f486e9..d54d2d5976 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/missiles/Dart.java +++ b/src/com/watabou/pixeldungeon/items/weapon/missiles/Dart.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.missiles; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; import com.watabou.utils.Random; @@ -24,11 +26,8 @@ public class Dart extends MissileWeapon { { - name = "dart"; + name = Game.getVar(R.string.Dart_Name); image = ItemSpriteSheet.DART; - - MIN = 1; - MAX = 4; } public Dart() { @@ -40,11 +39,19 @@ public Dart( int number ) { quantity = number; } + @Override + public int min() { + return 1; + } + + @Override + public int max() { + return 4; + } + @Override public String desc() { - return - "These simple metal spikes are weighted to fly true and " + - "sting their prey with a flick of the wrist."; + return Game.getVar(R.string.Dart_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/weapon/missiles/IncendiaryDart.java b/src/com/watabou/pixeldungeon/items/weapon/missiles/IncendiaryDart.java index ae4995f867..878bce297b 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/missiles/IncendiaryDart.java +++ b/src/com/watabou/pixeldungeon/items/weapon/missiles/IncendiaryDart.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.items.weapon.missiles; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.Blob; @@ -33,13 +35,10 @@ public class IncendiaryDart extends MissileWeapon { { - name = "incendiary dart"; + name = Game.getVar(R.string.IncendiaryDart_Name); image = ItemSpriteSheet.INCENDIARY_DART; STR = 12; - - MIN = 1; - MAX = 2; } public IncendiaryDart() { @@ -51,6 +50,16 @@ public IncendiaryDart( int number ) { quantity = number; } + @Override + public int min() { + return 1; + } + + @Override + public int max() { + return 2; + } + @Override protected void onThrow( int cell ) { Char enemy = Actor.findChar( cell ); @@ -75,9 +84,7 @@ public void proc( Char attacker, Char defender, int damage ) { @Override public String desc() { - return - "The spike on each of these darts is designed to pin it to its target " + - "while the unstable compounds strapped to its length burst into brilliant flames."; + return Game.getVar(R.string.IncendiaryDart_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/weapon/missiles/Javelin.java b/src/com/watabou/pixeldungeon/items/weapon/missiles/Javelin.java index ed6fca5d27..60af6a8ec6 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/missiles/Javelin.java +++ b/src/com/watabou/pixeldungeon/items/weapon/missiles/Javelin.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.missiles; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Cripple; @@ -27,13 +29,10 @@ public class Javelin extends MissileWeapon { { - name = "javelin"; + name = Game.getVar(R.string.Javelin_Name); image = ItemSpriteSheet.JAVELIN; STR = 15; - - MIN = 2; - MAX = 15; } public Javelin() { @@ -45,6 +44,16 @@ public Javelin( int number ) { quantity = number; } + @Override + public int min() { + return 2; + } + + @Override + public int max() { + return 15; + } + @Override public void proc( Char attacker, Char defender, int damage ) { super.proc( attacker, defender, damage ); @@ -53,9 +62,7 @@ public void proc( Char attacker, Char defender, int damage ) { @Override public String desc() { - return - "This length of metal is weighted to keep the spike " + - "at its tip foremost as it sails through the air."; + return Game.getVar(R.string.Javelin_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/weapon/missiles/MissileWeapon.java b/src/com/watabou/pixeldungeon/items/weapon/missiles/MissileWeapon.java index ead538fe90..fbda4be81b 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/missiles/MissileWeapon.java +++ b/src/com/watabou/pixeldungeon/items/weapon/missiles/MissileWeapon.java @@ -19,7 +19,9 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -29,13 +31,12 @@ import com.watabou.pixeldungeon.scenes.GameScene; import com.watabou.pixeldungeon.windows.WndOptions; -public class MissileWeapon extends Weapon { +abstract public class MissileWeapon extends Weapon { - private static final String TXT_MISSILES = "Missile weapon"; - private static final String TXT_YES = "Yes, I know what I'm doing"; - private static final String TXT_NO = "No, I changed my mind"; - private static final String TXT_R_U_SURE = - "Do you really want to equip it as a melee weapon?"; + private static final String TXT_MISSILES = Game.getVar(R.string.MissileWeapon_Missiles); + private static final String TXT_YES = Game.getVar(R.string.MissileWeapon_Yes); + private static final String TXT_NO = Game.getVar(R.string.MissileWeapon_No); + private static final String TXT_R_U_SURE = Game.getVar(R.string.MissileWeapon_Sure); { stackable = true; @@ -120,23 +121,22 @@ public String info() { StringBuilder info = new StringBuilder( desc() ); - info.append( "\n\nAverage damage of this weapon equals to " + (MIN + (MAX - MIN) / 2) + " points per hit. " ); - + int min = min(); + int max = max(); + info.append(String.format(Game.getVar(R.string.MissileWeapon_Info1), (min + (max - min) / 2))); + info.append(" "); + if (Dungeon.hero.belongings.backpack.items.contains( this )) { if (STR > Dungeon.hero.STR()) { - info.append( - "Because of your inadequate strength the accuracy and speed " + - "of your attack with this " + name + " is decreased." ); + info.append(String.format(Game.getVar(R.string.MissileWeapon_Info2), name)); } if (STR < Dungeon.hero.STR()) { - info.append( - "Because of your excess strength the damage " + - "of your attack with this " + name + " is increased." ); + info.append(String.format(Game.getVar(R.string.MissileWeapon_Info3), name)); } } if (isEquipped( Dungeon.hero )) { - info.append( "\n\nYou hold the " + name + " at the ready." ); + info.append(String.format(Game.getVar(R.string.MissileWeapon_Info4), name)); } return info.toString(); diff --git a/src/com/watabou/pixeldungeon/items/weapon/missiles/Shuriken.java b/src/com/watabou/pixeldungeon/items/weapon/missiles/Shuriken.java index e35817c6b6..81cfb62225 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/missiles/Shuriken.java +++ b/src/com/watabou/pixeldungeon/items/weapon/missiles/Shuriken.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.missiles; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; import com.watabou.utils.Random; @@ -24,14 +26,11 @@ public class Shuriken extends MissileWeapon { { - name = "shuriken"; + name = Game.getVar(R.string.Shuriken_Name); image = ItemSpriteSheet.SHURIKEN; STR = 13; - MIN = 2; - MAX = 6; - DLY = 0.5f; } @@ -44,11 +43,19 @@ public Shuriken( int number ) { quantity = number; } + @Override + public int min() { + return 2; + } + + @Override + public int max() { + return 6; + } + @Override public String desc() { - return - "Star-shaped pieces of metal with razor-sharp blades do significant damage " + - "when they hit a target. They can be thrown at very high rate."; + return Game.getVar(R.string.Shuriken_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/items/weapon/missiles/Tamahawk.java b/src/com/watabou/pixeldungeon/items/weapon/missiles/Tamahawk.java index c55c4410f1..ac7ba030b9 100644 --- a/src/com/watabou/pixeldungeon/items/weapon/missiles/Tamahawk.java +++ b/src/com/watabou/pixeldungeon/items/weapon/missiles/Tamahawk.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.items.weapon.missiles; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Bleeding; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -27,13 +29,10 @@ public class Tamahawk extends MissileWeapon { { - name = "tomahawk"; + name = Game.getVar(R.string.Tamahawk_Name); image = ItemSpriteSheet.TOMAHAWK; STR = 17; - - MIN = 4; - MAX = 20; } public Tamahawk() { @@ -45,6 +44,16 @@ public Tamahawk( int number ) { quantity = number; } + @Override + public int min() { + return 4; + } + + @Override + public int max() { + return 20; + } + @Override public void proc( Char attacker, Char defender, int damage ) { super.proc( attacker, defender, damage ); @@ -53,9 +62,7 @@ public void proc( Char attacker, Char defender, int damage ) { @Override public String desc() { - return - "This throwing axe is not that heavy, but it still " + - "requires significant strength to be used effectively."; + return Game.getVar(R.string.Tamahawk_Info); } @Override diff --git a/src/com/watabou/pixeldungeon/levels/CavesBossLevel.java b/src/com/watabou/pixeldungeon/levels/CavesBossLevel.java index d2407d7973..48191f89fb 100644 --- a/src/com/watabou/pixeldungeon/levels/CavesBossLevel.java +++ b/src/com/watabou/pixeldungeon/levels/CavesBossLevel.java @@ -18,11 +18,13 @@ package com.watabou.pixeldungeon.levels; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.noosa.Scene; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Bones; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.mobs.Bestiary; @@ -266,11 +268,11 @@ private boolean outsideEntraceRoom( int cell ) { public String tileName( int tile ) { switch (tile) { case Terrain.GRASS: - return "Fluorescent moss"; + return Game.getVar(R.string.Caves_TileGrass); case Terrain.HIGH_GRASS: - return "Fluorescent mushrooms"; + return Game.getVar(R.string.Caves_TileHighGrass); case Terrain.WATER: - return "Freezing cold water."; + return Game.getVar(R.string.Caves_TileWater); default: return super.tileName( tile ); } @@ -280,13 +282,13 @@ public String tileName( int tile ) { public String tileDesc( int tile ) { switch (tile) { case Terrain.ENTRANCE: - return "The ladder leads up to the upper depth."; + return Game.getVar(R.string.Caves_TileDescEntrance); case Terrain.EXIT: - return "The ladder leads down to the lower depth."; + return Game.getVar(R.string.Caves_TileDescExit); case Terrain.HIGH_GRASS: - return "Huge mushrooms block the view."; + return Game.getVar(R.string.Caves_TileDescHighGrass); case Terrain.WALL_DECO: - return "A vein of some ore is visible on the wall. Gold?"; + return Game.getVar(R.string.Caves_TileDescDeco); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/CavesLevel.java b/src/com/watabou/pixeldungeon/levels/CavesLevel.java index bebfefed52..0751d241e1 100644 --- a/src/com/watabou/pixeldungeon/levels/CavesLevel.java +++ b/src/com/watabou/pixeldungeon/levels/CavesLevel.java @@ -24,6 +24,7 @@ import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.DungeonTilemap; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.mobs.npcs.Blacksmith; import com.watabou.pixeldungeon.levels.Room.Type; import com.watabou.pixeldungeon.levels.painters.Painter; @@ -186,11 +187,11 @@ protected void decorate() { public String tileName( int tile ) { switch (tile) { case Terrain.GRASS: - return "Fluorescent moss"; + return Game.getVar(R.string.Caves_TileGrass); case Terrain.HIGH_GRASS: - return "Fluorescent mushrooms"; + return Game.getVar(R.string.Caves_TileHighGrass); case Terrain.WATER: - return "Freezing cold water."; + return Game.getVar(R.string.Caves_TileWater); default: return super.tileName( tile ); } @@ -200,15 +201,15 @@ public String tileName( int tile ) { public String tileDesc( int tile ) { switch (tile) { case Terrain.ENTRANCE: - return "The ladder leads up to the upper depth."; + return Game.getVar(R.string.Caves_TileDescEntrance); case Terrain.EXIT: - return "The ladder leads down to the lower depth."; + return Game.getVar(R.string.Caves_TileDescExit); case Terrain.HIGH_GRASS: - return "Huge mushrooms block the view."; + return Game.getVar(R.string.Caves_TileDescHighGrass); case Terrain.WALL_DECO: - return "A vein of some ore is visible on the wall. Gold?"; + return Game.getVar(R.string.Caves_TileDescDeco); case Terrain.BOOKSHELF: - return "Who would need a bookshelf in a cave?"; + return Game.getVar(R.string.Caves_TileDescBookshelf); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/CityBossLevel.java b/src/com/watabou/pixeldungeon/levels/CityBossLevel.java index d78c716e0e..1a127200ff 100644 --- a/src/com/watabou/pixeldungeon/levels/CityBossLevel.java +++ b/src/com/watabou/pixeldungeon/levels/CityBossLevel.java @@ -17,11 +17,13 @@ */ package com.watabou.pixeldungeon.levels; +import com.watabou.noosa.Game; import com.watabou.noosa.Scene; import com.watabou.noosa.tweeners.AlphaTweener; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Bones; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.mobs.Bestiary; @@ -224,9 +226,9 @@ private boolean outsideEntraceRoom( int cell ) { public String tileName( int tile ) { switch (tile) { case Terrain.WATER: - return "Suspiciously colored water"; + return Game.getVar(R.string.City_TileWater); case Terrain.HIGH_GRASS: - return "High blooming flowers"; + return Game.getVar(R.string.City_TileHighGrass); default: return super.tileName( tile ); } @@ -236,19 +238,19 @@ public String tileName( int tile ) { public String tileDesc(int tile) { switch (tile) { case Terrain.ENTRANCE: - return "A ramp leads up to the upper depth."; + return Game.getVar(R.string.City_TileDescEntrance); case Terrain.EXIT: - return "A ramp leads down to the lower depth."; + return Game.getVar(R.string.City_TileDescExit); case Terrain.WALL_DECO: case Terrain.EMPTY_DECO: - return "Several tiles are missing here."; + return Game.getVar(R.string.City_TileDescDeco); case Terrain.EMPTY_SP: - return "Thick carpet covers the floor."; + return Game.getVar(R.string.City_TileDescEmptySP); case Terrain.STATUE: case Terrain.STATUE_SP: - return "The statue depicts some dwarf standing in a heroic stance."; + return Game.getVar(R.string.City_TileDescStatue); case Terrain.BOOKSHELF: - return "The rows of books on different disciplines fill the bookshelf."; + return Game.getVar(R.string.City_TileDescBookshelf); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/CityLevel.java b/src/com/watabou/pixeldungeon/levels/CityLevel.java index 3fcc667014..ef9e9f0a33 100644 --- a/src/com/watabou/pixeldungeon/levels/CityLevel.java +++ b/src/com/watabou/pixeldungeon/levels/CityLevel.java @@ -17,12 +17,14 @@ */ package com.watabou.pixeldungeon.levels; +import com.watabou.noosa.Game; import com.watabou.noosa.Scene; import com.watabou.noosa.particles.Emitter; import com.watabou.noosa.particles.PixelParticle; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.DungeonTilemap; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.mobs.npcs.Imp; import com.watabou.pixeldungeon.levels.Room.Type; import com.watabou.utils.PointF; @@ -95,9 +97,9 @@ protected void createItems() { public String tileName( int tile ) { switch (tile) { case Terrain.WATER: - return "Suspiciously colored water"; + return Game.getVar(R.string.City_TileWater); case Terrain.HIGH_GRASS: - return "High blooming flowers"; + return Game.getVar(R.string.City_TileHighGrass); default: return super.tileName( tile ); } @@ -107,19 +109,19 @@ public String tileName( int tile ) { public String tileDesc(int tile) { switch (tile) { case Terrain.ENTRANCE: - return "A ramp leads up to the upper depth."; + return Game.getVar(R.string.City_TileDescEntrance); case Terrain.EXIT: - return "A ramp leads down to the lower depth."; + return Game.getVar(R.string.City_TileDescExit); case Terrain.WALL_DECO: case Terrain.EMPTY_DECO: - return "Several tiles are missing here."; + return Game.getVar(R.string.City_TileDescDeco); case Terrain.EMPTY_SP: - return "Thick carpet covers the floor."; + return Game.getVar(R.string.City_TileDescEmptySP); case Terrain.STATUE: case Terrain.STATUE_SP: - return "The statue depicts some dwarf standing in a heroic stance."; + return Game.getVar(R.string.City_TileDescStatue); case Terrain.BOOKSHELF: - return "The rows of books on different disciplines fill the bookshelf."; + return Game.getVar(R.string.City_TileDescBookshelf); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/HallsBossLevel.java b/src/com/watabou/pixeldungeon/levels/HallsBossLevel.java index 8e255a6c98..4f929ed531 100644 --- a/src/com/watabou/pixeldungeon/levels/HallsBossLevel.java +++ b/src/com/watabou/pixeldungeon/levels/HallsBossLevel.java @@ -17,10 +17,12 @@ */ package com.watabou.pixeldungeon.levels; +import com.watabou.noosa.Game; import com.watabou.noosa.Scene; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Bones; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.mobs.Yog; @@ -218,14 +220,14 @@ public Heap drop( Item item, int cell ) { public String tileName( int tile ) { switch (tile) { case Terrain.WATER: - return "Cold lava"; + return Game.getVar(R.string.Halls_TileWater); case Terrain.GRASS: - return "Embermoss"; + return Game.getVar(R.string.Halls_TileGrass); case Terrain.HIGH_GRASS: - return "Emberfungi"; + return Game.getVar(R.string.Halls_TileHighGrass); case Terrain.STATUE: case Terrain.STATUE_SP: - return "Pillar"; + return Game.getVar(R.string.Halls_TileStatue); default: return super.tileName( tile ); } @@ -235,10 +237,10 @@ public String tileName( int tile ) { public String tileDesc(int tile) { switch (tile) { case Terrain.WATER: - return "It looks like lava, but it's cold and probably safe to touch."; + return Game.getVar(R.string.Halls_TileDescWater); case Terrain.STATUE: case Terrain.STATUE_SP: - return "The pillar is made of real humanoid skulls. Awesome."; + return Game.getVar(R.string.Halls_TileDescStatue); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/HallsLevel.java b/src/com/watabou/pixeldungeon/levels/HallsLevel.java index 9cedb4fa3f..e1b64385a7 100644 --- a/src/com/watabou/pixeldungeon/levels/HallsLevel.java +++ b/src/com/watabou/pixeldungeon/levels/HallsLevel.java @@ -28,6 +28,7 @@ import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.DungeonTilemap; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Torch; import com.watabou.utils.PointF; import com.watabou.utils.Random; @@ -107,14 +108,14 @@ protected void decorate() { public String tileName( int tile ) { switch (tile) { case Terrain.WATER: - return "Cold lava"; + return Game.getVar(R.string.Halls_TileWater); case Terrain.GRASS: - return "Embermoss"; + return Game.getVar(R.string.Halls_TileGrass); case Terrain.HIGH_GRASS: - return "Emberfungi"; + return Game.getVar(R.string.Halls_TileHighGrass); case Terrain.STATUE: case Terrain.STATUE_SP: - return "Pillar"; + return Game.getVar(R.string.Halls_TileStatue); default: return super.tileName( tile ); } @@ -124,12 +125,12 @@ public String tileName( int tile ) { public String tileDesc(int tile) { switch (tile) { case Terrain.WATER: - return "It looks like lava, but it's cold and probably safe to touch."; + return Game.getVar(R.string.Halls_TileDescWater); case Terrain.STATUE: case Terrain.STATUE_SP: - return "The pillar is made of real humanoid skulls. Awesome."; + return Game.getVar(R.string.Halls_TileDescStatue); case Terrain.BOOKSHELF: - return "Books in ancient languages smoulder in the bookshelf."; + return Game.getVar(R.string.Halls_TileDescBookshelf); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/LastLevel.java b/src/com/watabou/pixeldungeon/levels/LastLevel.java index b7d8326857..63b259a8a3 100644 --- a/src/com/watabou/pixeldungeon/levels/LastLevel.java +++ b/src/com/watabou/pixeldungeon/levels/LastLevel.java @@ -19,8 +19,10 @@ import java.util.Arrays; +import com.watabou.noosa.Game; import com.watabou.noosa.Scene; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Amulet; import com.watabou.pixeldungeon.levels.painters.Painter; import com.watabou.utils.Random; @@ -96,14 +98,14 @@ public int randomRespawnCell() { public String tileName( int tile ) { switch (tile) { case Terrain.WATER: - return "Cold lava"; + return Game.getVar(R.string.LastLevel_TileWater); case Terrain.GRASS: - return "Embermoss"; + return Game.getVar(R.string.LastLevel_TileGrass); case Terrain.HIGH_GRASS: - return "Emberfungi"; + return Game.getVar(R.string.LastLevel_TileHighGrass); case Terrain.STATUE: case Terrain.STATUE_SP: - return "Pillar"; + return Game.getVar(R.string.LastLevel_TileStatue); default: return super.tileName( tile ); } @@ -113,10 +115,10 @@ public String tileName( int tile ) { public String tileDesc(int tile) { switch (tile) { case Terrain.WATER: - return "It looks like lava, but it's cold and probably safe to touch."; + return Game.getVar(R.string.LastLevel_TileDescWater); case Terrain.STATUE: case Terrain.STATUE_SP: - return "The pillar is made of real humanoid skulls. Awesome."; + return Game.getVar(R.string.LastLevel_TileDescStatue); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/LastShopLevel.java b/src/com/watabou/pixeldungeon/levels/LastShopLevel.java index cc3f486385..4d56fa62b6 100644 --- a/src/com/watabou/pixeldungeon/levels/LastShopLevel.java +++ b/src/com/watabou/pixeldungeon/levels/LastShopLevel.java @@ -19,9 +19,11 @@ import java.util.List; +import com.watabou.noosa.Game; import com.watabou.noosa.Scene; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Bones; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.mobs.npcs.Imp; import com.watabou.pixeldungeon.items.Heap; @@ -183,9 +185,9 @@ public int randomRespawnCell() { public String tileName( int tile ) { switch (tile) { case Terrain.WATER: - return "Suspiciously colored water"; + return Game.getVar(R.string.LastShopLevel_TileWater); case Terrain.HIGH_GRASS: - return "High blooming flowers"; + return Game.getVar(R.string.LastShopLevel_TileHighGrass); default: return super.tileName( tile ); } @@ -195,14 +197,14 @@ public String tileName( int tile ) { public String tileDesc(int tile) { switch (tile) { case Terrain.ENTRANCE: - return "A ramp leads up to the upper depth."; + return Game.getVar(R.string.LastShopLevel_TileDescEntrance); case Terrain.EXIT: - return "A ramp leads down to the Inferno."; + return Game.getVar(R.string.LastShopLevel_TileDescExit); case Terrain.WALL_DECO: case Terrain.EMPTY_DECO: - return "Several tiles are missing here."; + return Game.getVar(R.string.LastShopLevel_TileDescDeco); case Terrain.EMPTY_SP: - return "Thick carpet covers the floor."; + return Game.getVar(R.string.LastShopLevel_TileDescEmptySP); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/Level.java b/src/com/watabou/pixeldungeon/levels/Level.java index 981fd8b65e..b50229126c 100644 --- a/src/com/watabou/pixeldungeon/levels/Level.java +++ b/src/com/watabou/pixeldungeon/levels/Level.java @@ -23,11 +23,13 @@ import java.util.HashMap; import java.util.HashSet; +import com.watabou.noosa.Game; import com.watabou.noosa.Scene; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Challenges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; @@ -91,7 +93,7 @@ public static enum Feeling { protected static final float TIME_TO_RESPAWN = 50; - private static final String TXT_HIDDEN_PLATE_CLICKS = "A hidden pressure plate clicks!"; + private static final String TXT_HIDDEN_PLATE_CLICKS = Game.getVar(R.string.Level_HiddenPlate); public static boolean resizingNeeded; public static int loadedMapSize; @@ -442,13 +444,7 @@ private void buildFlagMaps() { for (int i=WIDTH; i < LENGTH - WIDTH; i++) { if (water[i]) { - int t = Terrain.WATER_TILES; - for (int j=0; j < NEIGHBOURS4.length; j++) { - if ((Terrain.flags[map[i + NEIGHBOURS4[j]]] & Terrain.UNSTITCHABLE) != 0) { - t += 1 << j; - } - } - map[i] = t; + map[i] = getWaterTile( i ); } if (pit[i]) { @@ -468,6 +464,37 @@ private void buildFlagMaps() { } } + private int getWaterTile( int pos ) { + int t = Terrain.WATER_TILES; + for (int j=0; j < NEIGHBOURS4.length; j++) { + if ((Terrain.flags[map[pos + NEIGHBOURS4[j]]] & Terrain.UNSTITCHABLE) != 0) { + t += 1 << j; + } + } + return t; + } + + public void destroy( int pos ) { + if ((Terrain.flags[map[pos]] & Terrain.UNSTITCHABLE) == 0) { + + set( pos, Terrain.EMBERS ); + + } else { + boolean flood = false; + for (int j=0; j < NEIGHBOURS4.length; j++) { + if (water[pos + NEIGHBOURS4[j]]) { + flood = true; + break; + } + } + if (flood) { + set( pos, getWaterTile( pos ) ); + } else { + set( pos, Terrain.EMBERS ); + } + } + } + private void cleanWalls() { for (int i=0; i < LENGTH; i++) { @@ -871,7 +898,7 @@ public String tileName( int tile ) { switch (tile) { case Terrain.CHASM: - return "Chasm"; + return Game.getVar(R.string.Level_TileChasm); case Terrain.EMPTY: case Terrain.EMPTY_SP: case Terrain.EMPTY_DECO: @@ -881,70 +908,70 @@ public String tileName( int tile ) { case Terrain.SECRET_POISON_TRAP: case Terrain.SECRET_ALARM_TRAP: case Terrain.SECRET_LIGHTNING_TRAP: - return "Floor"; + return Game.getVar(R.string.Level_TileFloor); case Terrain.GRASS: - return "Grass"; + return Game.getVar(R.string.Level_TileGrass); case Terrain.WATER: - return "Water"; + return Game.getVar(R.string.Level_TileWater); case Terrain.WALL: case Terrain.WALL_DECO: case Terrain.SECRET_DOOR: - return "Wall"; + return Game.getVar(R.string.Level_TileWall); case Terrain.DOOR: - return "Closed door"; + return Game.getVar(R.string.Level_TileClosedDoor); case Terrain.OPEN_DOOR: - return "Open door"; + return Game.getVar(R.string.Level_TileOpenDoor); case Terrain.ENTRANCE: - return "Depth entrance"; + return Game.getVar(R.string.Level_TileEntrance); case Terrain.EXIT: - return "Depth exit"; + return Game.getVar(R.string.Level_TileExit); case Terrain.EMBERS: - return "Embers"; + return Game.getVar(R.string.Level_TileEmbers); case Terrain.LOCKED_DOOR: - return "Locked door"; + return Game.getVar(R.string.Level_TileLockedDoor); case Terrain.PEDESTAL: - return "Pedestal"; + return Game.getVar(R.string.Level_TilePedestal); case Terrain.BARRICADE: - return "Barricade"; + return Game.getVar(R.string.Level_TileBarricade); case Terrain.HIGH_GRASS: - return "High grass"; + return Game.getVar(R.string.Level_TileHighGrass); case Terrain.LOCKED_EXIT: - return "Locked depth exit"; + return Game.getVar(R.string.Level_TileLockedExit); case Terrain.UNLOCKED_EXIT: - return "Unlocked depth exit"; + return Game.getVar(R.string.Level_TileUnlockedExit); case Terrain.SIGN: - return "Sign"; + return Game.getVar(R.string.Level_TileSign); case Terrain.WELL: - return "Well"; + return Game.getVar(R.string.Level_TileWell); case Terrain.EMPTY_WELL: - return "Empty well"; + return Game.getVar(R.string.Level_TileEmptyWell); case Terrain.STATUE: case Terrain.STATUE_SP: - return "Statue"; + return Game.getVar(R.string.Level_TileStatue); case Terrain.TOXIC_TRAP: - return "Toxic gas trap"; + return Game.getVar(R.string.Level_TileToxicTrap); case Terrain.FIRE_TRAP: - return "Fire trap"; + return Game.getVar(R.string.Level_TileFireTrap); case Terrain.PARALYTIC_TRAP: - return "Paralytic gas trap"; + return Game.getVar(R.string.Level_TileParalyticTrap); case Terrain.POISON_TRAP: - return "Poison dart trap"; + return Game.getVar(R.string.Level_TilePoisonTrap); case Terrain.ALARM_TRAP: - return "Alarm trap"; + return Game.getVar(R.string.Level_TileAlarmTrap); case Terrain.LIGHTNING_TRAP: - return "Lightning trap"; + return Game.getVar(R.string.Level_TileLightningTrap); case Terrain.GRIPPING_TRAP: - return "Gripping trap"; + return Game.getVar(R.string.Level_TileGrippingTrap); case Terrain.SUMMONING_TRAP: - return "Summoning trap"; + return Game.getVar(R.string.Level_TileSummoningTrap); case Terrain.INACTIVE_TRAP: - return "Triggered trap"; + return Game.getVar(R.string.Level_TileInactiveTrap); case Terrain.BOOKSHELF: - return "Bookshelf"; + return Game.getVar(R.string.Level_TileBookshelf); case Terrain.ALCHEMY: - return "Alchemy pot"; + return Game.getVar(R.string.Level_TileAlchemy); default: - return "???"; + return Game.getVar(R.string.Level_TileDefault); } } @@ -952,26 +979,26 @@ public String tileDesc( int tile ) { switch (tile) { case Terrain.CHASM: - return "You can't see the bottom."; + return Game.getVar(R.string.Level_TileDescChasm); case Terrain.WATER: - return "In case of burning step into the water to extinguish the fire."; + return Game.getVar(R.string.Level_TileDescWater); case Terrain.ENTRANCE: - return "Stairs lead up to the upper depth."; + return Game.getVar(R.string.Level_TileDescEntrance); case Terrain.EXIT: case Terrain.UNLOCKED_EXIT: - return "Stairs lead down to the lower depth."; + return Game.getVar(R.string.Level_TileDescExit); case Terrain.EMBERS: - return "Embers cover the floor."; + return Game.getVar(R.string.Level_TileDescEmbers); case Terrain.HIGH_GRASS: - return "Dense vegetation blocks the view."; + return Game.getVar(R.string.Level_TileDescHighGrass); case Terrain.LOCKED_DOOR: - return "This door is locked, you need a matching key to unlock it."; + return Game.getVar(R.string.Level_TileDescLockedDoor); case Terrain.LOCKED_EXIT: - return "Heavy bars block the stairs leading down."; + return Game.getVar(R.string.Level_TileDescLockedExit); case Terrain.BARRICADE: - return "The wooden barricade is firmly set but has dried over the years. Might it burn?"; + return Game.getVar(R.string.Level_TileDescBarricade); case Terrain.SIGN: - return "You can't read the text from here."; + return Game.getVar(R.string.Level_TileDescSign); case Terrain.TOXIC_TRAP: case Terrain.FIRE_TRAP: case Terrain.PARALYTIC_TRAP: @@ -980,16 +1007,16 @@ public String tileDesc( int tile ) { case Terrain.LIGHTNING_TRAP: case Terrain.GRIPPING_TRAP: case Terrain.SUMMONING_TRAP: - return "Stepping onto a hidden pressure plate will activate the trap."; + return Game.getVar(R.string.Level_TileDescTrap); case Terrain.INACTIVE_TRAP: - return "The trap has been triggered before and it's not dangerous anymore."; + return Game.getVar(R.string.Level_TileDescInactiveTrap); case Terrain.STATUE: case Terrain.STATUE_SP: - return "Someone wanted to adorn this place, but failed, obviously."; + return Game.getVar(R.string.Level_TileDescStatue); case Terrain.ALCHEMY: - return "Drop some seeds here to cook a potion."; + return Game.getVar(R.string.Level_TileDescAlchemy); case Terrain.EMPTY_WELL: - return "The well has run dry."; + return Game.getVar(R.string.Level_TileDescEmptyWell); default: if (tile >= Terrain.WATER_TILES) { return tileDesc( Terrain.WATER ); diff --git a/src/com/watabou/pixeldungeon/levels/PrisonBossLevel.java b/src/com/watabou/pixeldungeon/levels/PrisonBossLevel.java index 1643d9305f..ec8c463cd6 100644 --- a/src/com/watabou/pixeldungeon/levels/PrisonBossLevel.java +++ b/src/com/watabou/pixeldungeon/levels/PrisonBossLevel.java @@ -19,10 +19,12 @@ import java.util.List; +import com.watabou.noosa.Game; import com.watabou.noosa.Scene; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Bones; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.mobs.Bestiary; @@ -351,7 +353,7 @@ public int randomRespawnCell() { public String tileName( int tile ) { switch (tile) { case Terrain.WATER: - return "Dark cold water."; + return Game.getVar(R.string.Prison_TileWater); default: return super.tileName( tile ); } @@ -361,7 +363,7 @@ public String tileName( int tile ) { public String tileDesc(int tile) { switch (tile) { case Terrain.EMPTY_DECO: - return "There are old blood stains on the floor."; + return Game.getVar(R.string.Prison_TileDescDeco); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/PrisonLevel.java b/src/com/watabou/pixeldungeon/levels/PrisonLevel.java index 944bb1c1f3..5592785149 100644 --- a/src/com/watabou/pixeldungeon/levels/PrisonLevel.java +++ b/src/com/watabou/pixeldungeon/levels/PrisonLevel.java @@ -17,11 +17,13 @@ */ package com.watabou.pixeldungeon.levels; +import com.watabou.noosa.Game; import com.watabou.noosa.Scene; import com.watabou.noosa.particles.Emitter; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.DungeonTilemap; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.mobs.npcs.Wandmaker; import com.watabou.pixeldungeon.effects.Halo; import com.watabou.pixeldungeon.effects.particles.FlameParticle; @@ -130,7 +132,7 @@ protected void decorate() { public String tileName( int tile ) { switch (tile) { case Terrain.WATER: - return "Dark cold water."; + return Game.getVar(R.string.Prison_TileWater); default: return super.tileName( tile ); } @@ -140,9 +142,9 @@ public String tileName( int tile ) { public String tileDesc(int tile) { switch (tile) { case Terrain.EMPTY_DECO: - return "There are old blood stains on the floor."; + return Game.getVar(R.string.Prison_TileDescDeco); case Terrain.BOOKSHELF: - return "This is probably a vestige of a prison library. Might it burn?"; + return Game.getVar(R.string.Prison_TileDescBookshelf); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/RegularLevel.java b/src/com/watabou/pixeldungeon/levels/RegularLevel.java index fa86652c1f..8d29c86bfb 100644 --- a/src/com/watabou/pixeldungeon/levels/RegularLevel.java +++ b/src/com/watabou/pixeldungeon/levels/RegularLevel.java @@ -194,10 +194,6 @@ protected void assignRoomType() { r.type = Type.LABORATORY; - } else if (Dungeon.depth >= Dungeon.transmutation && specials.contains( Type.MAGIC_WELL )) { - - r.type = Type.MAGIC_WELL; - } else { int n = specials.size(); @@ -457,6 +453,7 @@ protected void paintDoors( Room r ) { break; case HIDDEN: map[door] = Terrain.SECRET_DOOR; + secretDoors++; break; case BARRICADE: map[door] = Random.Int( 3 ) == 0 ? Terrain.BOOKSHELF : Terrain.BARRICADE; diff --git a/src/com/watabou/pixeldungeon/levels/Room.java b/src/com/watabou/pixeldungeon/levels/Room.java index 3719805960..b8714d2027 100644 --- a/src/com/watabou/pixeldungeon/levels/Room.java +++ b/src/com/watabou/pixeldungeon/levels/Room.java @@ -65,7 +65,8 @@ public static enum Type { POOL ( PoolPainter.class ), RAT_KING ( RatKingPainter.class ), WEAK_FLOOR ( WeakFloorPainter.class ), - PIT ( PitPainter.class ); + PIT ( PitPainter.class ), + ALTAR ( AltarPainter.class ); private Method paint; @@ -88,7 +89,7 @@ public void paint( Level level, Room room ) { public static final ArrayList SPECIALS = new ArrayList( Arrays.asList( Type.ARMORY, Type.WEAK_FLOOR, Type.MAGIC_WELL, Type.CRYPT, Type.POOL, Type.GARDEN, Type.LIBRARY, - Type.TREASURY, Type.TRAPS, Type.STORAGE, Type.STATUE, Type.LABORATORY, Type.VAULT + Type.TREASURY, Type.TRAPS, Type.STORAGE, Type.STATUE, Type.LABORATORY, Type.VAULT, Type.ALTAR ) ); public Type type = Type.NULL; diff --git a/src/com/watabou/pixeldungeon/levels/SewerBossLevel.java b/src/com/watabou/pixeldungeon/levels/SewerBossLevel.java index 57bb98c2b4..8c64dfeb2f 100644 --- a/src/com/watabou/pixeldungeon/levels/SewerBossLevel.java +++ b/src/com/watabou/pixeldungeon/levels/SewerBossLevel.java @@ -20,10 +20,12 @@ import java.util.ArrayList; import java.util.List; +import com.watabou.noosa.Game; import com.watabou.noosa.Scene; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Bones; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.mobs.Bestiary; import com.watabou.pixeldungeon.actors.mobs.Mob; @@ -239,17 +241,17 @@ public void restoreFromBundle( Bundle bundle ) { public String tileName( int tile ) { switch (tile) { case Terrain.WATER: - return "Murky water"; + return Game.getVar(R.string.Sewer_TileWater); default: return super.tileName( tile ); } } @Override - public String tileDesc( int tile ) { + public String tileDesc(int tile) { switch (tile) { case Terrain.EMPTY_DECO: - return "Wet yellowish moss covers the floor."; + return Game.getVar(R.string.Sewer_TileDescDeco); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/SewerLevel.java b/src/com/watabou/pixeldungeon/levels/SewerLevel.java index b679fd8047..02a9b5bd4c 100644 --- a/src/com/watabou/pixeldungeon/levels/SewerLevel.java +++ b/src/com/watabou/pixeldungeon/levels/SewerLevel.java @@ -24,6 +24,7 @@ import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.DungeonTilemap; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.mobs.npcs.Ghost; import com.watabou.pixeldungeon.items.DewVial; import com.watabou.pixeldungeon.scenes.GameScene; @@ -137,7 +138,7 @@ public static void addVisuals( Level level, Scene scene ) { public String tileName( int tile ) { switch (tile) { case Terrain.WATER: - return "Murky water"; + return Game.getVar(R.string.Sewer_TileWater); default: return super.tileName( tile ); } @@ -147,9 +148,9 @@ public String tileName( int tile ) { public String tileDesc(int tile) { switch (tile) { case Terrain.EMPTY_DECO: - return "Wet yellowish moss covers the floor."; + return Game.getVar(R.string.Sewer_TileDescDeco); case Terrain.BOOKSHELF: - return "The bookshelf is packed with cheap useless books. Might it burn?"; + return Game.getVar(R.string.Sewer_TileDescBookshelf); default: return super.tileDesc( tile ); } diff --git a/src/com/watabou/pixeldungeon/levels/features/AlchemyPot.java b/src/com/watabou/pixeldungeon/levels/features/AlchemyPot.java index d9f2cc5aca..8a97d49ac4 100644 --- a/src/com/watabou/pixeldungeon/levels/features/AlchemyPot.java +++ b/src/com/watabou/pixeldungeon/levels/features/AlchemyPot.java @@ -17,6 +17,8 @@ */ package com.watabou.pixeldungeon.levels.features; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.scenes.GameScene; @@ -24,7 +26,7 @@ public class AlchemyPot { - private static final String TXT_SELECT_SEED = "Select a seed to throw"; + private static final String TXT_SELECT_SEED = Game.getVar(R.string.AlchemyPot_SelectSeed); private static Hero hero; private static int pos; diff --git a/src/com/watabou/pixeldungeon/levels/features/Chasm.java b/src/com/watabou/pixeldungeon/levels/features/Chasm.java index df96f44596..bc2e3402ad 100644 --- a/src/com/watabou/pixeldungeon/levels/features/Chasm.java +++ b/src/com/watabou/pixeldungeon/levels/features/Chasm.java @@ -23,6 +23,7 @@ import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Cripple; @@ -40,11 +41,10 @@ public class Chasm { - private static final String TXT_CHASM = "Chasm"; - private static final String TXT_YES = "Yes, I know what I'm doing"; - private static final String TXT_NO = "No, I changed my mind"; - private static final String TXT_JUMP = - "Do you really want to jump into the chasm? You can probably die."; + private static final String TXT_CHASM = Game.getVar(R.string.Chasm_Chasm); + private static final String TXT_YES = Game.getVar(R.string.Chasm_Yes); + private static final String TXT_NO = Game.getVar(R.string.Chasm_No); + private static final String TXT_JUMP = Game.getVar(R.string.Chasm_Jump); public static boolean jumpConfirmed = false; @@ -97,7 +97,7 @@ public void onDeath() { Badges.validateDeathFromFalling(); Dungeon.fail( Utils.format( ResultDescriptions.FALL, Dungeon.depth ) ); - GLog.n( "You fell to death..." ); + GLog.n(Game.getVar(R.string.Chasm_Info)); } } ); } diff --git a/src/com/watabou/pixeldungeon/levels/features/Sign.java b/src/com/watabou/pixeldungeon/levels/features/Sign.java index 925e86d920..e3e4a33b48 100644 --- a/src/com/watabou/pixeldungeon/levels/features/Sign.java +++ b/src/com/watabou/pixeldungeon/levels/features/Sign.java @@ -17,13 +17,16 @@ */ package com.watabou.pixeldungeon.levels.features; + + +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.effects.CellEmitter; import com.watabou.pixeldungeon.effects.particles.ElmoParticle; import com.watabou.pixeldungeon.levels.DeadEndLevel; -import com.watabou.pixeldungeon.levels.Level; import com.watabou.pixeldungeon.levels.Terrain; import com.watabou.pixeldungeon.scenes.GameScene; import com.watabou.pixeldungeon.utils.GLog; @@ -31,46 +34,9 @@ public class Sign { - private static final String TXT_DEAD_END = - "What are you doing here?!"; - - private static final String[] TIPS = { - "Don't overestimate your strength, use weapons and armor you can handle.", - "Not all doors in the dungeon are visible at first sight. If you are stuck, search for hidden doors.", - "Remember, that raising your strength is not the only way to access better equipment. You can go " + - "the other way, lowering its strength requirement with Scrolls of Upgrade.", - "You can spend your gold in shops on deeper levels of the dungeon. The first one is on the 6th level.", - - "Beware of Goo!", - - "Pixel-Mart - all you need for successful adventure!", - "Identify your potions and scrolls as soon as possible. Don't put it off to the moment " + - "when you actually need them.", - "Being hungry doesn't hurt, but starving does hurt.", - "Surprise attack has a better chance to hit. For example, you can ambush your enemy behind " + - "a closed door when you know it is approaching.", - - "Don't let The Tengu out!", - - "Pixel-Mart. Spend money. Live longer.", - "When you're attacked by several monsters at the same time, try to retreat behind a door.", - "If you are burning, you can't put out the fire in the water while levitating.", - "There is no sense in possessing more than one Ankh at the same time, because you will lose them upon resurrecting.", - - "DANGER! Heavy machinery can cause injury, loss of limbs or death!", - - "Pixel-Mart. A safer life in dungeon.", - "When you upgrade an enchanted weapon, there is a chance to destroy that enchantment.", - "With a Well of Transmutation you can get an item, that cannot be obtained otherwise.", - "The only way to enchant a weapon is by upgrading it with a Scroll of Weapon Upgrade.", - - "No weapons allowed in the presence of His Majesty!", - - "Pixel-Mart. Special prices for demon hunters!" - }; - - private static final String TXT_BURN = - "As you try to read the sign it bursts into greenish flames."; + private static final String TXT_DEAD_END = Game.getVar(R.string.Sign_DeadEnd); + private static final String[] TIPS = Game.getVars(R.array.Sign_Tips); + private static final String TXT_BURN = Game.getVar(R.string.Sign_Burn); public static void read( int pos ) { @@ -86,7 +52,7 @@ public static void read( int pos ) { GameScene.show( new WndMessage( TIPS[index] ) ); } else { - Level.set( pos, Terrain.EMBERS ); + Dungeon.level.destroy( pos ); GameScene.updateMap( pos ); GameScene.discoverTile( pos, Terrain.SIGN ); diff --git a/src/com/watabou/pixeldungeon/levels/painters/AltarPainter.java b/src/com/watabou/pixeldungeon/levels/painters/AltarPainter.java new file mode 100644 index 0000000000..37d7941ac9 --- /dev/null +++ b/src/com/watabou/pixeldungeon/levels/painters/AltarPainter.java @@ -0,0 +1,60 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.levels.painters; + +import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.actors.blobs.SacrificialFire; +import com.watabou.pixeldungeon.levels.Level; +import com.watabou.pixeldungeon.levels.Room; +import com.watabou.pixeldungeon.levels.Terrain; +import com.watabou.utils.Point; + +public class AltarPainter extends Painter { + + public static void paint( Level level, Room room ) { + + fill( level, room, Terrain.WALL ); + fill( level, room, 1, Dungeon.bossLevel( Dungeon.depth + 1 ) ? Terrain.HIGH_GRASS : Terrain.CHASM ); + + Point c = room.center(); + Room.Door door = room.entrance(); + if (door.x == room.left || door.x == room.right) { + Point p = drawInside( level, room, door, Math.abs( door.x - c.x ) - 2, Terrain.EMPTY_SP ); + for (; p.y != c.y; p.y += p.y < c.y ? +1 : -1) { + set( level, p, Terrain.EMPTY_SP ); + } + } else { + Point p = drawInside( level, room, door, Math.abs( door.y - c.y ) - 2, Terrain.EMPTY_SP ); + for (; p.x != c.x; p.x += p.x < c.x ? +1 : -1) { + set( level, p, Terrain.EMPTY_SP ); + } + } + + fill( level, c.x - 1, c.y - 1, 3, 3, Terrain.EMBERS ); + set( level, c, Terrain.PEDESTAL ); + + SacrificialFire fire = (SacrificialFire)level.blobs.get( SacrificialFire.class ); + if (fire == null) { + fire = new SacrificialFire(); + } + fire.seed( c.x + c.y * Level.WIDTH, 5 + Dungeon.depth * 5 ); + level.blobs.put( SacrificialFire.class, fire ); + + door.set( Room.Door.Type.EMPTY ); + } +} diff --git a/src/com/watabou/pixeldungeon/levels/painters/CryptPainter.java b/src/com/watabou/pixeldungeon/levels/painters/CryptPainter.java index 7037d255ff..6ad33bc94b 100644 --- a/src/com/watabou/pixeldungeon/levels/painters/CryptPainter.java +++ b/src/com/watabou/pixeldungeon/levels/painters/CryptPainter.java @@ -69,7 +69,7 @@ private static Item prize( Level level ) { for (int i=0; i < 3; i++) { Item another = Generator.random( Generator.Category.ARMOR ); - if (another.level > prize.level) { + if (another.level() > prize.level()) { prize = another; } } diff --git a/src/com/watabou/pixeldungeon/levels/painters/MagicWellPainter.java b/src/com/watabou/pixeldungeon/levels/painters/MagicWellPainter.java index c60cfe506d..bd0b54fda9 100644 --- a/src/com/watabou/pixeldungeon/levels/painters/MagicWellPainter.java +++ b/src/com/watabou/pixeldungeon/levels/painters/MagicWellPainter.java @@ -17,7 +17,6 @@ */ package com.watabou.pixeldungeon.levels.painters; -import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.actors.blobs.WaterOfAwareness; import com.watabou.pixeldungeon.actors.blobs.WaterOfHealth; import com.watabou.pixeldungeon.actors.blobs.WaterOfTransmutation; @@ -43,13 +42,7 @@ public static void paint( Level level, Room room ) { @SuppressWarnings("unchecked") Class waterClass = - Dungeon.depth >= Dungeon.transmutation ? - WaterOfTransmutation.class : (Class)Random.element( WATERS ); - - if (waterClass == WaterOfTransmutation.class) { - Dungeon.transmutation = Integer.MAX_VALUE; - } WellWater water = (WellWater)level.blobs.get( waterClass ); if (water == null) { diff --git a/src/com/watabou/pixeldungeon/levels/painters/PoolPainter.java b/src/com/watabou/pixeldungeon/levels/painters/PoolPainter.java index bbab7fa8d6..7164c6723c 100644 --- a/src/com/watabou/pixeldungeon/levels/painters/PoolPainter.java +++ b/src/com/watabou/pixeldungeon/levels/painters/PoolPainter.java @@ -98,7 +98,7 @@ private static Item prize( Level level ) { Generator.Category.WEAPON, Generator.Category.ARMOR ) ); - if (another.level > prize.level) { + if (another.level() > prize.level()) { prize = another; } } diff --git a/src/com/watabou/pixeldungeon/levels/painters/TrapsPainter.java b/src/com/watabou/pixeldungeon/levels/painters/TrapsPainter.java index 3d1344b4b9..ef7d8f9984 100644 --- a/src/com/watabou/pixeldungeon/levels/painters/TrapsPainter.java +++ b/src/com/watabou/pixeldungeon/levels/painters/TrapsPainter.java @@ -94,7 +94,7 @@ private static Item prize( Level level ) { Generator.Category.WEAPON, Generator.Category.ARMOR ) ); - if (another.level > prize.level) { + if (another.level() > prize.level()) { prize = another; } } diff --git a/src/com/watabou/pixeldungeon/levels/painters/VaultPainter.java b/src/com/watabou/pixeldungeon/levels/painters/VaultPainter.java index 53642bd9e4..4919a9fa38 100644 --- a/src/com/watabou/pixeldungeon/levels/painters/VaultPainter.java +++ b/src/com/watabou/pixeldungeon/levels/painters/VaultPainter.java @@ -32,7 +32,8 @@ public class VaultPainter extends Painter { public static void paint( Level level, Room room ) { fill( level, room, Terrain.WALL ); - fill( level, room, 1, Terrain.EMPTY ); + fill( level, room, 1, Terrain.EMPTY_SP ); + fill( level, room, 2, Terrain.EMPTY ); int cx = (room.left + room.right) / 2; int cy = (room.top + room.bottom) / 2; diff --git a/src/com/watabou/pixeldungeon/levels/traps/AlarmTrap.java b/src/com/watabou/pixeldungeon/levels/traps/AlarmTrap.java index 983d929066..4526ecfb47 100644 --- a/src/com/watabou/pixeldungeon/levels/traps/AlarmTrap.java +++ b/src/com/watabou/pixeldungeon/levels/traps/AlarmTrap.java @@ -17,9 +17,11 @@ */ package com.watabou.pixeldungeon.levels.traps; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.mobs.Mob; import com.watabou.pixeldungeon.effects.CellEmitter; @@ -39,7 +41,7 @@ public static void trigger( int pos, Char ch ) { } if (Dungeon.visible[pos]) { - GLog.w( "The trap emits a piercing sound that echoes throughout the dungeon!" ); + GLog.w(Game.getVar(R.string.AlarmTrap_Desc)); CellEmitter.center( pos ).start( Speck.factory( Speck.SCREAM ), 0.3f, 3 ); } diff --git a/src/com/watabou/pixeldungeon/levels/traps/LightningTrap.java b/src/com/watabou/pixeldungeon/levels/traps/LightningTrap.java index f9e1bc2c76..bed63415f2 100644 --- a/src/com/watabou/pixeldungeon/levels/traps/LightningTrap.java +++ b/src/com/watabou/pixeldungeon/levels/traps/LightningTrap.java @@ -18,7 +18,9 @@ package com.watabou.pixeldungeon.levels.traps; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -32,7 +34,7 @@ public class LightningTrap { - private static final String name = "lightning trap"; + private static final String name = Game.getVar(R.string.LightningTrap_Name); // 00x66CCEE @@ -46,7 +48,7 @@ public static void trigger( int pos, Char ch ) { if (!ch.isAlive()) { Dungeon.fail( Utils.format( ResultDescriptions.TRAP, name, Dungeon.depth ) ); - GLog.n( "You were killed by a discharge of a lightning trap..." ); + GLog.n(Game.getVar(R.string.LightningTrap_Desc)); } else { ((Hero)ch).belongings.charge( false ); } diff --git a/src/com/watabou/pixeldungeon/plants/Dreamweed.java b/src/com/watabou/pixeldungeon/plants/Dreamweed.java index 49a2333ebe..24db246c13 100644 --- a/src/com/watabou/pixeldungeon/plants/Dreamweed.java +++ b/src/com/watabou/pixeldungeon/plants/Dreamweed.java @@ -17,6 +17,9 @@ */ package com.watabou.pixeldungeon.plants; + +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.Blob; import com.watabou.pixeldungeon.actors.blobs.ConfusionGas; @@ -26,12 +29,12 @@ public class Dreamweed extends Plant { - private static final String TXT_DESC = - "Upon touching a Dreamweed it secretes a glittering cloud of confusing gas."; + private static final String TXT_NAME = Game.getVar(R.string.Dreamweed_Name); + private static final String TXT_DESC = Game.getVar(R.string.Dreamweed_Desc); { image = 3; - plantName = "Dreamweed"; + plantName = TXT_NAME; } @Override @@ -50,9 +53,9 @@ public String desc() { public static class Seed extends Plant.Seed { { - plantName = "Dreamweed"; + plantName = TXT_NAME; - name = "seed of " + plantName; + name = String.format(TXT_SEED, plantName); image = ItemSpriteSheet.SEED_DREAMWEED; plantClass = Dreamweed.class; diff --git a/src/com/watabou/pixeldungeon/plants/Earthroot.java b/src/com/watabou/pixeldungeon/plants/Earthroot.java index e49674f10b..9b23afeb39 100644 --- a/src/com/watabou/pixeldungeon/plants/Earthroot.java +++ b/src/com/watabou/pixeldungeon/plants/Earthroot.java @@ -18,7 +18,9 @@ package com.watabou.pixeldungeon.plants; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.effects.CellEmitter; @@ -30,13 +32,12 @@ public class Earthroot extends Plant { - private static final String TXT_DESC = - "When a creature touches an Earthroot, its roots " + - "create a kind of natural armor around it."; + private static final String TXT_NAME = Game.getVar(R.string.Earthroot_Name); + private static final String TXT_DESC = Game.getVar(R.string.Earthroot_Desc); { image = 5; - plantName = "Earthroot"; + plantName = TXT_NAME; } @Override @@ -60,9 +61,9 @@ public String desc() { public static class Seed extends Plant.Seed { { - plantName = "Earthroot"; + plantName = TXT_NAME; - name = "seed of " + plantName; + name = String.format(TXT_SEED, plantName); image = ItemSpriteSheet.SEED_EARTHROOT; plantClass = Earthroot.class; @@ -120,7 +121,7 @@ public int icon() { @Override public String toString() { - return "Herbal armor"; + return Game.getVar(R.string.Earthroot_Buff); } private static final String POS = "pos"; diff --git a/src/com/watabou/pixeldungeon/plants/Fadeleaf.java b/src/com/watabou/pixeldungeon/plants/Fadeleaf.java index 6b0ce575c2..e8d18bdeb6 100644 --- a/src/com/watabou/pixeldungeon/plants/Fadeleaf.java +++ b/src/com/watabou/pixeldungeon/plants/Fadeleaf.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.plants; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.mobs.Mob; @@ -29,13 +31,12 @@ public class Fadeleaf extends Plant { - private static final String TXT_DESC = - "Touching a Fadeleaf will teleport any creature " + - "to a random place on the current level."; + private static final String TXT_NAME = Game.getVar(R.string.Fadeleaf_Name); + private static final String TXT_DESC = Game.getVar(R.string.Fadeleaf_Desc); { image = 6; - plantName = "Fadeleaf"; + plantName = TXT_NAME; } @Override @@ -80,9 +81,9 @@ public String desc() { public static class Seed extends Plant.Seed { { - plantName = "Fadeleaf"; + plantName = TXT_NAME; - name = "seed of " + plantName; + name = String.format(TXT_SEED, plantName); image = ItemSpriteSheet.SEED_FADELEAF; plantClass = Fadeleaf.class; diff --git a/src/com/watabou/pixeldungeon/plants/Firebloom.java b/src/com/watabou/pixeldungeon/plants/Firebloom.java index 83384775ba..47d0b27d90 100644 --- a/src/com/watabou/pixeldungeon/plants/Firebloom.java +++ b/src/com/watabou/pixeldungeon/plants/Firebloom.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.plants; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.Blob; import com.watabou.pixeldungeon.actors.blobs.Fire; @@ -29,11 +31,11 @@ public class Firebloom extends Plant { - private static final String TXT_DESC = "When something touches a Firebloom, it bursts into flames."; - + private static final String TXT_NAME = Game.getVar(R.string.Firebloom_Name); + private static final String TXT_DESC = Game.getVar(R.string.Firebloom_Desc); { image = 0; - plantName = "Firebloom"; + plantName = TXT_NAME; } @Override @@ -54,9 +56,9 @@ public String desc() { public static class Seed extends Plant.Seed { { - plantName = "Firebloom"; + plantName = TXT_NAME; - name = "seed of " + plantName; + name = String.format(TXT_SEED, plantName); image = ItemSpriteSheet.SEED_FIREBLOOM; plantClass = Firebloom.class; diff --git a/src/com/watabou/pixeldungeon/plants/Icecap.java b/src/com/watabou/pixeldungeon/plants/Icecap.java index 81deb86d9f..03bec916cc 100644 --- a/src/com/watabou/pixeldungeon/plants/Icecap.java +++ b/src/com/watabou/pixeldungeon/plants/Icecap.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.plants; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.blobs.Fire; import com.watabou.pixeldungeon.actors.blobs.Freezing; @@ -29,11 +31,12 @@ public class Icecap extends Plant { - private static final String TXT_DESC = "Upon touching an Icecap excretes a pollen, which freezes everything in its vicinity."; + private static final String TXT_NAME = Game.getVar(R.string.Icecap_Name); + private static final String TXT_DESC = Game.getVar(R.string.Icecap_Desc); { image = 1; - plantName = "Icecap"; + plantName = TXT_NAME; } @Override @@ -58,9 +61,9 @@ public String desc() { public static class Seed extends Plant.Seed { { - plantName = "Icecap"; + plantName = TXT_NAME; - name = "seed of " + plantName; + name = String.format(TXT_SEED, plantName); image = ItemSpriteSheet.SEED_ICECAP; plantClass = Icecap.class; diff --git a/src/com/watabou/pixeldungeon/plants/Plant.java b/src/com/watabou/pixeldungeon/plants/Plant.java index 4e0df3d43c..09983bbb78 100644 --- a/src/com/watabou/pixeldungeon/plants/Plant.java +++ b/src/com/watabou/pixeldungeon/plants/Plant.java @@ -19,9 +19,11 @@ import java.util.ArrayList; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Barkskin; import com.watabou.pixeldungeon.actors.buffs.Buff; @@ -94,9 +96,9 @@ public String desc() { public static class Seed extends Item { - public static final String AC_PLANT = "PLANT"; - - private static final String TXT_INFO = "Throw this seed to the place where you want to grow %s.\n\n%s"; + public static final String AC_PLANT = Game.getVar(R.string.Plant_ACPlant); + private static final String TXT_INFO = Game.getVar(R.string.Plant_Info); + protected static final String TXT_SEED = Game.getVar(R.string.Plant_Seed); private static final float TIME_TO_PLANT = 1f; diff --git a/src/com/watabou/pixeldungeon/plants/Rotberry.java b/src/com/watabou/pixeldungeon/plants/Rotberry.java new file mode 100644 index 0000000000..f113888791 --- /dev/null +++ b/src/com/watabou/pixeldungeon/plants/Rotberry.java @@ -0,0 +1,86 @@ +package com.watabou.pixeldungeon.plants; + +import com.watabou.noosa.Game; +import com.watabou.noosa.audio.Sample; +import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.actors.Char; +import com.watabou.pixeldungeon.actors.blobs.Blob; +import com.watabou.pixeldungeon.actors.blobs.ToxicGas; +import com.watabou.pixeldungeon.actors.buffs.Buff; +import com.watabou.pixeldungeon.actors.buffs.Roots; +import com.watabou.pixeldungeon.actors.mobs.Mob; +import com.watabou.pixeldungeon.effects.CellEmitter; +import com.watabou.pixeldungeon.effects.Speck; +import com.watabou.pixeldungeon.items.bags.Bag; +import com.watabou.pixeldungeon.items.potions.PotionOfStrength; +import com.watabou.pixeldungeon.scenes.GameScene; +import com.watabou.pixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.pixeldungeon.utils.GLog; + +public class Rotberry extends Plant { + + private static final String TXT_NAME = Game.getVar(R.string.Rotberry_Name); + private static final String TXT_DESC = Game.getVar(R.string.Rotberry_Desc); + + { + image = 7; + plantName = TXT_NAME; + } + + @Override + public void activate( Char ch ) { + super.activate( ch ); + + GameScene.add( Blob.seed( pos, 100, ToxicGas.class ) ); + + Dungeon.level.drop( new Seed(), pos ).sprite.drop(); + + if (ch != null) { + Buff.prolong( ch, Roots.class, Roots.TICK * 3 ); + } + } + + @Override + public String desc() { + return TXT_DESC; + } + + public static class Seed extends Plant.Seed { + { + plantName = TXT_NAME; + + name = String.format(TXT_SEED, plantName); + image = ItemSpriteSheet.SEED_ROTBERRY; + + plantClass = Rotberry.class; + alchemyClass = PotionOfStrength.class; + } + + @Override + public boolean collect( Bag container ) { + if (super.collect( container )) { + + if (Dungeon.level != null) { + for (Mob mob : Dungeon.level.mobs) { + mob.beckon( Dungeon.hero.pos ); + } + + GLog.w( Game.getVar(R.string.Rotberry_Info) ); + CellEmitter.center( Dungeon.hero.pos ).start( Speck.factory( Speck.SCREAM ), 0.3f, 3 ); + Sample.INSTANCE.play( Assets.SND_CHALLENGE ); + } + + return true; + } else { + return false; + } + } + + @Override + public String desc() { + return TXT_DESC; + } + } +} \ No newline at end of file diff --git a/src/com/watabou/pixeldungeon/plants/Sorrowmoss.java b/src/com/watabou/pixeldungeon/plants/Sorrowmoss.java index e6626ebadf..9255415791 100644 --- a/src/com/watabou/pixeldungeon/plants/Sorrowmoss.java +++ b/src/com/watabou/pixeldungeon/plants/Sorrowmoss.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.plants; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.buffs.Poison; @@ -28,12 +30,12 @@ public class Sorrowmoss extends Plant { - private static final String TXT_DESC = - "A Sorrowmoss is a flower (not a moss) with razor-sharp petals, coated with a deadly venom."; + private static final String TXT_NAME = Game.getVar(R.string.Sorrowmoss_Name); + private static final String TXT_DESC = Game.getVar(R.string.Sorrowmoss_Desc); { image = 2; - plantName = "Sorrowmoss"; + plantName = TXT_NAME; } @Override @@ -56,9 +58,9 @@ public String desc() { public static class Seed extends Plant.Seed { { - plantName = "Sorrowmoss"; + plantName = TXT_NAME; - name = "seed of " + plantName; + name = String.format(TXT_SEED, plantName); image = ItemSpriteSheet.SEED_SORROWMOSS; plantClass = Sorrowmoss.class; diff --git a/src/com/watabou/pixeldungeon/plants/Sungrass.java b/src/com/watabou/pixeldungeon/plants/Sungrass.java index a3b6b6b4ce..9a52eeaf30 100644 --- a/src/com/watabou/pixeldungeon/plants/Sungrass.java +++ b/src/com/watabou/pixeldungeon/plants/Sungrass.java @@ -17,7 +17,9 @@ */ package com.watabou.pixeldungeon.plants; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.effects.CellEmitter; @@ -30,11 +32,12 @@ public class Sungrass extends Plant { - private static final String TXT_DESC = "Sungrass is renowned for its sap's healing properties."; + private static final String TXT_NAME = Game.getVar(R.string.Sungrass_Name); + private static final String TXT_DESC = Game.getVar(R.string.Sungrass_Desc); { image = 4; - plantName = "Sungrass"; + plantName = TXT_NAME; } @Override @@ -57,9 +60,9 @@ public String desc() { public static class Seed extends Plant.Seed { { - plantName = "Sungrass"; + plantName = TXT_NAME; - name = "seed of " + plantName; + name = String.format(TXT_SEED, plantName); image = ItemSpriteSheet.SEED_SUNGRASS; plantClass = Sungrass.class; @@ -103,7 +106,7 @@ public int icon() { @Override public String toString() { - return "Herbal healing"; + return Game.getVar(R.string.Sungrass_Buff); } private static final String POS = "pos"; diff --git a/src/com/watabou/pixeldungeon/scenes/AboutScene.java b/src/com/watabou/pixeldungeon/scenes/AboutScene.java index b6de6de98b..a0b2e089d2 100644 --- a/src/com/watabou/pixeldungeon/scenes/AboutScene.java +++ b/src/com/watabou/pixeldungeon/scenes/AboutScene.java @@ -27,6 +27,7 @@ import com.watabou.noosa.Image; import com.watabou.noosa.TouchArea; import com.watabou.pixeldungeon.PixelDungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.effects.Flare; import com.watabou.pixeldungeon.ui.Archs; import com.watabou.pixeldungeon.ui.ExitButton; @@ -35,14 +36,11 @@ public class AboutScene extends PixelScene { - private static final String TXT = - "Code & graphics: Watabou\n" + - "Music: Cube_Code\n\n" + - "This game is inspired by Brian Walker's Brogue. " + - "Try it on Windows, Mac OS or Linux - it's awesome! ;)\n\n" + - "Please visit official website for additional info:"; - - private static final String LNK = "pixeldungeon.watabou.ru"; + private static final String TXT = Game.getVar(R.string.AboutScene_Txt); + private static final String LNK = Game.getVar(R.string.AboutScene_Lnk); + private static final String TRANSLATE = Game.getVar(R.string.AboutScene_Translate); + private static final String TRANSLATE_LNK = Game.getVar(R.string.AboutScene_TranslateLnk); + private static final String TRANSLATE_SND = Game.getVar(R.string.AboutScene_TranslateSnd); @Override public void create() { @@ -73,6 +71,37 @@ protected void onClick( Touch touch ) { } }; add( hotArea ); + + + BitmapTextMultiline txtTra = createMultiline( TRANSLATE, 8 ); + txtTra.maxWidth = Math.min( Camera.main.width, 120 ); + txtTra.measure(); + add( txtTra ); + + txtTra.x = link.x; + txtTra.y = link.y + (link.height()*2); + + BitmapTextMultiline lnkTra = createMultiline( TRANSLATE_LNK, 8 ); + lnkTra.maxWidth = Math.min( Camera.main.width, 120 ); + lnkTra.measure(); + lnkTra.hardlight( Window.TITLE_COLOR ); + add( lnkTra ); + + lnkTra.x = txtTra.x; + lnkTra.y = txtTra.y + txtTra.height(); + TouchArea traArea = new TouchArea( lnkTra ) { + @Override + protected void onClick( Touch touch ) { + Intent intent = new Intent( Intent.ACTION_SEND); + intent.setType("message/rfc822"); + intent.putExtra(Intent.EXTRA_EMAIL, new String[]{TRANSLATE_LNK} ); + intent.putExtra(Intent.EXTRA_SUBJECT, Game.getVar(R.string.app_name) ); + + Game.instance.startActivity( Intent.createChooser(intent, TRANSLATE_SND) ); + } + }; + add( traArea ); + Image wata = Icons.WATA.get(); wata.x = align( (Camera.main.width - wata.width) / 2 ); diff --git a/src/com/watabou/pixeldungeon/scenes/AmuletScene.java b/src/com/watabou/pixeldungeon/scenes/AmuletScene.java index ff934b566c..67a3bac2ae 100644 --- a/src/com/watabou/pixeldungeon/scenes/AmuletScene.java +++ b/src/com/watabou/pixeldungeon/scenes/AmuletScene.java @@ -23,6 +23,7 @@ import com.watabou.noosa.Image; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ResultDescriptions; import com.watabou.pixeldungeon.effects.Flare; import com.watabou.pixeldungeon.effects.Speck; @@ -31,19 +32,16 @@ public class AmuletScene extends PixelScene { - private static final String TXT_EXIT = "Let's call it a day"; - private static final String TXT_STAY = "I'm not done yet"; + private static final String TXT_EXIT = Game.getVar(R.string.AmuletScene_Exit); + private static final String TXT_STAY = Game.getVar(R.string.AmuletScene_Stay);; + private static final String TXT = Game.getVar(R.string.AmuletScene_Txt); private static final int WIDTH = 120; private static final int BTN_HEIGHT = 18; private static final float SMALL_GAP = 2; private static final float LARGE_GAP = 8; - private static final String TXT = - "You finally hold it in your hands, the Amulet of Yendor. Using its power " + - "you can take over the world or bring peace and prosperity to people or whatever. " + - "Anyway, your life will change forever and this game will end here. " + - "Or you can stay a mere mortal a little longer."; + public static boolean noText = false; diff --git a/src/com/watabou/pixeldungeon/scenes/BadgesScene.java b/src/com/watabou/pixeldungeon/scenes/BadgesScene.java index 5d839a0367..61fec479e4 100644 --- a/src/com/watabou/pixeldungeon/scenes/BadgesScene.java +++ b/src/com/watabou/pixeldungeon/scenes/BadgesScene.java @@ -17,31 +17,33 @@ */ package com.watabou.pixeldungeon.scenes; +import java.util.List; + import com.watabou.noosa.BitmapText; import com.watabou.noosa.Camera; import com.watabou.noosa.Game; -import com.watabou.noosa.NinePatch; +import com.watabou.noosa.Image; import com.watabou.noosa.audio.Music; +import com.watabou.noosa.audio.Sample; +import com.watabou.noosa.ui.Button; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; -import com.watabou.pixeldungeon.Chrome; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.PixelDungeon; +import com.watabou.pixeldungeon.effects.BadgeBanner; import com.watabou.pixeldungeon.ui.Archs; -import com.watabou.pixeldungeon.ui.BadgesList; import com.watabou.pixeldungeon.ui.ExitButton; -import com.watabou.pixeldungeon.ui.ScrollPane; import com.watabou.pixeldungeon.ui.Window; +import com.watabou.pixeldungeon.windows.WndBadge; import com.watabou.utils.Callback; +import com.watabou.utils.Random; public class BadgesScene extends PixelScene { - private static final String TXT_TITLE = "Your Badges"; - - private static final int MAX_PANE_WIDTH = 160; + private static final String TXT_TITLE = Game.getVar(R.string.BadgesScene_Title); @Override public void create() { - super.create(); Music.INSTANCE.play( Assets.THEME, true ); @@ -56,32 +58,38 @@ public void create() { archs.setSize( w, h ); add( archs ); - int pw = Math.min( MAX_PANE_WIDTH, w - 6 ); - int ph = h - 30; + int pw = (int)Math.min( w, (PixelDungeon.landscape() ? MIN_WIDTH_L : MIN_WIDTH_P) * 3 ) - 16; + int ph = (int)Math.min( h, (PixelDungeon.landscape() ? MIN_HEIGHT_L : MIN_HEIGHT_P) * 3 ) - 32; - NinePatch panel = Chrome.get( Chrome.Type.WINDOW ); - panel.size( pw, ph ); - panel.x = (w - pw) / 2; - panel.y = (h - ph) / 2; - add( panel ); + float size = (float)Math.sqrt( pw * ph / 27f ); + int nCols = (int)Math.ceil( pw / size ); + int nRows = (int)Math.ceil( ph / size ); + size = Math.min( pw / nCols, ph / nRows ); + + float left = (w - size * nCols) / 2; + float top = (h - size * nRows) / 2; BitmapText title = PixelScene.createText( TXT_TITLE, 9 ); title.hardlight( Window.TITLE_COLOR ); title.measure(); title.x = align( (w - title.width()) / 2 ); - title.y = align( (panel.y - title.baseLine()) / 2 ); + title.y = align( (top - title.baseLine()) / 2 ); add( title ); Badges.loadGlobal(); - ScrollPane list = new BadgesList( true ); - add( list ); - - list.setRect( - panel.x + panel.marginLeft(), - panel.y + panel.marginTop(), - panel.innerWidth(), - panel.innerHeight() ); + List badges = Badges.filtered( true ); + for (int i=0; i < nRows; i++) { + for (int j=0; j < nCols; j++) { + int index = i * nCols + j; + Badges.Badge b = index < badges.size() ? badges.get( index ) : null; + BadgeButton button = new BadgeButton( b ); + button.setPos( + left + j * size + (size - button.width()) / 2, + top + i * size + (size - button.height()) / 2); + add( button ); + } + } ExitButton btnExit = new ExitButton(); btnExit.setPos( Camera.main.width - btnExit.width(), 0 ); @@ -112,4 +120,46 @@ public void destroy() { protected void onBackPressed() { PixelDungeon.switchNoFade( TitleScene.class ); } + + private static class BadgeButton extends Button { + + private Badges.Badge badge; + + private Image icon; + + public BadgeButton( Badges.Badge badge ) { + super(); + + this.badge = badge; + active = (badge != null); + + icon = active ? BadgeBanner.image( badge.image ) : new Image( Assets.LOCKED ); + add(icon); + + setSize( icon.width(), icon.height() ); + } + + @Override + protected void layout() { + super.layout(); + + icon.x = align( x + (width - icon.width()) / 2 ); + icon.y = align( y + (height - icon.height()) / 2 ); + } + + @Override + public void update() { + super.update(); + + if (Random.Float() < Game.elapsed * 0.1) { + BadgeBanner.highlight( icon, badge.image ); + } + } + + @Override + protected void onClick() { + Sample.INSTANCE.play( Assets.SND_CLICK, 0.7f, 0.7f, 1.2f ); + Game.scene().add( new WndBadge( badge ) ); + } + } } diff --git a/src/com/watabou/pixeldungeon/scenes/GameScene.java b/src/com/watabou/pixeldungeon/scenes/GameScene.java index 881fc94ee5..7f9e35fa64 100644 --- a/src/com/watabou/pixeldungeon/scenes/GameScene.java +++ b/src/com/watabou/pixeldungeon/scenes/GameScene.java @@ -34,6 +34,7 @@ import com.watabou.pixeldungeon.DungeonTilemap; import com.watabou.pixeldungeon.FogOfWar; import com.watabou.pixeldungeon.PixelDungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.blobs.Blob; @@ -77,14 +78,14 @@ public class GameScene extends PixelScene { - private static final String TXT_WELCOME = "Welcome to the level %d of Pixel Dungeon!"; - private static final String TXT_WELCOME_BACK = "Welcome back to the level %d of Pixel Dungeon!"; - private static final String TXT_NIGHT_MODE = "Be cautious, since the dungeon is even more dangerous at night!"; + private static final String TXT_WELCOME = Game.getVar(R.string.GameScene_Welcome); + private static final String TXT_WELCOME_BACK = Game.getVar(R.string.GameScene_WelcomeBack); + private static final String TXT_NIGHT_MODE = Game.getVar(R.string.GameScene_NightMode); - private static final String TXT_CHASM = "Your steps echo across the dungeon."; - private static final String TXT_WATER = "You hear the water splashing around you."; - private static final String TXT_GRASS = "The smell of vegetation is thick in the air."; - private static final String TXT_SECRETS = "The atmosphere hints that this floor hides many secrets."; + private static final String TXT_CHASM = Game.getVar(R.string.GameScene_Chasm); + private static final String TXT_WATER = Game.getVar(R.string.GameScene_Water); + private static final String TXT_GRASS = Game.getVar(R.string.GameScene_Grass); + private static final String TXT_SECRETS = Game.getVar(R.string.GameScene_Secrets); static GameScene scene; @@ -116,17 +117,17 @@ public class GameScene extends PixelScene { @Override public void create() { - Music.INSTANCE.play( Assets.TUNE, true ); Music.INSTANCE.volume( 1f ); PixelDungeon.lastClass( Dungeon.hero.heroClass.ordinal() ); - super.create(); + super.create(); + Camera.main.zoom( defaultZoom + PixelDungeon.zoom() ); scene = this; - + terrain = new Group(); add( terrain ); @@ -160,7 +161,6 @@ public void create() { addHeapSprite( Dungeon.level.heaps.valueAt( i ) ); } - emitters = new Group(); effects = new Group(); emoicons = new Group(); @@ -205,7 +205,6 @@ public void create() { hero.updateArmor(); mobs.add( hero ); - add( new HealthIndicator() ); add( cellSelector = new CellSelector( tiles ) ); @@ -232,32 +231,6 @@ public void create() { log.setRect( 0, toolbar.top(), attack.left(), 0 ); add( log ); - if (Dungeon.depth < Statistics.deepestFloor) { - GLog.i( TXT_WELCOME_BACK, Dungeon.depth ); - } else { - GLog.i( TXT_WELCOME, Dungeon.depth ); - Sample.INSTANCE.play( Assets.SND_DESCEND ); - } - switch (Dungeon.level.feeling) { - case CHASM: - GLog.w( TXT_CHASM ); - break; - case WATER: - GLog.w( TXT_WATER ); - break; - case GRASS: - GLog.w( TXT_GRASS ); - break; - default: - } - if (Dungeon.level instanceof RegularLevel && - ((RegularLevel)Dungeon.level).secretDoors > Random.IntRange( 3, 4 )) { - GLog.w( TXT_SECRETS ); - } - if (Dungeon.nightMode && !Dungeon.bossLevel()) { - GLog.w( TXT_NIGHT_MODE ); - } - busy = new BusyIndicator(); busy.camera = uiCamera; busy.x = 1; @@ -316,7 +289,38 @@ public void create() { } Camera.main.target = hero; - fadeIn(); + + if (InterlevelScene.mode != InterlevelScene.Mode.NONE) { + if (Dungeon.depth < Statistics.deepestFloor) { + GLog.h( TXT_WELCOME_BACK, Dungeon.depth ); + } else { + GLog.h( TXT_WELCOME, Dungeon.depth ); + Sample.INSTANCE.play( Assets.SND_DESCEND ); + } + switch (Dungeon.level.feeling) { + case CHASM: + GLog.w( TXT_CHASM ); + break; + case WATER: + GLog.w( TXT_WATER ); + break; + case GRASS: + GLog.w( TXT_GRASS ); + break; + default: + } + if (Dungeon.level instanceof RegularLevel && + ((RegularLevel) Dungeon.level).secretDoors > Random.IntRange( 3, 4 )) { + GLog.w( TXT_SECRETS ); + } + if (Dungeon.nightMode && !Dungeon.bossLevel()) { + GLog.w( TXT_NIGHT_MODE ); + } + + InterlevelScene.mode = InterlevelScene.Mode.NONE; + + fadeIn(); + } } public void destroy() { diff --git a/src/com/watabou/pixeldungeon/scenes/InterlevelScene.java b/src/com/watabou/pixeldungeon/scenes/InterlevelScene.java index 4ded60b4be..1249c19e91 100644 --- a/src/com/watabou/pixeldungeon/scenes/InterlevelScene.java +++ b/src/com/watabou/pixeldungeon/scenes/InterlevelScene.java @@ -30,25 +30,27 @@ import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.items.Generator; import com.watabou.pixeldungeon.levels.Level; +import com.watabou.pixeldungeon.ui.GameLog; import com.watabou.pixeldungeon.windows.WndError; import com.watabou.pixeldungeon.windows.WndStory; +import com.watabou.pixeldungeon.R; public class InterlevelScene extends PixelScene { private static final float TIME_TO_FADE = 0.3f; - private static final String TXT_DESCENDING = "Descending..."; - private static final String TXT_ASCENDING = "Ascending..."; - private static final String TXT_LOADING = "Loading..."; - private static final String TXT_RESURRECTING= "Resurrecting..."; - private static final String TXT_RETURNING = "Returning..."; - private static final String TXT_FALLING = "Falling..."; + private static final String TXT_DESCENDING = Game.getVar(R.string.InterLevelScene_Descending); + private static final String TXT_ASCENDING = Game.getVar(R.string.InterLevelScene_Ascending); + private static final String TXT_LOADING = Game.getVar(R.string.InterLevelScene_Loading); + private static final String TXT_RESURRECTING = Game.getVar(R.string.InterLevelScene_Resurrecting); + private static final String TXT_RETURNING = Game.getVar(R.string.InterLevelScene_Returning); + private static final String TXT_FALLING = Game.getVar(R.string.InterLevelScene_Falling); - private static final String ERR_FILE_NOT_FOUND = "File not found. For some reason."; - private static final String ERR_GENERIC = "Something went wrong..." ; + private static final String ERR_FILE_NOT_FOUND = Game.getVar(R.string.InterLevelScene_FileNotFound); + private static final String ERR_GENERIC = Game.getVar(R.string.InterLevelScene_ErrorGeneric); public static enum Mode { - DESCEND, ASCEND, CONTINUE, RESURRECT, RETURN, FALL + DESCEND, ASCEND, CONTINUE, RESURRECT, RETURN, FALL, NONE }; public static Mode mode; @@ -94,6 +96,7 @@ public void create() { case FALL: text = TXT_FALLING; break; + default: } message = PixelScene.createText( text, 9 ); @@ -113,8 +116,6 @@ public void run() { Generator.reset(); - - switch (mode) { case DESCEND: descend(); @@ -134,6 +135,7 @@ public void run() { case FALL: fall(); break; + default: } if ((Dungeon.depth % 5) == 0) { @@ -212,6 +214,7 @@ private void descend() throws Exception { Dungeon.chapters.add( WndStory.ID_SEWERS ); noStory = false; } + GameLog.wipe(); } else { Dungeon.saveLevel(); } @@ -264,6 +267,8 @@ private void restore() throws Exception { Actor.fixTime(); + GameLog.wipe(); + Dungeon.loadGame( StartScene.curClass ); if (Dungeon.depth == -1) { Dungeon.depth = Statistics.deepestFloor; diff --git a/src/com/watabou/pixeldungeon/scenes/IntroScene.java b/src/com/watabou/pixeldungeon/scenes/IntroScene.java index fe78128cd2..6b0ee7bccb 100644 --- a/src/com/watabou/pixeldungeon/scenes/IntroScene.java +++ b/src/com/watabou/pixeldungeon/scenes/IntroScene.java @@ -18,23 +18,18 @@ package com.watabou.pixeldungeon.scenes; import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.windows.WndStory; public class IntroScene extends PixelScene { - private static final String TEXT = - "Many heroes of all kinds ventured into the Dungeon before you. Some of them have returned with treasures and magical " + - "artifacts, most have never been heard of since. But none have succeeded in retrieving the Amulet of Yendor, " + - "which is told to be hidden in the depths of the Dungeon.\n\n" + - "" + - "You consider yourself ready for the challenge, but most importantly, you feel that fortune smiles on you. " + - "It's time to start your own adventure!"; + private static final String TXT = Game.getVar(R.string.IntroScene_Txt); @Override public void create() { super.create(); - add( new WndStory( TEXT ) { + add( new WndStory( TXT ) { @Override public void hide() { super.hide(); diff --git a/src/com/watabou/pixeldungeon/scenes/PixelScene.java b/src/com/watabou/pixeldungeon/scenes/PixelScene.java index c1f483196e..20326a80de 100644 --- a/src/com/watabou/pixeldungeon/scenes/PixelScene.java +++ b/src/com/watabou/pixeldungeon/scenes/PixelScene.java @@ -116,19 +116,19 @@ public void create() { // 6x10 (12) font2x = Font.colorMarked( - BitmapCache.get( Assets.FONTS2X ), 14, 0x00000000, BitmapText.Font.LATIN_FULL ); + BitmapCache.get( Assets.FONTS2X ), 14, 0x00000000, BitmapText.Font.ALL_CHARS); font2x.baseLine = 11; font2x.tracking = -1; // 7x12 (15) font25x = Font.colorMarked( - BitmapCache.get( Assets.FONTS25X ), 17, 0x00000000, BitmapText.Font.LATIN_FULL ); + BitmapCache.get( Assets.FONTS25X ), 17, 0x00000000, BitmapText.Font.ALL_CHARS); font25x.baseLine = 13; font25x.tracking = -1; // 9x15 (18) font3x = Font.colorMarked( - BitmapCache.get( Assets.FONTS3X ), 22, 0x00000000, BitmapText.Font.LATIN_FULL ); + BitmapCache.get( Assets.FONTS3X ), 22, 0x00000000, BitmapText.Font.ALL_CHARS); font3x.baseLine = 17; font3x.tracking = -2; } diff --git a/src/com/watabou/pixeldungeon/scenes/RankingsScene.java b/src/com/watabou/pixeldungeon/scenes/RankingsScene.java index 8850ad647a..ef4fbfbed2 100644 --- a/src/com/watabou/pixeldungeon/scenes/RankingsScene.java +++ b/src/com/watabou/pixeldungeon/scenes/RankingsScene.java @@ -20,10 +20,12 @@ import com.watabou.noosa.BitmapText; import com.watabou.noosa.BitmapTextMultiline; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.noosa.Image; import com.watabou.noosa.audio.Music; import com.watabou.noosa.ui.Button; import com.watabou.pixeldungeon.Assets; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.PixelDungeon; import com.watabou.pixeldungeon.Rankings; import com.watabou.pixeldungeon.effects.Flare; @@ -40,11 +42,11 @@ public class RankingsScene extends PixelScene { private static final int DEFAULT_COLOR = 0xCCCCCC; - private static final String TXT_TITLE = "Top Rankings"; - private static final String TXT_TOTAL = "Games played: "; - private static final String TXT_NO_GAMES = "No games have been played yet."; + private static final String TXT_TITLE = Game.getVar(R.string.RankingsScene_Title); + private static final String TXT_TOTAL = Game.getVar(R.string.RankingsScene_Total); + private static final String TXT_NO_GAMES = Game.getVar(R.string.RankingsScene_NoGames); - private static final String TXT_NO_INFO = "No additional information"; + private static String TXT_NO_INFO = Game.getVar(R.string.RankingsScene_NoInfo); private static final float ROW_HEIGHT_L = 22; private static final float ROW_HEIGHT_P = 28; @@ -57,7 +59,6 @@ public class RankingsScene extends PixelScene { @Override public void create() { - super.create(); Music.INSTANCE.play( Assets.THEME, true ); diff --git a/src/com/watabou/pixeldungeon/scenes/StartScene.java b/src/com/watabou/pixeldungeon/scenes/StartScene.java index e924a09d36..c0f08c18ed 100644 --- a/src/com/watabou/pixeldungeon/scenes/StartScene.java +++ b/src/com/watabou/pixeldungeon/scenes/StartScene.java @@ -18,6 +18,7 @@ package com.watabou.pixeldungeon.scenes; import java.util.HashMap; +import java.util.Locale; import com.watabou.noosa.BitmapText; import com.watabou.noosa.BitmapTextMultiline; @@ -26,6 +27,7 @@ import com.watabou.noosa.Group; import com.watabou.noosa.Image; import com.watabou.noosa.audio.Sample; +import com.watabou.noosa.particles.BitmaskEmitter; import com.watabou.noosa.particles.Emitter; import com.watabou.noosa.ui.Button; import com.watabou.pixeldungeon.Assets; @@ -33,10 +35,11 @@ import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.GamesInProgress; import com.watabou.pixeldungeon.PixelDungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.HeroClass; import com.watabou.pixeldungeon.effects.BannerSprites; -import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.effects.BannerSprites.Type; +import com.watabou.pixeldungeon.effects.Speck; import com.watabou.pixeldungeon.ui.Archs; import com.watabou.pixeldungeon.ui.ExitButton; import com.watabou.pixeldungeon.ui.Icons; @@ -52,22 +55,21 @@ public class StartScene extends PixelScene { private static final float BUTTON_HEIGHT = 24; private static final float GAP = 2; + + private static final String TXT_LOAD = Game.getVar(R.string.StartScene_Load); + private static final String TXT_NEW = Game.getVar(R.string.StartScene_New); - private static final String TXT_LOAD = "Load Game"; - private static final String TXT_NEW = "New Game"; - - private static final String TXT_ERASE = "Erase current game"; - private static final String TXT_DPTH_LVL = "Depth: %d, level: %d"; + private static final String TXT_ERASE = Game.getVar(R.string.StartScene_Erase); + private static final String TXT_DPTH_LVL = Game.getVar(R.string.StartScene_Depth); - private static final String TXT_REALLY = "Do you really want to start new game?"; - private static final String TXT_WARNING = "Your current game progress will be erased."; - private static final String TXT_YES = "Yes, start new game"; - private static final String TXT_NO = "No, return to main menu"; + private static final String TXT_REALLY = Game.getVar(R.string.StartScene_Really); + private static final String TXT_WARNING = Game.getVar(R.string.StartScene_Warning); + private static final String TXT_YES = Game.getVar(R.string.StartScene_Yes); + private static final String TXT_NO = Game.getVar(R.string.StartScene_No); - private static final String TXT_UNLOCK = "To unlock this character class, slay the 3rd boss with any other class"; + private static final String TXT_UNLOCK = Game.getVar(R.string.StartScene_Unlock); - private static final String TXT_WIN_THE_GAME = - "To unlock \"Challenges\", win the game with any character class."; + private static final String TXT_WIN_THE_GAME = Game.getVar(R.string.StartScene_WinGame); private static final float WIDTH_P = 116; private static final float HEIGHT_P = 220; @@ -90,7 +92,6 @@ public class StartScene extends PixelScene { @Override public void create() { - super.create(); Badges.loadGlobal(); @@ -398,7 +399,8 @@ public ClassShield( HeroClass cl ) { highlighted = BASIC_HIGHLIGHTED; } - name.text( cl.name() ); + //name.text( cl.name() );//Adjusted to load the translated names as each player class + name.text( cl.title().toUpperCase(Locale.getDefault()) ); name.measure(); name.hardlight( normal ); @@ -417,7 +419,7 @@ protected void createChildren() { name = PixelScene.createText( 9 ); add( name ); - emitter = new Emitter(); + emitter = new BitmaskEmitter( avatar ); add( emitter ); } @@ -431,8 +433,6 @@ protected void layout() { name.x = align( x + (width - name.width()) / 2 ); name.y = avatar.y + avatar.height() + SCALE; - - emitter.pos( avatar.x, avatar.y, avatar.width(), avatar.height() ); } @Override diff --git a/src/com/watabou/pixeldungeon/scenes/TitleScene.java b/src/com/watabou/pixeldungeon/scenes/TitleScene.java index 2914aa3c78..bc2fe10dce 100644 --- a/src/com/watabou/pixeldungeon/scenes/TitleScene.java +++ b/src/com/watabou/pixeldungeon/scenes/TitleScene.java @@ -35,17 +35,17 @@ import com.watabou.pixeldungeon.ui.Archs; import com.watabou.pixeldungeon.ui.ExitButton; import com.watabou.pixeldungeon.ui.PrefsButton; +import com.watabou.pixeldungeon.R; public class TitleScene extends PixelScene { - private static final String TXT_PLAY = "Play"; - private static final String TXT_HIGHSCORES = "Rankings"; - private static final String TXT_BADGES = "Badges"; - private static final String TXT_ABOUT = "About"; + private static final String TXT_PLAY = Game.getVar(R.string.TitleScene_Play); + private static final String TXT_HIGHSCORES = Game.getVar(R.string.TitleScene_Highscores); + private static final String TXT_BADGES = Game.getVar(R.string.TitleScene_Badges); + private static final String TXT_ABOUT = Game.getVar(R.string.TitleScene_About); @Override public void create() { - super.create(); Music.INSTANCE.play( Assets.THEME, true ); diff --git a/src/com/watabou/pixeldungeon/sprites/CursePersonificationSprite.java b/src/com/watabou/pixeldungeon/sprites/CursePersonificationSprite.java new file mode 100644 index 0000000000..51c75f9ddd --- /dev/null +++ b/src/com/watabou/pixeldungeon/sprites/CursePersonificationSprite.java @@ -0,0 +1,55 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.sprites; + +import com.watabou.noosa.particles.Emitter; +import com.watabou.pixeldungeon.actors.Char; +import com.watabou.pixeldungeon.effects.particles.ShadowParticle; + +public class CursePersonificationSprite extends WraithSprite { + + private Emitter cloud; + + @Override + public void link( Char ch ) { + super.link( ch ); + + if (cloud == null) { + cloud = emitter(); + cloud.pour( ShadowParticle.UP, 0.1f ); + } + } + + @Override + public void update() { + + super.update(); + + if (cloud != null) { + cloud.visible = visible; + } + } + + @Override + public void kill() { + super.kill(); + if (cloud != null) { + cloud.on = false; + } + } +} diff --git a/src/com/watabou/pixeldungeon/sprites/HeroSprite.java b/src/com/watabou/pixeldungeon/sprites/HeroSprite.java index e441b7772e..2e68494ed4 100644 --- a/src/com/watabou/pixeldungeon/sprites/HeroSprite.java +++ b/src/com/watabou/pixeldungeon/sprites/HeroSprite.java @@ -40,6 +40,7 @@ public class HeroSprite extends CharSprite { private static TextureFilm tiers; private Animation fly; + private Animation read; public HeroSprite() { super(); @@ -75,6 +76,9 @@ public void updateArmor() { fly = new Animation( 1, true ); fly.frames( film, 18 ); + + read = new Animation( 20, false ); + read.frames( film, 19, 20, 20, 20, 20, 20, 20, 20, 20, 19 ); } @Override @@ -98,6 +102,17 @@ public void jump( int from, int to, Callback callback ) { play( fly ); } + public void read() { + animCallback = new Callback() { + @Override + public void call() { + idle(); + ch.onOperateComplete(); + } + }; + play( read ); + } + @Override public void update() { sleeping = ((Hero)ch).restoreHealth; diff --git a/src/com/watabou/pixeldungeon/sprites/ItemSprite.java b/src/com/watabou/pixeldungeon/sprites/ItemSprite.java index f339b6ba29..d751e8210d 100644 --- a/src/com/watabou/pixeldungeon/sprites/ItemSprite.java +++ b/src/com/watabou/pixeldungeon/sprites/ItemSprite.java @@ -213,6 +213,7 @@ public static class Glowing { public static final Glowing WHITE = new Glowing( 0xFFFFFF, 0.6f ); + public int color; public float red; public float green; public float blue; @@ -223,6 +224,9 @@ public Glowing( int color ) { } public Glowing( int color, float period ) { + + this.color = color; + red = (color >> 16) / 255f; green = ((color >> 8) & 0xFF) / 255f; blue = (color & 0xFF) / 255f; diff --git a/src/com/watabou/pixeldungeon/sprites/ItemSpriteSheet.java b/src/com/watabou/pixeldungeon/sprites/ItemSpriteSheet.java index 1ca4fe163d..e9f0ed8e21 100644 --- a/src/com/watabou/pixeldungeon/sprites/ItemSpriteSheet.java +++ b/src/com/watabou/pixeldungeon/sprites/ItemSpriteSheet.java @@ -119,6 +119,7 @@ public class ItemSpriteSheet { public static final int SCROLL_BERKANAN = 77; public static final int SCROLL_ODAL = 78; public static final int SCROLL_TIWAZ = 79; + public static final int SCROLL_WIPE_OUT = 117; // Seeds public static final int SEED_FIREBLOOM = 88; @@ -135,6 +136,7 @@ public class ItemSpriteSheet { public static final int PICKAXE = 101; public static final int ORE = 102; public static final int SKULL = 103; + public static final int PHANTOM = 118; public static final int DUST = 121; public static final int TOKEN = 122; @@ -144,6 +146,7 @@ public class ItemSpriteSheet { public static final int LOCKED_CHEST = 12; public static final int TOMB = 13; public static final int CRYSTAL_CHEST = 105; + public static final int HIDDEN = 119; // Food public static final int RATION = 4; diff --git a/src/com/watabou/pixeldungeon/sprites/ShopkeeperSprite.java b/src/com/watabou/pixeldungeon/sprites/ShopkeeperSprite.java index 50c844a29a..2f819a7caa 100644 --- a/src/com/watabou/pixeldungeon/sprites/ShopkeeperSprite.java +++ b/src/com/watabou/pixeldungeon/sprites/ShopkeeperSprite.java @@ -34,8 +34,10 @@ public ShopkeeperSprite() { idle = new Animation( 10, true ); idle.frames( film, 1, 1, 1, 1, 1, 0, 0, 0, 0 ); + die = new Animation( 20, false ); + die.frames( film, 0 ); + run = idle.clone(); - die = idle.clone(); attack = idle.clone(); idle(); diff --git a/src/com/watabou/pixeldungeon/sprites/WandmakerSprite.java b/src/com/watabou/pixeldungeon/sprites/WandmakerSprite.java index ed837a2a4d..9d59129105 100644 --- a/src/com/watabou/pixeldungeon/sprites/WandmakerSprite.java +++ b/src/com/watabou/pixeldungeon/sprites/WandmakerSprite.java @@ -23,6 +23,7 @@ import com.watabou.noosa.Game; import com.watabou.noosa.TextureFilm; +import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.effects.Halo; @@ -69,6 +70,10 @@ public void die() { shield.putOut(); } emitter().start( ElmoParticle.FACTORY, 0.03f, 60 ); + + if (visible) { + Sample.INSTANCE.play( Assets.SND_BURNING ); + } } public class Shield extends Halo { diff --git a/src/com/watabou/pixeldungeon/ui/Archs.java b/src/com/watabou/pixeldungeon/ui/Archs.java index 1749980ba1..353f1c10ae 100644 --- a/src/com/watabou/pixeldungeon/ui/Archs.java +++ b/src/com/watabou/pixeldungeon/ui/Archs.java @@ -37,10 +37,12 @@ public class Archs extends Component { @Override protected void createChildren() { arcsBg = new SkinnedBlock( 1, 1, Assets.ARCS_BG ); + arcsBg.autoAdjust = true; arcsBg.offsetTo( 0, offsB ); add( arcsBg ); arcsFg = new SkinnedBlock( 1, 1, Assets.ARCS_FG ); + arcsFg.autoAdjust = true; arcsFg.offsetTo( 0, offsF ); add( arcsFg ); } diff --git a/src/com/watabou/pixeldungeon/ui/BadgesList.java b/src/com/watabou/pixeldungeon/ui/BadgesList.java index 40031982d8..06f0f4f211 100644 --- a/src/com/watabou/pixeldungeon/ui/BadgesList.java +++ b/src/com/watabou/pixeldungeon/ui/BadgesList.java @@ -51,8 +51,6 @@ public BadgesList( boolean global ) { @Override protected void layout() { - super.layout(); - float pos = 0; int size = items.size(); @@ -62,6 +60,8 @@ protected void layout() { } content.setSize( width, pos ); + + super.layout(); } @Override diff --git a/src/com/watabou/pixeldungeon/ui/BuffIndicator.java b/src/com/watabou/pixeldungeon/ui/BuffIndicator.java index c3b186822a..fe682a8bc4 100644 --- a/src/com/watabou/pixeldungeon/ui/BuffIndicator.java +++ b/src/com/watabou/pixeldungeon/ui/BuffIndicator.java @@ -63,6 +63,8 @@ public class BuffIndicator extends Component { public static final int MARK = 27; public static final int DEFERRED = 28; public static final int VERTIGO = 29; + public static final int RAGE = 30; + public static final int SACRIFICE = 31; public static final int SIZE = 7; diff --git a/src/com/watabou/pixeldungeon/ui/GameLog.java b/src/com/watabou/pixeldungeon/ui/GameLog.java index 9b2230bbdc..fae6970439 100644 --- a/src/com/watabou/pixeldungeon/ui/GameLog.java +++ b/src/com/watabou/pixeldungeon/ui/GameLog.java @@ -17,6 +17,7 @@ */ package com.watabou.pixeldungeon.ui; +import java.util.ArrayList; import java.util.regex.Pattern; import com.watabou.noosa.BitmapTextMultiline; @@ -29,18 +30,28 @@ public class GameLog extends Component implements Signal.Listener { - private static final int MAX_MESSAGES = 3; + private static final int MAX_LINES = 3; private static final Pattern PUNCTUATION = Pattern.compile( ".*[.,;?! ]$" ); private BitmapTextMultiline lastEntry; private int lastColor; + + private static ArrayList entries = new ArrayList(); public GameLog() { super(); GLog.update.add( this ); - - newLine(); + + recreateLines(); + } + + private void recreateLines() { + for (Entry entry : entries) { + lastEntry = PixelScene.createMultiline( entry.text, 6 ); + lastEntry.hardlight( lastColor = entry.color ); + add( lastEntry ); + } } public void newLine() { @@ -71,25 +82,42 @@ public void onSignal( String text ) { text = Utils.capitalize( text ) + (PUNCTUATION.matcher( text ).matches() ? "" : "."); - if (lastEntry != null && color == lastColor) { + if (lastEntry != null && color == lastColor && lastEntry.nLines < MAX_LINES) { String lastMessage = lastEntry.text(); lastEntry.text( lastMessage.length() == 0 ? text : lastMessage + " " + text ); lastEntry.measure(); + + entries.get( Math.max(entries.size() - 1, 0) ).text = lastEntry.text(); } else { lastEntry = PixelScene.createMultiline( text, 6 ); - lastEntry.maxWidth = (int)width; - lastEntry.measure(); lastEntry.hardlight( color ); lastColor = color; add( lastEntry ); + + entries.add( new Entry( text, color ) ); } - - if (length > MAX_MESSAGES) { - remove( members.get( 0 ) ); + + if (length > 0) { + int nLines; + do { + nLines = 0; + for (int i = 0; i < length; i++) { + nLines += ((BitmapTextMultiline) members.get(i)).nLines; + } + + if (nLines > MAX_LINES) { + remove(members.get(0)); + + entries.remove( 0 ); + } + } while (nLines > MAX_LINES); + if (entries.isEmpty()) { + lastEntry = null; + } } layout(); @@ -100,6 +128,8 @@ protected void layout() { float pos = y; for (int i=length-1; i >= 0; i--) { BitmapTextMultiline entry = (BitmapTextMultiline)members.get( i ); + entry.maxWidth = (int)width; + entry.measure(); entry.x = x; entry.y = pos - entry.height(); pos -= entry.height(); @@ -111,4 +141,17 @@ public void destroy() { GLog.update.remove( this ); super.destroy(); } -} + + private static class Entry { + public String text; + public int color; + public Entry( String text, int color ) { + this.text = text; + this.color = color; + } + } + + public static void wipe() { + entries.clear(); + } +} \ No newline at end of file diff --git a/src/com/watabou/pixeldungeon/ui/HighlightedText.java b/src/com/watabou/pixeldungeon/ui/HighlightedText.java new file mode 100644 index 0000000000..5ba285732e --- /dev/null +++ b/src/com/watabou/pixeldungeon/ui/HighlightedText.java @@ -0,0 +1,60 @@ +package com.watabou.pixeldungeon.ui; + +import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.ui.Component; +import com.watabou.pixeldungeon.scenes.PixelScene; +import com.watabou.utils.Highlighter; + +public class HighlightedText extends Component { + + protected BitmapTextMultiline normal; + protected BitmapTextMultiline highlighted; + + protected int nColor = 0xFFFFFF; + protected int hColor = 0xFFFF44; + + public HighlightedText( float size ) { + normal = PixelScene.createMultiline( size ); + add( normal ); + + highlighted = PixelScene.createMultiline( size ); + add( highlighted ); + + setColor( 0xFFFFFF, 0xFFFF44 ); + } + + @Override + protected void layout() { + normal.x = highlighted.x = x; + normal.y = highlighted.y = y; + } + + public void text( String value, int maxWidth ) { + Highlighter hl = new Highlighter( value ); + + normal.text( hl.text ); + normal.maxWidth = maxWidth; + normal.measure(); + + if (hl.isHighlighted()) { + normal.mask = hl.inverted(); + + highlighted.text( hl.text ); + highlighted.maxWidth = maxWidth; + highlighted.measure(); + + highlighted.mask = hl.mask; + highlighted.visible = true; + } else { + highlighted.visible = false; + } + + width = normal.width(); + height = normal.height(); + } + + public void setColor( int n, int h ) { + normal.hardlight( n ); + highlighted.hardlight( h ); + } +} diff --git a/src/com/watabou/pixeldungeon/ui/Icons.java b/src/com/watabou/pixeldungeon/ui/Icons.java index c31ad43370..13ceda7261 100644 --- a/src/com/watabou/pixeldungeon/ui/Icons.java +++ b/src/com/watabou/pixeldungeon/ui/Icons.java @@ -50,7 +50,8 @@ public enum Icons { EXIT, CHALLENGE_OFF, CHALLENGE_ON, - RESUME; + RESUME, + MASTERY; public Image get() { return get( this ); @@ -143,6 +144,9 @@ public static Image get( Icons type ) { case RESUME: icon.frame( icon.texture.uvRect( 114, 0, 126, 11 ) ); break; + case MASTERY: + icon.frame( icon.texture.uvRect( 16, 15, 29, 28 ) ); + break; } return icon; } diff --git a/src/com/watabou/pixeldungeon/ui/ItemSlot.java b/src/com/watabou/pixeldungeon/ui/ItemSlot.java index 59f99d86c1..ec88f7807a 100644 --- a/src/com/watabou/pixeldungeon/ui/ItemSlot.java +++ b/src/com/watabou/pixeldungeon/ui/ItemSlot.java @@ -162,7 +162,7 @@ public void item( Item item ) { if (level != 0 || (item.cursed && item.cursedKnown)) { bottomRight.text( item.levelKnown ? Utils.format( TXT_LEVEL, level ) : TXT_CURSED ); bottomRight.measure(); - bottomRight.hardlight( level > 0 ? UPGRADED : DEGRADED ); + bottomRight.hardlight( level > 0 ? (item.isBroken() ? WARNING : UPGRADED) : DEGRADED ); } else { bottomRight.text( null ); } diff --git a/src/com/watabou/pixeldungeon/ui/LootIndicator.java b/src/com/watabou/pixeldungeon/ui/LootIndicator.java index 383484d317..2e1f1f37c4 100644 --- a/src/com/watabou/pixeldungeon/ui/LootIndicator.java +++ b/src/com/watabou/pixeldungeon/ui/LootIndicator.java @@ -61,7 +61,7 @@ public void update() { if (Dungeon.hero.ready) { Heap heap = Dungeon.level.heaps.get( Dungeon.hero.pos ); - if (heap != null) { + if (heap != null && heap.type != Heap.Type.HIDDEN) { Item item = heap.type == Heap.Type.CHEST || heap.type == Heap.Type.MIMIC ? ItemSlot.CHEST : diff --git a/src/com/watabou/pixeldungeon/ui/QuickSlot.java b/src/com/watabou/pixeldungeon/ui/QuickSlot.java index e0a7504129..a9f5a348df 100644 --- a/src/com/watabou/pixeldungeon/ui/QuickSlot.java +++ b/src/com/watabou/pixeldungeon/ui/QuickSlot.java @@ -17,14 +17,18 @@ */ package com.watabou.pixeldungeon.ui; +import com.watabou.noosa.Game; import com.watabou.noosa.Image; import com.watabou.noosa.ui.Button; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.DungeonTilemap; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.Char; import com.watabou.pixeldungeon.actors.hero.Belongings; +import com.watabou.pixeldungeon.actors.mobs.Mob; import com.watabou.pixeldungeon.items.Item; +import com.watabou.pixeldungeon.mechanics.Ballistica; import com.watabou.pixeldungeon.scenes.GameScene; import com.watabou.pixeldungeon.scenes.PixelScene; import com.watabou.pixeldungeon.windows.WndBag; @@ -32,7 +36,7 @@ public class QuickSlot extends Button implements WndBag.Listener { - private static final String TXT_SELECT_ITEM = "Select an item for the quickslot"; + private static final String TXT_SELECT_ITEM = Game.getVar(R.string.QuickSlot_SelectedItem); private static QuickSlot primary; private static QuickSlot secondary; @@ -44,9 +48,8 @@ public class QuickSlot extends Button implements WndBag.Listener { private Image crossM; private boolean targeting = false; - private Item lastItem = null; - private Char lastTarget= null; - + + private static Char lastTarget= null; public static Object primaryValue; public static Object secondaryValue; @@ -70,7 +73,6 @@ public void destroy() { secondary = null; } - lastItem = null; lastTarget = null; } @@ -84,13 +86,8 @@ protected void onClick() { if (targeting) { GameScene.handleCell( lastTarget.pos ); } else { - Item item = select(); - if (item == lastItem) { - useTargeting(); - } else { - lastItem = item; - } - item.execute( Dungeon.hero ); + useTargeting(); + select().execute( Dungeon.hero ); } } @Override @@ -195,6 +192,27 @@ private void useTargeting() { targeting = lastTarget != null && lastTarget.isAlive() && Dungeon.visible[lastTarget.pos]; + if (targeting) { + int pos = Ballistica.cast( Dungeon.hero.pos, lastTarget.pos, false, true ); + if (pos != lastTarget.pos) { + lastTarget = null; + targeting = false; + } + } + + if (!targeting) { + int n = Dungeon.hero.visibleEnemies(); + for (int i=0; i < n; i++) { + Mob enemy = Dungeon.hero.visibleEnemy( i ); + int pos = Ballistica.cast( Dungeon.hero.pos, enemy.pos, false, true ); + if (pos == enemy.pos) { + lastTarget = enemy; + targeting = true; + break; + } + } + } + if (targeting) { if (Actor.all().contains( lastTarget )) { lastTarget.sprite.parent.add( crossM ); @@ -217,17 +235,8 @@ public static void refresh() { public static void target( Item item, Char target ) { if (target != Dungeon.hero) { - if (item == primary.lastItem) { - - primary.lastTarget = target; - HealthIndicator.instance.target( target ); - - } else if (item == secondary.lastItem) { - - secondary.lastTarget = target; - HealthIndicator.instance.target( target ); - - } + lastTarget = target; + HealthIndicator.instance.target( target ); } } diff --git a/src/com/watabou/pixeldungeon/ui/ResumeButton.java b/src/com/watabou/pixeldungeon/ui/ResumeButton.java index 2182903f9d..f7bba19b94 100644 --- a/src/com/watabou/pixeldungeon/ui/ResumeButton.java +++ b/src/com/watabou/pixeldungeon/ui/ResumeButton.java @@ -52,7 +52,7 @@ protected void layout() { @Override public void update() { boolean prevVisible = visible; - visible = (Dungeon.hero.lastAction != null); + visible = (Dungeon.hero.lastAction != null)&&Dungeon.hero.isAlive(); if (visible && !prevVisible) { flash(); } @@ -62,6 +62,8 @@ public void update() { @Override protected void onClick() { - Dungeon.hero.resume(); + if (Dungeon.hero.isAlive()){ + Dungeon.hero.resume(); + } } } diff --git a/src/com/watabou/pixeldungeon/ui/ScrollPane.java b/src/com/watabou/pixeldungeon/ui/ScrollPane.java index ec7198afa1..3279f3b880 100644 --- a/src/com/watabou/pixeldungeon/ui/ScrollPane.java +++ b/src/com/watabou/pixeldungeon/ui/ScrollPane.java @@ -19,6 +19,7 @@ import com.watabou.input.Touchscreen.Touch; import com.watabou.noosa.Camera; +import com.watabou.noosa.ColorBlock; import com.watabou.noosa.TouchArea; import com.watabou.noosa.ui.Component; import com.watabou.pixeldungeon.scenes.PixelScene; @@ -26,9 +27,13 @@ import com.watabou.utils.PointF; public class ScrollPane extends Component { - + + protected static final int THUMB_COLOR = 0xFF7b8073; + protected static final float THUMB_ALPHA = 0.5f; + protected TouchController controller; protected Component content; + protected ColorBlock thumb; protected float minX; protected float minY; @@ -62,6 +67,10 @@ public void scrollTo( float x, float y ) { protected void createChildren() { controller = new TouchController(); add( controller ); + + thumb = new ColorBlock( 1, 1,THUMB_COLOR ); + thumb.am = THUMB_ALPHA; + add( thumb ); } @Override @@ -78,6 +87,13 @@ protected void layout() { cs.x = p.x; cs.y = p.y; cs.resize( (int)width, (int)height ); + + thumb.visible = height < content.height(); + if (thumb.visible) { + thumb.scale.set( 2, height * height / content.height() ); + thumb.x = right() - thumb.width(); + thumb.y = y; + } } public Component content() { @@ -101,6 +117,7 @@ protected void onClick( Touch touch ) { if (dragging) { dragging = false; + thumb.am = THUMB_ALPHA; } else { @@ -133,6 +150,7 @@ protected void onDrag( Touch t ) { c.scroll.y = 0; } + thumb.y = y + height * c.scroll.y / content.height(); lastPos.set( t.current ); @@ -140,6 +158,7 @@ protected void onDrag( Touch t ) { dragging = true; lastPos.set( t.current ); + thumb.am = 1; } } diff --git a/src/com/watabou/pixeldungeon/ui/StatusPane.java b/src/com/watabou/pixeldungeon/ui/StatusPane.java index 28b7ca36ce..28c0db96d3 100644 --- a/src/com/watabou/pixeldungeon/ui/StatusPane.java +++ b/src/com/watabou/pixeldungeon/ui/StatusPane.java @@ -24,6 +24,7 @@ import com.watabou.noosa.NinePatch; import com.watabou.noosa.TouchArea; import com.watabou.noosa.audio.Sample; +import com.watabou.noosa.particles.BitmaskEmitter; import com.watabou.noosa.particles.Emitter; import com.watabou.noosa.ui.Button; import com.watabou.noosa.ui.Component; @@ -87,8 +88,7 @@ protected void onClick( Touch touch ) { avatar = HeroSprite.avatar( Dungeon.hero.heroClass, lastTier ); add( avatar ); - blood = new Emitter(); - blood.pos( avatar ); + blood = new BitmaskEmitter( avatar ); blood.pour( BloodParticle.FACTORY, 0.3f ); blood.autoKill = false; blood.on = false; @@ -222,8 +222,8 @@ public void update() { lastLvl = Dungeon.hero.lvl; level.text( Integer.toString( lastLvl ) ); level.measure(); - level.x = PixelScene.align( 27.0f - level.width() / 2 ); - level.y = PixelScene.align( 27.5f - level.baseLine() / 2 ); + level.x = PixelScene.align( 27.5f - level.width() / 2 ); + level.y = PixelScene.align( 28.0f - level.baseLine() / 2 ); } int k = IronKey.curDepthQuantity; diff --git a/src/com/watabou/pixeldungeon/ui/Toolbar.java b/src/com/watabou/pixeldungeon/ui/Toolbar.java index 3443085b14..60e46c5515 100644 --- a/src/com/watabou/pixeldungeon/ui/Toolbar.java +++ b/src/com/watabou/pixeldungeon/ui/Toolbar.java @@ -25,6 +25,8 @@ import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.DungeonTilemap; +import com.watabou.pixeldungeon.R; +import com.watabou.pixeldungeon.PixelDungeon; import com.watabou.pixeldungeon.actors.Actor; import com.watabou.pixeldungeon.actors.mobs.Mob; import com.watabou.pixeldungeon.items.Heap; @@ -70,7 +72,7 @@ public Toolbar() { @Override protected void createChildren() { - add( btnWait = new Tool( 0, 7, 20, 24 ) { + add( btnWait = new Tool( 0, 7, 20, 25 ) { @Override protected void onClick() { Dungeon.hero.rest( false ); @@ -81,21 +83,21 @@ protected boolean onLongClick() { }; } ); - add( btnSearch = new Tool( 20, 7, 20, 24 ) { + add( btnSearch = new Tool( 20, 7, 20, 25 ) { @Override protected void onClick() { Dungeon.hero.search( true ); } } ); - add( btnInfo = new Tool( 40, 7, 21, 24 ) { + add( btnInfo = new Tool( 40, 7, 21, 25 ) { @Override protected void onClick() { GameScene.selectCell( informer ); } } ); - add( btnInventory = new Tool( 60, 7, 23, 24 ) { + add( btnInventory = new Tool( 60, 7, 23, 25 ) { private GoldIndicator gold; @Override protected void onClick() { @@ -118,9 +120,9 @@ protected void layout() { }; } ); - add( btnQuick1 = new QuickslotTool( 83, 7, 22, 24, true ) ); - add( btnQuick2 = new QuickslotTool( 83, 7, 22, 24, false ) ); - btnQuick2.visible = (QuickSlot.secondaryValue != null); + add( btnQuick1 = new QuickslotTool( 83, 7, 22, 25, true ) ); + add( btnQuick2 = new QuickslotTool( 83, 7, 22, 25, false ) ); + btnQuick2.visible = secondQuickslot(); add( pickedUp = new PickedUpItem() ); } @@ -131,7 +133,7 @@ protected void layout() { btnSearch.setPos( btnWait.right(), y ); btnInfo.setPos( btnSearch.right(), y ); btnQuick1.setPos( width - btnQuick1.width(), y ); - if (btnQuick2.visible) { + if (secondQuickslot()) { btnQuick2.setPos(btnQuick1.left() - btnQuick2.width(), y ); btnInventory.setPos( btnQuick2.left() - btnInventory.width(), y ); } else { @@ -165,13 +167,14 @@ public void pickup( Item item ) { } public static boolean secondQuickslot() { - return instance.btnQuick2.visible; + return PixelDungeon.secondQuickslot(); } public static void secondQuickslot( boolean value ) { instance.btnQuick2.visible = instance.btnQuick2.active = value; + PixelDungeon.secondQuickslot(value); instance.layout(); } @@ -184,7 +187,7 @@ public void onSelect( Integer cell ) { } if (cell < 0 || cell > Level.LENGTH || (!Dungeon.level.visited[cell] && !Dungeon.level.mapped[cell])) { - GameScene.show( new WndMessage( "You don't know what is there." ) ) ; + GameScene.show( new WndMessage(Game.getVar(R.string.Toolbar_Info1)) ) ; return; } @@ -205,7 +208,7 @@ public void onSelect( Integer cell ) { } Heap heap = Dungeon.level.heaps.get( cell ); - if (heap != null) { + if (heap != null && heap.type != Heap.Type.HIDDEN) { if (heap.type == Heap.Type.FOR_SALE && heap.size() == 1 && heap.peek().price() > 0) { GameScene.show( new WndTradeItem( heap, false ) ); } else { @@ -224,7 +227,7 @@ public void onSelect( Integer cell ) { } @Override public String prompt() { - return "Select a cell to examine"; + return Game.getVar(R.string.Toolbar_Info2); } }; diff --git a/src/com/watabou/pixeldungeon/ui/Window.java b/src/com/watabou/pixeldungeon/ui/Window.java index 528f461f51..efd0e185ef 100644 --- a/src/com/watabou/pixeldungeon/ui/Window.java +++ b/src/com/watabou/pixeldungeon/ui/Window.java @@ -17,8 +17,6 @@ */ package com.watabou.pixeldungeon.ui; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import com.watabou.input.Keys; import com.watabou.input.Keys.Key; @@ -154,61 +152,4 @@ public void onBackPressed() { public void onMenuPressed() { } - - protected static class Highlighter { - - private static final Pattern HIGHLIGHTER = Pattern.compile( "_(.*?)_" ); - private static final Pattern STRIPPER = Pattern.compile( "[ \n]" ); - - public String text; - - public boolean[] mask; - - public Highlighter( String text ) { - - String stripped = STRIPPER.matcher( text ).replaceAll( "" ); - mask = new boolean[stripped.length()]; - - Matcher m = HIGHLIGHTER.matcher( stripped ); - - int pos = 0; - int lastMatch = 0; - - while (m.find()) { - pos += (m.start() - lastMatch); - int groupLen = m.group( 1 ).length(); - for (int i=pos; i < pos + groupLen; i++) { - mask[i] = true; - } - pos += groupLen; - lastMatch = m.end(); - } - - m.reset( text ); - StringBuffer sb = new StringBuffer(); - while (m.find()) { - m.appendReplacement( sb, m.group( 1 ) ); - } - m.appendTail( sb ); - - this.text = sb.toString(); - } - - public boolean[] inverted() { - boolean[] result = new boolean[mask.length]; - for (int i=0; i < result.length; i++) { - result[i] = !mask[i]; - } - return result; - } - - public boolean isHighlighted() { - for (int i=0; i < mask.length; i++) { - if (mask[i]) { - return true; - } - } - return false; - } - } } diff --git a/src/com/watabou/pixeldungeon/utils/Utils.java b/src/com/watabou/pixeldungeon/utils/Utils.java index 2b5be9d9c2..96a0664dff 100644 --- a/src/com/watabou/pixeldungeon/utils/Utils.java +++ b/src/com/watabou/pixeldungeon/utils/Utils.java @@ -18,6 +18,8 @@ package com.watabou.pixeldungeon.utils; import java.util.Locale; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; public class Utils { @@ -32,6 +34,11 @@ public static String format( String format, Object...args ) { public static String VOWELS = "aoeiu"; public static String indefinite( String noun ) { + //In a pt_BR language(and another), there is no specific rule. + if (Game.getVar(R.string.Utils_IsIndefinte).equals("0") ) { + return noun; + } + if (noun.length() == 0) { return "a"; } else { diff --git a/src/com/watabou/pixeldungeon/windows/WndBlacksmith.java b/src/com/watabou/pixeldungeon/windows/WndBlacksmith.java index 3e01d8392d..b071b05233 100644 --- a/src/com/watabou/pixeldungeon/windows/WndBlacksmith.java +++ b/src/com/watabou/pixeldungeon/windows/WndBlacksmith.java @@ -18,11 +18,13 @@ package com.watabou.pixeldungeon.windows; import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.Game; import com.watabou.noosa.NinePatch; import com.watabou.noosa.audio.Sample; import com.watabou.noosa.ui.Component; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Chrome; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.mobs.npcs.Blacksmith; import com.watabou.pixeldungeon.items.Item; @@ -46,13 +48,9 @@ public class WndBlacksmith extends Window { private ItemButton btnItem2; private RedButton btnReforge; - private static final String TXT_PROMPT = - "Ok, a deal is a deal, dat's what I can do for you: I can reforge " + - "2 items and turn them into one of a better quality."; - private static final String TXT_SELECT = - "Select an item to reforge"; - private static final String TXT_REFORGE = - "Reforge them"; + private static final String TXT_PROMPT = Game.getVar(R.string.WndBlacksmith_Prompt); + private static final String TXT_SELECT = Game.getVar(R.string.WndBlacksmith_Select); + private static final String TXT_REFORGE = Game.getVar(R.string.WndBlacksmith_Reforge); public WndBlacksmith( Blacksmith troll, Hero hero ) { diff --git a/src/com/watabou/pixeldungeon/windows/WndCatalogus.java b/src/com/watabou/pixeldungeon/windows/WndCatalogus.java index f948aff8b9..c4e4f84cca 100644 --- a/src/com/watabou/pixeldungeon/windows/WndCatalogus.java +++ b/src/com/watabou/pixeldungeon/windows/WndCatalogus.java @@ -20,8 +20,10 @@ import java.util.ArrayList; import com.watabou.noosa.BitmapText; +import com.watabou.noosa.Game; import com.watabou.noosa.ui.Component; import com.watabou.pixeldungeon.PixelDungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Item; import com.watabou.pixeldungeon.items.potions.Potion; import com.watabou.pixeldungeon.items.scrolls.Scroll; @@ -44,9 +46,9 @@ public class WndCatalogus extends WndTabbed { private static final int TAB_WIDTH = 50; - private static final String TXT_POTIONS = "Potions"; - private static final String TXT_SCROLLS = "Scrolls"; - private static final String TXT_TITLE = "Catalogus"; + private static final String TXT_POTIONS = Game.getVar(R.string.WndCatalogus_Potions); + private static final String TXT_SCROLLS = Game.getVar(R.string.WndCatalogus_Scrolls); + private static final String TXT_TITLE = Game.getVar(R.string.WndCatalogus_Title); private BitmapText txtTitle; private ScrollPane list; @@ -141,6 +143,7 @@ private void updateList() { } content.setSize( width, pos ); + list.setSize( list.width(), list.height() ); } private static class ListItem extends Component { diff --git a/src/com/watabou/pixeldungeon/windows/WndChallenges.java b/src/com/watabou/pixeldungeon/windows/WndChallenges.java index f4d5f73343..6d5fa70abc 100644 --- a/src/com/watabou/pixeldungeon/windows/WndChallenges.java +++ b/src/com/watabou/pixeldungeon/windows/WndChallenges.java @@ -20,8 +20,10 @@ import java.util.ArrayList; import com.watabou.noosa.BitmapText; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Challenges; import com.watabou.pixeldungeon.PixelDungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.scenes.PixelScene; import com.watabou.pixeldungeon.ui.CheckBox; import com.watabou.pixeldungeon.ui.Window; @@ -33,7 +35,7 @@ public class WndChallenges extends Window { private static final int BTN_HEIGHT = 18; private static final int GAP = 1; - private static final String TITLE = "Challenges"; + private static final String TITLE = Game.getVar(R.string.WndChallenges_Title); private boolean editable; private ArrayList boxes; diff --git a/src/com/watabou/pixeldungeon/windows/WndChooseWay.java b/src/com/watabou/pixeldungeon/windows/WndChooseWay.java index fd86adb679..e4f2dc88d7 100644 --- a/src/com/watabou/pixeldungeon/windows/WndChooseWay.java +++ b/src/com/watabou/pixeldungeon/windows/WndChooseWay.java @@ -17,20 +17,18 @@ */ package com.watabou.pixeldungeon.windows; -import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.HeroSubClass; import com.watabou.pixeldungeon.items.TomeOfMastery; -import com.watabou.pixeldungeon.scenes.PixelScene; import com.watabou.pixeldungeon.sprites.ItemSprite; +import com.watabou.pixeldungeon.ui.HighlightedText; import com.watabou.pixeldungeon.ui.RedButton; import com.watabou.pixeldungeon.ui.Window; import com.watabou.pixeldungeon.utils.Utils; public class WndChooseWay extends Window { - private static final String TXT_MESSAGE = "Which way will you follow?"; - private static final String TXT_CANCEL = "I'll decide later"; - private static final int WIDTH = 120; private static final int BTN_HEIGHT = 18; private static final float GAP = 2; @@ -39,34 +37,10 @@ public WndChooseWay( final TomeOfMastery tome, final HeroSubClass way1, final He super(); - IconTitle titlebar = new IconTitle(); - titlebar.icon( new ItemSprite( tome.image(), null ) ); - titlebar.label( tome.name() ); - titlebar.setRect( 0, 0, WIDTH, 0 ); - add( titlebar ); + final String TXT_MASTERY = Game.getVar(R.string.WndChooseWay_Mastery); + final String TXT_CANCEL = Game.getVar(R.string.WndChooseWay_Cancel); - Highlighter hl = new Highlighter( way1.desc() + "\n\n" + way2.desc() + "\n\n" + TXT_MESSAGE ); - - BitmapTextMultiline normal = PixelScene.createMultiline( hl.text, 6 ); - normal.maxWidth = WIDTH; - normal.measure(); - normal.x = titlebar.left(); - normal.y = titlebar.bottom() + GAP; - add( normal ); - - if (hl.isHighlighted()) { - normal.mask = hl.inverted(); - - BitmapTextMultiline highlighted = PixelScene.createMultiline( hl.text, 6 ); - highlighted.maxWidth = normal.maxWidth; - highlighted.measure(); - highlighted.x = normal.x; - highlighted.y = normal.y; - add( highlighted ); - - highlighted.mask = hl.mask; - highlighted.hardlight( TITLE_COLOR ); - } + float bottom = createCommonStuff( tome, way1.desc() + "\n\n" + way2.desc() + "\n\n" + TXT_MASTERY ); RedButton btnWay1 = new RedButton( Utils.capitalize( way1.title() ) ) { @Override @@ -75,7 +49,7 @@ protected void onClick() { tome.choose( way1 ); } }; - btnWay1.setRect( 0, normal.y + normal.height() + GAP, (WIDTH - GAP) / 2, BTN_HEIGHT ); + btnWay1.setRect( 0, bottom + GAP, (WIDTH - GAP) / 2, BTN_HEIGHT ); add( btnWay1 ); RedButton btnWay2 = new RedButton( Utils.capitalize( way2.title() ) ) { @@ -99,4 +73,52 @@ protected void onClick() { resize( WIDTH, (int)btnCancel.bottom() ); } + + public WndChooseWay( final TomeOfMastery tome, final HeroSubClass way ) { + + super(); + + final String TXT_REMASTERY = Game.getVar(R.string.WndChooseWay_ReMastery); + + final String TXT_OK = Game.getVar(R.string.WndChooseWay_ReMastOk); + final String TXT_CANCEL = Game.getVar(R.string.WndChooseWay_ReMastNo); + + float bottom = createCommonStuff( tome, way.desc() + "\n\n" + Utils.format( TXT_REMASTERY, Utils.indefinite( way.title() ) ) ); + + RedButton btnWay = new RedButton( TXT_OK ) { + @Override + protected void onClick() { + hide(); + tome.choose( way ); + } + }; + btnWay.setRect( 0, bottom + GAP, WIDTH, BTN_HEIGHT ); + add( btnWay ); + + RedButton btnCancel = new RedButton( TXT_CANCEL ) { + @Override + protected void onClick() { + hide(); + } + }; + btnCancel.setRect( 0, btnWay.bottom() + GAP, WIDTH, BTN_HEIGHT ); + add( btnCancel ); + + resize( WIDTH, (int)btnCancel.bottom() ); + } + + private float createCommonStuff( TomeOfMastery tome, String text ) { + IconTitle titlebar = new IconTitle(); + titlebar.icon( new ItemSprite( tome.image(), null ) ); + titlebar.label( tome.name() ); + titlebar.setRect( 0, 0, WIDTH, 0 ); + add( titlebar ); + + HighlightedText hl = new HighlightedText( 6 ); + hl.text( text, WIDTH ); + hl.setPos( titlebar.left(), titlebar.bottom() + GAP ); + add( hl ); + + return hl.bottom(); + } } diff --git a/src/com/watabou/pixeldungeon/windows/WndClass.java b/src/com/watabou/pixeldungeon/windows/WndClass.java index 4c04addb75..b5622bb83c 100644 --- a/src/com/watabou/pixeldungeon/windows/WndClass.java +++ b/src/com/watabou/pixeldungeon/windows/WndClass.java @@ -19,16 +19,19 @@ import com.watabou.noosa.BitmapText; import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.Game; import com.watabou.noosa.Group; import com.watabou.pixeldungeon.Badges; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.HeroClass; import com.watabou.pixeldungeon.actors.hero.HeroSubClass; import com.watabou.pixeldungeon.scenes.PixelScene; +import com.watabou.pixeldungeon.ui.HighlightedText; import com.watabou.pixeldungeon.utils.Utils; public class WndClass extends WndTabbed { - private static final String TXT_MASTERY = "Mastery"; + private static final String TXT_MASTERY = Game.getVar(R.string.WndClass_Mastery); private static final int WIDTH = 110; @@ -143,57 +146,36 @@ public PerksTab() { private class MasteryTab extends Group { private static final int MARGIN = 4; - - private BitmapTextMultiline normal; - private BitmapTextMultiline highlighted; - + public float height; public float width; public MasteryTab() { super(); - String text = null; + String message = null; switch (cl) { case WARRIOR: - text = HeroSubClass.GLADIATOR.desc() + "\n\n" + HeroSubClass.BERSERKER.desc(); + message = HeroSubClass.GLADIATOR.desc() + "\n\n" + HeroSubClass.BERSERKER.desc(); break; case MAGE: - text = HeroSubClass.BATTLEMAGE.desc() + "\n\n" + HeroSubClass.WARLOCK.desc(); + message = HeroSubClass.BATTLEMAGE.desc() + "\n\n" + HeroSubClass.WARLOCK.desc(); break; case ROGUE: - text = HeroSubClass.FREERUNNER.desc() + "\n\n" + HeroSubClass.ASSASSIN.desc(); + message = HeroSubClass.FREERUNNER.desc() + "\n\n" + HeroSubClass.ASSASSIN.desc(); break; case HUNTRESS: - text = HeroSubClass.SNIPER.desc() + "\n\n" + HeroSubClass.WARDEN.desc(); + message = HeroSubClass.SNIPER.desc() + "\n\n" + HeroSubClass.WARDEN.desc(); break; } + + HighlightedText text = new HighlightedText( 6 ); + text.text( message, WIDTH - MARGIN * 2 ); + text.setPos( MARGIN, MARGIN ); + add( text ); - Highlighter hl = new Highlighter( text ); - - normal = PixelScene.createMultiline( hl.text, 6 ); - normal.maxWidth = WIDTH - MARGIN * 2; - normal.measure(); - normal.x = MARGIN; - normal.y = MARGIN; - add( normal ); - - if (hl.isHighlighted()) { - normal.mask = hl.inverted(); - - highlighted = PixelScene.createMultiline( hl.text, 6 ); - highlighted.maxWidth = normal.maxWidth; - highlighted.measure(); - highlighted.x = normal.x; - highlighted.y = normal.y; - add( highlighted ); - - highlighted.mask = hl.mask; - highlighted.hardlight( TITLE_COLOR ); - } - - height = normal.y + normal.height() + MARGIN; - width = normal.x + normal.width() + MARGIN; + height = text.bottom() + MARGIN; + width = text.right() + MARGIN; } } } diff --git a/src/com/watabou/pixeldungeon/windows/WndError.java b/src/com/watabou/pixeldungeon/windows/WndError.java index df9a39f153..26eebf5a33 100644 --- a/src/com/watabou/pixeldungeon/windows/WndError.java +++ b/src/com/watabou/pixeldungeon/windows/WndError.java @@ -17,11 +17,13 @@ */ package com.watabou.pixeldungeon.windows; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.ui.Icons; public class WndError extends WndTitledMessage { - private static final String TXT_TITLE = "ERROR"; + private static final String TXT_TITLE = Game.getVar(R.string.WndError_Title); public WndError( String message ) { super( Icons.WARNING.get(), TXT_TITLE, message ); diff --git a/src/com/watabou/pixeldungeon/windows/WndGame.java b/src/com/watabou/pixeldungeon/windows/WndGame.java index 06abcd47c7..b91ad97b0c 100644 --- a/src/com/watabou/pixeldungeon/windows/WndGame.java +++ b/src/com/watabou/pixeldungeon/windows/WndGame.java @@ -21,6 +21,7 @@ import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.PixelDungeon; import com.watabou.pixeldungeon.scenes.GameScene; import com.watabou.pixeldungeon.scenes.InterlevelScene; @@ -31,14 +32,14 @@ import com.watabou.pixeldungeon.ui.Window; public class WndGame extends Window { - - private static final String TXT_SETTINGS = "Settings"; - private static final String TXT_CHALLEGES = "Challenges"; - private static final String TXT_RANKINGS = "Rankings"; - private static final String TXT_START = "Start New Game"; - private static final String TXT_MENU = "Main Menu"; - private static final String TXT_EXIT = "Exit Game"; - private static final String TXT_RETURN = "Return to Game"; + + private static final String TXT_SETTINGS = Game.getVar(R.string.WndGame_Settings); + private static final String TXT_CHALLEGES = Game.getVar(R.string.WndGame_Challenges); + private static final String TXT_RANKINGS = Game.getVar(R.string.WndGame_Ranking); + private static final String TXT_START = Game.getVar(R.string.WndGame_Start); + private static final String TXT_MENU = Game.getVar(R.string.WndGame_menu); + private static final String TXT_EXIT = Game.getVar(R.string.WndGame_Exit); + private static final String TXT_RETURN = Game.getVar(R.string.WndGame_Return); private static final int WIDTH = 120; private static final int BTN_HEIGHT = 20; diff --git a/src/com/watabou/pixeldungeon/windows/WndHero.java b/src/com/watabou/pixeldungeon/windows/WndHero.java index 387788c4aa..80359f1edd 100644 --- a/src/com/watabou/pixeldungeon/windows/WndHero.java +++ b/src/com/watabou/pixeldungeon/windows/WndHero.java @@ -22,11 +22,13 @@ import com.watabou.gltextures.SmartTexture; import com.watabou.gltextures.TextureCache; import com.watabou.noosa.BitmapText; +import com.watabou.noosa.Game; import com.watabou.noosa.Group; import com.watabou.noosa.Image; import com.watabou.noosa.TextureFilm; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.buffs.Buff; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -38,14 +40,14 @@ public class WndHero extends WndTabbed { - private static final String TXT_STATS = "Stats"; - private static final String TXT_BUFFS = "Buffs"; + private static final String TXT_STATS = Game.getVar(R.string.WndHero_Stats); + private static final String TXT_BUFFS = Game.getVar(R.string.WndHero_Buffs); - private static final String TXT_EXP = "Experience"; - private static final String TXT_STR = "Strength"; - private static final String TXT_HEALTH = "Health"; - private static final String TXT_GOLD = "Gold Collected"; - private static final String TXT_DEPTH = "Maximum Depth"; + private static final String TXT_EXP = Game.getVar(R.string.WndHero_Exp); + private static final String TXT_STR = Game.getVar(R.string.WndHero_Str); + private static final String TXT_HEALTH = Game.getVar(R.string.WndHero_Health); + private static final String TXT_GOLD = Game.getVar(R.string.WndHero_Gold); + private static final String TXT_DEPTH = Game.getVar(R.string.WndHero_Depth); private static final int WIDTH = 100; private static final int TAB_WIDTH = 40; @@ -92,9 +94,10 @@ protected void select( boolean value ) { private class StatsTab extends Group { - private static final String TXT_TITLE = "Level %d %s"; - private static final String TXT_CATALOGUS = "Catalogus"; - private static final String TXT_JOURNAL = "Journal"; + //Removido o "Static" para poder definir valor a partir ds resouces + private final String TXT_TITLE = Game.getVar(R.string.WndHero_StaTitle); + private final String TXT_CATALOGUS = Game.getVar(R.string.WndHero_StaCatalogus); + private final String TXT_JOURNAL = Game.getVar(R.string.WndHero_StaJournal); private static final int GAP = 5; diff --git a/src/com/watabou/pixeldungeon/windows/WndImp.java b/src/com/watabou/pixeldungeon/windows/WndImp.java index a09d6a7e4b..50c82ea8c0 100644 --- a/src/com/watabou/pixeldungeon/windows/WndImp.java +++ b/src/com/watabou/pixeldungeon/windows/WndImp.java @@ -18,7 +18,9 @@ package com.watabou.pixeldungeon.windows; import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.mobs.npcs.Imp; import com.watabou.pixeldungeon.items.Item; @@ -31,17 +33,14 @@ import com.watabou.pixeldungeon.utils.Utils; public class WndImp extends Window { - - private static final String TXT_MESSAGE = - "Oh yes! You are my hero!\n" + - "Regarding your reward, I don't have cash with me right now, but I have something better for you. " + - "This is my family heirloom ring: my granddad took it off a dead paladin's finger."; - private static final String TXT_REWARD = "Take the ring"; - + + private static final String TXT_MESSAGE = Game.getVar(R.string.WndImp_Message); + private static final String TXT_REWARD = Game.getVar(R.string.WndImp_Reward); + private static final int WIDTH = 120; private static final int BTN_HEIGHT = 20; private static final int GAP = 2; - + public WndImp( final Imp imp, final DwarfToken tokens ) { super(); diff --git a/src/com/watabou/pixeldungeon/windows/WndInfoCell.java b/src/com/watabou/pixeldungeon/windows/WndInfoCell.java index d49347d904..a6f272549c 100644 --- a/src/com/watabou/pixeldungeon/windows/WndInfoCell.java +++ b/src/com/watabou/pixeldungeon/windows/WndInfoCell.java @@ -18,9 +18,11 @@ package com.watabou.pixeldungeon.windows; import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.Game; import com.watabou.noosa.Image; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.DungeonTilemap; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.blobs.Blob; import com.watabou.pixeldungeon.levels.Level; import com.watabou.pixeldungeon.levels.Terrain; @@ -33,7 +35,7 @@ public class WndInfoCell extends Window { private static final int WIDTH = 120; - private static final String TXT_NOTHING = "There is nothing here."; + private static final String TXT_NOTHING = Game.getVar(R.string.WndInfoCell_Nothing); public WndInfoCell( int cell ) { diff --git a/src/com/watabou/pixeldungeon/windows/WndInfoItem.java b/src/com/watabou/pixeldungeon/windows/WndInfoItem.java index 378fe802f4..2a9b2347e5 100644 --- a/src/com/watabou/pixeldungeon/windows/WndInfoItem.java +++ b/src/com/watabou/pixeldungeon/windows/WndInfoItem.java @@ -18,6 +18,8 @@ package com.watabou.pixeldungeon.windows; import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.items.Heap; import com.watabou.pixeldungeon.items.Heap.Type; import com.watabou.pixeldungeon.items.Item; @@ -28,22 +30,18 @@ import com.watabou.pixeldungeon.utils.Utils; public class WndInfoItem extends Window { - - private static final String TXT_CHEST = "Chest"; - private static final String TXT_LOCKED_CHEST = "Locked chest"; - private static final String TXT_CRYSTAL_CHEST = "Crystal chest"; - private static final String TXT_TOMB = "Tomb"; - private static final String TXT_SKELETON = "Skeletal remains"; - private static final String TXT_WONT_KNOW = "You won't know what's inside until you open it!"; - private static final String TXT_NEED_KEY = TXT_WONT_KNOW + " But to open it you need a golden key."; - private static final String TXT_INSIDE = "You can see %s inside, but to open the chest you need a golden key."; - private static final String TXT_OWNER = - "This ancient tomb may contain something useful, " + - "but its owner will most certainly object to checking."; - private static final String TXT_REMAINS = - "This is all that's left from one of your predecessors. " + - "Maybe it's worth checking for any valuables."; - + + private static final String TXT_CHEST = Game.getVar(R.string.WndInfoItem_Chest); + private static final String TXT_LOCKED_CHEST = Game.getVar(R.string.WndInfoItem_LockedChest); + private static final String TXT_CRYSTAL_CHEST = Game.getVar(R.string.WndInfoItem_CrystalChest); + private static final String TXT_TOMB = Game.getVar(R.string.WndInfoItem_Tomb); + private static final String TXT_SKELETON = Game.getVar(R.string.WndInfoItem_Skeleton); + private static final String TXT_WONT_KNOW = Game.getVar(R.string.WndInfoItem_WontKnow); + private static final String TXT_NEED_KEY = TXT_WONT_KNOW + Game.getVar(R.string.WndInfoItem_NeedKey);; + private static final String TXT_INSIDE = Game.getVar(R.string.WndInfoItem_Inside);; + private static final String TXT_OWNER = Game.getVar(R.string.WndInfoItem_Owner); + private static final String TXT_REMAINS = Game.getVar(R.string.WndInfoItem_Remains); + private static final float GAP = 2; private static final int WIDTH = 120; @@ -57,10 +55,12 @@ public WndInfoItem( Heap heap ) { Item item = heap.peek(); int color = TITLE_COLOR; - if (item.levelKnown && item.level > 0) { - color = ItemSlot.UPGRADED; - } else if (item.levelKnown && item.level < 0) { - color = ItemSlot.DEGRADED; + if (item.levelKnown) { + if (item.level() < 0) { + color = ItemSlot.DEGRADED; + } else if (item.level() > 0) { + color = item.isBroken() ? ItemSlot.WARNING : ItemSlot.UPGRADED; + } } fillFields( item.image(), item.glowing(), color, item.toString(), item.info() ); @@ -96,30 +96,31 @@ public WndInfoItem( Item item ) { super(); int color = TITLE_COLOR; - if (item.levelKnown && item.level > 0) { - color = ItemSlot.UPGRADED; - } else if (item.levelKnown && item.level < 0) { - color = ItemSlot.DEGRADED; + if (item.levelKnown) { + if (item.level() < 0 || item.isBroken()) { + color = ItemSlot.DEGRADED; + } else if (item.level() > 0) { + color = ItemSlot.UPGRADED; + } } fillFields( item.image(), item.glowing(), color, item.toString(), item.info() ); } private void fillFields( int image, ItemSprite.Glowing glowing, int titleColor, String title, String info ) { - IconTitle titlebar = new IconTitle(); titlebar.icon( new ItemSprite( image, glowing ) ); titlebar.label( Utils.capitalize( title ), titleColor ); titlebar.setRect( 0, 0, WIDTH, 0 ); add( titlebar ); - + BitmapTextMultiline txtInfo = PixelScene.createMultiline( info, 6 ); txtInfo.maxWidth = WIDTH; txtInfo.measure(); txtInfo.x = titlebar.left(); txtInfo.y = titlebar.bottom() + GAP; add( txtInfo ); - + resize( WIDTH, (int)(txtInfo.y + txtInfo.height()) ); } } diff --git a/src/com/watabou/pixeldungeon/windows/WndItem.java b/src/com/watabou/pixeldungeon/windows/WndItem.java index cb144dca97..faec7d292a 100644 --- a/src/com/watabou/pixeldungeon/windows/WndItem.java +++ b/src/com/watabou/pixeldungeon/windows/WndItem.java @@ -49,11 +49,13 @@ public WndItem( final WndBag owner, final Item item ) { titlebar.setRect( 0, 0, WIDTH, 0 ); add( titlebar ); - if (item.levelKnown && item.level > 0) { - titlebar.color( ItemSlot.UPGRADED ); - } else if (item.levelKnown && item.level < 0) { - titlebar.color( ItemSlot.DEGRADED ); - } + if (item.levelKnown) { + if (item.level() < 0) { + titlebar.color( ItemSlot.DEGRADED ); + } else if (item.level() > 0) { + titlebar.color( item.isBroken() ? ItemSlot.WARNING : ItemSlot.UPGRADED ); + } + } BitmapTextMultiline info = PixelScene.createMultiline( item.info(), 6 ); info.maxWidth = WIDTH; diff --git a/src/com/watabou/pixeldungeon/windows/WndJournal.java b/src/com/watabou/pixeldungeon/windows/WndJournal.java index 5b16b5328b..cee5b148ec 100644 --- a/src/com/watabou/pixeldungeon/windows/WndJournal.java +++ b/src/com/watabou/pixeldungeon/windows/WndJournal.java @@ -20,11 +20,13 @@ import java.util.Collections; import com.watabou.noosa.BitmapText; +import com.watabou.noosa.Game; import com.watabou.noosa.Image; import com.watabou.noosa.ui.Component; import com.watabou.pixeldungeon.Dungeon; import com.watabou.pixeldungeon.Journal; import com.watabou.pixeldungeon.PixelDungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.scenes.PixelScene; import com.watabou.pixeldungeon.ui.Icons; import com.watabou.pixeldungeon.ui.ScrollPane; @@ -38,7 +40,7 @@ public class WndJournal extends Window { private static final int ITEM_HEIGHT = 18; - private static final String TXT_TITLE = "Journal"; + private static final String TXT_TITLE = Game.getVar(R.string.WndJournal_Title); private BitmapText txtTitle; private ScrollPane list; diff --git a/src/com/watabou/pixeldungeon/windows/WndLanguage.java b/src/com/watabou/pixeldungeon/windows/WndLanguage.java new file mode 100644 index 0000000000..c87e91b1cd --- /dev/null +++ b/src/com/watabou/pixeldungeon/windows/WndLanguage.java @@ -0,0 +1,158 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +package com.watabou.pixeldungeon.windows; + +import java.util.ArrayList; + +import com.watabou.pixeldungeon.R; + +import com.watabou.noosa.BitmapText; +import com.watabou.noosa.Game; +import com.watabou.noosa.Image; +import com.watabou.noosa.ui.Component; +import com.watabou.pixeldungeon.PixelDungeon; +import com.watabou.pixeldungeon.scenes.PixelScene; +import com.watabou.pixeldungeon.ui.Icons; +import com.watabou.pixeldungeon.ui.ScrollPane; +import com.watabou.pixeldungeon.ui.Window; + +public class WndLanguage extends Window { + private static final int WIDTH_P = 120; + private static final int HEIGHT_P = 160; + + private static final int WIDTH_L = 128; + private static final int HEIGHT_L = 128; + + private static final int ITEM_HEIGHT = 18; + + private static final String TXT_TITLE = Game.getVar(R.string.WndLanguage_Title); + private static final String[] LANGS = Game.getVars(R.array.WndLanguage_Langs); + + private ArrayList items = new ArrayList(); + + public WndLanguage() { + super(); + + if (PixelDungeon.landscape()) { + resize( WIDTH_L, HEIGHT_L ); + } else { + resize(WIDTH_P, HEIGHT_P); + } + + BitmapText txtTitle = PixelScene.createText(TXT_TITLE, 9); + txtTitle.hardlight(Window.TITLE_COLOR); + txtTitle.measure(); + txtTitle.x = PixelScene.align(PixelScene.uiCamera, + (width - txtTitle.width()) / 2); + add(txtTitle); + + ScrollPane list = new ScrollPane(new Component()) { + @Override + public void onClick(float x, float y) { + int size = items.size(); + for (int i = 0; i < size; i++) { + if (items.get(i).onClick(x, y)) { + hide(); + break; + } + } + } + }; + + add(list); + list.setRect(0, txtTitle.height() + 2, width, height - txtTitle.height() - 2); + Component content = list.content(); + + int pos = 0; + for (String lang : LANGS) { + + ListItem.Status sta = ListItem.Status.NORMAL; + if (lang.split(",")[1].equals(PixelDungeon.language())) { + sta = ListItem.Status.SELECTED; + } else if (lang.split(",")[2].equals("0")){ + sta = ListItem.Status.INACTIVE; + } + + ListItem item = new ListItem(lang.split(",")[0], lang.split(",")[1], sta); + item.setRect(0, pos, width, ITEM_HEIGHT); + content.add(item); + items.add(item); + + pos += item.height(); + } + + content.setSize(width, pos); + } + + private static class ListItem extends Component { + + private BitmapText lang; + private String value; + private Status status; + private Image icon; + + public enum Status { + NORMAL, SELECTED, INACTIVE + } + + public ListItem(String text, String value, Status sta) { + super(); + + lang.text(text); + lang.measure(); + + this.value = value; + this.status = sta; + + if (sta == Status.SELECTED) { + lang.hardlight(TITLE_COLOR); + } else if (sta == Status.INACTIVE) { + lang.hardlight(0xBBBBBB); + } + } + + @Override + protected void createChildren() { + lang = PixelScene.createText(9); + add(lang); + + icon = Icons.get(Icons.MASTERY); + add(icon); + } + + @Override + protected void layout() { + lang.x = icon.width + 2; + lang.y = PixelScene.align(y + (height - lang.baseLine()) / 2) + 2; + + icon.y = lang.y - 3; + } + + public boolean onClick(float x, float y) { + if (inside(x, y)) { + if (status == Status.NORMAL){ + PixelDungeon.language(value); + } + return true; + } else { + return false; + } + } + } + +} diff --git a/src/com/watabou/pixeldungeon/windows/WndQuest.java b/src/com/watabou/pixeldungeon/windows/WndQuest.java index b3d4ea5700..8bf48549b5 100644 --- a/src/com/watabou/pixeldungeon/windows/WndQuest.java +++ b/src/com/watabou/pixeldungeon/windows/WndQuest.java @@ -17,12 +17,64 @@ */ package com.watabou.pixeldungeon.windows; +import com.watabou.pixeldungeon.PixelDungeon; import com.watabou.pixeldungeon.actors.mobs.npcs.NPC; +import com.watabou.pixeldungeon.ui.HighlightedText; +import com.watabou.pixeldungeon.ui.RedButton; +import com.watabou.pixeldungeon.ui.Window; import com.watabou.pixeldungeon.utils.Utils; -public class WndQuest extends WndTitledMessage { +public class WndQuest extends Window { + + private static final int WIDTH_P = 120; + private static final int WIDTH_L = 144; + + private static final int BTN_HEIGHT = 20; + private static final int GAP = 2; - public WndQuest( NPC questgiver, String text ) { - super( questgiver.sprite(), Utils.capitalize( questgiver.name ), text ); + public WndQuest( NPC questgiver, String text, String... options ) { + + super(); + + int width = PixelDungeon.landscape() ? WIDTH_L : WIDTH_P; + + IconTitle titlebar = new IconTitle( questgiver.sprite(), Utils.capitalize( questgiver.name ) ); + titlebar.setRect( 0, 0, width, 0 ); + add( titlebar ); + + HighlightedText hl = new HighlightedText( 6 ); + hl.text( text, width ); + hl.setPos( titlebar.left(), titlebar.bottom() + GAP ); + add( hl ); + + if (options.length > 0) { + float pos = hl.bottom(); + + for (int i=0; i < options.length; i++) { + + pos += GAP; + + final int index = i; + RedButton btn = new RedButton( options[i] ) { + @Override + protected void onClick() { + hide(); + onSelect( index ); + } + }; + btn.setRect( 0, pos, width, BTN_HEIGHT ); + add( btn ); + + pos += BTN_HEIGHT; + } + + resize( width, (int)pos ); + + } else { + + resize( width, (int)hl.bottom() ); + } } + + protected void onSelect( int index ) {}; } diff --git a/src/com/watabou/pixeldungeon/windows/WndRanking.java b/src/com/watabou/pixeldungeon/windows/WndRanking.java index f9b32b2e62..835ca5a8e1 100644 --- a/src/com/watabou/pixeldungeon/windows/WndRanking.java +++ b/src/com/watabou/pixeldungeon/windows/WndRanking.java @@ -29,6 +29,7 @@ import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.Badges; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.hero.Belongings; import com.watabou.pixeldungeon.items.Item; @@ -44,11 +45,11 @@ public class WndRanking extends WndTabbed { - private static final String TXT_ERROR = "Unable to load additional information"; + private static final String TXT_ERROR = Game.getVar(R.string.WndRanking_Error); - private static final String TXT_STATS = "Stats"; - private static final String TXT_ITEMS = "Items"; - private static final String TXT_BADGES = "Badges"; + private static final String TXT_STATS = Game.getVar(R.string.WndRanking_Stats); + private static final String TXT_ITEMS = Game.getVar(R.string.WndRanking_Items); + private static final String TXT_BADGES = Game.getVar(R.string.WndRanking_Badges); private static final int WIDTH = 112; private static final int HEIGHT = 134; @@ -142,23 +143,22 @@ protected void select( boolean value ) { private class StatsTab extends Group { private static final int GAP = 4; + + private final String TXT_TITLE = Game.getVar(R.string.WndRanking_StaTitle); + private final String TXT_CHALLENGES = Game.getVar(R.string.WndRanking_StaChallenges); - private static final String TXT_TITLE = "Level %d %s"; - - private static final String TXT_CHALLENGES = "Challenges"; - - private static final String TXT_HEALTH = "Health"; - private static final String TXT_STR = "Strength"; + private final String TXT_HEALTH = Game.getVar(R.string.WndRanking_StaHealth); + private final String TXT_STR = Game.getVar(R.string.WndRanking_StaStr); - private static final String TXT_DURATION = "Game Duration"; + private final String TXT_DURATION = Game.getVar(R.string.WndRanking_StaDuration); - private static final String TXT_DEPTH = "Maximum Depth"; - private static final String TXT_ENEMIES = "Mobs Killed"; - private static final String TXT_GOLD = "Gold Collected"; + private final String TXT_DEPTH = Game.getVar(R.string.WndRanking_StaDepth); + private final String TXT_ENEMIES = Game.getVar(R.string.WndRanking_StaEnemies); + private final String TXT_GOLD = Game.getVar(R.string.WndRanking_StaGold);; - private static final String TXT_FOOD = "Food Eaten"; - private static final String TXT_ALCHEMY = "Potions Cooked"; - private static final String TXT_ANKHS = "Ankhs Used"; + private final String TXT_FOOD = Game.getVar(R.string.WndRanking_StaFood); + private final String TXT_ALCHEMY = Game.getVar(R.string.WndRanking_StaAlchemy); + private final String TXT_ANKHS = Game.getVar(R.string.WndRanking_StaAnkhs); public StatsTab() { super(); diff --git a/src/com/watabou/pixeldungeon/windows/WndResurrect.java b/src/com/watabou/pixeldungeon/windows/WndResurrect.java index 725d9ddb16..f714bb44df 100644 --- a/src/com/watabou/pixeldungeon/windows/WndResurrect.java +++ b/src/com/watabou/pixeldungeon/windows/WndResurrect.java @@ -19,6 +19,7 @@ import com.watabou.noosa.BitmapTextMultiline; import com.watabou.noosa.Game; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.Rankings; import com.watabou.pixeldungeon.Statistics; import com.watabou.pixeldungeon.actors.hero.Hero; @@ -31,9 +32,9 @@ public class WndResurrect extends Window { - private static final String TXT_MESSAGE = "You died, but you were given another chance to win this dungeon. Will you take it?"; - private static final String TXT_YES = "Yes, I will fight!"; - private static final String TXT_NO = "No, I give up"; + private static final String TXT_MESSAGE = Game.getVar(R.string.WndResurrect_Message); + private static final String TXT_YES = Game.getVar(R.string.WndResurrect_Yes); + private static final String TXT_NO = Game.getVar(R.string.WndResurrect_No); private static final int WIDTH = 120; private static final int BTN_HEIGHT = 20; diff --git a/src/com/watabou/pixeldungeon/windows/WndSadGhost.java b/src/com/watabou/pixeldungeon/windows/WndSadGhost.java index cc36bc21df..8b57999529 100644 --- a/src/com/watabou/pixeldungeon/windows/WndSadGhost.java +++ b/src/com/watabou/pixeldungeon/windows/WndSadGhost.java @@ -17,86 +17,45 @@ */ package com.watabou.pixeldungeon.windows; -import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.mobs.npcs.Ghost; import com.watabou.pixeldungeon.items.Item; -import com.watabou.pixeldungeon.items.quest.DriedRose; -import com.watabou.pixeldungeon.scenes.PixelScene; -import com.watabou.pixeldungeon.sprites.ItemSprite; -import com.watabou.pixeldungeon.ui.RedButton; -import com.watabou.pixeldungeon.ui.Window; import com.watabou.pixeldungeon.utils.GLog; -import com.watabou.pixeldungeon.utils.Utils; -public class WndSadGhost extends Window { +public class WndSadGhost extends WndQuest { - private static final String TXT_ROSE = - "Yes! Yes!!! This is it! Please give it to me! " + - "And you can take one of these items, maybe they " + - "will be useful to you in your journey..."; - private static final String TXT_RAT = - "Yes! The ugly creature is slain and I can finally rest... " + - "Please take one of these items, maybe they " + - "will be useful to you in your journey..."; - private static final String TXT_WEAPON = "Ghost's weapon"; - private static final String TXT_ARMOR = "Ghost's armor"; + private static final String TXT_WEAPON = Game.getVar(R.string.WndSadGhost_Weapon); + private static final String TXT_ARMOR = Game.getVar(R.string.WndSadGhost_Armor); - private static final int WIDTH = 120; - private static final int BTN_HEIGHT = 20; - private static final float GAP = 2; + private Ghost ghost; + private Item questItem; - public WndSadGhost( final Ghost ghost, final Item item ) { + public WndSadGhost( final Ghost ghost, final Item item, String text ) { - super(); + super( ghost, text, TXT_WEAPON, TXT_ARMOR ); - IconTitle titlebar = new IconTitle(); - titlebar.icon( new ItemSprite( item.image(), null ) ); - titlebar.label( Utils.capitalize( item.name() ) ); - titlebar.setRect( 0, 0, WIDTH, 0 ); - add( titlebar ); - - BitmapTextMultiline message = PixelScene.createMultiline( item instanceof DriedRose ? TXT_ROSE : TXT_RAT, 6 ); - message.maxWidth = WIDTH; - message.measure(); - message.y = titlebar.bottom() + GAP; - add( message ); - - RedButton btnWeapon = new RedButton( TXT_WEAPON ) { - @Override - protected void onClick() { - selectReward( ghost, item, Ghost.Quest.weapon ); - } - }; - btnWeapon.setRect( 0, message.y + message.height() + GAP, WIDTH, BTN_HEIGHT ); - add( btnWeapon ); - - RedButton btnArmor = new RedButton( TXT_ARMOR ) { - @Override - protected void onClick() { - selectReward( ghost, item, Ghost.Quest.armor ); - } - }; - btnArmor.setRect( 0, btnWeapon.bottom() + GAP, WIDTH, BTN_HEIGHT ); - add( btnArmor ); - - resize( WIDTH, (int)btnArmor.bottom() ); + this.ghost = ghost; + questItem = item; } - private void selectReward( Ghost ghost, Item item, Item reward ) { - - hide(); - - item.detach( Dungeon.hero.belongings.backpack ); + @Override + protected void onSelect( int index ) { + + if (questItem != null) { + questItem.detach( Dungeon.hero.belongings.backpack ); + } + Item reward = index == 0 ? Ghost.Quest.weapon : Ghost.Quest.armor; if (reward.doPickUp( Dungeon.hero )) { GLog.i( Hero.TXT_YOU_NOW_HAVE, reward.name() ); } else { Dungeon.level.drop( reward, ghost.pos ).sprite.drop(); } - ghost.yell( "Farewell, adventurer!" ); + ghost.yell( Game.getVar(R.string.WndSadGhost_Info) ); ghost.die( null ); Ghost.Quest.complete(); diff --git a/src/com/watabou/pixeldungeon/windows/WndSettings.java b/src/com/watabou/pixeldungeon/windows/WndSettings.java index ecdb54e869..067c6a2c9f 100644 --- a/src/com/watabou/pixeldungeon/windows/WndSettings.java +++ b/src/com/watabou/pixeldungeon/windows/WndSettings.java @@ -18,9 +18,11 @@ package com.watabou.pixeldungeon.windows; import com.watabou.noosa.Camera; +import com.watabou.noosa.Game; import com.watabou.noosa.audio.Sample; import com.watabou.pixeldungeon.Assets; import com.watabou.pixeldungeon.PixelDungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.scenes.PixelScene; import com.watabou.pixeldungeon.ui.CheckBox; import com.watabou.pixeldungeon.ui.RedButton; @@ -29,23 +31,25 @@ public class WndSettings extends Window { - private static final String TXT_ZOOM_IN = "+"; - private static final String TXT_ZOOM_OUT = "-"; - private static final String TXT_ZOOM_DEFAULT = "Default Zoom"; + private static final String TXT_ZOOM_IN = Game.getVar(R.string.WndSettings_ZoomIn); + private static final String TXT_ZOOM_OUT = Game.getVar(R.string.WndSettings_ZoomOut); + private static final String TXT_ZOOM_DEFAULT = Game.getVar(R.string.WndSettings_ZoomDef); - private static final String TXT_SCALE_UP = "Scale up UI"; - private static final String TXT_IMMERSIVE = "Immersive mode"; + private static final String TXT_SCALE_UP = Game.getVar(R.string.WndSettings_ScaleUp); + private static final String TXT_IMMERSIVE = Game.getVar(R.string.WndSettings_Immersive); - private static final String TXT_MUSIC = "Music"; + private static final String TXT_LANG = Game.getVar(R.string.WndSettings_Language); + + private static final String TXT_MUSIC = Game.getVar(R.string.WndSettings_Music); - private static final String TXT_SOUND = "Sound FX"; + private static final String TXT_SOUND = Game.getVar(R.string.WndSettings_Sound); - private static final String TXT_BRIGHTNESS = "Brightness"; + private static final String TXT_BRIGHTNESS = Game.getVar(R.string.WndSettings_Brightness); - private static final String TXT_QUICKSLOT = "Second quickslot"; + private static final String TXT_QUICKSLOT = Game.getVar(R.string.WndSettings_2QuickSlot); - private static final String TXT_SWITCH_PORT = "Switch to portrait"; - private static final String TXT_SWITCH_LAND = "Switch to landscape"; + private static final String TXT_SWITCH_PORT = Game.getVar(R.string.WndSettings_SwitchPort); + private static final String TXT_SWITCH_LAND = Game.getVar(R.string.WndSettings_SwitchLand); private static final int WIDTH = 112; private static final int BTN_HEIGHT = 20; @@ -99,6 +103,15 @@ protected void onClick() { btnScaleUp.setRect( 0, 0, WIDTH, BTN_HEIGHT ); btnScaleUp.checked( PixelDungeon.scaleUp() ); add( btnScaleUp ); + + RedButton btnLanguage = new RedButton( TXT_LANG ) { + @Override + protected void onClick() { + parent.add( new WndLanguage() ); + } + }; + btnLanguage.setRect( 0, btnScaleUp.bottom() + GAP, WIDTH, BTN_HEIGHT ); + add( btnLanguage ); btnImmersive = new CheckBox( TXT_IMMERSIVE ) { @Override @@ -107,7 +120,7 @@ protected void onClick() { PixelDungeon.immerse( checked() ); } }; - btnImmersive.setRect( 0, btnScaleUp.bottom() + GAP, WIDTH, BTN_HEIGHT ); + btnImmersive.setRect( 0, btnLanguage.bottom() + GAP, WIDTH, BTN_HEIGHT ); btnImmersive.checked( PixelDungeon.immersed() ); btnImmersive.enable( android.os.Build.VERSION.SDK_INT >= 19 ); add( btnImmersive ); diff --git a/src/com/watabou/pixeldungeon/windows/WndStory.java b/src/com/watabou/pixeldungeon/windows/WndStory.java index ce36d0e599..f7c3d32cab 100644 --- a/src/com/watabou/pixeldungeon/windows/WndStory.java +++ b/src/com/watabou/pixeldungeon/windows/WndStory.java @@ -23,6 +23,7 @@ import com.watabou.noosa.TouchArea; import com.watabou.pixeldungeon.Chrome; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.scenes.PixelScene; import com.watabou.pixeldungeon.ui.Window; import com.watabou.utils.SparseArray; @@ -45,33 +46,11 @@ public class WndStory extends Window { private static final SparseArray CHAPTERS = new SparseArray(); static { - CHAPTERS.put( ID_SEWERS, - "The Dungeon lies right beneath the City, its upper levels actually constitute the City's sewer system. " + - "Being nominally a part of the City, these levels are not that dangerous. No one will call it a safe place, " + - "but at least you won't need to deal with evil magic here." ); - - CHAPTERS.put( ID_PRISON, - "Many years ago an underground prison was built here for the most dangerous criminals. At the time it seemed " + - "like a very clever idea, because this place indeed was very hard to escape. But soon dark miasma started to permeate " + - "from below, driving prisoners and guards insane. In the end the prison was abandoned, though some convicts " + - "were left locked up here." ); - - CHAPTERS.put( ID_CAVES, - "The caves, which stretch down under the abandoned prison, are sparcely populated. They lie too deep to be exploited " + - "by the City and they are too poor in minerals to interest the dwarves. In the past there was a trade outpost " + - "somewhere here on the route between these two states, but it has perished since the decline of Dwarven Metropolis. " + - "Only omnipresent gnolls and subterranean animals dwell here now." ); - - CHAPTERS.put( ID_METROPOLIS, - "Dwarven Metropolis was once the greatest of dwarven city-states. In its heyday the mechanized army of dwarves " + - "has successfully repelled the invasion of the old god and his demon army. But it is said, that the returning warriors " + - "have brought seeds of corruption with them, and that victory was the beginning of the end for the underground kingdom." ); - - CHAPTERS.put( ID_HALLS, - "In the past these levels were the outskirts of Metropolis. After the costly victory in the war with the old god " + - "dwarves were too weakened to clear them of remaining demons. Gradually demons have tightened their grip on this place " + - "and now it's called Demon Halls.\n\n" + - "Very few adventurers have ever descended this far..." ); + CHAPTERS.put(ID_SEWERS, Game.getVar(R.string.WndStory_Sewers)); + CHAPTERS.put(ID_PRISON, Game.getVar(R.string.WndStory_Prision)); + CHAPTERS.put(ID_CAVES, Game.getVar(R.string.WndStory_Caves)); + CHAPTERS.put(ID_METROPOLIS, Game.getVar(R.string.WndStory_Metropolis)); + CHAPTERS.put(ID_HALLS, Game.getVar(R.string.WndStory_Halls)); }; private BitmapTextMultiline tf; diff --git a/src/com/watabou/pixeldungeon/windows/WndTitledMessage.java b/src/com/watabou/pixeldungeon/windows/WndTitledMessage.java index 98f5fb28c9..0ee4e0c270 100644 --- a/src/com/watabou/pixeldungeon/windows/WndTitledMessage.java +++ b/src/com/watabou/pixeldungeon/windows/WndTitledMessage.java @@ -17,11 +17,10 @@ */ package com.watabou.pixeldungeon.windows; -import com.watabou.noosa.BitmapTextMultiline; import com.watabou.noosa.Image; import com.watabou.noosa.ui.Component; import com.watabou.pixeldungeon.PixelDungeon; -import com.watabou.pixeldungeon.scenes.PixelScene; +import com.watabou.pixeldungeon.ui.HighlightedText; import com.watabou.pixeldungeon.ui.Window; public class WndTitledMessage extends Window { @@ -31,9 +30,6 @@ public class WndTitledMessage extends Window { private static final int GAP = 2; - private BitmapTextMultiline normal; - private BitmapTextMultiline highlighted; - public WndTitledMessage( Image icon, String title, String message ) { this( new IconTitle( icon, title ), message ); @@ -49,29 +45,11 @@ public WndTitledMessage( Component titlebar, String message ) { titlebar.setRect( 0, 0, width, 0 ); add( titlebar ); - Highlighter hl = new Highlighter( message ); - - normal = PixelScene.createMultiline( hl.text, 6 ); - normal.maxWidth = width; - normal.measure(); - normal.x = titlebar.left(); - normal.y = titlebar.bottom() + GAP; - add( normal ); - - if (hl.isHighlighted()) { - normal.mask = hl.inverted(); - - highlighted = PixelScene.createMultiline( hl.text, 6 ); - highlighted.maxWidth = normal.maxWidth; - highlighted.measure(); - highlighted.x = normal.x; - highlighted.y = normal.y; - add( highlighted ); - - highlighted.mask = hl.mask; - highlighted.hardlight( TITLE_COLOR ); - } + HighlightedText text = new HighlightedText( 6 ); + text.text( message, width ); + text.setPos( titlebar.left(), titlebar.bottom() + GAP ); + add( text ); - resize( width, (int)(normal.y + normal.height()) ); + resize( width, (int)text.bottom() ); } } diff --git a/src/com/watabou/pixeldungeon/windows/WndTradeItem.java b/src/com/watabou/pixeldungeon/windows/WndTradeItem.java index 9000f45de0..d8e2e8178d 100644 --- a/src/com/watabou/pixeldungeon/windows/WndTradeItem.java +++ b/src/com/watabou/pixeldungeon/windows/WndTradeItem.java @@ -18,7 +18,9 @@ package com.watabou.pixeldungeon.windows; import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.mobs.npcs.Shopkeeper; import com.watabou.pixeldungeon.items.EquipableItem; @@ -40,15 +42,15 @@ public class WndTradeItem extends Window { private static final int WIDTH = 120; private static final int BTN_HEIGHT = 16; - private static final String TXT_SALE = "FOR SALE: %s - %dg"; - private static final String TXT_BUY = "Buy for %dg"; - private static final String TXT_SELL = "Sell for %dg"; - private static final String TXT_SELL_1 = "Sell 1 for %dg"; - private static final String TXT_SELL_ALL = "Sell all for %dg"; - private static final String TXT_CANCEL = "Never mind"; + private static final String TXT_SALE = Game.getVar(R.string.WndTradeItem_Sale); + private static final String TXT_BUY = Game.getVar(R.string.WndTradeItem_Buy); + private static final String TXT_SELL = Game.getVar(R.string.WndTradeItem_Sell); + private static final String TXT_SELL_1 = Game.getVar(R.string.WndTradeItem_Sell1); + private static final String TXT_SELL_ALL = Game.getVar(R.string.WndTradeItem_SellAll); + private static final String TXT_CANCEL = Game.getVar(R.string.WndTradeItem_Cancel); - private static final String TXT_SOLD = "You've sold your %s for %dg"; - private static final String TXT_BOUGHT = "You've bought %s for %dg"; + private static final String TXT_SOLD = Game.getVar(R.string.WndTradeItem_Sold); + private static final String TXT_BOUGHT = Game.getVar(R.string.WndTradeItem_Bought); private WndBag owner; @@ -174,10 +176,12 @@ private float createDescription( Item item, boolean forSale ) { titlebar.setRect( 0, 0, WIDTH, 0 ); add( titlebar ); - if (item.levelKnown && item.level > 0) { - titlebar.color( ItemSlot.UPGRADED ); - } else if (item.levelKnown && item.level < 0) { - titlebar.color( ItemSlot.DEGRADED ); + if (item.levelKnown) { + if (item.level() < 0) { + titlebar.color( ItemSlot.DEGRADED ); + } else if (item.level() > 0) { + titlebar.color( item.isBroken() ? ItemSlot.WARNING : ItemSlot.UPGRADED ); + } } BitmapTextMultiline info = PixelScene.createMultiline( item.info(), 6 ); diff --git a/src/com/watabou/pixeldungeon/windows/WndWandmaker.java b/src/com/watabou/pixeldungeon/windows/WndWandmaker.java index 21db6e13c1..e181239f90 100644 --- a/src/com/watabou/pixeldungeon/windows/WndWandmaker.java +++ b/src/com/watabou/pixeldungeon/windows/WndWandmaker.java @@ -17,76 +17,41 @@ */ package com.watabou.pixeldungeon.windows; -import com.watabou.noosa.BitmapTextMultiline; +import com.watabou.noosa.Game; import com.watabou.pixeldungeon.Dungeon; +import com.watabou.pixeldungeon.R; import com.watabou.pixeldungeon.actors.hero.Hero; import com.watabou.pixeldungeon.actors.mobs.npcs.Wandmaker; import com.watabou.pixeldungeon.items.Item; -import com.watabou.pixeldungeon.items.wands.Wand; -import com.watabou.pixeldungeon.scenes.PixelScene; -import com.watabou.pixeldungeon.sprites.ItemSprite; -import com.watabou.pixeldungeon.ui.RedButton; -import com.watabou.pixeldungeon.ui.Window; import com.watabou.pixeldungeon.utils.GLog; import com.watabou.pixeldungeon.utils.Utils; -public class WndWandmaker extends Window { +public class WndWandmaker extends WndQuest { - private static final String TXT_MESSAGE = - "Oh, I see you have succeeded! I do hope it hasn't troubled you too much. " + - "As I promised, you can choose one of my high quality wands."; - private static final String TXT_BATTLE = "Battle wand"; - private static final String TXT_NON_BATTLE = "Non-battle wand"; + private static final String TXT_MESSAGE = Game.getVar(R.string.WndWandmaker_Message); + private static final String TXT_BATTLE = Game.getVar(R.string.WndWandmaker_Battle); + private static final String TXT_NON_BATTLE = Game.getVar(R.string.WndWandmaker_NonBattle); + + private static final String TXT_FARAWELL = Game.getVar(R.string.WndWandmaker_Farawell); - private static final String TXT_FARAWELL = "Good luck in your quest, %s!"; + private Wandmaker wandmaker; + private Item questItem; - private static final int WIDTH = 120; - private static final int BTN_HEIGHT = 20; - private static final float GAP = 2; public WndWandmaker( final Wandmaker wandmaker, final Item item ) { - super(); - - IconTitle titlebar = new IconTitle(); - titlebar.icon( new ItemSprite( item.image(), null ) ); - titlebar.label( Utils.capitalize( item.name() ) ); - titlebar.setRect( 0, 0, WIDTH, 0 ); - add( titlebar ); - - BitmapTextMultiline message = PixelScene.createMultiline( TXT_MESSAGE, 6 ); - message.maxWidth = WIDTH; - message.measure(); - message.y = titlebar.bottom() + GAP; - add( message ); - - RedButton btnBattle = new RedButton( TXT_BATTLE ) { - @Override - protected void onClick() { - selectReward( wandmaker, item, Wandmaker.Quest.wand1 ); - } - }; - btnBattle.setRect( 0, message.y + message.height() + GAP, WIDTH, BTN_HEIGHT ); - add( btnBattle ); + super( wandmaker, TXT_MESSAGE, TXT_BATTLE, TXT_NON_BATTLE ); - RedButton btnNonBattle = new RedButton( TXT_NON_BATTLE ) { - @Override - protected void onClick() { - selectReward( wandmaker, item, Wandmaker.Quest.wand2 ); - } - }; - btnNonBattle.setRect( 0, btnBattle.bottom() + GAP, WIDTH, BTN_HEIGHT ); - add( btnNonBattle ); - - resize( WIDTH, (int)btnNonBattle.bottom() ); + this.wandmaker = wandmaker; + questItem = item; } - private void selectReward( Wandmaker wandmaker, Item item, Wand reward ) { - - hide(); - - item.detach( Dungeon.hero.belongings.backpack ); + @Override + protected void onSelect( int index ) { + questItem.detach( Dungeon.hero.belongings.backpack ); + + Item reward = index == 0 ? Wandmaker.Quest.wand1 : Wandmaker.Quest.wand2; reward.identify(); if (reward.doPickUp( Dungeon.hero )) { GLog.i( Hero.TXT_YOU_NOW_HAVE, reward.name() );